-- Commands.mesa  last edit, Bruce  September 26, 1980  8:59 PM

DIRECTORY
  CommandList USING [Command, Error],
  DebugFormat USING [BBHandle];

Commands: DEFINITIONS =
  BEGIN

  Command: TYPE = CommandList.Command;
  Error: TYPE = CommandList.Error;
  NullCommand: Command = null;

  Options: TYPE = {stack, process, notifier, exp, ucs, spare1, spare2, spare3};
  Umbrella: PROC [op: Options, data: UNSPECIFIED];

  DoExp: PROC [param: DebugFormat.BBHandle]; -- exp
  UDS: PROC [CHARACTER];  -- stack
  UProcess: PROC [CHARACTER];  -- process

  Go: PROCEDURE [bb: DebugFormat.BBHandle ← NIL];
  DispatchChar: PROCEDURE [CHARACTER];

  WriteError: PROCEDURE [error: Error, eof: BOOLEAN ← TRUE];
  WriteCommand: PROCEDURE [code: Command];
  Prompt: PROCEDURE;

  Execute: PROC [code: Command, call: PROC, resetPrompt: BOOLEAN ← TRUE];
  Confirm: PROCEDURE [code: Command, call: PROCEDURE];

  StringId: TYPE = {var, process, queue, module, proc, config, rconfig,
    source, condition, frame, pc, comment, exp, di, file, image, num1,
    num2, bbNum, nubModule, nubFrame, nubRCount, nubRAddr, nubWAddr, nubRhs, 
    user, password, temp1, temp2, temp3, temp4, temp5};

  CommandRec: TYPE = RECORD [
    prompt: Command ← NullCommand,
    sId: StringId,
    resetPrompt: BOOLEAN ← TRUE,
    colon: BOOLEAN ← TRUE,
    atom: BOOLEAN ← TRUE,
    resetParse: BOOLEAN ← TRUE];

  ModuleBreak: PROCEDURE [proc: PROCEDURE [STRING,STRING], prompt: Command];
  Login: PROCEDURE;

  GetComment: PROC [printDash: BOOLEAN];
  GetLine: PROCEDURE [com: CommandRec, call: PROCEDURE [STRING],
    prompt: Command ← NullCommand];
  GetString: PROCEDURE [com: CommandRec, call: PROCEDURE [STRING],
    prompt: Command ← NullCommand];
  GetText: PROC [com: CommandRec, call: PROC [STRING], term: TermProc];

  GetTwoStrings: PROCEDURE [
    com1, com2: CommandRec, proc: PROCEDURE[STRING, STRING],
    prompt: Command ← NullCommand];

  TermProc: TYPE = PROC [CHARACTER] RETURNS [BOOLEAN];
  IsAtom: PROCEDURE [c: CHARACTER] RETURNS [BOOLEAN];
  IsCR: PROCEDURE [c: CHARACTER] RETURNS [BOOLEAN];

  GetToken: PROCEDURE [
    get: PROCEDURE RETURNS [CHARACTER], token, ext, switches: STRING];

  END.