home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol270 / getarg.src < prev    next >
Encoding:
Text File  |  1986-05-22  |  2.0 KB  |  92 lines

  1. (*
  2.     GETARG (var argc:integer; var argv:argl );
  3.  
  4.     Pascal MT+ version getarg
  5.     by T.Nomura
  6.  
  7.     call getarg then return argc and argv.
  8. *)
  9. program GetArgTest(input,output);
  10. const
  11.      MAXARG = 10;     (* max of numbers of argv[max] *)
  12.      ARGLEN = 20;     (* max of length of argv[i] *)
  13.      NULL   =  0;     (* terminator *)
  14. type
  15.     pstrg = ^string;
  16.  
  17.     arg = array[1..MAXARG] of string[ARGLEN];
  18.     argl = string[255];
  19. var i,len:integer;
  20.     argc:integer;
  21.     argv:arg;
  22.  
  23.  
  24. external function @cmd : pstrg;
  25.  
  26. procedure GetArgList(var arglist:argl);
  27. var
  28.     s:argl;
  29.     ptr:pstrg;
  30. begin
  31.      ptr := @cmd;
  32.      arglist := ptr^;
  33. end;
  34.  
  35.  
  36. procedure getarg(var argc:integer;var argv:arg);
  37. var
  38.    i,len:integer;
  39.    argnum:integer;
  40.    arglist:argl;
  41.    first:boolean;
  42. begin
  43.      GetArgList(arglist);
  44.      len := length(arglist);
  45.      argnum := 1;
  46.      for i := 1 to MAXARG do
  47.          argv[i] := '';
  48.      i := 1;
  49.      first := true;
  50.  
  51.      (* pass the spaces *)
  52.      while ( i <= len ) and ( arglist[i] = ' ') do
  53.            i := i + 1;
  54.      if i > len then
  55.            argc := 1
  56.      else
  57.       begin
  58.            while ( i <= len ) and (argnum <= MAXARG+1) do
  59.             begin
  60.                  if arglist[i] = ' ' then
  61.                   begin
  62.                        if first then
  63.                         begin
  64.                              argnum := argnum + 1;
  65.                              first := false;
  66.                         end
  67.                   end
  68.                  else
  69.                   begin
  70.                        argv[argnum] := concat(argv[argnum], arglist[i]);
  71.                        first := true;
  72.                   end;
  73.                  i := i + 1;
  74.             end;
  75.            if first then
  76.               argc := argnum + 1
  77.            else
  78.                argc := argnum;
  79.            if argnum > MAXARG+1 then
  80.               writeln('Error : Argv overflow');
  81.      end;
  82. end;
  83. (*------------------------------------------------------------------------*)
  84. (* MAIN *)
  85. (* test program *)
  86. begin
  87.      getarg(argc,argv);
  88.      writeln('argc = ',argc);
  89.      for i := 1 to argc-1 do
  90.          writeln(argv[i]);
  91. end.
  92.