home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 1 / Mecomp-CD.iso / amiga / systempatch / sysi2 / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-12  |  4.1 KB  |  163 lines

  1. #include "sysi2.h"
  2.  
  3. #include <dos/dos.h>
  4.  
  5. UBYTE *vers = "\0$VER: SysI2 2.0";
  6.  
  7. /* This will show you a demostration of the new images without replacing the old ones. */
  8. /* comment it out to apply the new images to the system.                               */
  9.  
  10. //#define DEMO
  11.  
  12. LONG Enabled=1;
  13.  
  14. void test(void);
  15. void install(void);
  16.  
  17. struct SignalSemaphore TRBMSem;  /* To protect and share TmpRasBM */
  18. struct BitMap *TmpRasBM;
  19.  
  20. struct IntuitionBase *IntuitionBase;
  21.  
  22. void main(void)
  23. {
  24.   if (IntuitionBase = (struct IntuitionBase *)OpenLibrary((UBYTE *)"intuition.library", 36L))
  25.   {
  26.     InitSemaphore(&TRBMSem);
  27.     if(TmpRasBM=MyAllocBM(100,100,1,BMF_DISPLAYABLE,0))
  28.     {
  29. #ifndef DEMO
  30.       install();
  31. #else
  32.       test();
  33. #endif
  34.       MyFreeBM(TmpRasBM);
  35.     }    
  36.     CloseLibrary((struct Library *)IntuitionBase);
  37.   }
  38. }
  39.  
  40. #ifndef DEMO
  41. void install(void)
  42. {
  43.   Class *cl,*syscl;
  44.   STRPTR oldsysname;
  45.  
  46.    if(cl=MakeClass(0,(UBYTE *)"sysiclass",NULL,0,0))
  47.   {
  48.     syscl=cl->cl_Super;
  49.     RemoveClass(syscl);
  50.     oldsysname=syscl->cl_ID;
  51.     syscl->cl_ID=(UBYTE *)"oldsysiclass";
  52.     AddClass(syscl);
  53.     FreeClass(cl);
  54.     if(cl=MakeClass((UBYTE *)"sysiclass",(UBYTE *)"oldsysiclass",NULL,sizeof(struct SysIData),0))
  55.     {
  56.       cl->cl_Dispatcher.h_Entry=Dispatcher;
  57.       AddClass(cl);
  58.       while(1)        // endless waiting loop
  59.       {
  60.         Wait(SIGBREAKF_CTRL_C);
  61.         Enabled=!Enabled;
  62.       }
  63.       FreeClass(cl);  // should never get executed!
  64.     }
  65.     syscl->cl_ID=oldsysname;
  66.   }
  67. }
  68. #else
  69.  
  70. #define NUM_IMAGES 13
  71. void test(void)
  72. {
  73.   struct Window *w;
  74.   struct IntuiMessage *msg;
  75.   Class *cl;
  76.   Object *o[NUM_IMAGES];
  77.   struct DrawInfo *di;
  78.   WORD width=32,l,done=0;
  79.   LONG state=0;
  80.   ULONG sysnum[]=
  81.   {
  82.     ZOOMIMAGE,
  83.     SIZEIMAGE,
  84.     CLOSEIMAGE,    
  85.     SDEPTHIMAGE,    
  86.     DEPTHIMAGE,    
  87.     LEFTIMAGE,
  88.     UPIMAGE,
  89.     RIGHTIMAGE,
  90.     DOWNIMAGE,
  91.     CHECKIMAGE,
  92.     MXIMAGE,
  93.     MENUCHECK,
  94.     AMIGAKEY
  95.   };
  96.  
  97.   if(cl=MakeClass((UBYTE *)"test",(UBYTE *)"sysiclass",NULL,sizeof(struct SysIData),0))
  98.   {
  99.     cl->cl_Dispatcher.h_Entry=Dispatcher;
  100.     AddClass(cl);
  101.     
  102.     if (w = OpenWindowTags(NULL,
  103.                       WA_Flags,       WFLG_CLOSEGADGET|WFLG_SIZEGADGET|WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SIZEBBOTTOM,
  104.                       WA_IDCMP,       IDCMP_CLOSEWINDOW|IDCMP_MOUSEBUTTONS|IDCMP_NEWSIZE,
  105.                       WA_MinWidth,    100,
  106.                       WA_MinHeight,   100,
  107.                       WA_MaxWidth,    32000,
  108.                       WA_MaxHeight,   32000,
  109.                       WA_Width,       32000,
  110.                       WA_Height,      32000,
  111.                       WA_AutoAdjust,  1,
  112.                       WA_Title,       "Click in window to change image states!  To apply patch comment \"#define DEMO\" in main.c!",
  113.                       TAG_END))
  114.     {                 
  115.       printf("%d %d\n",w->WScreen->WBorBottom,w->WScreen->WBorRight);
  116.       
  117.       if(di=GetScreenDrawInfo(w->WScreen))
  118.       {
  119.         for(l=0;l<NUM_IMAGES;l++)
  120.         {
  121.           o[l] = NewObject(cl, NULL,
  122.                           IA_Top      ,(w->BorderTop) + 5,  
  123.                           IA_Left     ,(w->BorderLeft) + 5 + l * (width+10),
  124.                           IA_Width    ,25,
  125.                           IA_Height   ,25,
  126.                           SYSIA_Size  ,2,
  127.                           SYSIA_Which ,sysnum[l],
  128.                           SYSIA_DrawInfo,di,
  129.                           TAG_END);
  130.         }
  131.         while (done == FALSE)    
  132.         {                        
  133.             
  134.           for(l=0;l<NUM_IMAGES;l++)
  135.           {
  136.             DrawImageState(w->RPort,(struct Image *)o[l],(w->BorderLeft) + 5 + l * (width + 10),(w->BorderTop) + 5 ,state ,di);
  137.           }
  138.             
  139.           state++;
  140.             
  141.           WaitPort((struct MsgPort *)w->UserPort);
  142.           while (msg = (struct IntuiMessage *)GetMsg((struct MsgPort *)w->UserPort))
  143.           {
  144.             if (msg->Class == IDCMP_CLOSEWINDOW)
  145.               done = TRUE;
  146.             ReplyMsg((struct Message *)msg);
  147.           }
  148.         }
  149.         for(l=0;l<NUM_IMAGES;l++)
  150.         DisposeObject(o[l]);
  151.         FreeScreenDrawInfo(w->WScreen,di);
  152.       }
  153.       CloseWindow(w);
  154.     }
  155.     FreeClass(cl);
  156.   }
  157. }
  158. #endif
  159.  
  160.  
  161.  
  162.  
  163.