home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 1 / FFMCD01.bin / bbs / libdisks / d700t799 / disk711.lha / WindowTool / source / checkstartup.c next >
Encoding:
C/C++ Source or Header  |  1992-08-19  |  3.0 KB  |  133 lines

  1. #include <workbench/startup.h>
  2. #include <workbench/workbench.h>
  3. #include <clib/icon_protos.h>
  4. #include <clib/reqtools_protos.h>
  5. #include <clib/dos_protos.h>
  6. #include <libraries/commodities.h>
  7. #include <libraries/reqtools.h>
  8. #include <dos/rdargs.h>
  9. #include <pragmas/reqtools.h>
  10.  
  11. extern struct TagItem reqtags[];
  12.  
  13. char text[300];
  14. BPTR fh;
  15. #define KEYNUMMER 12
  16.  
  17. 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};
  18.  
  19. extern char keys[KEYNUMMER][256];
  20. extern struct NewBroker nb;
  21. #define POPUPFLAG 1
  22. #define NEWSETTINGSFLAG 2
  23. extern int flags;
  24.  
  25. extern char filename[];
  26. extern char dirname[];
  27. extern char prgname[];
  28.  
  29. char *tt[KEYNUMMER] =
  30. {
  31. "CX_STOPKEY",
  32. "CX_NEWSHELLKEY",
  33. "CX_QUITKEY",
  34. "CX_CYCLEKEY",
  35. "CX_WORKBENCHKEY",
  36. "CX_CLOSEWINDOW",
  37.  
  38. "CX_FRONTKEY",
  39. "CX_MAKEBIGKEY",
  40. "CX_MAKESMALLKEY",
  41. "CX_ZIPKEY",
  42. "CX_POPKEY",
  43. "CX_ACTIVETOFRONT"
  44. };
  45.  
  46. char *template=
  47. "CX_PRIORITY/N,CX_POPUP/S,SETTINGS/K,"
  48.         /* Alle Keys */
  49. "CX_STOPKEY/K,CX_NEWSHELLKEY/K,CX_QUITKEY/K,CX_CYCLEKEY/K,CX_WORKBENCHKEY/K,CX_CLOSEWINDOW/K,CX_FRONTKEY/K,CX_MAKEBIGKEY/K,CX_MAKESMALLKEY/K,CX_ZIPKEY/K,CX_POPKEY/K,CX_ACTIVETOFRONT/K";
  50.  
  51. struct cliresults 
  52. {
  53.     long pri;
  54.     long popup;
  55.     char *settings;
  56.     char *keys[KEYNUMMER];
  57. };
  58. struct cliresults clir={0,0,0,0,0,0,0,0,0,0,0,0,0};
  59.  
  60. void checkstartup(int argc,char *argv[],struct WBStartup *msg)
  61. {
  62.     int k;
  63.     char *key;
  64.  
  65.     if(argc)
  66.     {
  67.         struct RDArgs *cliargs;
  68.  
  69.         GetCurrentDirName(prgname,300);
  70.         AddPart(prgname,argv[0],300);
  71.         
  72.         if(!(cliargs=ReadArgs(template,(LONG *)&clir,0)))
  73.             {
  74.             fh=Output();
  75.             sprintf(text,"WindowTool V1.0 : Error in Commandline !\nUSAGE: %s\n",template);
  76.             Write(fh,text,strlen(text));
  77.             ende(0);
  78.             }
  79.  
  80.         if(clir.pri!=0)nb.nb_Pri=(BYTE)clir.pri;
  81.         if(clir.settings)
  82.             {
  83.                 flags=flags|NEWSETTINGSFLAG;
  84.                 strcpy(filename,FilePart(clir.settings));
  85.                 *((char *)PathPart(clir.settings))=0;
  86.                 strcpy(dirname,clir.settings);
  87.             }                    
  88.         if(clir.popup!=0)flags=flags|POPUPFLAG;
  89.  
  90.         for(k=0;k<KEYNUMMER;k++)
  91.             if(clir.keys[k])strcpy(keys[k],clir.keys[k]);
  92.  
  93.         if(cliargs)FreeArgs(cliargs);
  94.     }
  95.     else
  96.     {
  97.         GetCurrentDirName(prgname,300);
  98.         AddPart(prgname,msg->sm_ArgList->wa_Name,300);
  99.  
  100.         if(msg->sm_NumArgs!=0)                /* Falls Tooltypes da */
  101.         {
  102.             BPTR olddir;
  103.             struct DiskObject *infoobj;
  104.             
  105.             olddir=CurrentDir(msg->sm_ArgList->wa_Lock);
  106.             
  107.             if(infoobj=GetDiskObject(msg->sm_ArgList->wa_Name))
  108.             {
  109.                 if(key=FindToolType(infoobj->do_ToolTypes,"SETTINGS"))
  110.                     {
  111.                         flags=flags|NEWSETTINGSFLAG;
  112.                         strcpy(filename,FilePart(key));
  113.                         *((char *)PathPart(key))=0;
  114.                         strcpy(dirname,key);
  115.                     }
  116.                 for(k=0;k<KEYNUMMER;k++)
  117.                 if(key=FindToolType(infoobj->do_ToolTypes,tt[k]))
  118.                                 strcpy(keys[k],key);
  119.                 if(key=FindToolType(infoobj->do_ToolTypes,"CX_PRIORITY"))
  120.                         {
  121.                             int dummy;
  122.                             sscanf(key,"%ld",&dummy);
  123.                             nb.nb_Pri=(BYTE)dummy;
  124.                         }
  125.                 if(key=FindToolType(infoobj->do_ToolTypes,"CX_POPUP"))
  126.                     if(stricmp(key,"YES")==0)flags=flags|POPUPFLAG;
  127.                 FreeDiskObject(infoobj);
  128.             }
  129.             CurrentDir(olddir);
  130.         }
  131.     }
  132. }
  133.