*DECK     NMI=RTE 
          IDENT  ROUTEM 
          TITLE  FILE ROUTING PROCESSOR 
*IF -DEF,EXCST
          COMMENT ROUTEM - FILE ROUTING/ENCSF FUNCTION
*ENDIF
*IF DEF,EXCST 
          COMMENT ROUTEM - FILE ROUTING/EXCST FUNCTION
*ENDIF
          ENTRY  ROUTEM 
  
  
          USE    /ROUTCOM/
LFN       BSS    1
CODE      BSS    1
TYPERT    BSS    1
 RTEOT    BSS    1           ORIGIN TYPE (BINARY) 
 RTESC    BSS    1           SVC CLASS (CHAR IF PRESENT)
          USE    *
  
  
          USE    /TERMCOM/
TCCNT     BSS    1
LCLBFR    BSS    65     BFR SPACE FOR BEGINIP / SAVE SPACE
          USE    *
  
**        ROUTEM
* 
*         PARAMETERS PASSED THRU COMMON:  
*                LFN (WORD 1) = NAME OF THE FILE TO BE ROUTED 
*                CODE (WORD 2)= ROUTE CODE (0=INPUT, 1=OUTPUT)
* 
*         RETURNED PARAMS:  
*                FETADDR = SYSTEM ASSIGNED JOB NAME 
*                CODE              = 0, SUCCESSFULL ROUTE OPERATION 
*                                  = 27, FNT FULL 
*                                  = 30, LOCAL FILE LIMIT 
*                                  = 33 DEFFERRED BATCH JOB LIMIT 
*         GENERAL COMMENTS: 
*                THE FILE TO BE ROUTED HAS TO RESIDE
*                ON A Q-DEVICE AND HAS TO CONTAIN A JOB.
*                THE USER NUMBER MUST HAVE BEEN VALIDATED 
*                PRIOR TO THE CALL TO THIS ROUTINE. 
*                AN INVALID USER NUMBER  IN A ROUTED JOB, WILL FORCE AN 
*                UNCONDITIONAL ABORT BY THE SYSTEM. 
* 
*                ROUTEM IS USED TO ROUTE THE NETWORK START-UP 
*                JOBS TO THE INPUT QUEUE AND START NIP
          EJECT 
PARAMS    BSSZ   7            ROUTE PARAMETER LIST
          BSSZ   8            EXTENDED PARAM LIST 
  
W1        VFD    14/0,3/5          FORMS CODE 
          VFD    7/0,12/2CIN       DISPOSITION CODE 
          VFD    6/0,1/1           RTRN SYS ASSIGNED JOBNAME
          VFD    4/0,1/1           RETURN ERROR CODE
          VFD    2/1               FORMS CODE FLAG
          VFD    5/0,1/1           DISP  CODE FLAG
          VFD    2/0,2/2           ROUTE TO CENTRAL SITE
  
W2        VFD    24/0 
          VFD    12/2HLP           LINE PRINTER 
          VFD    6/0
          VFD    18/22B            PRINT ANYWHERE 
  
OUN       VFD    42/0LSYSTEMX,18/0
          SPACE  4
ROUTEM    EQ     *+1
          MX6    0            CLEAR PARAMS AREA 
          SB1    1
          SA6    PARAMS+1 
          DUP    13,1 
          SA6    A6+B1
  
          SA2    LFN
          RJ     STRIP55
          SA6    A2 
  
          ZR     X2,GETJNAM   FILE NAME MISSING 
  
          SA2    CODE 
          SX3    1000B
          BX4    X2*X3
          NZ     X4,RSUB     IF NIP 
  
          MX0    42 
          SA1    LFN
          BX7    X1*X0             ISOLATE LFN
          SX4    4000B       SET
          BX7    X7+X4        FORCED ORIGIN FLAG
          SA7    PARAMS       IN WD-0 OF DSP BLOCK
  
          SA2    CODE              GET INPUT/OUTPUT QUEUE FLAG
          SX5    7B 
          BX2    X2*X5
          SB2    X2 
          SA3    W1+B2             PICK UP ROUTE PARAMETERS 
          BX6    X3 
          SA2    A2                GET CODE FOR SUBSYS FLAG 
          LX2    3                 CODE = XXXX XXXX XXXX XXXX XSXX
          BX7    X4*X2       ADD SUBSYSTEM FLAG 
          BX6    X6+X7        (IF PRESENT IN PARAM) 
          SA6    A7+B1        TO DSP CALL BLOCK / FET+1 
          BX0    X7          SAVE SUBSYSTEM FLAG IN X0
          NZ     X0,RT0       IF SUBSYSTEM
          SA1    RTEOT       PICK UP OT 
          NZ     X1,RT1       IF NOT SYOT 
 RT0      BSS    0
  
          SX5    100B         SET EXT PARAM BIT 
          BX6    X5+X6
          SA6    A6 
          SA3    OUN          SET OWNER USERNAME
          BX7    X3 
          SA7    PARAMS+10B 
          SX7    2
          SA7    A7-B1       / FET+7
          ZR     X0,RT1      IF NOT SUBSYSTEM 
  
          SA2    LFN          PUT LFN IN SUBSYSNAME 
          MX0    18 
          BX7    X0*X2
          LX7    18 
          SA7    A7-B1       / FET+6
          EQ     RT2
* 
 RT1      BSS    0
          SA1    RTEOT       PICK UP OT 
          LX1    1           PLACE
          SA2    A7           IN
          BX7    X1+X2        DSP 
          SA7    A7           CALL BLOCK / FET+0
          NZ     X1,RT2      IF NOT SYOT
          SA3    RTESC       WAS SC SPFD
          ZR     X3,RT2       NO
          LX3    36          SVC CLASS
          SA5    PARAMS+4     PARAMETER 
          BX7    X3+X5        TO DSP
          SA7    A5           CALL BLOCK / FET+4
          LX4    9           SET
          BX6    X6+X4        FORCED SC FLAG
          SA6    A6           IN DSP CALL BLOCK / FET+1 
RT2       BSS    0
* 
          SA1    PARAMS           SET STATUS MESSAGES 
          RJ     SMS1 
          SA5    TYPERT           IN TESTING MODE IF NON-ZERO 
          NZ     X5,RT3 
          ROUTE  PARAMS,R 
* 
RT3       BSS    0
          SA1    PARAMS 
          SX7    77B
          MX0    42 
          BX6    X0*X1
          SA6    LFN               RETURN SYSTEM ASSINGED JOB NAME
          AX1    12                POSITION ERROR CODE
          BX7    X7*X1
          SA7    CODE              ROUTE ERROR HAS BEEN ENCOUNTERED 
          SA1    PARAMS 
          RJ     SMS2              SEND ROUTE MESSAGE 
          EQ     ROUTEM 
  
GETJNAM   BSS    0
          SX6    88                TEMPORARY ERROR CODE FOR PASSING A 0 
*                                  LFN
          SA6    CODE 
          EQ     ROUTEM 
  
          EJECT 
  
  
STRIP55   EQ     *+1S17       ENTRY/EXIT
          MX0    60-6         VALUE IN X2 
          SX6    55B
          SB1    1
          SB4    10 
S55A      LX2    6
          BX3    -X0*X2 
          IX3    X3-X6        SEE IF BLANK
          NZ     X3,S55B
          BX2    X0*X2        SET TO 0 IF BLANK 
S55B      SB4    B4-B1
          NE     B4,B0,S55A 
          BX6    X2           MOVE TO X6 WHEN DONE
          EQ     STRIP55
          SPACE  4,8
FILL55    EQ     *+1S17       ENTRY/EXIT
          MX0    60-6         VALUE IN X1 
          SX6    55B
          SB1    1
          SB4    10 
F55A      LX1    6
          BX3    -X0*X1 
          NZ     X3,F55B
          BX1    X1+X6        ADD IN A BLANK
F55B      SB4    B4-B1
          NE     B4,B0,F55A 
          BX6    X1           MOVE TO X6 WHEN DONE
          EQ     FILL55 
  
  
 MVED     MACRO  VAL,EDFLD,BITS 
          SA1    VAL
          RJ     =XCOD= 
          SA2    EDFLD
          MX0    60-BITS
          BX2    X0*X2
          BX6    -X0*X6 
          BX6    X6+X2
          SA6    A2 
          ENDM
  
  
SMS1      EQ     *+1S17 
          MX0    60-18
          SA2    A1           FET+0 
          BX1    X0*X1
          MX0    6
+         LX1    6
          BX3    X0*X1             RIGHT JUSTIFY NAME 
          NZ     X3,* 
          RJ     FILL55 
          SA6    RTMSG        STARTING FILE NAME
          MX0    60-18
          BX6    -X0*X2 
          SA6    F0A
          SA2    A1+B1       FET+1
          MX0    60-21
          BX6    -X0*X2 
          SA6    F1A
          SA2    A2+3        FET+4
          MX0    60-12
          LX2    24 
          BX6    -X0*X2 
          SA6    F4A
          SA2    A2+2        FET+6
          MX0    60-18
          BX6    -X0*X2 
          SA6    F6A
          SA2    A2+B1       FET+7
          BX6    -X0*X2 
          SA6    F7A
          EQ     SMS1 
          SPACE  4,8
SMS2      EQ     *+1S17 
          MX0    60-18
          SA2    A1           FET+0 
          BX1    X0*X1        RETURNED SYSTEM NAME
          RJ     FILL55 
          SA6    RTMSG+3
          SX6    77B               12 BIT ERROR CODE
          LX2    60-12
          BX6    X6*X2
          SA6    F0B
  
          MVED   F0B,RTMS3+2,36 
  
          MESSAGE RTMSG,0,RECALL
          SA5    TYPERT 
          ZR     X5,SMS2B         TESTING IF NON-ZERO 
SMS2A     BSS    0
          MVED   F0A,RTMS2+0,36 
          MVED   F1A,RTMS2+1,42 
          MVED   F4A,RTMS2+2,24 
          MVED   F6A,RTMS2+3,36 
          MVED   F7A,RTMS2+4,36 
          MESSAGE RTMS2,0,RECALL
SMS2B     BSS    0
          SA5    F0B               CHECK ERROR CODE 
          ZR     X5,SMS2C 
          MESSAGE RTMS3,0,RECALL
SMS2C     BSS    0
          EQ     SMS2 
  
  
**        COPYNRF 
* 
  
COPYNRF   EQ     *+1S17 
          SB1    1
          OPEN   NRF1,WRITE,R    CREATE FILE NRF1 
          REWIND BEGINIP        REWIND FILE NIP 
          SKIPF  BEGINIP,1      SKIP 1 RECORD 
          READ   BEGINIP,1      READ 1 LOGICAL RECORD 
 CPYNRF1  BSS    0
          READW  BEGINIP,WBUF,WBUFL 
          NG     X1,COPF     IF EOF OR EOI ENCOUNTERED
          ZR     X1,CPYNRF2  IF FULL BUFFER 
          WRITEW NRF1,WBUF,X1-WBUF    COPY RECORD IN WBUF TO NRF1 
          WRITER NRF1,R      WRITE END-OF-RECORD
          REWIND NRF1 
          OPEN   NRF2,WRITE,R    CREATE FILE NRF2 
          READ   BEGINIP,1      READ 1 LOGICAL RECORD 
 CPYNRF3  BSS    0
          READW  BEGINIP,WBUF,WBUFL 
          NG     X1,COPF     IF EOF OR EOI ENCOUNTERED
          ZR     X1,CPYNRF4  IF FULL BUFFER 
          WRITEW NRF2,WBUF,X1-WBUF   COPY RECORD IN WBUF TO NRF2
          WRITER NRF2,R      WRITE END-OF-RECORD
          REWIND NRF2 
COPF      REWIND BEGINIP
          EQ     COPYNRF
* 
 CPYNRF2  BSS    0
          WRITEW NRF1,WBUF,WBUFL
          EQ     CPYNRF1
* 
 CPYNRF4  BSS    0
          WRITEW NRF2,WBUF,WBUFL
          EQ     CPYNRF3
  
RTMSG     DIS    ,*   FILNAME ROUTED, JOB NAME - XXXXXXXXXX*
 RTMS2    DIS    ,*  0=AAAAAA 1=BBBBBBB    4=CCCC  6=DDDDDD  7=EEEEEE*
RTMS3     DIS    ,* ERROR IN ROUTE FCN. EC=XXXXXXB* 
F0A       VFD    60/0 
F1A       VFD    60/0 
F7A       VFD    60/0 
F0B       VFD    60/0 
 F4A      BSS    1
 F6A      BSS    1
  
  
NBUFL     EQU    65 
PBUFL     EQU    65 
WBUFL     EQU    65 
          BSS    0
NRF1      FILEB  NBUF,NBUFL,(FET=6) 
          BSS    0
NRF2      FILEB  PBUF,PBUFL,(FET=6) 
NBUF      BSS    NBUFL
PBUF      BSS    PBUFL
WBUF      BSSZ   WBUFL
          EJECT 
*IF -DEF,EXCST
**        RSUB
*         WE GET HERE WHEN NIP IS TO BE EXECUTED.  IN THIS
*         CASE, WE HAVE WRAPPED UP ALL PROCESSING AND WILL
*         TRANSFER CONTROL TO NIPS JOB CONTROL, NEVER TO
*         RETURN. 
* 
  
RSUB      BSS    0                ENTRY 
          SA1    BEGINIP
          MX0    42 
          BX1    -X0*X1 
          SA2    LFN
          BX6    X1+X2
          SA6    A1 
  
          SA1    BEGINIP
          RJ     SMS1 
  
          RJ     COPYNRF     COPY NRF1/NRF2 
          SA5    TYPERT           IN TESTING MODE IF NON-ZERO 
          NZ     X5,RS2           JUST RETURN IF TESTING
  
          ENCSF  BEGINIP
          PSCSF  BEGINIP
  
          ENDRUN
  
RS2       BSS    0
          SA1    BEGINIP
          RJ     SMS2 
          EQ     ROUTEM 
  
BEGINIP   FILEB  LCLBFR,65,(FET=8)
RESTORE   VFD    60/0 
          SPACE  4
*ENDIF
*IF DEF,EXCST 
**        RSUB
*         WE GET HERE WHEN NIP IS TO BE EXECUTED.  IN THIS
*         CASE, WE HAVE WRAPPED UP ALL PROCESSING AND WILL
*         TRANSFER CONTROL TO NIPS JOB CONTROL, NEVER TO
*         RETURN. 
* 
  
RSUB      BSS    0            ENTRY/NO EXIT 
          SA1    BEGINIP+1
          MX0    6            SET CTL CARD BUFFER 
          BX5    X0*X1        SAVE PERIOD (.) 
          SA1    BEGINIP      ISOLATE (BEGIN,,) 
          MX0    42 
          BX4    X0*X1
          SA1    LFN          GET FIRST 3 CHAR OF LFN 
          MX0    18 
          BX3    X0*X1
          LX3    18           MUST BE AT LEAST 3 CHAR (NIP+++)
          BX6    X3+X4
          SA6    BEGINIP      SAVE (BEGIN,,NIP) 
          BX1    -X0*X1       CLEAR OUT (NIP) 
          LX1    18           READJUST AND ADD IN PERIOD
          SB1    1
          SB4    10 
          MX0    6
RS1       BX2    X0*X1
          ZR     X2,RS3 
          LX1    6
          SB4    B4-B1
          NE     B0,B4,RS1
RS3       BX6    X1+X5        PUT IN THE PERIOD (.) 
RS5       LX6    6
          SB4    B4-B1
          NE     B0,B4,RS5
          SA6    A6+B1
  
          EXCST  BEGINIP
  
          EQ     ROUTEM 
  
BEGINIP   DIS    ,*BEGIN,,NIP.* 
          SPACE  4
*ENDIF
          END 
