LEX 'TESTLEX2' * TWO FUNCTIONS FOR COMPARISONS ID #EC * <,=,<=,>,<>,>=. MSG 0 * J.ELHAY 10/6/87. POLL 0 ENTRY Step CHAR #F ENTRY Test CHAR #F KEY 'STEP' * SYNTAX: STEP(X,C,n)=X IF TRUE,=0 OTHERWISE TOKEN 20 * X IS COMPARED WITH C. n=1,2,3,4,5,6. KEY 'TEST' * SYNTAX: TEST(X,C,n)=1 IF TRUE,=0 OTHERWISE TOKEN 21 * n=1,2,3,4,5,6 FOR <,=,<=,>,<>,>= FOR BOTH ENDTXT * THE FUNCTIONS. ARGERR EQU #0BF19 * INVALID ARGUMENT ERROR EXIT RNDAHX EQU #136CB * POP A REAL,CONVERT TO HEX INTEGER IN A(A) POP1R EQU #0E8FD * POP A REAL, CANNOT COMPARE COMPLEX NUMBERS TST12A EQU #0D476 * COMPARE TWO REALS IN A(W) AND C(W) FNRTN4 EQU #0F238 * FUNCTION EXIT, RETURN TO MAIN LOOP Argerr GOVLNG ARGERR NIBHEX 88833 * 3 OBLIGATORY NUMERIC PARAMETERS FOR 'STEP' Step ST=0 0 * CLEAR ST0 PRIOR TO COMMON CODE GOTO start * SKIP TO COMMON CODE NIBHEX 88833 * 'TEST' ALSO HAS 3 AND ONLY 3 PARAMETERS Test ST=1 0 * SET ST0 FOR 'TEST' start CD1EX * SAVE D1 D1=C * (WITHOUT CHANGING IT) R3=C * IN R3 GOSBVL RNDAHX * POP n AS A HEX INTEGER GONC Argerr * BUT n MUST NOT BE NEGATIVE LCHEX #06 * LOAD A 6 INTO C(B) AS UPPER LIMIT ON n ?A>C B * IS n>6? GOYES Argerr * YES, SO ERROR R0=A * NO, IT'S OK - SAVE n IN R0 D1=D1+ 16 * SHIFT D1 TO COLLECT C, AGAINST WHICH X WILL GOSBVL POP1R * BE COMPARED. NOW GET C. R1=A * SAVE IT IN R1 D1=D1+ 16 * MOVE ON TO PICK UP X GOSBVL POP1R * DO SO NOW R2=A * SAVE IT IN R2 (TST12A TRASHES A LOT OF STUFF) C=R0 * RECALL n INTO C(B) P=C 0 * SET POINTER P TO n. THIS IS THE PREDICATE C=R1 * PUT C BACK INTO C(W) GOSBVL TST12A * TEST! THE PRED. DETERMINES WHICH TEST IS DONE C=0 W * CLEAR C(W) FOR EXIT GONC OUT * CARRY CLEAR=TEST FAILED, EXIT WITH RESULT=0 ?ST=0 0 * WAS THE FUNCTIN STEP? GOYES stpout * BRANCH FOR EXIT WITH C(W)=X P= 14 * SET P TO LOAD MSD OF REGISTER C LCHEX #1 * LOAD A 1 P= 0 * RESTORE POINTER P GOTO OUT * SKIP THE NEXT LINE WHICH PUTS X INTO C(W) stpout C=R2 * PUT X (SAVED IN R2) INTO C(W) OUT A=R3 * PREPARE TO FINISH - COLLECT D1 FROM R3 D1=A * RESTORE D1 GOSBVL FNRTN4 * OUTPUT RESULT END