home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 549a.lha / M2P_v1.0 / mods.lzh / Args.mod next >
Text File  |  1991-08-10  |  3KB  |  257 lines

  1. IMPLEMENTATION MODULE Args;
  2.  
  3. IMPORT
  4.     SYSTEM;
  5. IMPORT
  6.     Strings,FStorage;
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  (* insert machine specific imports here *)
  25.  
  26.  
  27.  
  28.  
  29. (*----------------------------------------------------------------------*)
  30.  
  31.  
  32. VAR
  33.     WM: POINTER TO Workbench.WBStartup;
  34.     process: ProcessPtr;
  35.  
  36.  
  37. (*----------------------------------------------------------------------*)
  38.  
  39.  
  40.  
  41.  
  42. PROCEDURE AddArgs(string: ARRAY OF CHAR);
  43.  
  44. VAR
  45.     buffer : ARRAY [0..MaxArgSize] OF CHAR;
  46.     len,i,j: CARDINAL;
  47.  
  48. BEGIN
  49.     i:=0;
  50.     j:=0;
  51.     len:=Strings.Length(string);
  52.  
  53.     WHILE (j<MaxArgSize) AND (i<=len) AND (argc<=MaxArg) DO
  54.         j:=0;
  55.         WHILE (string[i]=" ") OR (string[i]=11C) DO
  56.             INC(i);
  57.         END;
  58.  
  59.         IF string[i]<" " THEN
  60.             RETURN;
  61.         END;
  62.  
  63.         IF string[i]='"' THEN
  64.             INC(i);
  65.             WHILE (string[i]#'"') AND (j<MaxArgSize) AND (i<len) DO
  66.                 IF (string[i] = CHR(92)) AND (string[i+1]='"') THEN
  67.                     INC(i);
  68.                 END;
  69.                 buffer[j]:=string[i];
  70.                 INC(j);
  71.                 INC(i);
  72.             END;
  73.             IF string[i]='"' THEN
  74.                 INC(i);
  75.             END;
  76.         ELSE
  77.             IF (string[i]>='!') AND (string[i]<='-') THEN
  78.                 buffer[j]:=string[i];
  79.                 INC(i);
  80.                 INC(j);
  81.             ELSE
  82.                 REPEAT
  83.                     buffer[j]:=string[i];
  84.                     INC(j);
  85.                     INC(i);
  86.                 UNTIL (string[i]<="-") OR (j>=MaxArgSize) OR (i>=len);
  87.             END;
  88.         END;
  89.         buffer[j]:=0C;
  90.         FStorage.ALLOCATE(argv[argc],LONGCARD(j+1));
  91.         Strings.Assign(buffer,argv[argc]^);
  92.         INC(argc);
  93.     END;
  94. END AddArgs;
  95.  
  96. (*----------------------------------------------------------------------*)
  97. (* Get the command name.  If this is not an Amiga, make an empty string *)
  98. (*----------------------------------------------------------------------*)
  99.  
  100.  
  101.  
  102. PROCEDURE AddCmdName;
  103.  
  104. VAR
  105.     charptr : POINTER TO CHAR;
  106.     stringptr: POINTER TO ARRAY [0..MaxArgSize] OF CHAR;
  107.     toolptr : POINTER TO SYSTEM.ADDRESS;
  108.     buffer : ARRAY [0..MaxArgSize] OF CHAR;
  109.     len,i : CARDINAL;
  110.  
  111.     cli : CommandLineInterfacePtr;
  112.     numargs: INTEGER;
  113.     arglist: Workbench.WBArgPtr;
  114.     diskobj: Workbench.DiskObjectPtr;
  115.     lock: FileLock;
  116.  
  117.  
  118. BEGIN
  119.     i:=0;
  120.  
  121. (* started from CLI *)
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134. (* started from WorkBench *)
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146. (* insert compiler dependency here *)
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.     buffer[i]:=0C;
  165.     FStorage.ALLOCATE(argv[argc],LONGCARD(i+1));
  166.     Strings.Assign(buffer,argv[argc]^);
  167.     INC(argc);
  168.  
  169. END AddCmdName;
  170.  
  171. (*----------------------------------------------------------------------*)
  172. (* Add the command line arguments from the shell (or CLI)               *)
  173. (*----------------------------------------------------------------------*)
  174.  
  175. PROCEDURE AddCmdArgs;
  176.  
  177. VAR
  178.     stringptr: POINTER TO ARRAY [0..MaxArgSize] OF CHAR;
  179.  
  180. BEGIN
  181.  
  182.     IF SYSTEM.ADDRESS(WM) = SYSTEM.ADDRESS(0) THEN
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  (* insert compiler dependent stuff here *)
  189.  
  190.         AddArgs(stringptr^);
  191.     END;
  192.  
  193. (* insert OS dependent stuff here *)
  194.  
  195. END AddCmdArgs;
  196.  
  197. (*----------------------------------------------------------------------*)
  198. (* Termination procedure, call this to clean things up.                 *)
  199. (*----------------------------------------------------------------------*)
  200.  
  201.  
  202. PROCEDURE TermProc;
  203. BEGIN
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.     Libraries.CloseLibrary(IconBase);
  212.  
  213. END TermProc;
  214.  
  215. (************************************************************************)
  216.  
  217. BEGIN
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  (* insert compiler dependent stuff here *)
  225.  
  226.  
  227.     IF SYSTEM.ADDRESS(process^.prCLI) = SYSTEM.ADDRESS(0) THEN
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.         WM:=SYSTEM.ADDRESS(0);
  235.  (* insert Workbench message initialization here *)
  236.  
  237.     END;
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  (* insert compiler dependent OpenLibrary here *)
  246.  
  247.  
  248.  
  249.     FOR argc:= 0 TO MaxArg DO
  250.         argv[argc]:=NIL;
  251.     END;
  252.     argc:=0;
  253.  
  254.     AddCmdName;
  255.     AddCmdArgs;
  256. END Args.
  257.