home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 8 Other
/
08-Other.zip
/
QUILT.ZIP
/
QUILT.C
next >
Wrap
Text File
|
1991-06-24
|
4KB
|
123 lines
// This is QUILT, a PM demo
#define INCL_DOSDATETIME
#define INCL_GPIPRIMITIVES
#define INCL_WININPUT
#define INCL_WINTIMER
#include <os2.h>
#include <stdio.h>
#include <stdlib.h>
#define PMG_CASU ( KC_CTRL | KC_ALT | KC_SHIFT | KC_KEYUP )
#define MY_TIMER 17
#define USERMSG1 (WM_USER+0)
int clr(void)
{
static int colors[16]={ CLR_BLACK,CLR_WHITE,CLR_RED,CLR_YELLOW,CLR_BLUE,
CLR_CYAN,CLR_GREEN,CLR_PINK,CLR_PALEGRAY,CLR_DARKBLUE,CLR_DARKRED,
CLR_DARKPINK,CLR_DARKGREEN,CLR_BROWN,CLR_DARKCYAN,CLR_DARKGRAY };
return colors[rand()%16];
}
MRESULT EXPENTRY CWProc(HWND hwnd,USHORT msg,MPARAM mp1,MPARAM mp2)
{
static HAB myhab;
static POINTL box,ll,ur,aptl[3];
static HPS hpsWindow;
static int dx,dy,nx,ny,rate,target,tx,ty;
switch (msg)
{
case WM_CHAR:
if ( 0==(SHORT1FROMMP(mp1) & PMG_CASU)
&& (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) )
{
if ( '\x1b'==CHAR1FROMMP(mp2) )
{ // Esc key
WinInvalidateRect(hwnd,NULL,TRUE);
break;
}
if ( VK_F3==CHAR3FROMMP(mp2) )
{
WinStopTimer(myhab,hwnd,MY_TIMER);
WinPostMsg(hwnd,WM_CLOSE,0L,0L);
break;
}
}
break;
case WM_PAINT:
WinInvalidateRect(hwnd,NULL,TRUE);
hpsWindow=WinBeginPaint(hwnd,NULL,(PRECTL) aptl);
GpiBitBlt(hpsWindow,NULL,3L,aptl,ROP_ZERO,BBO_OR); // CLEAR TO BLACK
WinEndPaint(hpsWindow);
return (MRESULT) FALSE;
case WM_SIZE:
dx=SHORT1FROMMP(mp2)/target;
dy=SHORT2FROMMP(mp2)/target;
ur.x=SHORT1FROMMP(mp2);
ur.y=SHORT2FROMMP(mp2);
if ( 0==dx ) dx=2;
if ( 0==dy ) dy=2;
nx=(short) ur.x/dx;
ny=(short) ur.y/dy;
return (MRESULT) FALSE;
//1
case WM_CREATE:
WinStartTimer(myhab,hwnd,MY_TIMER,rate);
return (MRESULT) FALSE;
case WM_TIMER:
if ( MY_TIMER!=SHORT1FROMMP(mp1) ) break;
hpsWindow=WinGetPS(hwnd);
GpiSetColor(hpsWindow,(long) clr());
tx=rand()%nx; ty=rand()%ny;
box.x=dx*tx; box.y=dy*ty;
GpiMove(hpsWindow,&box);
box.x+=dx-1;
box.y+=dy-1;
GpiBox(hpsWindow,DRO_OUTLINEFILL,&box,0L,0L);
WinReleasePS(hpsWindow);
break;
case USERMSG1:
myhab=PVOIDFROMMP(mp1);
target=SHORT1FROMMP(mp2);
rate=SHORT2FROMMP(mp2);
ll.x=ll.y=0L;
return (MRESULT) FALSE;
}
return WinDefWindowProc(hwnd,msg,mp1,mp2);
}
int main(int argc, char *argv[])
{
static HAB hab;
static HMQ hmq;
static HWND hwndFrame,hwndClient;
static QMSG qmsg;
static ULONG flFrFl=
FCF_TITLEBAR+FCF_SYSMENU+FCF_MINMAX+FCF_SIZEBORDER+FCF_SHELLPOSITION;
static char szCC[]="Quilt";
DATETIME dt;
static int p1=8,p2=50;
if ( 1<argc ) sscanf(argv[1],"%d",&p1);
if ( 2<argc ) sscanf(argv[2],"%d",&p2);
DosGetDateTime(&dt);
srand(dt.hours+dt.minutes+dt.seconds+dt.hundredths+dt.day+dt.month+dt.year);
hab=WinInitialize(0);
CWProc(NULL,USERMSG1,MPFROMP(hab),MPFROM2SHORT(p1,p2)); // cheat!
hmq=WinCreateMsgQueue(hab,0);
WinRegisterClass(hab,szCC,CWProc,CS_SIZEREDRAW,0);
hwndFrame=WinCreateStdWindow(HWND_DESKTOP,WS_VISIBLE,&flFrFl,
szCC,szCC,0L,NULL,0,&hwndClient);
if ( NULL==hwndFrame ) WinMessageBox(HWND_DESKTOP,HWND_DESKTOP,
"Unable to create window",szCC,0,MB_OK | MB_ICONEXCLAMATION );
else
{
while ( WinGetMsg(hab,&qmsg,NULL,0,0) ) WinDispatchMsg(hab,&qmsg);
WinDestroyWindow(hwndFrame);
}
WinDestroyMsgQueue(hmq);
WinTerminate(hab);
return 0;
}
//2