home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
iclvme2900.tar.gz
/
iclvme2900.tar
/
kmt_ui_module
< prev
next >
Wrap
Text File
|
1987-07-14
|
35KB
|
915 lines
MODULE KMT_UI_MODULE;
@ Mode declarations @
MODE KMT_BUFFER IS (96)BYTE;
MODE KMT_STRING IS REF()BYTE;
MODE KMT_WORD IS REF()BYTE;
MODE KMT_MTM_VALUES IS ANY
(LONG WORD LW_VALUE,
LONG INT LI_VALUE,
REF WORD RW_VALUE,
REF INT RI_VALUE,
REF LONG WORD RLW_VALUE,
REF LONG INT RLI_VALUE,
REF()BYTE RVB_VALUE,
REF()REF()BYTE RVRVB_VALUE);
MODE
KMT_DH_DEVICE_DETAILS_S IS STRUCT
(BOOL FILE_OPEN,
WORD MAX_INPUT_LENGTH,
MAX_OUTPUT_LENGTH,
INPUT_PARITY,
OUTPUT_PARITY,
PAUSE);
MODE
KMT_FH_RECORD_DETAILS_S IS STRUCT
(BOOL FILE_OPEN,
NEW_RECORD,
END_OF_FILE,
WORD TEXT_TYPE, @ 0 = EBCDIC @
@ 1 = IA5 @
@ 2 = BINARY @
INT MAX_RECORD_LENGTH,
RECORD_LENGTH,
(4098) BYTE RECORD); @ Maximum record size of 4096 @
@ plus 2 bytes for CRLF pair @
@ when constructing output @
@ records @
MODE
KMT_PP_CONFG_PARAMS_S IS STRUCT
(BYTE MARK,
MAXL,
TIME,
NPAD,
PADC,
EOL,
QCTL,
QBIN,
CHKT,
REPT,
4-BYTE CAPAS);
MODE
KMT_TRACE_FLAGS_S IS WORD STRUCT
(BIT PH_TRACING,
PP_TRACING,
FH_TRACING,
DH_TRACING,
28-BIT SPARE);
MODE KMT_FH_FILE_STATISTICS_S IS STRUCT
(INT INPUT_TOTAL,
INT OUTPUT_TOTAL);
MODE KMT_PP_PACKET_STATISTICS_S IS STRUCT
(INT INPUT_TOTAL,
INT OUTPUT_TOTAL);
MODE KMT_STATISTICS_S IS STRUCT
(REF KMT_FH_FILE_STATISTICS_S FH_FILE_STATISTICS,
REF KMT_PP_PACKET_STATISTICS_S PACKET_STATISTICS);
@ External procedures @
EXT PROC (INT,RESPONSE) KMT_MESSAGE;
EXT PROC (INT,REF()KMT_MTM_VALUES) INT KMT_HELP_MTM;
EXT PROC (INT,REF()KMT_MTM_VALUES) INT KMT_SP_MTM;
EXT PROC (REF KMT_STRING) KMT_WORD KMT_SP_GET_WORD,
PROC (REF () BYTE) KMT_SP_CONVERT_TO_UPPER_CASE,
PROC (()BYTE,REF()BYTE,REF LONG INT,BOOL,RESPONSE)
KMT_SP_ASK_MESSAGE,
PROC (REF KMT_WORD) WORD KMT_SP_CONVERT_TO_BINARY,
PROC (WORD,WORD,RESPONSE) KMT_SP_CHECK_VME_CHAR;
EXT PROC (WORD,WORD,REF()BYTE,RESPONSE) CTM_LOG;
@ External constants @
EXT INT UNSET,EXIT; @ miscellaneous constants @
EXT INT SERVER_MODE,RECEIVE_MODE,SEND_MODE,COMMAND_MODE;
EXT INT REC_SERVER_IDLE,REC_INIT,SEND_INIT,COMPLETE,ABORT; @ protocol handler @
@ states @
EXT REF INT EXIT_STATE, @ controls main Kermit loop @
KMT_CURRENT_MODE, @ Server/Receive/Send/Command @
KMT_PH_STATE; @ Protocol Handler state @
EXT (256) BYTE
EBCDIC_TO_ASCII, @ Translation tables @
ASCII_TO_EBCDIC;
EXT REF KMT_STRING KMT_PH_INPUT_PACKET_DATA;
EXT REF KMT_BUFFER KMT_VME_FILE_BUF,KMT_REM_FILE_BUF,KMT_INPUT_BUF;
EXT REF KMT_WORD KMT_VME_FILE,KMT_REM_FILE;
EXT REF()KMT_MTM_VALUES KMT_MTM_AREA;
EXT REF INT MAXTRY,RETRY_COUNT,RETRY_TOTAL,TIMEOUT_TOTAL;
EXT REF INT FILE_OPTION;
EXT REF WORD DELAY;
EXT REF BOOL TRANSLATE_FILENAME;
EXT REF BOOL SAVE_INCOMPLETE_FILE;
EXT REF KMT_DH_DEVICE_DETAILS_S KMT_DH_DEVICE_DETAILS;
EXT REF KMT_FH_RECORD_DETAILS_S KMT_FH_RECORD_DETAILS;
EXT REF KMT_PP_CONFG_PARAMS_S KMT_PP_LOCAL_CONFG_PARAMS,
KMT_PP_REMOTE_CONFG_PARAMS;
EXT REF KMT_TRACE_FLAGS_S KMT_TRACE_FLAGS;
EXT REF KMT_STATISTICS_S KMT_STATISTICS;
GLOBAL STATIC (<STATUS 5>) PROC KMT_UI IS (RESPONSE RESULT):
@ requests command from user and executes command @
BEGIN
LONG INT STRLEN; @ length of input @
INT RC_IGNORED; @ response variable @
KMT_STRING KMT_CMD_BUF, @ command input string @
KMT_PARSE; @ pointer for parsing command string @
(10)KMT_MTM_VALUES HELP_MTM_AREA;
(80)BYTE HELP_TEXT;
INT HELP_TEXT_LEN;
(2)REF()BYTE HELP_RECALL_DATA;
INT MARK_PARAM IS 0,
EOL_PARAM IS 1,
PADC_PARAM IS 2;
@ support procs @
SIM PROC CHECK_AND_SET_PARAM IS (INT PARAM_CODE, WORD VALUE, WORD P_FLAG,
RESPONSE RESULT):
@ checks new value for MARK/EOL/PADC doesn't conflict with EOL/PADC/ @
@ MARK (as appropriate) and that the value is acceptable to VME I/O @
BEGIN
IF VALUE > 31 AND VALUE NE 127
THEN @ not a control character @
RESULT := 85935
ELSE
INT PMATCH;
REF KMT_PP_CONFG_PARAMS_S
CONFG_PARAMS IS IF P_FLAG = 0
THEN KMT_PP_REMOTE_CONFG_PARAMS @ receive @
ELSE KMT_PP_LOCAL_CONFG_PARAMS @ send @
FI;
RESULT := UNSET;
IF VALUE = CONFG_PARAMS.MARK @ check if value matches any param @
THEN PMATCH := MARK_PARAM
ELSF VALUE = CONFG_PARAMS.EOL
THEN PMATCH := EOL_PARAM
ELSF VALUE = CONFG_PARAMS.PADC
THEN PMATCH := PADC_PARAM
ELSF KMT_SP_CHECK_VME_CHAR(VALUE,P_FLAG,RESULT);
RESULT = 0
THEN @ character ok for VME I/O so set parameter @
CASE PARAM_CODE
THEN CONFG_PARAMS.MARK := VALUE
ELSE CONFG_PARAMS.EOL := VALUE
ELSE CONFG_PARAMS.PADC := VALUE
ESAC;
RESULT := 0
FI;
IF RESULT = UNSET
THEN
IF PMATCH = PARAM_CODE
THEN @ matched current value, ignore @
RESULT := 0
ELSE @ conflict with another parameter @
KMT_MTM_AREA(7) := PMATCH AS KMT_MTM_VALUES.RI_VALUE;
RESULT := 85937
FI
FI
FI
END
; @ CHECK_AND_SET_PARAM @
SIM PROC EXPAND_HELP IS (INT MSG_NO) INT:
@ expand help text until reply is -2 (no message found) or 0 (halted @
@ at end of message) or > 0 (halt code returned). @
BEGIN
INT M := MSG_NO,
REPLY := UNSET; @ -1 @
WHILE REPLY = UNSET
DO
REPLY := KMT_HELP_MTM(M,HELP_MTM_AREA);
IF REPLY = -1 OR REPLY = 0
THEN
M := REPLY;
CTM_LOG(3,10,HELP_TEXT(SIZE HELP_TEXT_LEN),RC_IGNORED)
FI
REPEAT;
REPLY @ return last reply @
END
; @ EXPAND_HELP @
@ procedures for executing commands @
SIM PROC KMT_UI_SERVER IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ SERVER command, Syntax: SERVER @
@ selects Kermit Server mode @
@ (not implemented in Server mode) @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
KMT_CURRENT_MODE := SERVER_MODE;
KMT_PH_STATE := REC_SERVER_IDLE;
RETRY_COUNT := RETRY_TOTAL := TIMEOUT_TOTAL := 0;
VAL KMT_STATISTICS.PACKET_STATISTICS := (0,0);
RESULT := 0
ELSE
RESULT := 89021 @ not implemented in Server mode @
FI
; @ KMT_UI_SERVER @
SIM PROC KMT_UI_RECEIVE IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ RECEIVE command, Syntax: RECEIVE [VME-filename] @
@ prepares VME kermit for the arrival of a file which will be @
@ saved with VME filename if specified, or with the filename sent @
@ by the remote Kermit @
@ (not implemented in Server mode) @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
@ check for optional filename @
KMT_VME_FILE := KMT_SP_GET_WORD(KMT_PARSE);
@ if present, copy to filename buffer @
UNLESS KMT_VME_FILE REF NIL
DO
KMT_VME_FILE :=
KMT_VME_FILE_BUF(SIZE LENGTH KMT_VME_FILE) :=
KMT_VME_FILE
FI;
@ set Receive mode and initial protocol handler state @
KMT_CURRENT_MODE := RECEIVE_MODE;
KMT_PH_STATE := REC_INIT;
RETRY_COUNT := RETRY_TOTAL := TIMEOUT_TOTAL := 0;
VAL KMT_STATISTICS.PACKET_STATISTICS := (0,0);
RESULT := 0
ELSE
RESULT := 89021 @ not implemented in Server mode @
FI
; @ KMT_UI_RECEIVE @
SIM PROC KMT_UI_SEND IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ SEND command, Syntax: SEND VME-filename [remote-filename] @
@ sends the VME file to the remote Kermit with remote filename if @
@ specified otherwise with VME filename @
@ (not implemented in Server mode) @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
@ check for mandatory filename @
KMT_VME_FILE := KMT_SP_GET_WORD(KMT_PARSE);
IF NOT (KMT_VME_FILE REF NIL)
THEN
@ copy to filename buffer @
KMT_VME_FILE :=
KMT_VME_FILE_BUF(SIZE LENGTH KMT_VME_FILE) :=
KMT_VME_FILE;
@ check for optional remote filename @
KMT_REM_FILE := KMT_SP_GET_WORD(KMT_PARSE);
@ if present copy to buffer @
UNLESS KMT_REM_FILE REF NIL
DO
KMT_REM_FILE :=
KMT_REM_FILE_BUF(SIZE LENGTH KMT_REM_FILE) :=
KMT_REM_FILE
FI;
@ set Send mode and initial protocol handler state @
KMT_CURRENT_MODE := SEND_MODE;
KMT_PH_STATE := SEND_INIT;
RETRY_COUNT := RETRY_TOTAL := TIMEOUT_TOTAL := 0;
VAL KMT_STATISTICS.PACKET_STATISTICS := (0,0);
RESULT := 0
ELSE
RESULT := -85010 @ VME filename must be present @
FI
ELSE
RESULT := 89021 @ not implemented in Server mode @
FI
; @ KMT_UI_SEND @
SIM PROC KMT_UI_HELP IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ HELP command, Syntax: HELP [command [argument(s)] ] @
@ provides on-line help for Kermit commands @
@ (not implemented in Server mode) @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
INT HELP_MSG_NO := 1, @ start of help info @
P1 := 0, @ indicates mtm call with command params @
HELP_REPLY;
@ set up message text parameter area @
HELP_MTM_AREA(SIZE 4) :=
(HELP_TEXT AS KMT_MTM_VALUES.RVB_VALUE,
HELP_TEXT_LEN AS KMT_MTM_VALUES.RI_VALUE,
HELP_RECALL_DATA AS KMT_MTM_VALUES.RVRVB_VALUE,
P1 AS KMT_MTM_VALUES.RI_VALUE);
@ obtain any command line parameters @
FOR I FROM 4 TO 9
DO
KMT_WORD HELP_ARG := KMT_SP_GET_WORD(KMT_PARSE);
KMT_SP_CONVERT_TO_UPPER_CASE(HELP_ARG);
HELP_MTM_AREA(I) :=
HELP_ARG AS KMT_MTM_VALUES.RVB_VALUE
REPEAT;
@ expand help until all done (0) or none found (-2) @
WHILE HELP_REPLY := EXPAND_HELP(HELP_MSG_NO);
HELP_REPLY > 0
DO
@ halt code returned, text is prompt, get response @
KMT_SP_ASK_MESSAGE(HELP_TEXT(SIZE HELP_TEXT_LEN),
KMT_INPUT_BUF,STRLEN,FALSE,RC_IGNORED);
P1 := 1; @ indicates mtm call with menu selection @
HELP_MTM_AREA(3) := P1 AS KMT_MTM_VALUES.RI_VALUE;
HELP_MTM_AREA(4) :=
KMT_INPUT_BUF(SIZE S'STRLEN) AS KMT_MTM_VALUES.RVB_VALUE;
HELP_MSG_NO := HELP_REPLY
REPEAT;
RESULT := 0
ELSE
RESULT := 89021 @ not implemented in Server mode @
FI
; @ KMT_UI_HELP @
SIM PROC KMT_UI_EXIT IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ EXIT command, Syntax: EXIT @
@ terminates Kermit execution @
BEGIN
EXIT_STATE := EXIT; @ set exit state @
IF KMT_CURRENT_MODE = SERVER_MODE
THEN
KMT_PH_STATE := COMPLETE
FI;
RESULT := 0
END
; @ KMT_UI_EXIT @
SIM PROC KMT_UI_SET IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ SET command, Syntax: SET [{SEND/RECEIVE}] parameter value @
@ sets Kermit parameters @
BEGIN
KMT_WORD ARG;
WORD P_FLAG,PARAM,OPTION;
RESULT := 0;
ARG := KMT_SP_GET_WORD(KMT_PARSE);
IF ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSF
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(4) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
P_FLAG := KMT_SP_MTM(5100,KMT_MTM_AREA);
P_FLAG NE W'UNSET
THEN @ SET SEND/RECEIVE command @
ARG := KMT_SP_GET_WORD(KMT_PARSE);
IF ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSF
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
PARAM := KMT_SP_MTM(5120,KMT_MTM_AREA);
PARAM = 921
THEN @ invalid SEND/RECEIVE parameter @
RESULT := 85921
ELSF
ARG := KMT_SP_GET_WORD(KMT_PARSE);
ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSE
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(6) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
CASE PARAM
THEN @ 0 - START-OF-PACKET @
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
CHECK_AND_SET_PARAM(MARK_PARAM,OPTION,P_FLAG,RESULT)
ELSE @ 1 - PACKET-LENGTH @
WORD DH_LEN,NPAD;
IF P_FLAG = 0
THEN @ RECEIVE @
DH_LEN := KMT_DH_DEVICE_DETAILS.MAX_INPUT_LENGTH;
NPAD := KMT_PP_LOCAL_CONFG_PARAMS.NPAD
ELSE
DH_LEN := KMT_DH_DEVICE_DETAILS.MAX_OUTPUT_LENGTH;
NPAD := KMT_PP_REMOTE_CONFG_PARAMS.NPAD
FI;
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION < 30 OR OPTION > 94 OR OPTION > DH_LEN
THEN @ invalid PACKET-LENGTH @
RESULT := 85931
ELSF
(OPTION + NPAD) > DH_LEN
THEN @ padding + packet length exceeds device line length @
RESULT := 85934
ELSF @ set parameter @
P_FLAG = 0
THEN @ RECEIVE @
KMT_PP_LOCAL_CONFG_PARAMS.MAXL := OPTION
ELSE @ SEND @
KMT_PP_REMOTE_CONFG_PARAMS.MAXL := OPTION
FI
ELSE @ 2 - TIMEOUT @
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION > 94
THEN @ invalid TIMEOUT @
RESULT := 85931
ELSF @ set parameter @
P_FLAG = 0
THEN @ RECEIVE @
KMT_PP_REMOTE_CONFG_PARAMS.TIME := OPTION
ELSE @ SEND @
KMT_PP_LOCAL_CONFG_PARAMS.TIME := OPTION
FI
ELSE @ 3 - END-OF-LINE @
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
CHECK_AND_SET_PARAM(EOL_PARAM,OPTION,P_FLAG,RESULT)
ELSE @ 4 - PADDING @
WORD DH_LEN,MAXL;
IF P_FLAG = 0
THEN @ RECEIVE @
DH_LEN := KMT_DH_DEVICE_DETAILS.MAX_INPUT_LENGTH;
MAXL := KMT_PP_LOCAL_CONFG_PARAMS.MAXL
ELSE @ SEND @
DH_LEN := KMT_DH_DEVICE_DETAILS.MAX_OUTPUT_LENGTH;
MAXL := KMT_PP_REMOTE_CONFG_PARAMS.MAXL
FI;
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION > 94 OR OPTION > DH_LEN
THEN @ invalid PADDING @
RESULT := 85931
ELSF
(OPTION + MAXL) > DH_LEN
THEN @ padding + packet length exceeds device line length @
RESULT := 85934
ELSF @ set parameter @
P_FLAG = 0
THEN @ RECEIVE @
KMT_PP_LOCAL_CONFG_PARAMS.NPAD := OPTION
ELSE @ SEND @
KMT_PP_REMOTE_CONFG_PARAMS.NPAD := OPTION
FI
ELSE @ 5 - PAD-CHARACTER @
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
CHECK_AND_SET_PARAM(PADC_PARAM,OPTION,P_FLAG,RESULT)
ELSE @ 6 - QUOTE @
REF KMT_PP_CONFG_PARAMS_S CONFG_PARAMS IS
IF P_FLAG = 0
THEN @ RECEIVE @
KMT_PP_REMOTE_CONFG_PARAMS
ELSE @ SEND @
KMT_PP_LOCAL_CONFG_PARAMS
FI;
OPTION := IF LENGTH ARG > 1
THEN @ may be decimal or hex @
KMT_SP_CONVERT_TO_BINARY(ARG)
ELSE @ EBCDIC character @
EBCDIC_TO_ASCII(ARG)
FI;
IF OPTION < 32 OR OPTION > 126
THEN @ not a printable character @
RESULT := 85931
ELSF CONFG_PARAMS.QBIN = OPTION
THEN @ QUOTE and EIGTH-BIT-PREFIX characters equal @
RESULT := 85933
ELSE @ set parameter @
CONFG_PARAMS.QCTL := OPTION
FI
ELSE @ 7 - EIGTH-BIT-PREFIX @
REF KMT_PP_CONFG_PARAMS_S CONFG_PARAMS IS
IF P_FLAG = 0
THEN @ RECEIVE @
KMT_PP_REMOTE_CONFG_PARAMS
ELSE @ SEND @
KMT_PP_LOCAL_CONFG_PARAMS
FI;
OPTION := IF LENGTH ARG > 1
THEN @ may be decimal or hex @
KMT_SP_CONVERT_TO_BINARY(ARG)
ELSE @ EBCDIC character @
EBCDIC_TO_ASCII(ARG)
FI;
IF OPTION < 32 OR OPTION > 126
OR (OPTION > 62 AND OPTION < 96)
THEN @ not a printable character @
RESULT := 85931
ELSF CONFG_PARAMS.QCTL = OPTION
THEN @ QUOTE and EIGTH-BIT-PREFIX characters equal @
RESULT := 85933
ELSE @ set parameter @
CONFG_PARAMS.QBIN := OPTION
FI
DEFAULT @ invalid SEND/RECEIVE parameter @
RESULT := 85921
ESAC
FI
ELSF
P_FLAG := KMT_SP_MTM(5110,KMT_MTM_AREA);
P_FLAG = 920
THEN @ invalid SET parameter @
RESULT := 85920
ELSF @ SET DEBUG/DELAY/FILE/RETRY/PAUSE @
ARG := KMT_SP_GET_WORD(KMT_PARSE);
ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSE
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
CASE P_FLAG
THEN @ 0 - DEBUG @
PARAM := KMT_SP_MTM(5130,KMT_MTM_AREA);
IF PARAM = 921
THEN @ invalid DEBUG parameter @
RESULT := 85921
ELSF
ARG := KMT_SP_GET_WORD(KMT_PARSE);
ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSF
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(6) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
OPTION := KMT_SP_MTM(5150,KMT_MTM_AREA);
OPTION = 931
THEN @ invalid option @
RESULT := 85931
ELSE @ set parameter @
CASE PARAM
THEN @ 0 - ALL @
KMT_TRACE_FLAGS := IF OPTION = 0
THEN @ OFF @
0
ELSE @ ON @
-1
FI
ELSE @ 1 - FILE @
KMT_TRACE_FLAGS.FH_TRACING := OPTION
ELSE @ 2 - PROTOCOL @
KMT_TRACE_FLAGS.PH_TRACING := OPTION
ELSE @ 3 - PACKET @
KMT_TRACE_FLAGS.PP_TRACING := OPTION
ELSE @ 4 - DEVICE @
KMT_TRACE_FLAGS.DH_TRACING := OPTION
DEFAULT @ invalid option @
RESULT := 85931
ESAC
FI
ELSE @ 1 - DELAY @
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION < 5 OR OPTION > 300
THEN @ invalid DELAY parameter @
RESULT := 85930
ELSE @ set parameter @
DELAY := I'(OPTION)
FI
ELSE @ 2 - FILE @
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
ARG := KMT_SP_GET_WORD(KMT_PARSE);
IF ARG REF NIL
THEN @ incomplete command @
RESULT := 85932
ELSF
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(6) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
OPTION := KMT_SP_MTM(5140,KMT_MTM_AREA);
OPTION = 921 OR OPTION = 931
THEN @ invalid FILE parameter or option @
RESULT := 85000 + OPTION
ELSF OPTION < 3
THEN @ TYPE - EBCDIC, ASCII, BINARY @
KMT_FH_RECORD_DETAILS.TEXT_TYPE := OPTION
ELSF OPTION < 5
THEN @ NAMING @
TRANSLATE_FILENAME := (OPTION = 4)
ELSF OPTION < 7
THEN @ OVERWRITE @
FILE_OPTION := IF OPTION = 5
THEN @ create mode @
1
ELSE @ create replace mode @
2
FI
ELSF OPTION < 9
THEN @ INCOMPLETE @
SAVE_INCOMPLETE_FILE := (OPTION = 8)
ELSE @ invalid FILE parameter @
RESULT := 85931
FI
ELSE @ 3 - RETRY @
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION > 10
THEN @ invalid RETRY @
RESULT := 85930
ELSE @ set parameter @
MAXTRY := OPTION + 1
FI
ELSE @ 4 - PAUSE @
KMT_SP_CONVERT_TO_UPPER_CASE(ARG);
KMT_MTM_AREA(5) := ARG AS KMT_MTM_VALUES.RVB_VALUE;
OPTION := KMT_SP_CONVERT_TO_BINARY(ARG);
IF OPTION > 50
THEN @ invalid PAUSE @
RESULT := 85930
ELSE @ set parameter @
KMT_DH_DEVICE_DETAILS.PAUSE := (I'OPTION) * 100
FI
DEFAULT @ invalid SET parameter @
RESULT := 85920
ESAC
FI;
IF KMT_CURRENT_MODE NE SERVER_MODE AND RESULT > 0
THEN @ don't send error packet if not in server mode @
RESULT := -RESULT
FI
END
; @ KMT_UI_SET @
SIM PROC KMT_UI_SHOW IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ SHOW command, Syntax: SHOW @
@ displays the current values of all Kermit parameters @
@ (this variant not implemented in Server mode @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
BYTE
REM_QCTL := ASCII_TO_EBCDIC(KMT_PP_REMOTE_CONFG_PARAMS.QCTL),
REM_QBIN := ASCII_TO_EBCDIC(KMT_PP_REMOTE_CONFG_PARAMS.QBIN),
LOC_QCTL := ASCII_TO_EBCDIC(KMT_PP_LOCAL_CONFG_PARAMS.QCTL),
LOC_QBIN := ASCII_TO_EBCDIC(KMT_PP_LOCAL_CONFG_PARAMS.QBIN);
KMT_MTM_AREA(3 SIZE 3) :=
((L'(I'DELAY)) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(I'KMT_DH_DEVICE_DETAILS.PAUSE)/100) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(MAXTRY-1)) AS
KMT_MTM_VALUES.LI_VALUE);
KMT_MESSAGE(-85821,RC_IGNORED);
KMT_MTM_AREA(3 SIZE 8) :=
(KMT_PP_REMOTE_CONFG_PARAMS.MARK AS
KMT_MTM_VALUES.RVB_VALUE,
(L'KMT_PP_LOCAL_CONFG_PARAMS.MAXL) AS
KMT_MTM_VALUES.LW_VALUE,
(L'KMT_PP_REMOTE_CONFG_PARAMS.TIME) AS
KMT_MTM_VALUES.LW_VALUE,
(L'KMT_PP_LOCAL_CONFG_PARAMS.NPAD) AS
KMT_MTM_VALUES.LW_VALUE,
KMT_PP_LOCAL_CONFG_PARAMS.PADC AS
KMT_MTM_VALUES.RVB_VALUE,
KMT_PP_LOCAL_CONFG_PARAMS.EOL AS
KMT_MTM_VALUES.RVB_VALUE,
REM_QCTL AS
KMT_MTM_VALUES.RVB_VALUE,
REM_QBIN AS
KMT_MTM_VALUES.RVB_VALUE);
KMT_MESSAGE(-85822,RC_IGNORED);
KMT_MTM_AREA(3 SIZE 8) :=
(KMT_PP_LOCAL_CONFG_PARAMS.MARK AS
KMT_MTM_VALUES.RVB_VALUE,
(L'KMT_PP_REMOTE_CONFG_PARAMS.MAXL) AS
KMT_MTM_VALUES.LW_VALUE,
(L'KMT_PP_LOCAL_CONFG_PARAMS.TIME) AS
KMT_MTM_VALUES.LW_VALUE,
(L'KMT_PP_REMOTE_CONFG_PARAMS.NPAD) AS
KMT_MTM_VALUES.LW_VALUE,
KMT_PP_REMOTE_CONFG_PARAMS.PADC AS
KMT_MTM_VALUES.RVB_VALUE,
KMT_PP_REMOTE_CONFG_PARAMS.EOL AS
KMT_MTM_VALUES.RVB_VALUE,
LOC_QCTL AS
KMT_MTM_VALUES.RVB_VALUE,
LOC_QBIN AS
KMT_MTM_VALUES.RVB_VALUE);
KMT_MESSAGE(-85823,RC_IGNORED);
KMT_MTM_AREA(3 SIZE 4) :=
(KMT_FH_RECORD_DETAILS.TEXT_TYPE AS
KMT_MTM_VALUES.RW_VALUE,
FILE_OPTION AS
KMT_MTM_VALUES.RI_VALUE,
(L'(WORD: (BIT: SAVE_INCOMPLETE_FILE))) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(WORD: (BIT: TRANSLATE_FILENAME))) AS
KMT_MTM_VALUES.LW_VALUE);
KMT_MESSAGE(-85825,RC_IGNORED);
KMT_MTM_AREA(3 SIZE 2) :=
(KMT_DH_DEVICE_DETAILS.MAX_INPUT_LENGTH AS
KMT_MTM_VALUES.RW_VALUE,
KMT_DH_DEVICE_DETAILS.MAX_OUTPUT_LENGTH AS
KMT_MTM_VALUES.RW_VALUE);
KMT_MESSAGE(-85826,RC_IGNORED);
KMT_MTM_AREA(3 SIZE 4) :=
((L'(WORD: KMT_TRACE_FLAGS.FH_TRACING)) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(WORD: KMT_TRACE_FLAGS.PH_TRACING)) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(WORD: KMT_TRACE_FLAGS.PP_TRACING)) AS
KMT_MTM_VALUES.LW_VALUE,
(L'(WORD: KMT_TRACE_FLAGS.DH_TRACING)) AS
KMT_MTM_VALUES.LW_VALUE);
KMT_MESSAGE(-85827,RC_IGNORED);
RESULT := 0
ELSE
RESULT := 85911 @ not yet implemented in Server mode @
FI
; @ KMT_UI_SHOW @
SIM PROC KMT_UI_STATISTICS IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ STATISTICS command, Syntax: STATISTICS @
@ displays statistics of last file transfer @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
REF KMT_FH_FILE_STATISTICS_S FILE_STATS IS
KMT_STATISTICS.FH_FILE_STATISTICS;
REF KMT_PP_PACKET_STATISTICS_S PACKET_STATS IS
KMT_STATISTICS.PACKET_STATISTICS;
KMT_MTM_AREA(3 SIZE 6) := (PACKET_STATS.INPUT_TOTAL AS
KMT_MTM_VALUES.RI_VALUE,
PACKET_STATS.OUTPUT_TOTAL AS
KMT_MTM_VALUES.RI_VALUE,
RETRY_TOTAL AS
KMT_MTM_VALUES.RI_VALUE,
TIMEOUT_TOTAL AS
KMT_MTM_VALUES.RI_VALUE,
FILE_STATS.INPUT_TOTAL AS
KMT_MTM_VALUES.RI_VALUE,
FILE_STATS.OUTPUT_TOTAL AS
KMT_MTM_VALUES.RI_VALUE);
KMT_MESSAGE(-85820,RC_IGNORED);
RESULT := 0
ELSE
RESULT := 85911 @ not yet implemented in Server mode @
FI
; @ KMT_UI_STATISTICS @
SIM PROC KMT_UI_UNRECOGNISED IS GROUP KMT_UI_EXEC(RESPONSE RESULT):
@ command no recognised @
IF KMT_CURRENT_MODE NE SERVER_MODE
THEN
RESULT := -85910
ELSE
RESULT := 85910
FI
; @ KMT_UI_UNRECOGNISED @
@ command execution procedure selector: @
()SIM PROC GROUP KMT_UI_EXEC(RESPONSE) KMT_UI_CMD IS
(KMT_UI_SERVER,
KMT_UI_RECEIVE,
KMT_UI_SEND,
KMT_UI_HELP,
KMT_UI_EXIT,
KMT_UI_SET,
KMT_UI_SHOW,
KMT_UI_STATISTICS,
KMT_UI_UNRECOGNISED);
KMT_WORD KMT_CMD; @ current command @
INT CMD; @ current command code @
RESULT := 0;
IF KMT_CURRENT_MODE = COMMAND_MODE
THEN
@ prompt for command input @
KMT_SP_ASK_MESSAGE(X"15E5D4C540D285999489A36E40", @ " VME Kermit> " @
KMT_INPUT_BUF,STRLEN,TRUE,RESULT);
KMT_CMD_BUF := KMT_PARSE := KMT_INPUT_BUF(SIZE S'STRLEN);
ELSF LENGTH KMT_PH_INPUT_PACKET_DATA > 0
THEN
@ Server mode, command in packet @
KMT_CMD_BUF := KMT_PARSE := KMT_PH_INPUT_PACKET_DATA
ELSE
RESULT := 89022 @ no command specified in Server mode @
FI;
IF RESULT = 0
THEN
KMT_CMD := KMT_SP_GET_WORD(KMT_PARSE); @ extract command @
UNLESS KMT_CMD REF NIL
DO
@ convert command name to upper case, validate and execute command @
KMT_SP_CONVERT_TO_UPPER_CASE(KMT_CMD);
KMT_MTM_AREA(3) := KMT_CMD AS KMT_MTM_VALUES.RVB_VALUE;
CMD := KMT_SP_MTM(5010,KMT_MTM_AREA(SIZE 4));
KMT_UI_CMD(CMD)(RESULT)
FI
FI
END
; @ KMT_UI @
ENDMODULE @ KMT_UI_MODULE @