home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / turbopas / tp / utl2 / utl2.lbr / LUP.PZS / LUP.PAS
Pascal/Delphi Source File  |  1987-04-26  |  8KB  |  219 lines

  1. Program LUP;
  2.   {[A+,T=3] Instructions to PasMat.}
  3.  
  4.   {$C-  <--- These are to  }
  5.   {$W0  <--- optimize the  }
  6.   {$X+  <--- compiler.     }
  7.  
  8. {
  9.                       LUP (Library Utility in Pascal)
  10.                                   1/02/85
  11.  
  12.    The program help users use the following program, without, having
  13.    to type the LONG commands associated with library files:
  14.  
  15.                   DIR   (SD 11.0)           XMODEM L  (XMDM 11.7)
  16.                   LTYPE (TYPEL 3.6)         XMODEM LK (XMDM 11.7)
  17.  
  18.    It also, like LUX, allows you to get to another library file with
  19.    the command LUP filename[.LBR].  But unlike LUX, you may NOT use
  20.    wildcards when specifing a file name to TYPE, which is because of
  21.    the LTYPE program which I'm using.  If you'll notice, that all
  22.    the above files, are (almost) a MUST for any RCP/M (or Z-NODE)
  23.    type system, so the only extra file, would be LUP.COM.  LUX, as I
  24.    understand requires you to have a seperate file for all the command,
  25.    PLUS LUX, and for a small system, thats a lot of space.  Another
  26.    advantage of LUP, over LUX, is that LUP doesn't require warm-booting
  27.    (if you run TPFIX, see below), which (some people) say is bad for
  28.    the drives (I'm not one of them, but it does speed things up a bit).
  29.  
  30.    This program requires ZCPR3, to run, because, it uses the command
  31.    line.  You should check to see where the location of your command
  32.    line is, by using the Z3LOC.COM program, supplied with ZCPR3, and
  33.    place that value at the constant variable CommandLineLocation.
  34.  
  35.    After you compile this program, I suggest that you use a program called
  36.    TPFIX, to inhibit the program from warm-booting, in order to speed
  37.    up the operations of this program.
  38.  
  39.    If you have any questions or comments, please feel free to call my
  40.    RCP/M at (312) 386-9271.
  41.  
  42.                                                   Thank you,
  43.  
  44.  
  45.                                                   Cyrus Patel
  46.                                           SYSOP - The Master Silicone
  47. }
  48.  
  49.    Const
  50.       Version = '1.0';
  51.       CommandLineLocation = $FF00;
  52.  
  53.    Type
  54.       String14 = String [14];
  55.       String80 = String [80];
  56.  
  57.    Var
  58.       CommandLine: String80;
  59.       LBRName, FileName: String14;
  60.       MemTop: Integer Absolute $6;
  61.  
  62.  
  63.    Procedure Instructions;
  64.  
  65.       Begin
  66.          WriteLn;
  67.          Write('Usage: LUP Filename[.LBR]');
  68.          Halt
  69.       End;
  70.  
  71.  
  72.    Procedure GetLBRName(Var LBRName: String14);
  73.  
  74.       Var
  75.          InFile: File;
  76.          Index: Integer;
  77.          CommandLine: String14 Absolute $80;
  78.  
  79.       Begin
  80.          If CommandLine = '' then
  81.             Instructions
  82.          else
  83.             LBRName := Copy(CommandLine, 2, Length(CommandLine));
  84.          If (LBRName <> '') and (Pos('.', LBRName) > 0) then
  85.             LBRName := Copy(LBRName, 1, Pos('.', LBRName) - 1);
  86.          If LBRName = '' then
  87.             Instructions;
  88.          For Index := 1 to Length(LBRName) do
  89.             LBRName[Index] := UpCase(LBRName[Index]);
  90.          LBRName := LBRName + '.LBR';
  91.          Assign(InFile, LBRName);
  92.          {$I-}
  93.          Reset(InFile);
  94.          If IOResult <> 0 then
  95.             Begin
  96.             WriteLn;
  97.             WriteLn('File: ', LBRName, ' does not exist.');
  98.             Close(InFile);
  99.             Instructions
  100.             End;
  101.          Close(InFile);
  102.          {$I+}
  103.          WriteLn
  104.       End;
  105.  
  106.  
  107.    Procedure PutOnCommandLine(Line: String80);
  108.  
  109.       Var
  110.          Index: Integer;
  111.  
  112.       Begin
  113.          Line := Line + ';A0:LUP ' + LBRName;
  114.          Mem[CommandLineLocation] := 4;
  115.          Mem[CommandLineLocation + 1] := $FF;
  116.          Mem[CommandLineLocation + 2] := $C8;
  117.          Mem[CommandLineLocation + 3] := Length(Line);
  118.          For Index := 1 to Length(Line) do
  119.             Mem[CommandLineLocation + Index + 3] := Ord(Line[Index]);
  120.          Mem[CommandLineLocation + Length(Line) + 4] := $00;
  121.          Mem[CommandLineLocation + Length(Line) + 5] := $00
  122.       End;
  123.  
  124.  
  125.    Procedure Help;
  126.  
  127.       Begin
  128.          WriteLn;
  129.          WriteLn('': 22, 'LUP (Library Utility in Pascal)');
  130.          WriteLn;
  131.          WriteLn('': 16, '  BYE - Logoff computer.');
  132.          WriteLn('': 16, '  DIR - Directory of library.');
  133.          WriteLn('': 16, 'FILES - Get list of library files.');
  134.          WriteLn('': 16, ' HELP - This list.');
  135.          WriteLn('': 16, '  LUP - Get library of another file.');
  136.          WriteLn('': 16, '           LUP Filename[.LBR]');
  137.          WriteLn('': 16, ' QUIT - Exit LUP.');
  138.          WriteLn('': 16, '    S - Send file with xmodem (128 byte block).');
  139.          WriteLn('': 16, '           S Filename.typ');
  140.          WriteLn('': 16, ' SEND - Send file with xmodem (128 byte block).');
  141.          WriteLn('': 16, '           Send Filename.typ');
  142.          WriteLn('': 16, '   SK - Send file with xmodem (1K byte block).');
  143.          WriteLn('': 16, '           SK Filename.typ');
  144.          WriteLn('': 16, 'SENDK - Send file with xmodem (1K byte block).');
  145.          WriteLn('': 16, '           SendK Filename.typ');
  146.          WriteLn('': 16, ' TYPE - Type a file from library.');
  147.          WriteLn('': 16, '           Type Filename.typ');
  148.          WriteLn;
  149.          CommandLine := ''
  150.       End;
  151.  
  152.  
  153.    Procedure GetCommand;
  154.  
  155.       Var
  156.          Index: Integer;
  157.  
  158.       Begin
  159.          Write('LUP: [' + LBRName + ']>');
  160.          ReadLn(CommandLine);
  161.          If Pos(' ', CommandLine) > 0 then
  162.             Begin
  163.             FileName := Copy(CommandLine, Pos(' ', CommandLine),
  164.                              Length(CommandLine));
  165.             For Index := 1 to Length(FileName) do
  166.                FileName[Index] := UpCase(FileName[Index]);
  167.             CommandLine := Copy(CommandLine, 1, Pos(' ', CommandLine) - 1)
  168.             End
  169.          else
  170.             FileName := '';
  171.          For Index := 1 to Length(CommandLine) do
  172.             CommandLine[Index] := UpCase(CommandLine[Index])
  173.       End;
  174.  
  175.  
  176.    Procedure ProcessCommand;
  177.  
  178.       Begin
  179.          If CommandLine = 'BYE' then
  180.             CommandLine := 'A0:BYE'
  181.          else If CommandLine = 'DIR' then
  182.             CommandLine := 'A0:DIR ' + LBRName + ' $L'
  183.          else If CommandLine = 'FILES' then
  184.             CommandLine := 'A0:DIR *.LBR'
  185.          else If (CommandLine = 'HELP') or (CommandLine = '?') then
  186.             Help
  187.          else If CommandLine = 'LUP' then
  188.             CommandLine := 'A0:LUP' + FileName
  189.          else If CommandLine = 'QUIT' then
  190.             Halt
  191.          else If (CommandLine = 'S') or (CommandLine = 'SEND') then
  192.             CommandLine := 'A0:XMODEM L ' + LBRName + FileName
  193.          else If (CommandLine = 'SK') or (CommandLine = 'SENDK') then
  194.             CommandLine := 'A0:XMODEM LK ' + LBRName + FileName
  195.          else If CommandLine = 'TYPE' then
  196.             CommandLine := 'A0:LTYPE ' + LBRName + FileName
  197.          else If CommandLine <> '' then
  198.             Begin
  199.             WriteLn;
  200.             CommandLine := '';
  201.             WriteLn('Invalid command, type ? for help, QUIT to exit.');
  202.             WriteLn
  203.             End
  204.       End;
  205.  
  206.    Begin
  207.       StackPtr := MemTop - $826;
  208.       RecurPtr := StackPtr - $400;
  209.       HeapPtr := $300F;
  210.       WriteLn;
  211.       WriteLn('LUP version ', Version);
  212.       GetLBRName(LBRName);
  213.       Repeat
  214.          GetCommand;
  215.          ProcessCommand
  216.       Until CommandLine <> '';
  217.       PutOnCommandLine(CommandLine)
  218.    End.
  219.