with TEXT_IO; use TEXT_IO; with INTEGER_TEXT_IO; use INTEGER_TEXT_IO; with UATL_DATA_TYPES; use UATL_DATA_TYPES; with INTERFACE_DATA_TYPES_INTERNAL; use INTERFACE_DATA_TYPES_INTERNAL; with INTERFACE_DATA_TYPES_1553; use INTERFACE_DATA_TYPES_1553; with INTERFACE_DATA_TYPES_488; use INTERFACE_DATA_TYPES_488; with UATL_BUILDER_DATA; use UATL_BUILDER_DATA; with UATL_PROCEDURE_BUILDER_DATA; use UATL_PROCEDURE_BUILDER_DATA; with UATL_INTERACTIVE_IO; use UATL_INTERACTIVE_IO; with TEST_MANAGER_SCREEN_DISPLAY; use TEST_MANAGER_SCREEN_DISPLAY; package body UATL_INTERFACE_BUILDER is MENU_REC : LIST(1..4) := (new STRING'("Start Recording"), new STRING'("Stop Recording"), new STRING'("Record Message"), new STRING'("Exit")); MENU_CD : LIST(1..5) := (new STRING'("Invoke Operator Interface"), new STRING'("Display Operator Alert"), new STRING'("Display Operator Message"), new STRING'("Display Control"), new STRING'("Exit")); type Y_N is (Y,N); procedure GET is new GET_ENUMERATED(Y_N); type A_D is (A,D); procedure GET is new GET_ENUMERATED(A_D); procedure GET is new GET_INTEGER(NATURAL); procedure GETP is new GET_INTEGER(POSITIVE); type NEW_DATA_WORD_COUNT_TYPE is new INTEGER range DATA_WORD_COUNT_TYPE'first..DATA_WORD_COUNT_TYPE'last; procedure GET is new GET_INTEGER(NEW_DATA_WORD_COUNT_TYPE); type NEW_BATCH_NUMBER is new INTEGER range BATCH_NUMBER'first..BATCH_NUMBER'last; procedure GET is new GET_INTEGER(NEW_BATCH_NUMBER); package BOOLEAN_IO is new ENUMERATION_IO(BOOLEAN); use BOOLEAN_IO; procedure GET is new GET_ENUMERATED(BOOLEAN); package INTERFACE_DEVICE_IO is new ENUMERATION_IO(INTERFACE_DEVICE); use INTERFACE_DEVICE_IO; procedure GET is new GET_ENUMERATED(INTERFACE_DEVICE); package TIMING_IO is new FIXED_IO(DURATION); use TIMING_IO; procedure GET is new GET_FIXED(DURATION); package SOURCE_DEST_IO is new INTEGER_IO(SOURCE_DESTINATION); use SOURCE_DEST_IO; procedure GET is new GET_INTEGER(SOURCE_DESTINATION); package ID_TYPE_IO is new INTEGER_IO(ID_TYPE); use ID_TYPE_IO; procedure GET is new GET_INTEGER(ID_TYPE); package SUB_ADD_IO is new INTEGER_IO(SUB_ADDRESS); use SUB_ADD_IO; procedure GET is new GET_INTEGER(SUB_ADDRESS); package TERM_IO is new ENUMERATION_IO(TERMINATION_TYPE); use TERM_IO; procedure GET is new GET_ENUMERATED(TERMINATION_TYPE); package PROTO_IO is new ENUMERATION_IO(IEEE488_PROTOCOL); use PROTO_IO; procedure GET is new GET_ENUMERATED(IEEE488_PROTOCOL); procedure CREATE_INTERNAL_INTERFACE_CALLS is RECEIVER : SOURCE_DESTINATION; ACT_DEACT : A_D; YES_NO : Y_N; begin CLEAR_SCREEN; PUT_STRING(4,1," ******** Internal Interface Receivers *******"); NEW_LINE; NEW_LINE(TEST_FILE); loop NEW_LINE; GET(" Enter internal receiver number: ",RECEIVER); GET(" Activate or Deactivate? (A/D): ",ACT_DEACT); if ACT_DEACT = A then PUT(TEST_FILE,INT_REC_ON); else PUT(TEST_FILE,INT_REC_OFF); end if; PUT_LINE(TEST_FILE,SOURCE_DESTINATION'image(RECEIVER) & PAREN_SEMI); NEW_LINE; GET(" Want to make another? (y/n): ",YES_NO); exit when YES_NO = N; end loop; end CREATE_INTERNAL_INTERFACE_CALLS; procedure CREATE_INTERNAL_INITIALIZATION_CALL is RECEIVER : SOURCE_DESTINATION; COUNT : POSITIVE; YES_NO : Y_N; begin CLEAR_SCREEN; PUT_STRING(4,1," ******** Internal Interface Initialization *******"); NEW_LINE(2); NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,INIT_INTERFACE); PUT(TEST_FILE,SECOND_INDENT & LEFT_PAREN); GET(" How many addresses are to be initialized?: ",COUNT); if COUNT = 1 then PUT(TEST_FILE,ONE_ARROW); end if; NEW_LINE; for I in 1..COUNT loop GET(" Enter internal receiver address: ",RECEIVER); PUT(TEST_FILE,SOURCE_DESTINATION'image(RECEIVER)); if I < COUNT then PUT(TEST_FILE,COMMA); else PUT_LINE(TEST_FILE,RIGHT_PAREN & PAREN_SEMI); end if; end loop; end CREATE_INTERNAL_INITIALIZATION_CALL; procedure CREATE_RECORDING_CALLS is YES_NO : Y_N; LABL : STRING(1..10); CHOICE : POSITIVE; BTCH : NEW_BATCH_NUMBER; BATS : constant := 3; BAT_CNT : NATURAL; INP_LINE : STRING(1..80); END_INP : NATURAL; OVERR : BOOLEAN; begin loop CHOICE := DISPLAY_MENU_AND_GET_SELECTION( "DATA RECORDING",MENU_REC); -- Case on selection made case CHOICE is when 1 => CLEAR_SCREEN; PUT_STRING(4,1," ******** Start Recording *******"); NEW_LINE; NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,DECLARE_BLOCK); PUT_LINE(TEST_FILE,REC_CONTROL); PUT_LINE(TEST_FILE,INT_CONTROL); for I in INTERFACE_DEVICE loop GET(" Activate the " & INTERFACE_DEVICE'image(I) & " interface? (y/n): ", YES_NO); case I is when I1553B => PUT(TEST_FILE,I1553_CONTROL); when IEEE488 => PUT(TEST_FILE,I488_CONTROL); when INTERNAL => PUT(TEST_FILE,INTRNL_CONTROL); when LOCAL => PUT(TEST_FILE,LOCAL_CONTROL); end case; if YES_NO = Y then PUT(TEST_FILE,ACT_WORD); else PUT(TEST_FILE,DEACT_WORD); end if; if I = INTERFACE_DEVICE'last then PUT(TEST_FILE,RIGHT_PAREN); end if; PUT_LINE(TEST_FILE,COMMA); end loop; PUT_LINE(TEST_FILE,BAT_CONTROL); NEW_LINE; BAT_CNT := 0; PUT(TEST_FILE,FOURTH_INDENT); loop GET(" Enter Batch ID to be activated (0, when done): ", BTCH); exit when BTCH = 0; BAT_CNT := BAT_CNT + 1; if BAT_CNT > BATS then NEW_LINE(TEST_FILE); PUT(TEST_FILE,FOURTH_INDENT); BAT_CNT := 1; end if; PUT(TEST_FILE,NEW_BATCH_NUMBER'image(BTCH) & ONE_SPACE & EQUAL_ARROW & ACT_WORD & ONE_SPACE & COMMA); end loop; NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,FOURTH_INDENT & OTHER_CNTRLS & RIGHT_PAREN & PAREN_SEMI); PUT_LINE(TEST_FILE,DECLARE_BEGIN); NEW_LINE; PUT_LINE(TEST_FILE,START_RECORD); PUT_LINE(TEST_FILE,CONTROL_PARM & USER_REC_CON & COMMA); PUT(" Enter Test Label (10 characters): "); GET(LABL); SKIP_LINE; NEW_LINE; PUT_LINE(TEST_FILE,TEST_LAB_PARM & DOUBLE_Q & LABL & DOUBLE_Q & COMMA); PUT(" Enter Run Label (10 characters): "); GET(LABL); SKIP_LINE; NEW_LINE; PUT_LINE(TEST_FILE,RUN_LAB_PARM & DOUBLE_Q & LABL & DOUBLE_Q & COMMA); PUT(" Enter Device Name: "); GET_LINE(INP_LINE,END_INP); NEW_LINE; PUT_LINE(TEST_FILE,DEVICE_PARM & DOUBLE_Q & INP_LINE(1..END_INP) & DOUBLE_Q & PAREN_SEMI); PUT_LINE(TEST_FILE,DECLARE_END); when 2 => NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,STOP_RECORD); when 3 => CLEAR_SCREEN; PUT_STRING(4,1," ******** Record Message *******"); NEW_LINE(2); PUT(" Enter message to be recorded: "); GET_LINE(INP_LINE,END_INP); NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,RECORD_MSG_1 & INP_LINE(1..END_INP) & ONE_SPACE & COMMA); NEW_LINE; GET(" Enter the message's interface: ",INTERFACE_DEV); NEW_LINE; PUT_LINE(TEST_FILE,RECORD_MSG_2 & INTERFACE_DEVICE'image(INTERFACE_DEV) & ONE_SPACE & COMMA); GET(" Enter the Batch ID: ",BTCH); NEW_LINE; PUT_LINE(TEST_FILE,RECORD_MSG_3 & NEW_BATCH_NUMBER'image(BTCH) & ONE_SPACE & PAREN_SEMI); when 4 => exit; when others => null; end case; end loop; end CREATE_RECORDING_CALLS; procedure CREATE_OPERATOR_INTERFACE_CALLS is YES_NO : Y_N; CHOICE : POSITIVE; BTCH : NEW_BATCH_NUMBER; BATS : constant := 3; BAT_CNT : NATURAL; INP_LINE : STRING(1..80); END_INP : NATURAL; begin loop CHOICE := DISPLAY_MENU_AND_GET_SELECTION( "OPERATOR INTERFACE",MENU_CD); -- Case on selection made case CHOICE is when 1 => NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,OP_INT); when 2 => CLEAR_SCREEN; PUT_STRING(4,1," ******** Operator Alert *******"); NEW_LINE; PUT(" Enter alert message: "); GET_LINE(INP_LINE,END_INP); NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,OP_ALERT); PUT_LINE(TEST_FILE,SECOND_INDENT & DOUBLE_Q & INP_LINE(1..END_INP) & DOUBLE_Q & PAREN_SEMI); when 3 => CLEAR_SCREEN; PUT_STRING(4,1," ******** Operator Message *******"); NEW_LINE; PUT(" Enter operator message: "); GET_LINE(INP_LINE,END_INP); NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,OP_MESS); PUT_LINE(TEST_FILE,SECOND_INDENT & DOUBLE_Q & INP_LINE(1..END_INP) & DOUBLE_Q & PAREN_SEMI); when 4 => CLEAR_SCREEN; PUT_STRING(4,1," ******** Display Control *******"); NEW_LINE; NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,DECLARE_BLOCK); PUT_LINE(TEST_FILE,DIS_CONTROL); PUT_LINE(TEST_FILE,INT_CONTROL); for I in INTERFACE_DEVICE loop GET(" Activate the " & INTERFACE_DEVICE'image(I) & " interface? (y/n): ",YES_NO); case I is when I1553B => PUT(TEST_FILE,I1553_CONTROL); when IEEE488 => PUT(TEST_FILE,I488_CONTROL); when INTERNAL => PUT(TEST_FILE,INTRNL_CONTROL); when LOCAL => PUT(TEST_FILE,LOCAL_CONTROL); end case; if YES_NO = Y then PUT(TEST_FILE,ACT_WORD); else PUT(TEST_FILE,DEACT_WORD); end if; if I = INTERFACE_DEVICE'last then PUT(TEST_FILE,RIGHT_PAREN); end if; PUT_LINE(TEST_FILE,COMMA); end loop; PUT_LINE(TEST_FILE,BAT_CONTROL); NEW_LINE; BAT_CNT := 0; PUT(TEST_FILE,FOURTH_INDENT); loop GET(" Enter Batch ID to be activated (0, when done): ", BTCH); exit when BTCH = 0; BAT_CNT := BAT_CNT + 1; if BAT_CNT > BATS then NEW_LINE(TEST_FILE); PUT(TEST_FILE,FOURTH_INDENT); BAT_CNT := 1; end if; PUT(TEST_FILE,NEW_BATCH_NUMBER'image(BTCH) & ONE_SPACE & EQUAL_ARROW & ACT_WORD & ONE_SPACE & COMMA); end loop; NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,FOURTH_INDENT & OTHER_CNTRLS & RIGHT_PAREN & PAREN_SEMI); PUT_LINE(TEST_FILE,DECLARE_BEGIN); PUT_LINE(TEST_FILE,OP_DIS); PUT_LINE(TEST_FILE,DECLARE_END); when 5 => exit; when others => null; end case; end loop; end CREATE_OPERATOR_INTERFACE_CALLS; procedure CREATE_IEEE488_BUS_POLLING_LIST_CALL is type NEW_ID_TYPE is new INTEGER range 0..30; USERID : NEW_ID_TYPE; DEV_CNT : NATURAL; TM : TERMINATION_TYPE; PROT : IEEE488_PROTOCOL; procedure GET is new GET_INTEGER(NEW_ID_TYPE); package NEW_ID_IO is new INTEGER_IO(NEW_ID_TYPE); use NEW_ID_IO; begin CLEAR_SCREEN; PUT_STRING(4,1," ******** IEEE488 Polling List Call *******"); NEW_LINE(2); NEW_LINE(TEST_FILE); PUT(TEST_FILE,CALL_SET_DEV & LEFT_PAREN); GET(" How many devices are there?: ",DEV_CNT); if DEV_CNT = 1 then PUT(TEST_FILE,ONE_ARROW & ONE_SPACE); end if; NEW_LINE(TEST_FILE); for I in 1..DEV_CNT loop NEW_LINE; GET(" Enter device address: ",USERID); PUT_LINE(" Enter the device protocol"); PUT(SECOND_INDENT); for J in IEEE488_PROTOCOL loop PUT(J); PUT(ONE_SPACE); if J < IEEE488_PROTOCOL'last then PUT(COMMA); end if; end loop; GET(COLON,PROT); PUT_LINE(" Enter the message termination"); PUT(SECOND_INDENT); for J in TERMINATION_TYPE loop PUT(J); PUT(ONE_SPACE); if J < TERMINATION_TYPE'last then PUT(COMMA); end if; end loop; GET(COLON,TM); PUT(TEST_FILE,SECOND_INDENT & LEFT_PAREN & NEW_ID_TYPE'image(USERID) & ONE_SPACE & COMMA & IEEE488_PROTOCOL'image(PROT) & ONE_SPACE & COMMA & TERMINATION_TYPE'image(TM) & RIGHT_PAREN); if I < DEV_CNT then PUT_LINE(TEST_FILE,COMMA); end if; end loop; PUT_LINE(TEST_FILE,RIGHT_PAREN & PAREN_SEMI); NEW_LINE(TEST_FILE); end CREATE_IEEE488_BUS_POLLING_LIST_CALL; procedure CREATE_IEEE488_TERMINAL_POLLING_RATE_CALL is POLLT : DURATION; begin CLEAR_SCREEN; PUT_STRING(4,1," ******** IEEE488 Terminal Polling Rate Call *******"); NEW_LINE(2); GET(" Enter service request polling interval [S]: ",POLLT); PUT(DURATION_TEXT,POLLT); NEW_LINE(TEST_FILE); PUT_LINE(TEST_FILE,CALL_TERM_POLL & DURATION_TEXT & PAREN_SEMI); end CREATE_IEEE488_TERMINAL_POLLING_RATE_CALL; procedure CREATE_1553B_BUS_POLLING_LIST_CALL is USERID : ID_TYPE; CONT : Y_N; POLLT : DURATION; SAD : SUB_ADDRESS; WCNT : NEW_DATA_WORD_COUNT_TYPE; NUM_ENTRIES : INTEGER; begin CLEAR_SCREEN; NEW_LINE(TEST_FILE); PUT_STRING(4,1," ******** 1553B Polling List Call *******"); PUT_LINE(TEST_FILE,DECLARE_BLOCK); PUT_LINE(TEST_FILE,POLL_LIST_DEC); PUT(TEST_FILE,NEW_POLL_LIST); NEW_LINE(2); GET(" Enter polling cycle interval time: ",POLLT); NEW_LINE(1); GET(" How many entries in the polling list?: ",NUM_ENTRIES); if NUM_ENTRIES = 1 then PUT_LINE(TEST_FILE,ONE_ARROW & ONE_SPACE); else NEW_LINE(TEST_FILE); end if; for I in 1..NUM_ENTRIES loop NEW_LINE; GET(" Enter Remote Terminal address to be polled: ",USERID); PUT_LINE(TEST_FILE,RT_ADD & ID_TYPE'image(USERID) & ONE_SPACE & COMMA); PUT_LINE(TEST_FILE,TX_CMD); NEW_LINE; GET(" Do you want UATL 1553 protocol for polling this RT? (y/n): ", CONT); if CONT = Y then SAD := 30; WCNT := 0; else GET(" Enter subaddress to be polled (0-31): ",SAD); GET(" Enter word count to be polled (0-31): ",WCNT); end if; PUT_LINE(TEST_FILE,SUB_ADD & SUB_ADDRESS'image(SAD) & ONE_SPACE & COMMA); PUT (TEST_FILE,WD_CNT & NEW_DATA_WORD_COUNT_TYPE'image(WCNT) & ONE_SPACE & RIGHT_PAREN); NEW_LINE; if I < NUM_ENTRIES then PUT_LINE(TEST_FILE,COMMA); else PUT_LINE(TEST_FILE,PAREN_SEMI); exit; end if; end loop; PUT_LINE(TEST_FILE,DECLARE_BEGIN); PUT_LINE(TEST_FILE,CALL_POLL_LIST_1); PUT(DURATION_TEXT,POLLT); PUT_LINE(TEST_FILE,CALL_POLL_LIST_2 & DURATION_TEXT & ONE_SPACE & PAREN_SEMI); PUT_LINE(TEST_FILE,DECLARE_END); end CREATE_1553B_BUS_POLLING_LIST_CALL; end UATL_INTERFACE_BUILDER;