Program LUP; {[A+,T=3] Instructions to PasMat.} {$C- <--- These are to } {$W0 <--- optimize the } {$X+ <--- compiler. } { LUP (Library Utility in Pascal) 1/02/85 The program help users use the following program, without, having to type the LONG commands associated with library files: DIR (SD 11.0) XMODEM L (XMDM 11.7) LTYPE (TYPEL 3.6) XMODEM LK (XMDM 11.7) It also, like LUX, allows you to get to another library file with the command LUP filename[.LBR]. But unlike LUX, you may NOT use wildcards when specifing a file name to TYPE, which is because of the LTYPE program which I'm using. If you'll notice, that all the above files, are (almost) a MUST for any RCP/M (or Z-NODE) type system, so the only extra file, would be LUP.COM. LUX, as I understand requires you to have a seperate file for all the command, PLUS LUX, and for a small system, thats a lot of space. Another advantage of LUP, over LUX, is that LUP doesn't require warm-booting (if you run TPFIX, see below), which (some people) say is bad for the drives (I'm not one of them, but it does speed things up a bit). This program requires ZCPR3, to run, because, it uses the command line. You should check to see where the location of your command line is, by using the Z3LOC.COM program, supplied with ZCPR3, and place that value at the constant variable CommandLineLocation. After you compile this program, I suggest that you use a program called TPFIX, to inhibit the program from warm-booting, in order to speed up the operations of this program. If you have any questions or comments, please feel free to call my RCP/M at (312) 386-9271. Thank you, Cyrus Patel SYSOP - The Master Silicone } Const Version = '1.0'; CommandLineLocation = $FF00; Type String14 = String [14]; String80 = String [80]; Var CommandLine: String80; LBRName, FileName: String14; MemTop: Integer Absolute $6; Procedure Instructions; Begin WriteLn; Write('Usage: LUP Filename[.LBR]'); Halt End; Procedure GetLBRName(Var LBRName: String14); Var InFile: File; Index: Integer; CommandLine: String14 Absolute $80; Begin If CommandLine = '' then Instructions else LBRName := Copy(CommandLine, 2, Length(CommandLine)); If (LBRName <> '') and (Pos('.', LBRName) > 0) then LBRName := Copy(LBRName, 1, Pos('.', LBRName) - 1); If LBRName = '' then Instructions; For Index := 1 to Length(LBRName) do LBRName[Index] := UpCase(LBRName[Index]); LBRName := LBRName + '.LBR'; Assign(InFile, LBRName); {$I-} Reset(InFile); If IOResult <> 0 then Begin WriteLn; WriteLn('File: ', LBRName, ' does not exist.'); Close(InFile); Instructions End; Close(InFile); {$I+} WriteLn End; Procedure PutOnCommandLine(Line: String80); Var Index: Integer; Begin Line := Line + ';A0:LUP ' + LBRName; Mem[CommandLineLocation] := 4; Mem[CommandLineLocation + 1] := $FF; Mem[CommandLineLocation + 2] := $C8; Mem[CommandLineLocation + 3] := Length(Line); For Index := 1 to Length(Line) do Mem[CommandLineLocation + Index + 3] := Ord(Line[Index]); Mem[CommandLineLocation + Length(Line) + 4] := $00; Mem[CommandLineLocation + Length(Line) + 5] := $00 End; Procedure Help; Begin WriteLn; WriteLn('': 22, 'LUP (Library Utility in Pascal)'); WriteLn; WriteLn('': 16, ' BYE - Logoff computer.'); WriteLn('': 16, ' DIR - Directory of library.'); WriteLn('': 16, 'FILES - Get list of library files.'); WriteLn('': 16, ' HELP - This list.'); WriteLn('': 16, ' LUP - Get library of another file.'); WriteLn('': 16, ' LUP Filename[.LBR]'); WriteLn('': 16, ' QUIT - Exit LUP.'); WriteLn('': 16, ' S - Send file with xmodem (128 byte block).'); WriteLn('': 16, ' S Filename.typ'); WriteLn('': 16, ' SEND - Send file with xmodem (128 byte block).'); WriteLn('': 16, ' Send Filename.typ'); WriteLn('': 16, ' SK - Send file with xmodem (1K byte block).'); WriteLn('': 16, ' SK Filename.typ'); WriteLn('': 16, 'SENDK - Send file with xmodem (1K byte block).'); WriteLn('': 16, ' SendK Filename.typ'); WriteLn('': 16, ' TYPE - Type a file from library.'); WriteLn('': 16, ' Type Filename.typ'); WriteLn; CommandLine := '' End; Procedure GetCommand; Var Index: Integer; Begin Write('LUP: [' + LBRName + ']>'); ReadLn(CommandLine); If Pos(' ', CommandLine) > 0 then Begin FileName := Copy(CommandLine, Pos(' ', CommandLine), Length(CommandLine)); For Index := 1 to Length(FileName) do FileName[Index] := UpCase(FileName[Index]); CommandLine := Copy(CommandLine, 1, Pos(' ', CommandLine) - 1) End else FileName := ''; For Index := 1 to Length(CommandLine) do CommandLine[Index] := UpCase(CommandLine[Index]) End; Procedure ProcessCommand; Begin If CommandLine = 'BYE' then CommandLine := 'A0:BYE' else If CommandLine = 'DIR' then CommandLine := 'A0:DIR ' + LBRName + ' $L' else If CommandLine = 'FILES' then CommandLine := 'A0:DIR *.LBR' else If (CommandLine = 'HELP') or (CommandLine = '?') then Help else If CommandLine = 'LUP' then CommandLine := 'A0:LUP' + FileName else If CommandLine = 'QUIT' then Halt else If (CommandLine = 'S') or (CommandLine = 'SEND') then CommandLine := 'A0:XMODEM L ' + LBRName + FileName else If (CommandLine = 'SK') or (CommandLine = 'SENDK') then CommandLine := 'A0:XMODEM LK ' + LBRName + FileName else If CommandLine = 'TYPE' then CommandLine := 'A0:LTYPE ' + LBRName + FileName else If CommandLine <> '' then Begin WriteLn; CommandLine := ''; WriteLn('Invalid command, type ? for help, QUIT to exit.'); WriteLn End End; Begin StackPtr := MemTop - $826; RecurPtr := StackPtr - $400; HeapPtr := $300F; WriteLn; WriteLn('LUP version ', Version); GetLBRName(LBRName); Repeat GetCommand; ProcessCommand Until CommandLine <> ''; PutOnCommandLine(CommandLine) End.