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
/
ZSYS
/
SIMTEL20
/
ZSIG
/
LUP11.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
2000-06-30
|
8KB
|
236 lines
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
Version 1.1 (01/06/86)
Added Wheel check and NULU support (Wheel set), changed
to KMD for transfers, LDIR for faster DIR support, Q option
for easier quit...
Norman Beeler
Sysop
ZeeMachine
408-245-1420
}
Const
Version = '1.0';
CommandLineLocation = $FF00;
Type
String14 = String [14];
String80 = String [80];
Var
CommandLine: String80;
LBRName, FileName: String14;
MemTop: Integer Absolute $6;
Wheel: Byte Absolute $4B;
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, ' Q - Exit LUP.');
WriteLn('': 16, ' QUIT - Exit LUP.');
WriteLn('': 16, ' S - Send file with KMD (128 byte block).');
WriteLn('': 16, ' S Filename.typ');
WriteLn('': 16, ' SEND - Send file with KMD (128 byte block).');
WriteLn('': 16, ' Send Filename.typ');
WriteLn('': 16, ' SK - Send file with KMD (1K byte block).');
WriteLn('': 16, ' SK Filename.typ');
WriteLn('': 16, 'SENDK - Send file with KMD (1K byte block).');
WriteLn('': 16, ' SendK Filename.typ');
WriteLn('': 16, ' TYPE - Type a file from library.');
WriteLn('': 16, ' Type Filename.typ');
If Wheel > 0 then
Begin
WriteLn('': 16, ' -L - Enter NULU Command mode and List files.');
WriteLn('': 16, ' -F - Enter NULU Sweep mode.')
End;
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:LDIR ' + LBRName
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') or (CommandLine = 'Q') then
Halt
else If (CommandLine = 'S') or (CommandLine = 'SEND') then
CommandLine := 'A0:KMD L ' + LBRName + FileName
else If (CommandLine = 'SK') or (CommandLine = 'SENDK') then
CommandLine := 'A0:KMD LK ' + LBRName + FileName
else If CommandLine = 'TYPE' then
CommandLine := 'A0:TYPE ' + LBRName + FileName
else If (CommandLine = '-F') and (Wheel > 0) then
CommandLine := 'NULU ' + LBRName + ' -F '
else If (CommandLine = '-L') and (Wheel > 0) then
CommandLine := 'NULU ' + LBRName + ' -L '
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;
GetLBRName(LBRName);
Repeat
GetCommand;
ProcessCommand
Until CommandLine <> '';
PutOnCommandLine(CommandLine)
End.