<> DIRECTORY ConvertUnsafe USING [ToRefText], Exec USING [commandLine, CommandLine], ExecOps USING [ ], IO USING [SP, CR, TAB, NUL], Rope USING [FromRefText], TTY USING [Handle], UserExec USING [ExecHandle, GetExecHandle, UserAbort, ResetUserAbort], UserExecPrivate USING [Register] ; ExecImpl: PROGRAM IMPORTS ConvertUnsafe, Exec, Rope, UserExec, UserExecPrivate EXPORTS Exec, ExecOps, UserExecPrivate = BEGIN w: PUBLIC TTY.Handle; -- set in CallRegisteredProc commandString: PUBLIC LONG STRING _ [256]; commandLine: PUBLIC Exec.CommandLine _ [s: commandString, i: 0]; AddCommand: PUBLIC PROCEDURE [name: LONG STRING, proc: UNSAFE PROCEDURE] = { UserExecPrivate.Register[name: Rope.FromRefText[ConvertUnsafe.ToRefText[name]], oldStyleProc: proc]; }; CheckForAbort: PUBLIC PROCEDURE RETURNS [BOOLEAN] = { execHandle: UserExec.ExecHandle = UserExec.GetExecHandle[]; IF UserExec.UserAbort[execHandle] THEN {UserExec.ResetUserAbort[execHandle]; RETURN[TRUE]} ELSE RETURN[FALSE]; }; GetChar: PUBLIC PROCEDURE RETURNS [char: CHARACTER] = { OPEN Exec.commandLine; IF i >= s.length THEN RETURN[IO.NUL]; char _ s[i]; i _ i + 1; }; GetToken: PUBLIC PROCEDURE [get: UNSAFE PROC RETURNS [CHARACTER], token, switches: STRING] = { char: CHARACTER; str: STRING _ token; token.length _ 0; switches.length _ 0; UNTIL (char _ get[]) # IO.SP OR char = IO.TAB DO NULL; ENDLOOP; -- skip white space DO SELECT char FROM '/ => {str _ switches; char _ get[]; LOOP}; IO.SP, IO.TAB, IO.CR, IO.NUL => EXIT; '', '^ => char _ get[]; ENDCASE; str[str.length] _ char; str.length _ str.length + 1; char _ get[]; ENDLOOP; }; AppendCommands: PUBLIC PROC [LONG STRING] = {-- nop for eric --}; <<>> <> END. -- of ExecImpl