with TEXT_IO; use TEXT_IO; with INTEGER_TEXT_IO; use INTEGER_TEXT_IO; with UATL_BUILDER_DATA; use UATL_BUILDER_DATA; with UATL_INTERACTIVE_IO; use UATL_INTERACTIVE_IO; with TEST_MANAGER_SCREEN_DISPLAY; use TEST_MANAGER_SCREEN_DISPLAY; with TEST_MANAGER_LOGICALS; use TEST_MANAGER_LOGICALS; package body UATL_BUILDER_CODE is type Y_N is (Y,N); procedure GET is new GET_ENUMERATED(Y_N); SPEC_FILE : FILE_TYPE; WITHING_LINE : STRING(1..80); END_WITHING_LINE : NATURAL; PACKAGE_LINE : STRING(1..80); END_PACKAGE_LINE : NATURAL; PROCEDURE_LINE : STRING(1..80); END_PROCEDURE_LINE : NATURAL; TASK_LINE : STRING(1..80); END_TASK_LINE : NATURAL; CONTINUE_LOOP : Y_N; DISC_COUNT : NATURAL; CHOICE : NATURAL; GOOD_CHOICE : BOOLEAN; END_BUILDER : BOOLEAN; MENU_BMCP : LIST(1..3) := (new STRING'("Build Modifier"), new STRING'("Build Comparator"), new STRING'("Exit")); procedure GET is new GET_INTEGER(NATURAL); procedure BUILD_MODIFIER_COMPARATOR_PACKAGE is begin -- Put up builder tool header. CLEAR_SCREEN; PUT_STRING(4,1, " ******* UATL Modifier/Comparator Package Builder ******"); -- Get name of package NEW_LINE(2); PUT(" Enter Modifier/Comparator package name: "); GET_LINE(PACKAGE_LINE,END_PACKAGE_LINE); -- Get file for spec and write header CREATE ( FILE => SPEC_FILE, MODE => OUT_FILE, NAME => COMP_MOD.LOGICAL_STRING.ALL & ":" & PACKAGE_LINE(1..END_PACKAGE_LINE) & "." & COMP_MOD_MACRO); PUT_LINE(SPEC_FILE,WITH_UNCH); PUT_LINE(SPEC_FILE,WITH_SYS); PUT_LINE(SPEC_FILE,WITH_U_TYPE); PUT_LINE(SPEC_FILE,WITH_SR_TYPE); PUT_LINE(SPEC_FILE,WITH_CON); -- Get with statements loop NEW_LINE(4); PUT_LINE(" *** Specify packages to be with'ed ***"); NEW_LINE(SPEC_FILE); loop NEW_LINE; PUT(" Enter name of package to be with'ed: "); GET_LINE(WITHING_LINE,END_WITHING_LINE); PUT(SPEC_FILE,WITH_CLAUSE & WITHING_LINE(1..END_WITHING_LINE) & SEMICOLON); PUT_LINE(SPEC_FILE,USE_CLAUSE & WITHING_LINE(1..END_WITHING_LINE) & SEMICOLON); NEW_LINE; GET(" Want to with another? (y/n): ",CONTINUE_LOOP); exit when CONTINUE_LOOP /= Y; end loop; NEW_LINE(SPEC_FILE); PUT_LINE(SPEC_FILE,PACKAGE_WORD & PACKAGE_LINE(1..END_PACKAGE_LINE) & IS_WORD); NEW_LINE(SPEC_FILE,2); END_BUILDER := FALSE; loop GOOD_CHOICE := FALSE; loop CHOICE := DISPLAY_MENU_AND_GET_SELECTION( "MODIFIER/COMPARATOR BUILDER",MENU_BMCP); case CHOICE is when 1 => CLEAR_SCREEN; PUT_STRING(4,1," *** Specify modifier task ***"); NEW_LINE; PUT(" Enter the modifier task name: "); GET_LINE(TASK_LINE,END_TASK_LINE); PUT_LINE(SPEC_FILE,MOD_TASK_INTRO); PUT_LINE(SPEC_FILE,AT_MOD_NAME & TASK_LINE(1..END_TASK_LINE)); PUT(" Enter the modifier procedure to be called: "); GET_LINE(PROCEDURE_LINE,END_PROCEDURE_LINE); GOOD_CHOICE := TRUE; when 2 => CLEAR_SCREEN; PUT_STRING(4,1," *** Specify comparator task ***"); NEW_LINE; PUT(" Enter the comparator task name: "); GET_LINE(TASK_LINE,END_TASK_LINE); PUT_LINE(SPEC_FILE,COMP_TASK_INTRO); PUT_LINE(SPEC_FILE,AT_COMP_NAME & TASK_LINE(1..END_TASK_LINE)); PUT(" Enter the comparator procedure to be called: "); GET_LINE(PROCEDURE_LINE,END_PROCEDURE_LINE); GOOD_CHOICE := TRUE; when 3 => GOOD_CHOICE := TRUE; END_BUILDER := TRUE; when others => null; end case; exit when GOOD_CHOICE; end loop; exit when END_BUILDER; PUT_LINE(SPEC_FILE,AT_PROCEDURE & PROCEDURE_LINE(1..END_PROCEDURE_LINE)); PUT(" Message type passed to the called procedure: "); GET_LINE(PROCEDURE_LINE,END_PROCEDURE_LINE); PUT_LINE(SPEC_FILE,AT_MESSAGE & PROCEDURE_LINE(1..END_PROCEDURE_LINE)); GET(" Number of discriminants for the message type: ",DISC_COUNT); if DISC_COUNT > 3 then DISC_COUNT := 3; end if; for I in 1..DISC_COUNT loop PUT(" Enter discriminant type: "); GET_LINE(PROCEDURE_LINE,END_PROCEDURE_LINE); PUT(SPEC_FILE,AT_DISCRIMINANT & PROCEDURE_LINE(1..END_PROCEDURE_LINE)); PUT(" Enter discriminant value for largest message: "); GET_LINE(PROCEDURE_LINE,END_PROCEDURE_LINE); PUT_LINE(SPEC_FILE,ONE_SPACE & COMMA & PROCEDURE_LINE(1..END_PROCEDURE_LINE)); end loop; PUT_LINE(SPEC_FILE,LONG_SEPARATOR); NEW_LINE(SPEC_FILE,2); end loop; -- Close spec file PUT_LINE(SPEC_FILE,END_PACKAGE & PACKAGE_LINE(1..END_PACKAGE_LINE) & SEMICOLON); CLOSE(SPEC_FILE); end BUILD_MODIFIER_COMPARATOR_PACKAGE; end UATL_BUILDER_CODE;