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 / MBUG085.ARC / START.PAS < prev    next >
Pascal/Delphi Source File  |  1979-12-31  |  3KB  |  122 lines

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