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 / START2.PZS / START2.PAS
Pascal/Delphi Source File  |  1979-12-31  |  4KB  |  143 lines

  1. program ST;
  2.  
  3. CONST
  4.    version = 2.0;     {Mar '88}
  5.  
  6. {****************************************************************************}
  7.  
  8. {Program to load turbo pascal files saved as .CHN
  9.  
  10.   Turbo Pascal saves its library of routines with every .COM file.
  11. Therefore the smallest .COM file is about 10k. If you have a lot
  12. of small utility programs on a disk, a lot of room is taken up with
  13. each program storing the TP runtime library.
  14.  
  15.   If a program is compiled with the .CHN option instead, only the
  16. program code and data is saved . Making small files instead, and
  17. freeing up a lot of disk space.
  18.  
  19.   Now all that is needed is a program to load the .CHN files.
  20.  
  21.   Enter ST. All it basically does is to load the TP runtime library
  22. into memory, take the first argument on the commandline after ST as
  23. the program to chain to and stuff any further arguments back into a
  24. new commandline.
  25.  
  26.   This program works with CP/M and PC/MS DOS ,only the declaration of
  27. the variable cmdline alters - see the code.
  28.  
  29.   When compiling ST to a .COM file (PC/MS DOS only) set the min code
  30. and data values to the biggest .CHN file you will be loading. (Found
  31. when you compile the .CHN file)
  32.  
  33. ****
  34.  
  35. Version 1.0 of START only ran under TURBO v3 as the functions
  36. paramcount and paramstr are not predefined in TURBO v2.
  37.   This version defines these functions to hopefully work the same
  38. as TURBO v3, therefore working under TURBO v2.
  39. I have preceded the names with the _ so as to differentiate them 
  40. from the predefined ones in TURBO v3.
  41.  
  42. Type styp has also been renamed to STRING127 to be more descriptive.
  43.  
  44. ****
  45.  
  46. USAGE
  47.  
  48.    ST programname [optional programname arguments]
  49.  
  50. St by itself displays a usage message.
  51.  
  52. Rex Foord (052 513131)    Sept '87
  53.  
  54. }
  55.  
  56. {****************************************************************************}
  57.  
  58. type
  59.    STRING127 = string[127];
  60.  
  61. var
  62.    program_name : STRING127;
  63.    n            : byte;
  64.  
  65. {****************************************************************************}
  66.  
  67. {$I paramstr.i}        {include functions}
  68. {$I paramcnt.i}
  69.  
  70. {****************************************************************************}
  71.  
  72. procedure help_message;
  73.  
  74. begin
  75.    writeln;
  76.    writeln('ST v',version:3:1);
  77.    writeln('Program to start chain files');
  78.    writeln;
  79.    writeln('Usage : ST programname [optional arguments for programname]');
  80.    writeln;
  81. end;
  82.  
  83. {****************************************************************************}
  84.  
  85. procedure recreate_command_line (n:byte);
  86.  
  87. {put rest of command line arguments back into a new commandline}
  88.  
  89. var
  90.    i       : byte;
  91.    s       : STRING127;
  92. {  cmdline : STRING127 absolute cseg:$80;   (*for MSDOS*)}
  93.    cmdline : STRING127 absolute $80;        (*for CP/M *)
  94.  
  95. begin
  96.    if n > 1 then
  97.    begin
  98.       s := '';
  99.       for i := 2 to n do
  100.       begin
  101.          s := s + _paramstr(i);
  102.          if i < n then s := s + ' ';
  103.       end;
  104.       cmdline := s;
  105.    end
  106.    else                       {no further arguments on line}
  107.       cmdline[0] := chr(0);   {put in a blank string}
  108. end;
  109.  
  110. {****************************************************************************}
  111.  
  112. procedure start_program (program_name : STRING127);
  113.  
  114. var
  115.    f : file;
  116.    i : integer;
  117.  
  118. begin
  119.    if pos('.',program_name) = 0 then
  120.       program_name := program_name + '.CHN';      {check for extension}
  121.    assign(f,program_name);
  122.    {$i-}
  123.    chain(f);
  124.    {$i+}
  125.    if ioresult <> 0 then
  126.       writeln('? Unable to chain to program ',program_name);
  127. end;
  128.  
  129. {****************************************************************************}
  130.  
  131. begin  {main}
  132.    n := _paramcount;                  {no of parameters initially on command line}
  133.    if n = 0 then
  134.       help_message
  135.    else
  136.    begin
  137.       program_name := _paramstr(1);   {take first parameter as the program name}
  138.       recreate_command_line (n);
  139.       start_program (program_name);
  140.    end;
  141. end.
  142.  
  143.