home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / packet / findx / argx.pas next >
Pascal/Delphi Source File  |  1990-11-02  |  2KB  |  98 lines

  1. Unit argx;
  2.  
  3. INTERFACE
  4.  
  5. function arg_count: integer;
  6. function arg_string(ordinal: integer): string;
  7.  
  8. IMPLEMENTATION
  9.  
  10. Uses Dos;
  11.  
  12. var
  13.     regs: Registers;
  14.     tail: ComStr;
  15.     PSP: ^ComStr;
  16.     PSP_seg, PSP_Ofs: integer;
  17.  
  18.     test_ix: integer;
  19.  
  20. procedure get_tail;
  21. begin
  22.     regs.AH := 98;
  23.     Msdos(regs);
  24.     PSP_seg := regs.BX;
  25.     PSP_Ofs := 128;
  26.     PSP := Ptr(PSP_Seg,PSP_Ofs);
  27.     tail := PSP^
  28. end;
  29.  
  30.  
  31. function arg_count;
  32.  
  33. var
  34.     i0, temp: integer;
  35.     at_end: boolean;
  36.  
  37. begin
  38.     get_tail;
  39.     i0 := 1;
  40.     temp := 0;
  41.     at_end := false;
  42.     repeat
  43.         while (i0 <= length(tail)) and
  44.            (tail[i0] = ' ') do
  45.             i0 := i0 + 1;
  46.         if i0 <= length(tail) then begin
  47.             temp := temp + 1;
  48.             while (i0 <= length(tail)) and
  49.                (tail[i0] <> ' ') do
  50.                 i0 := i0 + 1;
  51.             if i0 > length(tail) then
  52.                 at_end := true
  53.             end
  54.         else at_end := true
  55.     until at_end;
  56.     arg_count := temp
  57. end;
  58.  
  59. function arg_string;
  60. var
  61.     i0, temp, start_arg, end_arg: integer;
  62.     at_end: boolean;
  63. begin
  64.     if (ordinal < 1) or
  65.        (ordinal > arg_count) then
  66.         arg_string := ''
  67.     else begin
  68.         i0 := 1;
  69.         at_end := false;
  70.         temp := 0;
  71.         repeat
  72.             while (i0 <= length(tail)) and
  73.               (tail[i0] = ' ') do
  74.                 i0 := i0 + 1;
  75.             if i0 <= length(tail) then begin
  76.                 temp := temp + 1;
  77.                 start_arg := i0;
  78.                 while (i0 <= length(tail)) and
  79.                    (tail[i0] <> ' ') do
  80.                     i0 := i0 + 1;
  81.                 end_arg := i0 - 1;
  82.                 if temp = ordinal then begin
  83.                     at_end := true;
  84.                     arg_string := copy(tail,start_arg,
  85.                        (end_arg - start_arg + 1))
  86.                     end
  87.                 end
  88.             else begin
  89.                 arg_string := '';
  90.                 at_end := true
  91.                 end
  92.         until at_end
  93.         end
  94. end;
  95.  
  96.  
  97. end.
  98.