home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 1 / FFMCD01.bin / bbs / libdisks / d700t799 / disk711.lha / WindowTool / source / windowtool.c < prev   
Encoding:
C/C++ Source or Header  |  1992-08-19  |  19.5 KB  |  712 lines

  1. /*********************************************************/
  2. /* Programmname          : WindowTool                              */
  3. /* Autor               : Klaas Hermanns                        */
  4. /* Aktuelle Version    : 1.00                                  */
  5. /* Erstellungsdatum    : 25-05-92                                */
  6. /* Compileranweisungen : lmk lmkfile                            */
  7. /*********************************************************/
  8. #define VERSIONSTRING "1.00"
  9. #define DATESTRING __DATE__" "__TIME__
  10. #include <stdio.h>
  11. #include <exec/exec.h>
  12. #include <exec/types.h>
  13. #include <graphics/displayinfo.h>
  14. #include <graphics/text.h>
  15. #include <graphics/clip.h>
  16. #include <dos/datetime.h>
  17. #include <dos/dos.h>
  18. #include <dos/dosextens.h>
  19. #include <intuition/intuitionbase.h>
  20. #include <intuition/intuition.h>
  21. #include <intuition/screens.h>
  22. #include <intuition/gadgetclass.h>
  23. #include <libraries/commodities.h>
  24. #include <libraries/gadtools.h>
  25. #include <libraries/asl.h>
  26. #include <libraries/reqtools.h>
  27. #include <pragmas/exec_pragmas.h>
  28. #include <pragmas/intuition_pragmas.h>
  29. #include <pragmas/gadtools_pragmas.h>
  30. #include <pragmas/asl_pragmas.h>
  31. #include <pragmas/reqtools.h>
  32. #include <clib/icon_protos.h>
  33. #include <clib/alib_protos.h>
  34. #include <clib/exec_protos.h>
  35. #include <clib/intuition_protos.h>
  36. #include <clib/gadtools_protos.h>
  37. #include <clib/asl_protos.h>
  38. #include <clib/intuition_protos.h>
  39. #include <clib/reqtools_protos.h>
  40. #include <clib/dos_protos.h>
  41. #include <clib/commodities_protos.h>
  42. #include <workbench/startup.h>
  43. #include <workbench/workbench.h>
  44.  
  45. #define DEFAULTPRIORITY 21
  46.  
  47. #define GD_Gadget0                             0
  48. #define GD_Gadget1                             1
  49. #define GD_Gadget2                             2
  50. #define GD_Gadget3                             3
  51. #define GD_Gadget4                             4
  52. #define GD_Gadget5                             5
  53. #define GD_Gadget6                             6
  54. #define GD_Gadget7                             7
  55. #define GD_Gadget8                             8
  56. #define GD_Gadget9                             9
  57. #define GD_Gadget10                             10
  58. #define GD_Gadget11                             11
  59. #define GD_GadgetSave                            50        /* Save */
  60. #define GD_GadgetHide                            51        /* Hide */
  61. #define GD_GadgetQuit                            52        /* Quit */
  62. #define GD_GadgetCancel                          53        /* Cancel */
  63.  
  64. extern void activetofront(void);
  65. extern void closewindow(void);
  66. extern void bigwindow(void);
  67. extern void smallwindow(void);
  68. extern void zipwindow(void);
  69. extern void activatefront(void);
  70. extern void worktofront(void);
  71.  
  72. extern void checkstartup(int,char **,struct WBStartup *);
  73.  
  74. extern int windowopen;
  75. extern struct Window        *Wnd        ;
  76. extern struct Screen        *Scr        ;
  77. extern APTR                  VisualInfo ;
  78. extern struct Gadget        *GList      ;
  79. extern struct Gadget        *Gadgets[14];
  80. extern struct Menu          *Menus      ;
  81. extern long InitStuff(void);
  82. extern void CleanStuff(void);
  83. extern struct IntuiText IText[];
  84. extern char windowtitle[];
  85.  
  86. #define KEYNUMMER 12
  87.  
  88. struct Library *CxBase;
  89. extern struct ExecBase *SysBase;
  90. struct IntuitionBase *IntuitionBase;
  91. struct Library *GadToolsBase;
  92. struct Library *AslBase;
  93. struct ReqToolsBase *ReqToolsBase;
  94. struct GfxBase *GfxBase;
  95. struct IconBase *IconBase;
  96.  
  97. extern struct WBStartup *WBenchMsg;
  98.  
  99. void ende(char *);
  100. void openlibs(void);
  101. void openrest(void);
  102. void setkeys(void);
  103. void switchstate(void);
  104. void about(void);
  105.  
  106. BOOL state=0;                        /* Status 0=Normal,~0=Dauerabfrage */
  107. #define POPUPFLAG 1
  108. #define NEWSETTINGSFLAG 2
  109. int flags=0;
  110.                                         /* Werte für Commoditie */
  111. struct MsgPort *mp;
  112. struct Message *msg;
  113. CxObj *broker,*filter[KEYNUMMER];
  114. struct NewBroker nb=
  115. {
  116.     NB_VERSION,
  117.     "WindowTool(e.BB)",
  118.     "WindowTool V1.0 by Klaas Hemanns .",
  119.     "Just a nice programm ...",
  120.     NBU_NOTIFY|NBU_UNIQUE,COF_SHOW_HIDE,DEFAULTPRIORITY,0,0
  121. };
  122.  
  123.                                         /* Werte für Fensterabfrage */
  124. struct IntuiMessage *mes;            /* Erhaltene Message */
  125. long class;                                /* Message Class */
  126. short code;                                /* Message Code */
  127. struct Gadget *gad;
  128.  
  129. ULONG waitsignals;                /* Signale, auf die gewartet werden */
  130.  
  131. char oldkeys[KEYNUMMER][256];    /* Alte Tastenkombinationen (werden beim */
  132.                                         /* Öffnen des Windows neu gesetzt */
  133.  
  134. char keys[KEYNUMMER][256]=        /* aktuelle Tastenkombinationen */
  135. {
  136. "rshift ralt j",                                /* StopKey */
  137. "shift alt DEL",                                /* NewShell */
  138. "control ralt lalt q",                        /* Quit */
  139. "lcommand b",                                    /* Cycle */
  140. "lcommand v",                                    /* Work */
  141. "lcommand g",                                    /* Closewindow */
  142.  
  143. "lcommand x",                                    /* ActivateFrontWindow */
  144. "lcommand a",                                    /* Big Active Window */
  145. "lcommand s",                                    /* Small Active Window */
  146. "lcommand d",                                    /* Zip Active Window */
  147. "lcommand h",                                    /* Popup */
  148. "lcommand f"                                    /* ActiveToFront */
  149. };
  150.  
  151. enum {    BK_ID,NS_ID,Q_ID,B_ID,V_ID,CL_ID,AF_ID,BW_ID,SW_ID,ZW_ID,PU_ID,ATF_ID};
  152.  
  153. char prgname[256];                    /* Programm Pfad und Name */
  154.  
  155. char filename[34]="windowtool.config";    /* Default Settings */
  156. char dirname[256]="s:";
  157. fullname[300];                /* Nur Zwischenspeicher */
  158.  
  159. struct TagItem reqtags[]=
  160. {
  161. RT_ReqPos,REQPOS_CENTERSCR,TAG_END,0
  162. };
  163.  
  164. BOOL filereq(int typ)
  165. {
  166.     struct rtFileRequester *filereq;
  167.     char *match="#?.config";
  168.     BOOL erg=FALSE;
  169.  
  170.     if (filereq = rtAllocRequestA (RT_FILEREQ, NULL))
  171.     {
  172.         rtChangeReqAttr(filereq,RTFI_Dir,dirname,RTFI_MatchPat,match,TAG_END);
  173.  
  174.         if(typ==0)
  175.         {
  176.         if (rtFileRequest (filereq, filename, "Save configuration",RTFI_Flags,FREQF_SAVE,TAG_END))
  177.                     erg=TRUE;
  178.         }
  179.         else
  180.         {
  181.         if (rtFileRequest (filereq, filename, "Load configuration",TAG_END))
  182.                     erg=TRUE;
  183.         }
  184.         strcpy(dirname,filereq->Dir);
  185.         rtFreeRequest (filereq);
  186.     }
  187.     else
  188.         rtEZRequest ("Error:\nNo memory for filerequester !", "Continue", NULL, NULL);
  189.     return(erg);
  190. }
  191.  
  192. void save()
  193. {
  194.     BPTR fh;
  195.     strcpy(fullname,dirname);
  196.     AddPart((UBYTE *)fullname,(UBYTE *)filename,300);
  197.     if(fh=Open((UBYTE *)fullname,MODE_NEWFILE))
  198.     {
  199.         int k;
  200.         for(k=0;k<KEYNUMMER;k++)
  201.         {
  202.             Write(fh,"\"",1);
  203.             Write(fh,keys[k],strlen(keys[k]));
  204.             Write(fh,"\"\n",2);
  205.         }
  206.         Close(fh);
  207.     }
  208.     else rtEZRequest("Error:\nUnable to open\nconfigurationfile\n%s !","Continue",NULL, reqtags,fullname);
  209. }
  210. void saveas()
  211. {
  212.     if(filereq(0)==TRUE)    save();
  213. }
  214.  
  215. extern char *tt[];        /* NAMEN DER TOOLTYPES-KEYS */
  216.  
  217. USHORT chip imagedata[]=
  218. {
  219.     0x0000,0x0000,0x0000,0x0400,0x0000,0x0000,0x0000,0x0C00,
  220.     0x0000,0x0000,0x0000,0x0C00,0x0000,0x0000,0x0000,0x0C00,
  221.     0x0000,0x0000,0x0010,0x0C00,0x0000,0x0000,0x0010,0x0C00,
  222.     0x0000,0x0000,0x0010,0x0C00,0x0000,0x1F04,0x0010,0x0C00,
  223.     0x0000,0x398E,0x0010,0x0C00,0x0000,0x018E,0x0010,0x0C00,
  224.     0x0000,0x070E,0x0010,0x0C00,0x0000,0x0C04,0x0010,0x0C00,
  225.     0x0000,0x0E04,0x0010,0x0C00,0x0000,0x0000,0x0010,0x0C00,
  226.     0x0000,0x0E0E,0x0010,0x0C00,0x0000,0x0000,0x0010,0x0C00,
  227.     0x0000,0x0000,0x0010,0x0C00,0x0000,0x0000,0x0010,0x0C00,
  228.     0x0000,0x0000,0x0010,0x0C00,0x001F,0xFFFF,0xFFE0,0x0C00,
  229.     0x0000,0x0000,0x0000,0x0C00,0x7FFF,0xFFFF,0xFFFF,0xFC00,
  230.     0x0000,0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0xFFFF,0xF800,
  231.     0xD555,0x5555,0x5555,0x5000,0xD555,0x5555,0x5555,0x5000,
  232.     0xD53F,0xFFFF,0xFFE5,0x5000,0xD57F,0xFFFF,0xFFC5,0x5000,
  233.     0xD578,0x0000,0x0085,0x5000,0xD571,0x5555,0x5405,0x5000,
  234.     0xD575,0x4051,0x5505,0x5000,0xD575,0x4451,0x5505,0x5000,
  235.     0xD575,0x5451,0x5505,0x5000,0xD575,0x5051,0x5505,0x5000,
  236.     0xD575,0x5151,0x5505,0x5000,0xD575,0x5151,0x5505,0x5000,
  237.     0xD575,0x5555,0x5505,0x5000,0xD575,0x5151,0x5505,0x5000,
  238.     0xD571,0x5555,0x5405,0x5000,0xD578,0x0000,0x0085,0x5000,
  239.     0xD570,0x0000,0x0045,0x5000,0xD560,0x0000,0x0025,0x5000,
  240.     0xD540,0x0000,0x0015,0x5000,0xD555,0x5555,0x5555,0x5000,
  241.     0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
  242. };
  243. struct Image image =
  244. {
  245.     0,0,54,23,2,imagedata,3,0,0
  246. };
  247. void saveasinfo()
  248. {
  249.     char tooltypes[KEYNUMMER][256];
  250.     long tooltypesadr[KEYNUMMER+1];
  251.     int k;
  252.     struct DiskObject *diskobj;
  253.     struct DiskObject mydiskobj =
  254.     {
  255.         WB_DISKMAGIC,WB_DISKVERSION,
  256.         {
  257.             0,0,0,53,23,GADGIMAGE,RELVERIFY,BOOLGADGET,
  258.             (APTR)&image,0,
  259.             0,0,0,100,0
  260.         },
  261.         WBTOOL,0,0,NO_ICON_POSITION,NO_ICON_POSITION,0,0,4096
  262.     };
  263.     
  264.     mydiskobj.do_ToolTypes=(char **)&tooltypesadr[0];
  265.     
  266.     for(k=0;k<KEYNUMMER;k++)
  267.     {
  268.         tooltypesadr[k]=(LONG)tooltypes[k];
  269.         sprintf(tooltypes[k],"%s=%s",tt[k],keys[k]);
  270.     }
  271.     tooltypesadr[k]=0;
  272.     
  273.     if(diskobj=GetDiskObject(prgname))
  274.     {
  275.         mydiskobj.do_Gadget.LeftEdge=diskobj->do_Gadget.LeftEdge;
  276.         mydiskobj.do_Gadget.TopEdge=diskobj->do_Gadget.TopEdge;
  277.         mydiskobj.do_Gadget.Width=diskobj->do_Gadget.Width;
  278.         mydiskobj.do_Gadget.Height=diskobj->do_Gadget.Height;
  279.         mydiskobj.do_Gadget.Flags=diskobj->do_Gadget.Flags;
  280.         mydiskobj.do_Gadget.Activation=diskobj->do_Gadget.Activation;
  281.         mydiskobj.do_Gadget.GadgetRender=diskobj->do_Gadget.GadgetRender;
  282.         mydiskobj.do_Gadget.SelectRender=diskobj->do_Gadget.SelectRender;
  283.         mydiskobj.do_Gadget.GadgetID=diskobj->do_Gadget.GadgetID;
  284.         mydiskobj.do_Gadget.UserData=diskobj->do_Gadget.UserData;
  285.         mydiskobj.do_CurrentX=diskobj->do_CurrentX;
  286.         mydiskobj.do_CurrentY=diskobj->do_CurrentY;
  287.         mydiskobj.do_StackSize=diskobj->do_StackSize;
  288.     }
  289.     
  290.     PutDiskObject(prgname,&mydiskobj);
  291.     if(diskobj)FreeDiskObject(diskobj);
  292. }
  293.  
  294. void open(void)
  295. {
  296.     BPTR fh;
  297.     strcpy(fullname,dirname);
  298.     AddPart((UBYTE *)fullname,(UBYTE *)filename,300);
  299.     if(fh=Open((UBYTE *)fullname,MODE_OLDFILE))
  300.     {
  301.         char *mem;
  302.         long memlen;
  303.         Seek(fh,0,OFFSET_END);
  304.         memlen=Seek(fh,0,OFFSET_BEGINNING);
  305.         if(memlen==0)    rtEZRequest("Error:\nconfigurationfile\n%s\nis empty!","Continue",NULL, reqtags,fullname);
  306.         else
  307.         if(mem=AllocMem(memlen,0))
  308.         {
  309.             int aktu,a,e,k;
  310.             
  311.             Read(fh,mem,memlen);
  312.             for(k=0,aktu=0;aktu<memlen,k<KEYNUMMER;aktu++,k++)
  313.             {
  314.                 for(;mem[aktu]!='\"';aktu++);
  315.                 if(aktu>memlen){    rtEZRequest("Error:\nError in\nconfigurationfile\n%s !","Continue",NULL, reqtags,fullname);break;}
  316.                 aktu++;
  317.                 a=aktu;
  318.                     for(;mem[aktu]!='\"';aktu++);
  319.                 if(aktu>memlen){    rtEZRequest("Error:\nError in\nconfigurationfile\n%s !","Continue",NULL, reqtags,fullname);break;}
  320.                 e=aktu;
  321.                 mem[e]=0;
  322.                 strcpy(keys[k],&mem[a]);
  323.             }
  324.             if(k==KEYNUMMER)setkeys();
  325.             FreeMem(mem,memlen);
  326.         }
  327.         else rtEZRequest("Error:\nNo memory to load\nconfigurationfile\n%s !","Continue",NULL, reqtags ,fullname);
  328.         Close(fh);
  329.     }
  330.     else rtEZRequest("Error:\nError while opening the configurationfile\n%s !","Continue",NULL, reqtags,fullname);
  331. }
  332. void openas()
  333. {
  334.     if(filereq(1)==TRUE)
  335.                 open();
  336. }
  337.  
  338. void openinfo()
  339. {
  340.     struct DiskObject *infoobj;
  341.     int k;
  342.     char *key;
  343.  
  344.     if(infoobj=GetDiskObject(prgname))
  345.     {
  346.         if(key=FindToolType(infoobj->do_ToolTypes,"SETTINGS"))
  347.             {
  348.                 strcpy(filename,FilePart(key));
  349.                 *((char *)PathPart(key))=0;
  350.                 strcpy(dirname,key);
  351.                 open();
  352.             }
  353.         for(k=0;k<KEYNUMMER;k++)
  354.         if(key=FindToolType(infoobj->do_ToolTypes,tt[k]))
  355.                         strcpy(keys[k],key);
  356.         setkeys();
  357.         FreeDiskObject(infoobj);
  358.     }
  359.     else rtEZRequest("Error:\nUnable to open %s.info !","Continue",NULL,reqtags,prgname);
  360. }
  361.         /* Öffnet Window neu */
  362. void popup(void)
  363. {
  364.     int k;
  365.     if(windowopen==FALSE) for(k=0;k<KEYNUMMER;k++)            /* KEYS SICHERN */
  366.                                         strcpy(oldkeys[k],keys[k]);
  367.  
  368.     if(InitStuff()){
  369.                 rtEZRequest(    "Error:\nUnable to open HotkeyPrefsWindow !",
  370.                         "Continue",NULL, reqtags,NULL);
  371.                         }
  372.     else
  373.     {
  374.          waitsignals= (1L<<Wnd->UserPort->mp_SigBit) | 
  375.                 (1<<mp->mp_SigBit) | SIGBREAKF_CTRL_C ;
  376.         ScreenToFront(Scr);
  377.     }
  378. }
  379.         /* Schließt Window */
  380. void popdown(void)
  381. {
  382.     CleanStuff();
  383.     waitsignals=(1<<mp->mp_SigBit) | SIGBREAKF_CTRL_C ;
  384. }
  385.  
  386. void setkeys(void)
  387. {
  388.     int k;
  389.     for(k=0;k<KEYNUMMER;k++)
  390.     {
  391.         if(windowopen==TRUE)GT_SetGadgetAttrs(Gadgets[k],Wnd,0,GTST_String,keys[k],TAG_DONE);
  392.         DeleteCxObjAll(filter[k]);
  393.         filter[k]=HotKey(keys[k],mp,k);
  394.         AttachCxObj(broker,filter[k]);
  395.     }
  396.     if(windowopen==TRUE)
  397.     {
  398.         strcpy(&windowtitle[26],keys[10]);
  399.         SetWindowTitles(Wnd,windowtitle,(char *)-1);
  400.     }
  401. }
  402.  
  403. void quit(void)
  404. {
  405.     if(rtEZRequestA("Quit WindowTool ?\n","Yes|No",
  406.                                 NULL, NULL,NULL) )ende(0);;
  407. }
  408.             /* About Requester */
  409. void about(void)
  410. {
  411.     rtEZRequest(    "WindowTool V"VERSIONSTRING" ("DATESTRING")\n"
  412.                         "This program is Giftware\n"
  413.                         "Copyright 1992 by Klaas Hermanns\n"
  414.                         "(Weberstraße 42/4190 Kleve/Germany)",
  415.     "Continue",NULL, reqtags,NULL);
  416. }
  417.  
  418.  
  419. void main(argc,argv)
  420. int argc;
  421. char *argv[];
  422. {
  423.     ULONG signals;
  424.     LONG id,k;
  425.  
  426.     openlibs();
  427.  
  428.     checkstartup(argc,argv,WBenchMsg);
  429.     
  430.     openrest();
  431.  
  432.     if(flags&POPUPFLAG)
  433.     {
  434.         waitsignals= (1L<<Wnd->UserPort->mp_SigBit) | 
  435.                 (1<<mp->mp_SigBit) | SIGBREAKF_CTRL_C ;
  436.         popup();
  437.     }
  438.     else waitsignals = (1<<mp->mp_SigBit) | SIGBREAKF_CTRL_C ;
  439.  
  440.     if(flags&NEWSETTINGSFLAG)open();
  441.     
  442.     for(;;)
  443.     {
  444.         if(state==0)signals=Wait(waitsignals);
  445.         else    while(0==(signals=CheckSignal( waitsignals )));
  446.  
  447.         if(signals & SIGBREAKF_CTRL_C )    quit();
  448.         if(signals & 1L<<Wnd->UserPort->mp_SigBit)
  449.     while(1)
  450.         {
  451.             if(windowopen==FALSE)break;
  452.             if(!(mes=GT_GetIMsg(Wnd->UserPort)))break;
  453.             
  454.             class=mes->Class;
  455.             code=mes->Code;
  456.             gad=(struct Gadget *)mes->IAddress;
  457.             GT_ReplyIMsg(mes);
  458.             switch(class)
  459.             {
  460.                 case IDCMP_REFRESHWINDOW:GT_BeginRefresh(Wnd);
  461.                                                 GT_RefreshWindow(Wnd,0);
  462.                                     PrintIText( Wnd->RPort, IText, 0l, 0l );
  463.                                                 GT_EndRefresh(Wnd,TRUE);
  464.                                                 break;
  465.                 case IDCMP_CHANGEWINDOW:
  466.                                                 break;
  467.                 case IDCMP_CLOSEWINDOW:
  468.                                         popdown();
  469.                                         break;
  470.                 case IDCMP_GADGETUP:
  471.                                             switch(gad->GadgetID)
  472.                                                 {
  473.                                                     case    GD_GadgetSave:save();break;    /*SAVE*/
  474.                                                     case    GD_GadgetHide:popdown();break;
  475.                                                     case    GD_GadgetQuit:quit();break;
  476.                                                     case    GD_GadgetCancel:
  477.                                                             for(k=0;k<KEYNUMMER;k++)/* KEYS ZURÜCK */
  478.                                                             {
  479.                                                                 strcpy(keys[k],oldkeys[k]);
  480.                                                                 DeleteCxObjAll(filter[k]);
  481.                                                                 filter[k]=HotKey(keys[k],mp,k);
  482.                                                                 AttachCxObj(broker,filter[k]);
  483.                                                             }
  484.                                                             popdown();
  485.                                                             break;
  486.                                                     default:if(gad->GadgetID<KEYNUMMER)
  487.                                                                 {
  488.                                                                     k=gad->GadgetID;
  489.                                                                     DeleteCxObjAll(filter[k]);
  490.                                                                     strcpy(keys[k],((struct StringInfo *)gad->SpecialInfo)->Buffer);
  491.                                                                     filter[k]=HotKey(keys[k],mp,k);
  492.                                                                     AttachCxObj(broker,filter[k]);
  493.                                                                     ActivateGadget(Gadgets[k==11 ? 0 : k+1],Wnd,0);
  494.                                                                 }
  495.                                                                 if(gad->GadgetID==GD_Gadget10)
  496.                                                                     {
  497.                                                                         strcpy(&windowtitle[26],keys[10]);
  498.                                                                         SetWindowTitles(Wnd,windowtitle,(char *)-1);
  499.                                                                     }
  500.                                                             break;
  501.                                                 }
  502.                                         break;
  503.                 case IDCMP_MENUPICK:    
  504.                                 switch(MENUNUM(code))
  505.                                     {
  506.                                     case 0:switch(ITEMNUM(code))
  507.                                         {
  508.                                         case 0:for(k=0;k<KEYNUMMER;k++)
  509.                                                     GT_SetGadgetAttrs(Gadgets[k],Wnd,0,GTST_String,"",TAG_DONE);
  510.                                                 break;
  511.                                         case 1:openas();break;            /* OPEN */
  512.                                         case 2:openinfo();break;    /* OPEN INFO */
  513.                                         case 4:save();break;            /* SAVE */
  514.                                         case 5:saveas();break;        /* SAVE AS */
  515.                                         case 6:saveasinfo();break;    /* SAVE AS INFO */
  516.                                         case 8:about();                /* About */
  517.                                                 break;
  518.                                         case 10:popdown();             /* HIDE */
  519.                                                 break;
  520.                                         case 11:
  521.                                             for(k=0;k<KEYNUMMER;k++)/* KEYS ZURÜCK */
  522.                                                 {
  523.                                                     strcpy(keys[k],oldkeys[k]);
  524.                                                     DeleteCxObjAll(filter[k]);
  525.                                                     filter[k]=HotKey(keys[k],mp,k);
  526.                                                     AttachCxObj(broker,filter[k]);
  527.                                                 }
  528.                                                 popdown();
  529.                                                 break;
  530.                                         case 13:quit();                    /* QUIT */
  531.                                                 break;
  532.                                         default:break;
  533.                                         }
  534.                                     default:break;
  535.                                     }
  536.                                 break;
  537.                 case IDCMP_VANILLAKEY:
  538.                         switch(code)
  539.                         {    
  540.                                 case 's':
  541.                                 case 'S':save();
  542.                                         break;
  543.                                 case 'h':
  544.                                 case 'H':popdown();
  545.                                         break;
  546.                                 case 'c':
  547.                                 case 'C':for(k=0;k<KEYNUMMER;k++)/* KEYS ZURÜCK */
  548.                                         {
  549.                                             strcpy(keys[k],oldkeys[k]);
  550.                                             DeleteCxObjAll(filter[k]);
  551.                                             filter[k]=HotKey(keys[k],mp,k);
  552.                                             AttachCxObj(broker,filter[k]);
  553.                                         }
  554.                                         popdown();
  555.                                         break;
  556.                                 case 'q':
  557.                                 case 'Q':quit();
  558.                                         break;
  559.                                 case 'o':
  560.                                 case 'O':ActivateGadget(Gadgets[0],Wnd,0);break;
  561.                                 case 'n':
  562.                                 case 'N':ActivateGadget(Gadgets[1],Wnd,0);break;
  563.                                 case 'u':
  564.                                 case 'U':ActivateGadget(Gadgets[2],Wnd,0);break;
  565.                                 case 'y':
  566.                                 case 'Y':ActivateGadget(Gadgets[3],Wnd,0);break;
  567.                                 case 'r':
  568.                                 case 'R':ActivateGadget(Gadgets[4],Wnd,0);break;
  569.                                 case 'l':
  570.                                 case 'L':ActivateGadget(Gadgets[5],Wnd,0);break;
  571.                                 case 'a':
  572.                                 case 'A':ActivateGadget(Gadgets[6],Wnd,0);break;
  573.                                 case 'b':
  574.                                 case 'B':ActivateGadget(Gadgets[7],Wnd,0);break;
  575.                                 case 'm':
  576.                                 case 'M':ActivateGadget(Gadgets[8],Wnd,0);break;
  577.                                 case 'z':
  578.                                 case 'Z':ActivateGadget(Gadgets[9],Wnd,0);break;
  579.                                 case 'w':
  580.                                 case 'W':ActivateGadget(Gadgets[10],Wnd,0);break;
  581.                                 case 't':
  582.                                 case 'T':ActivateGadget(Gadgets[11],Wnd,0);break;
  583.                         }
  584.                 default:break;
  585.             }
  586.         }
  587.  
  588.         if(signals & (1<<mp->mp_SigBit))
  589.         while(msg=GetMsg(mp))
  590.             {
  591.                 id=CxMsgID((CxMsg *)msg);
  592.  
  593.                 switch( CxMsgType((CxMsg*)msg) )
  594.                 {
  595.                     case CXM_IEVENT:
  596.                             ReplyMsg(msg);
  597.                             switch(id)
  598.                             {
  599.                                 case V_ID:worktofront();
  600.                                         break;
  601.                                 case AF_ID:activatefront();
  602.                                         break;
  603.                                 case B_ID:cycle();
  604.                                         break;
  605.                                 case BK_ID:switchstate();
  606.                                         break;
  607.                                 case Q_ID:quit();
  608.                                         break;
  609.                                 case NS_ID:system("newshell");
  610.                                         break;
  611.                                 case BW_ID:bigwindow();
  612.                                         break;
  613.                                 case SW_ID:smallwindow();
  614.                                         break;
  615.                                 case ZW_ID:zipwindow();
  616.                                         break;
  617.                                 case PU_ID:popup();
  618.                                         break;
  619.                                 case ATF_ID:activetofront();
  620.                                         break;
  621.                                 case CL_ID:closewindow();
  622.                                         break;
  623.                                 default:break;
  624.                             }
  625.                         break;
  626.                     case CXM_COMMAND:
  627.                             ReplyMsg(msg);
  628.                             switch(id)
  629.                             {
  630.                                 case CXCMD_DISABLE:ActivateCxObj(broker,0);break;
  631.                                 case CXCMD_ENABLE:ActivateCxObj(broker,-1);break;
  632.                                 case CXCMD_KILL:quit();break;
  633.                                 case CXCMD_UNIQUE:
  634.                                 case CXCMD_APPEAR:popup();break;
  635.                                 case CXCMD_DISAPPEAR:popdown();break;
  636.                                 default:break;
  637.                             }
  638.                             break;
  639.                     default:
  640.                             ReplyMsg(msg);
  641.                             break;
  642.                 }
  643.             }
  644.     }
  645. }
  646.  
  647. void openlibs(void)
  648. {
  649.     if(!(AslBase=OpenLibrary("asl.library",37)))
  650.                     ende("asl.library not found !");
  651.     if(!(GadToolsBase=OpenLibrary("gadtools.library",37)))
  652.                     ende("gadtools.library not found !");
  653.     if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",37)))
  654.                     ende("graphics.library not found !");
  655.     if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",37)))
  656.                     ende("Intuition.library not found !");
  657.     if(!(    ReqToolsBase=(struct ReqToolsBase *)OpenLibrary(REQTOOLSNAME,REQTOOLSVERSION)))
  658.             ende("reqtools.library not found !");
  659.     if(!(CxBase=OpenLibrary("commodities.library",37)))
  660.             ende("commodities.library not found !");
  661.     if(!(IconBase=OpenLibrary("icon.library",37)))
  662.                     ende("icon.library not found !");
  663. }
  664.  
  665. void openrest(void)
  666. {
  667.     int k;
  668.     if(!(mp=CreateMsgPort()))ende("Unable to create MsgPort !");
  669.     nb.nb_Port=mp;
  670.  
  671.     for(k=0;k<KEYNUMMER;k++)
  672.             filter[k]=HotKey(keys[k],mp,k);
  673.  
  674.     if(!(broker=CxBroker(&nb,0)))ende(0);/* WT läuft schon */
  675.  
  676.     for(k=0;k<KEYNUMMER;k++)
  677.     AttachCxObj(broker,filter[k]);
  678.  
  679.     ActivateCxObj(broker,-1);
  680. }
  681.  
  682. void ende(char *text)
  683. {
  684.     if(text)rtEZRequest(text,"Continue",NULL, reqtags,NULL);
  685.  
  686.     CleanStuff();
  687.  
  688.     if(broker)DeleteCxObjAll(broker);
  689.     if(mp)DeleteMsgPort(mp);
  690.  
  691.     if(CxBase)CloseLibrary(CxBase);
  692.     if(IntuitionBase)
  693.     {
  694.         DisplayBeep(0);
  695.         CloseLibrary((struct Library *)IntuitionBase);
  696.     }
  697.     if(ReqToolsBase)CloseLibrary ((struct Library *)ReqToolsBase);
  698.     if(GfxBase)CloseLibrary ((struct Library *)GfxBase);
  699.     if(GadToolsBase)CloseLibrary(GadToolsBase);
  700.     if(AslBase)CloseLibrary(AslBase);
  701.     if(IconBase)CloseLibrary((struct Library *)IconBase);
  702.  
  703.     exit(0);
  704. }
  705.  
  706. LONG oldpri=4;
  707. void switchstate(void)
  708. {
  709.     state=~state;
  710.     oldpri=SetTaskPri(FindTask(0),oldpri);
  711. }
  712.