Category : Windows 3.X Files
Archive   : SPEXTN.ZIP
Filename : STICKS.C

 
Output of file : STICKS.C contained in archive : SPEXTN.ZIP
/* Sample source for STICKS screen saver for Screen Peace */
/* Copyright 1990 Anthony Andersen */

#include

#include "sticks.h"

#define IDD_CHECKBOX 10
#define IDD_EDIT 11

unsigned long seed;
char buffer[10];
int enabled;
unsigned erasecount;

char savername[] = "Sticks";
char appname[] = "Screen Peace";
char keyname[] = "Sticks On";
char key2name[] = "Num Sticks";

/* this is called by the default dll entry code during the */
/* load library call - always happens BEFORE any other call */
/* in the dll. */

int FAR PASCAL LibMain(hModule, wDataSeg, cbHeapSize, lpszCmdLine)

HANDLE hModule;
WORD wDataSeg;
WORD cbHeapSize;
LPSTR lpszCmdLine;

{

/* set up things here */

erasecount = GetProfileInt(appname,key2name,250);
GetProfileString(appname,keyname,"y",buffer,9);
if (buffer[0] != 'n' && buffer[0] != 'N') {
enabled = TRUE;
}
return (1);
}


/* this is called by Windows when the dll is released */

int FAR PASCAL WEP (bSystemExit)
int bSystemExit;

{
/* get rid of things you allocated in the LibMain proc here */

return (1);
}

/* this is called (probably lots of times) by Screen Peace */
/* be careful not to allocate memory or objects here */

char FAR * FAR PASCAL saverinit(BOOL far *savenabled)

{
/* tell enable state */

*savenabled = enabled;

/* You must return either the saver's name or NULL */

return(savername);
}

/* dialog proc for user customization */

BOOL FAR PASCAL saverdlgproc(HWND hdlg,unsigned message,WORD wparam,LONG lparam)

{
switch (message) {

case WM_INITDIALOG:

/* set the dialog items */

SetDlgItemInt(hdlg,IDD_EDIT,erasecount,FALSE);
SendDlgItemMessage(hdlg,IDD_CHECKBOX,BM_SETCHECK,enabled,0);
return (TRUE);

case WM_COMMAND:

if (wparam == IDOK) {

/* get the new dialog items */

erasecount = GetDlgItemInt(hdlg,IDD_EDIT,NULL,FALSE);
enabled = (int)SendDlgItemMessage(hdlg,IDD_CHECKBOX,BM_GETCHECK,0,0);

/* write the profile information */

if (enabled) buffer[0] = 'y';
else buffer[0] = 'n';
buffer[1] = '\0';
WriteProfileString(appname,keyname,buffer);
wsprintf(buffer,"%u",erasecount);
WriteProfileString(appname,key2name,buffer);

/* return value in EndDialog doesn't matter */

EndDialog(hdlg,TRUE);
return (TRUE);
}
else if (wparam == IDCANCEL) {

/* just return - return value in EndDialog doesn't matter */

EndDialog(hdlg,FALSE);
return (TRUE);
}
break;

}

return (FALSE);
}

/* returns pseudorandom number from 0 to x-1 */

int arand(int x)
{
seed = seed*0x343fd+0x269ec3;
return (int)(((seed>>16)&0x7fff)*x>>15);
}

/* the main drawing routine */

VOID FAR PASCAL saverdraw(HWND hwnd,HDC hdc,HANDLE hinst,BOOL (FAR PASCAL *yieldproc)(VOID))

{
RECT rect;
HPEN hpen;
HPEN hOldPen;
HBRUSH hbrush;
int x1,x2,y1,y2;
int pw,pc;
unsigned count;

/* the rect will fill the screen */

GetWindowRect(hwnd,&rect);

/* seed the pseudorandom number generator */

seed = GetTickCount();

/* get black brush for erasing screen */

hbrush = GetStockObject(BLACK_BRUSH);

count = 0;

/* You MUST "black out" the screen if you want the screen blacked out */

FillRect(hdc,&rect,hbrush);

/* make sure to call yieldproc OFTEN - windows is locked up until */
/* yieldproc is called. */

while ((*yieldproc)()) {

/* get "random" color and width */

pc = arand(16);
pw = arand(10);

/* select pen and save old pen */

hpen = CreatePen(PS_SOLID,pw,pc+0x1000000);
hOldPen = SelectObject(hdc,hpen);

/* get coordinates of endpoints of line */

x1 = arand(rect.right);
x2 = arand(rect.right);
y1 = arand(rect.bottom);
y2 = arand(rect.bottom);

/* draw line */

MoveTo(hdc,x1,y1);
LineTo(hdc,x2,y2);

/* delete pen */

SelectObject(hdc,hOldPen);
DeleteObject(hpen);

/* black out screen if appropriate */

count++;
if (count == erasecount) {
count = 0;
FillRect(hdc,&rect,hbrush);
}
}

}






  3 Responses to “Category : Windows 3.X Files
Archive   : SPEXTN.ZIP
Filename : STICKS.C

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/