123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- MODULE BootShell;
- IMPORT SYSTEM, KernelLog, Machine, Modules, Streams, Commands, Inputs, Strings, Locks;
- CONST
- Version = \"A2 Bootshell v1.0"\;
- LineWidth = 80;
- TraceHeight = 25;
- TraceBase = 753664;
- BufferHeight = 2048;
- BufferSize = (BufferHeight * LineWidth);
- TAB = 9X;
- CR = 0DX;
- LF = 0AX;
- SPACE = \" "\;
- Mode_Insert = 0;
- Mode_Overwrite = 1;
- Black = 0;
- Blue = 1;
- Green = 2;
- Cyan = 3;
- Red = 4;
- Magenta = 5;
- Brown = 6;
- White = 7;
- Gray = 8;
- LightBlue = 9;
- LightGreen = 10;
- LightCyan = 11;
- LightRed = 12;
- LightMagenta = 13;
- Yellow = 14;
- BrightWhite = 15;
- TYPE
- CommandsString = POINTER TO RECORD
- prev, next: CommandsString;
- string: Strings.String;
- END;
- CommandHistoryObject = OBJECT
- VAR
- first, current: CommandsString;
- PROCEDURE ^ GetNextCommand(): Strings.String;
- PROCEDURE ^ GetPreviousCommand(): Strings.String;
- PROCEDURE ^ AddCommand(string: Strings.String);
- PROCEDURE ^ & Init*;
- END CommandHistoryObject;
- Character = RECORD
- ch: CHAR;
- color: SHORTINT;
- END;
- Line = ARRAY LineWidth OF Character;
- TextBuffer = OBJECT
- VAR
- defaultColor: SHORTINT;
- currentColor: SHORTINT;
- lines: ARRAY BufferHeight OF Line;
- firstLine, lastLine: LONGINT;
- firstLineShown: LONGINT;
- editStartPosition, editEndPosition: LONGINT;
- cursorPosition: LONGINT;
- mode: LONGINT;
- lock: Locks.RecursiveLock;
- PROCEDURE ^ & Init*;
- PROCEDURE ^ Clear;
- PROCEDURE ^ SetColor(foreground, background: SHORTINT);
- PROCEDURE ^ SetEditStart;
- PROCEDURE ^ Send(CONST data: ARRAY OF CHAR; ofs, len: LONGINT; propagate: BOOLEAN; VAR res: LONGINT);
- PROCEDURE ^ String(CONST string: ARRAY OF CHAR);
- PROCEDURE ^ Char(ch: CHAR);
- PROCEDURE ^ CheckVisibility;
- PROCEDURE ^ NextLine;
- PROCEDURE ^ MoveCharactersToRight;
- PROCEDURE ^ MoveCharactersToLeft;
- PROCEDURE ^ CharInternal(ch: CHAR);
- PROCEDURE ^ DeleteCurrentLine;
- PROCEDURE ^ GetCurrentLine(): Strings.String;
- PROCEDURE ^ Home;
- PROCEDURE ^ End;
- PROCEDURE ^ Backspace;
- PROCEDURE ^ Delete;
- PROCEDURE ^ ScrollUp(nofLines: LONGINT);
- PROCEDURE ^ ScrollDown(nofLines: LONGINT);
- PROCEDURE ^ CursorLeft;
- PROCEDURE ^ CursorRight;
- PROCEDURE ^ Dump(out: Streams.Writer);
- END TextBuffer;
- Shell = OBJECT (Inputs.Sink)
- VAR
- textBuffer: TextBuffer;
- history: CommandHistoryObject;
- PROCEDURE ^ & Init;
- PROCEDURE ^ Handle*(VAR msg: Inputs.Message);
- PROCEDURE ^ CommandHistory(next: BOOLEAN);
- PROCEDURE ^ Prompt;
- PROCEDURE ^ Execute;
- PROCEDURE ^ Quit;
- END Shell;
- VAR
- shell: Shell;
- PROCEDURE ^ Subtract(position, value, bufferSize: LONGINT): LONGINT;
- PROCEDURE ^ Add(position, value, bufferSize: LONGINT): LONGINT;
- PROCEDURE ^ Difference(end, start, bufferSize: LONGINT): LONGINT;
- PROCEDURE ^ ClearLine(VAR line: Line; from, to: LONGINT; color: SHORTINT);
- PROCEDURE ^ IsWhitespace(ch: CHAR): BOOLEAN;
- PROCEDURE ^ Min(a, b: LONGINT): LONGINT;
- PROCEDURE ^ Invalidate(textBuffer: TextBuffer);
- PROCEDURE ^ Open*;
- PROCEDURE ^ Close*;
- PROCEDURE ^ Dump*(context: Commands.Context);
- PROCEDURE ^ UpdateCursor(textBuffer: TextBuffer);
- PROCEDURE ^ Cleanup;
- PROCEDURE ^ Init;
- BEGIN
- END BootShell.
|