User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:sxslv

Deck SXSLV

0 Modifications

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M01S00001.sxslv   +++|PROC FLUSHSM;
00002  M01S00002.sxslv   +++|# TITLE FLUSHSM - FLUSH THE *STOM* BUFFERS.                           #
00003  M01S00003.sxslv   +++|
00004  M01S00004.sxslv   +++|      BEGIN  # FLUSH *STOM* BUFFERS #
00005  M01S00005.sxslv   +++|
00006  M01S00006.sxslv   +++|#
00007  M01S00007.sxslv   +++|**    FLUSHSM  - FLUSH THE *STOM* BUFFERS.
00008  M01S00008.sxslv   +++|*
00009  M01S00009.sxslv   +++|*     *FLUSHSM* WILL UPDATE THE SLAVE WRITE COUNTER AND PACKED
00010  M01S00010.sxslv   +++|*     DATE/TIME FIELDS IN THE SLAVE STATUS WORD OF THE *STOM* FILE
00011  M01S00011.sxslv   +++|*     BUFFER AND UPDATE THE DISK IMAGE OF THE *STOM* FILE BY
00012  M01S00012.sxslv   +++|*     WRITING THE BUFFER TO THE LINK DEVICE.
00013  M01S00013.sxslv   +++|*
00014  M01S00014.sxslv   +++|*     PROC FLUSHSM.
00015  M01S00015.sxslv   +++|*
00016  M01S00016.sxslv   +++|*     ENTRY      ARRAY *STOMS* IS THE *FET* FOR THE *STOM* FILE
00017  M01S00017.sxslv   +++|*                BUFFER.
00018  M01S00018.sxslv   +++|*
00019  M01S00019.sxslv   +++|*     EXIT       THE NEXT TIME *FLUSHSM* IS TO BE CALLED IS ESTABLISHED
00020  M01S00020.sxslv   +++|*                BY UPDATING THE VARIABLE *STOM$TIME*.
00021  M01S00021.sxslv   +++|#
00022  M01S00022.sxslv   +++|
00023  M01S00023.sxslv   +++|#
00024  M01S00024.sxslv   +++|****  PROC FLUSHSM - XREF LIST BEGIN.
00025  M01S00025.sxslv   +++|#
00026  M01S00026.sxslv   +++|
00027  M01S00027.sxslv   +++|      XREF
00028  M01S00028.sxslv   +++|        BEGIN
00029  M01S00029.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00030  M01S00030.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
00031  M01S00031.sxslv   +++|        PROC REWRITR;                # REWRITE FILE #
00032  M01S00032.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
00033  M01S00033.sxslv   +++|        END
00034  M01S00034.sxslv   +++|
00035  M01S00035.sxslv   +++|
00036  M01S00036.sxslv   +++|#
00037  M01S00037.sxslv   +++|****  PROC FLUSHSM - XREF LIST END.
00038  M01S00038.sxslv   +++|#
00039  M01S00039.sxslv   +++|
00040  M01S00040.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00041  M01S00041.sxslv   +++|*CALL,COMBFAS
00042  M01S00042.sxslv   +++|*CALL,COMBFET
00043  M01S00043.sxslv   +++|*CALL,COMXCTF
00044  M01S00044.sxslv   +++|*CALL,COMXIPR
00045  M01S00045.sxslv   +++|*CALL,COMXMMF
00046  M01S00046.sxslv   +++|*CALL,COMXSEB
00047  M01S00047.sxslv   +++|
00048  M01S00048.sxslv   +++|
00049  M01S00049.sxslv   +++|
00050  M01S00050.sxslv   +++|
00051  M01S00051.sxslv   +++|
00052  M01S00052.sxslv   +++|#
00053  M01S00053.sxslv   +++|*     UPDATE THE HEADER INFORMATION OF THE *STOM* FILE.
00054  M01S00054.sxslv   +++|#
00055  M01S00055.sxslv   +++|
00056  M01S00056.sxslv   +++|      SM$SWC[0] = SM$SWC[0] + 1;
00057  M01S00057.sxslv   +++|      PDATE(PDATESTAT[0]);
00058  M01S00058.sxslv   +++|      RTIME(RTIMESTAT[0]);
00059  M01S00059.sxslv   +++|      SM$PDATE[0] = PDATEV[0];
00060  M01S00060.sxslv   +++|
00061  M01S00061.sxslv   +++|#
00062  M01S00062.sxslv   +++|*     SET UP THE TIME TO NEXT FLUSH THE *STOM* BUFFERS.
00063  M01S00063.sxslv   +++|#
00064  M01S00064.sxslv   +++|
00065  M01S00065.sxslv   +++|      STOM$TIME = RTIMSECS[0] + SM$DELAY[0];
00066  M01S00066.sxslv   +++|
00067  M01S00067.sxslv   +++|#
00068  M01S00068.sxslv   +++|*     WRITE THE *STOM* BUFFER TO THE *STOM* FILE.
00069  M01S00069.sxslv   +++|#
00070  M01S00070.sxslv   +++|
00071  M01S00071.sxslv   +++|      REWIND(STOMS,RCL);
00072  M01S00072.sxslv   +++|      P<FETSET> = LOC(STOMS);
00073  M01S00073.sxslv   +++|      FET$OUT[0] = FET$FRST[0];
00074  M01S00074.sxslv   +++|      FET$IN[0] = FET$FRST[0] + L$STOM;
00075  M01S00075.sxslv   +++|      REWRITR(STOMS,RCL);
00076  M01S00076.sxslv   +++|      RETURN;
00077  M01S00077.sxslv   +++|      END  # FLUSHSM #
00078  M01S00078.sxslv   +++|
00079  M01S00079.sxslv   +++|    TERM
00080  M01S00080.sxslv   +++|PROC INITSLV((MID),(MIDX),(SLVDELAY));
00081  M01S00081.sxslv   +++|# TITLE INITSLV - INITIALIZE SLAVE EXEC.                              #
00082  M01S00082.sxslv   +++|
00083  M01S00083.sxslv   +++|      BEGIN  # INITSLV #
00084  M01S00084.sxslv   +++|
00085  M01S00085.sxslv   +++|#
00086  M01S00086.sxslv   +++|**    INITSLV  - INITIALIZATION ROUTINE FOR THE *SSSLV*.
00087  M01S00087.sxslv   +++|*
00088  M01S00088.sxslv   +++|*     *INITSLV* INITIALIZES THE *STOM* AND *MTOS* FILES FOR PROCESSING
00089  M01S00089.sxslv   +++|*     BY THE REST OF THE *SSSLV* ROUTINES.
00090  M01S00090.sxslv   +++|*
00091  M01S00091.sxslv   +++|*     PROC INITSLV((MID),(MIDX),(SLVDELAY))
00092  M01S00092.sxslv   +++|*
00093  M01S00093.sxslv   +++|*     ENTRY      (MID)   - MACHINE ID OF THE *SSSLV*.
00094  M01S00094.sxslv   +++|*                (MIDX)  - MACHINE INDEX OF THE *SSSLV*.
00095  M01S00095.sxslv   +++|*                (SLVDELAY)  - THE INTERVAL IN SECONDS THAT THE
00096  M01S00096.sxslv   +++|*                              *SSEXEC* IS TO POLL THE *SSSLV*-S
00097  M01S00097.sxslv   +++|*                              COMMUNICATION FILE (*STOM*).
00098  M01S00098.sxslv   +++|*
00099  M01S00099.sxslv   +++|*                THE CALLING ROUTINE HAS DONE A *SETPFP* TO THE CORRECT
00100  M01S00100.sxslv   +++|*                FAMILY AND USER INDEX.
00101  M01S00101.sxslv   +++|*
00102  M01S00102.sxslv   +++|*     EXIT       THE *STOM* AND *MTOS* FILES ARE ATTACHED WITH FET-S
00103  M01S00103.sxslv   +++|*                AND BUFFERS ESTABLISHED SO THEY CAN BE WRITTEN AND
00104  M01S00104.sxslv   +++|*                READ, RESPECTIVELY.
00105  M01S00105.sxslv   +++|*
00106  M01S00106.sxslv   +++|*                THE ITEM *SLVEND* IS SET TO A STATUS VALUE OF IDLE IF
00107  M01S00107.sxslv   +++|*                THE IDLE FLAG WAS SET.  THIS WILL PERMIT THE OPERATOR
00108  M01S00108.sxslv   +++|*                TO TERMINATE THE *SSSLV* BEFORE INITIALIZATION IS
00109  M01S00109.sxslv   +++|*                COMPLETE.
00110  M01S00110.sxslv   +++|*
00111  M01S00111.sxslv   +++|*     MESSAGES
00112  M01S00112.sxslv   +++|*                * SLVI ACTIVE, EXEC XXXX.*
00113  M01S00113.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THE INITIAL
00114  M01S00114.sxslv   +++|*                      STATUS OF THE *SSEXEC*. *XXXX* = *ACTIVE*
00115  M01S00115.sxslv   +++|*                      OR *IDLE*.
00116  M01S00116.sxslv   +++|*
00117  M01S00117.sxslv   +++|*
00118  M01S00118.sxslv   +++|*                * SLVI, STBMNOI FILE PROBLEM. *
00119  M01S00119.sxslv   +++|*                      A MESSAGE INDICATING THE STATUS OF THE ATTEMPT
00120  M01S00120.sxslv   +++|*                      TO ESTABLISH ACCESS TO THE COMMUNICATION FILE
00121  M01S00121.sxslv   +++|*                      USED TO SEND MESSAGES TO THE *SSEXEC*.
00122  M01S00122.sxslv   +++|#
00123  M01S00123.sxslv   +++|
00124  M01S00124.sxslv   +++|      ITEM MID        C(2);          # MACHINE ID OF THE SLAVE EXEC #
00125  M01S00125.sxslv   +++|      ITEM MIDX       U;             # MACHINE INDEX OF THE *SSSLV* #
00126  M01S00126.sxslv   +++|      ITEM SLVDELAY   U;             # TIME IN SECONDS FOR MASTER TO
00127  M01S00127.sxslv   +++|                                       POLL *STOM* #
00128  M01S00128.sxslv   +++|
00129  M01S00129.sxslv   +++|#
00130  M01S00130.sxslv   +++|****  PROC INITSLV - XREF LIST BEGIN.
00131  M01S00131.sxslv   +++|#
00132  M01S00132.sxslv   +++|
00133  M01S00133.sxslv   +++|      XREF
00134  M01S00134.sxslv   +++|        BEGIN
00135  M01S00135.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00136  M01S00136.sxslv   +++|        PROC MEMORY;                 # ISSUE MEMORY MACRO #
00137  M01S00137.sxslv   +++|        PROC MESSAGE;                # ISSUES MESSAGE MACRO #
00138  M01S00138.sxslv   +++|        PROC PFD;                    # PERMANENT FILE REQUEST DELAYS #
00139  M01S00139.sxslv   +++|        PROC READ;                   # READ FILE #
00140  M01S00140.sxslv   +++|        PROC READW;                  # READ LINE #
00141  M01S00141.sxslv   +++|        PROC RECALL;                 # ISSUE RECALL MACRO #
00142  M01S00142.sxslv   +++|        PROC RETERN;                 # RETURN FILE #
00143  M01S00143.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
00144  M01S00144.sxslv   +++|        PROC WRITER;                 # WRITE FILE #
00145  M01S00145.sxslv   +++|        FUNC XCOD C(10);             # INTEGER TO DISPLAY #
00146  M01S00146.sxslv   +++|        PROC ZFILL;                  # ZERO FILL AN ARRAY #
00147  M01S00147.sxslv   +++|        PROC ZSETFET;                # INITIALIZE *FET* #
00148  M01S00148.sxslv   +++|        END
00149  M01S00149.sxslv   +++|
00150  M01S00150.sxslv   +++|#
00151  M01S00151.sxslv   +++|****  PROC INITSLV - XREF LIST END.
00152  M01S00152.sxslv   +++|#
00153  M01S00153.sxslv   +++|
00154  M01S00154.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00155  M01S00155.sxslv   +++|*CALL,COMBFAS
00156  M01S00156.sxslv   +++|*CALL,COMBFET
00157  M01S00157.sxslv   +++|*CALL,COMBPFS
00158  M01S00158.sxslv   +++|*CALL,COMXCTF
00159  M01S00159.sxslv   +++|*CALL,COMXINT
00160  M01S00160.sxslv   +++|*CALL,COMSPFM
00161  M01S00161.sxslv   +++|*CALL,COMXIPR
00162  M01S00162.sxslv   +++|*CALL,COMXJCA
00163  M01S00163.sxslv   +++|*CALL,COMXMMF
00164  M01S00164.sxslv   +++|*CALL,COMXSEB
00165  M01S00165.sxslv   +++|
00166  M01S00166.sxslv   +++|      ITEM I          U;             # INDUCTION VARIABLE #
00167  M01S00167.sxslv   +++|      ITEM INITMTOS   U;             # INDUCTION VARIABLE #
00168  M01S00168.sxslv   +++|      ITEM INITSTOM   U;             # INDUCTION VARIABLE #
00169  M01S00169.sxslv   +++|      ITEM MTOSOK     B;             # CONTROLS LOOP TO ATTACH *MTOS* #
00170  M01S00170.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
00171  M01S00171.sxslv   +++|      ITEM ONEMSG     B;             # CONTROLS DAYFILE MESSAGES #
00172  M01S00172.sxslv   +++|      ITEM STAT       U;             # SCRATCH VARIABLE #
00173  M01S00173.sxslv   +++|      ITEM STOMOK     B;             # CONTROLS REDEFINING *STOM* #
00174  M01S00174.sxslv   +++|
00175  M01S00175.sxslv   +++|                                               CONTROL EJECT;
00176  M01S00176.sxslv   +++|
00177  M01S00177.sxslv   +++|#
00178  M01S00178.sxslv   +++|*     INITIALIZE *MTOS*/*STOM* FILE LENGTH VARIABLES.
00179  M01S00179.sxslv   +++|#
00180  M01S00180.sxslv   +++|
00181  M01S00181.sxslv   +++|      L$STOM = (NUMRB + 1) * RBSIZE;
00182  M01S00182.sxslv   +++|      L$MTOSH = (MAXSLV + 1) * 3;
00183  M01S00183.sxslv   +++|      L$MTOS = L$MTOSH + NUMRB * NUMSLV;
00184  M01S00184.sxslv   +++|
00185  M01S00185.sxslv   +++|#
00186  M01S00186.sxslv   +++|*     CALCULATE THE SPACE NEEDED FOR THE *MTOS* BUFFER.
00187  M01S00187.sxslv   +++|*     OBTAIN THE SPACE VIA THE *MEMORY* REQUEST.
00188  M01S00188.sxslv   +++|#
00189  M01S00189.sxslv   +++|
00190  M01S00190.sxslv   +++|      P<MTOSHEAD> = RA$NWA[0];
00191  M01S00191.sxslv   +++|      I = (L$MTOS + PRULEN) / PRULEN;
00192  M01S00192.sxslv   +++|      MTOSBUFL = I * PRULEN + 1;
00193  M01S00193.sxslv   +++|      MEM$AMT[0] = RA$NWA[0] + MTOSBUFL;
00194  M01S00194.sxslv   +++|      MEMORY("CM",MEMREQ,RCL,NA);
00195  M01S00195.sxslv   +++|
00196  M01S00196.sxslv   +++|
00197  M01S00197.sxslv   +++|#
00198  M01S00198.sxslv   +++|*     INITIALIZE THE *STOM* FILE.
00199  M01S00199.sxslv   +++|#
00200  M01S00200.sxslv   +++|
00201  M01S00201.sxslv   +++|      P<STOMFILE> = LOC(STOMSBUF);
00202  M01S00202.sxslv   +++|      PFNSTOM = STOMPFN;
00203  M01S00203.sxslv   +++|      CHAR10 = XCOD(MIDX);
00204  M01S00204.sxslv   +++|      CHAR1 = C<9,1>CHAR10;
00205  M01S00205.sxslv   +++|      B<36,6>PFNSTOM = CHAR1;
00206  M01S00206.sxslv   +++|      MSG$SINDX[0] = CHAR1;
00207  M01S00207.sxslv   +++|      ABT$SINDX[0] = CHAR1;
00208  M01S00208.sxslv   +++|      ERR$SINDX[0] = CHAR1;
00209  M01S00209.sxslv   +++|      IDLE$SINDX[0] = CHAR1;
00210  M01S00210.sxslv   +++|      MSGE$SINDX[0] = CHAR1;
00211  M01S00211.sxslv   +++|
00212  M01S00212.sxslv   +++|      MSG$NAME[0] = PFNSTOM;
00213  M01S00213.sxslv   +++|
00214  M01S00214.sxslv   +++|      IF MIDX EQ 0
00215  M01S00215.sxslv   +++|      THEN                           # SINGLE MAINFRAME MODE #
00216  M01S00216.sxslv   +++|        BEGIN
00217  M01S00217.sxslv   +++|        MSG$STAT[0] = "ONE MAINFRAME.";
00218  M01S00218.sxslv   +++|        GOTO MODERROR;
00219  M01S00219.sxslv   +++|        END
00220  M01S00220.sxslv   +++|
00221  M01S00221.sxslv   +++|
00222  M01S00222.sxslv   +++|        STOMOK = TRUE;
00223  M01S00223.sxslv   +++|        ZSETFET(LOC(STOMS),STOMSLFN,LOC(MTOSHEAD),PRULEN + 1,SFETL);
00224  M01S00224.sxslv   +++|        RETERN(STOMS,RCL);
00225  M01S00225.sxslv   +++|        PFD("ATTACH",STOMSLFN,PFNSTOM,"PW",STOMPW,"M","M",
00226  M01S00226.sxslv   +++|          "RC",PFSTAT,"NA",0,"UP",0,0);
00227  M01S00227.sxslv   +++|        IF PFSTAT EQ FBS
00228  M01S00228.sxslv   +++|        THEN                         # *STOM* BUSY #
00229  M01S00229.sxslv   +++|          BEGIN
00230  M01S00230.sxslv   +++|          GOTO WAITSTOM;
00231  M01S00231.sxslv   +++|          END
00232  M01S00232.sxslv   +++|
00233  M01S00233.sxslv   +++|
00234  M01S00234.sxslv   +++|#
00235  M01S00235.sxslv   +++|*     READ THE *STOM* FILE AND INITIALIZE MISSING FIELDS.
00236  M01S00236.sxslv   +++|*     IF THE ATTACH FAILED, THE ENTIRE PERMANENT
00237  M01S00237.sxslv   +++|*     FILE WILL BE INITIALIZED.
00238  M01S00238.sxslv   +++|#
00239  M01S00239.sxslv   +++|
00240  M01S00240.sxslv   +++|        ZFILL(STOMSBUF[0],L$STOM);
00241  M01S00241.sxslv   +++|        IF PFSTAT EQ OK
00242  M01S00242.sxslv   +++|        THEN                         # INITIALIZE THE *STOM* HEADER #
00243  M01S00243.sxslv   +++|          BEGIN
00244  M01S00244.sxslv   +++|          READ(STOMS,NRCL);
00245  M01S00245.sxslv   +++|          READW(STOMS,STOMSBUF[0],RBSIZE,STAT);
00246  M01S00246.sxslv   +++|          END
00247  M01S00247.sxslv   +++|
00248  M01S00248.sxslv   +++|        STOMOK = STAT EQ OK AND PFSTAT EQ OK;
00249  M01S00249.sxslv   +++|        SM$MIDS[0] = MID;
00250  M01S00250.sxslv   +++|        SM$IDLE[0] = FALSE;
00251  M01S00251.sxslv   +++|        IF SLVDELAY LQ 0
00252  M01S00252.sxslv   +++|        THEN
00253  M01S00253.sxslv   +++|          BEGIN
00254  M01S00254.sxslv   +++|          SM$DELAY[0] = SLRP$INTV;
00255  M01S00255.sxslv   +++|          END
00256  M01S00256.sxslv   +++|
00257  M01S00257.sxslv   +++|        ELSE
00258  M01S00258.sxslv   +++|          BEGIN
00259  M01S00259.sxslv   +++|          SM$DELAY[0] = SLVDELAY;
00260  M01S00260.sxslv   +++|          END
00261  M01S00261.sxslv   +++|
00262  M01S00262.sxslv   +++|        SLOWFOR RB = 1 STEP 1 WHILE STOMOK AND RB LQ NUMRB
00263  M01S00263.sxslv   +++|        DO
00264  M01S00264.sxslv   +++|          BEGIN  # INITIALIZE EACH REQUEST BLOCK #
00265  M01S00265.sxslv   +++|
00266  M01S00266.sxslv   +++|          READW(STOMS,STOMSBUF[RB],RBSIZE,STAT);
00267  M01S00267.sxslv   +++|
00268  M01S00268.sxslv   +++|          IF STAT EQ OK
00269  M01S00269.sxslv   +++|          THEN                       # INITIALIZE OLD FIELDS #
00270  M01S00270.sxslv   +++|            BEGIN
00271  M01S00271.sxslv   +++|            IF SM$SRC[RB] EQ S"SUBMITTED"
00272  M01S00272.sxslv   +++|            THEN                     # CANCEL PREVIOUS REQUEST #
00273  M01S00273.sxslv   +++|              BEGIN
00274  M01S00274.sxslv   +++|              SM$SRC[RB] = S"CANCEL";
00275  M01S00275.sxslv   +++|              END
00276  M01S00276.sxslv   +++|
00277  M01S00277.sxslv   +++|            END
00278  M01S00278.sxslv   +++|
00279  M01S00279.sxslv   +++|          ELSE                       # ENTIRE REQUEST BLOCK #
00280  M01S00280.sxslv   +++|            BEGIN
00281  M01S00281.sxslv   +++|            STOMOK = FALSE;
00282  M01S00282.sxslv   +++|            ZFILL(STOMSBUF[RB],RBSIZE);
00283  M01S00283.sxslv   +++|            END
00284  M01S00284.sxslv   +++|
00285  M01S00285.sxslv   +++|          END  # INITIALIZE EACH REQUEST BLOCK #
00286  M01S00286.sxslv   +++|
00287  M01S00287.sxslv   +++|#
00288  M01S00288.sxslv   +++|*     INITIALIZE THE FET TO BE USED FOR DOING
00289  M01S00289.sxslv   +++|*     I/O ON THE *STOM* FILE.
00290  M01S00290.sxslv   +++|#
00291  M01S00291.sxslv   +++|
00292  M01S00292.sxslv   +++|
00293  M01S00293.sxslv   +++|        ZSETFET(LOC(STOMS),STOMSLFN,LOC(STOMSBUF),L$STOM + 1,SFETL);
00294  M01S00294.sxslv   +++|
00295  M01S00295.sxslv   +++|#
00296  M01S00296.sxslv   +++|*     IF THE ATTACH OR READ HAD A PROBLEM, PURGE
00297  M01S00297.sxslv   +++|*     THE OLD *STOM* FILE AND DEFINE A NEW ONE.  THEN
00298  M01S00298.sxslv   +++|*     WRITE OUT THE INITIALIZED *STOM* FILE AND
00299  M01S00299.sxslv   +++|*     REATTACH *STOM* IN MODIFY MODE.
00300  M01S00300.sxslv   +++|#
00301  M01S00301.sxslv   +++|
00302  M01S00302.sxslv   +++|        IF NOT STOMOK
00303  M01S00303.sxslv   +++|        THEN
00304  M01S00304.sxslv   +++|          BEGIN  # CREATE A NEW *STOM* FILE #
00305  M01S00305.sxslv   +++|
00306  M01S00306.sxslv   +++|          RETERN(STOMS,RCL);
00307  M01S00307.sxslv   +++|          PFD("PURGE",PFNSTOM,"PW",STOMPW,"RC",PFSTAT,"UP",0,0);
00308  M01S00308.sxslv   +++|          PFD("DEFINE",STOMSLFN,PFNSTOM,"PW",STOMPW,"BR","N",
00309  M01S00309.sxslv   +++|            "R",LINK$DT[0],"RC",PFSTAT,"UP",0,0);
00310  M01S00310.sxslv   +++|          IF PFSTAT NQ OK
00311  M01S00311.sxslv   +++|          THEN
00312  M01S00312.sxslv   +++|            BEGIN
00313  M01S00313.sxslv   +++|            GOTO WAITSTOM;
00314  M01S00314.sxslv   +++|            END
00315  M01S00315.sxslv   +++|
00316  M01S00316.sxslv   +++|          FET$OUT[0] = FET$FRST[0];
00317  M01S00317.sxslv   +++|          FET$IN[0] = FET$FRST[0] + L$STOM;
00318  M01S00318.sxslv   +++|          WRITER(STOMS,RCL);
00319  M01S00319.sxslv   +++|          PFD("ATTACH",STOMSLFN,PFNSTOM,"PW",STOMPW,"M","M",
00320  M01S00320.sxslv   +++|            "RC",PFSTAT,"NA",0,"UP",0,0);
00321  M01S00321.sxslv   +++|          IF PFSTAT NQ OK
00322  M01S00322.sxslv   +++|          THEN                       # REATTACH FAILED #
00323  M01S00323.sxslv   +++|            BEGIN
00324  M01S00324.sxslv   +++|            GOTO WAITSTOM;
00325  M01S00325.sxslv   +++|            END
00326  M01S00326.sxslv   +++|
00327  M01S00327.sxslv   +++|          END  # CREATE A NEW *STOM* FILE #
00328  M01S00328.sxslv   +++|
00329  M01S00329.sxslv   +++|
00330  M01S00330.sxslv   +++|
00331  M01S00331.sxslv   +++|
00332  M01S00332.sxslv   +++|
00333  M01S00333.sxslv   +++|
00334  M01S00334.sxslv   +++|#
00335  M01S00335.sxslv   +++|*     ATTACH THE *MTOS* FILE AND COMPLETE INITIALIZATION.
00336  M01S00336.sxslv   +++|#
00337  M01S00337.sxslv   +++|
00338  M01S00338.sxslv   +++|      ZSETFET(LOC(MTOSS),MTOSSLFN,LOC(MTOSHEAD),MTOSBUFL,SFETL);
00339  M01S00339.sxslv   +++|      MTOSOK = FALSE;
00340  M01S00340.sxslv   +++|      MSG$NAME[0] = MTBSPFN;
00341  M01S00341.sxslv   +++|
00342  M01S00342.sxslv   +++|      FASTFOR INITMTOS = 1 STEP 1 WHILE NOT MTOSOK
00343  M01S00343.sxslv   +++|      DO
00344  M01S00344.sxslv   +++|        BEGIN  # INITIALIZE *MTOS* FILE #
00345  M01S00345.sxslv   +++|
00346  M01S00346.sxslv   +++|        PFD("ATTACH",MTOSSLFN,MTBSPFN,"PW",MTOSPW,"M","RM",
00347  M01S00347.sxslv   +++|          "RC",PFSTAT,"NA",0,"UP",0,0);
00348  M01S00348.sxslv   +++|        IF PFSTAT NQ OK
00349  M01S00349.sxslv   +++|        THEN
00350  M01S00350.sxslv   +++|          BEGIN
00351  M01S00351.sxslv   +++|          GOTO WAITMTOS;
00352  M01S00352.sxslv   +++|          END
00353  M01S00353.sxslv   +++|
00354  M01S00354.sxslv   +++|        REWIND(MTOSS[0],RCL);
00355  M01S00355.sxslv   +++|        READ(MTOSS,RCL);
00356  M01S00356.sxslv   +++|
00357  M01S00357.sxslv   +++|#
00358  M01S00358.sxslv   +++|*     VERIFY LENGTH OF THE *MTOS* FILE IS PER EXPECTATIONS.
00359  M01S00359.sxslv   +++|#
00360  M01S00360.sxslv   +++|
00361  M01S00361.sxslv   +++|        IF FET$IN[0]-FET$OUT[0] NQ L$MTOS OR  ##
00362  M01S00362.sxslv   +++|          MSH$NUMRB[0] NQ NUMRB OR   ##
00363  M01S00363.sxslv   +++|          MSH$NUMSLV[0] NQ NUMSLV
00364  M01S00364.sxslv   +++|        THEN                         # *MTOS* FILE IS WRONG LENGTH #
00365  M01S00365.sxslv   +++|          BEGIN
00366  M01S00366.sxslv   +++|          GOTO WAITMTOS;
00367  M01S00367.sxslv   +++|          END
00368  M01S00368.sxslv   +++|
00369  M01S00369.sxslv   +++|#
00370  M01S00370.sxslv   +++|*     LOCATE INDEX OF THIS SLAVE IN THE *MTOS* FILE.
00371  M01S00371.sxslv   +++|#
00372  M01S00372.sxslv   +++|
00373  M01S00373.sxslv   +++|        SINDX = 0;
00374  M01S00374.sxslv   +++|        FASTFOR I = 1 STEP 1 WHILE I LQ MAXSLV AND SINDX EQ 0
00375  M01S00375.sxslv   +++|        DO
00376  M01S00376.sxslv   +++|          BEGIN  # SEARCH FOR THE INDEX OF THIS SLAVE #
00377  M01S00377.sxslv   +++|          IF MSH$PFNS[I] EQ PFNSTOM
00378  M01S00378.sxslv   +++|          THEN                       # FOUND MATCH #
00379  M01S00379.sxslv   +++|            BEGIN
00380  M01S00380.sxslv   +++|            SINDX = I;
00381  M01S00381.sxslv   +++|            END
00382  M01S00382.sxslv   +++|
00383  M01S00383.sxslv   +++|          END  # SEARCH FOR THE INDEX OF THIS SLAVE #
00384  M01S00384.sxslv   +++|
00385  M01S00385.sxslv   +++|        IF SINDX EQ 0
00386  M01S00386.sxslv   +++|        THEN
00387  M01S00387.sxslv   +++|          BEGIN
00388  M01S00388.sxslv   +++|          GOTO WAITMTOS;
00389  M01S00389.sxslv   +++|          END
00390  M01S00390.sxslv   +++|
00391  M01S00391.sxslv   +++|        MTOSOK = TRUE;
00392  M01S00392.sxslv   +++|        P<MTOSREPBLK> = LOC(MTOSHEAD) + L$MTOSH + (SINDX-1)*NUMRB;
00393  M01S00393.sxslv   +++|        SM$MSW[0] = MSH$MSW[0];
00394  M01S00394.sxslv   +++|        IF MSH$IDLE[0]
00395  M01S00395.sxslv   +++|        THEN                         # MASTER WAS IDLED DOWN #
00396  M01S00396.sxslv   +++|          BEGIN
00397  M01S00397.sxslv   +++|          SM$STATM[0] = S"IDLE";
00398  M01S00398.sxslv   +++|          SM$TIMOUT[0] = MAXSECS;
00399  M01S00399.sxslv   +++|          MSGE$STAT[0] = "IDLE";
00400  M01S00400.sxslv   +++|          END
00401  M01S00401.sxslv   +++|
00402  M01S00402.sxslv   +++|        ELSE                         # MASTER IS ACTIVE #
00403  M01S00403.sxslv   +++|          BEGIN
00404  M01S00404.sxslv   +++|          SM$STATM[0] = S"ACTIVE";
00405  M01S00405.sxslv   +++|          SM$TIMOUT[0] = RTIMSECS[0] + SLAV$INTV;
00406  M01S00406.sxslv   +++|          MSGE$STAT[0] = "ACTIVE";
00407  M01S00407.sxslv   +++|          END
00408  M01S00408.sxslv   +++|
00409  M01S00409.sxslv   +++|        MESSAGE(MSGEXSTAT,SYSUDF1);
00410  M01S00410.sxslv   +++|        SM$REQCTL[0] = MSH$REQCTL[0] + 1;  # FORCE A RESPONSE #
00411  M01S00411.sxslv   +++|        TEST INITMTOS;
00412  M01S00412.sxslv   +++|
00413  M01S00413.sxslv   +++|WAITMTOS:
00414  M01S00414.sxslv   +++|
00415  M01S00415.sxslv   +++|        MSGE$FLASH[0] = FLASH;
00416  M01S00416.sxslv   +++|        MSGE$STAT[0] = "IDLE";
00417  M01S00417.sxslv   +++|        IF ONEMSG
00418  M01S00418.sxslv   +++|        THEN
00419  M01S00419.sxslv   +++|          BEGIN        # MESSAGE TO B-DISPLAY ONLY #
00420  M01S00420.sxslv   +++|          MESSAGE(MSGEXSTAT,LINE1);
00421  M01S00421.sxslv   +++|          END
00422  M01S00422.sxslv   +++|
00423  M01S00423.sxslv   +++|        ELSE
00424  M01S00424.sxslv   +++|          BEGIN        # FIRST MESSAGE TO DAYFILE AND B-DISPLAY #
00425  M01S00425.sxslv   +++|          MESSAGE(MSGEXSTAT,SYSUDF1);
00426  M01S00426.sxslv   +++|          ONEMSG = TRUE;
00427  M01S00427.sxslv   +++|          END
00428  M01S00428.sxslv   +++|
00429  M01S00429.sxslv   +++|        MSGE$FLASH[0] = NOFLASH;
00430  M01S00430.sxslv   +++|
00431  M01S00431.sxslv   +++|        FASTFOR DUMMY = 1 STEP 1 UNTIL DELAYCT
00432  M01S00432.sxslv   +++|        DO
00433  M01S00433.sxslv   +++|          BEGIN
00434  M01S00434.sxslv   +++|          RECALL(0);
00435  M01S00435.sxslv   +++|          END
00436  M01S00436.sxslv   +++|
00437  M01S00437.sxslv   +++|        IF RA$IDLEDWN[0]
00438  M01S00438.sxslv   +++|        THEN
00439  M01S00439.sxslv   +++|          BEGIN
00440  M01S00440.sxslv   +++|          SLVEND = S"IDLEMTOS";
00441  M01S00441.sxslv   +++|          RETURN;
00442  M01S00442.sxslv   +++|          END
00443  M01S00443.sxslv   +++|
00444  M01S00444.sxslv   +++|        END  # INITIALIZE *MTOS* FILE #
00445  M01S00445.sxslv   +++|
00446  M01S00446.sxslv   +++|      RETURN;
00447  M01S00447.sxslv   +++|
00448  M01S00448.sxslv   +++|
00449  M01S00449.sxslv   +++|WAITSTOM:
00450  M01S00450.sxslv   +++|      MSG$STAT[0] = "FILE PROBLEM.";
00451  M01S00451.sxslv   +++|MODERROR:
00452  M01S00452.sxslv   +++|      MESSAGE(MSGSLV[0],SYSUDF1);
00453  M01S00453.sxslv   +++|      ABORT;
00454  M01S00454.sxslv   +++|
00455  M01S00455.sxslv   +++|      END  # INITSLV #
00456  M01S00456.sxslv   +++|
00457  M01S00457.sxslv   +++|    TERM
00458  M01S00458.sxslv   +++|PROC SLVEXEC;
00459  M01S00459.sxslv   +++|# TITLE SLVEXEC - SLAVE EXEC.                                         #
00460  M01S00460.sxslv   +++|
00461  M01S00461.sxslv   +++|      BEGIN  # SLVEXEC #
00462  M01S00462.sxslv   +++|
00463  M01S00463.sxslv   +++|#
00464  M01S00464.sxslv   +++|***   SLVEXEC - MULTIMAINFRAME *MSS* EXECUTIVE PROGRAM.
00465  M01S00465.sxslv   +++|*
00466  M01S00466.sxslv   +++|*     ON THE MASTER MAINFRAME OF A MULTIMAINFRAME CONFIGURATION, OR IN
00467  M01S00467.sxslv   +++|*     A SINGLE MAINFRAME CONFIGURATION, THE *NOS* PERMANENT FILE
00468  M01S00468.sxslv   +++|*     MANAGER (*PFM*) ISSUES *TDAM* REQUESTS DIRECTLY TO THE *SSEXEC*
00469  M01S00469.sxslv   +++|*     TO CAUSE A PERMANENT FILE TO BE STAGED FROM *MSS* TO DISK.  ON
00470  M01S00470.sxslv   +++|*     ALL OTHER MAINFRAMES IN A MULTIMAINFRAME CONFIGURATION, *PFM*
00471  M01S00471.sxslv   +++|*     ISSUES *TDAM* REQUESTS TO THIS *SSSLV* PROGRAM WHICH APPEARS AS
00472  M01S00472.sxslv   +++|*     A SURROGATE *SSEXEC* TO *PFM*.  THE *SSSLV* FORWARDS THE
00473  M01S00473.sxslv   +++|*     *TDAM* REQUEST TO THE *SSEXEC* BY WRITING IT ON A PERMANENT
00474  M01S00474.sxslv   +++|*     FILE KNOWN AS THE SLAVE-TO-MASTER (*STOM*) COMMUNICATION FILE.
00475  M01S00475.sxslv   +++|*     WHEN THE *SSEXEC* HAS COMPLETED THE STAGE REQUEST, IT SENDS A
00476  M01S00476.sxslv   +++|*     REPLY STATUS TO THE *SSSLV* VIA ANOTHER COMMUNICATION FILE
00477  M01S00477.sxslv   +++|*     KNOWN AS THE MASTER-TO-SLAVE (*MTOS*) FILE.  THE *SSSLV*
00478  M01S00478.sxslv   +++|*     NOTIFIES *PFM* OF THE COMPLETED REQUEST IN THE SAME MANNER AS
00479  M01S00479.sxslv   +++|*     DOES *SSEXEC*.  THE FORMAT OF THE *MTOS* AND *STOM* FILES IS
00480  M01S00480.sxslv   +++|*     DESCRIBED IN COMMON DECK *COMXMMF*.
00481  M01S00481.sxslv   +++|*
00482  M01S00482.sxslv   +++|*     PROC SLVEXEC.
00483  M01S00483.sxslv   +++|*
00484  M01S00484.sxslv   +++|*     MESSAGES
00485  M01S00485.sxslv   +++|*                * SLVI - IDLED DOWN.*
00486  M01S00486.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT THE
00487  M01S00487.sxslv   +++|*                      OPERATOR USED THE *IDLE* COMMAND TO TERMINATE
00488  M01S00488.sxslv   +++|*                      *SSSLV* PROCESSING.
00489  M01S00489.sxslv   +++|*
00490  M01S00490.sxslv   +++|*                * SLVI - ERROR TERMINATION (N).*
00491  M01S00491.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT AN
00492  M01S00492.sxslv   +++|*                      ERROR CONDITION OCCURRED WHILE READING THE
00493  M01S00493.sxslv   +++|*                      *MTOS* FILE WHICH PREVENTED FURTHER *SSSLV*
00494  M01S00494.sxslv   +++|*                      PROCESSING.
00495  M01S00495.sxslv   +++|#
00496  M01S00496.sxslv   +++|
00497  M01S00497.sxslv   +++|
00498  M01S00498.sxslv   +++|#
00499  M01S00499.sxslv   +++|****  PROC SLVEXEC - XREF LIST BEGIN.
00500  M01S00500.sxslv   +++|#
00501  M01S00501.sxslv   +++|
00502  M01S00502.sxslv   +++|      XREF
00503  M01S00503.sxslv   +++|        BEGIN
00504  M01S00504.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00505  M01S00505.sxslv   +++|        PROC FLUSHSM;                # REWRITE THE *STOM* FILE #
00506  M01S00506.sxslv   +++|        PROC SSOVL;                  # OVERLAY LOADER #
00507  M01S00507.sxslv   +++|        FUNC XCOD C(10);             # INTEGER TO DISPLAY #
00508  M01S00508.sxslv   +++|        PROC MESSAGE;                # ISSUER MESSAGE MACRO #
00509  M01S00509.sxslv   +++|        END
00510  M01S00510.sxslv   +++|
00511  M01S00511.sxslv   +++|#
00512  M01S00512.sxslv   +++|****  PROC SLVEXEC - XREF LIST END.
00513  M01S00513.sxslv   +++|#
00514  M01S00514.sxslv   +++|
00515  M01S00515.sxslv   +++|                                               CONTROL PRESET;
00516  M01S00516.sxslv   +++|
00517  M01S00517.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00518  M01S00518.sxslv   +++|*CALL,COMBFAS
00519  M01S00519.sxslv   +++|*CALL,COMBOVL
00520  M01S00520.sxslv   +++|*CALL,COMXIPR
00521  M01S00521.sxslv   +++|*CALL,COMXMMF
00522  M01S00522.sxslv   +++|*CALL,COMXSEB
00523  M01S00523.sxslv   +++|                                               CONTROL EJECT;
00524  M01S00524.sxslv   +++|      SLVEND = S"OK";
00525  M01S00525.sxslv   +++|
00526  M01S00526.sxslv   +++|      SSOVL(LSLVINIT,0);             # INITIALIZE THE SLAVE EXEC #
00527  M01S00527.sxslv   +++|      IF SLVEND EQ S"OK"
00528  M01S00528.sxslv   +++|      THEN
00529  M01S00529.sxslv   +++|        BEGIN
00530  M01S00530.sxslv   +++|        SSOVL(LSLVLOOP,0);           # EXECUTE THE MAIN LOOP #
00531  M01S00531.sxslv   +++|        END
00532  M01S00532.sxslv   +++|
00533  M01S00533.sxslv   +++|      SM$IDLE[0] = TRUE;
00534  M01S00534.sxslv   +++|
00535  M01S00535.sxslv   +++|      FLUSHSM;                       # WRITE IDLE STATUS TO THE *STOM*
00536  M01S00536.sxslv   +++|                                       FILE #
00537  M01S00537.sxslv   +++|
00538  M01S00538.sxslv   +++|      IF SLVEND LS S"LASTIDLE"
00539  M01S00539.sxslv   +++|      THEN                           # NORMAL TERMINATION #
00540  M01S00540.sxslv   +++|        BEGIN
00541  M01S00541.sxslv   +++|        MESSAGE(IDLETERM,RCL);
00542  M01S00542.sxslv   +++|        STOP;
00543  M01S00543.sxslv   +++|        END
00544  M01S00544.sxslv   +++|
00545  M01S00545.sxslv   +++|      ELSE                           # ABNORMAL TERMINATION #
00546  M01S00546.sxslv   +++|        BEGIN
00547  M01S00547.sxslv   +++|        CHAR10 = XCOD(SLVEND - SLVESTAT"LASTIDLE");
00548  M01S00548.sxslv   +++|        ERR$NUM[0] = C<9,1>CHAR10;
00549  M01S00549.sxslv   +++|        MESSAGE(ERRTERM,RCL);
00550  M01S00550.sxslv   +++|        ABORT;
00551  M01S00551.sxslv   +++|        END
00552  M01S00552.sxslv   +++|
00553  M01S00553.sxslv   +++|      END  # SLVEXEC #
00554  M01S00554.sxslv   +++|
00555  M01S00555.sxslv   +++|    TERM
00556  M01S00556.sxslv   +++|PROC SLVINIT;
00557  M01S00557.sxslv   +++|# TITLE SLVINIT  - *SSSLV* INITIALIZER SETUP ROUTINE.                 #
00558  M01S00558.sxslv   +++|
00559  M01S00559.sxslv   +++|      BEGIN  # SLVINIT #
00560  M01S00560.sxslv   +++|
00561  M01S00561.sxslv   +++|#
00562  M01S00562.sxslv   +++|**  SLVINIT  - *SSSLV* INITIALIZER SETUP ROUTINE.
00563  M01S00563.sxslv   +++|*
00564  M01S00564.sxslv   +++|*     *SLVINIT* DOES THE INITIALIZATION PROCESSING BY DIRECTLY
00565  M01S00565.sxslv   +++|*     PERFORMING SOME SETUP AND THEN CALLING *INITSLV* TO
00566  M01S00566.sxslv   +++|*     COMPLETE THE INITIALIZATION.
00567  M01S00567.sxslv   +++|*
00568  M01S00568.sxslv   +++|*     PROC SLVINIT.
00569  M01S00569.sxslv   +++|*
00570  M01S00570.sxslv   +++|*     ENTRY      THE CONTROL COMMAND IMAGE OF THE *SSSLV* CALL IS IN
00571  M01S00571.sxslv   +++|*                *RA* + 70.  THE CONTROL COMMAND PARAMETERS ARE BELOW.
00572  M01S00572.sxslv   +++|*
00573  M01S00573.sxslv   +++|*                SSSLV,Q=NN,S.
00574  M01S00574.sxslv   +++|*
00575  M01S00575.sxslv   +++|*                Q=NN  NN IS THE FREQUENCY IN SECONDS THAT THE *SSSLV*
00576  M01S00576.sxslv   +++|*                      AND *SSEXEC* PROGRAMS SHOULD READ THE *STOM*
00577  M01S00577.sxslv   +++|*                      AND *MTOS* COMMUNICATION FILES.  IF *NN* IS
00578  M01S00578.sxslv   +++|*                      GREATER THEN *SLRP$INTV*, THE LATTER IS USED.
00579  M01S00579.sxslv   +++|*
00580  M01S00580.sxslv   +++|*                S     SIMULATED MULTIMAINFRAME MODE.
00581  M01S00581.sxslv   +++|*                      IF *S* IS SPECIFIED ON BOTH THE *SSEXEC* AND
00582  M01S00582.sxslv   +++|*                      *SSSLV* PROGRAM CALLS, THEN BOTH PROGRAMS MAY
00583  M01S00583.sxslv   +++|*                      EXECUTE ON THE SAME MAINFRAME.  THIS PERMITS
00584  M01S00584.sxslv   +++|*                      PROGRAM AND OPERATIONAL PROCEDURE CHECKOUT USING
00585  M01S00585.sxslv   +++|*                      ONLY A SINGLE MAINFRAME.
00586  M01S00586.sxslv   +++|*
00587  M01S00587.sxslv   +++|*     EXIT       THE *MTOS* AND *STOM* FILES ARE ATTACHED AND READY TO
00588  M01S00588.sxslv   +++|*                BE PROCESSED BY THE *SLVLOOP* PROCEDURE WHICH IS THE
00589  M01S00589.sxslv   +++|*                MAINLOOP OF THE *SSSLV*.
00590  M01S00590.sxslv   +++|*
00591  M01S00591.sxslv   +++|*     MESSAGES
00592  M01S00592.sxslv   +++|*                * SLVI ABNORMAL, SLVINIT.*
00593  M01S00593.sxslv   +++|*                      THIS MESSAGE INDICATES THAT A FATAL SYSTEM
00594  M01S00594.sxslv   +++|*                      ERROR HAS OCCURRED.
00595  M01S00595.sxslv   +++|*
00596  M01S00596.sxslv   +++|*                * MSAS MASTER ENABLED - ABORT. *
00597  M01S00597.sxslv   +++|*
00598  M01S00598.sxslv   +++|*     NOTES      IF THE *S* PARAMETER IS SPECIFIED, THE *SSSLV* WILL
00599  M01S00599.sxslv   +++|*                USE COMMUNICATION FILES LOCATED ON THE DEFAULT FAMILY,
00600  M01S00600.sxslv   +++|*                INSTEAD OF ON THE FAMILY CONTAINING THE LINK DEVICE.
00601  M01S00601.sxslv   +++|#
00602  M01S00602.sxslv   +++|
00603  M01S00603.sxslv   +++|
00604  M01S00604.sxslv   +++|
00605  M01S00605.sxslv   +++|#
00606  M01S00606.sxslv   +++|****  PROC SLVINIT - XREF LIST BEGIN.
00607  M01S00607.sxslv   +++|#
00608  M01S00608.sxslv   +++|
00609  M01S00609.sxslv   +++|      XREF
00610  M01S00610.sxslv   +++|        BEGIN
00611  M01S00611.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00612  M01S00612.sxslv   +++|        PROC CALLSS;                 # ISSUE REQUEST TO SUBSYSTEMS #
00613  M01S00613.sxslv   +++|        PROC EXTAB;                  # SET UP PARAMETER LIST #
00614  M01S00614.sxslv   +++|        PROC GETFAM;                 # GET TABLE OF FAMILIES #
00615  M01S00615.sxslv   +++|        PROC GETMI;                  # GET MACHINE INDEX #
00616  M01S00616.sxslv   +++|        PROC INITDAM;                # INITIALIZE *TDAM* INTERFACE #
00617  M01S00617.sxslv   +++|        PROC INITSLV;                # INITIALIZE *SSSLV* #
00618  M01S00618.sxslv   +++|        PROC MESSAGE;                # ISSUE MESSAGE MACRO #
00619  M01S00619.sxslv   +++|        PROC SETPFP;                 # ISSUE SETPFP MACRO #
00620  M01S00620.sxslv   +++|        PROC XARG;                   # CRACK PARAMETER LIST #
00621  M01S00621.sxslv   +++|        FUNC XDXB U;                 # CONVERT DECIMAL TO BINARY #
00622  M01S00622.sxslv   +++|        END
00623  M01S00623.sxslv   +++|
00624  M01S00624.sxslv   +++|#
00625  M01S00625.sxslv   +++|****  PROC SLVINIT - XREF LIST END.
00626  M01S00626.sxslv   +++|#
00627  M01S00627.sxslv   +++|
00628  M01S00628.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00629  M01S00629.sxslv   +++|*CALL,COMBFAS
00630  M01S00630.sxslv   +++|*CALL,COMBPFP
00631  M01S00631.sxslv   +++|*CALL,COMXCTF
00632  M01S00632.sxslv   +++|*CALL,COMXEXP
00633  M01S00633.sxslv   +++|*CALL,COMXINT
00634  M01S00634.sxslv   +++|*CALL,COMXIPR
00635  M01S00635.sxslv   +++|*CALL,COMXJCA
00636  M01S00636.sxslv   +++|*CALL,COMXMMF
00637  M01S00637.sxslv   +++|*CALL,COMXSEB
00638  M01S00638.sxslv   +++|
00639  M01S00639.sxslv   +++|
00640  M01S00640.sxslv   +++|      ITEM ARGLIST    U;             # ARGUMENT LIST #
00641  M01S00641.sxslv   +++|      ITEM DELAYV     U;             # DELAY VALUE #
00642  M01S00642.sxslv   +++|      ITEM FAMILY     C(7);          # FAMILY FOR COMMUNICATION FILES #
00643  M01S00643.sxslv   +++|      ITEM FLAG       U;             # TEMPORARY #
00644  M01S00644.sxslv   +++|      ITEM MID        C(2);          # MACHINE ID #
00645  M01S00645.sxslv   +++|      ITEM MIDX       U;             # MACHINE INDEX #
00646  M01S00646.sxslv   +++|      ITEM PBLOCK     U = 0;         # PARAMETER BLOCK #
00647  M01S00647.sxslv   +++|
00648  M01S00648.sxslv   +++|
00649  M01S00649.sxslv   +++|        ARRAY MSGLINE  [0:3]  S(4);
00650  M01S00650.sxslv   +++|          BEGIN
00651  M01S00651.sxslv   +++|          ITEM MSGITEM  C(00,00,38) = ["$MSAS MASTER ENABLED - ABORT."];
00652  M01S00652.sxslv   +++|          ITEM MSGZERO  U(03,48,12) = [0];  # ZERO BYTE TERMINATOR #
00653  M01S00653.sxslv   +++|          END
00654  M01S00654.sxslv   +++|                                               CONTROL EJECT;
00655  M01S00655.sxslv   +++|
00656  M01S00656.sxslv   +++|      GETFAM(FAMT,DUMMY,LINK[0],DEFAULTORD,DUMMY);
00657  M01S00657.sxslv   +++|      DEF$FAM = FAM$NAME[DEFAULTORD];
00658  M01S00658.sxslv   +++|
00659  M01S00659.sxslv   +++|      EXTAB(ARGLIST);
00660  M01S00660.sxslv   +++|      XARG(ARGLIST,0,FLAG);
00661  M01S00661.sxslv   +++|      DELAYV = SLRP$INTV;
00662  M01S00662.sxslv   +++|      GETMI(CMRINFO,EVENT);
00663  M01S00663.sxslv   +++|      IF NOT CMR$SLAVE[0]
00664  M01S00664.sxslv   +++|      THEN      # *SLAVE* MODE NOT INDICATED #
00665  M01S00665.sxslv   +++|        BEGIN
00666  M01S00666.sxslv   +++|        MESSAGE(MSGLINE,SYSUDF1);
00667  M01S00667.sxslv   +++|        ABORT;
00668  M01S00668.sxslv   +++|        END
00669  M01S00669.sxslv   +++|
00670  M01S00670.sxslv   +++|      EESET$EVT = EESET$ASXE;        # MSAS SET UP #
00671  M01S00671.sxslv   +++|      EESET$ASXE = 0;
00672  M01S00672.sxslv   +++|      FAMILY = FAM$NAME[LINK$ORD[0]];
00673  M01S00673.sxslv   +++|      MIDX = CMR$MFID[0];
00674  M01S00674.sxslv   +++|      MID = CMR$MID[0];
00675  M01S00675.sxslv   +++|
00676  M01S00676.sxslv   +++|      P<RA$AREA> = 0;
00677  M01S00677.sxslv   +++|      RA$SSCAP[0] = 0;
00678  M01S00678.sxslv   +++|      INITDAM;                       # INITIALIZE *TDAM* INTERFACE #
00679  M01S00679.sxslv   +++|      CALLSS(0,PBLOCK,NRCL);         # REQUEST ACTIVE STATUS #
00680  M01S00680.sxslv   +++|
00681  M01S00681.sxslv   +++|      IF FLAG EQ 0
00682  M01S00682.sxslv   +++|      THEN
00683  M01S00683.sxslv   +++|        BEGIN  # CONVERT PARAMETERS #
00684  M01S00684.sxslv   +++|
00685  M01S00685.sxslv   +++|        IF ARG$QC[0] NQ  - 1
00686  M01S00686.sxslv   +++|        THEN                         # CONVERT Q = DELAY VALUE #
00687  M01S00687.sxslv   +++|          BEGIN
00688  M01S00688.sxslv   +++|          FLAG = XDXB(ARG$QC[0],1,DELAYV);
00689  M01S00689.sxslv   +++|          IF DELAYV GR SLRP$INTV
00690  M01S00690.sxslv   +++|          THEN                       # DELAY IS TOO LONG #
00691  M01S00691.sxslv   +++|            BEGIN
00692  M01S00692.sxslv   +++|            DELAYV = SLRP$INTV;
00693  M01S00693.sxslv   +++|            END
00694  M01S00694.sxslv   +++|
00695  M01S00695.sxslv   +++|          END
00696  M01S00696.sxslv   +++|
00697  M01S00697.sxslv   +++|        IF ARG$SC[0] NQ  - 1
00698  M01S00698.sxslv   +++|        THEN
00699  M01S00699.sxslv   +++|          BEGIN
00700  M01S00700.sxslv   +++|          FAMILY = DEF$FAM;
00701  M01S00701.sxslv   +++|          MIDX = 4;
00702  M01S00702.sxslv   +++|          MID = "SA";
00703  M01S00703.sxslv   +++|          END
00704  M01S00704.sxslv   +++|
00705  M01S00705.sxslv   +++|        END  # CONVERT PARAMETERS #
00706  M01S00706.sxslv   +++|
00707  M01S00707.sxslv   +++|
00708  M01S00708.sxslv   +++|#
00709  M01S00709.sxslv   +++|*     ISSUE A *SETPFP* SO THE COMMUNICATION FILES CAN BE ACCESSED.
00710  M01S00710.sxslv   +++|#
00711  M01S00711.sxslv   +++|
00712  M01S00712.sxslv   +++|      PFP$WRD0[0] = 0;
00713  M01S00713.sxslv   +++|      PFP$FAM[0] = FAMILY;
00714  M01S00714.sxslv   +++|      PFP$FG1[0] = TRUE;             # CHANGE TO LINK FAMILY #
00715  M01S00715.sxslv   +++|      PFP$FG4[0] = TRUE;             # CHANGE TO *MSS* USER INDEX #
00716  M01S00716.sxslv   +++|      PFP$UI[0] = DEF$UI;
00717  M01S00717.sxslv   +++|      SETPFP(PFP);
00718  M01S00718.sxslv   +++|      IF PFP$STAT[0] NQ 0
00719  M01S00719.sxslv   +++|      THEN                           # SETPFP FAILED #
00720  M01S00720.sxslv   +++|        BEGIN
00721  M01S00721.sxslv   +++|        ABT$PROC[0] = "SLVINIT";
00722  M01S00722.sxslv   +++|        MESSAGE(ABTMSG,SYSUDF1);
00723  M01S00723.sxslv   +++|        ABORT;
00724  M01S00724.sxslv   +++|        END
00725  M01S00725.sxslv   +++|
00726  M01S00726.sxslv   +++|
00727  M01S00727.sxslv   +++|#
00728  M01S00728.sxslv   +++|*     CALL *INITSLV* TO INITIALIZE COMMUNICATION FILES.
00729  M01S00729.sxslv   +++|#
00730  M01S00730.sxslv   +++|
00731  M01S00731.sxslv   +++|      INITSLV(MID,MIDX,DELAYV);
00732  M01S00732.sxslv   +++|
00733  M01S00733.sxslv   +++|      END  # SLVINIT #
00734  M01S00734.sxslv   +++|
00735  M01S00735.sxslv   +++|    TERM
00736  M01S00736.sxslv   +++|PROC SLVLOOP;
00737  M01S00737.sxslv   +++|# TITLE SLVLOOP - SLAVE MAIN LOOP.                                    #
00738  M01S00738.sxslv   +++|
00739  M01S00739.sxslv   +++|      BEGIN  # SLVLOOP #
00740  M01S00740.sxslv   +++|
00741  M01S00741.sxslv   +++|#
00742  M01S00742.sxslv   +++|**    SLVLOOP  - SLVEXEC MAIN LOOP.
00743  M01S00743.sxslv   +++|*
00744  M01S00744.sxslv   +++|*     PROC SLVLOOP.
00745  M01S00745.sxslv   +++|*
00746  M01S00746.sxslv   +++|*     ENTRY      INITIALIZATION WAS SUCCESSFUL.
00747  M01S00747.sxslv   +++|*
00748  M01S00748.sxslv   +++|*     EXIT       THE ITEM *SLVEND* (IN *COMXSEB*) IS UPDATED TO
00749  M01S00749.sxslv   +++|*                INDICATE THE REASON FOR TERMINATION OF *SSSLV*
00750  M01S00750.sxslv   +++|*                PROCESSING.
00751  M01S00751.sxslv   +++|*
00752  M01S00752.sxslv   +++|*     NOTES      WHILE THE VARIABLE *SLVEND* HAS THE VALUE *OK*, THE
00753  M01S00753.sxslv   +++|*                MAIN LOOP WILL DO THE FOLLOWING.
00754  M01S00754.sxslv   +++|*
00755  M01S00755.sxslv   +++|*                            1) TEST THE IDLE FLAG.
00756  M01S00756.sxslv   +++|*
00757  M01S00757.sxslv   +++|*                            2) LOOK FOR A *TDAM* REQUEST AND ADD IT TO
00758  M01S00758.sxslv   +++|*                               THE *STOM* FILE.
00759  M01S00759.sxslv   +++|*
00760  M01S00760.sxslv   +++|*                            3) CALL *SLVMTOS* TO CHECK THE STATUS OF
00761  M01S00761.sxslv   +++|*                               THE *SSEXEC* AND ALSO, TO CHECK IF A
00762  M01S00762.sxslv   +++|*                               REPLY STATUS IS AVAILABLE FOR ANY
00763  M01S00763.sxslv   +++|*                               PREVIOUSLY SUBMITTED *TDAM* REQUESTS.
00764  M01S00764.sxslv   +++|*
00765  M01S00765.sxslv   +++|*                            4) CALL *FLUSHSM* TO UPDATE THE SLAVE
00766  M01S00766.sxslv   +++|*                               STATUS WORD IN THE *STOM* FILE AND
00767  M01S00767.sxslv   +++|*                               REWRITE THE CURRENT *STOM* FILE.
00768  M01S00768.sxslv   +++|*                               THIS IS DONE PERIODICALLY OR
00769  M01S00769.sxslv   +++|*                               WHENEVER A *TDAM* REQUEST IS ADDED TO
00770  M01S00770.sxslv   +++|*                               THE *STOM* FILE BUFFER.
00771  M01S00771.sxslv   +++|*
00772  M01S00772.sxslv   +++|*                            5) DELAY VIA *RECALL* IF NO WORK IS TO BE
00773  M01S00773.sxslv   +++|*                               DONE.
00774  M01S00774.sxslv   +++|#
00775  M01S00775.sxslv   +++|
00776  M01S00776.sxslv   +++|#
00777  M01S00777.sxslv   +++|****  PROC SLVLOOP - XREF LIST BEGIN.
00778  M01S00778.sxslv   +++|#
00779  M01S00779.sxslv   +++|
00780  M01S00780.sxslv   +++|      XREF
00781  M01S00781.sxslv   +++|        BEGIN
00782  M01S00782.sxslv   +++|        PROC FLUSHSM;                # REWRITE THE *STOM* FILE #
00783  M01S00783.sxslv   +++|        PROC MEMORY;                 # ISSUE MEMORY MACRO #
00784  M01S00784.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00785  M01S00785.sxslv   +++|        PROC RECALL;                 # ISSUE RECALL MACRO #
00786  M01S00786.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
00787  M01S00787.sxslv   +++|        PROC SLVMTOS;                # PROCESS *MTOS* FILE #
00788  M01S00788.sxslv   +++|        PROC ZFILL;                  # ZERO FILL AN ARRAY #
00789  M01S00789.sxslv   +++|        PROC ZSETFET;                # INITIALIZE *FET* #
00790  M01S00790.sxslv   +++|        END
00791  M01S00791.sxslv   +++|
00792  M01S00792.sxslv   +++|#
00793  M01S00793.sxslv   +++|****  PROC SLVLOOP - XREF LIST END.
00794  M01S00794.sxslv   +++|#
00795  M01S00795.sxslv   +++|
00796  M01S00796.sxslv   +++|      DEF RCLFACTOR  #2#;            # NUMBER OF RECALLS TO DELAY ONE
00797  M01S00797.sxslv   +++|                                       SECOND #
00798  M01S00798.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00799  M01S00799.sxslv   +++|*CALL,COMBFAS
00800  M01S00800.sxslv   +++|*CALL,COMBTDM
00801  M01S00801.sxslv   +++|*CALL,COMXCTF
00802  M01S00802.sxslv   +++|*CALL,COMXIPR
00803  M01S00803.sxslv   +++|*CALL,COMXJCA
00804  M01S00804.sxslv   +++|*CALL,COMXMMF
00805  M01S00805.sxslv   +++|*CALL,COMXSEB
00806  M01S00806.sxslv   +++|
00807  M01S00807.sxslv   +++|
00808  M01S00808.sxslv   +++|
00809  M01S00809.sxslv   +++|      ITEM I          I;             # LOOP COUNTER #
00810  M01S00810.sxslv   +++|      ITEM MAINLOOP   U;             # MAIN LOOP INDUCTION VARIABLE #
00811  M01S00811.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
00812  M01S00812.sxslv   +++|      ITEM RCLCT      U;             # NUMBER OF RECALLS TO MAKE #
00813  M01S00813.sxslv   +++|      ITEM REQPROC    B;             # REQUEST PROCESSED FLAG #
00814  M01S00814.sxslv   +++|      ITEM TDASA      U;             # ASA FROM A *TDAM* REQUEST #
00815  M01S00815.sxslv   +++|      ITEM TDFAM      C(7);          # FAMILY FROM A *TDAM* REQUEST #
00816  M01S00816.sxslv   +++|      ITEM TDUI       U;             # USER INDEX FROM *TDAM* REQUEST #
00817  M01S00817.sxslv   +++|
00818  M01S00818.sxslv   +++|                                               CONTROL EJECT;
00819  M01S00819.sxslv   +++|
00820  M01S00820.sxslv   +++|#
00821  M01S00821.sxslv   +++|*     REDUCE FIELD LENGTH SO ONLY ENOUGH *CM* SPACE FOR THE
00822  M01S00822.sxslv   +++|*     *MTOS* BUFFER IS ABOVE THE END OF THIS OVERLAY.
00823  M01S00823.sxslv   +++|#
00824  M01S00824.sxslv   +++|
00825  M01S00825.sxslv   +++|      P<MTOSHEAD> = RA$NWA[0];       # = END OF THIS OVERLAY #
00826  M01S00826.sxslv   +++|      MEM$AMT[0] = RA$NWA[0] + MTOSBUFL;
00827  M01S00827.sxslv   +++|      MEMORY("CM",MEMREQ,RCL,NA);
00828  M01S00828.sxslv   +++|      ZSETFET(LOC(MTOSS),MTOSSLFN,LOC(MTOSHEAD),MTOSBUFL,SFETL);
00829  M01S00829.sxslv   +++|      SLVMTOS;
00830  M01S00830.sxslv   +++|
00831  M01S00831.sxslv   +++|#
00832  M01S00832.sxslv   +++|*     EXECUTE THE MAINLOOP UNTIL ONE OF THE *SSSLV*
00833  M01S00833.sxslv   +++|*     TERMINATION CONDITIONS OCCURS.
00834  M01S00834.sxslv   +++|*         1). IDLE FLAG BECOMXS SET, OR
00835  M01S00835.sxslv   +++|*         2). AN I/O ERROR OCCURS ON EITHER THE *MTOS*
00836  M01S00836.sxslv   +++|*             OR *STOM* FILES.
00837  M01S00837.sxslv   +++|#
00838  M01S00838.sxslv   +++|
00839  M01S00839.sxslv   +++|      SLOWFOR MAINLOOP = 1 STEP 1 WHILE SLVEND EQ S"OK"
00840  M01S00840.sxslv   +++|      DO
00841  M01S00841.sxslv   +++|        BEGIN  # MAINLOOP #
00842  M01S00842.sxslv   +++|
00843  M01S00843.sxslv   +++|        RTIME(RTIMESTAT[0]);
00844  M01S00844.sxslv   +++|        PDATE(PDATESTAT[0]);
00845  M01S00845.sxslv   +++|
00846  M01S00846.sxslv   +++|        IF RA$IDLEDWN[0]
00847  M01S00847.sxslv   +++|        THEN
00848  M01S00848.sxslv   +++|          BEGIN
00849  M01S00849.sxslv   +++|          SLVEND = S"IDLE";
00850  M01S00850.sxslv   +++|          END
00851  M01S00851.sxslv   +++|
00852  M01S00852.sxslv   +++|        IF RA$TDAM[0] NQ 0
00853  M01S00853.sxslv   +++|        THEN                         # FOUND A *TDAM* REQUEST #
00854  M01S00854.sxslv   +++|
00855  M01S00855.sxslv   +++|          BEGIN  # PROCESS THE *TDAM* REQUEST #
00856  M01S00856.sxslv   +++|
00857  M01S00857.sxslv   +++|          REQPROC = FALSE;
00858  M01S00858.sxslv   +++|          P<TDAM> = LOC(RA$TDAM[0]);
00859  M01S00859.sxslv   +++|          IF TDAMFC[0] EQ TDAMFCODE"STAGE"
00860  M01S00860.sxslv   +++|          THEN
00861  M01S00861.sxslv   +++|            BEGIN  # CHECK STAGE REQUEST #
00862  M01S00862.sxslv   +++|            TDASA = TDAMASA[0];
00863  M01S00863.sxslv   +++|            TDUI = TDAMUI[0];
00864  M01S00864.sxslv   +++|            TDFAM = TDAMFAM[0];
00865  M01S00865.sxslv   +++|
00866  M01S00866.sxslv   +++|            FASTFOR RB = 1 STEP 1 WHILE RB LQ NUMRB AND NOT REQPROC
00867  M01S00867.sxslv   +++|            DO
00868  M01S00868.sxslv   +++|
00869  M01S00869.sxslv   +++|              BEGIN  # SEARCH FOR A DUPLICATE *TDAM* #
00870  M01S00870.sxslv   +++|
00871  M01S00871.sxslv   +++|              P<TDAM> = LOC(SM$TDAM[RB]);
00872  M01S00872.sxslv   +++|              IF TDASA EQ TDAMASA[0]  ##
00873  M01S00873.sxslv   +++|                AND TDUI EQ TDAMUI[0]  ##
00874  M01S00874.sxslv   +++|                AND TDFAM EQ TDAMFAM[0]  ##
00875  M01S00875.sxslv   +++|                AND SM$SRC[RB] EQ S"SUBMITTED"
00876  M01S00876.sxslv   +++|              THEN                   # FOUND A DUPLICATE #
00877  M01S00877.sxslv   +++|                BEGIN
00878  M01S00878.sxslv   +++|                REQPROC = TRUE;
00879  M01S00879.sxslv   +++|                END
00880  M01S00880.sxslv   +++|
00881  M01S00881.sxslv   +++|              END  # SEARCH FOR A DUPLICATE *TDAM* #
00882  M01S00882.sxslv   +++|
00883  M01S00883.sxslv   +++|            END  # CHECK STAGE REQUEST #
00884  M01S00884.sxslv   +++|
00885  M01S00885.sxslv   +++|          FASTFOR RB = 1 STEP 1 WHILE RB LQ NUMRB AND NOT REQPROC
00886  M01S00886.sxslv   +++|          DO
00887  M01S00887.sxslv   +++|            BEGIN  # SEARCH FOR A FREE REQUEST BLOCK #
00888  M01S00888.sxslv   +++|
00889  M01S00889.sxslv   +++|            IF SM$SRC[RB] EQ S"AVAIL" AND  ##
00890  M01S00890.sxslv   +++|              MSR$MRC[RB] EQ S"AVAIL"
00891  M01S00891.sxslv   +++|            THEN                     # AVAILABLE REQUEST BLOCK FOUND #
00892  M01S00892.sxslv   +++|              BEGIN  # ADD *TDAM* TO *STOM* BUFFER #
00893  M01S00893.sxslv   +++|
00894  M01S00894.sxslv   +++|              P<TDAM> = LOC(SM$TDAM[RB]);
00895  M01S00895.sxslv   +++|              TDAMREQST[0] = RA$TDAMRB[0];
00896  M01S00896.sxslv   +++|              SM$SRC[RB] = S"SUBMITTED";
00897  M01S00897.sxslv   +++|              SM$PDATERB[RB] = PDATEV[0];
00898  M01S00898.sxslv   +++|              STOM$TIME = 0;         # FORCE WRITE OF *STOM* FILE #
00899  M01S00899.sxslv   +++|              SM$REQCTL[0] = SM$REQCTL[0] + 1;
00900  M01S00900.sxslv   +++|              REQPROC = TRUE;
00901  M01S00901.sxslv   +++|              END  # ADD *TDAM* TO *STOM* BUFFER #
00902  M01S00902.sxslv   +++|
00903  M01S00903.sxslv   +++|            END  # SEARCH FOR A FREE REQUEST BLOCK #
00904  M01S00904.sxslv   +++|
00905  M01S00905.sxslv   +++|          IF REQPROC
00906  M01S00906.sxslv   +++|          THEN                       # REQUEST PROCESSED #
00907  M01S00907.sxslv   +++|            BEGIN
00908  M01S00908.sxslv   +++|            P<TDAM> = LOC(RA$TDAM[0]);
00909  M01S00909.sxslv   +++|            TDAMWORD[0] = 0;         # CLEAR FIRST WORD OF *TDAM* #
00910  M01S00910.sxslv   +++|            TEST MAINLOOP;
00911  M01S00911.sxslv   +++|            END
00912  M01S00912.sxslv   +++|
00913  M01S00913.sxslv   +++|#
00914  M01S00914.sxslv   +++|*     IF NO SPACE IS AVAILABLE IN THE REQUEST BLOCKS,
00915  M01S00915.sxslv   +++|*     GO THROUGH REST OF THE MAINLOOP AS IF THERE WERE
00916  M01S00916.sxslv   +++|*     NO *TDAM* REQUEST.
00917  M01S00917.sxslv   +++|#
00918  M01S00918.sxslv   +++|
00919  M01S00919.sxslv   +++|          END  # PROCESS THE *TDAM* REQUEST #
00920  M01S00920.sxslv   +++|
00921  M01S00921.sxslv   +++|        IF RTIMSECS[0] GR MTOS$TIME
00922  M01S00922.sxslv   +++|        THEN                         # PROCESS *MTOS* FILE #
00923  M01S00923.sxslv   +++|          BEGIN
00924  M01S00924.sxslv   +++|          SLVMTOS;
00925  M01S00925.sxslv   +++|          END
00926  M01S00926.sxslv   +++|
00927  M01S00927.sxslv   +++|        IF RTIMSECS[0] GR STOM$TIME
00928  M01S00928.sxslv   +++|        THEN                         # WRITE THE *STOM* FILE #
00929  M01S00929.sxslv   +++|          BEGIN
00930  M01S00930.sxslv   +++|          FLUSHSM;
00931  M01S00931.sxslv   +++|          TEST MAINLOOP;
00932  M01S00932.sxslv   +++|          END
00933  M01S00933.sxslv   +++|
00934  M01S00934.sxslv   +++|        IF SM$STATM[0] EQ S"ACTIVE"
00935  M01S00935.sxslv   +++|        THEN
00936  M01S00936.sxslv   +++|          BEGIN
00937  M01S00937.sxslv   +++|          RCLCT = SM$DELAY[0] * RCLFACTOR;
00938  M01S00938.sxslv   +++|          END
00939  M01S00939.sxslv   +++|
00940  M01S00940.sxslv   +++|        ELSE
00941  M01S00941.sxslv   +++|          BEGIN
00942  M01S00942.sxslv   +++|          RCLCT = SLRP$INTV * RCLFACTOR;
00943  M01S00943.sxslv   +++|          END
00944  M01S00944.sxslv   +++|
00945  M01S00945.sxslv   +++|        FASTFOR DUMMY = 1 STEP 1 UNTIL RCLCT
00946  M01S00946.sxslv   +++|        DO
00947  M01S00947.sxslv   +++|          BEGIN
00948  M01S00948.sxslv   +++|          RECALL(0);
00949  M01S00949.sxslv   +++|          END
00950  M01S00950.sxslv   +++|
00951  M01S00951.sxslv   +++|        END  # MAINLOOP #
00952  M01S00952.sxslv   +++|
00953  M01S00953.sxslv   +++|      END  # SLVLOOP #
00954  M01S00954.sxslv   +++|
00955  M01S00955.sxslv   +++|    TERM
00956  M01S00956.sxslv   +++|PROC SLVMTOS;
00957  M01S00957.sxslv   +++|# TITLE SLVMTOS - PROCESS *MTOS* COMMUNICATION FILE.                  #
00958  M01S00958.sxslv   +++|
00959  M01S00959.sxslv   +++|      BEGIN  # SLVMTOS #
00960  M01S00960.sxslv   +++|
00961  M01S00961.sxslv   +++|#
00962  M01S00962.sxslv   +++|**    SLVMTOS  - PROCESS THE *MTOS* COMMUNICATION FILE.
00963  M01S00963.sxslv   +++|*
00964  M01S00964.sxslv   +++|*     *SLVMTOS* WILL READ THE *MTOS* FILE TO A BUFFER, CHECK TO SEE IF
00965  M01S00965.sxslv   +++|*     THE *SSEXEC* HAS CHANGED STATUS, AND IF SO, ISSUE A MESSAGE TO
00966  M01S00966.sxslv   +++|*     THE DAYFILE AND CONSOLE.  IF THE *SSEXEC* IS ACTIVE, EACH REPLY
00967  M01S00967.sxslv   +++|*     BLOCK IS EXAMINED TO SEE IF A PREVIOUSLY SUBMITTED STAGE REQUEST
00968  M01S00968.sxslv   +++|*     HAS BEEN COMPLETED.
00969  M01S00969.sxslv   +++|*
00970  M01S00970.sxslv   +++|*     PROC SLVMTOS.
00971  M01S00971.sxslv   +++|*
00972  M01S00972.sxslv   +++|*     ENTRY      *MTOSS* (IN *COMXSEB*) CONTAINS THE *FET* FOR THE
00973  M01S00973.sxslv   +++|*                *MTOS* COMMUNICATION FILE.
00974  M01S00974.sxslv   +++|*
00975  M01S00975.sxslv   +++|*     EXIT       THE VARIABLE *MTOS$TIME* (IN *COMXSEB*) IS UPDATED TO
00976  M01S00976.sxslv   +++|*                INDICATE THE NEXT TIME THIS ROUTINE IS TO BE CALLED.
00977  M01S00977.sxslv   +++|*                IF AN ERROR CONDITION WAS DETECTED WHILE READING
00978  M01S00978.sxslv   +++|*                THE *MTOS* FILE, *SLVEND* IS SET TO *S"MTOSERR"*.
00979  M01S00979.sxslv   +++|*
00980  M01S00980.sxslv   +++|*     MESSAGES
00981  M01S00981.sxslv   +++|*                * SLVI ACTIVE, EXEC XXXX.*
00982  M01S00982.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT A CHANGE
00983  M01S00983.sxslv   +++|*                      IN THE STATUS OF THE *SSEXEC* HAS BEEN NOTICED.
00984  M01S00984.sxslv   +++|*                      THE NEW STATUS *XXXX* CAN BE EITHER *ACTIVE*,
00985  M01S00985.sxslv   +++|*                      *IDLE*, OR *INACTIVE*.
00986  M01S00986.sxslv   +++|*
00987  M01S00987.sxslv   +++|#
00988  M01S00988.sxslv   +++|
00989  M01S00989.sxslv   +++|#
00990  M01S00990.sxslv   +++|****  PROC SLVMTOS - XREF LIST BEGIN.
00991  M01S00991.sxslv   +++|#
00992  M01S00992.sxslv   +++|
00993  M01S00993.sxslv   +++|      XREF
00994  M01S00994.sxslv   +++|        BEGIN
00995  M01S00995.sxslv   +++|        PROC EESET;                  # ISSUE EESET (SET EVENT) MACRO #
00996  M01S00996.sxslv   +++|        PROC MESSAGE;                # ISSUES MESSAGE MACRO #
00997  M01S00997.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00998  M01S00998.sxslv   +++|        PROC READ;                   # READ FILE #
00999  M01S00999.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
01000  M01S01000.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
01001  M01S01001.sxslv   +++|        END
01002  M01S01002.sxslv   +++|
01003  M01S01003.sxslv   +++|#
01004  M01S01004.sxslv   +++|****  PROC SLVMTOS - XREF LIST END.
01005  M01S01005.sxslv   +++|#
01006  M01S01006.sxslv   +++|
01007  M01S01007.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
01008  M01S01008.sxslv   +++|*CALL,COMBFAS
01009  M01S01009.sxslv   +++|*CALL,COMBFET
01010  M01S01010.sxslv   +++|*CALL,COMBTDM
01011  M01S01011.sxslv   +++|*CALL,COMXIPR
01012  M01S01012.sxslv   +++|*CALL,COMXMMF
01013  M01S01013.sxslv   +++|*CALL,COMXSEB
01014  M01S01014.sxslv   +++|
01015  M01S01015.sxslv   +++|
01016  M01S01016.sxslv   +++|      ITEM I          U;             # INDUCTION VARIABLE #
01017  M01S01017.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
01018  M01S01018.sxslv   +++|                                               CONTROL EJECT;
01019  M01S01019.sxslv   +++|
01020  M01S01020.sxslv   +++|#
01021  M01S01021.sxslv   +++|*     READ THE *MTOS* FILE.
01022  M01S01022.sxslv   +++|#
01023  M01S01023.sxslv   +++|
01024  M01S01024.sxslv   +++|      REWIND(MTOSS,RCL);
01025  M01S01025.sxslv   +++|      P<FETSET> = LOC(MTOSS);
01026  M01S01026.sxslv   +++|      FET$IN[0] = FET$FRST[0];
01027  M01S01027.sxslv   +++|      FET$OUT[0] = FET$FRST[0];
01028  M01S01028.sxslv   +++|      READ(MTOSS,RCL);
01029  M01S01029.sxslv   +++|      RTIME(RTIMESTAT[0]);
01030  M01S01030.sxslv   +++|      PDATE(PDATESTAT[0]);
01031  M01S01031.sxslv   +++|      MTOS$TIME = RTIMSECS[0] + SM$DELAY[0];
01032  M01S01032.sxslv   +++|
01033  M01S01033.sxslv   +++|#
01034  M01S01034.sxslv   +++|*     CHECK THAT THE READ OF *MTOS* IS OK.
01035  M01S01035.sxslv   +++|#
01036  M01S01036.sxslv   +++|
01037  M01S01037.sxslv   +++|      IF FET$AT[0] NQ OK             # CIO ERROR #
01038  M01S01038.sxslv   +++|        OR FET$IN[0] - FET$OUT[0] NQ L$MTOS  # WRONG LENGTH #
01039  M01S01039.sxslv   +++|      THEN
01040  M01S01040.sxslv   +++|        BEGIN
01041  M01S01041.sxslv   +++|        SLVEND = S"MTOSERR";
01042  M01S01042.sxslv   +++|        RETURN;
01043  M01S01043.sxslv   +++|        END
01044  M01S01044.sxslv   +++|
01045  M01S01045.sxslv   +++|#
01046  M01S01046.sxslv   +++|*     LOCATE INDEX OF THIS SLAVE IN THE *MTOS* FILE.
01047  M01S01047.sxslv   +++|#
01048  M01S01048.sxslv   +++|
01049  M01S01049.sxslv   +++|      SINDX = 0;
01050  M01S01050.sxslv   +++|      FASTFOR I = 1 STEP 1 WHILE I LQ MAXSLV AND SINDX EQ 0
01051  M01S01051.sxslv   +++|      DO
01052  M01S01052.sxslv   +++|        BEGIN
01053  M01S01053.sxslv   +++|        IF MSH$PFNS[I] EQ PFNSTOM
01054  M01S01054.sxslv   +++|        THEN                         # FOUND MATCH #
01055  M01S01055.sxslv   +++|          BEGIN
01056  M01S01056.sxslv   +++|          SINDX = I;
01057  M01S01057.sxslv   +++|          END
01058  M01S01058.sxslv   +++|
01059  M01S01059.sxslv   +++|        END
01060  M01S01060.sxslv   +++|
01061  M01S01061.sxslv   +++|      IF SINDX EQ 0
01062  M01S01062.sxslv   +++|      THEN
01063  M01S01063.sxslv   +++|        BEGIN
01064  M01S01064.sxslv   +++|        SLVEND = S"MTOSERR";
01065  M01S01065.sxslv   +++|        RETURN;
01066  M01S01066.sxslv   +++|        END
01067  M01S01067.sxslv   +++|
01068  M01S01068.sxslv   +++|      P<MTOSREPBLK> = LOC(MTOSHEAD) + L$MTOSH + (SINDX-1)*NUMRB;
01069  M01S01069.sxslv   +++|                                               CONTROL EJECT;
01070  M01S01070.sxslv   +++|
01071  M01S01071.sxslv   +++|#
01072  M01S01072.sxslv   +++|*     CHECK FOR A CHANGE IN MASTER EXEC STATUS.
01073  M01S01073.sxslv   +++|#
01074  M01S01074.sxslv   +++|
01075  M01S01075.sxslv   +++|      IF MSH$MWC[0] NQ SM$MWC[0]
01076  M01S01076.sxslv   +++|      THEN                           # MASTER IS ACTIVE #
01077  M01S01077.sxslv   +++|        BEGIN  # RESET STATUS AND TIME OUT VALUES IN *STOM* #
01078  M01S01078.sxslv   +++|        IF SM$STATM[0] NQ S"ACTIVE"
01079  M01S01079.sxslv   +++|        THEN                         # MASTER RESUMED RUNNING #
01080  M01S01080.sxslv   +++|          BEGIN
01081  M01S01081.sxslv   +++|          MSGE$STAT[0] = "ACTIVE.";
01082  M01S01082.sxslv   +++|          MESSAGE(MSGEXSTAT[0],SYSUDF1);
01083  M01S01083.sxslv   +++|          END
01084  M01S01084.sxslv   +++|
01085  M01S01085.sxslv   +++|        SM$MSW[0] = MSH$MSW[0];
01086  M01S01086.sxslv   +++|        SM$STATM[0] = S"ACTIVE";
01087  M01S01087.sxslv   +++|        SM$TIMOUT[0] = RTIMSECS[0] + SLAV$INTV;
01088  M01S01088.sxslv   +++|        END  # RESET STATUS AND TIME OUT VALUES IN *STOM* #
01089  M01S01089.sxslv   +++|
01090  M01S01090.sxslv   +++|      ELSE                           # MASTER DID NOT UPDATE ITS WRITE
01091  M01S01091.sxslv   +++|                                       COUNTER #
01092  M01S01092.sxslv   +++|        BEGIN  # CHECK FOR TIMEOUT #
01093  M01S01093.sxslv   +++|        IF SM$TIMOUT[0] LS RTIMSECS[0]
01094  M01S01094.sxslv   +++|        THEN                         # MASTER IDLE OR TIMED OUT #
01095  M01S01095.sxslv   +++|          BEGIN
01096  M01S01096.sxslv   +++|          IF MSH$IDLE[0]
01097  M01S01097.sxslv   +++|          THEN
01098  M01S01098.sxslv   +++|            BEGIN
01099  M01S01099.sxslv   +++|            MSGE$STAT[0] = "IDLE.";
01100  M01S01100.sxslv   +++|            END
01101  M01S01101.sxslv   +++|
01102  M01S01102.sxslv   +++|          ELSE
01103  M01S01103.sxslv   +++|            BEGIN
01104  M01S01104.sxslv   +++|            MSGE$STAT[0] = "INACTIVE.";
01105  M01S01105.sxslv   +++|            END
01106  M01S01106.sxslv   +++|
01107  M01S01107.sxslv   +++|          MESSAGE(MSGEXSTAT[0],SYSUDF1);
01108  M01S01108.sxslv   +++|          SM$TIMOUT[0] = MAXSECS;
01109  M01S01109.sxslv   +++|          SM$STATM[0] = S"DEAD";
01110  M01S01110.sxslv   +++|          END
01111  M01S01111.sxslv   +++|
01112  M01S01112.sxslv   +++|        RETURN;
01113  M01S01113.sxslv   +++|        END  # CHECK FOR TIMEOUT #
01114  M01S01114.sxslv   +++|
01115  M01S01115.sxslv   +++|                                               CONTROL EJECT;
01116  M01S01116.sxslv   +++|
01117  M01S01117.sxslv   +++|#
01118  M01S01118.sxslv   +++|*     PROCESS REQUEST BLOCKS WHICH HAVE BEEN
01119  M01S01119.sxslv   +++|*     FINISHED BY MASTER EXEC BY MAKING THEM AVAILABLE.
01120  M01S01120.sxslv   +++|#
01121  M01S01121.sxslv   +++|
01122  M01S01122.sxslv   +++|      FASTFOR RB = 1 STEP 1 UNTIL NUMRB
01123  M01S01123.sxslv   +++|      DO
01124  M01S01124.sxslv   +++|        BEGIN  # CHECK EACH REQUEST BLOCK #
01125  M01S01125.sxslv   +++|        IF SM$SRC[RB] NQ S"AVAIL" AND  ##
01126  M01S01126.sxslv   +++|          MSR$MRC[RB] EQ S"FINISHED"
01127  M01S01127.sxslv   +++|        THEN
01128  M01S01128.sxslv   +++|          BEGIN  # PROCESS FINISHED REQUEST #
01129  M01S01129.sxslv   +++|          SM$SRC[RB] = S"AVAIL";
01130  M01S01130.sxslv   +++|          SM$REQCTL[0] = SM$REQCTL[0] + 1;
01131  M01S01131.sxslv   +++|          SM$PDATE[RB] = PDATEV[0];
01132  M01S01132.sxslv   +++|          P<TDAM> = LOC(SM$TDAM[RB]);
01133  M01S01133.sxslv   +++|          IF MSR$REPLY[0] EQ S"OK" AND  ##
01134  M01S01134.sxslv   +++|            TDAMEVENT[0] NQ 0
01135  M01S01135.sxslv   +++|          THEN                       # ISSUE THE EVENT #
01136  M01S01136.sxslv   +++|            BEGIN
01137  M01S01137.sxslv   +++|            EESET(TDAMEVENT[0]);
01138  M01S01138.sxslv   +++|            END
01139  M01S01139.sxslv   +++|
01140  M01S01140.sxslv   +++|          END  # PROCESS FINISHED REQUESTS #
01141  M01S01141.sxslv   +++|
01142  M01S01142.sxslv   +++|        END  # CHECK EACH REQUEST BLOCK #
01143  M01S01143.sxslv   +++|
01144  M01S01144.sxslv   +++|      END  # SLVMTOS #
01145  M01S01145.sxslv   +++|
01146  M01S01146.sxslv   +++|    TERM
cdc/nos2.source/opl.opl871/deck/sxslv.txt ยท Last modified: by 127.0.0.1