home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-05-03 | 79.9 KB | 2,271 lines |
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --sample.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TEXT_IO; use TEXT_IO;
-
- procedure PRINT_SOME_TARGET_SHORT_FLOAT_RESULTS is
- --
- -- This procedure prompts the user for several operands and
- -- then prints the results of selected TARGET_SHORT_FLOAT operations.
- --
- B_RESULT : BOOLEAN;
- LAST : POSITIVE;
- NO_DATA : EXCEPTION;
- POWER : INTEGER;
- RESULTS_STRING : STRING (1..TARGET_SHORT_FLOAT_DIGITS+7);
- SF1, SF2 : TARGET_SHORT_FLOAT;
- SFRESULT, SFRESULT1 : TARGET_SHORT_FLOAT;
-
- procedure GET_TARGET_SHORT_FLOAT_OPERANDS is
- --
- -- Get two TARGET_SHORT_FLOAT operands plus an Integer number for
- -- use as a power in a exponentiation operation
- --
- CNT, CNT1 : NATURAL;
- DONE : BOOLEAN := FALSE;
- EXIT_MENU : exception;
- OP_STRING : STRING (1..80);
- begin
- loop
- begin
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("TARGET_SHORT_FLOAT OPERATIONS");
- PUT_LINE("OPERAND INPUT");
- NEW_LINE;
- TEXT_IO.PUT("OP1 ? ");
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET (OP_STRING(1..CNT),SF1,LAST);
-
- NEW_LINE;
- TEXT_IO.PUT("POWER ? ");
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- INTEGER_IO.GET (OP_STRING(1..CNT),POWER,CNT1);
- -- no INTEGER'value function implemented
-
- NEW_LINE;
- TEXT_IO.PUT("OP2 ? ");
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET (OP_STRING(1..CNT),SF2,LAST);
-
- DONE := TRUE;
-
- exception
- when EXIT_MENU =>
- raise NO_DATA;
-
- when others =>
- PUT_LINE("*** ILLEGAL DATA ***");
- NEW_LINE;
- TEXT_IO.PUT("return to continue ...");
-
- end;
-
- if DONE then
- exit;
- end if;
- end loop;
-
- end GET_TARGET_SHORT_FLOAT_OPERANDS;
-
-
- begin
-
- -- get the operands
- GET_TARGET_SHORT_FLOAT_OPERANDS;
-
- -- print the results of TARGET_SHORT_FLOAT "+"
- TEXT_IO.PUT("OP1 + OP2 = ");
- SFRESULT := SF1 + SF2;
- PUT(RESULTS_STRING,SFRESULT);
- PUT_LINE(RESULTS_STRING);
-
- -- print the results of TARGET_SHORT_FLOAT "-"
- TEXT_IO.PUT("OP1 - OP2 = ");
- SFRESULT := SF1 - SF2;
- PUT(RESULTS_STRING,SFRESULT);
- PUT_LINE(RESULTS_STRING);
-
- -- print the results of TARGET_SHORT_FLOAT "*"
- TEXT_IO.PUT("OP1 * OP2 = ");
- SFRESULT := SF1 * SF2;
- PUT(RESULTS_STRING,SFRESULT);
- PUT_LINE(RESULTS_STRING);
-
- -- print the results of TARGET_SHORT_FLOAT "/"
- TEXT_IO.PUT("OP1 / OP2 = ");
- SFRESULT := SF1 / SF2;
- PUT(RESULTS_STRING,SFRESULT);
- PUT_LINE(RESULTS_STRING);
-
- -- print the results of TARGET_SHORT_FLOAT ">"
- TEXT_IO.PUT("OP1 > OP2 = ");
- B_RESULT := SF1 > SF2;
- TEXT_IO.PUT(BOOLEAN'image(B_RESULT));
- NEW_LINE;
-
- -- print the results of TARGET_SHORT_FLOAT "**"
- TEXT_IO.PUT("OP1 ** POWER = ");
- SFRESULT1 := SF1 ** POWER;
- PUT(RESULTS_STRING,SFRESULT1);
- PUT_LINE(RESULTS_STRING);
-
- end PRINT_SOME_TARGET_SHORT_FLOAT_RESULTS;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --testall.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TESTTI; use TESTTI;
- with TESTTSF; use TESTTSF;
- with TESTTLF; use TESTTLF;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- procedure TESTALL is
-
- procedure GET_OPERATION_TYPE is
- begin
- loop
- NEW_SCREEN;
- TEXT_IO.PUT_LINE("MACHINE ARITHMETIC EMULATION");
- TEXT_IO.PUT_LINE("OPERATION SELECTION MENU");
- TEXT_IO.NEW_LINE;
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("A => ADD/SUBTRACT OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("B => MULTIPLY/DIVIDE OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("C => COMPARISION OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("D => MODULO/REMAINDER OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("E => ALL OF ABOVE OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("F => EXPONENTIATION OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("X => EXIT TO MAIN MENU");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT("SELECTION ? ");
- TEXT_IO.GET(OPERATION_TYPE);
-
- case OPERATION_TYPE is
- when 'a'|'b'|'c'|'e'|'f' =>
- exit;
- when 'A'|'B'|'C'|'E'|'F' =>
- exit;
-
- when 'd' | 'D' =>
- if (OPERAND_TYPE = 'a') or (OPERAND_TYPE = 'A') then
- exit;
- else
- TEXT_IO.PUT_LINE("*** MODULO/REMAINDER OPERATIONS ARE " &
- "INVALID FOR REALS ***");
-
- TEXT_IO.PUT("return to continue ...");
- TEXT_IO.GET_LINE(DUMMY,CNT);
- end if;
-
- when 'x' | 'X' =>
- raise NO_DATA;
- exit;
-
- when others =>
- TEXT_IO.PUT_LINE("*** ILLEGAL DATA ***");
-
- TEXT_IO.PUT("return to continue ...");
- TEXT_IO.GET_LINE(DUMMY,CNT);
-
- end case;
-
- end loop;
-
- end GET_OPERATION_TYPE;
-
- begin
-
- CREATE(LOG_FILE,OUT_FILE,"LOGFILE.MAE");
- INT_GET_AND_PUT_FLAG := TRUE;
- SHORT_AFT := TARGET_SHORT_FLOAT_DIGITS-1;
- SHORT_EXP := 3;
- LONG_AFT := TARGET_LONG_FLOAT_DIGITS-1;
- LONG_EXP := 3;
-
- loop
- begin
- NEW_SCREEN;
- TEXT_IO.PUT_LINE("MACHINE ARITHMETIC EMULATION");
- TEXT_IO.PUT_LINE("MAIN MENU");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("A => INTEGER OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("B => SHORT FLOAT OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("C => LONG FLOAT OPERATIONS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("Q => SET INTEGER_IO TO GET AND PUT");
- TEXT_IO.PUT_LINE("R => SET INTEGER_IO TO VALUE AND IMAGE");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("S => RESET PUT PARAMETERS TO DEFAULT");
- TEXT_IO.PUT_LINE("T => SET PUT PARAMETERS");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("U => TURN ON SYSTEM RESULT TRACE");
- TEXT_IO.PUT_LINE("V => SHUT OFF SYSTEM RESULT TRACE");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT_LINE("X => QUIT");
- TEXT_IO.NEW_LINE;
- TEXT_IO.PUT("SELECTION ? ");
- TEXT_IO.GET(OPERAND_TYPE);
-
- case OPERAND_TYPE is
-
- when 'a' | 'A' =>
- loop
- begin
- DONE := FALSE;
- GET_OPERATION_TYPE;
- GET_INTEGER_OPERANDS;
- PUT_INTEGER_RESULTS;
-
- exception
- when NO_DATA =>
- DONE := TRUE;
- end;
- if DONE then
- exit;
- end if;
- end loop;
-
- when 'b' | 'B' =>
- loop
- begin
- DONE := FALSE;
- GET_OPERATION_TYPE;
- GET_SHORT_FLOAT_OPERANDS;
- PUT_SHORT_FLOAT_RESULTS;
-
- exception
- when NO_DATA =>
- DONE := TRUE;
- end;
- if DONE then
- exit;
- end if;
- end loop;
-
- when 'c' | 'C' =>
- loop
- begin
- DONE := FALSE;
- GET_OPERATION_TYPE;
- GET_LONG_FLOAT_OPERANDS;
- PUT_LONG_FLOAT_RESULTS;
-
- exception
- when NO_DATA =>
- DONE := TRUE;
- end;
- if DONE then
- exit;
- end if;
- end loop;
-
- when 'q' | 'Q' =>
- INT_GET_AND_PUT_FLAG := TRUE;
-
- when 'r' | 'R' =>
- INT_GET_AND_PUT_FLAG := FALSE;
-
- when 's' | 'S' =>
- SHORT_AFT := TARGET_SHORT_FLOAT_DIGITS-1;
- SHORT_EXP := 3;
- LONG_AFT := TARGET_LONG_FLOAT_DIGITS-1;
- LONG_EXP := 3;
-
- when 't' | 'T' =>
- NEW_SCREEN;
- TEXT_IO.PUT("SHORT FLOAT AFT ? ");
- GET(SHORT_AFT);
- GET_LINE(DUMMY, CNT);
- TEXT_IO.PUT("SHORT FLOAT EXP ? ");
- GET(SHORT_EXP);
- GET_LINE(DUMMY, CNT);
- TEXT_IO.PUT("LONG FLOAT AFT ? ");
- GET(LONG_AFT);
- GET_LINE(DUMMY, CNT);
- TEXT_IO.PUT("LONG FLOAT EXP ? ");
- GET(LONG_EXP);
- GET_LINE(DUMMY, CNT);
-
- when 'u' | 'U' =>
- INTEGER_COMPARE := TRUE;
- FLOAT_COMPARE := TRUE;
-
- when 'v' | 'V' =>
- INTEGER_COMPARE := FALSE;
- FLOAT_COMPARE := FALSE;
-
- when 'x' | 'X' =>
- raise END_OF_PROGRAM;
-
- when others =>
- TEXT_IO.PUT_LINE("*** ILLEGAL DATA ***");
-
- TEXT_IO.PUT("return to continue ...");
- TEXT_IO.GET_LINE(DUMMY,CNT);
-
- null;
-
- end case;
-
- end;
- end loop;
-
- exception
- when others =>
- CLOSE(LOG_FILE);
-
- end TESTALL;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --testatb.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION;
- use MACHINE_ARITHMETIC_EMULATION;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
-
- procedure TESTATB is
-
- OP_STRING : STRING (1 .. 24);
- DUMMY : STRING (1 .. 3);
- COUNT, COUNT1, COUNT2 : NATURAL;
-
-
- procedure PUT(ITEM : BOOLEAN) is
- begin
- if ITEM then
- TEXT_IO.PUT("TRUE");
- else
- TEXT_IO.PUT("FALSE");
- end if;
- end PUT;
-
- procedure PUT(FILE_NAME : FILE_TYPE; ITEM : BOOLEAN) is
- begin
- if ITEM then
- PUT(FILE_NAME,"TRUE");
- else
- PUT(FILE_NAME,"FALSE");
- end if;
- end PUT;
-
-
- begin
-
-
- PUT_LINE("INTEGER ATTRIBUTES ");
- NEW_LINE;
- TEXT_IO.PUT("LAST : ");
- PUT(OP_STRING,TARGET_INTEGER_LAST);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("FIRST : ");
- PUT(OP_STRING,TARGET_INTEGER_FIRST);
- PUT(OP_STRING);
- NEW_LINE;
- NEW_LINE;
- TEXT_IO.PUT(" return to continue ... ");
- GET_LINE(DUMMY, COUNT);
- NEW_LINE;
- NEW_LINE;
- NEW_LINE;
- PUT_LINE("SHORT FLOAT ATTRIBUTES ");
- NEW_LINE;
- TEXT_IO.PUT("EPSILON : ");
- PUT(OP_STRING,TARGET_SHORT_FLOAT_EPSILON);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("LARGE : ");
- PUT(OP_STRING,TARGET_SHORT_FLOAT_LARGE);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("SMALL : ");
- PUT(OP_STRING,TARGET_SHORT_FLOAT_SMALL);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("LAST : ");
- PUT(OP_STRING,TARGET_SHORT_FLOAT_LAST);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("FIRST : ");
- PUT(OP_STRING,TARGET_SHORT_FLOAT_FIRST);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("DIGITS : ");
- PUT(TARGET_SHORT_FLOAT_DIGITS);
- NEW_LINE;
- TEXT_IO.PUT("EMAX : ");
- PUT(TARGET_SHORT_FLOAT_EMAX);
- NEW_LINE;
- TEXT_IO.PUT("M_EMAX : ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_EMAX);
- NEW_LINE;
- TEXT_IO.PUT("M_EMIN : ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_EMIN);
- NEW_LINE;
- TEXT_IO.PUT("MANTISSA: ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_MANTISSA);
- NEW_LINE;
- TEXT_IO.PUT("OVERFLOW: ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_OVERFLOWS);
- NEW_LINE;
- TEXT_IO.PUT("RADIX : ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_RADIX);
- NEW_LINE;
- TEXT_IO.PUT("ROUNDS : ");
- PUT(TARGET_SHORT_FLOAT_MACHINE_ROUNDS);
- NEW_LINE;
- TEXT_IO.PUT("SAF EMAX: ");
- PUT(TARGET_SHORT_FLOAT_SAFE_EMAX);
- NEW_LINE;
- NEW_LINE;
- TEXT_IO.PUT(" return to continue ... ");
- GET_LINE(DUMMY, COUNT);
- NEW_LINE;
- NEW_LINE;
- NEW_LINE;
- PUT_LINE("LONG FLOAT ATTRIBUTES ");
- NEW_LINE;
- TEXT_IO.PUT("EPSILON : ");
- PUT(OP_STRING,TARGET_LONG_FLOAT_EPSILON);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("LARGE : ");
- PUT(OP_STRING,TARGET_LONG_FLOAT_LARGE);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("SMALL : ");
- PUT(OP_STRING,TARGET_LONG_FLOAT_SMALL);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("LAST : ");
- PUT(OP_STRING,TARGET_LONG_FLOAT_LAST);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("FIRST : ");
- PUT(OP_STRING,TARGET_LONG_FLOAT_FIRST);
- PUT(OP_STRING);
- NEW_LINE;
- TEXT_IO.PUT("DIGITS : ");
- PUT(TARGET_LONG_FLOAT_DIGITS);
- NEW_LINE;
- TEXT_IO.PUT("EMAX : ");
- PUT(TARGET_LONG_FLOAT_EMAX);
- NEW_LINE;
- TEXT_IO.PUT("M_EMAX : ");
- PUT(TARGET_LONG_FLOAT_MACHINE_EMAX);
- NEW_LINE;
- TEXT_IO.PUT("M_EMIN : ");
- PUT(TARGET_LONG_FLOAT_MACHINE_EMIN);
- NEW_LINE;
- TEXT_IO.PUT("MANTISSA: ");
- PUT(TARGET_LONG_FLOAT_MACHINE_MANTISSA);
- NEW_LINE;
- TEXT_IO.PUT("OVERFLOW: ");
- PUT(TARGET_LONG_FLOAT_MACHINE_OVERFLOWS);
- NEW_LINE;
- TEXT_IO.PUT("RADIX : ");
- PUT(TARGET_LONG_FLOAT_MACHINE_RADIX);
- NEW_LINE;
- TEXT_IO.PUT("ROUNDS : ");
- PUT(TARGET_LONG_FLOAT_MACHINE_ROUNDS);
- NEW_LINE;
- TEXT_IO.PUT("SAF EMAX: ");
- PUT(TARGET_LONG_FLOAT_SAFE_EMAX);
- NEW_LINE;
- NEW_LINE;
-
- end TESTATB;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --testti.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package TESTTI is
-
- OP1, OP2 : TARGET_INTEGER;
- RESULT, RESULT1, RESULT2 : TARGET_INTEGER;
- B_RESULT : BOOLEAN;
- SF1, SF2 : TARGET_SHORT_FLOAT;
- SFRESULT, SFRESULT1, SFRESULT2 : TARGET_SHORT_FLOAT;
- LF1, LF2 : TARGET_LONG_FLOAT;
- LFRESULT, LFRESULT1, LFRESULT2 : TARGET_LONG_FLOAT;
- INT1, INT2 : INTEGER;
- INTRESULT, INTRESULT1, INTRESULT2 : INTEGER;
- INTB_RESULT : BOOLEAN;
- FP1, FP2 : FLOAT;
- FPRESULT, FPRESULT1, FPRESULT2 : FLOAT;
- FPB_RESULT : BOOLEAN;
- S_CHAR : CHARACTER;
- OP_STRING : STRING (1 .. 12);
- EMPTY_STRING : STRING (1 .. 24) := " ";
- DUMMY : STRING (1 .. 3);
- POWER : INTEGER;
- CNT, CNT1 : NATURAL;
- INTEGER_COMPARE, FLOAT_COMPARE, DONE : BOOLEAN := FALSE;
- OPERATION_TYPE, OPERAND_TYPE : CHARACTER;
- END_OF_PROGRAM, EXIT_MENU, NO_DATA : EXCEPTION;
- SHORT_AFT, SHORT_EXP, LONG_AFT, LONG_EXP : INTEGER;
- INT_GET_AND_PUT_FLAG : BOOLEAN := TRUE;
-
- LOG_FILE : FILE_TYPE;
-
- procedure PUT(ITEM : BOOLEAN);
-
- procedure PUT(FILE_NAME : FILE_TYPE; ITEM : BOOLEAN);
-
- procedure NEW_SCREEN;
-
- procedure GET_INTEGER_OPERANDS;
-
- procedure PUT_INTEGER_RESULTS;
-
- end TESTTI;
-
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package body TESTTI is
-
- procedure PUT(ITEM : BOOLEAN) is
- begin
- if ITEM then
- TEXT_IO.PUT("TRUE");
- else
- TEXT_IO.PUT("FALSE");
- end if;
- end PUT;
-
- procedure PUT(FILE_NAME : FILE_TYPE; ITEM : BOOLEAN) is
- begin
- if ITEM then
- PUT(FILE_NAME,"TRUE");
- else
- PUT(FILE_NAME,"FALSE");
- end if;
- end PUT;
-
- procedure NEW_SCREEN is
- begin
- for I in 1 .. 24 loop
- NEW_LINE;
- end loop;
- end NEW_SCREEN;
-
- procedure GET_INTEGER_OPERANDS is
- DONE : BOOLEAN := FALSE;
- begin
- loop
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("INTEGER OPERATIONS");
- PUT_LINE("OPERAND INPUT");
- NEW_LINE;
- NEW_LINE;
- TEXT_IO.PUT("OP1 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- if INT_GET_AND_PUT_FLAG then
- GET(OP_STRING(1..CNT), OP1, CNT1);
- else
- OP1 := TARGET_INTEGER_VALUE(OP_STRING(1..CNT));
- end if;
-
- if INTEGER_COMPARE then
- GET(OP_STRING(1..CNT),INT1,CNT1);
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- NEW_LINE;
- TEXT_IO.PUT("POWER ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT),POWER,CNT1);
- else
- NEW_LINE;
- TEXT_IO.PUT("OP2 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- if INT_GET_AND_PUT_FLAG then
- GET(OP_STRING(1..CNT), OP2, CNT1);
- else
- OP2 := TARGET_INTEGER_VALUE(OP_STRING(1..CNT));
- end if;
-
- if INTEGER_COMPARE then
- GET(OP_STRING(1..CNT),INT2,CNT1);
- end if;
- end if;
-
- DONE := TRUE;
-
- exception
- when EXIT_MENU =>
- raise NO_DATA;
-
- when others =>
- PUT_LINE("*** ILLEGAL DATA ***");
- NEW_LINE;
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- end;
-
- if DONE then
- exit;
- end if;
- end loop;
-
- end GET_INTEGER_OPERANDS;
-
-
- procedure PUT_INTEGER_RESULTS is
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("INTEGER OPERATIONS RESULTS");
- PUT_LINE(LOG_FILE,"INTEGER OPERATIONS RESULTS");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 = ");
- PUT(LOG_FILE,"OP1 = ");
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, OP1);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(OP1));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(OP1));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP1 = ");
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INT1);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INT1));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INT1));
- end if;
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- TEXT_IO.PUT("POWER = ");
- PUT(LOG_FILE,"POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM POWER = ");
- PUT(LOG_FILE,"SYSTEM POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- else
- TEXT_IO.PUT("OP2 = ");
- PUT(LOG_FILE,"OP2 = ");
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, OP2);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(OP2));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(OP2));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP2 = ");
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INT2);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INT2));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INT2));
- end if;
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- case OPERATION_TYPE is
- when 'A' | 'a' =>
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- RESULT := OP1 + OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- INTRESULT := INT1 + INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- RESULT := OP1 - OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- INTRESULT := INT1 - INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP2 - OP1 = ");
- PUT(LOG_FILE,"OP2 - OP1 = ");
- RESULT := OP2 - OP1;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 - OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP2 - OP1 = ");
- INTRESULT := INT2 - INT1;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'B' | 'b' =>
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- RESULT := OP1 * OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- INTRESULT := INT1 * INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- RESULT := OP1 / OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- INTRESULT := INT1 / INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- RESULT := RESULT * OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- INTRESULT := INTRESULT * INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'C' | 'c' =>
- TEXT_IO.PUT("OP1 > OP2 = ");
- PUT(LOG_FILE,"OP1 > OP2 = ");
- B_RESULT := OP1 > OP2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 > OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 > OP2 = ");
- INTB_RESULT := INT1 > INT2;
- PUT(INTB_RESULT);
- PUT(LOG_FILE,INTB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := OP1 >= OP2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- INTB_RESULT := INT1 >= INT2;
- PUT(INTB_RESULT);
- PUT(LOG_FILE,INTB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 < OP2 = ");
- PUT(LOG_FILE,"OP1 < OP2 = ");
- B_RESULT := OP1 < OP2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 < OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 < OP2 = ");
- INTB_RESULT := INT1 < INT2;
- PUT(INTB_RESULT);
- PUT(LOG_FILE,INTB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 <= OP2 = ");
- PUT(LOG_FILE,"OP1 <= OP2 = ");
- B_RESULT := OP1 <= OP2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 <= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 <= OP2 = ");
- INTB_RESULT := INT1 <= INT2;
- PUT(INTB_RESULT);
- PUT(LOG_FILE,INTB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'D' | 'd' =>
- TEXT_IO.PUT("OP1 rem OP2 = ");
- PUT(LOG_FILE,"OP1 rem OP2 = ");
- RESULT := OP1 rem OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 rem OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 rem OP2 = ");
- INTRESULT := INT1 rem INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 mod OP2 = ");
- PUT(LOG_FILE,"OP1 mod OP2 = ");
- RESULT := OP1 mod OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- INTRESULT := INT1 mod INT2;
- TEXT_IO.PUT("SYSTEM OP1 mod OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 mod OP2 = ");
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'E' | 'e' =>
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := OP1 >= OP2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- INTB_RESULT := INT1 >= INT2;
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- PUT(INTB_RESULT);
- PUT(LOG_FILE,INTB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- RESULT := OP1 + OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- INTRESULT := INT1 + INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- RESULT := OP1 - OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- INTRESULT := INT1 - INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- RESULT := OP1 * OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- INTRESULT := INT1 * INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- RESULT := OP1 / OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- INTRESULT := INT1 / INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- RESULT := RESULT * OP2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- INTRESULT := INTRESULT * INT2;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'F' | 'f' =>
- TEXT_IO.PUT("OP1 ** POWER = ");
- PUT(LOG_FILE,"OP1 ** POWER = ");
- RESULT1 := OP1 ** POWER;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, RESULT1);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(TARGET_INTEGER_IMAGE(RESULT1));
- PUT_LINE(LOG_FILE,TARGET_INTEGER_IMAGE(RESULT1));
- end if;
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 ** POWER = ");
- PUT(LOG_FILE,"SYSTEM OP1 ** POWER = ");
- INTRESULT1 := INT1 ** POWER;
- if INT_GET_AND_PUT_FLAG then
- PUT(OP_STRING, INTRESULT1);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE,OP_STRING);
- else
- PUT_LINE(INTEGER'IMAGE(INTRESULT1));
- PUT_LINE(LOG_FILE,INTEGER'IMAGE(INTRESULT1));
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when others =>
- null;
-
- end case;
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- exception
- when others =>
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- PUT_LINE("*** EXCEPTION CONDITION RAISED ***");
- PUT_LINE(LOG_FILE,"*** EXCEPTION CONDITION RAISED ***");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
-
-
- end PUT_INTEGER_RESULTS;
-
- end TESTTI;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --testtlf.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TESTTI; use TESTTI;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package TESTTLF is
-
- procedure GET_LONG_FLOAT_OPERANDS;
-
- procedure PUT_LONG_FLOAT_RESULTS;
-
- end TESTTLF;
-
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TESTTI; use TESTTI;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package body TESTTLF is
- OP_STRING : STRING (1 .. 24);
-
- procedure GET_LONG_FLOAT_OPERANDS is
- DONE : BOOLEAN := FALSE;
- begin
- loop
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("LONG_FLOAT OPERATIONS");
- PUT_LINE("OPERAND INPUT");
- NEW_LINE;
- NEW_LINE;
- TEXT_IO.PUT("OP1 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT), LF1, CNT1);
- if FLOAT_COMPARE then
- GET(OP_STRING(1..CNT),FP1,CNT1);
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- NEW_LINE;
- TEXT_IO.PUT("POWER ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT),POWER,CNT1);
- else
- NEW_LINE;
- TEXT_IO.PUT("OP2 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT), LF2, CNT1);
- if FLOAT_COMPARE then
- GET(OP_STRING(1..CNT),FP2,CNT1);
- end if;
- end if;
-
- DONE := TRUE;
-
- exception
- when EXIT_MENU =>
- raise NO_DATA;
-
- when others =>
- PUT_LINE("*** ILLEGAL DATA ***");
- NEW_LINE;
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- end;
-
- if DONE then
- exit;
- end if;
- end loop;
-
- end GET_LONG_FLOAT_OPERANDS;
-
-
- procedure PUT_LONG_FLOAT_RESULTS is
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("LONG_FLOAT OPERATIONS RESULTS");
- PUT_LINE(LOG_FILE,"LONG_FLOAT OPERATIONS RESULTS");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 = ");
- PUT(LOG_FILE,"OP1 = ");
- PUT(OP_STRING, LF1, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP1 = ");
- PUT(OP_STRING, FP1, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- TEXT_IO.PUT("POWER = ");
- PUT(LOG_FILE,"POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM POWER = ");
- PUT(LOG_FILE,"SYSTEM POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- else
- TEXT_IO.PUT("OP2 = ");
- PUT(LOG_FILE,"OP2 = ");
- PUT(OP_STRING, LF2, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP2 = ");
- PUT(OP_STRING, FP2, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- case OPERATION_TYPE is
- when 'A' | 'a' =>
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- LFRESULT := LF1 + LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- FPRESULT := FP1 + FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- LFRESULT := LF1 - LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- FPRESULT := FP1 - FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP2 - OP1 = ");
- PUT(LOG_FILE,"OP2 - OP1 = ");
- LFRESULT := LF2 - LF1;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 - OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP2 - OP1 = ");
- FPRESULT := FP2 - FP1;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'B' | 'b' =>
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- LFRESULT := LF1 * LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- FPRESULT := FP1 * FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- LFRESULT := LF1 / LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- FPRESULT := FP1 / FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- LFRESULT := LFRESULT * LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- FPRESULT := FPRESULT * FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'C' | 'c' =>
- TEXT_IO.PUT("OP1 > OP2 = ");
- PUT(LOG_FILE,"OP1 > OP2 = ");
- B_RESULT := LF1 > LF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 > OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 > OP2 = ");
- FPB_RESULT := FP1 > FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := LF1 >= LF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- FPB_RESULT := FP1 >= FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 < OP2 = ");
- PUT(LOG_FILE,"OP1 < OP2 = ");
- B_RESULT := LF1 < LF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 < OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 < OP2 = ");
- FPB_RESULT := FP1 < FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 <= OP2 = ");
- PUT(LOG_FILE,"OP1 <= OP2 = ");
- B_RESULT := LF1 <= LF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 <= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 <= OP2 = ");
- FPB_RESULT := FP1 <= FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'E' | 'e' =>
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := LF1 >= LF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- FPB_RESULT := FP1 >= FP2;
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- LFRESULT := LF1 + LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- FPRESULT := FP1 + FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- LFRESULT := LF1 - LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- FPRESULT := FP1 - FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- LFRESULT := LF1 * LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- FPRESULT := FP1 * FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- LFRESULT := LF1 / LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- FPRESULT := FP1 / FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- LFRESULT := LFRESULT * LF2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- FPRESULT := FPRESULT * FP2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'F' | 'f' =>
- TEXT_IO.PUT("OP1 ** POWER = ");
- PUT(LOG_FILE,"OP1 ** POWER = ");
- LFRESULT1 := LF1 ** POWER;
- PUT(OP_STRING, LFRESULT1, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 ** POWER = ");
- PUT(LOG_FILE,"SYSTEM OP1 ** POWER = ");
- FPRESULT1 := FP1 ** POWER;
- PUT(OP_STRING, FPRESULT1, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 ** -POWER = ");
- PUT(LOG_FILE,"OP1 ** -POWER = ");
- LFRESULT2 := LF1 ** (-POWER);
- PUT(OP_STRING, LFRESULT2, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 ** -POWER = ");
- PUT(LOG_FILE,"SYSTEM OP1 ** -POWER = ");
- FPRESULT2 := FP1 ** (-POWER);
- PUT(OP_STRING, FPRESULT2, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("RESULT1 * RESULT2 = ");
- PUT(LOG_FILE,"RESULT1 * RESULT2 = ");
- LFRESULT := LFRESULT1 * LFRESULT2;
- PUT(OP_STRING, LFRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM RESULT1 * RESULT2 = ");
- PUT(LOG_FILE,"SYSTEM RESULT1 * RESULT2 = ");
- FPRESULT := FPRESULT1 * FPRESULT2;
- PUT(OP_STRING, FPRESULT, LONG_AFT, LONG_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when others =>
- null;
-
- end case;
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- exception
- when others =>
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- PUT_LINE("*** EXCEPTION CONDITION RAISED ***");
- PUT_LINE(LOG_FILE,"*** EXCEPTION CONDITION RAISED ***");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
-
-
- end PUT_LONG_FLOAT_RESULTS;
-
- end TESTTLF;
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- --testtsf.txt
- --::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TESTTI; use TESTTI;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package TESTTSF is
-
- procedure GET_SHORT_FLOAT_OPERANDS;
-
- procedure PUT_SHORT_FLOAT_RESULTS;
-
- end TESTTSF;
-
- with MACHINE_ARITHMETIC_EMULATION; use MACHINE_ARITHMETIC_EMULATION;
- with TESTTI; use TESTTI;
- with TEXT_IO; use TEXT_IO;
- use INTEGER_IO;
- use FLOAT_IO;
-
- package body TESTTSF is
- OP_STRING : STRING (1 .. 14);
-
- procedure GET_SHORT_FLOAT_OPERANDS is
- DONE : BOOLEAN := FALSE;
- begin
- loop
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("SHORT_FLOAT OPERATIONS");
- PUT_LINE("OPERAND INPUT");
- NEW_LINE;
- NEW_LINE;
- TEXT_IO.PUT("OP1 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT), SF1, CNT1);
- if FLOAT_COMPARE then
- GET(OP_STRING(1..CNT),FP1,CNT1);
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- NEW_LINE;
- TEXT_IO.PUT("POWER ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT),POWER,CNT1);
- else
- NEW_LINE;
- TEXT_IO.PUT("OP2 ? ");
- OP_STRING := EMPTY_STRING(1 .. OP_STRING'length);
- GET_LINE(OP_STRING, CNT);
- if CNT = 0 then
- raise EXIT_MENU;
- end if;
-
- GET(OP_STRING(1..CNT), SF2, CNT1);
- if FLOAT_COMPARE then
- GET(OP_STRING(1..CNT),FP2,CNT1);
- end if;
- end if;
-
- DONE := TRUE;
-
- exception
- when EXIT_MENU =>
- raise NO_DATA;
-
- when others =>
- PUT_LINE("*** ILLEGAL DATA ***");
- NEW_LINE;
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- end;
-
- if DONE then
- exit;
- end if;
- end loop;
-
- end GET_SHORT_FLOAT_OPERANDS;
-
-
- procedure PUT_SHORT_FLOAT_RESULTS is
- begin
- NEW_SCREEN;
- PUT_LINE("MACHINE ARITHMETIC EMULATION");
- PUT_LINE("SHORT_FLOAT OPERATIONS RESULTS");
- PUT_LINE(LOG_FILE,"SHORT_FLOAT OPERATIONS RESULTS");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 = ");
- PUT(LOG_FILE,"OP1 = ");
- PUT(OP_STRING, SF1, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP1 = ");
- PUT(OP_STRING, FP1, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
-
- if (OPERATION_TYPE = 'f') or (OPERATION_TYPE = 'F') then
- TEXT_IO.PUT("POWER = ");
- PUT(LOG_FILE,"POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if INTEGER_COMPARE then
- TEXT_IO.PUT("SYSTEM POWER = ");
- PUT(LOG_FILE,"SYSTEM POWER = ");
- PUT(POWER);
- PUT(LOG_FILE,POWER);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- else
- TEXT_IO.PUT("OP2 = ");
- PUT(LOG_FILE,"OP2 = ");
- PUT(OP_STRING, SF2, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP2 = ");
- PUT(OP_STRING, FP2, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- case OPERATION_TYPE is
- when 'A' | 'a' =>
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- SFRESULT := SF1 + SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- FPRESULT := FP1 + FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- SFRESULT := SF1 - SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- FPRESULT := FP1 - FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP2 - OP1 = ");
- PUT(LOG_FILE,"OP2 - OP1 = ");
- SFRESULT := SF2 - SF1;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP2 - OP1 = ");
- PUT(LOG_FILE,"SYSTEM OP2 - OP1 = ");
- FPRESULT := FP2 - FP1;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'B' | 'b' =>
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- SFRESULT := SF1 * SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- FPRESULT := FP1 * FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- SFRESULT := SF1 / SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- FPRESULT := FP1 / FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- SFRESULT := SFRESULT * SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- FPRESULT := FPRESULT * FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'C' | 'c' =>
- TEXT_IO.PUT("OP1 > OP2 = ");
- PUT(LOG_FILE,"OP1 > OP2 = ");
- B_RESULT := SF1 > SF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 > OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 > OP2 = ");
- FPB_RESULT := FP1 > FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := SF1 >= SF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- FPB_RESULT := FP1 >= FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 < OP2 = ");
- PUT(LOG_FILE,"OP1 < OP2 = ");
- B_RESULT := SF1 < SF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 < OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 < OP2 = ");
- FPB_RESULT := FP1 < FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 <= OP2 = ");
- PUT(LOG_FILE,"OP1 <= OP2 = ");
- B_RESULT := SF1 <= SF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 <= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 <= OP2 = ");
- FPB_RESULT := FP1 <= FP2;
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'E' | 'e' =>
- TEXT_IO.PUT("OP1 >= OP2 = ");
- PUT(LOG_FILE,"OP1 >= OP2 = ");
- B_RESULT := SF1 >= SF2;
- PUT(B_RESULT);
- PUT(LOG_FILE,B_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- if FLOAT_COMPARE then
- FPB_RESULT := FP1 >= FP2;
- TEXT_IO.PUT("SYSTEM OP1 >= OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 >= OP2 = ");
- PUT(FPB_RESULT);
- PUT(LOG_FILE,FPB_RESULT);
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 + OP2 = ");
- PUT(LOG_FILE,"OP1 + OP2 = ");
- SFRESULT := SF1 + SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 + OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 + OP2 = ");
- FPRESULT := FP1 + FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 - OP2 = ");
- PUT(LOG_FILE,"OP1 - OP2 = ");
- SFRESULT := SF1 - SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 - OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 - OP2 = ");
- FPRESULT := FP1 - FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 * OP2 = ");
- PUT(LOG_FILE,"OP1 * OP2 = ");
- SFRESULT := SF1 * SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 * OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 * OP2 = ");
- FPRESULT := FP1 * FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 / OP2 = ");
- PUT(LOG_FILE,"OP1 / OP2 = ");
- SFRESULT := SF1 / SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 / OP2 = ");
- PUT(LOG_FILE,"SYSTEM OP1 / OP2 = ");
- FPRESULT := FP1 / FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("(OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"(OP1 / OP2) * OP2 = ");
- SFRESULT := SFRESULT * SF2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM (OP1 / OP2) * OP2 = ");
- PUT(LOG_FILE,"SYSTEM (OP1 / OP2) * OP2 = ");
- FPRESULT := FPRESULT * FP2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when 'F' | 'f' =>
- TEXT_IO.PUT("OP1 ** POWER = ");
- PUT(LOG_FILE,"OP1 ** POWER = ");
- SFRESULT1 := SF1 ** POWER;
- PUT(OP_STRING, SFRESULT1, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 ** POWER = ");
- PUT(LOG_FILE,"SYSTEM OP1 ** POWER = ");
- FPRESULT1 := FP1 ** POWER;
- PUT(OP_STRING, FPRESULT1, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("OP1 ** -POWER = ");
- PUT(LOG_FILE,"OP1 ** -POWER = ");
- SFRESULT2 := SF1 ** (-POWER);
- PUT(OP_STRING, SFRESULT2, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM OP1 ** -POWER = ");
- PUT(LOG_FILE,"SYSTEM OP1 ** -POWER = ");
- FPRESULT2 := FP1 ** (-POWER);
- PUT(OP_STRING, FPRESULT2, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("RESULT1 * RESULT2 = ");
- PUT(LOG_FILE,"RESULT1 * RESULT2 = ");
- SFRESULT := SFRESULT1 * SFRESULT2;
- PUT(OP_STRING, SFRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- if FLOAT_COMPARE then
- TEXT_IO.PUT("SYSTEM RESULT1 * RESULT2 = ");
- PUT(LOG_FILE,"SYSTEM RESULT1 * RESULT2 = ");
- FPRESULT := FPRESULT1 * FPRESULT2;
- PUT(OP_STRING, FPRESULT, SHORT_AFT, SHORT_EXP);
- PUT_LINE(OP_STRING);
- PUT_LINE(LOG_FILE, OP_STRING);
- end if;
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- when others =>
- null;
-
- end case;
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
- exception
- when others =>
- NEW_LINE;
- NEW_LINE(LOG_FILE);
- PUT_LINE("*** EXCEPTION CONDITION RAISED ***");
- PUT_LINE(LOG_FILE,"*** EXCEPTION CONDITION RAISED ***");
- NEW_LINE;
- NEW_LINE(LOG_FILE);
-
- TEXT_IO.PUT("return to continue ...");
- GET_LINE(DUMMY,CNT);
-
-
-
- end PUT_SHORT_FLOAT_RESULTS;
-
- end TESTTSF;
-
-