home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / Arguments.mod < prev    next >
Text File  |  1996-07-02  |  3KB  |  134 lines

  1. IMPLEMENTATION MODULE Arguments;
  2.  
  3. (* (C) Copyright 1993 Marcel Timmermans. All rights reserved. *)
  4.  
  5. (* 
  6.    REVISON
  7.    -------
  8.    Removed space bug (20C # space) 07.05.95/MT
  9.  
  10. *)
  11.  
  12. FROM SYSTEM    IMPORT SHIFT,ADDRESS,ADR,SETREG,CAST;
  13. FROM ModulaLib IMPORT dosCmdBuf,wbStarted,wbenchMsg,thisTask;
  14.  
  15. IMPORT DosD,
  16.        DosL,
  17.        ExecL,
  18.        wb:Workbench;
  19.  
  20. CONST
  21.   LF=CHAR(0AH);
  22.   quote='"';
  23.  
  24. TYPE
  25.     CharPtr = POINTER TO CHAR;
  26.  
  27. VAR
  28.     WBSt: wb.WBStartupPtr;
  29.     CommLine:CharPtr;
  30.  
  31.  
  32. PROCEDURE GetParms(VAR s:ARRAY OF CHAR);
  33. VAR
  34.   i:INTEGER;
  35.  
  36.   PROCEDURE SkipSpace;
  37.   BEGIN
  38.     WHILE CommLine^=' ' DO INC(CommLine); END;
  39.   END SkipSpace;
  40.  
  41. BEGIN
  42.   i:=0; SkipSpace;
  43.   IF CommLine^=quote THEN
  44.     INC(CommLine);
  45.     LOOP
  46.       IF i=HIGH(s) THEN i:=0; END;
  47.       IF CommLine^=quote THEN INC(CommLine); EXIT;
  48.       ELSIF CommLine^=LF THEN EXIT;
  49.       ELSE
  50.         s[i]:=CommLine^; INC(CommLine);
  51.         INC(i);
  52.       END;
  53.     END;
  54.   ELSE (* no quote (") *)
  55.     LOOP
  56.       IF (CommLine^=' ') OR (CommLine^=LF) THEN EXIT;
  57.       ELSE
  58.         IF i<HIGH(s) THEN s[i]:=CommLine^; END;
  59.         INC(CommLine);
  60.         INC(i);
  61.       END;
  62.     END;
  63.   END;
  64.   IF i<HIGH(s) THEN s[i]:=0C; END;
  65.   SkipSpace;
  66. END GetParms;
  67.  
  68. PROCEDURE NumArgs():INTEGER;
  69. VAR
  70.   cnt:INTEGER;
  71.   dummy:ARRAY[0..255] OF CHAR;
  72. BEGIN
  73.   IF wbStarted THEN
  74.     RETURN WBSt^.numArgs-1
  75.   ELSE
  76.     CommLine:=dosCmdBuf;
  77.     cnt:=0;
  78.     WHILE CommLine^#LF DO
  79.       GetParms(dummy);
  80.       INC(cnt);
  81.     END;
  82.     RETURN cnt
  83.   END
  84. END NumArgs;
  85.  
  86. PROCEDURE GetArg(arg: INTEGER; VAR argument: ARRAY OF CHAR);
  87. VAR i:INTEGER;
  88.     p:DosD.ProcessPtr;
  89. BEGIN
  90.   IF arg<=NumArgs() THEN
  91.     IF wbStarted THEN
  92.       i:=0;
  93.       CommLine:=WBSt^.argList^[arg].name;
  94.       WHILE i<HIGH(argument) DO
  95.         argument[i]:=CommLine^; INC(CommLine);
  96.         INC(i);
  97.       END;
  98.       SETREG(0,DosL.CurrentDir(WBSt^.argList^[arg].lock)); (* cancel result *)
  99.     ELSE (* cli *)
  100.       IF arg=0 THEN
  101.         p:=thisTask; CommLine:=ADR(p^.cli^.commandName^); (* BSTR *)
  102.         i:=ORD(CommLine^); (* BSTR LEN *)
  103.         INC(CommLine);
  104.         ExecL.CopyMem(CommLine,ADR(argument[0]),i);
  105.         IF i<HIGH(argument) THEN argument[i]:=0C; ELSE i:=HIGH(argument); END;
  106.       ELSE (* arg#0 *)
  107.         CommLine:=dosCmdBuf;
  108.         WHILE arg>0 DO
  109.           DEC(arg);
  110.           GetParms(argument);
  111.         END;
  112.       END;
  113.     END (* if wbstarted *)
  114.   END;
  115. END GetArg;
  116.  
  117. PROCEDURE GetLock(arg: INTEGER): DosD.FileLockPtr;
  118. BEGIN
  119.   IF wbStarted THEN
  120.     WITH WBSt^ DO
  121.       IF arg<numArgs THEN
  122.         RETURN argList^[arg].lock
  123.       END
  124.     END (* WITH *)
  125.   END;
  126.   RETURN NIL
  127. END GetLock;
  128.  
  129. BEGIN
  130.   IF wbStarted THEN
  131.     WBSt:=wbenchMsg;
  132.   END;
  133. END Arguments.mod
  134.