-- UmbrellaPack.mesa last edit, Bruce Sep 29, 1980 5:02 PM
DIRECTORY
BP USING [Fail],
Commands USING [DoExp, Options, UDS, UProcess, WriteError],
Copier USING [FileProblem, FileVersion, FileVersionMix],
DebugOps USING [
InvalidAddress, InvalidCharacter, InvalidNumber, NonExistentMemoryPage,
NotImplemented, ParseError, SyntaxError, UserAborted, WriteProtected],
DLoadState USING [Invalid],
DOutput USING [Blanks, Char, EOL, LongOctal, Octal, Text],
DPsb USING [Invalid],
Dump USING [HtiVal, PrintUCS],
Frames USING [Invalid],
Lf USING [Clobbered, Handle, NoAccessLink, NoPrevious],
Lookup USING [Fail],
MachineDefs USING [OutOfMemory, Unknown],
Pc USING [NotInAnyProcedure],
Source USING [FileMissing],
State USING [GetGS, GSHandle],
String USING [InvalidNumber],
TajoOps USING [Notifier],
UserInput USING [ResetUserAbort];
UmbrellaPack: PROGRAM
IMPORTS
BP, Commands, Copier, DebugOps, DLoadState, DPsb, DOutput, Dump, Frames, Lf, Lookup,
MachineDefs, Pc, Source, State, String, TajoOps, UserInput
EXPORTS Commands =
BEGIN OPEN Commands;
stateData: State.GSHandle ← State.GetGS[];
PutOctal: PROC [n: UNSPECIFIED] = {DOutput.Char[' ]; DOutput.Octal[n]};
Umbrella: PUBLIC PROC [op: Commands.Options, data: UNSPECIFIED] = {
ENABLE
BEGIN
Source.FileMissing =>
BEGIN
WriteError[file];
IF name # NIL THEN DOutput.Text[name]
ELSE WriteError[compress];
CONTINUE
END;
Lookup.Fail =>
BEGIN OPEN DOutput;
EOL[]; Text[s]; WriteError[notFound,FALSE];
CONTINUE
END;
Copier.FileProblem =>
BEGIN OPEN DOutput;
Blanks[1]; Dump.HtiVal[hti]; WriteError[notFound,FALSE];
RESUME[TRUE]
END;
Copier.FileVersionMix =>
BEGIN OPEN DOutput;
Blanks[1]; Dump.HtiVal[hti]; WriteError[diffver,FALSE];
CONTINUE
END;
Copier.FileVersion =>
BEGIN OPEN DOutput;
Blanks[1]; Dump.HtiVal[hti]; WriteError[diffver,FALSE];
RESUME[TRUE]
END;
Pc.NotInAnyProcedure => {WriteError[invalidPc]; RESUME};
String.InvalidNumber => {WriteError[num]; CONTINUE};
DebugOps.InvalidNumber => {WriteError[num]; CONTINUE};
DebugOps.SyntaxError => {WriteError[badSyntax]; CONTINUE};
DebugOps.InvalidCharacter => {WriteError[badChar]; CONTINUE};
DebugOps.ParseError => {WriteError[badParse]; CONTINUE};
DebugOps.NotImplemented =>
BEGIN DOutput.Text[msg]; WriteError[notImpl,FALSE]; CONTINUE END;
DebugOps.UserAborted =>
{UserInput.ResetUserAbort[]; WriteError[aborted]; CONTINUE};
DebugOps.InvalidAddress =>
BEGIN
WriteError[badAddress,FALSE];
DOutput.LongOctal[address];
DOutput.Char[']];
CONTINUE;
END;
DebugOps.WriteProtected => {
WriteError[writeProtect,FALSE]; DOutput.Octal[page]; DOutput.Char[']]; CONTINUE};
DebugOps.NonExistentMemoryPage => {
WriteError[noPage,FALSE]; DOutput.Octal[page]; DOutput.Char[']]; CONTINUE};
DLoadState.Invalid => {WriteError[nAllowed]; CONTINUE};
BP.Fail => CONTINUE;
-- TrapDefs.ResumeError => {WriteError[resume]; CONTINUE};
Lf.Clobbered => {PutOctal[f]; WriteError[cFrame,FALSE]; CONTINUE};
Lf.NoPrevious =>
{PutOctal[f]; WriteError[nReturnlink,FALSE]; CONTINUE};
Frames.Invalid => {PutOctal[f]; WriteError[nGframe,FALSE]; CONTINUE};
Lf.NoAccessLink =>
{PutOctal[f]; WriteError[nAccesslink,FALSE]; CONTINUE};
DPsb.Invalid => {PutOctal[psb]; WriteError[nPsb,FALSE]; CONTINUE};
MachineDefs.Unknown[] => {
WriteError[badDir]; IF ~stateData.debugging THEN CONTINUE};
MachineDefs.OutOfMemory[] =>
BEGIN
WriteError[insufficientVM];
DOutput.Octal[needed];
DOutput.Char[']];
IF ~stateData.debugging THEN CONTINUE
END
END;
SELECT op FROM
stack => Commands.UDS[data];
process => Commands.UProcess[data];
notifier => TajoOps.Notifier[FALSE];
exp => Commands.DoExp[data];
ucs => Dump.PrintUCS[];
spare1 => NULL;
spare2 => NULL;
spare3 => NULL;
ENDCASE};
END.