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 / CPM / TURBOPAS / TRUN.LBR / TRUN2C1.PQS / TRUN2C1.PAS
Pascal/Delphi Source File  |  2000-06-30  |  5KB  |  107 lines

  1. Program TRUN2c;
  2.  
  3. {          TRUN runs a program specified on the command line.
  4.  
  5.     This version works with all versions of CP/M-80 Turbo Pascal and
  6.     is designed to eliminate the 32-character limit imposed by using
  7.     the command line buffer at $80.  This limit exists  whether  the
  8.     line is parsed by a program subroutine in earlier Turbo versions
  9.     or by ParamStr and ParamCount functions in Turbo Pascal v. 3.00.
  10.  
  11.     Advantages:
  12.  
  13.        (1) Can parse longer command lines (up to 128 characters).
  14.        (2) Can use the initial command in the line (ParamStr(0)).
  15.  
  16.                 (c) August, 1985  by Mike Dingacci, MD
  17.  
  18.                 Program is hereby placed in the public
  19.                 domain.  It may be used by  anyone for
  20.                 any purpose. The author will accept no
  21.                 responsibility for the accuracy of the
  22.                 software,  nor for any problems  which
  23.                 may result from its use.       - RMD -
  24.  
  25.                 Comments or
  26.                 questions to:    P.O. Box 1124
  27.                                  Fallon, Nevada  89406
  28. }
  29. Type
  30.      Cmdstr        = String[127]; { 127 = max theoretical cmdline length    }
  31. Var
  32.      Cmdline,Cmd   : Cmdstr;  { Declared 1st for easy passage to .CHN file  }
  33.      I,Ltr,Z,Cmdln : Integer;
  34.      Cmdfil        : File;
  35.      a             : String[2];
  36.  
  37. Procedure Parse;
  38.    Begin
  39.       Cmdline := ''; Cmd := '';            { zero variables for below        }
  40.       I := 0; Z := 0;
  41.       Ltr   := Mem[cmdln];                 { Ltr = no. of characters         }
  42.       While I < Ltr Do Begin               { Routine builds ParamStr(1)      }
  43.          I := I+1;                         { (could build 2, 3, etc.)        }
  44.  
  45.          Cmdline := Cmdline + Chr(Mem[Cmdln+I]); { variable 'Cmdline' passes }
  46.                                                  { command line to .CHN file }
  47.  
  48.          If Z = 1 Then If Cmdline[I] <> ' ' Then Cmd := Cmd + Cmdline[I];
  49.          If Cmdline[I] = ' ' Then Z := Z + 1;
  50.       End;
  51.    End; {Parse}
  52.  
  53. Procedure Instruct;       { v. number = same as v. of Turbo used to compile }
  54.    Begin
  55.  
  56.      ClrScr; Gotoxy(1,4);
  57.      Write(
  58.  
  59.      '       TRUN v. 2.c - Compiled with CP/M Turbo Pascal v. 2.0    ' ,a,a,a,
  60.      {                 ^-->use command line at ccp instead of $80            }
  61.  
  62.      '  This is a run-time loader,  compiled with the  DEFAULT  START' ,a,
  63.      '  ADDRESS  (the end of the pascal library plus 1).   For proper' ,a,
  64.      '  handling of variables, CHN programs run with this loader must' ,a,
  65.      '  be compiled with this same start address.   To run a CHN file' ,a,
  66.      '  with a  DIFFERENT start address, a new version of this loader' ,a,
  67.      '  may be compiled with a start address IDENTICAL to that of the' ,a,
  68.      '  program to be run.                                           ' ,a,a,
  69.  
  70.      'To avoid this message, use the syntax:  TRUN filename          ' ,a,a,
  71.      'Filename is the name (without extension) of CHN program to run.' ,a,a,
  72.  
  73.      'Name of program to run: '); Readln(Cmd);
  74.      For I := 1 to Length(Cmd) Do Cmd [I] := Upcase(Cmd[I]); { Capitalize    }
  75.    End; {Instruct}
  76.  
  77. BEGIN {TRUN}
  78.  
  79.    a := chr(13) + chr(10);                      { put CR/LF into variable a  }
  80.    Cmdln := mem[2] * 256 - $1600 + 7;           { find start of command line
  81.      (This algorithm will work even when pro- )   (bottom of CCP+7), where it
  82.      (grams such as XtraKey and UniForm are   )   was conveniently stored for
  83.      (protected in high memory. Location from )   us, in its entirety, by
  84.      (06h and 07h won't work if this is true. )   cp/m!                      }
  85.  
  86.    Parse;                                  { procedure builds Parameters and }
  87.                                            { returns strings Cmdline and Cmd.}
  88.    If Cmd  = '' Then Instruct;             { Instructions if no parameters.  }
  89.  
  90.    If Pos('.',Cmd) = 0 Then Cmd := Cmd+'.CHN'; { If no extent then = .CHN    }
  91.  
  92.    If Cmd <> '.CHN' Then Begin             { Chain to CHN program named --   }
  93.                                            { (unless it is a blank line).    }
  94.       Write('TRUN v. 2.c (08/25/85): ');   { Same v. as Turbo used to compile}
  95.       Writeln(Cmd); Writeln;
  96.       Assign(Cmdfil,Cmd);
  97.       {$I-} Chain(Cmdfil) {$I+};           { 'file not found' error-trapping }
  98.                                            { starts on chain to cmdfil and   }
  99.                                            { error message follows:          }
  100.       If Ioresult = 1 Then Write(
  101.  
  102.       '- - - - - - - - - - - > ', Chr(7), Cmd, ' NOT found.        ' ,a,a,
  103.       'Check disk and try again!                                   ');
  104.    End;
  105.  
  106. END. {TRUN}
  107.