home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / QUILT.ZIP / QUILT.C next >
Text File  |  1991-06-24  |  4KB  |  123 lines

  1.  
  2. // This is QUILT, a PM demo
  3.  
  4. #define INCL_DOSDATETIME
  5. #define INCL_GPIPRIMITIVES
  6. #define INCL_WININPUT
  7. #define INCL_WINTIMER
  8. #include <os2.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #define PMG_CASU       ( KC_CTRL | KC_ALT | KC_SHIFT | KC_KEYUP )
  12. #define MY_TIMER       17
  13. #define USERMSG1       (WM_USER+0)
  14.  
  15. int clr(void)
  16.    {
  17.    static int colors[16]={ CLR_BLACK,CLR_WHITE,CLR_RED,CLR_YELLOW,CLR_BLUE,
  18.       CLR_CYAN,CLR_GREEN,CLR_PINK,CLR_PALEGRAY,CLR_DARKBLUE,CLR_DARKRED,
  19.       CLR_DARKPINK,CLR_DARKGREEN,CLR_BROWN,CLR_DARKCYAN,CLR_DARKGRAY };
  20.    return colors[rand()%16];
  21.    }
  22.  
  23. MRESULT EXPENTRY CWProc(HWND hwnd,USHORT msg,MPARAM mp1,MPARAM mp2)
  24.    {
  25.    static HAB myhab;
  26.    static POINTL box,ll,ur,aptl[3];
  27.    static HPS hpsWindow;
  28.    static int dx,dy,nx,ny,rate,target,tx,ty;
  29.    switch (msg)
  30.       {
  31.    case WM_CHAR:
  32.       if ( 0==(SHORT1FROMMP(mp1) & PMG_CASU)
  33.       && (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) )
  34.          {
  35.          if ( '\x1b'==CHAR1FROMMP(mp2) )
  36.             { // Esc key
  37.             WinInvalidateRect(hwnd,NULL,TRUE);
  38.             break;
  39.             }
  40.          if ( VK_F3==CHAR3FROMMP(mp2) )
  41.             {
  42.             WinStopTimer(myhab,hwnd,MY_TIMER);
  43.             WinPostMsg(hwnd,WM_CLOSE,0L,0L);
  44.             break;
  45.             }
  46.          }
  47.       break;
  48.    case WM_PAINT:        
  49.       WinInvalidateRect(hwnd,NULL,TRUE);
  50.       hpsWindow=WinBeginPaint(hwnd,NULL,(PRECTL) aptl);
  51.       GpiBitBlt(hpsWindow,NULL,3L,aptl,ROP_ZERO,BBO_OR);  // CLEAR TO BLACK
  52.       WinEndPaint(hpsWindow);
  53.       return (MRESULT) FALSE;
  54.    case WM_SIZE:
  55.       dx=SHORT1FROMMP(mp2)/target;
  56.       dy=SHORT2FROMMP(mp2)/target;
  57.       ur.x=SHORT1FROMMP(mp2);
  58.       ur.y=SHORT2FROMMP(mp2);
  59.       if ( 0==dx ) dx=2; 
  60.       if ( 0==dy ) dy=2; 
  61.       nx=(short) ur.x/dx;
  62.       ny=(short) ur.y/dy;
  63.       return (MRESULT) FALSE;
  64. //1
  65.    case WM_CREATE:
  66.       WinStartTimer(myhab,hwnd,MY_TIMER,rate);
  67.       return (MRESULT) FALSE;
  68.    case WM_TIMER:
  69.       if ( MY_TIMER!=SHORT1FROMMP(mp1) ) break;
  70.       hpsWindow=WinGetPS(hwnd);
  71.       GpiSetColor(hpsWindow,(long) clr());
  72.       tx=rand()%nx; ty=rand()%ny;
  73.       box.x=dx*tx; box.y=dy*ty;
  74.       GpiMove(hpsWindow,&box);
  75.       box.x+=dx-1;
  76.       box.y+=dy-1;
  77.       GpiBox(hpsWindow,DRO_OUTLINEFILL,&box,0L,0L);
  78.       WinReleasePS(hpsWindow);
  79.       break;
  80.    case USERMSG1:
  81.       myhab=PVOIDFROMMP(mp1);
  82.       target=SHORT1FROMMP(mp2);
  83.       rate=SHORT2FROMMP(mp2);
  84.       ll.x=ll.y=0L;
  85.       return (MRESULT) FALSE;
  86.       }
  87.    return WinDefWindowProc(hwnd,msg,mp1,mp2);
  88.    }
  89.  
  90. int main(int argc, char *argv[])
  91.    {
  92.    static HAB hab;
  93.    static HMQ hmq;
  94.    static HWND hwndFrame,hwndClient;
  95.    static QMSG qmsg;
  96.    static ULONG flFrFl=
  97.           FCF_TITLEBAR+FCF_SYSMENU+FCF_MINMAX+FCF_SIZEBORDER+FCF_SHELLPOSITION;
  98.    static char szCC[]="Quilt";
  99.    DATETIME dt;
  100.    static int p1=8,p2=50;
  101.    if ( 1<argc ) sscanf(argv[1],"%d",&p1);
  102.    if ( 2<argc ) sscanf(argv[2],"%d",&p2);
  103.    DosGetDateTime(&dt);
  104.    srand(dt.hours+dt.minutes+dt.seconds+dt.hundredths+dt.day+dt.month+dt.year);
  105.    hab=WinInitialize(0);
  106.    CWProc(NULL,USERMSG1,MPFROMP(hab),MPFROM2SHORT(p1,p2));   // cheat!
  107.    hmq=WinCreateMsgQueue(hab,0); 
  108.    WinRegisterClass(hab,szCC,CWProc,CS_SIZEREDRAW,0);
  109.    hwndFrame=WinCreateStdWindow(HWND_DESKTOP,WS_VISIBLE,&flFrFl,
  110.                                 szCC,szCC,0L,NULL,0,&hwndClient);
  111.    if ( NULL==hwndFrame ) WinMessageBox(HWND_DESKTOP,HWND_DESKTOP,
  112.        "Unable to create window",szCC,0,MB_OK | MB_ICONEXCLAMATION );
  113.    else
  114.       {
  115.       while ( WinGetMsg(hab,&qmsg,NULL,0,0) ) WinDispatchMsg(hab,&qmsg);
  116.       WinDestroyWindow(hwndFrame);
  117.       }
  118.    WinDestroyMsgQueue(hmq);
  119.    WinTerminate(hab);
  120.    return 0;
  121.    }
  122. //2
  123.