home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D2.DMS / in.adf / Module / Arguments.mod < prev    next >
Encoding:
Text File  |  1994-08-05  |  3.2 KB  |  160 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Library Module: Arguments            Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1992 by Fridtjof Siebert                                            *)
  6. (*                                                                         *)
  7. (*-------------------------------------------------------------------------*)
  8.  
  9. MODULE Arguments;
  10.  
  11. IMPORT d * := Dos,
  12.        e   := Exec,
  13.        wb  := Workbench,
  14.        ol  := OberonLib,
  15.        sys := SYSTEM;
  16.  
  17. TYPE
  18.   CliPtr  = UNTRACED POINTER TO d.CommandLineInterface;
  19.   CharPtr = UNTRACED POINTER TO CHAR;
  20.  
  21. CONST
  22.   quote = '"';
  23.   lf = 0AX;
  24.  
  25. VAR
  26.   Me * : d.ProcessPtr;
  27.   CommLine: CharPtr;
  28.   MyCli: CliPtr;
  29.   oldCurrentDir * : d.FileLockPtr;
  30.   wbm: wb.WBStartupPtr;
  31.  
  32.  
  33. PROCEDURE Move(i: LONGINT);
  34. BEGIN
  35.   CommLine := sys.VAL(CharPtr,sys.VAL(LONGINT,CommLine)+i);
  36. END Move;
  37.  
  38. PROCEDURE Next;
  39. BEGIN
  40.   Move(1);
  41. END Next;
  42.  
  43. PROCEDURE GetCLIArg(VAR str: ARRAY OF CHAR);
  44.  
  45. VAR l: INTEGER;
  46.  
  47. BEGIN
  48.   WHILE CommLine^=20X DO Next END;
  49.   l := 0;
  50.   IF CommLine^=quote THEN
  51.     Next;
  52.     LOOP
  53.       IF l=LEN(str) THEN l := 0 END;
  54.       CASE CommLine^ OF
  55.       quote: Next; EXIT |
  56.       lf:          EXIT |
  57.       ELSE
  58.         str[l] := CommLine^;
  59.         Next; INC(l);
  60.       END;
  61.     END;
  62.   ELSE
  63.     LOOP
  64.       CASE CommLine^ OF
  65.       20X,lf: EXIT |
  66.       ELSE
  67.         IF l<LEN(str) THEN str[l] := CommLine^ END;
  68.         Next; INC(l)
  69.       END;
  70.     END;
  71.   END;
  72.   IF l<LEN(str) THEN str[l] := 0X END;
  73.   WHILE CommLine^=20X DO Next END;
  74. END GetCLIArg;
  75.  
  76.  
  77. PROCEDURE NumArgs*(): INTEGER;
  78.  
  79. VAR
  80.   cnt:INTEGER;
  81.   s: ARRAY 80 OF CHAR;
  82.  
  83. BEGIN
  84.   IF ol.wbStarted THEN
  85.     RETURN SHORT(wbm.numArgs-1)
  86.   ELSE
  87.     cnt:=0; CommLine := ol.dosCmdBuf;
  88.     WHILE CommLine^#lf DO
  89.       GetCLIArg(s);
  90.       INC(cnt);
  91.     END;
  92.     RETURN cnt;
  93.   END
  94. END NumArgs;
  95.  
  96.  
  97. PROCEDURE GetArg*(arg: INTEGER; VAR argument: ARRAY OF CHAR);
  98. VAR i: LONGINT;
  99. BEGIN
  100.   IF arg>NumArgs() THEN argument := ""; RETURN END;
  101.   IF ol.wbStarted THEN
  102.     CommLine := sys.VAL(e.APTR,wbm.argList[arg].name);
  103.     i := 0;
  104.     WHILE i<LEN(argument) DO
  105.       argument[i] := CommLine^;
  106.       Next; INC(i);
  107.     END;
  108.     IF d.CurrentDir(wbm.argList[arg].lock)=NIL THEN END;
  109.   ELSE
  110.     IF arg=0 THEN
  111.       CommLine := sys.ADR(Me.cli.commandName^); i := ORD(CommLine^);
  112.       IF i>=LEN(argument) THEN i := LEN(argument)
  113.                           ELSE argument[i] := 0X END;
  114.  
  115.       Move(i);
  116.  
  117.       WHILE i>0 DO
  118.         DEC(i);
  119.         argument[i] := CommLine^;
  120.         Move(-1);
  121.       END;
  122.     ELSE
  123.       CommLine:=ol.dosCmdBuf;
  124.       WHILE arg>0 DO
  125.         DEC(arg);
  126.         GetCLIArg(argument);
  127.       END;
  128.     END (* IF arg=0 *)
  129.   END (* IF ol.wbstarted *)
  130. END GetArg;
  131.  
  132.  
  133. PROCEDURE GetLock * (num: INTEGER): d.FileLockPtr;
  134. BEGIN
  135.   IF ol.wbStarted & (num<wbm.numArgs) THEN
  136.     RETURN wbm.argList[num].lock;
  137.   ELSE
  138.     RETURN oldCurrentDir;
  139.   END;
  140. END GetLock;
  141.  
  142.  
  143. BEGIN
  144.  
  145.   Me := sys.VAL(d.ProcessPtr,ol.Me);
  146.   oldCurrentDir := Me.currentDir;
  147.   IF ol.wbStarted THEN
  148.     wbm := ol.wbenchMsg;
  149.     sys.SETREG(0,d.CurrentDir(wbm.argList[0].lock));
  150.   END;
  151.  
  152. CLOSE
  153.  
  154.   IF d.CurrentDir(oldCurrentDir)=NIL THEN END;
  155.  
  156. END Arguments.
  157.  
  158.  
  159.  
  160.