*DECK C$STRP
          IDENT  C$STRP 
          TITLE  C$STRP - TABLE TO STRIP OVERPUNCH SIGNS
  
          COMMENT  TABLE TO STRIP OVERPUNCH SIGNS 
          SPACE  4
**        C.STRP -  TABLE TO STRIP OVERPUNCH SIGNS
* 
*         THIS TABLE IS TYPICALLY REFERENCED BY A SEQUENCE SUCH AS: 
* 
*         MX0    54 
*         BX1    -X0*X5      (X5 = NUMERIC VALUE WITH LOW-ORDER SIGN) 
*         SA1    =XC.STRP+X1
*         SX2    X1 
*         BX5    X5-X2
* 
*         THIS LEAVES X5 = UNSIGNED VALUE,
*                 AND X1 < 0 IFF NUMERIC VALUE WAS ORIGINALLY NEGATIVE. 
* 
* 
*         THIS TABLE MAY ALSO BE USED TO CONVERT BITS TO CHARACTERS:  
* 
*         PX1    X1 
*         NX1    X1,B2
*         SA1    =X_C.STRP+B2 
*         UX1    X1,B2
* 
*         THIS LEAVES B2 = CHARACTER COUNT SUITABLE FOR =X_C.MASKS+B2 
* 
* 
*         THIS TABLE MAY ALSO BE USED TO EXTRACT THE BINARY VALUE OF
*           A DISPLAY-CODE DIGIT WITH OVERPUNCH SIGN: 
* 
*         MX0    -6 
*         BX1    X
*         BX1    -X0*X5      (X5 = NUMERIC VALUE WITH LOW-ORDER SIGN) 
*         SA2    =X_C.STRP+X1 
*         AX2    18 
*         SX3    X2 
* 
*         THIS LEAVES X3 = BINARY VALUE,
*                 AND X2 < 0 IFF NUMERIC VALUE WAS ORIGINALLY NEGATIVE. 
  
  
 CHARNUM  SET    0
  
          MACRO  DIGIT,POS,VAL
          ERRNZ  POS_B-CHARNUM
 LEAD     SET    2000B+POS_B/6+2
1         IFC    EQ,*VAL**
+         VFD    1/0,11/LEAD,12/-0,18/400000B,18/POS_B&_POS_B 
1         ELSE
 CHAR     MICRO  1,1,*VAL*
 SIGN     SET    2
          IFC    EQ,*"CHAR"*+*,1
 SIGN     SET    0
          IFC    EQ,*"CHAR"*-*,2
 LEAD     SET    LEAD&3777B 
 SIGN     SET    1
 CHAR     MICRO  2,1,*VAL*
+         VFD    1/SIGN,11/LEAD,12/-0,18/1R"CHAR"-1R0,18/1R"CHAR"&_POS_B
1         ENDIF 
 CHARNUM  SET    CHARNUM+1
 DIGIT    ENDM
          SPACE  4
          ENTRY  C.STRP 
 C.STRP   BSS    0
 00       DIGIT              :  
 01       DIGIT  +1          A
 02       DIGIT  +2          B
 03       DIGIT  +3          C
 04       DIGIT  +4          D
 05       DIGIT  +5          E
 06       DIGIT  +6          F
 07       DIGIT  +7          G
 10       DIGIT  +8          H
 11       DIGIT  +9          I
 12       DIGIT  -1          J
 13       DIGIT  -2          K
 14       DIGIT  -3          L
 15       DIGIT  -4          M
 16       DIGIT  -5          N
 17       DIGIT  -6          O
 20       DIGIT  -7          P
 21       DIGIT  -8          Q
 22       DIGIT  -9          R
 23       DIGIT              S
 24       DIGIT              T
 25       DIGIT              U
 26       DIGIT              V
 27       DIGIT              W
 30       DIGIT              X
 31       DIGIT              Y
 32       DIGIT              Z
 33       DIGIT  +0          0
 34       DIGIT  +1          1
 35       DIGIT  +2          2
 36       DIGIT  +3          3
 37       DIGIT  +4          4
 40       DIGIT  +5          5
 41       DIGIT  +6          6
 42       DIGIT  +7          7
 43       DIGIT  +8          8
 44       DIGIT  +9          9
 45       DIGIT  +0          +
 46       DIGIT  -0          -
 47       DIGIT              *
 50       DIGIT              /
 51       DIGIT              (
 52       DIGIT              )
 53       DIGIT              $
 54       DIGIT              =
 55       DIGIT              BLANK
 56       DIGIT              ,
 57       DIGIT              .
 60       DIGIT              #
          IFC    NE,/"OSNAME"/SCOPE /,2 
 61       DIGIT  +0          [
 62       DIGIT  -0          ]
          IFC    EQ,/"OSNAME"/SCOPE /,2 
 61       DIGIT              [
 62       DIGIT              ]
 63       DIGIT              %
 64       DIGIT              "
 65       DIGIT              _
 66       DIGIT  -0          !
 67       DIGIT              &
 70       DIGIT              '
 71       DIGIT              ?
 72       DIGIT  +0          <
 73       DIGIT              >
 74       DIGIT              @
 75       DIGIT              \
 76       DIGIT              ^
 77       DIGIT              ;
          SPACE  4
          END 
