From 7ae5015610b47e7dab466b5bc1cd669c01644715 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 30 Apr 2017 09:44:37 -0700 Subject: [PATCH] SCP: Provide a way to gather input from a user into an environment variable SET ENV -P "Prompt String" EnvVar=Default --- README.md | 93 ++++++++++++++++++++++++----------------------- doc/simh_doc.doc | Bin 275456 -> 271872 bytes scp.c | 47 ++++++++++++++++++++++-- 3 files changed, 91 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index ffe44e8f..33aa1716 100644 --- a/README.md +++ b/README.md @@ -260,52 +260,53 @@ The EXPECT command now exists to provide a means of reacting to simulator output #### New SCP Commands: - SCREENSHOT filename.bmp Save video window to the specified file - SET ENVIRONMENT Name=Value Set Environment variable - SET ASYNCH Enable Asynchronous I/O - SET NOASYNCH Disable Asynchronous I/O - SET VERIFY Enable commang display while processing DO command files - SET NOVERIFY Enable commang display while processing DO command files - SET MESSAGE Enable error message output when commands complete (default) - SET NOMESSAGE Disable error message output when commands complete - SET QUIET Set minimal output mode for command execution - SET NOQUIET Set normal output mode for command execution - SET PROMPT Change the prompt used by the simulator (defaulr sim>) - SET THROTTLE x/t Throttle t ms every x cycles - SET REMOTE TELNET=port Specify remote console telnet port - SET REMOTE NOTELNET Disables remote console - SET REMOTE CONNECTIONS=n Specify the number of concurrent remote console sessions - SHOW FEATURES Displays the devices descriptions and features - SHOW ASYNCH Display the current Asynchronous I/O status - SHOW SERIAL Display the available and/or open serial ports - SHOW ETHERNET Display the available and/or open ethernet connections - SHOW MULTIPLEXER Display the details about open multiplexer devices - SHOW CLOCKS Display the details about calibrated timers - SHOW REMOTE Display the remote console configuration - SHOW ON Display ON condition dispatch actions - SET ON Enable ON condition error dispatching - SET NOON Disable ON condition error dispatching - GOTO Transfer to lable in the current DO command file - CALL Call subroutine at indicated label - RETURN Return from subroutine call - SHIFT Slide argument parameters %1 thru %9 left 1 - NOOP A no-op command - ON Establish or cancel an ON condition dispatch - IF Test some simulator state and conditionally execute commands - CD Change working directory - SET DEFAULT Change working directory - PWD Show working directory - SHOW DEFAULT Show working directory - DIR {path|file} Display file listing - LS {path|file} Display file listing - NEXT Step across a subroutine call or step a single instruction. - EXPECT React to output produced by a simulated system - SEND Inject input to a simulated system's console - SCREENSHOT Snapshot the current video display window - RUN UNTIL breakpoint Establish the breakpoiunt specified and run until it is encountered - RUN UNTIL "output-string" ... Establish the specified "output-string" as an EXPECT and run until it is encountered. - GO UNTIL breakpoint Establish the breakpoiunt specified and go until it is encountered - GO UNTILE "output-string" ... Establish the specified "output-string" as an EXPECT and go until it is encountered. + SCREENSHOT filename.bmp Save video window to the specified file + SET ENV Name=Value Set Environment variable + SET ENV -p "Prompt" Name=Default Gather User input into an Environment Variable + SET ASYNCH Enable Asynchronous I/O + SET NOASYNCH Disable Asynchronous I/O + SET VERIFY Enable commang display while processing DO command files + SET NOVERIFY Enable commang display while processing DO command files + SET MESSAGE Enable error message output when commands complete (default) + SET NOMESSAGE Disable error message output when commands complete + SET QUIET Set minimal output mode for command execution + SET NOQUIET Set normal output mode for command execution + SET PROMPT Change the prompt used by the simulator (defaulr sim>) + SET THROTTLE x/t Throttle t ms every x cycles + SET REMOTE TELNET=port Specify remote console telnet port + SET REMOTE NOTELNET Disables remote console + SET REMOTE CONNECTIONS=n Specify the number of concurrent remote console sessions + SHOW FEATURES Displays the devices descriptions and features + SHOW ASYNCH Display the current Asynchronous I/O status + SHOW SERIAL Display the available and/or open serial ports + SHOW ETHERNET Display the available and/or open ethernet connections + SHOW MULTIPLEXER Display the details about open multiplexer devices + SHOW CLOCKS Display the details about calibrated timers + SHOW REMOTE Display the remote console configuration + SHOW ON Display ON condition dispatch actions + SET ON Enable ON condition error dispatching + SET NOON Disable ON condition error dispatching + GOTO Transfer to lable in the current DO command file + CALL Call subroutine at indicated label + RETURN Return from subroutine call + SHIFT Slide argument parameters %1 thru %9 left 1 + NOOP A no-op command + ON Establish or cancel an ON condition dispatch + IF Test some simulator state and conditionally execute commands + CD Change working directory + SET DEFAULT Change working directory + PWD Show working directory + SHOW DEFAULT Show working directory + DIR {path|file} Display file listing + LS {path|file} Display file listing + NEXT Step across a subroutine call or step a single instruction. + EXPECT React to output produced by a simulated system + SEND Inject input to a simulated system's console + SCREENSHOT Snapshot the current video display window + RUN UNTIL breakpoint Establish the breakpoiunt specified and run until it is encountered + RUN UNTIL "output-string" ... Establish the specified "output-string" as an EXPECT and run until it is encountered. + GO UNTIL breakpoint Establish the breakpoiunt specified and go until it is encountered + GO UNTILE "output-string" ... Establish the specified "output-string" as an EXPECT and go until it is encountered. #### Command Processing Enhancements diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index f7b69e6d34db44ac7b674de4ff4aa16a50239d1d..79b1c222488bc37e311d95ff42cf8d905ea2ebb3 100644 GIT binary patch delta 23236 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 a`HtLveTzIruD(UZj$*g>?gH~%>AwNZQ6U)s delta 25875 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