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 () 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 @