DEMUX 
          IDENT  DEMUX,110B 
          ABS 
          SST    FL,TR
          ENTRY  DEMUX
          ENTRY  RFL= 
          SYSCOM B1 
          TITLE  DEMUX - PROCESS STIMULATOR OUTPUT. 
*COMMENT  DEMUX - PROCESS STIMULATOR OUTPUT.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       DEMUX - PROCESS STIMULATOR OUTPUT.
*         JERRY BRANHAM.     74/05/07.
*         R. A. JAPS         78/05/25.
*         D. K. ELDRED.      82/01/18.
          SPACE  4,10 
***       DEMUX TRANSLATES THE OUTPUT FROM THE NOS STIMULATORS AND
*         OPTIONALLY PROCESSES TIME STAMP AND/OR TRACE DATA.
          SPACE  4,30 
***       CONTROL STATEMENT CALL. 
* 
*         DEMUX(P1,P2,...,PN) 
* 
*         PN     DEFAULT     MEANING
* 
*         I      *STIMOUT*   FILE CONTAINING STIMULATOR DATA. 
* 
*         NR     REWIND      DO NOT REWIND STIMULATOR AND OUTPUT FILES
*                            BEFORE EXECUTION.  CANNOT BE EQUIVALENCED. 
* 
*         NT     1           NUMBER OF TERMINALS TO PROCESS.  RANGE IS
*                            FROM 1 TO 512 DECIMAL.  IF NO POST RADIX 
*                            IS SPECIFIED, OCTAL BASE IS ASSUMED. 
* 
*         O      *OUTPUT*    FILE TO RECEIVE TRANSLATED SESSION OUTPUT. 
* 
*         SL     NONE        SELECTED LINE TO BE PROCESSED.  THIS MUST
*                            BE WITHIN THE RANGE SPECIFIED BY *NT*.  IF 
*                            NO POST RADIX IS SPECIFIED, OCTAL BASE IS
*                            ASSUMED. 
* 
*         T      NONE        PROCESS TIME STAMP DATA.  CANNOT BE
*                            EQUIVALENCED.
* 
*         TR     NONE        FILE TO RECEIVE TRACE OUTPUT.  IF *TR* IS
*                            OMITTED, TRACE DATA IS IGNORED.  IF *TR* 
*                            IS UNEQUIVALENCED, THE FILE SPECIFIED BY 
*                            *O* WILL ALSO BE USED FOR TRACE OUTPUT.
          SPACE  4,15 
***       DAYFILE MESSAGES. 
* 
*         * DEMUX ARGUMENT ERROR.* = AN ILLEGAL ARGUMENT WAS USED, OR 
*                AN ARGUMENT WAS ILLEGALLY EQUIVALENCED.
* 
*         * DEMUX COMPLETE.* = NORMAL TERMINATION.
* 
*         * DEMUX MEMORY OVERFLOW.* = REQUIRED FL EXCEEDED MFL FOR JOB
*                STEP.  POSSIBLE SOLUTIONS ARE TO DECREASE THE *NT* 
*                VALUE, TO INCREASE THE JOB STEP MFL, OR TO REDUCE THE
*                MEMORY REQUIREMENTS BY ADJUSTING ONE OR MORE DEMUX 
*                ASSEMBLY PARAMETERS - SEE *PROGRAMMING CONSIDERATIONS*.
* 
*         * DEMUX NUMERIC ARGUMENT CONVERSION ERROR.* = A NUMERIC 
*                ARGUMENT WAS INVALID.
* 
*         * DEMUX NT VALUE TOO LARGE.* = *NT* VALUE EXCEEDS 512.
* 
*         * DEMUX SL VALUE TOO LARGE.* = *SL* VALUE EXCEEDS *NT* VALUE. 
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         * COPYING SESSION DATA TO OUTPUT* = DATA FROM THE SCRATCH 
*                FILE IS BEING COPIED TO THE OUTPUT FILE. 
* 
*         * TRANSLATING STIMULATOR OUTPUT* = DATA IS BEING TRANSLATED 
*                AND COPIED TO THE SCRATCH FILE.
          SPACE  4,10 
***       COMMON DECKS. 
  
  
*CALL     COMCMAC 
          TITLE  INTERNAL DOCUMENTATION.
          SPACE  4,10 
**        STIMULATOR DATA FORMATS.
* 
*         TWO TYPES OF DATA ARE PRODUCED BY THE NOS STIMULATORS AND 
*         PROCESSED BY DEMUX - CHARACTER DATA AND TRACE DATA. 
          SPACE  4,20 
**        CHARACTER DATA FORMAT.
* 
*T CHARDATA  1/0,11/ TERMINAL,12/ DATA,12/ DATA,12/ DATA,12/ DATA 
* 
*         TERMINAL = TERMINAL NUMBER. 
* 
*         EACH *DATA* BYTE HAS THREE POSSIBLE FORMATS - 
* 
*T NORMAL 1/0,3/,8/ ASCII 
* 
*T SECOND 1/1,1/1,10/ SECONDS 
* 
*T MILLI  1/1,1/0,10/ MILLISEC
* 
*         ASCII = NORMAL CHARACTER DATA.
*         SECONDS = SECONDS PORTION OF TIME STAMP DATA. 
*         MILLISEC = MILLISECONDS PORTION OF TIME STAMP DATA. 
          SPACE  4,20 
**        TRACE DATA FORMAT.
* 
*         TRACE DATA HAS THE FOLLOWING FORMAT - 
* 
*T TRACE1 1/1,11/ TERMINAL,24/ *1TE* STATUS,12/ SECONDS,12/ MILLISEC
*T,TRACE2 1/1,11/ TERMINAL,12/ *1TE* ADDR,12/ INPCHR,12/ OUTCHR,12/ 0 
* 
*         TERMINAL = TERMINAL NUMBER. 
*         *1TE* STATUS = BYTES 0 AND 1 FROM *1TE* TERMINAL TABLE. 
*         SECONDS = SECOND CLOCK. 
*         MILLISEC = MILLISECOND CLOCK. 
*         *1TE* ADDR = *1TE* ADDRESS FOR NEXT OUTPUT ROUTINE (*TOCA*
*                TABLE ENTRY FOR THE TERMINAL). 
*         INPCHR = INPUT CHARACTER TO BE PROCESSED. 
*         OUTCHR = OUTPUT CHARACTER SENT. 
          SPACE  4,25 
**        PROGRAMMING CONSIDERATIONS. 
* 
*         IN ORDER TO EFFICIENTLY PROCESS VARIABLE AMOUNTS OF SESSION 
*         DATA FOR VARIABLE NUMBERS OF TERMINALS, DEMUX AUTOMATICALLY 
*         ALLOCATES MEMORY FOR LINE TABLES (ONE PER TERMINAL AS SET 
*         BY THE *NT* ARGUMENT).
* 
*         IN ORDER TO AVOID A TIME CONSUMING AND INEFFICIENT SORT OF
*         THE STIMULATOR DATA, WHILE STILL PROVIDING OUTPUT DATA IN 
*         ASCENDING TERMINAL NUMBER ORDER, A *PRU DIRECTORY* IS KEPT
*         WHICH ASSOCIATES THE SCRATCH FILE PRUS WITH THE RESPECTIVE
*         TERMINALS.  IN THIS MANNER, THE OUTPUT FILE IS SORTED AS
*         REQUIRED WITHOUT EVER ACTUALLY MOVING ANY DATA - THE SCRATCH
*         FILE IS SIMPLY READ IN RANDOM ORDER AND THE ONLY SORTING IS 
*         DONE ON THE PRU DIRECTORY ITSELF. 
* 
*         SINCE BOTH THE LINE TABLES AND PRU DIRECTORY ARE DYNAMICALLY
*         CREATED, AND SINCE ADDITIONAL MEMORY IS OBTAINED AS REQUIRED
*         FOR THE PRU DIRECTORY, IT IS POSSIBLE TO REQUIRE MORE MEMORY
*         THAN IS AVAILABLE.  THIS IS MINIMIZED BY ENSURING THAT THE
*         LINE TABLES WILL NOT EXCEED 300000B.  HOWEVER, EXTREMELY
*         LARGE SESSIONS AND EXTREMELY LARGE NUMBERS OF TERMINALS MAY 
*         REQUIRE ADJUSTMENT OF SOME ASSEMBLY PARAMETERS.  IF ONLY A
*         SMALL NUMBER OF TERMINALS WILL BE STIMULATED, DECREASING
*         *MTN* AND INCREASING *LBUFL* WILL INCREASE SPEED SLIGHTLY.
          EJECT 
          TITLE  MACRO DEFINITIONS AND ASSEMBLY CONSTANTS.
 INPUT    SPACE  4,10 
**        INPUT - INPUT NEXT DATA WORD. 
* 
*         INPUT 
* 
*         EXIT   (X6) = DATA WORD.
* 
*         CALLS  INP. 
  
  
          PURGMAC  INPUT
 INPUT    MACRO 
          RJ     INP
          ENDM
 OUTPUT   SPACE  4,10 
**        OUTPUT - OUTPUT CHARACTER FROM (X6).
* 
*         OUTPUT
* 
*         (X6) WILL BE WRITTEN TO THE OUTPUT FILE.
* 
*         CALLS  SWB. 
  
  
          PURGMAC  OUTPUT 
 OUTPUT   MACRO 
          RJ     SWB
          ENDM
          SPACE  4,10 
****      ASSEMBLY PARAMETERS.
  
  
 IBUFL    EQU    3001B       INPUT BUFFER LENGTH
 LBUFL    EQU    300B        LINE BUFFER LENGTH 
          ERRNZ  LBUFL-LBUFL/100B*100B  MUST BE MULTIPLE OF PRU 
 7        ERRNG  300000B-MTN*LBUFL  MAY EXCEED AVAILABLE FL 
 OBUFL    EQU    3001B       OUTPUT BUFFER LENGTH 
 SBUFL    EQU    3001B       SCRATCH BUFFER LENGTH
 WBUFL    EQU    400B        WORKING BUFFER LENGTH
 MEMI     EQU    1000B       INITIAL / INCREMENTAL PRU DIRECTORY SIZE 
 MTN      EQU    512D        MAXIMUM NUMBER OF TERMINALS
****
 TABLE    SPACE  4,30 
***       LINE TABLE STRUCTURE. 
* 
*         FOR EACH TERMINAL BEING PROCESSED, A LINE TABLE EXISTS WITH 
*         THE FOLLOWING FORMAT. 
* 
*T LASM   60/ TEXT ASSEMBLY BUFFER
*T,LCNT   60/ WORD COUNT IN CURRENT LINE
*T,LPTR   1/F,59/ OFFSET INTO *LBUF*
*T,LSEC   60/ LAST SECONDS
*T,LSHF   60/ SHIFT COUNT FOR NEXT CHARACTER
*T,LTIM   60/ TIME ADDER
*T,LBUF   60/ *LBUFL* WORD LINE BUFFER
* 
*         F = 0, IF SESSION DATA FOR THIS LINE HAS BEEN ENCOUNTERED.
*           = 1, IF NO SESSION DATA HAS BEEN ENCOUNTERED. 
  
  
 BEGIN    BSSN   0
 LASM     BSSN   1           TEXT ASSEMBLY BUFFER 
 LCNT     BSSN   1           WORD COUNT 
 LPTR     BSSN   1           BUFFER POINTER 
 LSEC     BSSN   1           LAST SECONDS 
 LSHF     BSSN   1           SHIFT COUNT
 LTIM     BSSN   1           TIME ADDER 
 LBUF     BSSN   LBUFL       LINE BUFFER
 LNLG     BSSN   0           LINE TABLE LENGTH
 END      BSSN
          TITLE  FETS AND WORKING STORAGE.
 FETS     SPACE  4,10 
*         FETS AND CONSTANTS. 
  
  
          ORG    110B 
  
  
 I        BSS    0
 STIMOUT  FILEB  IBUF,IBUFL 
  
 O        BSS    0
 OUTPUT   FILEB  OBUF,OBUFL 
  
 R        BSS    0
 TR       BSS    0
 TRACE    FILEB  OBUF,OBUFL 
  
 S        BSS    0
 SCR      FILEB  SBUF,SBUFL,(FET=6) 
          SPACE  4,10 
*         DIRECT CELLS. 
  
  
 FL       BSS    2           CURRENT FL / JOB STEP MFL
 LW       BSS    1           LAST WORD STORED IN LINE BUFFER
 MR       BSS    1           *MEM* REQUEST WORD 
 NR       BSS    1           NO REWIND FLAG 
 NT       CON    0L1         NUMBER OF TERMINALS TO PROCESS 
 PD       BSS    2           FWA / NEXT PRU DIRECTORY 
 PN       CON    1           NEXT PRU ON *SCR*
 SL       BSS    1           SELECTED LINE TO PROCESS - 0 = ALL LINES 
 T        BSS    1           TIME STAMP FLAG
          TITLE  DEMUX MAIN LOOP. 
  
**        DEMUX - STIMULA DATA PROCESSOR. 
  
 DEMUX    SB1    1
          RJ     PRS         PRESET PROGRAM 
          READEI I           INITIATE READ ON *STIMOUT* FILE
          MESSAGE  (=C* TRANSLATING STIMULATOR OUTPUT*),1 
 DEM1     RJ     GNW         GET NEXT WORD
          NZ     X1,DEM5     IF EOI 
          NZ     B7,DEM3     IF NOT TRACE DATA
          RJ     FTD         FORMAT TRACE DATA
          EQ     DEM1        PROCESS NEXT WORD
  
 DEM2     SB7    B7-1        DECREMENT CHARACTER COUNT
          PL     B7,DEM3     IF CHARACTERS REMAIN TO BE PROCESSED 
          SA6    B6+LASM     SAVE DATA WORD 
          SX6    B3+         SAVE SHIFT COUNT 
          SA6    B6+LSHF
          EQ     DEM1        PROCESS NEXT WORD
  
 DEM3     NG     X5,DEM4     IF TIME STAMP DATA 
          RJ     FCD         FORMAT CHARACTER DATA
          EQ     DEM2        PROCESS NEXT CHARACTER 
  
 DEM4     RJ     FTS         FORMAT TIME STAMP
          EQ     DEM2        PROCESS NEXT CHARACTER 
  
*         COPY SESSION DATA TO OUTPUT.
  
 DEM5     RJ     FLB         FLUSH LINE BUFFERS 
          MESSAGE  (=C* COPYING SESSION DATA TO OUTPUT*),1
          REWIND S,R
          RJ     SPD         SORT PRU DIRECTORY 
          WRITEW O,(=10H1         ),1  ISSUE PAGE EJECT 
 DEM6     RJ     IRR         INITIATE/RESUME *RPHRLS* REQUEST 
          READW  S,WBUF,WBUFL 
          NZ     X1,DEM7     IF END OF DATA 
          WRITEW O,WBUF,WBUFL 
          EQ     DEM6        LOOP 
  
 DEM7     SB7    B6-WBUF     CHECK FOR DATA REMAINING IN *WBUF* 
          ZR     B7,DEM8     IF NO DATA LEFT IN BUFFER
          WRITEW O,WBUF,B7   WRITE FRAGMENT TO OUTPUT FILE
 DEM8     SA1    S+5         CHECK FOR END OF LIST
          SA1    X1+
          NZ     X1,DEM6     IF NOT EOI 
          WRITEW O,(=0),1    TERMINATE LAST LINE
          WRITER X2 
          RETURN S
          MESSAGE  (=C* DEMUX COMPLETE.*) 
          ENDRUN
          TITLE  SUBROUTINES. 
 CEL      SPACE  4,15 
**        CEL - CHECK FOR END OF LINE.
* 
*         ENTRY  (B6) = LINE TABLE ADDRESS. 
*                (LW) = LAST WORD STORED IN LINE BUFFER.
* 
*         EXIT   END OF LINE ENSURED. 
* 
*         USES   X - 0, 1, 6. 
*                A - 1. 
* 
*         MACROS OUTPUT.
  
  
 CEL      SUBR               ENTRY/EXIT 
          SA1    LW 
          MX0    -12
          BX1    -X0*X1 
          ZR     X1,CELX     IF END OF LINE 
          SX6    B0+
          OUTPUT
          EQ     CELX        RETURN 
 FCD      SPACE  4,20 
**        FCD - FORMAT CHARACTER DATA.
* 
*         ENTRY  (X5) = DATA WORD.
*                (X6) = ASSEMBLY WORD.
*                (B3) = SHIFT COUNT.
*                (B6) = LINE TABLE ADDRESS. 
* 
*         EXIT   CHARACTER ADDED TO LINE DATA.
*                (X5), (X6), (B3) UPDATED.
* 
*         USES   X - 0, 1, 2, 4, 5, 6, 7. 
*                A - 1, 2, 6. 
*                B - 3. 
* 
*         CALLS  CEL. 
* 
*         MACROS OUTPUT.
  
  
 FCD      SUBR               ENTRY/EXIT 
          LX5    12          EXTRACT CHARACTER
          MX0    -8 
          BX2    -X0*X5 
          AX2    1
          SA1    ASCI+X2     TRANSLATE CHARACTER
          NG     X1,FCDX     IF UNPRINTABLE CHARACTER 
          MX0    -6 
          BX4    -X0*X1 
          LX4    B3 
          BX6    X6+X4
          SB3    B3-6        DECREMENT SHIFT COUNT
          SA6    LW 
          NZ     X1,FCD1     IF NOT CARRIAGE RETURN 
          OUTPUT
          EQ     FCD2        PROCESS END OF LINE
  
 FCD1     PL     B3,FCDX     IF DATA WORD NOT FULL
          SA6    LW 
          OUTPUT
          SA2    LW 
          SA1    B6+LCNT     CHECK LINE SIZE
          MX6    0
          ZR     X2,FCD3     IF END OF LINE 
          SX6    X1+B1
          SX7    X6-12
          NG     X7,FCD3     IF LINE LIMIT NOT EXCEEDED 
 FCD2     RJ     CEL         CHECK FOR END OF LINE
          SA1    =10H            INDENT NEXT LINE 
          BX6    X1 
          OUTPUT
          BX6    X6-X6       SET END OF LINE
 FCD3     SA6    B6+LCNT     UPDATE LINE WORD COUNT 
          SB3    54          RESET SHIFT COUNT
          BX6    X6-X6       CLEAR ASSEMBLY REGISTER
          EQ     FCDX        RETURN 
 FLB      SPACE  4,15 
**        FLB - FLUSH LINE BUFFERS. 
* 
*         EXIT   ALL LINE BUFFERS FLUSHED TO *SCR*. 
*                * END OF THE LINE * WRITTEN TO *SCR* FOR EACH LINE.
*                TRACE FILE FLUSHED IF USED.
* 
*         USES   X - 0, 1, 3, 6, 7. 
*                A - 1, 6, 7. 
*                B - 5, 6.
* 
*         CALLS  UPD. 
* 
*         MACROS RECALL, WRITER, WRITEW.
  
  
 FLB      SUBR               ENTRY/EXIT 
          SX0    B0+
          RECALL S
 FLB1     SX1    LNLG        FLUSH OUTPUT IN BUFFER, IF ANY 
          IX7    X0*X1
          SB6    X7+AMEM
          SA1    B6+LPTR
          SX6    X1+
          SA6    FLBA 
          NG     X1,FLB3     IF NO SESSION DATA 
          ZR     X1,FLB2     IF NO DATA IN BUFFER 
          WRITEW S,B6+LBUF,X1  FLUSH DATA TO *SCR*
 FLB2     SX1    X0+1        CONVERT TERMINAL NUMBER TO DISPLAY 
          RJ     CDD
          MX6    48 
          BX7    X6*X4
          SA7    FLBB+5      ADD TERMINAL NUMBER TO SESSION TERMINATOR
          WRITEW S,FLBB,FLBBL  ISSUE SESSION TERMINATOR 
          WRITER X2,R 
          SA1    FLBA 
          SX3    X1+FLBBL+100B  CALCULATE NUMBER OF PRUS REQUIRED 
          SB5    X0          SET TERMINAL NUMBER
          AX3    6
          RJ     UPD         UPDATE PRU DIRECTORY AND POINTERS
 FLB3     SX0    X0+B1
          SA1    NT 
          IX1    X0-X1
          NG     X1,FLB1     IF MORE TERMINALS TO PROCESS 
          SA1    FTD         CHECK FOR TRACE DATA 
          ZR     X1,FLBX     IF NO TRACE DATA 
          WRITER R,R         FLUSH TRACE FILE 
          EQ     FLBX        RETURN 
  
  
 FLBA     BSS    1           WORD COUNT IN BUFFER 
 FLBB     CON    0           END OF LINE
          DATA   C* END OF THE LINE ------------------------------* 
          DATA   10H1           PAGE EJECT FOR NEXT SESSION 
 FLBBL    EQU    *-FLBB 
 FTD      SPACE  4,15 
**        FTD - FORMAT TRACE DATA.
* 
*         ENTRY  (X6) = FIRST WORD OF TRACE DATA. 
*                (TN) = TERMINAL NUMBER.
* 
*         EXIT   TRACE DATA PROCESSED IF SELECTED.
* 
*         USES   X - ALL. 
*                A - 1, 3, 4, 5, 6, 7.
*                B - NONE.
* 
*         CALLS  CFD, WOD.
* 
*         MACROS INPUT, WRITEW. 
  
  
 FTD      SUBR               ENTRY/EXIT (ALSO USED AS FLAG) 
          SA6    FTDA        SAVE FIRST TRACE WORD
          INPUT 
          SA6    FTDA+1      SAVE SECOND TRACE WORD 
          SA1    TR 
          ZR     X1,FTDX     IF TRACE NOT SELECTED
  
*         TRANSLATE INPUT AND OUTPUT CHARACTERS.
  
          MX0    -59
          BX1    -X0*X6 
          MX0    -7 
          AX6    12 
          BX2    -X0*X6      EXTRACT OUTPUT CHARACTER 
          AX6    12 
          SA3    TASC+X2     TRANSLATE OUTPUT CHARACTER 
          BX4    -X0*X6      EXTRACT INPUT CHARACTER
          LX7    X3 
          SA5    TASC+X4     TRANSLATE INPUT CHARACTER
          SA7    FTDB+5 
          BX7    X5 
          SA7    FTDB+3 
  
*         PROCESS DATA IN SECOND TRACE WORD.
  
          AX1    6           POSITION DATA WORD 
          RJ     WOD         CONVERT SECOND TRACE WORD TO OCTAL 
          BX1    X6          SAVE UPPER OCTAL TRANSLATION 
          MX0    -24
          SA4    =6L         GET SPACE FILL 
          AX7    12 
          BX6    -X0*X7 
          BX6    X6+X4
          LX6    18 
          SA6    A7+1        STORE OUTPUT CHARACTER OCTAL 
          AX7    24 
          BX6    -X0*X7 
          BX7    X6+X4
          LX7    18 
          SA7    A7-B1       STORE INPUT CHARACTER OCTAL
          BX6    -X0*X1 
          AX1    24 
          BX6    X6+X4
          LX6    18 
          BX7    -X0*X1 
          SA6    A6+2        STORE DRIVER ADDRESS 
          BX7    X7+X4
          LX7    18 
          SA7    A7-B1       STORE PORT NUMBER
  
*         PROCESS DATA IN FIRST TRACE WORD. 
  
          SA1    FTDA 
          AX1    24          IGNORE TIME STAMP DATA 
          RJ     WOD
          BX1    X6          SAVE UPPER OCTAL TRANSLATION 
          MX0    -48
          BX6    -X0*X7 
          LX6    12          POSITION DATA AND CREATE END OF LINE 
          SA6    A6+1 
  
*         PROCESS TIME DATA.
  
          SA1    FTDA        CONVERT TIME 
          MX0    -12
          BX2    -X0*X1      EXTRACT MILLISECONDS 
          AX1    12 
          BX1    -X0*X1      EXTRACT SECONDS
          SX6    1000 
          IX1    X6*X1       MERGE SECONDS AND MILLISECONDS 
          IX1    X1+X2
          RJ     CFD         CONVERT TO F10.3 FORMAT
          SA6    FTDB 
  
*         WRITE COMPLETED LINE TO TRACE FILE. 
  
          SA1    FTDC        CHECK PAGE POSITION
          SX6    X1-1 
          SA6    A1+
          PL     X6,FTD1     IF NO PAGE HEADING REQUIRED
          SX6    LINP-1 
          SA6    A6+
          WRITEW R,FTDD,FTDDL  WRITE PAGE HEADING TO TRACE FILE 
 FTD1     WRITEW R,FTDB,8 
          EQ     FTDX        RETURN 
  
  
 FTDA     BSS    2
 FTDB     BSS    8           TRACE LINE ASSEMBLY BUFFER 
 FTDC     CON    0           LINES REMAINING ON PAGE
 FTDD     DATA   C*1    TIME    PORT    --INPUT CHARACTER-- --OUTPUT CHA
,RACTER--  ADDR  PARAMETERS*
          DATA   C*0 *
 FTDDL    EQU    *-FTDD      LENGTH OF PAGE HEADING 
 FTS      SPACE  4,15 
**        FTS - FORMAT TIME STAMP.
* 
*         ENTRY  (X5) = DATA WORD.
*                (B3) = SHIFT COUNT.
*                (B6) = LINE TABLE ADDRESS. 
* 
*         EXIT   TIME STAMP DATA PROCESSED IF SELECTED. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 0, 1, 2, 4, 6, 7.
*                B - 3. 
* 
*         CALLS  CDD. 
* 
*         MACROS OUTPUT.
  
  
 FTS      SUBR               ENTRY/EXIT 
          SX7    B0+
          SA7    B6+LCNT
          SA1    T           CHECK TIME STAMP OPTION
          MX7    -10
          LX5    12 
          ZR     X1,FTSX     IF TIME STAMP OPTION NOT SELECTED
          SA6    B6+LASM     SAVE ASSEMBLY REGISTER 
          SX6    B3          SAVE SHIFT COUNT 
          SA6    B6+LSHF
          BX1    -X7*X5 
          BX2    X5 
          LX2    59-10
          PL     X2,FTS2     IF MILLISECOND TIME STAMP
          SA2    B6+LSEC     GET LAST SECONDS STAMP 
          IX3    X1-X2
          PL     X3,FTS1     IF CURRENT TIME .GE. PREVIOUS TIME 
          SA4    B6+LTIM     UPDATE TIME ADDER
          SX3    2000B
          IX6    X3+X4
          SA6    A4 
 FTS1     BX6    X1 
          SA2    B6+LTIM     GET TIME ADDER 
          IX1    X1+X2
          SA6    B6+LSEC     SET LAST SECONDS = CURRENT TIME
          RJ     CDD         CONVERT SECONDS TO DISPLAY CODE
          SA2    FTSA 
          BX6    X6-X2
          SA0    B0          CLEAR *INDENT* FLAG
          EQ     FTS3        OUTPUT TIME STAMP
  
 FTS2     RJ     CDD         CONVERT MILLISECONDS 
          SA1    FTSB 
          SA2    =1L. 
          SB3    B2-B1       (B2) = 6*CHAR COUNT
          MX7    1
          AX7    B3          FORM MASK FOR MILLISECONDS 
          LX7    B2          RIGHT JUSTIFY MASK 
          BX1    -X7*X1 
          BX6    X6-X1
          MX7    18          FORM MASK FOR MILLISECONDS 
          LX7    54 
          LX6    36          POSITION MASK
          BX6    X7*X6       ISOLATE 3-CHARACTERS OF MILLISECONDS 
          BX6    X2+X6       SET DECIMAL POINT
          SA0    B1          SET *INDENT* FLAG
 FTS3     SA6    FTSC        SAVE TIME STAMP
          SA2    B6+LASM
          ZR     X2,FTS4     IF NO DATA IN DATA WORD
          BX6    X2 
          OUTPUT             WRITE LEFT OVER DATA 
 FTS4     SA1    FTSC        WRITE TIME STAMP 
          BX6    X1 
          OUTPUT
          SB3    A0+         CHECK FOR POSSIBLE INDENTATION 
          ZR     B3,FTS5     IF INDENTATION NOT REQUIRED
          SA1    =10H            INDENT NEXT LINE 
          BX6    X1 
          OUTPUT
 FTS5     SB3    54          RESET SHIFT COUNT
          SX6    B0+         CLEAR ASSEMBLY REGISTER
          EQ     FTSX        RETURN 
  
  
 FTSA     CON    5L*****&5L 
 FTSB     CON    10H0000000000&10H
 FTSC     BSS    1           TEMPORARY
 GNW      SPACE  4,25 
**        GNW - GET NEXT WORD.
* 
*         EXIT   (B5) = TERMINAL NUMBER.
*                (B6) = LINE TABLE ADDRESS. 
*                (X1) .NE. 0 IF END OF RECORD.
*                (X5) = DATA WORD SHIFTED 12 BITS.
* 
*                IF TRACE DATA -
*                (B7) = 0.
*                (X6) = DATA WORD.
* 
*                IF NOT TRACE DATA -
*                (B3) = SHIFT COUNT.
*                (B7) = CHARACTER COUNT - 1 = 3.
*                (X3) = (X6) = ASSEMBLY WORD. 
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 1, 2, 3. 
*                B - 3, 6, 7. 
* 
*         MACROS INPUT. 
* 
*         NOTE   DATA FOR AN INELIGIBLE TERMINAL IS DISCARDED.
  
  
 GNW      SUBR               ENTRY/EXIT 
 GNW1     INPUT 
          NZ     X1,GNWX     IF EOI 
          BX5    X6 
          MX0    -11         SET TERMINAL NUMBER
          LX5    12 
          BX7    -X0*X5 
          SA1    NT 
          SA2    SL 
          IX1    X7-X1
          BX3    X2-X7
          PL     X1,GNW1     IF TERMINAL NUMBER .GT. *NT* VALUE 
          ZR     X2,GNW2     IF SELECTIVE LINE NOT SET
          NZ     X3,GNW1     IF TERMINAL NOT SELECTED 
 GNW2     SX1    LNLG        SET LINE TABLE ADDRESS 
          SB5    X7          SET TERMINAL NUMBER
          IX1    X1*X7
          SB7    B0+         PRESET *TRACE DATA* FLAG 
          SB6    X1+AMEM
          SX1    B0+         CLEAR *EOI* FLAG 
          NG     X6,GNWX     IF TRACE DATA
          SB7    4-1         SET CHARACTER COUNT - 1
          SA2    B6+LSHF     SET SHIFT COUNT
          SA3    B6+LASM     SET ASSEMBLY WORD
          BX6    X3 
          SB3    X2 
          EQ     GNWX        RETURN 
 INP      SPACE  4,15 
**        INP - INPUT NEXT DATA WORD. 
* 
*         ENTRY  (INPA) = LWA+1 OF DATA IN *WBUF*.
*                (INPB) = NEXT WORD IN *WBUF*.
* 
*         EXIT   (X1) .EQ. 0 IF DATA TRANSFERED.
*                (X1) .NE. 0 IF EOF/EOI 
*                (X6) = DATA WORD.
* 
*         USES   X - 1, 3, 6. 
*                A - 1, 3, 6. 
*                B - 7. 
* 
*         MACROS READW. 
  
  
 INP      SUBR               ENTRY/EXIT 
          SA1    INPA        SET LWA+1 OF DATA
          SA3    A1+B1       SET CURRENT INDEX
          IX6    X1-X3
          NZ     X6,INP2     IF DATA REMAINS IN *WBUF*
          READW  I,WBUF,WBUFL 
          PL     X1,INP1     IF NOT EOI 
          SB7    B6-WBUF
          ZR     B7,INPX     IF NO DATA TRANSFERRED 
 INP1     SX3    WBUF 
          SX6    B6+
          SA6    INPA 
 INP2     SX6    X3+B1       INCREMENT INDEX
          SA3    X3 
          SA6    INPB 
          SX1    B0          SET TRANSFER COMPLETE
          BX6    X3 
          EQ     INPX        RETURN 
  
  
 INPA     CON    0           LWA+1 OF DATA
 INPB     CON    0           INDEX IN BUFFER
 IRR      SPACE  4,15 
**        IRR - INITIATE/RESUME *RPHRLS* REQUEST. 
* 
*         EXIT   *RPHRLS* INITIATED IF NECESSARY. 
* 
*         USES   X - 1, 2, 3, 4, 7. 
*                A - 1, 2, 3, 4.
*                B - NONE.
* 
*         MACROS RPHRLS.
* 
*         NOTE   BECAUSE THE *CIO* CODE FOR *RPHRLS* IS 230B, THE 
*                COMMON DECKS WILL NOT RESTART THE REQUEST SHOULD *CIO* 
*                DROP OUT, SINCE THEY INTERPRET A FET STATUS WITH 2**4
*                SET AS *EOF*.
  
  
 IRR      SUBR               ENTRY/EXIT 
          SA2    S           CHECK FET STATUS 
          LX2    59-0 
          PL     X2,IRRX     IF FET BUSY
          SA2    S+5         CHECK FOR END OF LIST
          SA2    X2+
          ZR     X2,IRRX     IF ALL PRUS PROCESSED
  
*         THE FOLLOWING CODE IS ADAPTED FROM *COMCRDW*. 
  
          SA1    S+1         GET FET BUFFER POINTERS
          SA2    A1+B1
          SA3    A2+B1
          SA4    A3+B1
          SX1    X1 
          SX4    X4+
          IX1    X4-X1       LIMIT - FIRST
          IX7    X2-X3       IN-OUT 
          LX3    X7,B1       2*(IN-OUT) 
          AX7    60          SIGN OF (IN-OUT) 
          BX4    X7-X1       INVERT BUFFER IF OUT \ IN
          IX7    X4-X3       BUFFER SIZE - 2*(IN-OUT) 
          NG     X7,IRRX     IF BUFFER THRESHOLD NOT REACHED
          RPHRLS S           INITIATE *CIO* REQUEST 
          EQ     IRRX        RETURN 
 SPD      SPACE  4,15 
**        SPD - SORT PRU DIRECTORY. 
* 
*         ENTRY  (PD) = FWA OF PRU DIRECTORY. 
*                (PD+1) = NEXT UNUSED ENTRY IN DIRECTORY. 
* 
*         EXIT   DIRECTORY SORTED.
*                LIST ADDRESS SET IN *SCR* FET. 
* 
*         CALLS  SST=.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
*                B - 7. 
  
  
 SPD      SUBR               ENTRY/EXIT 
          SA1    PD          SET *SST=* PARAMETERS
          BX6    X1 
          SB7    X1          FWA OF TABLE TO BE SORTED
          SA6    S+5         SET PRU LIST INTO *SCR* FET
          SA2    A1+B1
          IX1    X2-X1
          SX1    X1-1        LENGTH OF TABLE
          RJ     SST=        SORT PRU DIRECTORY 
          EQ     SPDX        RETURN 
 SWB      SPACE  4,15 
**        SWB - STORE WRITE BUFFER DATA.
* 
*         ENTRY  (X6) = DATA TO WRITE.
*                (B6) = LINE TABLE ADDRESS. 
* 
*         EXIT   DATA PLACED IN LINE BUFFER.
*                LINE BUFFER WRITTEN TO *SCR* IF NECESSARY. 
*                (B5). (B6), (B7) PRESERVED.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 5, 6, 7. 
* 
*         CALLS  UPD. 
* 
*         MACROS WRITEW.
  
  
 SWB1     SA6    A1+         SET NEW INDEX
  
 SWB      SUBR               ENTRY/EXIT 
          SA1    B6+LPTR     GET LINE BUFFER POINTER
          SX7    X1+LBUF
          SA6    X7+B6
          SX6    X1+B1
          SX7    X6-LBUFL 
          NZ     X7,SWB1     IF OUTPUT BUFFER NOT FULL
          SX6    B5          SAVE REGISTERS 
          SX7    B6 
          SA6    SWBA 
          SA7    A6+B1
          SX6    B7 
          SA6    A7+1 
          WRITEW S,X7+LBUF,LBUFL
          SA2    SWBA        SET TERMINAL NUMBER
          SX3    LBUFL/100B  SET NUMBER OF PRUS 
          SB5    X2+
          RJ     UPD         UPDATE PRU DIRECTORY / POINTERS
          SA3    SWBA+1 
          SA4    A3+B1
          SB6    X3 
          SB7    X4 
          BX6    X6-X6
          SA6    B6+LPTR     STORE NEW BUFFER POINTER 
          EQ     SWBX        RETURN 
  
  
 SWBA     BSS    3           TEMPORARY STORAGE
 UPD      SPACE  4,15 
**        UPD - UPDATE PRU DIRECTORY AND POINTERS.
* 
*         ENTRY  (B5) = TERMINAL NUMBER.
*                (X3) = NUMBER OF PRUS WRITTEN. 
*                (PN) = NEXT PRU TO WRITE.
*                (PD+1) = NEXT PRU DIRECTORY ENTRY TO USE.
* 
*         EXIT   (PN), (PD+1), ((PD+1)) UPDATED.
* 
*         USES   X - 1, 3, 4, 6, 7. 
*                A - 1, 2, 3, 6, 7. 
*                B - 7. 
* 
*         MACROS ABORT, MEMORY, MESSAGE.
  
  
 UPD      SUBR               ENTRY/EXIT 
          SA1    PN 
          IX6    X1+X3
          SA6    A1          UPDATE PRU NUMBER
          SB7    X3 
          SA3    PD+B1
          SX4    B1 
          PX6    X1,B5       MERGE TERMINAL NUMBER AND PRU NUMBER 
          SA6    X3          UPDATE PRU DIRECTORY 
          SX7    X3+B1
          SA7    A3 
 UPD1     SB7    B7-1 
          ZR     B7,UPD2     IF ALL PRUS PROCESSED
          IX6    X6+X4
          SA6    A6+B1
          SX7    X7+B1
          SA7    A3 
          EQ     UPD1        LOOP 
  
*         CHECK FOR POSSIBLE MEMORY INCREASE. 
  
 UPD2     SA3    FL 
          SA1    MR 
          IX3    X3-X7
          LX1    30 
          SX3    X3-LBUFL/100B-1
          PL     X3,UPDX     IF NO MEMORY INCREASE REQUIRED 
          SX7    X1+MEMI
          SA7    A3          UPDATE CURRENT FL
          SA3    A3+B1
          LX7    30 
          IX3    X3-X7
          SA7    A1+
          NG     X3,UPD3     IF *MEM* REQUEST EXCEEDS JOB STEP MFL
          MEMORY CM,MR,R     REQUEST ADDITIONAL MEMORY
          EQ     UPDX        RETURN 
  
 UPD3     MESSAGE  (=C* DEMUX MEMORY OVERFLOW.*)
          RETURN S           RETURN SCRATCH FILE
          ABORT 
 COMMON   SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCDD 
*CALL     COMCCFD 
*CALL     COMCCIO 
*CALL     COMCRDW 
*CALL     COMCSST 
*CALL     COMCSYS 
*CALL     COMCWOD 
*CALL     COMCWTW 
          TITLE  DEMUX CONVERSION TABLE.
 ASCI     SPACE  4,10 
*         ASCI - ASCII TABLE. 
  
  
 ASCI     BSS    0
          LOC    0
          DATA   -1          UNPRINTABLE
          DUP    7,1
          DATA   -1          UNPRINTABLE
          DATA   70B         BACKSPACE  (UP-ARROW)
          DUP    4,1
          DATA   -1          UNPRINTABLE
          DATA   0           CARRIAGE RETURN
          DUP    18,1 
          DATA   -1          UNPRINTABLE
  
          DATA   55B         SPACE
          DATA   -1          UNPRINTABLE
          DATA   64B         DOUBLE QUOTE 
          DATA   60B         NUMBER 
          DATA   53B         DOLLAR SIGN
          DATA   63B         PERCENT
          DATA   67B         AMPERSAND
          DATA   70B         APOSTROPHE 
  
          DATA   51B         (
          DATA   52B         )
          DATA   47B         *
          DATA   45B         +
          DATA   56B         ,
          DATA   46B         -
          DATA   57B         .
          DATA   50B         /
  
          DATA   33B         0
          DATA   34B         1
          DATA   35B         2
          DATA   36B         3
          DATA   37B         4
          DATA   40B         5
          DATA   41B         6
          DATA   42B         7
  
          DATA   43B         8
          DATA   44B         9
          DATA   400B        COLON
          DATA   77B         :  
          DATA   72B         <
          DATA   54B         =
          DATA   73B         >
          DATA   71B         QUESTION MARK
  
          DATA   -1          UNPRINTABLE
          DATA   01B         A
          DATA   02B         B
          DATA   03B         C
          DATA   04B         D
          DATA   05B         E
          DATA   06B         F
          DATA   07B         G
  
          DATA   10B         H
          DATA   11B         I
          DATA   12B         J
          DATA   13B         K
          DATA   14B         L
          DATA   15B         M
          DATA   16B         N
          DATA   17B         O
  
          DATA   20B         P
          DATA   21B         Q
          DATA   22B         R
          DATA   23B         S
          DATA   24B         T
          DATA   25B         U
          DATA   26B         V
          DATA   27B         W
  
          DATA   30B         X
          DATA   31B         Y
          DATA   32B         Z
          DATA   61B         (
          DATA   75B         REVERSE SLANT
          DATA   62B         )
          DATA   -1          UNPRINTABLE
          DATA   65B         UNDERLINE
  
          DATA   -1          UNPRINTABLE
          DATA   01B         LOWER CASE A 
          DATA   02B         B
          DATA   03B         C
          DATA   04B         D
          DATA   05B         E
          DATA   06B         F
          DATA   07B         G
  
          DATA   10B         H
          DATA   11B         I
          DATA   12B         J
          DATA   13B         K
          DATA   14B         L
          DATA   15B         M
          DATA   16B         N
          DATA   17B         O
  
          DATA   20B         P
          DATA   21B         Q
          DATA   22B         R
          DATA   23B         S
          DATA   24B         T
          DATA   25B         U
          DATA   26B         V
          DATA   27B         W
  
          DATA   30B         X
          DATA   31B         Y
          DATA   32B         Z
          DUP    5,1
          DATA   -1          UNPRINTABLE
          LOC    *O 
 TASC     SPACE  4,10 
*         TASC - ASCII READABLE OUTPUT TRANSLATION TABLE. 
  
 TASC     BSS    0
  
          LOC    0
          DATA   10HNULL
          DATA   10HSOH 
          DATA   10HSTX 
          DATA   10HETX 
          DATA   10HEOT 
          DATA   10HENQ 
          DATA   10HACK 
          DATA   10HBELL
  
          DATA   10HBKSP
          DATA   10HHTAB
          DATA   10HLF
          DATA   10HVTAB
          DATA   10HFORM FEED 
          DATA   10HCR
          DATA   10HSHIFT OUT 
          DATA   10HSHIFT IN
  
          DATA   10HDLE 
          DATA   10HDC1 
          DATA   10HDC2 
          DATA   10HDC3 
          DATA   10HDC4 
          DATA   10HNAK 
          DATA   10HSYN 
          DATA   10HETB 
  
          DATA   10HCAN 
          DATA   10HEM
          DATA   10HSUB 
          DATA   10HESC 
          DATA   10HFS
          DATA   10HGS
          DATA   10HRS
          DATA   10HUS
  
          DATA   10H
          DATA   10HEX POINT
          DATA   10HD QUOTE 
          DATA   10HPOUND SIGN
          DATA   10H$ 
          DATA   10H^ 
          DATA   10HAMPERSAND 
          DATA   10HS QUOTE 
  
          DATA   10H( 
          DATA   10H) 
          DATA   10H* 
          DATA   10H+ 
          DATA   10H, 
          DATA   10H- 
          DATA   10H. 
          DATA   10H/ 
  
          DATA   10H0 
          DATA   10H1 
          DATA   10H2 
          DATA   10H3 
          DATA   10H4 
          DATA   10H5 
          DATA   10H6 
          DATA   10H7 
  
          DATA   10H8 
          DATA   10H9 
          DATA   10H% 
          DATA   10HSEMI
          DATA   10H< 
          DATA   10H= 
          DATA   10H> 
          DATA   10HQUESTION
  
          DATA   10HAT SIGN 
          DATA   10HA 
          DATA   10HB 
          DATA   10HC 
          DATA   10HD 
          DATA   10HE 
          DATA   10HF 
          DATA   10HG 
  
          DATA   10HH 
          DATA   10HI 
          DATA   10HJ 
          DATA   10HK 
          DATA   10HL 
          DATA   10HM 
          DATA   10HN 
          DATA   10HO 
  
          DATA   10HP 
          DATA   10HQ 
          DATA   10HR 
          DATA   10HS 
          DATA   10HT 
          DATA   10HU 
          DATA   10HV 
          DATA   10HW 
  
          DATA   10HX 
          DATA   10HY 
          DATA   10HZ 
          DATA   10HL BRACKET 
          DATA   10HREV SLANT 
          DATA   10HR BRACKET 
          DATA   10HCIRCUMFLEX
          DATA   10HUNDERLINE 
  
          DATA   10HGR ACCENT 
          DATA   10H?A
          DATA   10H?B
          DATA   10H?C
          DATA   10H?D
          DATA   10H?E
          DATA   10H?F
          DATA   10H?G
  
          DATA   10H?H
          DATA   10H?I
          DATA   10H?J
          DATA   10H?K
          DATA   10H?L
          DATA   10H?M
          DATA   10H?N
          DATA   10H?O
  
          DATA   10H?P
          DATA   10H?Q
          DATA   10H?R
          DATA   10H?S
          DATA   10H?T
          DATA   10H?U
          DATA   10H?V
          DATA   10H?W
  
          DATA   10H?X
          DATA   10H?Y
          DATA   10H?Z
          DATA   10HL BRACE 
          DATA   10HVERT LINE 
          DATA   10HR BRACE 
          DATA   10HTILDE 
          DATA   10HRUBOUT
          LOC    *O 
 BUFFERS  SPACE  4,20 
          USE    PRESET 
  
*         BUFFER ALLOCATION.
  
 IBUF     BSSN   IBUFL       *STIMOUT* BUFFER 
 OBUF     BSSN   OBUFL       *OUTPUT* / *TRACE* BUFFER
 SBUF     BSSN   SBUFL       *SCR* BUFFER 
 WBUF     BSSN   WBUFL       WORKING BUFFER 
  
*         ALLOCATABLE MEMORY - LINE TABLES, PRU DIRECTORY.
  
 AMEM     BSSN   0           FWA OF ALLOCATABLE MEMORY
 END      BSSN
  
 RFL=     EQU    AMEM        STARTING FL FOR DEMUX
          TITLE  PRESET PROGRAM.
 PRS      SPACE  4,15 
**        PRS - PRESET PROGRAM. 
* 
*         ENTRY  (B1) = 1.
* 
*         EXIT   CONTROL STATEMENT PARAMETERS PROCESSED.
*                FILES INITIALIZED AS NECESSARY.
* 
*         USES   X - 1, 2, 4, 5, 6, 7.
*                A - 1, 4, 5, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         CALLS  ARG, DXB.
* 
*         MACROS ABORT, EVICT, MEMORY, MESSAGE, REWIND. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          SX6    B0+         ESTABLISH DEFAULT OF NO TRACE
          SA6    TR 
  
*         PROCESS CONTROL STATEMENT PARAMETERS. 
  
          SA1    ACTR        SET *COMCARG* PARAMETERS 
          SB5    PRSA 
          SA4    ARGR 
          SB4    X1+
          RJ     ARG         PROCESS ARGUMENTS
          ZR     X1,PRS1     IF NO ERROR DETECTED 
          MESSAGE  (=C* DEMUX ARGUMENT ERROR.*) 
          ABORT 
  
*         PROCESS *NT* PARAMETER. 
  
 PRS1     SA5    NT 
          SB7    0           SET DEFAULT BASE TO OCTAL
          RJ     DXB         CONVERT TO BINARY
          SA6    NT 
          ZR     X4,PRS2     IF NO CONVERSION ERROR 
          MESSAGE  (=C* DEMUX NUMERIC ARGUMENT CONVERSION ERROR.*)
          ABORT 
  
 PRS2     SX1    MTN+1       CHECK FOR *NT* IN RANGE
          IX2    X6-X1
          NG     X2,PRS3     IF *NT* VALUE IN RANGE 
          MESSAGE  (=C* DEMUX NT VALUE TOO LARGE.*) 
          ABORT 
  
*         PROCESS *SL* PARAMETER. 
  
 PRS3     SA5    SL          PROCESS SELECTIVE LINE 
          SB7    0           SET DEFAULT BASE TO OCTAL
          RJ     DXB         CONVERT TO BINARY
          SA6    SL 
          ZR     X4,PRS4     IF NO CONVERSION ERROR 
          MESSAGE  (=C* DEMUX NUMERIC ARGUMENT CONVERSION ERROR.*)
          ABORT 
  
 PRS4     SA1    NT 
          IX2    X1-X6
          PL     X2,PRS5     IF SL .LE. NT
          MESSAGE  (=C* DEMUX SL VALUE TOO LARGE.*) 
          ABORT 
  
*         CHECK FOR 63-CHARACTER SYSTEM.
  
 PRS5     SA1    CSMR        CHECK CHARACTER SET MODE OF SYSTEM 
          NG     X1,PRS6     IF 64 CHARACTER SET
          SX6    63B         CHANGE COLON TO PERCENT
          SA6    ASCI+72B 
  
*         ALLOCATE LINE TABLES AND INITIAL PRU DIRECTORY SIZE.
  
 PRS6     MX6    29          GET JOB STEP MFL 
          SA6    FL+1 
          MEMORY CM,FL+1,R
          SA1    NT 
          SB2    X1+         SAVE TERMINAL NUMBER 
          SX2    LNLG 
          IX5    X2*X1
          SX7    X5+AMEM     INITIALIZE PRU DIRECTORY POINTERS
          SA7    PD 
          SA7    A7+B1
          SX7    X7+MEMI+77B  DETERMINE MEMORY REQUIREMENTS 
          AX7    6
          LX7    6
          SA7    FL          SAVE CURRENT FL
          SA1    A7+B1
          LX7    30 
          IX1    X1-X7
          SA7    MR 
          NG     X1,PRS8     IF *MEM* REQUEST EXCEEDS JOB STEP MFL
          MEMORY CM,MR,R     REQUEST ADDITIONAL MEMORY
  
*         INITIALIZE LINE TABLES. 
  
          MX6    0
          SA6    AMEM 
          SB6    A6 
          SB3    LNLG 
 PRS7     SA6    B6+B3
          SB3    B3-B1
          PL     B3,PRS7     IF LINE TABLE NOT COMPLETE 
          MX7    1           SET *NO SESSION DATA* FLAG 
          SA7    B6+LPTR
          SX7    54          SET SHIFT COUNT
          SA7    A6+LSHF
          SB3    LNLG 
          SB6    B6+LNLG     PREPARE FOR NEXT TERMINAL
          SB2    B2-1 
          NZ     B2,PRS7     IF MORE TERMINALS TO PROCESS 
  
*         INITIALIZE FILES. 
  
          EVICT  S           RETURN SCRATCH FILE
          SA1    NR          CHECK NO REWIND OPTION 
          NZ     X1,PRSX     IF *NR* OPTION SELECTED
          REWIND I,R
          REWIND O,R
          EQ     PRSX        RETURN 
  
 PRS8     MESSAGE  (=C* DEMUX MEMORY OVERFLOW.*)
          ABORT 
  
  
 PRSA     BSS    0
 I        ARG    STIMOUT,I
 NR       ARG    -=1,NR 
 NT       ARG    =0L1,NT
 O        ARG    OUTPUT,O 
 SL       ARG    =0,SL
 T        ARG    -=1,T
 TR       ARG    OUTPUT,TR
          ARG                TERMINATOR 
 COMMON   SPACE  4,10 
*         COMMON DECKS (PRESET).
  
  
*CALL     COMCARG 
*CALL     COMCDXB 
 END      SPACE  4,10 
          END 
