1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- MODULE Commands;
- IMPORT Objects, Modules, Streams, KernelLog, Trace, Machine;
- CONST
- Wait* = 0;
- InheritContext* = 1;
- Silent* = 2;
- Ok* = 0;
- CommandNotFound* = 3901;
- CommandError* = 3902;
- CommandParseError* = 3903;
- CommandTrapped* = 3904;
- Delimiter* = \"."\;
- Started = 0;
- Loaded = 1;
- Finished = 2;
- TYPE
- Context* = OBJECT
- VAR
- in-, arg-: Streams.Reader;
- out-, error-: Streams.Writer;
- caller-: OBJECT;
- result*: WORD;
- PROCEDURE ^ & Init*(in, arg: Streams.Reader; out, error: Streams.Writer; caller: OBJECT);
- END Context;
- ReaderMonitor* = OBJECT (Streams.Reader)
- VAR
- in: Streams.Reader;
- tracer: Streams.Writer;
- pos0: Streams.Position;
- tracedPos: LONGINT;
- PROCEDURE ^ & Init(in: Streams.Reader; tracer: Streams.Writer);
- PROCEDURE ^ Receiver(VAR buf: ARRAY OF CHAR; ofs, size, min: LONGINT; VAR len, res: LONGINT);
- PROCEDURE ^ CanSetPos*(): BOOLEAN;
- PROCEDURE ^ SetPos*(pos: Streams.Position);
- PROCEDURE ^ Pos*(): Streams.Position;
- END ReaderMonitor;
- CommandProc = PROCEDURE ;
- CommandContextProc = PROCEDURE (context: Context);
- Runner = OBJECT {EXCLUSIVE}
- VAR
- moduleName, commandName: Modules.Name;
- context: Context;
- tracer: Streams.Writer;
- r: ReaderMonitor;
- proc: CommandProc;
- commandProc: CommandContextProc;
- msg: ARRAY 128 OF CHAR;
- res: WORD;
- module: Modules.Module;
- state: WORD;
- exception: BOOLEAN;
- PROCEDURE ^ & Init*(CONST moduleName, commandName: Modules.Name; context: Context);
- PROCEDURE ^ Join(this: WORD; VAR res: WORD; VAR msg: ARRAY OF CHAR);
- BEGIN{ACTIVE, SAFE}
- END Runner;
- VAR
- emptyString: ARRAY 1 OF CHAR;
- silentWriter: Streams.Writer;
- trace: BOOLEAN;
- defaultContext: Context;
- PROCEDURE ^ GetEmptyReader(): Streams.Reader;
- PROCEDURE ^ SendNothing(CONST buf: ARRAY OF CHAR; ofs, len: LONGINT; propagate: BOOLEAN; VAR res: WORD);
- PROCEDURE ^ Split*(CONST cmdstr: ARRAY OF CHAR; VAR moduleName, procedureName: Modules.Name; VAR res: WORD; VAR msg: ARRAY OF CHAR);
- PROCEDURE ^ GetContext*(): Context;
- PROCEDURE ^ Activate*(CONST cmd: ARRAY OF CHAR; context: Context; flags: SET; VAR res: WORD; VAR msg: ARRAY OF CHAR);
- PROCEDURE ^ Call*(cmds: ARRAY OF CHAR; flags: SET; VAR res: WORD; VAR msg: ARRAY OF CHAR);
- PROCEDURE ^ Init;
- BEGIN
- END Commands.
|