.TITLE .MINMX / / 10 APR 73 - (PDH) FIX ERROR NUMBER / / THIS SECTION CONTAINS ALL THE MAXIMUM AND MINIMUM FUNCTIONS / / INTERNAL GLOBALS .GLOBL AMAX1,AMIN1,MAX1,MIN1,DMAX1,DMIN1 .GLOBL AMAX0,AMIN0,MAX0,MIN0 / / EXTERNAL GLOBALS .GLOBL .FETCH,.PSHBA,.ILMDE,.FIX,.FLOTA,.ERROR .GLOBL .MODEA,.SIGNA,.EXPA,.SIGNB,.EXPB,.INT1,.INT2 / / / / REAL FUNCTION , REAL ARGUMENTS / AMAX1 XX LAC (2 DAC BOXX LAW -2 AXJOIN DAC BIN2 LAC (SMA DAC CONV JMS MAXMIN JMP* AMAX1 / / INTEGER FUNCTION, REAL ARGUMENTS / MAX1 XX JMS AMAX1 JMS* .FIX DZM* .MODEA / MARK MODE AS INTEGER JMP* MAX1 / / REAL FUNCTION, REAL ARGUMENTS / AMIN1 XX LAC (2 DAC BOXX LAW -2 ANJOIN DAC BIN2 LAC (SPA DAC CONV JMS MAXMIN JMP* AMIN1 / / INTEGER FUNCTION, REAL ARGUMENTS / MIN1 XX JMS AMIN1 JMS* .FIX DZM* .MODEA / MARK MODE AS INTEGER JMP* MIN1 / / DOUBLE FUNCTION , DOUBLE ARGUMENTS DMAX1 XX LAC DMAX1 DAC AMAX1 LAC (3 DAC BOXX LAW -4 JMP AXJOIN / / DOUBLE FUNCTION, DOUBLE ARGUMENTS / DMIN1 XX LAC DMIN1 DAC AMIN1 LAC (3 DAC BOXX LAW -4 JMP ANJOIN / / REAL FUNCTION, INTEGER ARGUMENTS / AMAX0 XX JMS MAX0 JMS* .FLOTA JMP* AMAX0 / / INTEGER FUNCTION, INTEGER ARGUMENTS / MAX0 XX LAC (SMA DAC CONV0 JMS IMAXMN JMP* MAX0 / / REAL FUNCTION, INTEGER ARGUMENTS / AMIN0 XX JMS MIN0 JMS* .FLOTA JMP* AMIN0 / / INTEGER FUNCTION ARGUMENTS / MIN0 XX LAC (SPA DAC CONV0 JMS IMAXMN JMP* MIN0 / / / THIS SUBROUTINE ACTUALLY DOES THE COMPARISIONS / MAXMIN XX JMS* .FETCH SAD BOXX / ARE MODES THE SAME SKP JMP* .ILMDE JMS* .PSHBA / FORCE B INTO A JMS* .FETCH SZL JMP MERROR / ERROR - ONLY ONE ARGUMENT / LOOPM SAD BOXX SKP JMP* .ILMDE / ERROR - ILLEGAL MODE LAC* .SIGNA SAD* .SIGNB / ARE THE SIGNS THE SAME SKP JMP CONV / NO. CHECK WHICH IS GREATER / IF BOTH SIGNS ARE NEGATIVE, CHANGE THE SKIP CONDITION SMA JMP TRYEXP / SIGNS BOTH POSITIVE LAC (SPA\SMA / SIGNS BOTH NEGATIVE CHANGE SKIP XOR CONV DAC CONV / SIGNS ARE THE SAME, TEST EXPONENTS TRYEXP LAC* .EXPB SAD* .EXPA JMP TRYMAN CMA!CLL ADD* .EXPA SZL CMA JMP CONV / TEST WHICH EXPONENT IS LARGER / EXPONENTS ARE THE SAME , TRY MANTISSA TRYMAN LAC .EXPB / LOAD ADDRESSES OF ACCUMULATORS ( MOSTB-1 ) DAC* (AUTO2 LAC .EXPA / (MOSTA-1 DAC* (AUTO3 / LAC BIN2 DAC CCNT / RESET COUNT FOR NEXT ARGUMENT LOOPN LAC* AUTO2 / LOAD B CMA / -B-1 TAD* AUTO3 / (A-B)-1 SAD (777777 / IF A.EQ.B , AC=-1 SKP JMP CONV ISZ CCNT JMP LOOPN / THEY WERE THE SAME TRY NEXT WORD / / IF A>B THEN AC=>0, IF B>A THEN AC<-1 CONV XX / SMA FOR MAX, SPA FOR MIN JMP AGTB LAC BOXX / B.GT.A, PUT B INTO A JMS* .PSHBA AGTB JMS* .FETCH / GET NEXT ARGUMENT SNL JMP LOOPM JMP* MAXMIN / / THE ARGUMENTS ARE INTEGER / IMAXMN XX JMS* .FETCH RCR SZA!RAL JMP* .ILMDE /ARGUMENT NON-INTEGER JMS* .PSHBA /LOAD FIRST ARGUMENT JMS* .FETCH /GET SECOND ARGUMENT SZL JMP IERROR /ERROR: ONLY ONE ARGUMENT / LOOPM0 RCR SZA!RAL JMP* .ILMDE /ARGUMENT NON-INTEGER DAC BOXX /SET UP BOXX LAC* (AUTO2 /GET ARGUMENT ADDRESS DAC* (AUTO3 /SET UP INDEX REGISTER FOR COMPARE SZL JMP DINARG LAC* AUTO3 /SINGLE INTEGER DAC CCNT SMA!CLC CLA DAC BIN2 JMP MERGE / DINARG LAC* AUTO3 /DOUBLE INTEGER DAC BIN2 LAC* AUTO3 DAC CCNT / MERGE LAC BIN2 CMA TAD* .INT1 DAC BIN2 CLL!CLC TAD CCNT CML!CMA TAD* .INT2 CLA!RAL TAD BIN2 / / IF A=>B THEN AC=>0, IF B>A THEN AC<0 CONV0 XX / SMA FOR MAX, SPA FOR MIN JMP AGTB0 LAC BOXX JMS* .PSHBA AGTB0 JMS* .FETCH SNL JMP LOOPM0 JMP* IMAXMN / / NOTE: FOR THESE WARNINGS, THE 1ST & ONLY ARGUMENT IS / ALREADY IN THE ACCUMULATOR WHEN IT RETURNS / MERROR LAW 23 / ERROR - ONLY ONE ARGUMENT JMS* .ERROR JMP* MAXMIN IERROR LAW 23 /ERROR - ONLY ONE ARGUMENT JMS* .ERROR JMP* IMAXMN / BIN2 BOXX CCNT .END