home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / MBUG / MBUG086.ARC / START2.LBR / PARAMSTR.IZ / PARAMSTR.I
Text File  |  1979-12-31  |  2KB  |  64 lines

  1. FUNCTION _paramstr (N:INTEGER) : STRING127;
  2.  
  3. {Function to emulate the paramstr function of TURBO v3.
  4.  Returns the Nth parameter in the commandline,
  5.  returns a null string if less than N parameters on line.
  6.  
  7. routine checks each character and decides if it is inside a word
  8. or not, incrementing the count on the transition from not inside
  9. to inside. When the Nth parameter is found, it starts copying characters
  10. to a temporary string until not inside a parameter or the end of the
  11. commandline is reached.
  12. Space & tab characters are the separators.
  13.  
  14. NOTE type STRING127 needs to be defined in the calling program
  15.      ie TYPE
  16.            STRING127 = STRING[127]
  17.  
  18. R.J. Foord ph052 513131 AH
  19. Mar '88
  20.  
  21. MBUG member 1044
  22. }
  23.  
  24. CONST
  25.    tab = ^I;
  26.  
  27. VAR
  28.    inside      : BOOLEAN;                     {true if inside a word}
  29.    found       : BOOLEAN;                     {true after Nth parameter found}
  30.    i,L, count  : INTEGER;
  31.    ch          : CHAR;
  32.    parameterN  : STRING127;
  33. {  cmdline     : STRING127 ABSOLUTE CSEG:$80;     (*MSDOS*)}
  34.    cmdline     : STRING127 ABSOLUTE $80;          (*CP/M *)
  35.  
  36. BEGIN
  37.    parameterN[0] := ^@;   {blank string}
  38.    inside := FALSE;
  39.    found  := FALSE;
  40.    count  := 0;
  41.    L      := LENGTH(cmdline);
  42.    i      := 1;
  43.  
  44.    IF L > 0 THEN                                 {if anything on commandline}
  45.  
  46.       WHILE (i <= L) AND (NOT found) DO
  47.       BEGIN
  48.          ch := cmdline[i];                       {get next char from command line}
  49.  
  50.          IF inside <> NOT (ch IN [' ',tab]) THEN {space & tab are separators     }
  51.          BEGIN                                   {gone from not inside a word to}
  52.             inside := NOT inside;                {inside a word or vice versa   }
  53.             IF inside THEN count := SUCC(count);
  54.          END;
  55.  
  56.          IF (inside AND (count = N)) THEN        {if the Nth parameter}
  57.             parameterN := parameterN + ch;       {build up the copy}
  58.  
  59.          IF count > N THEN found := TRUE;
  60.          i := i+1;
  61.       END;
  62.    _paramstr := parameterN
  63. END;  {_paramstr}
  64.