ReactOS 0.4.15-dev-7842-g558ab78
message.c File Reference
#include <windows.h>
#include "globals.h"
#include "message.h"
#include "matrix.h"
Include dependency graph for message.c:

Go to the source code of this file.

Functions

WORD crc_msgrand (WORD reg)
 
void SetMatrixMessage (MATRIX_MESSAGE *msg, HFONT hFont, TCHAR *text)
 
void DrawMatrixMessage (MATRIX *matrix, MATRIX_MESSAGE *msg, HDC hdc)
 
void RevealMatrixMessage (MATRIX_MESSAGE *msg, int amount)
 
void ClearMatrixMessage (MATRIX_MESSAGE *msg)
 
int MessageSpeed ()
 
void DoMatrixMessage (HDC hdc, MATRIX *matrix)
 
void SetMessageFont (HWND hwnd, TCHAR *szFontName, int nPointSize, BOOL fBold)
 
MATRIX_MESSAGEInitMatrixMessage (HWND hwnd, int width, int height)
 

Function Documentation

◆ ClearMatrixMessage()

void ClearMatrixMessage ( MATRIX_MESSAGE msg)

Definition at line 129 of file message.c.

130{
131 int x, y;
132
133 for(x = 0; x < msg->width; x++)
134 for(y = 0; y < msg->height; y++)
135 msg->message[x][y] = 0;
136}
#define msg(x)
Definition: auth_time.c:54
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by DoMatrixMessage(), and InitMatrixMessage().

◆ crc_msgrand()

WORD crc_msgrand ( WORD  reg)

Definition at line 23 of file message.c.

24{
25 const WORD mask = 0xb400;
26
27 if(reg & 1)
28 reg = (reg >> 1) ^ mask;
29 else
30 reg = (reg >> 1);
31
32 return reg;
33}
unsigned short WORD
Definition: ntddk_ex.h:93
GLenum GLint GLuint mask
Definition: glext.h:6028
static int reg
Definition: i386-dis.c:1290

Referenced by RevealMatrixMessage().

◆ DoMatrixMessage()

void DoMatrixMessage ( HDC  hdc,
MATRIX matrix 
)

Definition at line 149 of file message.c.

150{
151 MATRIX_MESSAGE *msg = matrix->message;
152
153 int RealSpeed = MessageSpeed();
154
155 if(g_nNumMessages > 0)
156 {
157 // nothing to do yet..
158 if(msg->counter++ < 0)
159 return;
160
161 // has counter reached limit..clear the message
162 if(msg->counter++ == RealSpeed / 2 + (RealSpeed/4))
164
165 // reset counter + display a new message
166 if(msg->counter >= RealSpeed)
167 {
168 // mark all message-cells as being "invisible" so the
169 // message gets cleared by the matrix decoding naturally
170
172 msg->msgindex = crc_rand() % g_nNumMessages;
173 else
174 msg->msgindex = (msg->msgindex + 1) % g_nNumMessages;
175
176 // make a new message..initially invisible
177 SetMatrixMessage(msg, 0, g_szMessages[msg->msgindex]);
178
179 msg->counter = -(int)(crc_rand() % MSGSPEED_MAX);
180 }
181 // reveal the next part of the message
182 else if(msg->counter < RealSpeed / 2)
183 {
185 w = (1 << 16) + ((w<<16) / MSGSPEED_MAX);
186 w = (w * 3 * g_nMessageSpeed) >> 16;
187
188 RevealMatrixMessage(msg, w + 100);
189 }
190
191 //
192 // draw whatever part of the message is visible at this time
193 //
195 }
196}
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GLuint GLenum matrix
Definition: glext.h:9407
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
int g_nNumMessages
Definition: settings.c:14
BOOL g_fRandomizeMessages
Definition: settings.c:21
TCHAR g_szMessages[MAX_MESSAGES][MAXMSG_LENGTH]
Definition: settings.c:13
int g_nMessageSpeed
Definition: settings.c:15
#define MSGSPEED_MIN
Definition: globals.h:28
#define MSGSPEED_MAX
Definition: globals.h:27
int crc_rand()
Definition: matrix.c:18
int MessageSpeed()
Definition: message.c:141
void RevealMatrixMessage(MATRIX_MESSAGE *msg, int amount)
Definition: message.c:113
void DrawMatrixMessage(MATRIX *matrix, MATRIX_MESSAGE *msg, HDC hdc)
Definition: message.c:97
void ClearMatrixMessage(MATRIX_MESSAGE *msg)
Definition: message.c:129
void SetMatrixMessage(MATRIX_MESSAGE *msg, HFONT hFont, TCHAR *text)
Definition: message.c:38
HDC hdc
Definition: main.c:9

Referenced by DecodeMatrix().

◆ DrawMatrixMessage()

void DrawMatrixMessage ( MATRIX matrix,
MATRIX_MESSAGE msg,
HDC  hdc 
)

Definition at line 97 of file message.c.

98{
99 int x, y;
100
101 for(x = 0; x < msg->width; x++)
102 for(y = 0; y < msg->height; y++)
103 if((msg->message[x][y] & 0x8000) &&
104 (msg->message[x][y] & 0x00FF))
105 {
107 }
108}
#define MAX_INTENSITY
Definition: globals.h:15
#define GLYPH_HEIGHT
Definition: globals.h:18
#define GLYPH_WIDTH
Definition: globals.h:17
GLYPH RandomGlyph(int intensity)
Definition: matrix.c:45
void DrawGlyph(MATRIX *matrix, HDC hdc, int xpos, int ypos, GLYPH glyph)
Definition: matrix.c:167

Referenced by DoMatrixMessage().

◆ InitMatrixMessage()

MATRIX_MESSAGE * InitMatrixMessage ( HWND  hwnd,
int  width,
int  height 
)

Definition at line 229 of file message.c.

230{
232
233 if((msg = malloc(sizeof(MATRIX_MESSAGE))) == 0)
234 return 0;
235
237
238 msg->msgindex = 0;
239 msg->width = min(width, MAXMSG_WIDTH);
240 msg->height = min(height, MAXMSG_HEIGHT);
241 msg->counter = -(int)(crc_rand() % MSGSPEED_MIN + MSGSPEED_MIN);
242
243 msg->random_reg1 = (WORD)GetTickCount();
244
246
248
249 return msg;
250}
#define malloc
Definition: debug_ros.c:4
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
#define MAXMSG_WIDTH
Definition: globals.h:23
#define MAXMSG_HEIGHT
Definition: globals.h:24
BOOL g_fFontBold
Definition: settings.c:22
TCHAR g_szFontName[]
Definition: settings.c:16
int g_nFontSize
Definition: settings.c:20
void SetMessageFont(HWND hwnd, TCHAR *szFontName, int nPointSize, BOOL fBold)
Definition: message.c:201
#define min(a, b)
Definition: monoChain.cc:55
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by CreateMatrix().

◆ MessageSpeed()

int MessageSpeed ( )

Definition at line 141 of file message.c.

Referenced by DoMatrixMessage().

◆ RevealMatrixMessage()

void RevealMatrixMessage ( MATRIX_MESSAGE msg,
int  amount 
)

Definition at line 113 of file message.c.

114{
115 while(amount--)
116 {
117 int pos;
118
119 msg->random_reg1 = crc_msgrand(msg->random_reg1);
120 pos = msg->random_reg1 & 0xffff;
121
122 msg->message[pos / 256][pos % 256] |= GLYPH_REDRAW;
123 }
124}
#define GLYPH_REDRAW
Definition: matrix.h:20
WORD crc_msgrand(WORD reg)
Definition: message.c:23

Referenced by DoMatrixMessage().

◆ SetMatrixMessage()

void SetMatrixMessage ( MATRIX_MESSAGE msg,
HFONT  hFont,
TCHAR text 
)

Definition at line 38 of file message.c.

39{
40 HDC hdc;
41 RECT rect;
42 int x, y;
43
44 HDC hdcMessage;
45 HBITMAP hbmMessage;
46
47 HANDLE hOldFont, hOldBmp;
48
49 //
50 // Create a monochrome off-screen buffer
51 //
52 hdc = GetDC(NULL);
53
54 hdcMessage = CreateCompatibleDC(hdc);
55 hbmMessage = CreateBitmap(MAXMSG_WIDTH, MAXMSG_HEIGHT, 1, 1, 0);
56 hOldBmp = SelectObject(hdcMessage, hbmMessage);
57
59
60 //
61 // Draw text into bitmap
62 //
63 SetRect(&rect, 0, 0, msg->width, MAXMSG_HEIGHT);
65
66 hOldFont = SelectObject(hdcMessage, g_hFont);
68
69 OffsetRect(&rect, (msg->width-(rect.right-rect.left))/2, (msg->height-(rect.bottom-rect.top))/2);
71
72 //
73 // Convert bitmap into an array of cells for easy drawing
74 //
75 for(y = 0; y < msg->height; y++)
76 {
77 for(x = 0; x < msg->width; x++)
78 {
79 msg->message[x][y] = GetPixel(hdcMessage, x, y) ? 0 : 1;
80 }
81 }
82
83 //
84 // Cleanup
85 //
86 SelectObject(hdcMessage, hOldFont);
87 SelectObject(hdcMessage, hOldBmp);
88
89 DeleteDC(hdcMessage);
90 DeleteObject(hbmMessage);
91}
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
#define NULL
Definition: types.h:112
const WCHAR * text
Definition: package.c:1799
pKey DeleteObject()
HFONT g_hFont
Definition: settings.c:25
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:92
& rect
Definition: startmenu.cpp:1413
HGDIOBJ WINAPI GetStockObject(_In_ int)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define WHITE_BRUSH
Definition: wingdi.h:902
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI DeleteDC(_In_ HDC)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define DT_CENTER
Definition: winuser.h:527
#define DrawText
Definition: winuser.h:5771
#define DT_WORDBREAK
Definition: winuser.h:544
HDC WINAPI GetDC(_In_opt_ HWND)
#define DT_VCENTER
Definition: winuser.h:543
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
#define DT_CALCRECT
Definition: winuser.h:526
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by DoMatrixMessage(), and InitMatrixMessage().

◆ SetMessageFont()

void SetMessageFont ( HWND  hwnd,
TCHAR szFontName,
int  nPointSize,
BOOL  fBold 
)

Definition at line 201 of file message.c.

202{
203 int lfHeight;
204 HDC hdc;
205 HFONT hFont;
206
207 hdc = GetDC(hwnd);
208
209 lfHeight = -MulDiv(nPointSize, GetDeviceCaps(hdc, LOGPIXELSY), 72);
210
212
213 hFont = CreateFont(lfHeight, 0, 0, 0, fBold ? FW_BOLD: FW_NORMAL, 0, 0, 0,
216
217 if(hFont != 0)
218 {
219 if(g_hFont != 0)
221
222 g_hFont = hFont;
223 }
224}
HFONT hFont
Definition: main.c:53
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
#define DEFAULT_PITCH
Definition: wingdi.h:443
#define ANTIALIASED_QUALITY
Definition: wingdi.h:440
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define FW_BOLD
Definition: wingdi.h:378
#define LOGPIXELSY
Definition: wingdi.h:719
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:415
#define CreateFont
Definition: wingdi.h:4443
#define ANSI_CHARSET
Definition: wingdi.h:383
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:426
#define FW_NORMAL
Definition: wingdi.h:373

Referenced by InitMatrixMessage(), and UpdatePreview().