-- 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.