*DECK     OUTPTK
          IDENT  OUTPTK 
 OUTPTK   RPVDEF
          SST 
          LIST   F
  
 OUTPTK   TITLE  OUTPTK -    COMBINED 'KODER'-'OUTPTC' FACILITY 
  
 .TEST    IFNE   TEST,0 
          MACRO  FORM,NAME
NAME      BSS    0
NAME()    SET    *
 FORM     ENDM
  
INVOKE    MACRO  FORM 
          SB7    FORM 
          RJ     RETURN 
          RMT 
          IF     -DEF,FORM(),1
          ERR    FORM NOT INVOKABLE, CHECK CROSS REFERENCES AND CHANGE
          RMT 
INVOKE    ENDM
 LOCN     SPACE  3
LOCN      MACRO  CHAR,ADDRESS 
CHARNOW   MICRO  1,0, CHAR
LASTCHAR  MICRO  2,1, CHAR
          IFC    EQ, "LASTCHAR"  ,1 
CHARNOW   MICRO  1,0, 1R_CHAR 
* 
 .A       IFLE   "CHARNOW",LASTCHAR 
          ERR    (CHAR) - FORMAT CHARACTER OUT OF SEQUENCE "SEQUENCE".
 .A       ELSE
 .B       DUP    "CHARNOW"-LASTCHAR-1 
          IFEQ   $,59,2 
          JP     ILLEGAL
          SKIP   1
-         JP     ILLEGAL
 .B       ENDD
 .A       ENDIF 
* 
          IFEQ   $,59,2 
          JP     ADDRESS
          SKIP   1
-         JP     ADDRESS
* 
 LASTCHAR SET    "CHARNOW"
 LOCN     ENDM
  
  
LASTCHAR  SET    -1 
 BSS      OPSYN  BSSZ 
          TITLE                  SYMBOL AND STORAGE DEFINITION
DIGMASK   DATA   00000000077740000000B
 NEEDW    BSS    0
          ECHO   2,L=(A,I,L,O,R,T,Z)
          POS    60-1R_L
          VFD    1/1
          VFD    *P/0 
TEMPA0.   BSS    1
APLIST    BSS    1
R         BSS    1               FIELD DESCRIPTOR REPEAT COUNT
W         BSS    1               WIDTH
GOCELL    BSS    1
GRC       BSS    1               GROUP REPEAT COUNT FOR CURRENT GROUP 
FORMAT    BSS    1
LEVEL     BSS    1
GROUPADR  BSS    1
HCOUNT    BSS    1
MAXLEVEL  EQU    2               THE MAXIMUM NUMBER OF GROUP LEVELS 
LEVSTACK  BSS    MAXLEVEL+1      STORAGE FOR GROUP LEVEL STACK
UNIT      BSS    1               HOLDS I/O UNIT DESIGNATION 
MAXCOUNT  BSS    1
 RESCAN   BSS    1               HOLDS LEVEL STACK INFORMATION FOR
                                   RESCANNING THE FORMAT WHEN THE 
                                   TERMINAL RIGHT PARENTHESIS IS REACHED
PARENFLG  BSS    1
RESETLIN  BSS    1
RESETFMT  BSS    1
RESETX3   BSS    1               TEMPORARY STORAGE USED BY 'SLASH'
RESETITM  BSS    1               TEMPORARY STORAGE USED BY 'SLASH'
  
OUTADDR   VFD    60/BUFFER       BEGINNING OF OTUPUT LINE 
          USE    /LINE/ 
 CONTINUE BSSZ   1           * EXPLICIT LINE TERMINATION MODE FLAG *
          VFD    12/2000B,48/BUFFER        VALUE TO SET TO FOR CONT MODE
BUFFER    BSSZ   16 
          USE    *
  
FORMS     BSS    0
          LOCN   A,AFORMP        ALPHANUMERIC (LEFT JUSTIFIED)
          LOCN   H,HFORM         HOLLERITH STRING PROCESSING (COUNT)
          LOCN   I,IFORM         INTEGER CONVERSION 
          LOCN   L,LFORM
          LOCN   O,OFORM         OCTAL CONVERSION 
          LOCN   R,RFORM         ALPHANUMERIC (RIGHT JUSTIFIED) 
          LOCN   T,TFORM         TABULATE (TEXT EDITING)
          LOCN   X,XFORM         SPACING  (TEXT EDITING)
          LOCN   Z,ZFORM     OCTAL CONVERSION ( LEADING BLANK FILL )
          LOCN   *,DELIM         HOLERITH STRING (DELIMITED)
          LOCN   /,SLASH         TERMINATE CURRENT RECORD 
          LOCN   1R(,LPFORM      BEGIN FIELD DESCRIPTOR GROUPING
          LOCN   1R),RPFORM      END FIELD DESCRIPTOR GROUPING
          LOCN   55B,RETURNX
          LOCN   (,),NEXTDESC    FIELD DESCRIPTOR SEPARATOR 
          LOCN   64B,DELIM       HOLLERITH STRING (DELIMITED) 
          TITLE                  INITIALIZATION INTERFACE 
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                O U T C I . -- INITIAL ENTRY POINT                    *
*                                                                      *
*                                                                      *
*                SAVE THE FORMAT ADDRESS, THE UNIT NUMBER AND SETUP    *
*             FOR PROCESSING THE BEGINNING OF AN I/O SEQUENCE.         *
*                                                                      *
*                                                                      *
************************************************************************
          SPACE  1
OUTCI.    ENTRY.
          SB1    1
          SX6    A0 
          SA2    A1+B1           GET APLIST FORMAT WORD.
          SA6    TEMPA0.         SAVE FOR LATER RESTORATION.
          SX7    B1 
          SX6    X2 
          BX4    X6 
          SA7    GRC             SET THE GROUP REPEAT COUNT 'GRC' TO ONE
                                   FOR THE OUTER PARENTHESIS LEVEL. 
          SPACE  1
          SA6    FORMAT          SAVE THE FORMAT PARAMETER ADDRESS IN 
                                   'FORMAT'.
          SPACE  1
          LX2    2               DETERMINE THE ADDRESS OF THE FIRST WORD
          NG     X2,INIT.1         OF THE FORMAT FROM THE 'VAR' BIT IN
          IX4    X6+X7             THE APLIST ENTRY.  IF THE BIT IS NOT 
                                   SET, THE ADDRESS IS INCREMENTED BY 1 
                                   TO YIELD THE TRUE FORMAT POINTER.
          SPACE  1
INIT.1    SX3    X1              DETERMINE THE UNIT NUMBER OF THE FILE
          PL     X1,INIT.2         TO BE ACCESSED.  IF THE 'VAR' BIT IS 
          SA3    X1                SET, THE ADDRESS POINTS TO A WORD
                                   CONTAINING THE UNIT NUMBER.
                                   OTHERWISE THE UNIT NUMBER IS 
                                   CONTAINED IN THE APLIST WORD ENTRY.
          SPACE  1
INIT.2    SX6    A1+2 
          SA6    APLIST          SAVE THE APLIST POINTER FOR LATER
                                   PROCESSING OF THE LIST ITEMS.
          SPACE  1
          BX6    X3 
          SX5    60-2*6          SET THE INITIAL SHIFT COUNT FOR THE
          SB2    X5                FORMAT TO POINT JUST BEYOND THE
                                   INITIAL LEFT PARENTHESIS.
          SA6    UNIT              (SAVE THE UNIT DESIGNATION.) 
          LX5    18 
          IX6    X5+X4
          SA2    X4              FETCH THE FIRST FORMAT WORD. 
          SB6    60 
          SA6    GROUPADR        SAVE THE POINTERS TO THE OUTER 
                                   PARENTHESIS GROUP IN 'GROUPADR'. 
          SA5    OUTADDR
          LX6    18 
          IX7    X6+X7
          SA7    LEVSTACK        SETUP THE INITIAL LEVEL STACK ENTRY--
          SA7    RESCAN            THE LEVEL STACK CONTAINS THE 
                                   NECESSARY INFORMATION FOR RESTARTING 
                                   THE FORMAT SCAN AT THE BEGINNING OF
                                   A PARENTHESIS GROUP, THE ZERO LEVEL
                                   ENTRY MUST THEREFORE CONTAIN THE 
                                   INFORMATION FOR RESTARTING THE FORM
                                   SCAN WHEN THE FINAL RIGHT PARENTHESIS
                                   IN THE FORMAT IS ENCOUNTERED.  THE 
                                   INFORMATION FOR THE ZERO ENTRY IS
                                        SHIFTCT = 48, POSITION AFTER '('
                                        WORD    = ADDRESS OF FIRST
                                                  FORMAT WORD 
                                        GRC    = 1, REMAINING REPEAT
                                                  COUNT FOR GROUP 
          SA3    CONTINUE 
          PX5    X5 
          BX6    X6-X6
          SA6    LEVEL           INITIALIZE THE LEVEL NUMBER FOR THE
                                   LEVEL STACK. 
          SPACE  1
          SB4    B0              SET THE ITEM COUNT TO ZERO 
          SA6    PARENFLG        TURN OF THE TERMINAL RIGHT PAREN FLAG
          SPACE  1
          ZR     X3,INIT.3       IF THE PROCESSING MODE IS 'EXPLICIT
          SA4    MAXCOUNT          LINE TERMINATION' THEN CONTINUE THE
          LX5    X3                LAST LINE WHERE THE PRECEDING WRITE
          BX6    X4                STATEMENT FINISHED (I.E. IF
                                   'CONTINUE' IS NON-ZERO THEN IT 
                                   CONTAINS THE LINE INITIALIZING 
                                   INFORMATION, 'MAXCOUNT' SHOULD REMAIN
                                   UNCHANGED IF 'CONTINUE' IS NON-ZERO).
          SPACE  1
INIT.3    SA6    MAXCOUNT        SET THE MAXIMUM LENGTH ATTAINED FOR THE
                                   LINE (IF A TAB BACKWARD HAS OCCURRED)
          SPACE  1
          UX0    X5,B3           SET THE LINE POSITION POINTERS AND THEN
          ZR     NEXTDESC          GO TO 'NEXTDESC' TO BEGIN PORCESSING.
          EJECT 
**        OUTCR. - ITEM CONVERSION
*                                                                      *
*         REGISTER CONVENTIONS --                                      *
*                                                                      *
*         B0 -- 0             A0 -- UNUSED        X0 -- OUTPUT WORD    *
*         B1 -- 1             A1 -- DATA ADDRESS  X1 -- DATA ITEM      *
*         B2 -- FORMAT SHIFT  A2 -- FORMAT ADDR   X2 -- FORMAT WORD    *
*         B3 -- BITS FILLED   A3 -- SCRATCH       X3 -- SPECIAL HOLD   *
*         B4 -- ITEM COUNT    A4 -- SCRATCH       X4 -- SCRATCH        *
*         B5 -- SCRATCH       A5 -- SCRATCH       X5 -- SCRATCH        *
*         B6 -- 60            A6 -- SCRATCH       X6 -- SCRATCH        *
*         B7 -- SCRATCH       A7 -- SCRATCH       X7 -- SCRATCH        *
          SPACE  1
OUTPTCX   PX6    X0,B3           SAVE THE CURRENT POINTERS TO THE OUTPUT
          SX5    A2                LINE AND THE FORMAT. 
          SA6    RESETLIN 
          PX7    X5,B2
          SB5    B1 
          SA7    RESETFMT 
          SA2    TEMPA0.
          SB2    B1 
          SA0    X2 
          SPACE  1
          SA2    APLIST 
          SA3    X2              OBTAIN APLIST ITEM WORD ENTRY. 
          SPACE  1
          SB1    -B1             PRESET IN CASE OF TERMINAL CALL. 
          NZ     X3,PRESET       IF NOT END OF I/O PARAMETER LIST.
          PL     X3,PRESET.2       ELSE GO TO 'PRESET.2' TO HANDLE THE
                                   END OF I/O LIST PROCESSING.
          EQ     OUTCI. 
  
 OUTCR.   ENTRY.                   ENTRY POINT FOR INTERRUPTED I/O LIST 
          SA2    APLIST          MAKE THINGS LOOK AS IF THERE WAS NOT AN
          SA5    OUTCR.            INTERRUPTION.
          LX7    X5 
          SX2    A1 
          SA7    OUTCI. 
          BX3    X1 
          SB1    -1 
  
  
 PRESET   ZR     X3,PRESET.1       IF TERMINAL CALL 
          IX4    X3+X3
          SB1    X3                (B1) = DATA ITEM ADDRESS 
          PL     X4,PRESET.1       IF ITEM IS ^ F.P.
          SPACE  1
          AX4    1
          MX0    60-6 
          BX6    -X0*X4 
          LX4    60-6 
          SB3    X6 
          SA5    A0+B3           COMPUTE THE DATA ITEM ADDRESS BY ADDING
          SB6    X4                THE FP OFFSET TO THE APPROPRIATE FP
          SB1    X5+B6             ADDRESS IN THE SUBROUTINE APLIST.
          SPACE  1
PRESET.1  SX7    X2+1            INCREMENT THE APLIST POINTER, AND SET
          AX3    24                THE ITEM COUNT INTO B2.  A ZERO ITEM 
          SA7    A2                COUNT WILL BE TREATED AS AN ITEM 
          SB2    X3                COUNT OF 1.
          NZ     B2,PRESET.2
          SB2    1
          SPACE  1
PRESET.2  SA5    RESETLIN 
          SA4    RESETFMT 
          PL     B1,SETUP.1      IF THIS IS NOT A FINAL ENTRY THEN GO 
          SB2    B1                TO 'SETUP.1', OTHERWISE SWITCH THE 
          SB1    -B1               FINAL INDICATOR FOR A LATER CHECK. 
          SPACE  1
SETUP.1   SA1    B1-1            SET THE BASE DATA ITEM ADDRESS (I.E. 
                                   POINT TO THE WORD IMMEDIATELY PRIOR
                                   TO THE SET OF DATA ITEMS). 
          SPACE  1
          UX0    X5,B3           SETUP THE POINTERS TO THE LINE.
          SA2    X4              PICK UP THE CURRENT FORMAT WORD. 
          SB4    B2              SETUP THE COUNT OF THE NUMBER OF ITEMS 
                                   TO CONVERT.
          SB1    1
          UX4    X4,B2           SETUP THE FORMAT SHIFT COUNT POINTER9
          SB6    60 
          SA5    PARENFLG 
          PL     B4,INTER        IF THIS IS AN INTERMEDIATE ENTRY THEN
                                   GO TO !INTER' TO ENTER THE 
                                   PROCESSING CYCLE.
          SA5    CONTINUE 
          SA4    OUTADDR
          NZ     X5,SETUP.2      IF THE PROCESSING MODE IS 'EXPLICIT
                                   LINE TERMINATION' THEN GO TO 
                                   'SETUP.2'. 
          SPACE  1
          SA5    MAXCOUNT        OTHERWISE INVOKE 'SLASH' TO DUMP THE 
          IX3    X0-X4             CURRENT OUTPUT LINE IF IT IS NOT 
          SX6    X3+B3             EMPTY. 
          BX7    X6+X5
          ZR     X7,OUTCI.       WHEN (IF NECESSARY) THE OUTPUT LINE HAS
          INVOKE SLASH           BEEN DUMPED, RETURN TO THE CALLER. 
          EQ     OUTCI. 
          SPACE  1
SETUP.2   PX6    X0,B3           SINCE 'EXPLICIT LINE TERMINATION' IS IN
          NO                       FORCE, SAVE THE CURRENT LINE POINTERS
          SA6    CONTINUE          AND  RETURN TO THE CALLER. 
          EQ     OUTCI. 
          SPACE  1
INTER     BX7    X7-X7
          SA7    A5              CLEAR THE PAREN FLAG.
          ZR     X5,IFNOMORE     GO TO 'IFNOMORE' IF THE LAST ENTRY WAS 
                                   NOT STOPPED BY THE TERMINAL PAREN, 
          EQ     NEXTDESC 
          TITLE                  A -, R - FORMAT PROCESSING SECTIONS
************************************************************************
*                                                                      *
*                       R - FORMAT PROCESSING                          *
*                                                                      *
*                CONVERT THE R-FORM DATA ITEM INTO A-FORM AND THEN USE *
*             THE A-FORMAT PROCESSING SECTION TO PROCESS THE ITEM.     *
*                                                                      *
************************************************************************
          SPACE  1
RFORM     FORM
          SB5    X6                IF THE FIELD WIDTH IS LESS THE ELEVEN
          LE     B5,B6,RFORM.1       CHARACTERS, THEN GO TO RFORM.1,
          SX6    B5-B6             OTHERWISE CALL SPACE TO SPACE
          CALL   SPACE               THE EXCESS NUMBER OF POSITIONS 
          SX6    B6 
RFORM.1   SB7    X6                CALCULATE THE SHIFT COUNT NECESSARY T
          SB5    B6-B7             TRANSFORM THE DATA ITEM INTO A-FORM
          LX1    X1,B5             AND THEN PERFORM THE TRANSFORMATION. 
          EQ     AFORM
  
************************************************************************
*                                                                      *
*                       A - FORMAT PROCESSING                          *
*                                                                      *
*                IF THE NUMBER OF CHARACTERS TO BE TRANSMITTED IS      *
*             GREATER THAN TEN, CALL SPACE TO INSERT THE CORRECT       *
*             NUMBER OF BLANKS THEN GO TO AFORM.                       *
*                THIS A FORMAT PROCESSOR IS CALLED ONLY WHEN THE       *
*             A-FORMAT ACTUALLY APPEARS IN THE USER FORMAT.  THE OTHER *
*             A-FORMAT PROCESSOR IS ONLY USED INTERNALLY.              *
  
 AFORMP   FORM
          SB5    X6                IF THE FIELD WIDTH IS LESS THE ELEVEN
          LE     B5,B6,AFORM         CHARACTERS, THEN GO TO AFORM,
          SX6    B5-B6             OTHERWISE CALL SPACE TO SPACE
          CALL   SPACE               THE EXCESS NUMBER OF POSITIONS 
          SX6    B6 
  
************************************************************************
*                                                                      *
*                       A - FORMAT PROCESSING                          *
*                                                                      *
*                IF THE NUMBER OF CHARACTERS TO BE TRANSMITTED FROM    *
*             THE A-FORM DATA WILL FIT INTO THE SPACE REMAINING IN THE *
*             CURRENT OUTPUT WORD, THEN THE SPACE IN THE OUTPUT WORD   *
*             NECESSARY TO ACCOMODATE THE A-FORM DATA IS CLEARED AND   *
*             THE A-FORM DATA INSERTED.  IF NOT ENOUGH SPACE IS        *
*             AVAILABLE IN THE CURRENT OUTPUT WORD FOR THE A-FORM      *
*             DATA, THEN THE DATA IS SPLIT TO OCCUPY THE END OF THE    *
*             CURRENT OUTPUT WORD AND THE BEGINNING OF THE NEXT        *
*             OUTPUT WORD.                                             *
*                                                                      *
************************************************************************
          SPACE  1
AFORM     FORM
          SB5    B6-B3           IF THE A-FORM DATA MUST BE SPLIT TO
          SB7    X6                OCCUPY TWO OUTPUT WORDS THEN GO
          LT     B5,B7,AFORM2WD    TO 'AFORM2WD'. 
          SPACE  1
AFORM.1   MX4    1               FORM THE MASK NECESSARY TO EXTRACT 
          SB7    B7-B1             THE A-FORM DATA AND INSERT IT INTO 
          SA5    X0                THE OUTPUT WORD. 
          AX7    X4,B7
          BX6    X7*X1             (EXTRACT THE A-FORM DATA)
          LX5    X5,B3
          SB7    B3+B7
          BX4    -X7*X5            (CLEAR SPACE IN THE OUTPUT WORD) 
          SB3    B7+B1             (INCREMENT THE COUNT OF BITS IN THE
                                   CURRENT OUTPUT WORD) 
          SPACE  1
          BX6    X4+X6             (INSERT THE A-FORM DATA, THE BOOLEAN 
                                   UNIT MUST BE USED IN CASE AN ENTIRE
                                   OUTPUT WORD CONSISTS OF SEMI-COLONS--
                                   SINCE THE OUTPUT WORD WOULD BECOME 
                                   POSITIVE ZERO--NOT MINUS ZERO--IF
                                   THE LONG ADD UNIT IS USED.)
          LX7    X6,B5
          SA7    A5 
          ZR     RETURNX         GO TO 'RETURNX'. 
          SPACE  2
AFORM2WD  MX4    1               EXTRACT THE NUMBER OF CHARACTERS IN
          SB3    B3-B1             A-FORM NECESSARY TO FILL THIS OUTPUT 
          LX1    X1,B5             WORD.
          SB7    B7-B5
          SB5    B6 
          SA5    X0 
          AX7    X4,B3
          BX6    -X7*X1 
          SB3    B0 
          SX0    X0+B1
          BX5    X7*X5           CLEAR SPACE IN THE CURRENT OUTPUT WORD 
                                   TO ACCOMODATE THE AFORM DATA.
          SPACE  1
          BX6    X5+X6
          SA6    A5              APPEND THE AFORM DATA TO THE CURRENT 
          ZR     AFORM.1           OUTPUT WORD AND THEN GO TO 'AFORM.1' 
                                   TO PROCESS THE REMAINING CHARACTERS. 
          TITLE                  I - FORMAT PROCESSING SECTION
************************************************************************
*                                                                      *
*                       I - FORMAT PROCESSING                          *
*                                                                      *
*                CONVERT THE BINARY INTEGER DATA ITEM TO DECIMAL       *
*             REPRESENTATION, RIGHT-JUSTIFIED WITHIN THE SPECIFIED     *
*             FIELD (WITH BLANK FILL IF NECESSARY).  AFTER THE DECIMAL *
*             FORM HAS BEEN OBTAINED GO TO THE A-FORMAT PROCESSING     *
*             SECTION TO INSERT THE CHARACTERS INTO THE OUTPUT LINE.   *
*                                                                      *
************************************************************************
          SPACE  1
IFORMCON  DATA   10H          ,10.0P0,0.100000000001P48 
          SPACE  1
IFORM     FORM
          SB5    X6              IF THE FIELD WIDTH IS LESS THAN ELEVEN 
          LE     B5,B6,IFORM.1     CHARACTERS THEN GO TO 'IFORM.1', 
          SPACE  1
          SX6    B5-B6           OTHERWISE CALL 'SPACE' TO SPACE THE
          CALL   SPACE             EXCESS NUMBER OF POSITIONS (I.E. IF
          SB5    B6                THE FIELD WIDTH IS TWELVE CHARACTERS 
                                   THEN SPACE TWO CHARACTERS).
          SPACE  1
 IFORM.1  BSS    0
          PL     X1,IFORM.12     IF NEGATIVE NUMBER COMPLEMENT AND
          BX1    -X1               CHANGE TO POSITIVE NUMBER
          SB6    B0                AND SET FLAG 
 IFORM.12 BSS    0
          PX1    X1              CONVERT THE INTEGER TO FLOATING
          SB7    B5                POINT FORM (UN-NORMALIZED) AND FETCH 
          SA5    IFORMCON          THE CONVERSION CONSTANTS.
          BX7    X5 
          SA4    A5+B1
          SA5    A4+B1
          SPACE  1
IFORM.2   DX6    X5*X1           CONVERT THE BINARY VALUE, FORMING THE
          FX1    X5*X1             DECIMAL REPRESENTATION A DIGIT AT A
          SB5    B5-6              TIME (FROM RIGHT TO LEFT). 
          FX6    X4*X6             METHOD: LET 'B' BE THE BINARY VALUE
          SX6    X6+1R0-1R           1)  XD = B*0.1   (FRACTIONAL PART) 
          IX7    X6+X7               2)  B  = B*0.1   (INTEGRAL PART) 
          NX6    X1                  3)  D  = XD*10.0 (DECIMAL DIGIT) 
          LX7    -6 
          NZ     X6,IFORM.2 
          NE     B6,B0,IFORM.3
          SX5    1R--1R 
          SB6    60                RESTORE B6 
          IX7    X7+X5
 IFORM.3  BSS    0
          SPACE  1
          SX6    B7              CALL 'AFORM' TO APPEND THE PROPERLY
          SB5    B6-B5             POSITIONED AND JUSTIFIED DIGITS. 
          LX1    X7,B5
          ZR     AFORM
          TITLE  L - FORMAT PROCESSING SECTION
************************************************************************
*        L - FORMAT PROCESSING                                         *
*        PRINTS A T IF THE LOGICAL VARIABLE HAS A VALUE OF TRUE, ELSE  *
*        PRINTS A F IF THE LOGICAL VARIABLE HAS A VALUE OF FALSE       *
************************************************************************
 LFORM    FORM
          SB5    X6              IF THE FIELD WIDTH IS LESS THAN
          LE     B5,B6,LFORM.1     ELEVEN CHARACTERS THEN GO TO LFORM.1 
  
          SX6    B5-B6             OTHERWISE CALL SPACE TO SPACE THE
          CALL   SPACE             EXCESS NUMBER OF POSITIONS 
          SB5    B6 
  
 LFORM.1  BSS    0
          SA5    IFORMCON          FILL WORD WITH BLANKS
          SX6    1RF-1R            F
          PL     X1,LFORM.2 
          SX6    1RT-1R            T
 LFORM.2  BSS    0
          SB7    B6-B5
          IX1    X6+X5
          LX1    X1,B7             SHIFT LETTER TO BOTTOM OF FIELD
          SX6    B5 
          EQ     AFORM
          TITLE                  O - FORMAT PROCESSING SECTION
************************************************************************
*                                                                      *
*                       O - FORMAT PROCESSING                          *
*                                                                      *
*                CONVERT THE BINARY DATA ITEM TO OCTAL FORM (ONLY THE  *
*             NUMBER OF DIGITS SPECIFIED THOUGH), BLANK FILLING IF     *
*             NECESSARY.                                               *
*                                                                      *
************************************************************************
          SPACE  1
OFORMCON  DATA   10H0000000000,0
          SPACE  1
 ZFORM    SA4    =1H
          SX7    1R0-1R 
          EQ     OFORM1 
  
 OFORM    SA4    =10H0000000000 
          MX7    0
  
 OFORM1   SA7    OFORMCON+1 
          BX7    X4 
          SA7    A7-B1
          SB7    X6 
          SB5    B6+B6
          LE     B7,B6,OFORM.3   IF THE WIDTH OF THE OCTAL FORMAT IS
                                   LESS THAN ELEVEN CHARACTERS THEN 
                                   GO TO 'OFORM.4'. 
          SPACE  1
          LE     B7,B5,OFORM.1   IF THE WIDTH IS BETWEEN ELEVEN AND 
                                   TWENTY CHARACTERS THEN GO TO 
                                   'OFORM.1', 
          SX6    B7-B5           OTHERWISE CALL 'SPACE' TO SKIP OVER
          CALL   SPACE             THE EXCESS POSITIONS AND THEN
          SX6    B6+B6             PROCESS AS A TWENTY DIGIT CONVERSION.
          SB7    B6+B6
          SPACE  1
OFORM.1   SB5    B7-B6           CONVERT THE BINARY VALUE TO TWENTY 
          MX7    60-3              OCTAL DIGITS, EXTRACTING TWO DIGITS
          BX4    X7                AT A TIME. 
          LX7    30 
          BX4    X7*X4
          IX3    X3-X3
          MX5    0
          SB7    B6 
          SPACE  1
OFORM.2   BX7    -X4*X1          EXTRACT TWO OCTAL DIGITS (THIRTY BITS
          AX1    3                 APART),
          SX6    X7+1R0            CONVERT THE DIGITS TO DISPLAY CODE 
          IX3    X3+X6             AND APPEND THEM TO THE ACCUMULATED 
          AX7    30                DIGITS.
          SX6    X7+1R0 
          IX5    X5+X6
          LX3    -6 
          SB7    B7-6 
          LX5    -6 
          GT     B7,B0,OFORM.2   CONTINUE UNTIL ALL DIGITS ARE PROCESSED
          SPACE  1
          BX1    X5              CALL 'AFORM' TO PLACE THE APPROPRIATE
          SX6    B5                DIGITS INTO THE OUTPUT LINE. 
          INVOKE RFORM
          BX1    X3 
          SX6    B6 
          INVOKE AFORM
          ZR     NEXTELEM        RETURN FOR THE NEXT ELEMENT. 
          SPACE  2
OFORM.3   AX6    1               IF TEN OR FEWER DIGITS ARE TO BE 
          SB5    X6+B1             CONVERTED THEN PERFORM THE CONVERSION
          SA5    OFORMCON          ONE DIGIT AT A TIME, FROM RIGHT TO 
          MX7    1                 LEFT.  LEADING ZERO DIGITS WILL BE 
          SB5    B6-B5             REPLACED BY THE CHARACTER WHICH IS 
          SA4    A5+B1             REPLICATED TEN TIMES IN 'OFORMCON' 
          AX7    X7,B5             (AND OF COURSE THIS MAY BE THE 
          BX1    -X7*X1            CHARACTER ZERO).  SEE THE DESCRIPTION
          SB5    X4                ABOVE FOR FUTHER DETAILS.
          SX3    B7 
          MX4    60-3 
          SPACE  1
OFORM.4   BX6    -X4*X1          EXTRACT ONE DIGIT. 
          AX1    3               SHIFT VALUE TO POSITION THE NEXT DIGIT.
          SX7    X6+B5           CONVERT THE DIGIT TO THE VALUE WHICH,
          IX5    X5+X7             WHEN ADDED TO 'OFORMCON', WILL BE THE
          SB7    B7-6              DISPLAY CODE FOR THE DIGIT.
          NO                       DECREMENT WIDTH. 
          LX5    -6              POSITION THE OCNVERTED DIGITS. 
          NZ     X1,OFORM.4      CONTINUE IF ANY NON-ZERO DIGITS REMAIN.
          SPACE  1
          SB5    B6-B7           POSITION THE CONVERTED DIGITS AND
          LX1    X5,B5             INVOKE 'AFORM' TO APPEND THE DIGITS
          SX6    X3                TO THE OUTPUT LINE.
          INVOKE AFORM
          ZR     NEXTELEM        RETURN FOR THE NEXT ELEMENT. 
          TITLE                  H - FORMAT PROCESSING SECITON
************************************************************************
*                                                                      *
*                                                                      *
*                       H - FORMAT PROCESSING                          *
*                                                                      *
*                                                                      *
************************************************************************
          SPACE  1
HFORM     SB7    X6 
          SB5    B2+6 
          LE     B7,B5,HFORM.2   IF THE CURRENT FORMAT WORD CONTAINS
                                   ALL OF THE HOLLERITH TEXT THEN GO
                                   TO 'HFORM.2'.
          SPACE  1
HFORM.1   SX7    B7-B5           POSITION THE HOLLERITH TEXT IN A-FORM
          SB7    B6-B5             FOR PROCESSING BY THE 'AFORM' SECTION
          LX1    X2,B7             (ALSO SET THE LENGTH OF THE TEXT 
                                   PORTION FOR 'HFORM').
          SPACE  1
          SX6    B5              SET THE LENGTH OF THE CHARACTERS TO BE 
                                   PROCESSED BY THE 'AFORM' SECTION.
          SPACE  1
          SA7    HCOUNT          SAVE THE LENGTH OF THE HOLLERITH STRING
                                   WHICH REMAINS TO BE TRANSMITTED. 
          SPACE  1
          INVOKE AFORM           INVOKE THE 'AFORM' PROCESSING SECTION, 
                                   BUT RETURN HERE TO COMPLETE THE
                                   H-FORMAT PROCESSING. 
          SPACE  1
          SA2    A2+B1           FETCH THE NEXT FORMAT WORD AND SET THE 
          SB5    B6                AVAILABLE STRING LENGTH TO SIXTY BITS
          SPACE  1
          SA5    HCOUNT          LOAD THE LENGTH OF THE REMAINING 
          SB7    X5                HOLLERITH TEXT TO BE TRANSMITTED AND 
          GT     B7,B5,HFORM.1     IF THIS FORMAT WORD WILL NOT 
                                   COMPLETELY SATISFY THE TRANSFER TEHN 
                                   GO TO 'HFORM.1'. 
          SPACE  1
HFORM.2   SB2    B5-B7           RESET THE FORMAT SHIFT COUNT,
          SB5    B6-B5             POSITION THE LAST TEXT SECTION (AND
          LX1    X2,B5           THE LENGTH OF THIS SECTION) AND
          SX6    B7              INVOKE THE 'AFORM' PROCESSING. 
          SB2    B2-6 
          INVOKE AFORM
          SPACE  1
          PL     B2,NEXTDESC     IF THE CURRENT FORMAT WORD HAS BEEN
          SA2    A2+B1             EXHAUSTED THEN FETCH THE NEXT WORD 
          SB2    B6+B2             AND ADJUST THE FORMAT POINTERS BEFORE
          ZR     NEXTDESC          RETURNING TO 'NEXTDESC'. 
          TITLE                  DELIM -- HOLLERITH STRING PROCESSING (D
,ELIMITER FORM) 
************************************************************************
*                                                                      *
*                                                                      *
*                HOLLERITH STRING PROCESSING (DELIMITER FORM)          *
*                                                                      *
*                                                                      *
************************************************************************
          SPACE  1
DELIM     SX3    B5              PLACE THE STRING DELIMITER INTO
          SB5    6                 REGISTER X5 AND 6 INTO REGISTER
                                   B5 FOR THE DURATION OF STRING
                                   PROCESSING.
          SPACE  1
DELIM.1   SB7    B6              INITIALIZE FOR ACCUMULATING UP TO TEN
          BX1    X1-X1             HOLLERITH CHARACTERS AT A TIME BEFORE
          MX7    60-6              INVOKING THE 'AFORM' PROCESSING. 
          SPACE  1
DELIM.2   AX4    X2,B2           EXTRACT THE NEXT CHARACTER FROM THE
          SB2    B2-B5             FORMAT, UPDATE THE FORMAT POINTERS,
          BX5    -X7*X4            AND IF THE END OF THE HOLLERITH
          IX6    X5-X3             STRING HAS BEEN REACHED THEN GO TO 
          PL     B2,DELIM.3        'DELIM.4'. 
          SB2    B2+B6             (RESET FORMAT POINTERS WHEN STEPPING 
          SA2    A2+B1             OVER A WORD BOUNDARY.) 
DELIM.3   ZR     X6,DELIM.4 
          SPACE  1
          BX1    X5+X1           OTHERWISE APPEND THE CHARACTER TO THE
          SB7    B7-B5             ACCUMULATED STRING AND GO TO 
          LX1    6                 'DELIM.2' IF TEN CHARACTERS HAVE NOT 
          GT     B7,B0,DELIM.2     YET BEEN ACCUMULATED.
          SX6    B6              SET THE 'AFORM' COUNT TO TEN CHARACTERS
          LX1    60-6              AND INVOKE THE 'AFORM' PROCESSING. 
          INVOKE AFORM
          SPACE  1
          SB5    6
          ZR     DELIM.1         REENTER THE CYCLE AT 'DELIM.1' TO
                                   INITIALIZE.
          SPACE  1
DELIM.4  SX6     B6-B7           SET THE COUNT OF ACCUMULATED CHARACTERS
         SB7     B7-B5
         LX1     X1,B7             AND INVOKE THE 'AFORM' PROCESSING IF 
         ZR      X6,NEXTELEM       THERE WERE ANY ACCUMULATED CHARACTERS
          INVOKE AFORM
          SPACE  1
          ZR     NEXTDESC        AFTER PROCESSING THE CHARACTERS (IF
                                   ANY) RETURN TO 'NEXTDESC' FOR THE
                                   THE NEXT FORMAT FIELD DESCRIPTOR.
          TITLE                  LEFT AND RIGHT PARENTHESIS PROCESSING S
,ECTION 
************************************************************************
*                                                                      *
*                       LEFT PARENTHESIS PROCESSING                    *
*                                                                      *
*                SAVE THE PREVIOUS GROUP INFORMATION (BEGINNING GROUP  *
*             ADDRESS AND GROUP REPEAT COUNT) IN THE LEVEL STACK AND   *
*             SET THE CURRENT BEGINNING GROUP ADDRESS AND GROUP REPEAT *
*             COUNT.  (IF THIS IS A LEVEL-1 GROUP, THEN ALSO SAVE THE  *
*             CURRENT INFORMATION FOR RESTART PURPOSES WHEN THE END OF *
*             THE FORMAT IS REACHED.)                                  *
*                                                                      *
************************************************************************
          SPACE  1
LPFORM    SA3    GROUPADR 
          SA5    GRC
          SX4    B2 
          LX3    18 
          SX6    A2 
          LX4    18 
          BX7    X4+X6
          SA4    LEVEL           (THE LEVEL NUMBER STORED IN 'LEVEL' IS 
                                   ONE LESS THAN THE GROUP LEVEL.)
          SPACE  1
          SA7    A3              SET THE BEGINNING ADDRESS OF THE 
                                   CURRENT FORMAT GROUP.
          BX6    X3+X5
          LX3    X7 
          SA5    R
          SA6    LEVSTACK+1+X4   SAVE THE PREVIOUS GROUP INFORMATION. 
          BX7    X5 
          SX6    X4+B1
          SA7    GRC             SET THE CURRENT GROUP REPEAT COUNT.
          SB7    X6 
          SA6    A4              INCREMENT THE CURRENT LEVEL NUMBER.
          SPACE  1
          NE     B7,B1,NEXTDESC  IF THE NEW GROUP LEVEL IS NOT LEVEL ONE
                                   THEN GO TO 'NEXTDESC', 
          SPACE  1
          LX3    18              OTHERWISE SAVE THE NEW GROUP REPEAT
          BX7    X3+X7             COUNT AND BEGINNING ADDRESS FOR
          LX6    3*18              POSSIBLE USE AS A RESTART POSITION 
          IX7    X6+X7             WHEN THE END OF THE FORMAT STRING IS 
          SA7    RESCAN            REACHED
          EQ     NEXTDESC 
          EJECT 
************************************************************************
*                                                                      *
*                   RIGHT PARENTHESIS PROCESSING                       *
*                                                                      *
*                                                                      *
************************************************************************
          SPACE  1
RPFORM    SA5    GRC
          MX7    59 
          IX6    X5+X7
          ZR     X6,RPFORM.1     IF THE GROUP REPEAT COUNT IS EXHAUSTED 
                                   THEN GO TO 'RPFORM.1'. 
          SPACE  1
          SA4    GROUPADR        OTHERWISE RESET THE FORMAT POINTERS TO 
          SA2    X4                THE BEGINNING OF THE CURRENT GROUP 
          AX4    18 
          SA6    A5 
          SB2    X4 
          ZR     NEXTDESC        GO TO 'NEXTDESC' FOR HTE NEXT FORMAT 
                                   DESCRIPTOR.
          SPACE  1
RPFORM.1  SA3    LEVEL
          ZR     X3,RPFORM.2     IF THIS IS THE END OF THE FORMAT THEN
                                   GO TO 'RPFORM.2'.
          SPACE  2
          SA4    LEVSTACK+X3     OTHERWISE RESET THE PARENTHESIS GROUP
          IX6    X3+X7             INFORMATION AND DECREMENT THE LEVEL
          SX7    X4 
          SA6    A3 
          AX4    18 
          SA7    A5 
          BX6    X4 
          SA6    GROUPADR 
          ZR     NEXTDESC        GO TO 'NEXTDESC' FOR THE NEXT FORMAT 
                                   DESCRIPTOR.
          SPACE  1
 RPFORM.2 SA3    CONTINUE 
          NZ     X3,RPFORM3  IF EXPLICIT CONTINUATION MODE
          INVOKE SLASH       OUTPUT THE CURRENT LINE
  
 RPFORM3  SA3    RESCAN      RESET THE FORMAT POINTERS AND THE CURRENT
          SX7    X3                CURRENT GROUP INFORMATION TO RESTART 
          AX3    18                THE FORMAT SCAN. 
          SA2    X3 
          BX6    X3 
          SA7    GRC
          AX3    18 
          SA6    GROUPADR 
          SB2    X3 
          AX3    18 
          BX6    X3 
          SA6    LEVEL
          GT     B4,B0,NEXTDESC  IF ANY MORE ITEMS REMAIN TO BE 
                                   CONVERTED THEN GO TO 'NEXTDESC', 
          SA7    PARENFLG 
          ZR     OUTPTCX         OTHERWISE EXIT.
          TITLE                  T - FORMAT PROCESSING SECTION
**        T - FORMAT PROCESSING 
          SPACE  1
TFORM     SA4    OUTADDR         CALCULATE THE CURRENT DISTANCE FROM THE
          IX0    X0-X4             BEGINNING OF THE LINE (IN BITS). 
          LX7    X0,B1
          SA5    =60.0
          LX0    5
          IX7    X0-X7
          LX0    X7,B1
          SB3    X0+B3             (CURRENT DISTANCE.)
          SA4    MAXCOUNT 
          SB5    X6                (POSITION TO TABULATE TO, IN BITS.)
          BX3    X3-X3
          GT     B5,B3,TFORM.2   IF A TAB FORWARD THEN GO TO 'TFORM.2'. 
          SPACE  1
          SB7    X4              SINCE THIS IS A TAB BACKWARD, SET
          LE     B3,B7,TFORM.1     'MAXCOUNT' TO THE MAXIMUM OF THE 
          SA6    A4                PREVIOUS VALUE OF 'MAXCOUNT' AND THE 
                                   CURRENT DISTANCE TO THE BEGINNING OF 
                                   THE LINE.
          SPACE  1
TFORM.1   PX4    X6              RESET THE LINE POINTERS TO REFLECT 
          FX7    X4/X5             THE POSITION TABULATED TO. 
          SA4    OUTADDR
          UX5    X7,B7
          LX7    X5,B7
          IX0    X7+X4
          LX5    X7,B1
          IX4    X5+X5
          LX7    6
          IX4    X7-X4
          SB7    X4 
          SB3    B5-B7
          ZR     X3,NEXTDESC     IF NO SPACING TO BE DONE THEN RETURN 
          BX6    X3              OTHERWISE CALL 'SPACE' TO COMPLETE THE 
          CALL   SPACE             TABULATION.
          ZR     NEXTDESC        RETURN FOR THE NEXT FORMAT DESCRIPTOR. 
          SPACE  1
TFORM.2   SB7    X4              IF THIS TAB FORWARD DOES NOT EXCEED THE
          LE     B3,B7,TFORM.3     MAXIMUM PREVIOUS LINE LENGTH ATTAINED
          SB7    B3                THEN GO TO 'IFORM.1' TO RESET THE
 TFORM.3  LE     B5,B7,TFORM.1     LINE POINTERS. 
          SPACE  1
          SX3    B5-B7           OTHERWISE PERFORM THE TAB BY HAVING THE
          BX6    X4                LINE POINTERS RESET TO THE MAXIMUM 
          SB5    X4                LINE LENGTH AND THEN SPACING OUT TO
          EQ     TFORM.1           THE POSITION TO BE TABULATED TO
  
**        X - FORMAT PROCESSING 
          SPACE  1
XFORM     FORM
          CALL   SPACE           CALL 'SPACE' TO SPACE THE SPECIFIED
          ZR     NEXTDESC          NUMBER OF POSITIONS AND THE RETURN.
          TITLE                  SLASH -- LINE OUTPUT PROCESSING
************************************************************************
*                                                                      *
*                                                                      *
*                S L A S H -- LINE OUTPUT PROCESSING                   *
*                                                                      *
*                                                                      *
************************************************************************
          SPACE  1
SLASH     FORM
          SX5    A2              SAVE THE CURRENT FORMAT POINTERS, THE
          PX6    X5,B2             THE HOLD REGISTER (REGISTER X3), 
          BX7    X3              AND THE DATA ITEM POINTERS.
          SX4    A1 
          SA6    RESETFMT 
          SA7    RESETX3
          PX6    X4,B4
          SB4    8*6
          SA5    X0 
          SA6    RESETITM 
          SA4    OUTADDR
          IX7    X0-X4           IF THE CURRENT LINE POSITION IS NOT THE
          SB5    B1+B1             MAXIMUM POSITION ATTAINED THEN RESET 
          LX6    X7,B5             THE LINE POINTERS TO POINT TO THE END
          LX7    6
          SA3    MAXCOUNT          OF THE LINE. 
          IX5    X7-X6
          SX7    X5+B3
          IX6    X7-X3
          PX3    X3 
          PL     X6,SLASH.1      GO TO 'SLASH.1' IF THE CURRENT POSITION
                                   IS THE FARTHEST. 
          SPACE  1
          SA5    =0.01666666667  (ONE SIXTIETH) 
          FX7    X5*X3             (INTEGRAL PORTION OF BITCOUNT/60)
          DX6    X5*X3             (FRACTIONAL PART OF BITCOUNT/60) 
          SA5    =60.000000001   (SIXTY WITH A ROUND FACTOR.) 
          IX3    X7+X4             (ADDRESS OF LAST WORD IN LINE) 
          SX0    X3 
          FX6    X5*X6             (SET REMAINDER OF BITCOUNT/60) 
          SB3    X6 
SLASH.1   SA3    =8L
          SB6    X4              (B6) = LINE FWA
          SA5    X0 
          LE     B3,B4,SLASH.2   IF THE LAST WORD OF THE LINE CONTAINS
                                   ENOUGH ROOM FOR THE LINE TERMINATOR
                                   THEN GO TO 'SLASH.2'.
          SPACE  1
          MX7    60-6            OTHERWISE FILL OUT THE WORD WITH A 
          BX5    X7*X5             BLANK AND MOVE THE POINTERS TO THE 
          SX7    1R                NEXT WORD (INDICATING THAT IT IS 
          IX6    X5+X7             EMPTY OF COURSE).
          SA5    X0+B1
          SB3    B0 
          SA6    X0 
          SPACE  1
SLASH.2   MX0    1               TERMINATE THE LINE WITH A ZERO BYTE AND
          SB5    B3-B1             BLANK FILL (IF NECESSARY). 
          AX0    X0,B5
          BX7    X0 
          SB7    B6-B1
          AX7    59 
          BX0    X7*X0
          BX5    X0*X5
          SB7    A5-B7           (B7) = LINE LENGTH (WORDS) 
          BX3    -X0*X3 
          IX6    X5+X3
          SA6    A5              (LAST WORD WITH TERMINATOR.) 
  
*         WRITE LINE TO FILE. 
*         AT PRESENT, FILE IS RESTRICTED TO -OUTPUT-. 
  
          LISTL  B6,B7           LINE TO SOURCE LISTING FILE
  
SLASH.4   SA5    RESETFMT        RESET THE FORMAT POINTERS, THE DATA
          UX7    X5,B2             POINTERS, THE SPECIAL REGISTER (X3), 
          SA2    X5                AND THE REGISTERS WITH CONSTANT VALUE
          SA4    RESETITM 
          SA5    TEMPA0.
          SA0    X5 
          UX7    X4,B4
          SA1    X4 
          SA3    RESETX3
          SB1    1
          SA5    OUTADDR
          SB6    60 
          BX6    X6-X6
          SX0    X5 
          SA6    MAXCOUNT 
          SB3    B0 
          ZR     RETURNX         RETURN TO THE CALLER.
          TITLE                  FORMAT ITEM-DATA ITEM CONTROL
NEXTELEM  SA5    R               REDUCE THE FIELD DESCRIPTOR REPEAT 
          MX4    59                COUNT AND ALSO DECREMENT THE COUNT 
          IX7    X5+X4             OF THE NUMBER OF DATA ITEMS TO BE
          SB4    B4-B1             CONVERTED. 
          SA7    A5 
          NZ     X7,IFNOMORE     IF THE REPEAT COUNT FOR THE CURRENT
                                   FIELD DESCRIPTOR HAS NOT BEEN
                                   EXHAUSTED THEN GO TO 'IFNOMORE'. 
          SPACE  1
NEXTDESC  BSS    0               (ENTER HERE FOR NEXT FIELD DESCRIPTOR.)
          SPACE  1
NEXT.1    AX4    X2,B2           EXTRACT THE NEXT FORMAT CHARACTER (AND 
          SX6    B1                UPDATE THE FORMAT POINTERS). 
          SA5    DIGMASK
          GT     B2,B0,NEXT.2 
          SB2    B6 
          SA2    A2+B1
NEXT.2    MX7    60-6            USE THE FUNCTION 'DECIMAL' TO OBTAIN 
          BX4    -X7*X4            THE BINARY VALUE OF THE REPEAT COUNT 
          SB5    X4                (ASSUME A VALUE OF ONE IF NO REPEAT
          LX3    X5,B5             COUNT IS PRESENT). 
          SB2    B2-6 
          PL     X3,NEXT.4
          SX6    X4-1R0 
          RJ     DECIMAL
          GT     B2,B0,NEXT.3    (ADVANCE BEYOND THE CHARACTER WHICH
          SB2    B6                TERMINATED THE DECIMAL CONVERSION.)
          SA2    A2+B1
NEXT.3    SB2    B2-6 
          SPACE  1
NEXT.4    SA5    NEEDW           IF THE FORMAT ELEMENT IS A FIELD 
          SA6    R                 DESCRIPTOR AND NEEDS A WIDTH VALUE 
          SA6    W                 (EG. A-FORMAT, I-FORMAT, ETC.) THEN
          LX5    X5,B5             USE THE FUNCTION 'DECIMAL' AGAIN TO
          LX4    -1                CONVERT THE NEEDED VALUE.
          SA3    FORMS+X4 
          MI     X4,NEXT.5         (ALSO STORE AWAY THE ADDRESS OF THE
          LX3    30                PROPER PROCESSING SECTION FOR THE
NEXT.5    BX6    X3                FORMAT DESCRIPTOR.)
          SA6    GOCELL 
          PL     X5,NEXT.6         GO TO 'NEXT.6' IF NO DATA ITEM IS
                                   REQUIRED (I.E. NO WIDTH VALUE NEEDED)
          SPACE  1
          SA5    DIGMASK         SETUP DIGIT MASK FOR 'DECIMAL' 
          SB7    B5 
          BX6    X6-X6
          RJ     DECIMAL
          SA6    W
  SA5 GOCELL
  SX6 X5-TFORM
  ZR X6,NEXT.6
          SPACE  2
IFNOMORE  LE     B4,B0,OUTPTCX   IF NO MORE ITEMS ARE LEFT THEN RETURN. 
          SA1    A1+B1             (ELSE FETCH THE NEXT ITEM.)
          SPACE  1
NEXT.6    SA5    W               CALL THE PROPER PROCESSING SECTION 
          IX6    X5+X5             WITH THE WIDTH VALUE (OR COUNT VALUE 
          LX4    X6,B1             IN THE CASE OF X-FORMAT, H-FORMAT, 
          SA5    GOCELL            ETC.) IN BITS IN REGISTER  X6  AND 
          IX6    X4+X6             THE DATA ITEM, IF ANY, IN REGISTER 
          SB7    X5                X1.
          RJ     RETURN 
          SPACE  2
          LT     B3,B6,NEXTELEM  UPON RETURN FROM THE PROCESSOR UPDATE
          SX0    X0+B1             THE OUTPUT LINE POINTERS IF THE END
          SB3    B0                OF A WORD BOUNDARY HAS BEEN REACHED, 
          ZR     NEXTELEM          THEN GO TO 'NEXTELEM'. 
          SPACE  3
RETURNX   LT     B3,B6,RETURN    IF THE CURRENT OUTPUT WORD IS NOT FULL 
                                   THEN GO TO 'RETURN'. 
          SPACE  1
          SX0    X0+B1             INCREMENT THE OUTPUT POINTERS. 
          SB3    B0 
          SPACE  1
RETURN    BSS    1               ENTRY/EXIT INFORMATION FOR INVOKED 
                                   PROCESSORS.
          SPACE  1
          JP     B7              JUMP TO THE APPROPRIATE PROCESSOR. 
 ILLEGAL  SPACE  3
**        ILLEGAL - PROCESS ILLEGAL FORMAT SPECIFICATION
  
 ILLEGAL  INVOKE SLASH
          EQ     *+1S17      ABORT
          TITLE                  UTILITY: D E C I M A L 
************************************************************************
*                                                                      *
*                       DECIMAL                                        *
*                                                                      *
*                THIS FUNCTION WILL CONVERT A STRING OF DECIMAL DIGITS *
*             (FROM THE FORMAT) TO BINARY.  CALLING SEQUENCE --        *
*                                                                      *
*                                RJ  DECIMAL                           *
*                                                                      *
*             WHERE THE FOLLOWING REGISTERS HAVE BEEN SET:             *
*                                X5 -- 'DIGMASK'                       *
*                                X6 -- INITIAL VALUE OF NUMBER         *
*                                X7 -- 7777 7777 7777 7777 7700B       *
*                                                                      *
*             UPON RETURN REGISTER  X6  WILL CONTAIN THE CONVERTED     *
*             NUMBER AND REGISTER  X4  WILL CONTAIN THE TERMINATING    *
*             (NON-DIGIT) CHARACTER, THE FORMAT POINTERS WILL NOT      *
*             HAVE BEEN UPDATED TO REFLECT THE EXTRACTION OF THE       *
*             TERMINATING CHARACTER.                                   *
*                                                                      *
************************************************************************
          SPACE  1
DEC.1     IX3    X6+X6           MULTIPLY THE ACCUMULATED NUMBER BY TEN 
          LX6    3                 AND ADD THE DIGIT JUST ENCOUNTERED.
          SX4    X4-1R0 
          IX3    X6+X3
          SB2    B2-6 
          IX6    X3+X4
          PL     B2,DEC.2 
          SB2    B6+B2
          SA2    A2+B1
DEC.2     AX3    X2,B2           EXTRACT THE NEXT FORMAT CHARACTER AND
          BX4    -X7*X3          IF IT IS A DIGIT THE CYCLE.
          SB5    X4 
          LX3    X5,B5
          MI     X3,DEC.1 
                                   OTHERWISE RETURN.
          SPACE  1
DECIMAL   BSS    1
          AX3    X2,B2
          BX4    -X7*X3 
          SB5    X4 
          LX3    X5,B5
          MI     X3,DEC.1 
          ZR     DECIMAL
          TITLE                  UTILITY:  S P A C E
************************************************************************
*                                                                      *
*                       S P A C E                                      *
*                                                                      *
*                THIS ROUTINE WILL APPEND A DESIGNATED NUMBER OF       *
*             SPACES TO THE CURRENT OUTPUT LINE AND RETURN WITH THE    *
*             LINE POINTERS UPDATED.                                   *
*                                                                      *
*                CALLING SEQUENCE--                                    *
*                                                                      *
*                       CALL  SPACE                                    *
*                                                                      *
*             WHERE REGISTER X6 HAS BEEN SET TO THE NUMBER OF BITS TO  *
*             BE FILLED BY BLANK CHARACTERS (I.E. SIX TIMES THE NUMBER *
*             OF BLANK CHARACTERS TO BE APPENDED).                     *
*                                                                      *
*                REGISTERS USED--  X4, X5, X6, X7                      *
*                                  A4, A5, A6                          *
*                                      B5,     B7                      *
*                                                                      *
*             THE NORMAL 'OUTPTK' REGISTER USAGES ARE ASSUMED          *
*             (I.E. B1=1, B6=60, X0=CURRENT OUTPUT WORD ADDRESS, ETC.).*
*                                                                      *
************************************************************************
          SPACE  1
SPACE     ROUTINE 
          SB7    X6              (SET REGISTER B7 TO THE SPACE COUNT AND
          SB5    B6-B3             REGISTER X5 TO AN ALL BLANK WORD.) 
          SA5    =10H 
          LT     B7,B5,SPACE.3   IF THE NUMBER OF COLUMNS TO SPACE LIES 
                                   WITHIN THE CURRENT OUTPUT WORD BUT 
                                   DOES NOT FILL IT, GO TO 'SPACE.3', 
          MX4    1               OTHERWISE FILL OUT THE CURRENT OUTPUT
          SB7    B7-B5             WORD WITH BLANKS.
          SB5    B3-B1
          AX4    X4,B5
          BX7    X4 
          AX4    59 
          BX7    X4*X7
          BX6    -X7*X5 
          SA4    X0 
          BX7    X7*X4
          IX6    X7+X6
          SA6    X0 
          LT     B7,B6,SPACE.2   IF THE NUMBER OF BLANKS LEFT TO BE 
                                   APPENDED WILL NOT FILL A COMPLETE
                                   WORD THEN GO TO 'SPACE.2', 
          SPACE  1
          BX6    X5              OTHERWISE FILL AS MANY COMPLETE WORDS
SPACE.1   SB7    B7-B6             AS NECESSARY UNTIL ONLY A PARTIAL
          SA6    A6+B1             (OR NO) WORD REMAINS.
          GE     B7,B6,SPACE.1
          SPACE  1
SPACE.2   SX0    A6+B1           UPDATE THE OUTPUT LINE POINTERS. 
          SB3    B0 
          SPACE  1
SPACE.3   ZR     B7,SPACE        RETURN IF THERE ARE NO MORE SPACES TO
                                   APPEND,
          SB5    B6-B3           OTHERWISE APPEND THE SPACES, UPDATE THE
          MX4    1                 LINE POINTERS AND RETURN.
          SB3    B3+B7
          SB7    B7-B1
          AX7    X4,B7
          SA4    X0 
          LX7    X7,B5
          BX5    X7*X5
          BX4    -X7*X4 
          IX6    X4+X5
          SA6    X0 
          ZR     SPACE
 SETST    SPACE  3,14 
**        SETST - SET SUB TITLE LINE
* 
*         CALL SETST( WDS , "SUBTITLE" )
  
 SETST0   SX6    1
          SA6    =XN$STITL
          SX7    2R0
          LX7    48 
          SA7    =XF$STITL
  
 SETST    ENTRY. ** 
          SA4    X1 
          SB1    1
          ZR     X4,SETST0   IF WDS = 0    */ NO SUBSTITLE
          BX6    X4 
          SA6    N$STITL
          SA2    A1+B1
          MOVE   X4,X2,F$STITL
          SA1    =XN$LINES   LINES WRITTEN
          SA3    =XCO.PS
          IX5    X3-X1
          SX1    X5-5 
          PL     X1,SETST1   IF MORE THAN 4 LEFT
          SX6    X3+1        FORCE AN EJECT 
          SA6    A1 
  
 SETST1   LISTL  (=2C  ),1
          SA1    N$STITL
          LISTL  F$STITL,X1 
          EQ     SETST
 REMARK   SPACE  3,8
 REMARK   ENTRY.
          MESSAGE  X1 
          EQ     REMARK 
  
 .TEST    ENDIF 
  
 GOTOER.  ENTRY.
          EQ     *+1S17 
 SPA.     SPACE  3,14 
**        SPA. - SUBSTITUTE PARAMETER ADDRESS"S 
  
 SPA.     ENTRY.
+         UX4    B3,X3
          SB5    A0 
          AX4    42 
          SA1    X4+B5
  
 SPA1     SA2    X3 
          UX4    B3,X3
          MX0    42 
          SB4    X1 
  
 SPA2     AX4    18 
          SA3    A3+1 
          SX5    X4+B4
          LX1    B3,X0
          BX6    -X0*X5 
          SB2    A2 
          LX5    B3,X6
          BX4    X1*X2
          SA2    X3 
          BX6    X4+X5
          UX4    B3,X3
          SA6    B2+
          MI     X3,SPA2
  
          AX4    42 
          SA1    X4+B5
          NZ     B3,SPA1
          EQ     SPA. 
  
          END 
*ENDIF
