/* * WBRun.c - Copyright © 1990 by S.R. & P.C. * * Created: 28 Apr 1991 20:17:57 * Modified: 07 Jul 1991 11:15:08 * * Make>> copy ParM.sym ram: clone quick * Make>> cc -qf -ps -wp -wd -wu -wr -sb -so -hi ram:ParM.sym .c * Make>> ln -m .o -larpsc */ #include "ParMBase.h" #define USAGE "Usage: WBRun Prog [args] [STACK size] [PRI pri] [DELAY sec]" #define TEMPLATE "Prog/a,args/...,STACK/k,PRI/k,DELAY/k" struct ParMBase *ParMBase; struct ExecBase *SysBase; struct ArpBase *ArpBase; long DosWrite(BPTR file, char *buffer, long length); #pragma amicall(DOSBase, 0x30, DosWrite(d1,d2,d3)) void exit(int code) { CloseLibrary(ParMBase); Exit(code); } void main(int argc, char **argv, struct Process *pp) { struct Extended_WBStartup *EWBS; struct ParMConfig ParMConfig; char **args; long Stack; BYTE Pri; short i; short NumArg = 1; /* 1 by default (or 2 if PROJECT ) */ FreeRepliedWBMessages(); if (argc == 0) { Puts(USAGE); return; } ParMConfig.DefaultStack = ((struct CommandLineInterface *)(pp->pr_CLI << 2))->cli_DefaultStack << 2; Stack = Atol(argv[2]); Pri = Atol(argv[3]); ParMConfig.ReqTitle = "WBRun"; if (args = (char **)argv[1]) { while(*args++) NumArg++; } EWBS = AllocMem(sizeof(struct Extended_WBStartup), MEMF_PUBLIC|MEMF_CLEAR); if ((EWBS->ArgArray = AllocMem((NumArg+1)*sizeof(struct WBArg), MEMF_PUBLIC|MEMF_CLEAR))) { EWBS->ArrayLength = NumArg + 1; EWBS->WBStartup.sm_NumArgs = NumArg; EWBS->WBStartup.sm_ArgList = &EWBS->ArgArray[1]; if (MakeWBArg(&ParMConfig, EWBS->WBStartup.sm_ArgList, argv[0])) { if (args = (char **)argv[1]) { i = 1; while(*args) { if (!MakeWBArg(&ParMConfig, &EWBS->WBStartup.sm_ArgList[i++], *args++)) { WBFree(EWBS); exit(20); } } } if (GetTool(&ParMConfig, EWBS, Stack)) { WBRun(&ParMConfig, EWBS, Pri); Delay(Atol(argv[4])*50); return; } } } WBFree(EWBS); exit(20); } void _main(long alen, char *aptr) { struct Library *DOSBase; register struct Process *pp; int _argc; char **_argv; pp = (struct Process *)SysBase->ThisTask; if (!(ParMBase = (struct ParMBase *)OpenLibrary("parm.library", 1L))) { if (DOSBase = OpenLibrary("dos.library", 0L)) { DosWrite(pp->pr_COS, "You need parm.library V1+\n", 26L); CloseLibrary(DOSBase); } return; } ArpBase = ParMBase->ArpBase; _argv = ArpAlloc(24); _argc = (int)GADS(aptr, alen, USAGE, _argv, TEMPLATE); if (_argc < 0) { Puts(_argv[0]); exit(20); } main(_argc, _argv, pp); exit(0); }