*DECK PICTUR
          IDENT  PICTUR 
          COMMENT  MURAL PICTURE PROCESSOR
PICTUR    TITLE    PICTUR - MURAL PICTURE PROCESSOR 
* 
*  ENTRY POINTS 
* 
          ENTRY  PICTUR 
          ENTRY  PICTEMP
          ENTRY  SQASHBU
* 
*  EXTERNAL REFERENCES
* 
          EXT    DIAG 
          EXT    CURWORD,CURLENG
* 
*  PICTURE PROCESSOR
*         EXPECTS ADDRESS OF DEFINE/DESCRIBE LIST ENTRY IN X1 
*         EXPECTS PICTURE CHARACTERS IN CURWORD 
*         EXPECTS PICTURE LENGTH IN CURLENG 
*         EXITS MURAL IN PICTEMP
*         EXITS PICTURE INFORMATION IN SQASHBU
* 
 PICTUR   DATA   0
          SX7    X1+3        GET ADDRESS OF NAME FIELD IN X7
          SA2    X1+1 
          MX6    -6 
          LX2    18          SHIFT CLASS TO LOWER DIGITS
          BX6    -X6*X2      GET CLASS
          SA6    SQASHBU+7   SAVE CLASS 
          SA1    CURLENG
          SX6    X1 
          SA7    DNAMEPTR    STORE ADDRESS OF DATANAME IN DIAG PLIST
          SA6    PICECNT     STORE EDIT COUNT 
          SX6    B0          ZERO TO
          SA6    PICTURH     HISTORY
          SA6    PICTUDC     DECIMAL COUNT
          SA6    PICTLDC     LEAD DEC CNT 
          SA6    PICTUEC     EXTERNAL COUNT 
          SA6    PICTUIC     INTERNAL COUNT 
          SA6    PICTUEF     EXCESS FLAG
          SA6    NONMURL
          SA6    CHTEMP 
          SA6    PIFFLAG
          SA6    CSFLAG      CURRENCY SIGN FLAG 
          SA6    PMFLAG      + OR - FLAG
          SA6    RFFLAG      REPEAT FLOAT FLAG
          SA6    TRFLAG      TRAILING + OR - FLAG 
          SA6    PICTEMP     1ST WORD OF MURAL
          SA6    PAKMRPL     CHAR-MURAL BUFFER POINTER
          SA6    PAKMBYT     PREVIOUS BYTE
          SA6    REPGATE     REPEAT GATE
          SA6    SQASHBU+1   NR DIGITS TO RIGHT OF DECIMAL POINT
          SA6    SQASHBU+2   BLANK WHEN ZERO FLAG 
          SA6    SQASHBU+6   SIGN FLAG
          SA6    SQASHBU+8   CLEAR CR, DB, +, - FLAG
          SX7    51          5 BITS FOR LENGTH - 5 FOR INDICATORS 
          SA6    REPCNT      REPEAT COUNTER 
          SA6    DIAGNBR     ERROR FLAG 
          SA6    CHARNUM     SET TO 1ST CHAR IN PICTURE 
          SA6    WORDNUM
          SA7    PAKMSAM     INIT SHIFT AMOUNT
          EQ     GETBYT      GET 1ST BYTE OF PICTURE
* 
*  PICTURE SCAN ROUTINE 
* 
 PICNORL  SA1    PICTCCH     CURRENT CHAR (X1)
          SA2    PICTCCB     CURRENT CHAR BIT (X2)
          SA3    PICTUPM
          BX3    X2*X3       IS CHAR A (+OR-) 
          ZR     X3,PICTUCP  NO- GOTO IS CHAR A (P) 
          SA3    PICTURH     PICK UP PICTURE HISTORY
          BX2    X2*X3       HAS CHAR APPEARED BEFORE 
          ZR     X2,PICTUCP  NO - GOTO IS CHAR A (P)
          MX6    1
          SA6    RFFLAG      SET REPEAT FLOAT FLAG FOR + OR - 
          SA2    PIT100 
          MX3    3           CHANGE CURRENT BYTE TO REPEAT
          LX3    3
          BX3    X1*X3
          BX6    X3+X2
          SA6    PICTCCH
          SA1    PICTILS
          BX6    X1 
          SA6    PIFFLAG
 PICTUCP  SA3    PICTUPL
          SA2    PICTCCB
          BX3    X3*X2       IS CURRENT CHAR A (P)
          ZR     X3,PICTDB   NO - GOTO B AFTER D
          SA3    PICTUIC                                                 QU3A343
          ZR     X3,PICTDB   NO - GOTO B AFTER D
          SA2    PIT100      .YES 
          BX6    X2          CHANGE BYTE TO TRAILING
          SA6    PICTCCH
          SA1    PICTPTB
          BX6    X1 
          SA6    PICTCCB     CHANGE CHAR BIT TO TRAILING
 PICTDB   SA2    PICTURB
          IX2    X1-X2       IS CURRENT CHAR A (B)
          NZ     X2,PICTETC  NO - GOTO EDIT COUNT 
          SA2    PICTURH     YES
          SA3    PICTUDB
          BX3    X2*X3       DOES THIS B FOLLOW A D 
          ZR     X3,PICTETC  NO 
          SA2    PICTUBT     YES
          BX6    X2 
          SA6    PICTCCH     CHANGE CHAR CODE TO TRAIL
          SA2    PICTBTB
          BX6    X2 
          SA6    PICTCCB     CHANGE CURRENT CHAR BIT TO TRAIL 
 PICTETC  SA2    PICECNT     EDIT COUNT 
          ZR     X2,PICTINC  IS EDIT COUNT GREATER THAN ZERO
          NG     X2,PICTINC  NO - GOTO INCREMENT
          SA2    PICTUR9     YES
          IX2    X1-X2       IS CURRENT CHAR A (9)
          NZ     X2,PICTINC  NO - GOTO INCREMENT
          SA2    9+SQASHBU        YES 
          PL     X2,PICTINC  NO EDIT FLAGS GOTO INC 
 PICTZSF  LX2    59          IS ZERO SUPPRESS FLAG ON 
          PL     X2,PICTCPF  NO - GOTO CP FLAG
          SA1    PICTURZ
          BX6    X1 
          SA6    PICTCCH     CHANGE CURRENT CHAR TO Z 
          SA2    PICTUZB
          BX6    X2 
          SA6    PICTCCB     CHANGE CURRENT CHAR BIT TO Z 
          EQ     B0,B0,PICTINC GOTO INCREMENT 
 PICTCPF  LX2    59          IS CHECK PROTECT FLAG ON 
          PL     X2,PICTFDF  NO - GOTO FD FLAG
          SA1    PICTUAS
          BX6    X1 
          SA6    PICTCCH     CHANGE CURRENT CHAR TO * 
          SA2    PICTASB
          BX6    X2 
          SA6    PICTCCB     CHANGE CURRENT CHAR BIT TO * 
          EQ     B0,B0,PICTINC GOTO INCREMENT 
 PICTFDF  LX2    59          IS FLOAT DOLLAR FLAG ON
          PL     X2,PICTINC  NO GOTO INCREMENT
          SA1    PICTDSL     YES
          BX6    X1 
          SA6    PICTCCH     CHANGE CURRENT CHAR TO $ 
          SA2    PICTDSB
          BX6    X2 
          SA6    PICTCCB     CHANGE CURRENT CHAR BIT TO $ 
 PICTINC  SA1    PICTCCB
          SA2    PICTDSB
          BX2    X1*X2       IS CURRENT CHAR $
          ZR     X2,PICTDEC  NO 
          MX6    1
          SA6    CSFLAG      SET CURRENCY SIGN FLAG 
          SA2    PICTURH     YES
          BX2    X1*X2       HAS $ APPEARED BEFORE
          ZR     X2,PICTDEC  NO 
          SA6    RFFLAG      SET REPEAT FLOAT FLAG FOR $
          SA1    PICTDSR     YES
          BX6    X1 
          SA6    PICTCCH     CHANGE CURRENT CHAR TO $ (REPEAT 
          SA2    PICDSRB
          BX6    X2 
          SA6    PICTCCB     CHANGE CURRENT CHAR BIT TO $ (RE 
 PICTDEC  SA2    PICTZAB
          BX2    X1*X2
          ZR     X2,PICTDE1 
          SA1    PIFFLAG
          SA2    PICTURH
          BX6    X1+X2
          SA6    PICTURH
 PICTDE1  SA1    PICTCCH
          SB1    X1 
          SA1    PRECTAB+B1  PICK UP INFO ON CURRENT CHAR 
          LX1    45          IS DECIMAL BIT SET 
          PL     X1,PICTEXC  NO - GOTO EXTERIOR CNT 
          SA2    PICTUR1     YES
          SA3    PICTUDC
          IX6    X2+X3       INCREMENT DEC CNT BY 1 
          SA6    PICTUDC
          SA3    PICECNT
          IX6    X3-X2       DECREMENT EDIT CNT BY 1
          SA6    PICECNT
 PICTEXC  LX1    1           IS EXTERIOR BIT SET
          PL     X1,PICTITC  NO - GOTO INTERIOR CNT 
          SA2    PICTUR1     YES
          SA3    PICTUEC
          IX6    X3+X2       INCREMENT EXTERIOR CNT BY 1
          SA6    PICTUEC
 PICTITC  LX1    1           IS INTERIOR BIT SET
          PL     X1,PICTVPD  NO - GOTO VOR. 
          SA2    PICTUR1     YES
          SA3    PICTUIC
          IX6    X2+X3       INCREMENT INTERIOR CNT BY 1
          SA6    PICTUIC
 PICTVPD  SA1    PICTCCB
          SA2    PICTVRP
          BX2    X1*X2       IS CURRENT CHAR A (VOR.) 
          ZR     X2,PICLEGL  NO - GOTO LEGAL
          SA2    PICTUDC     YES
          SX6    X2 
          SA6    PICTLDC     DECIMAL CNT TO LEAD DEC CNT
          SX6    B0 
          SA6    PICTUDC     ZERO TO DECIMAL CNT
 PICLEGL  SA1    PICTURH
          SA2    PRECTAB+B1 
          MX3    23 
          LX3    38 
          BX2    X2*X3
          LX2    54 
          BX2    X1*X2       IS CURRENT CHAR LEGAL TO RIGHT 
          ZR     X2,PICPLUS  YES - GOTO PLUS
          SA2    PICTILS     NO PICK UP ILLEGAL SYNTAX BIT
          SA3    PICTURH
          BX6    X2+X3       OR BAD SYNTAX TO HISTORY 
          SA6    PICTURH
 PICPLUS  SA1    PICTCCB     CURRENT CHAR BIT IN (X1) 
          SA2    PICTUPM     PLUS OR MINUS
          BX2    X1*X2       IS CURRENT CHAR + OR - 
          ZR     X2,PICTORH  NO - GOTO OR BIT TO HISTORY
          SA2    PICTTSI     YES PICK UP TRAIL SIGN MASK
          SA1    PICTURH
          BX2    X2*X1       IS CURRENT + OR - TRAILING 
          MX6    1
          NZ     X2,PICPLUS1 JUMP IF YES
          SA6    PMFLAG      SET PLUS MINUS FLAG
          EQ     PICTORH
 PICPLUS1 SA6    TRFLAG      SET TRAIL SIGN FLAG FOR + OR - 
          SA1    PICTCCB
          LX1    55 
          BX6    X1 
          SA6    PICTCCB     CHANGE CURRENT BIT TO TRAILING 
 PICTORH  SA1    PICTCCB
          SA2    PICTURH
          BX6    X1+X2       OR CURRENT CHAR BIT TO HISTORY 
          SA6    PICTURH
          SA2    PICTMRL
          BX2    X1*X2       DOES CURRENT CHAR GO IN A MURAL
          NZ     X2,GETBYT   NO - GO GET NEXT BYTE OF PICTURE 
          SA1    PICTVRP
          SA2    PICTURH
          BX1    X1*X2       HAS . OR V APPEARED
          ZR     X1,PICTPKM  NO GOTO PAKMRL 
          SA1    PICFSYM
          SA2    PICTCCB     IS CURRENT CHAR A -
          BX1    X1*X2       FLOAT OR SUPPRESS CHAR 
          ZR     X1,PICTPKM  NO 
          SA1    PICTUR9     YES
          BX6    X1          CHANGE CURRENT 
          SA6    PICTCCH     CHAR TO A 9
 PICTPKM  SA1    PICTCCH     YES - PICK UP CURRENT CHAR 
          RJ     PAKMRL      PLACE CHAR IN MURAL
          EQ     GETBYT      GO GET NEXT BYTE 
          EJECT 
* 
*  PICTURE VARIBLES 
* 
 PICTLDC  BSSZ   1           LEAD DECIMAL CNT 
 PICECNT  BSSZ   1           EDIT CNT 
 PICTUDC  BSSZ   1           DECIMAL COUNT
 PICTUEC  BSSZ   1           EXTERNAL COUNT 
 PICTUIC  BSSZ   1           INTERNAL COUNT 
 PICTUEF  BSSZ   1           EXCESS FLAG
 PICTURH  BSSZ   1           PICTURE HISTORY
 PIFFLAG  BSSZ   1
 CSFLAG   BSS    1           BIT 59=1 IF CURRENCY SGN ENCNTRD 
 PMFLAG   BSS    1           BIT 59=1 IF + OR - ENCOUNTERED 
 RFFLAG   BSS    1           NON-ZERO IF REPEAT FLOAT ENCNTRD 
 TRFLAG   BSS    1           NON-ZERO IF TRAILING + OR - MET
 DPLIST   CON    DIAGNBR     PARAMETER LIST FOR DIAG CALLS
 DNAMEPTR DATA   0
 DIAGNBR  DATA   0
* 
*  PICTURE CONSTANTS
* 
 PICTUR1  DATA   1                    DECIMAL 1 
 PICTUR2  DATA   2                    DECIMAL 2 
 PICTUR3  DATA   3                    DECIMAL 3 
 PICTUR6  DATA   6                    DECIMAL 6 
 PICTURB  DATA   02B                  B CHAR CODE 
 PICTURZ  DATA   32B                  Z 
 PICTUR9  DATA   44B                  9 
 PICTUAS  DATA   47B                  * 
 PIT100   DATA   100B 
 PICTUBT  DATA   101B                 B(T)
 PICTDSR  DATA   103B                 $ (REPEAT)
          SPACE  4,10 
**        PICTURE HISTORY.
* 
*         THE PICTURE HISTORY (PICTURH) HAS A BIT SET FOR EACH DIFFERENT
*         TYPE OF CHARACTER ENCOUNTERED IN THE PICTURE.  THE BIT
*         ASSIGNMENTS ARE GIVEN BELOW ALONG WITH AN INDICATOR 
*         WHICH MEANS THAT A MURAL IS NEEDED FOR A PICTURE USING THIS 
*         CHARACTER.
* 
*         BIT    MURAL       CHARACTER
*         3                  ILLEGAL CHARACTER IN PICTURE 
*         4                  ILLEGAL SYNTAX IN PICTURE
*         9      M           $ (REPEAT) 
*         10     M           B OF DB ENCOUNTERED
*         11                 P (TRAILING) 
*         12     M           + (TRAILING) 
*         13     M           - (TRAILING) 
*         14     M           R OF CR ENCOUNTERED
*         15     M           D OF DB ENCOUNTERED
*         16     M           C OF CR ENCOUNTERED
*         17     M           +
*         18     M           -
*         19     M           0
*         20     M           B
*         21     M           .
*         22     M           ,
*         22     M           /
*         23     M           $
*         24     M           *
*         25     M           Z
*         26                 P (LEADING)
*         27                 V
*         28                 S
*         29                 9
*         30                 X
*         31                 A
  
 PICTILS  DATA   20B                  ILLEGAL SYNTAC BIT
 PICTMCD  DATA   40B                  MINUS DECIMAL FLAG
 PICTADF  DATA   100B                 ACTUAL DECIMAL FLAG 
 PICDSRB  DATA   1000B                $(REPEAT)-BIT 
 PICTBTB  DATA   2000B                B(TRAIL)-BIT
 PICTPTB  DATA   4000B                P(TRAILING)-BIT 
 PICTUDB  DATA   100000B              D-BIT 
 PICTCDB  DATA   300000B             C (OF -CR-) AND D (OF -DB-) BITS 
 PICTUPM  DATA   1400000B             PLUS AND MINUS BIT
 PICTUPR  DATA   10000000B            . BIT POSITION
 PICTDSB  DATA   40000000B            $-BIT 
 PICTASB  DATA   100000000B           *-BIT 
 PICTUZB  DATA   200000000B           Z-BIT 
 PICTZAB  DATA   300000000B          Z*-BIT 
 PICTUPL  DATA   400000000B           P (LEADING) BIT CODE
 PICEDIT  DATA   77777777770000000747B  NUMERIC EDITING MASK
 PICEMUR  DATA   0377772000B         BITS WHICH FORCE MURAL 
 PICTVRP  DATA   1010000000B          V.-BITS 
 PICTAED  DATA   6000000B            ALPHANUMERIC EDITING MASK
 PICTURV  DATA   1000000000B          BIT FOR (V) 
 PICTPVP  DATA   1410004000B          V P(L) . P(T)-BITS
 PICTURS  DATA   2000000000B          S BIT POSITION
 PICTU9B  DATA   4000000000B          9 BIT POSITION
 PICTPLT  DATA   400004000B           P(L) AND P(T)-BITS
 PICTMRL  DATA   3400004000B          SVP(L) AND P(T)-BITS
 PICTURA  DATA   20000000000B         A BIT POSITION
 PICFSYM  DATA   341400000B           FLOATING BITS (*$Z-+ LEAD)
 PICSVPM  DATA   34377777747B         SVP BIT MASK
 PIC9SVP  DATA   77777777770377773747B   9SVP MASK
 PICTTSI  DATA   77777777774300376747B   + AND - TRAILING MASK
  
  
**        DATA CLASS MASKS. 
* 
*         EACH CLASS OF DATA HAS A RESTRICTION AS TO WHICH CHARACTERS 
*         ARE PERMITTED IN THE PICTURE.  THE MASKS BELOW ARE USED TO
*         DETERMINE IF THE PICTURE CONTAINS OTHER CHARACTERS.  SEE THE
*         DESCRIPTION OF THE PICTURE HISTORY FOR THE MEANING OF EACH
*         BIT IN THE MASKS. 
  
 CLASS    DATA   34026000000B      0=CHAR-ONLY AXB90,/
          DATA   07777777000B      1=NUMERIC-NOT AX 
          DATA   05777777000B      2=INTEGER-NOT AXS
          DATA   05777777000B      3=UNNORM.-NOT AXS
          DATA   05377773000B      4=NORM-NOT AXSP
          DATA   05377773000B      5=DOUBLE-NOT AXSP
          DATA   05377773000B      6=COMPLEX-NOT AXSP 
          DATA   30026000000B      7=LOGICAL-ONLY AXB0,/
          DATA   37777777000B      10=DISPLAY CHAR-ANY CHARACTER
          DATA   37777777000B      11=DISPLAY NUM-ANY CHARACTER 
          DATA   37777777000B      12=DISPLAY INT-ANY CHARACTER 
          DATA   37777777000B      13=DISPLAY UNNORM-ANY CHARACTER
          DATA   37777777000B      14=DISPLAY NORM-ANY CHARACTER
          DATA   37777777000B      15=DISPLAY DOUBLE-ANY CHARACTER
          DATA   37777777000B      16=DISPLAY COMPLEX-ANY CHARACTER 
          DATA   37777777000B      17=DISPLAY LOGICAL-ANY CHARACTER 
          EJECT 
* 
*  SETMAT 
*    COMPUTES SIZE
*    COMPUTES DEC PT LOCATION 
*    COMPUTES MURAL LENGTH
*    COMPUTES NUM OF INSERTION CHAR 
*    COMPUTES CLASS 
*    GIVES DIAGOSTICS 
* 
 SETMAT   SA1    PICTUEC
          SA2    TRFLAG      TRAILING +,- FLAG
          SA3    PMFLAG      +,- FLAG 
          BX7    X2+X3       +,- ENCOUNTERED ANYWHERE IN PICTURE
          SA4    PICTURH     PICTURE HISTORY
          SA2    PICTCDB
          BX3    X2*X4       NZ IF CR,DB PRESENT
          BX7    X3+X7
          SA7    SQASHBU+8   NZ IF CR,DB,+,- WAS PRESENT
          SX6    X1 
          SA6    SQASHBU          EXTERNAL COUNT TO SQASHBU 
          SA1    PICTUIC     INTERNAL LENGTH IN CHARACTERS
          SX2    X1-2048
          MI     X2,SETMAT1  IF ITEM IS LESS THAN MAX (2047)
          SX6    1
          SA6    PICTUEF     SET ERROR FLAG FOR EXCESS LENGTH 
 SETMAT1  BSS    0
          SA1    1+SQASHBU        CHK FOR PT LOC = 0
          NZ     X1,PICTEDT  NO - GOTO EDIT TEST
          SX3    B0 
          SA2    PICTURH
          SA1    PICTPVP
          BX3    X1*X2
          NZ     X3,PICTPRA 
          SX6    B0 
          SA6    PICTUDC
          EQ     B0,B0,PICTSDC
 PICTPRA  SA1    PICTUPR
          BX3    X1*X2       HAS . APPEARED 
          NZ     X3,PICTAD
          SA1    PICTURV
          BX1    X1*X2       HAS V APPEARED 
          NZ     X1,PICTULP 
          SA1    PICTPLT
  
          NZ     X1,PICTULP 
          SA1    PICTPLT
          BX1    X1*X2       HAS LEADING P OCCURED
          ZR     X1,PICTSDC 
 PICTULP  SA1    PICTUPL
          BX1    X1*X2
          NZ     X1,PICTSDC 
          SA1    PICTPTB     NO 
          BX1    X1*X2
          ZR     X1,PICTSDC 
          SA1    PICTURV
          BX1    X1*X2
          SA2    PICTUDC
          ZR     X1,PICTIMD 
          SA2    PICTLDC
 PICTIMD  SA1    PICTUIC
          IX6    X1-X2       DEC CNT = INTERIOR CNT - DEC CNT 
          SA6    PICTUDC
          PL     X6,PICTSDC 
          SA2    PICTMCD     YES
          BX6    -X6+X2 
          SA6    PICTUDC
 PICTSDC  SA1    PICTUDC
          BX6    X1 
          SA6    1+SQASHBU        STORE DEC COUNT IN SQASHBU
          EQ     B0,B0,PICTEDT
 PICTAD   SA1    PICTADF
          SA2    PICTUDC
          BX6    X1+X2
          SA6    PICTUDC
          EQ     B0,B0,PICTSDC
 PICTEDT  SA1    PICEMUR
          SA2    PICTURH
          BX1    X1*X2       EDITING
          SX6    B0 
          SX3    B0 
          ZR     X1,PICTMOT1 .NO GO TO MURAL OUT
* 
* 
*                   THE NEXT FEW INSTRUCTIONS DETERMINE AND ADD THE 
*                   FOUR LEADING INDICATOR BITS TO THE MURAL
* 
          SA1    PICTZAB
          BX1    X1*X2
          NZ     X1,PICTEDT1 JUMP IF * OR Z HAVE APPEARED 
          SA1    RFFLAG 
          ZR     X1,PICTEDT4 JUMP IF NO REPEATED FLOATING 
 PICTEDT1 SX6    11B         HARD CASE, FLOAT/SUPPRESS BITS 
          SA1    3+SQASHBU
          PL     X1,PICTEDT2 JUMP IF NO CLAUSE EDITING
          SA1    2+SQASHBU
          NZ     X1,PICTEDT3 JUMP IF BWZ
          SA1    3+SQASHBU
          LX1    57 
          NG     X1,PICTEDT4 JUMP IF -FLOAT SIGN- CLAUSE
 PICTEDT2 SA1    PICTU9B
          BX1    X1*X2
          NZ     X1,PICTEDT4 JUMP IF 9*S
 PICTEDT3 SX1    4
          BX6    X1+X6       ADD -ALL FLOAT/SUPPRESS- BIT 
 PICTEDT4 SA1    PICTCDB
          BX1    X1*X2
          NZ     X1,PICTEDT5 JUMP IF -CR- OR -DB- 
          SA1    TRFLAG 
          ZR     X1,PICTEDT6 JUMP IF NO TRAILING + OR - 
 PICTEDT5 SX1    10B
          BX6    X1+X6       ENSURE -HARD CASE- BIT SET 
 PICTEDT6 SA1    PMFLAG 
          SA2    CSFLAG 
          BX2    X1*X2
          NZ     X6,PICTEDT7 JUMP IF NOT -EASY CASE- SO FAR 
          NZ     X1,PICTEDT8 JUMP IF LEADING + OR - 
          EQ     PICTEDT9 
 PICTEDT7 NZ     X2,PICTEDT8 JUMP IF LEADING INSERTION
          SA2    CSFLAG 
          BX2    X1+X2
          ZR     X2,PICTEDT9 JUMP IF NO LEADING INSERTION 
          SA1    PICTZAB
          SA2    PICTURH
          BX1    X1*X2
          NZ     X1,PICTEDT8 JUMP IF Z OR * HAS APPEARED
          SX2    10B
          IX2    X2-X6
          NZ     X2,PICTEDT9 JUMP IF NOT CASE OF TRAILER ONLY 
 PICTEDT8 SX2    12B
          BX6    X2+X6       SET -HARD CASE- AND INSERTS BITS 
 PICTEDT9 SA2    PICTEMP     FIRST WORD OF MURAL
          SA1    2+SQASHBU
          ZR     X1,PICTEDTA NOT BWZ
          SX1    4
          BX6    X6+X1       SET BWZ
 PICTEDTA BSS    0
          LX6    51 
          BX6    X6+X2       ADD INDICATOR BITS 
          SA6    A2 
* 
* 
          SA1    3+SQASHBU        CLAUSE EDITING
          PL     X1,PICTA9S  NO - GOTO NO 9 S 
          SA1    2+SQASHBU        BLANK WHEN ZERO 
          NG     X1,PICTMOT  YES - GOTO MURAL OUT 
 PICTA9S  SA1    PICTURH
          SA2    PICTU9B
          BX1    X1*X2       ANY NINE (S) 
          NZ     X1,PICTMOT  YES - GOTO MURAL OUT 
          SA1    PICTUR1
          BX6    X1 
          SA6    2+SQASHBU        SET BLANK WHEN ZERO 
          SA1    PICTURH
          SA2    PICTASB
          BX2    X2*X1       HAVE ANY * APPEARED
          ZR     X2,PICTMOT  NO 
          SA1    PICTUR2     YES
          BX6    X1 
          SA6    3+SQASHBU        SET CHECK PROTECT FLAG
 PICTMOT  SA1    PAKMRPL     PICK UP MURAL WORD LENGTH
          SA2    PICTUR1
          IX6    X1+X2
          SA3    NONMURL
 PICTMOT1 SA6    4+SQASHBU        STORE MURAL LENGTH IN SQASHBU 
          BX7    X3 
          SA7    NONMURL     SET OVERFLOW TO ZERO IF NO MURAL 
          SA1    PICTEMP
          LX1    5           SHIFT MURAL TO LEFT JUSTIFY INDICATOR BITS 
          BX6    X1+X6
          SA6    PICTEMP     PLACE MURAL LENGTH IN MURAL
          SA1    PICTUEC
          SA2    PICTUIC
          IX6    X1-X2       EXTERIOR CNT - INTERIOR CNT
          SX1    64          CHECK NUM OF INSERTIONS
          IX1    X6-X1
          PL     X1,MANYINS 
          SA6    5+SQASHBU        NR OF INSERTIONS
 PICBADC  SA1    PICTURH
          LX1    56          WAS BAD CHARACTOR DETECTED 
          PL     X1,PICTEXF  NO 
          SX7    80          INVALID PICTURE
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG        YES - OUTPUT DIAG
 PICTEXF  SA1    PICTUEF     EXCESS FLAG ON 
          ZR     X1,PICSYNT  NO 
          SX7    333D        PICTURE LENGTH EXCEEDS MAX 
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG        YES - OUTPUT DIAG
 PICSYNT  SA1    PICTURH
          SX2    300000B     MASK FOR D OR C OF DB AND CR RESPECTIVELY
          BX3    X2*X1
          ZR     X3,PICSYNT0 IF NO DB OR CR ENCOUNTERED 
          SX2    42000B      MASK FOR B OR R OF DB AND CR RESPECTIVELY
          BX2    X2*X1
          ZR     X2,PICSYNT1 IF D WITHOUT B OR C WITHOUT R
 PICSYNT0 BSS    0
          LX1    55          WAS ILLEGAL SYNTAX DETECTED
          PL     X1,PICLASS  NO 
 PICSYNT1 BSS    0
          SX7    80          INVALID PICTURE
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG        YES - OUTPUT DIAG
          SX7    B0 
          SA7    4+SQASHBU
          SA1    PICTUR2
          EQ     PICTUSC
  
 PICLASS  SA1    PICTUIC     INTERNAL LENGTH
          ZR     X1,PICSYNT1 IF THE ITEM LENGTH IS ZERO 
          SA1    NONMURL
          ZR     X1,PICLASS1
          SX7    81D         MURAL SIZE EXCEEDS MAX 
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG        ISSUE DIAGNOSTIC 
          SX7    B0 
          SA7    4+SQASHBU   ZERO MURAL LENGTH
 PICLASS1 SA2    PICTURH
          SA1    SQASHBU+7
          SB1    X1 
          SA1    CLASS+B1 
          BX3    -X1*X2 
          NZ     X3,PICSYNT1 IF PICTURE ILLEGAL FOR THIS CLASS OF DATA
 PICTUSC  SA1    DIAGNBR
          NZ     X1,=XLSTDNO NEG RETURN TO SYNTAX PROCESSOR IF ERROR
          SA1    PICTURS
          BX3    X1*X2
          ZR     X3,PICTUR   IF NO S PRESENT IN PICTURE 
          SX6    1
          SA6    6+SQASHBU        SET SIGN FLAG IN SQASHBU
          EQ     PICTUR 
 MANYINS  SX6    63 
          SA6    5+SQASHBU
          SX7    82          INSERTIONS > 63
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG 
          EQ     PICBADC
          EJECT 
* 
* GETBYT
* 
 GETBYT   BSS    0
          SA1    REPGATE     REPEAT GATE ON 
          NZ     X1,REPON    YES-GOTO REPON 
          SA1    CHARNUM     NO 
          SB1    X1          SET INDEX (B1) TO CHAR NUM 
          SA2    WORDNUM     GET INDEX
          SA1    CURWORD+X2  LOAD CURRENT WORD
          MX0    6           FORM CHAR MASK 
          LX1    B1,X1       POSITION TO NEXT CHAR IN PICTURE 
          SB1    B1-50       TEST FOR LAST CHAR IN WORD 
          BX1    X0*X1       MASK OFF REST OF WORD
          NG     B1,INCCHR   JUMP IF NOT LAST CHAR (SHIFT CNT < 50) 
          SX6    X2+1        INCREMENT WORD NUMBER
          SB1    -56         BIAS CHAR NUMBER 
          SA6    A2          SAVE WORD NUMBER 
 INCCHR   SX7    B1+56       INCREMENT TO NEXT BYTE 
          SA7    CHARNUM     SAVE SHIFT COUNT IN CHARNUM
          LX1    6           RIGHT-JUSTIFY CURRENT CHARACTER
          SX2    X1-55B      IS CHAR BLANK
          ZR     X2,SETMAT   YES - END OF PICTURE 
          SX3    X1-51B      IS CHAR (
          ZR     X3,CONVRT   YES - GO PROCESS COUNT 
          BX6    X1          NO 
          SA6    PICTCCH     SAVE CURRENT CHAR
          SA6    CHTEMP 
 GETBCBW  SB1    X1 
          SA1    PRECTAB+B1  PICK UP TABLE ENTRY (X1) 
          MX2    6
          LX2    6
          BX2    X1*X2       CURRENT CHAR BIT POSITION (X2) 
          SA3    GETBY60
          IX2    X3-X2
          SB1    X2          LEFT SHIFT AMOUNT (B1) 
          SA3    GETBYL1
          LX6    B1,X3       CURRENT CHAR BIT IN POSITION 
          SA6    PICTCCB     SAVE 
          EQ     PICNORL     GO PROCESS PICTURE CHAR
 REPON    SA1    REPCNT 
          SA2    PICTUR1
          IX6    X1-X2
          SA6    REPCNT      DECREMENT REPCNT BY 1
          SA1    CHTEMP      LOAD PREVIOUS CHAR CODE
          PL     X6,GETBCBW  YES-NON NEG
          SX6    B0          REPCNT NEGATIVE
          SA6    REPGATE     TURN REPEAT GATE OFF 
          EQ     B0,B0,GETBYT+1 BACK TO NORMAL
* 
* PROCESS BRACKETED QUANTITY
* 
 CONVRT   SX6    B0 
          SA6    REPCNT      ZERO REPEAT COUNTER
 CONVRT1  SA1    CHARNUM
          SB1    X1 
          SA2    WORDNUM     GET WORD INDEX 
          SA1    CURWORD+X2  GET NEXT CHAR
          MX0    6
          LX1    B1,X1
          SB1    B1-50
          BX1    X0*X1
          NG     B1,INCCHARN
          SX6    X2+1 
          SB1    -56
          SA6    A2 
 INCCHARN SX7    B1+56
          SA7    CHARNUM
          LX1    6
          SX2    X1-52B      IS CHAR )
          ZR     X2,GETTOG   YES-GOTO TURN ON GATE
          SX1    X1-33B      IS CHAR < 0
          NG     X1,NONNUM   YES - GO TO NONNUM 
          SX2    X1-12B      IS CHAR > 9
          PL     X2,NONNUM   YES - GO TO NONNUM 
          SB1    3           SHIFT COUNT
          SA4    REPCNT      LOAD CURRENT REPEAT COUNT IN X4
          LX6    X4,B1       REPEAT COUNT * 8 
          LX4    1           REPEAT COUNT * 2 
          IX6    X4+X6       REPEAT COUNT * 10
          IX6    X6+X1       ADD NEW DIGIT TO REPEAT COUNT
          SA6    REPCNT 
          EQ     B0,B0,CONVRT1 LOOP 
 GETTOG   SX6    1
          SA6    REPGATE     TURN ON REPEAT GATE
          SA1    REPCNT 
          IX6    X1-X6       DECREMENT REPEAT CNT BY 1
          SA6    A1 
          NZ     X1,GATERP
          SX7    83          0 REPEAT COUNT = 1 
          SA1    DPLIST 
          SA7    DIAGNBR
          RJ     DIAG 
          SX1    B0 
 GATERP   SX2    2047 
          IX1    X2-X1
          PL     X1,REPON 
          SX6    B0          USE 0 REPEAT COUNT 
          SA6    REPCNT      SET REPEAT COUNT TO MAX
          SX6    1
          SA6    PICTUEF     SET EXCESS LENGTH FLAG 
          EQ     GETBYT      GET NEXT BYTE
 NONNUM   SX7    84          NON-NUMERIC IN REPEAT COUNT
          SA1    DPLIST      NON-NUMERIC CHAR IN PARENS 
          SA7    DIAGNBR
          RJ     DIAG 
          SX6    B0 
          SA6    REPCNT 
          EQ     GETTOG 
          EJECT 
* 
* GETBYT CONSTANTS
* 
 GETBY60  DATA   60 
 GETBYL1  DATA   40000000000000000000B
* 
*  GETBYT VARIBLES
* 
 REPGATE  BSSZ   1           REPEAT GATE
 CHARNUM  BSSZ   1           CURRENT CHAR NUMBER
 WORDNUM  BSSZ   1           CURRENT WORD NUMBER
 REPCNT   BSSZ   1           REPEAT COUNTER 
 PICTCCH  BSSZ   1           CURRENT CHAR TEMP
 PICTCCB  BSSZ   1           CURRENT CHAR BIT 
 CHTEMP   BSSZ   1           PREVIOUS CHAR TEMP 
 NONMURL  BSSZ   1
          EJECT 
* 
*  PRECEDENCE TABLE 
* 
*         THE FORMAT OF A PRECEDENCE TABLE ENTRY IS:  
* 
*         VFD    22/0,23/A,1/D,1/E,1/I,6/X,6/Y
* 
*         A = A*1000B  IS A MASK AGAINST THE PICTURE HISTORY TO 
*                DETERMINE IF THIS CHARACTER IS ILLEGAL TO THE RIGHT
*                OF PREVIOSLY PROCESSED CHARACTERS. 
*         D = DECIMAL FLAG. 
*         E = EXTERNAL COUNT FLAG.
*         I = INTERNAL COUNT FLAG.
*         X = 4 BIT MURAL CODE FOR THIS CHARACTER.
*         Y = 59-Y IS THE BIT IN THE PICTURE HISTORY CORRESPONDING TO 
*                THIS CHARACTER.
 PICTDSL  DATA   53B
 PRECTAB  DATA   70470B            DUMMY       CODE-00
          DATA   0375177770134B    A                01
          DATA   0200037621447B    B                02
          DATA   3200177620253B    C                03
          DATA   3200177620354B    D                04
          DATA   70470B            E                05
          DATA   70470B            F                06
          DATA   70470B            G                07
          DATA   70470B            H                10
          DATA   70470B            I                11
          DATA   70470B            J                12
          DATA   70470B            K                13
          DATA   70470B            L                14
          DATA   70470B            M                15
          DATA   70470B            N                16
          DATA   37621550B         O                17
          DATA   3431037740041B    P                20
          DATA   70470B            Q                21
          DATA   3000157620255B    R                22
          DATA   3777777700037B    S                23
          DATA   70470B            T                24
          DATA   70470B            U                25
          DATA   3141037000040B    V                26
          DATA   70470B            W                27
          DATA   0375177770135B    X                30
          DATA   70470B            Y                31
          DATA   3410037770642B    Z                32
          DATA   37621550B         0                33
          DATA   70470B            1                34
          DATA   70470B            2                35
          DATA   70470B            3                36
          DATA   70470B            4                37
          DATA   70470B            5                40
          DATA   70470B            6                41
          DATA   70470B            7                42
          DATA   70470B            8                43
          DATA   37670136B         9                44
          DATA   3000177621152B    +                45
          DATA   3000177621051B    -                46
          DATA   3420037770743B    *                47
          DATA   0000037621745B    /                50
          DATA   70470B            (                51
          DATA   70470B            )                52
          DATA   3577037721244B    $                53
          DATA   70470B            =                54
          DATA   70470B            BLANK            55
          DATA   0000037621645B    ,                56
          DATA   3141037621346B    .                57
          DATA   70470B            IDENTITY SIGN    60
          DATA   70470B            OPEN BRACKET     61
          DATA   70470B            CLOSE BRACKET    62
          DATA   70470B            COLON            63
          DATA   70470B            INEQUALITY SIGN  64
          DATA   70470B            HYPHEN           65
          DATA   70470B            LOGICAL OR       66
          DATA   70470B            LOGICAL AND      67
          DATA   70470B            ARROW UP         70
          DATA   70470B            ARROW DOWN       71
          DATA   70470B            LESS THAN        72
          DATA   70470B            GREATER THAN     73
          DATA   70470B            LESS THAN OR =   74
          DATA   70470B            GREATER THAN OR =75
          DATA   70470B            LOGICAL NOT      76
          DATA   70470B            SEMICOLON        77
          DATA   3141000040060B    P(TRAILING)     100
          DATA   3000167620361B    B OF DB          101 
          DATA   70470B            DUMMY           102
          DATA   3430037670544B    $(REPEATED)      103 
          DATA   70470B            DUMMY           104
          DATA   3430737770552B    +(REPEATED)      105 
          DATA   3430677770551B    -(REPEATED)      106 
 PICTEMP  BSSZ   31          BUFFER FOR BUILDING MURAL
 SQASHBU  BSS    0           INFO ABOUT PICTURED ITEM 
          BSSZ   1           EXTERNAL COUNT 
          BSSZ   1           NR DIGITS TO RIGHT OF DECIMAL POINT
          BSSZ   1           BWZ CLAUSE 
          BSSZ   1           CLAUSE EDITING FLAGS 
          BSSZ   1           MURAL LENGTH IN WORDS
          BSSZ   1           NR INSERT CHARS
          BSSZ   1           SIGN FLAG
          BSSZ   1           CLASS
          BSSZ   1           NZ IF +,-,DB,CR WAS PRESENT
          EJECT 
* 
* PACK MURAL
*         EXPECTS CHAR CODE IN X1 
*         PACKS BYTE IN PICTEMP BUFFER
* 
 PAKMRL   DATA   0
          SA2    NONMURL
          NZ     X2,PAKMRL
          SB1    X1          CHAR CODE TO (B1)
          SA1    PAKMRPL
          SB2    X1          (B2) = RELATIVE LOC OF CURRENT WORD IN MUR 
          SA1    PRECTAB+B1  PICK UP PRECEDENCE TABLE ENTRY 
          LX1    54 
          MX2    4
          LX2    4
          BX6    X1*X2       MASK OUT ALL BUT MURAL CODE
          SA1    PAKMBYT
          IX1    X1-X6       IS MURAL BYTE EQUAL TO PREVIOUS
          ZR     X1,PAKMRP   YES-GOTO REPEAT
          SA6    PAKMBYT     NO-SAVE CURRENT BYTE 
          SA1    PAKMSAM
          SA2    PAKMRL5
          IX6    X1-X2
          SA6    PAKMSAM     DECREMENT SHIFT AMOUNT BY 5
          SB1    X6          SET(B1) TO SHIFT AMOUNT
          SA2    PAKMRL5
          IX2    X6-X2       AT LEAST 5 BITS LEFT 
          NG     X2,PAKMINC  NO-GOTO STORE END AND INC
 PAKMRLS  SA2    PAKMBYT     PICK UP CURRENT BYTE 
 PAKMRLP  SA1    PICTEMP+B2  PICK UP CURRENT MURAL WORD 
          LX2    B1,X2       SHIFT TO POSITION
          BX6    X1+X2       OR CURRENT BYTE TO MURAL WORD
          SA6    PICTEMP+B2  REPLACE CURRENT MURAL WORD 
          EQ     B0,B0,PAKMRL RETURN
 PAKMINC  SA1    PAKMEOW     PICK UP END OF WORD CODE 
          LX1    B1,X1       SHIFT TO POSITION
          SA2    PICTEMP+B2  PICK UP CURRENT MURAL WORD 
          BX6    X1+X2       OR EOW TO CURRENT WORD 
          SA6    PICTEMP+B2  REPLACE CURRENT MURAL WORD 
          SA1    PAKMRPL
          SA2    PICTUR1
          IX6    X1+X2       INCREMENT CURRENT WORD POINTER 
          SA6    PAKMRPL
          SX1    X6-31
          PL     X1,PAKMRL1  IF MURAL EXCEEDS 31 WORDS
          SB2    X6          SET(B2) TO NEW PICK UP LOC 
          SA1    PAKMR54
          SX6    X1 
          SA6    PAKMSAM     INIT SHIFT AMOUNT
          SB1    X1          SET(B1) TO NEW SHIFT AMOUNT
          SX6    B0 
          SA6    PICTEMP+B2  ZERO NEW WORD
          EQ     B0,B0,PAKMRLS GOTO SHIFT AND OR
 PAKMRP   SA1    PAKMSAM
          SA3    PICTUR6
          IX3    X1-X3
          PL     X3,PAKMRPT  LESS THAN 6 BITS LEFT-NO 
          SA2    PAKMRL5     YES
          SA1    PAKMSAM
          IX2    X1-X2
          SB1    X2 
          EQ     B0,B0,PAKMINC GOTO STORE EOW AND INC 
 PAKMRPT  SA1    PAKMSAM
          SA2    PICTUR1
          IX6    X1-X2
          SA6    PAKMSAM
          SB1    X6 
          EQ     B0,B0,PAKMRLP
  
 PAKMRL1  SX6    1
          SA6    NONMURL     SET MURAL TOO LARGE FLAG 
          EQ     PAKMRL 
  
* 
*  PACK MURAL VARIBLES
* 
 PAKMSAM  BSSZ   1           SHIFT AMOUNT 
 PAKMBYT  BSSZ   1           PREVIOUS BYTE
 PAKMRPL  BSSZ   1           CURRENT LOCATION IN CHAR-MURAL B 
* 
* PACK MURAL CONSTANTS
* 
 PAKMEOW  DATA   4                    END OF WORD CODE
 PAKMRL5  DATA   5                    DECIMAL 5 
 PAKMR54  DATA   55                   DECIMAL 55
          END 
