home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 632.lha / ParM_v3.6 / ParM_Src.lzh / ParM_Src / Startup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-06  |  3.5 KB  |  120 lines

  1. /*
  2.  *    Startup.c - Copyright © 1991 by S.R. & P.C.
  3.  *
  4.  *    Created:    18 Feb 1991  11:36:37
  5.  *    Modified:    05 Feb 1992  21:06:28
  6.  *
  7.  *    Make>> make
  8.  */
  9.  
  10. #include "ParMBase.h"
  11.  
  12.  
  13. extern struct ExecBase *SysBase;
  14. extern struct Library  *DOSBase;
  15.  
  16. struct ParMBase *ParMBase;
  17. struct ArpBase *ArpBase;
  18. struct ReqLib  *ReqBase;
  19. struct IconBase *IconBase;
  20. struct IntuitionBase *IntuitionBase;
  21. struct LayersBase *LayersBase;
  22. struct GfxBase  *GfxBase;
  23. struct WBStartup *WBenchMsg;
  24. int _argc;
  25. char **_argv;
  26.  
  27. char HelpUsage[] = "ParM V3.6 © 1990-92 by S.R. & P.C.\n\
  28. MYMENU            Attach menus to Workbench's (Like MyMenu)\n\
  29. CLIWINDOW         Attach menus to CLI/Shell Window\n\
  30. OWNWINDOW         Open its own window (default)\n\
  31. LEFTEDGE          Left edge of ParM Window (default 0)\n\
  32. DETAILPEN         Detail pen of ParM Window (default 1)\n\
  33. BLOCKPEN          Block pen of ParM Window (default 2)\n\
  34. DRAGBAR   ON|OFF  Drag bar (You can't move ParM window) (default on)\n\
  35. DEPTH     ON|OFF  Depth gadgets (default off)\n\
  36. AUTOFRONT ON|OFF  Automatic window to front (default on)\n\
  37. SHOWMEM   ON|OFF  Show available memory (default off)\n\
  38. SHOWTIME  ON|OFF  Show time. (default off)\n\
  39. REFRESHTIME       Interval time for Mem/Time refresh in 0.1s (default 1s)\n\
  40. MTDETAILPEN       DetailPen for Mem/Time (default DetailPen)\n\
  41. MTBLOCKPEN        BlockPen for Mem/Time (default BlockPen)\n\
  42. MENUCOLOR         Color for ParM's main menu (default DetailPen)\n\
  43. STACKSIZE         Default stack size for commands (default: ParM process stack)\n\
  44. CONFIGFILE        Configuration file (default: S:ParM.cfg)\n\
  45. USENULL   ON|OFF  Redirect output to NULL: for commands in RUN mode (default off)\n";
  46.  
  47. char Template[] = "MYMENU/s,CLIWINDOW/s,OWNWINDOW/s,LEFTEDGE/k,TOPEGE/k,DETAILPEN/k,BLOCKPEN/k,DRAGBAR/k,DEPTH/k,AUTOFRONT/k,SHOWMEM/k,SHOWTIME/k,REFRESHTIME/k,MTDETAILPEN/k,MTBLOCKPEN/k,MENUCOLOR/k,STACKSIZE/k,CONFIGFILE/k,USENULL/k";
  48.  
  49. /* Number of args in template */
  50. #define NUM_ARGS 19        /* WARNING: also defined in ParM.c */
  51.  
  52. long DosWrite(BPTR file, char *buffer, long length);
  53. #pragma amicall(DOSBase, 0x30, DosWrite(d1,d2,d3))
  54.  
  55. int main(int argc, char **argv);
  56.  
  57.  
  58. void exit(int code)
  59. {
  60.     if (WBenchMsg) {
  61.         Forbid();
  62.         ReplyMsg((struct Message *)WBenchMsg);
  63.     }
  64.     CloseLibrary(ParMBase);
  65.     Exit(code);
  66. }
  67.  
  68.  
  69. void _main(long alen, char *aptr)
  70. {
  71.     struct Library *DOSBase;
  72.     struct Process *pp;
  73.  
  74.     pp = (struct Process *)SysBase->ThisTask;
  75.     if (!pp->pr_CLI) {
  76.         WaitPort(&pp->pr_MsgPort);
  77.         WBenchMsg = (struct WBStartup *)GetMsg(&pp->pr_MsgPort);
  78.     }
  79.     if (!(ParMBase = (struct ParMBase *)OpenLibrary("parm.library", 2L))) {
  80.         if (pp->pr_CLI && (DOSBase = OpenLibrary("dos.library",0L))) {
  81.             DosWrite(pp->pr_COS, "You need parm.library V2+\n", 26L);
  82.             CloseLibrary(DOSBase);
  83.         }
  84.         if (WBenchMsg) {
  85.             Forbid();
  86.             ReplyMsg((struct Message *)WBenchMsg);
  87.         }
  88.         return;
  89.     }
  90.     ArpBase = ParMBase->ArpBase;
  91.     ReqBase = ParMBase->ReqBase;
  92.     IconBase = ParMBase->IconBase;
  93.     LayersBase = ParMBase->LayersBase;
  94.     IntuitionBase = (struct IntuitionBase *)ArpBase->IntuiBase;
  95.     GfxBase = (struct GfxBase *)ArpBase->GfxBase;
  96.  
  97.     if (WBenchMsg) {
  98.         CurrentDir(WBenchMsg->sm_ArgList->wa_Lock);
  99.         _argv = (char **)WBenchMsg;
  100.     }
  101.     else {
  102.         /*
  103.          *    WARNING: With that function, argv[] array will not start with the program
  104.          *    name but with it's first argument. If there's no args, argc will be zero.
  105.          */
  106.         _argv = ArpAlloc(sizeof(APTR) * (NUM_ARGS + 1));
  107.         _argc = (int) GADS(aptr, alen, HelpUsage, _argv, Template);
  108.         if (_argc < 0) {
  109.             Puts(_argv[0]);
  110.             exit(20);
  111.         }
  112.     }
  113.  
  114.     main(_argc, _argv);
  115.  
  116.     exit(0);
  117. }
  118.  
  119.  
  120.