(* AS OF 03/12/82 *) (* This program ia a sample PASCAL MT+86 program. It makes your *) (* computed function as a pocket calculator. To use this program *) (* simply compile it, link it with TRANCEND.R86, FPREALS.R86 and *) (* PASLIB. The compiler control command is: *) (* MT+86 CALC *) (* The linker command is: *) (* LINKMT CALC,TRANCEND,FPREALS,PASLIB/S *) (* To execute enter: *) (* CALC *) PROGRAM CALCULATE; CONST RCONST = -2.5; RCONST1= 65535.5; VAR R1,R2,TEMP:REAL; X : ARRAY [1..2] OF REAL; CH1,OP:CHAR; FUNCTION SUBREAL(R1,R2:REAL) : REAL; BEGIN SUBREAL := R1 - R2 END; PROCEDURE ADDREAL(VAR R1:REAL; R2:REAL); BEGIN R1 := R1 + R2 END; PROCEDURE TF(B:BOOLEAN); BEGIN IF B THEN WRITELN('TRUE') ELSE WRITELN('FALSE') END; PROCEDURE CALC; BEGIN CASE OP OF 'S': WRITELN(SIN(R1)); 'C': WRITELN(COS(R1)); 'A': WRITELN(ARCTAN(R1)); 'L': WRITELN(LN(R1)); 'E': WRITELN(EXP(R1)); '+': BEGIN ADDREAL(X[1],X[2]); WRITELN(X[1]:10:4) END; '-': WRITELN(SUBREAL(X[1],X[2]):10:2); '*': WRITELN(R1 * R2); '/': WRITELN(R1 / R2); 'M': WRITELN(-R1); '=': TF(R1 = R2); 'N': TF(R1 <> R2); '$': WRITELN(SQRT(R1):10:3,SQRT(R2):10:3); '<': TF(R1 < R2); '>': TF(R1 > R2); 'Z': TF(R1 <= R2); 'G': TF(R1 >=R2); '1': WRITELN(SQR(R1),' ',SQR(R2)); '2': WRITELN(R1 + 1); '3': WRITELN(1+R1); '4': WRITELN(TRUNC(R1)); '5': WRITELN(ROUND(R1)); '6': WRITELN(RCONST); '7': WRITELN(RCONST1); '8': BEGIN R1 := -2.234; X[1] := 3.456; WRITELN(R1,' ',X[1]); END; END; END; (* CALCULATOR *) PROCEDURE MENU; BEGIN WRITE('S:SIN '); WRITE('C:COS '); WRITE('A:ARCTAN '); WRITE('L:LN '); WRITE('E:EXP '); WRITE('1:SQR '); WRITELN('$:SQRT '); WRITELN('+, -, *, / ARITHMETIC OPERATORS'); WRITELN('M:NEGATE'); WRITE('= : EQUAL '); WRITELN('N : NOT EQUAL'); WRITE('<:LESS THAN '); WRITELN('>:GREATER THAN '); WRITELN('Z:LESS THAN OR EQUAL TO'); WRITELN('G:GREATER THAN OR EQUAL TO'); WRITE('4:TRUNC '); WRITELN('5:ROUND'); END; BEGIN (* MAIN PROGRAM *) REPEAT WRITE('ENTER FIRST OPERAND? '); READ(R1); X[1] := R1; WRITELN('R1=',R1); WRITELN; WRITE('ENTER SECOND OPERAND? '); READ(R2); X[2] := R2; WRITELN('R2=',R2); WRITELN; WRITELN('ENTER OPERATOR:'); MENU; WRITE('? '); READ(OP); WRITELN; CALC; WRITELN('Type to stop. Any other characer to repeat.'); READ(CH1); UNTIL CH1 = CHR(27) END.