#ifdef PM #include #define INCL_WIN #define INCL_GPI #include INT _acrtused = 0; #endif #ifdef WIN #include #include #endif #include "std.h" #include "scrsave.h" INT rand(); INT dxScreen, dyScreen; INT dxScreenD2, dyScreenD2; typedef struct _str { SHORT x, y, z; SHORT xo, yo; } STR; #define istrMax 64 STR rgstr [istrMax]; Animate(CVS hps); MakeStar(STR * pstr); SetPel(HDC hdc, INT x, INT y, INT brght); #define dzStep 4 #define magic 256 BOOL APIENTRY CoolProc(hwnd, wm, wParam, lParam) HWND hwnd; WORD wm; WPARAM wParam; LONG lParam; { switch (wm) { case WM_INITDIALOG: MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); return TRUE; case WM_COMMAND: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } BOOL EXPENTRY ScrSaveProc(INT ssm, LPVOID l1, LONG_PTR l2, LONG_PTR l3) { CHAR FAR * lpsz; CHAR FAR * lpch; switch (ssm) { default: return fFalse; case SSM_DIALOG: MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); MessageBeep(0); /* { FARPROC lpproc; lpproc = MakeProcInstance(CoolProc, (HANDLE) l1); DialogBox((HANDLE) l1, "Cool", (HWND) l2, lpproc); FreeProcInstance(lpproc); }*/ break; case SSM_OPEN: lpsz = (PSZ) l1; lpch = "Stars"; while ((*lpsz++ = *lpch++) != '\0') ; lpsz = (PSZ) l2; lpch = "Drifting Through Space\n\nby Brad Christian"; while ((*lpsz++ = *lpch++) != '\0') ; dxScreen = GetSystemMetrics(SM_CXSCREEN); dyScreen = GetSystemMetrics(SM_CYSCREEN); dxScreenD2 = dxScreen / 2; dyScreenD2 = dyScreen / 2; break; case SSM_ANIMATE: Animate((CVS) l1); break; } return fTrue; } Animate(CVS hps) { INT x, y; INT istr; STR * pstr; pstr = rgstr; for (istr = 0; istr < istrMax; istr += 1, pstr += 1) { if ((pstr->z -= dzStep) <= 0) MakeStar(pstr); x = pstr->x * magic / pstr->z + dxScreenD2; y = pstr->y * magic / pstr->z + dyScreenD2; SetPel(hps, pstr->xo, pstr->yo, 0); if (x < 0 || y < 0 || x >= dxScreen || y >= dyScreen) MakeStar(pstr); else { SetPel(hps, x, y, 256 - pstr->z); pstr->xo = (SHORT)x; pstr->yo = (SHORT)y; } } } MakeStar(STR * pstr) { pstr->x = WRand(dxScreen) - dxScreenD2; pstr->y = WRand(dyScreen) - dyScreenD2; pstr->z = WRand(256) + 1; } #ifdef PM LONG mpbrghtclr [] = { CLR_BLACK, CLR_DARKGRAY, CLR_PALEGRAY, CLR_WHITE, CLR_YELLOW }; #endif #ifdef PM SetPel(HPS hps, INT x, INT y, INT brght) { RECTL rectl; rectl.xLeft = x; rectl.xRight = x + 1; rectl.yBottom = y; rectl.yTop = y + 1; if (brght != 0) { brght >>= 5; // 0 <= brght <= 7 if (brght > 3) { rectl.xRight += 1; rectl.yTop += 1; brght >>= 1; } brght += 1; } else { rectl.xRight += 1; rectl.yTop += 1; } WinFillRect(hps, &rectl, mpbrghtclr[brght]); } #endif #ifdef WIN SetPel(HDC hdc, INT x, INT y, INT brght) { SetPixel(hdc, x, y, ((LONG) brght << 16) | (brght << 8) | brght); } #endif