* GET SIGN OF DECIMAL                                   HEADER  CR.SIGN 0001.000
*                                                                       0002.000
*              GET SIGN OF DECIMAL                                      0003.000
*                                                                       0004.000
         M.PGM     CR.SIGN,MPX-32,3.6.1,00                              0005.000
         DEF   CR.SIGN                                                  0006.000
*                                                                       0007.000
* DETERMINE SIGN OF SOURCE OPERAND SPECIFIED BY R2                      0008.000
*                                                                       0009.000
*    EXIT CONDITIONS                                                    0010.000
*        R1 - UNCHANGED                                                 0011.000
*        R2 - SOURCE DD ( UNCHANGED )                                   0012.000
*        R3 - POINTER TO FIRST DIGIT OF DECIMAL STRING                  0013.000
*        R4 - SIGN OF DECIMAL STRING                                    0014.000
*        R5,R6,R7 ARE UNCHANGED                                         0015.000
*                                                                       0016.000
*                                                                       0017.000
         M.REQS                                                         0018.000
         DD.EQU                                                         0019.000
         COBOLDAT                                                       0020.000
*                                                                       0021.000
* DETERMINE TYPE OF OPERAND                                             0022.000
*                                                                       0023.000
CR.SIGN  CI    R2,8                                                     0024.000
         BGT   DDPTR                                                    0025.000
*                                                                       0026.000
* DETERMINE SIGN OF DECA                                                0027.000
*                                                                       0028.000
         TRR   R2,R3                                                    0029.000
         SLL   R3,1                                                     0030.000
         LH    R3,NDECA,X3    GET OFFSET TO SPECIFIED DECA              0031.000
         LB    R4,DECA,X3     GET SIGN                                  0032.000
         LEA   R3,DECA+1,X3   GET ADDRESS OF FIRST DIGIT                0033.000
         TRSW  0              RETURN                                    0034.000
*                                                                       0035.000
* DETERMINE SIGN OF DECIMAL STRING                                      0036.000
*                                                                       0037.000
DDPTR    LW    R3,DD.PTR,X2   GET ADDR OF FIRST DIGIT OF STRING         0038.000
         TBM   DD.S,0,X2      IF NO SIGN THEN RETURN '+'                0039.000
         BNS   PLUS                                                     0040.000
         TBM   DD.L,0,X2      CHECK FOR LEADING SIGN                    0041.000
         BNS   TRAILING                                                 0042.000
         LB    R4,0,X3        PICK UP THE SIGN BYTE                     0043.000
         TBM   DD.P,0,X2      IF ITS NOT SEPARATE                       0044.000
         BNS   CHKSIGN           THEN GO CHECK IT                       0045.000
         ABR   R3,31          ELSE INCREMENT POINTER TO SKIP SIGN       0046.000
         TRSW  0              RETURN                                    0047.000
*                                                                       0048.000
* TRAILING SIGN                                                         0049.000
*                                                                       0050.000
TRAILING LH    R4,DD.LEN,X2   GET LENGTH OF STRING                      0051.000
         ADR   R3,R4          DETERMINE POINTER TO SIGN                 0052.000
         XCR   R4,R1                                                    0053.000
         TBM   DD.P,0,X2      IF SIGN ISN'T SEPARATE GO CHECK IT        0054.000
         BNS   NOTSEP                                                   0055.000
         LB    R1,0,X1        PICK UP SIGN                              0056.000
         XCR   R1,R4          RESTORE REGISTERS                         0057.000
         TRSW  0              RETURN                                    0058.000
NOTSEP   SUI   R1,1                                                     0059.000
         LB    R1,0,X1        PICK UP SIGNED DIGIT                      0060.000
         XCR   R1,R4          RESTORE REGISTERS                         0061.000
*                                                                       0062.000
* DETERMINE SIGN OF DIGIT IN R4                                         0063.000
*                                                                       0064.000
CHKSIGN  CI    R4,G'J'        IF J <= SIGN <= R THEN SIGN IS '-'        0065.000
         BLT   PLUS                                                     0066.000
         CI    R4,G'R'                                                  0067.000
         BLE   MINUS                                                    0068.000
         CI    R4,X'7D'       ELSE IF SIGN=X'7D' THEN SIGN IS '-'       0069.000
         BEQ   MINUS                                                    0070.000
PLUS     LI    R4,G'+'        LOAD POSITIVE SIGN                        0071.000
         TRSW  R0             RETURN                                    0072.000
MINUS    LI    R4,G'-'        LOAD NEGATIVE SIGN                        0073.000
         TRSW  0              RETURN                                    0074.000
         END                                                            0075.000
