ASMB,Q,L,C
* 
*  **************************************************************** 
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS      * 
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       * 
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * 
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.        * 
*  **************************************************************** 
* 
*   NAME: PART OF MATH LIBRARY
*   SOURCE:  24998-18XXX  SEE NAM FOR LAST THREE DIGITS 
*   RELOC: PART OF 24998-12001
*   PGMR: BG & JTS
      HED ".MXM1" MAX AND MIN WITH REAL ARGUMENTS.
      NAM .MXM1,7 24998-1X110 REV.2013 800205 
      ENT MIN1,MAX1,.JMN1,.JMX1,AMIN1,AMAX1 
      EXT .FSB,IFIX,.FIXD 
* 
*     CALLING SEQUENCES:
* 
*                   JSB <ROUTINE>  MIN1/MAX1/.JMN1/.JMX1/AMIN1/AMAX1
*                   DEF *+N+1 
*                   DEF X1       (ALL ARGUMENTS ARE REAL*4) 
*                   .   . 
*                   .   . 
*                   .   . 
*                   DEF XN
*                -->(A) OR (A,B) = RESULT OF APPROPRIATE TYPE.
      SPC 2 
*                   ENTRY. SET UP FLAGS:
*                     (A)=RESULT TYPE: -1=INT*4, 0=INT*2, +1=REAL*4.
*                     (E)=MAX/MIN:  0=MIN, 1=MAX. 
* 
MIN1  NOP 
      CLA,CLE 
      JSB MXMN1 
* 
MAX1  NOP 
      CLA,CCE 
      JSB MXMN1 
* 
.JMN1 NOP 
      CCA,CLE 
      JSB MXMN1 
* 
.JMX1 NOP 
      CCA,CCE 
      JSB MXMN1 
* 
AMIN1 NOP 
      CLA,CLE,INA 
      JSB MXMN1 
* 
AMAX1 NOP 
      CLA,CCE,INA 
      JSB MXMN1 
* 
MXMN1 NOP 
      LDB SSA       FOR MIN, USE 'SSA'. 
      SEZ 
      INB           FOR MAX, USE 'SSA,RSS'. 
      STB TEST
      ADA KM1       ALTER FLAG: -2:INT*4, -1:INT*2, 0:REAL*4. 
      STA FFLAG     IT'S THE FIX FLAG.
      SKP 
*                   SET UP RTN ADDR, ARG COUNT, ARG POINTER.
* 
      LDA MXMN1     GET THE TRUE ENTRY POINT. 
      ADA KM3 
      LDA 0,I 
      STA MIN1
      LDB 0,I       SET RETURN ADDR.
      STB MAX1
      CMA           -*-1 IN 'DEF *+N+1' 
      ADA MIN1,I    (-*-1)+(*+N+1) = N
      CMA,CCE,INA,SZA,RSS   N=0 ?  (A=-N)  (E=1)
      JMP ZERO      YES.
* 
      STA N         NO. SET UP COUNTER. 
      LDA MIN1      SET UP POINTER THRU PARAM LIST. 
      INA 
      RAL,ERA       SET INDIRECT: POINTS TO ADDRESSES.
      STA DLIST 
      JMP MXMN4     GO SET 1ST ARG AS CURRENT MAX/MIN.
* 
*                   LOOK THRU LIST FOR NEW MAX/MIN. 
* 
MXMN2 ISZ DLIST     BUMP ADDR TO NEXT ARG.
      LDA VALUE     CHECK SIGNS.
      XOR DLIST,I   SAME SIGN ? 
      SSA 
      JMP MXMN3     NO. 
* 
      DLD VALUE     YES. SUBTRACT.
      JSB .FSB
DLIST DEF *-* 
      SOS           UNDERFLOW ? (CAN'T OVERFLOW)
      JMP TEST      NO. 
* 
      DLD DLIST,I   YES. ADD 128 TO BOTH EXPONENTS. 
      INB 
      DST TEMP
      DLD VALUE 
      INB 
      JSB .FSB      NOW REPEAT THE SUBTRACT.
      DEF TEMP
      JMP TEST      THIS TIME IT HAS TO WORK. 
* 
MXMN3 LDA VALUE     SIGNS DIFF, TEST SIGN OF CURRENT MIN/MAX. 
TEST  ABS *-*       MIN: SSA   MAX: SSA,RSS 
      JMP MXMN5     CURRENT VALUE IS O.K., LEAVE IT.
* 
MXMN4 DLD DLIST,I   NEW VALUE IS BETTER. REPLACE. 
      DST VALUE 
MXMN5 ISZ N         COUNT 'EM. DONE ? 
      JMP MXMN2     NO. GO FOR MORE.
* 
*                   IF NEED BE, FIX THE RESULT. 
* 
      DLD VALUE     (A,B) = REAL VERSION. 
      ISZ FFLAG     WHAT IS REQUIRED ?
      RSS 
      JSB IFIX      INTEGER*2. FIX. 
      ISZ FFLAG 
      RSS 
      JSB .FIXD     INTEGER*4. FIX. 
      JMP MAX1,I    DONE. 
* 
*                   ZERO ARGUMENTS, RESULT = 0. 
* 
ZERO  CLA           SAME FOR ALL TYPES. 
      CLB 
      JMP MAX1,I
* 
*                   LOCALS & CONSTANTS. 
* 
N     NOP           PARAM COUNTER.
FFLAG NOP           FIX FLAG. 
VALUE DEC 0,0       BEST VALUE SO FAR.
TEMP  DEC 0,0       ARGUMENT * (2**128) 
SSA   SSA 
KM1   DEC -1
KM3   DEC -3
* 
      END 
                                    