home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols200 / vol270 / getarg.pas < prev    next >
Pascal/Delphi Source File  |  1986-05-22  |  2KB  |  91 lines

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