BootShell.SymW 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. MODULE BootShell;
  2. IMPORT SYSTEM, KernelLog, Machine, Modules, Streams, Commands, Inputs, Strings, Locks;
  3. CONST
  4. Version = \"A2 Bootshell v1.0"\;
  5. LineWidth = 80;
  6. TraceHeight = 25;
  7. TraceBase = 753664;
  8. BufferHeight = 2048;
  9. BufferSize = (BufferHeight * LineWidth);
  10. TAB = 9X;
  11. CR = 0DX;
  12. LF = 0AX;
  13. SPACE = \" "\;
  14. Mode_Insert = 0;
  15. Mode_Overwrite = 1;
  16. Black = 0;
  17. Blue = 1;
  18. Green = 2;
  19. Cyan = 3;
  20. Red = 4;
  21. Magenta = 5;
  22. Brown = 6;
  23. White = 7;
  24. Gray = 8;
  25. LightBlue = 9;
  26. LightGreen = 10;
  27. LightCyan = 11;
  28. LightRed = 12;
  29. LightMagenta = 13;
  30. Yellow = 14;
  31. BrightWhite = 15;
  32. TYPE
  33. CommandsString = POINTER TO RECORD
  34. prev, next: CommandsString;
  35. string: Strings.String;
  36. END;
  37. CommandHistoryObject = OBJECT
  38. VAR
  39. first, current: CommandsString;
  40. PROCEDURE ^ GetNextCommand(): Strings.String;
  41. PROCEDURE ^ GetPreviousCommand(): Strings.String;
  42. PROCEDURE ^ AddCommand(string: Strings.String);
  43. PROCEDURE ^ & Init*;
  44. END CommandHistoryObject;
  45. Character = RECORD
  46. ch: CHAR;
  47. color: SHORTINT;
  48. END;
  49. Line = ARRAY LineWidth OF Character;
  50. TextBuffer = OBJECT
  51. VAR
  52. defaultColor: SHORTINT;
  53. currentColor: SHORTINT;
  54. lines: ARRAY BufferHeight OF Line;
  55. firstLine, lastLine: LONGINT;
  56. firstLineShown: LONGINT;
  57. editStartPosition, editEndPosition: LONGINT;
  58. cursorPosition: LONGINT;
  59. mode: LONGINT;
  60. lock: Locks.RecursiveLock;
  61. PROCEDURE ^ & Init*;
  62. PROCEDURE ^ Clear;
  63. PROCEDURE ^ SetColor(foreground, background: SHORTINT);
  64. PROCEDURE ^ SetEditStart;
  65. PROCEDURE ^ Send(CONST data: ARRAY OF CHAR; ofs, len: LONGINT; propagate: BOOLEAN; VAR res: LONGINT);
  66. PROCEDURE ^ String(CONST string: ARRAY OF CHAR);
  67. PROCEDURE ^ Char(ch: CHAR);
  68. PROCEDURE ^ CheckVisibility;
  69. PROCEDURE ^ NextLine;
  70. PROCEDURE ^ MoveCharactersToRight;
  71. PROCEDURE ^ MoveCharactersToLeft;
  72. PROCEDURE ^ CharInternal(ch: CHAR);
  73. PROCEDURE ^ DeleteCurrentLine;
  74. PROCEDURE ^ GetCurrentLine(): Strings.String;
  75. PROCEDURE ^ Home;
  76. PROCEDURE ^ End;
  77. PROCEDURE ^ Backspace;
  78. PROCEDURE ^ Delete;
  79. PROCEDURE ^ ScrollUp(nofLines: LONGINT);
  80. PROCEDURE ^ ScrollDown(nofLines: LONGINT);
  81. PROCEDURE ^ CursorLeft;
  82. PROCEDURE ^ CursorRight;
  83. PROCEDURE ^ Dump(out: Streams.Writer);
  84. END TextBuffer;
  85. Shell = OBJECT (Inputs.Sink)
  86. VAR
  87. textBuffer: TextBuffer;
  88. history: CommandHistoryObject;
  89. PROCEDURE ^ & Init;
  90. PROCEDURE ^ Handle*(VAR msg: Inputs.Message);
  91. PROCEDURE ^ CommandHistory(next: BOOLEAN);
  92. PROCEDURE ^ Prompt;
  93. PROCEDURE ^ Execute;
  94. PROCEDURE ^ Quit;
  95. END Shell;
  96. VAR
  97. shell: Shell;
  98. PROCEDURE ^ Subtract(position, value, bufferSize: LONGINT): LONGINT;
  99. PROCEDURE ^ Add(position, value, bufferSize: LONGINT): LONGINT;
  100. PROCEDURE ^ Difference(end, start, bufferSize: LONGINT): LONGINT;
  101. PROCEDURE ^ ClearLine(VAR line: Line; from, to: LONGINT; color: SHORTINT);
  102. PROCEDURE ^ IsWhitespace(ch: CHAR): BOOLEAN;
  103. PROCEDURE ^ Min(a, b: LONGINT): LONGINT;
  104. PROCEDURE ^ Invalidate(textBuffer: TextBuffer);
  105. PROCEDURE ^ Open*;
  106. PROCEDURE ^ Close*;
  107. PROCEDURE ^ Dump*(context: Commands.Context);
  108. PROCEDURE ^ UpdateCursor(textBuffer: TextBuffer);
  109. PROCEDURE ^ Cleanup;
  110. PROCEDURE ^ Init;
  111. BEGIN
  112. END BootShell.