home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d540 / wbrun.lha / WBRun / WBRun.c < prev    next >
C/C++ Source or Header  |  1991-08-27  |  3KB  |  109 lines

  1. /*
  2.  *    WBRun.c - Copyright © 1990 by S.R. & P.C.
  3.  *
  4.  *    Created:    28 Apr 1991  20:17:57
  5.  *    Modified:    07 Jul 1991  11:15:08
  6.  *
  7.  *    Make>> copy ParM.sym ram: clone quick
  8.  *    Make>> cc -qf -ps -wp -wd -wu -wr -sb -so -hi ram:ParM.sym <file>.c
  9.  *    Make>> ln -m <file>.o -larpsc
  10.  */
  11.  
  12. #include "ParMBase.h"
  13.  
  14. #define USAGE        "Usage: WBRun Prog [args] [STACK size] [PRI pri] [DELAY sec]"
  15. #define TEMPLATE    "Prog/a,args/...,STACK/k,PRI/k,DELAY/k"
  16.  
  17.  
  18. struct ParMBase *ParMBase;
  19. struct ExecBase *SysBase;
  20. struct ArpBase *ArpBase;
  21.  
  22. long DosWrite(BPTR file, char *buffer, long length);
  23. #pragma amicall(DOSBase, 0x30, DosWrite(d1,d2,d3))
  24.  
  25.  
  26. void exit(int code)
  27. {
  28.     CloseLibrary(ParMBase);
  29.     Exit(code);
  30. }
  31.  
  32.  
  33. void main(int argc, char **argv, struct Process *pp)
  34. {
  35.     struct Extended_WBStartup *EWBS;
  36.     struct ParMConfig ParMConfig;
  37.     char **args;
  38.     long Stack;
  39.     BYTE Pri;
  40.     short i;
  41.     short NumArg = 1;    /* 1 by default (or 2 if PROJECT ) */
  42.  
  43.     FreeRepliedWBMessages();
  44.     if (argc == 0) {
  45.         Puts(USAGE);
  46.         return;
  47.     }
  48.     ParMConfig.DefaultStack = ((struct CommandLineInterface *)(pp->pr_CLI << 2))->cli_DefaultStack << 2;
  49.     Stack = Atol(argv[2]);
  50.     Pri = Atol(argv[3]);
  51.     ParMConfig.ReqTitle = "WBRun";
  52.     if (args = (char **)argv[1]) {
  53.         while(*args++)
  54.             NumArg++;
  55.     }
  56.     EWBS = AllocMem(sizeof(struct Extended_WBStartup), MEMF_PUBLIC|MEMF_CLEAR);
  57.     if ((EWBS->ArgArray = AllocMem((NumArg+1)*sizeof(struct WBArg), MEMF_PUBLIC|MEMF_CLEAR))) {
  58.         EWBS->ArrayLength = NumArg + 1;
  59.         EWBS->WBStartup.sm_NumArgs = NumArg;
  60.         EWBS->WBStartup.sm_ArgList = &EWBS->ArgArray[1];
  61.         if (MakeWBArg(&ParMConfig, EWBS->WBStartup.sm_ArgList, argv[0])) {
  62.             if (args = (char **)argv[1]) {
  63.                 i = 1;
  64.                 while(*args) {
  65.                     if (!MakeWBArg(&ParMConfig, &EWBS->WBStartup.sm_ArgList[i++], *args++)) {
  66.                         WBFree(EWBS);
  67.                         exit(20);
  68.                     }
  69.                 }
  70.             }
  71.             if (GetTool(&ParMConfig, EWBS, Stack)) {
  72.                 WBRun(&ParMConfig, EWBS, Pri);
  73.                 Delay(Atol(argv[4])*50);
  74.                 return;
  75.             }
  76.         }
  77.     }
  78.     WBFree(EWBS);
  79.     exit(20);
  80. }
  81.  
  82.  
  83. void _main(long alen, char *aptr)
  84. {
  85.     struct Library *DOSBase;
  86.     register struct Process *pp;
  87.     int _argc;
  88.     char **_argv;
  89.  
  90.     pp = (struct Process *)SysBase->ThisTask;
  91.     if (!(ParMBase = (struct ParMBase *)OpenLibrary("parm.library", 1L))) {
  92.         if (DOSBase = OpenLibrary("dos.library", 0L)) {
  93.             DosWrite(pp->pr_COS, "You need parm.library V1+\n", 26L);
  94.             CloseLibrary(DOSBase);
  95.         }
  96.         return;
  97.     }
  98.     ArpBase = ParMBase->ArpBase;
  99.     _argv = ArpAlloc(24);
  100.     _argc = (int)GADS(aptr, alen, USAGE, _argv, TEMPLATE);
  101.     if (_argc < 0) {
  102.         Puts(_argv[0]);
  103.         exit(20);
  104.     }
  105.     main(_argc, _argv, pp);
  106.     exit(0);
  107. }
  108.  
  109.