User Tools

Site Tools


Action unknown: copypageplugin__copy
cdc:nos2.source:opl.opl871:deck:sxslv

Deck SXSLV

Library Member Format: MODIFY

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M00S00001.sxslv   +++|PROC FLUSHSM;
00002  M00S00002.sxslv   +++|# TITLE FLUSHSM - FLUSH THE *STOM* BUFFERS.                           #
00003  M00S00003.sxslv   +++|
00004  M00S00004.sxslv   +++|      BEGIN  # FLUSH *STOM* BUFFERS #
00005  M00S00005.sxslv   +++|
00006  M00S00006.sxslv   +++|#
00007  M00S00007.sxslv   +++|**    FLUSHSM  - FLUSH THE *STOM* BUFFERS.
00008  M00S00008.sxslv   +++|*
00009  M00S00009.sxslv   +++|*     *FLUSHSM* WILL UPDATE THE SLAVE WRITE COUNTER AND PACKED
00010  M00S00010.sxslv   +++|*     DATE/TIME FIELDS IN THE SLAVE STATUS WORD OF THE *STOM* FILE
00011  M00S00011.sxslv   +++|*     BUFFER AND UPDATE THE DISK IMAGE OF THE *STOM* FILE BY
00012  M00S00012.sxslv   +++|*     WRITING THE BUFFER TO THE LINK DEVICE.
00013  M00S00013.sxslv   +++|*
00014  M00S00014.sxslv   +++|*     PROC FLUSHSM.
00015  M00S00015.sxslv   +++|*
00016  M00S00016.sxslv   +++|*     ENTRY      ARRAY *STOMS* IS THE *FET* FOR THE *STOM* FILE
00017  M00S00017.sxslv   +++|*                BUFFER.
00018  M00S00018.sxslv   +++|*
00019  M00S00019.sxslv   +++|*     EXIT       THE NEXT TIME *FLUSHSM* IS TO BE CALLED IS ESTABLISHED
00020  M00S00020.sxslv   +++|*                BY UPDATING THE VARIABLE *STOM$TIME*.
00021  M00S00021.sxslv   +++|#
00022  M00S00022.sxslv   +++|
00023  M00S00023.sxslv   +++|#
00024  M00S00024.sxslv   +++|****  PROC FLUSHSM - XREF LIST BEGIN.
00025  M00S00025.sxslv   +++|#
00026  M00S00026.sxslv   +++|
00027  M00S00027.sxslv   +++|      XREF
00028  M00S00028.sxslv   +++|        BEGIN
00029  M00S00029.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00030  M00S00030.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
00031  M00S00031.sxslv   +++|        PROC REWRITR;                # REWRITE FILE #
00032  M00S00032.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
00033  M00S00033.sxslv   +++|        END
00034  M00S00034.sxslv   +++|
00035  M00S00035.sxslv   +++|
00036  M00S00036.sxslv   +++|#
00037  M00S00037.sxslv   +++|****  PROC FLUSHSM - XREF LIST END.
00038  M00S00038.sxslv   +++|#
00039  M00S00039.sxslv   +++|
00040  M00S00040.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00041  M00S00041.sxslv   +++|*CALL,COMBFAS
00042  M00S00042.sxslv   +++|*CALL,COMBFET
00043  M00S00043.sxslv   +++|*CALL,COMXCTF
00044  M00S00044.sxslv   +++|*CALL,COMXIPR
00045  M00S00045.sxslv   +++|*CALL,COMXMMF
00046  M00S00046.sxslv   +++|*CALL,COMXSEB
00047  M00S00047.sxslv   +++|
00048  M00S00048.sxslv   +++|
00049  M00S00049.sxslv   +++|
00050  M00S00050.sxslv   +++|
00051  M00S00051.sxslv   +++|
00052  M00S00052.sxslv   +++|#
00053  M00S00053.sxslv   +++|*     UPDATE THE HEADER INFORMATION OF THE *STOM* FILE.
00054  M00S00054.sxslv   +++|#
00055  M00S00055.sxslv   +++|
00056  M00S00056.sxslv   +++|      SM$SWC[0] = SM$SWC[0] + 1;
00057  M00S00057.sxslv   +++|      PDATE(PDATESTAT[0]);
00058  M00S00058.sxslv   +++|      RTIME(RTIMESTAT[0]);
00059  M00S00059.sxslv   +++|      SM$PDATE[0] = PDATEV[0];
00060  M00S00060.sxslv   +++|
00061  M00S00061.sxslv   +++|#
00062  M00S00062.sxslv   +++|*     SET UP THE TIME TO NEXT FLUSH THE *STOM* BUFFERS.
00063  M00S00063.sxslv   +++|#
00064  M00S00064.sxslv   +++|
00065  M00S00065.sxslv   +++|      STOM$TIME = RTIMSECS[0] + SM$DELAY[0];
00066  M00S00066.sxslv   +++|
00067  M00S00067.sxslv   +++|#
00068  M00S00068.sxslv   +++|*     WRITE THE *STOM* BUFFER TO THE *STOM* FILE.
00069  M00S00069.sxslv   +++|#
00070  M00S00070.sxslv   +++|
00071  M00S00071.sxslv   +++|      REWIND(STOMS,RCL);
00072  M00S00072.sxslv   +++|      P<FETSET> = LOC(STOMS);
00073  M00S00073.sxslv   +++|      FET$OUT[0] = FET$FRST[0];
00074  M00S00074.sxslv   +++|      FET$IN[0] = FET$FRST[0] + L$STOM;
00075  M00S00075.sxslv   +++|      REWRITR(STOMS,RCL);
00076  M00S00076.sxslv   +++|      RETURN;
00077  M00S00077.sxslv   +++|      END  # FLUSHSM #
00078  M00S00078.sxslv   +++|
00079  M00S00079.sxslv   +++|    TERM
00080  M00S00080.sxslv   +++|PROC INITSLV((MID),(MIDX),(SLVDELAY));
00081  M00S00081.sxslv   +++|# TITLE INITSLV - INITIALIZE SLAVE EXEC.                              #
00082  M00S00082.sxslv   +++|
00083  M00S00083.sxslv   +++|      BEGIN  # INITSLV #
00084  M00S00084.sxslv   +++|
00085  M00S00085.sxslv   +++|#
00086  M00S00086.sxslv   +++|**    INITSLV  - INITIALIZATION ROUTINE FOR THE *SSSLV*.
00087  M00S00087.sxslv   +++|*
00088  M00S00088.sxslv   +++|*     *INITSLV* INITIALIZES THE *STOM* AND *MTOS* FILES FOR PROCESSING
00089  M00S00089.sxslv   +++|*     BY THE REST OF THE *SSSLV* ROUTINES.
00090  M00S00090.sxslv   +++|*
00091  M00S00091.sxslv   +++|*     PROC INITSLV((MID),(MIDX),(SLVDELAY))
00092  M00S00092.sxslv   +++|*
00093  M00S00093.sxslv   +++|*     ENTRY      (MID)   - MACHINE ID OF THE *SSSLV*.
00094  M00S00094.sxslv   +++|*                (MIDX)  - MACHINE INDEX OF THE *SSSLV*.
00095  M00S00095.sxslv   +++|*                (SLVDELAY)  - THE INTERVAL IN SECONDS THAT THE
00096  M00S00096.sxslv   +++|*                              *SSEXEC* IS TO POLL THE *SSSLV*-S
00097  M00S00097.sxslv   +++|*                              COMMUNICATION FILE (*STOM*).
00098  M00S00098.sxslv   +++|*
00099  M00S00099.sxslv   +++|*                THE CALLING ROUTINE HAS DONE A *SETPFP* TO THE CORRECT
00100  M00S00100.sxslv   +++|*                FAMILY AND USER INDEX.
00101  M00S00101.sxslv   +++|*
00102  M00S00102.sxslv   +++|*     EXIT       THE *STOM* AND *MTOS* FILES ARE ATTACHED WITH FET-S
00103  M00S00103.sxslv   +++|*                AND BUFFERS ESTABLISHED SO THEY CAN BE WRITTEN AND
00104  M00S00104.sxslv   +++|*                READ, RESPECTIVELY.
00105  M00S00105.sxslv   +++|*
00106  M00S00106.sxslv   +++|*                THE ITEM *SLVEND* IS SET TO A STATUS VALUE OF IDLE IF
00107  M00S00107.sxslv   +++|*                THE IDLE FLAG WAS SET.  THIS WILL PERMIT THE OPERATOR
00108  M00S00108.sxslv   +++|*                TO TERMINATE THE *SSSLV* BEFORE INITIALIZATION IS
00109  M00S00109.sxslv   +++|*                COMPLETE.
00110  M00S00110.sxslv   +++|*
00111  M00S00111.sxslv   +++|*     MESSAGES
00112  M00S00112.sxslv   +++|*                * SLVI ACTIVE, EXEC XXXX.*
00113  M00S00113.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THE INITIAL
00114  M00S00114.sxslv   +++|*                      STATUS OF THE *SSEXEC*. *XXXX* = *ACTIVE*
00115  M00S00115.sxslv   +++|*                      OR *IDLE*.
00116  M00S00116.sxslv   +++|*
00117  M00S00117.sxslv   +++|*
00118  M00S00118.sxslv   +++|*                * SLVI, STBMNOI FILE PROBLEM. *
00119  M00S00119.sxslv   +++|*                      A MESSAGE INDICATING THE STATUS OF THE ATTEMPT
00120  M00S00120.sxslv   +++|*                      TO ESTABLISH ACCESS TO THE COMMUNICATION FILE
00121  M00S00121.sxslv   +++|*                      USED TO SEND MESSAGES TO THE *SSEXEC*.
00122  M00S00122.sxslv   +++|#
00123  M00S00123.sxslv   +++|
00124  M00S00124.sxslv   +++|      ITEM MID        C(2);          # MACHINE ID OF THE SLAVE EXEC #
00125  M00S00125.sxslv   +++|      ITEM MIDX       U;             # MACHINE INDEX OF THE *SSSLV* #
00126  M00S00126.sxslv   +++|      ITEM SLVDELAY   U;             # TIME IN SECONDS FOR MASTER TO
00127  M00S00127.sxslv   +++|                                       POLL *STOM* #
00128  M00S00128.sxslv   +++|
00129  M00S00129.sxslv   +++|#
00130  M00S00130.sxslv   +++|****  PROC INITSLV - XREF LIST BEGIN.
00131  M00S00131.sxslv   +++|#
00132  M00S00132.sxslv   +++|
00133  M00S00133.sxslv   +++|      XREF
00134  M00S00134.sxslv   +++|        BEGIN
00135  M00S00135.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00136  M00S00136.sxslv   +++|        PROC MEMORY;                 # ISSUE MEMORY MACRO #
00137  M00S00137.sxslv   +++|        PROC MESSAGE;                # ISSUES MESSAGE MACRO #
00138  M00S00138.sxslv   +++|        PROC PFD;                    # PERMANENT FILE REQUEST DELAYS #
00139  M00S00139.sxslv   +++|        PROC READ;                   # READ FILE #
00140  M00S00140.sxslv   +++|        PROC READW;                  # READ LINE #
00141  M00S00141.sxslv   +++|        PROC RECALL;                 # ISSUE RECALL MACRO #
00142  M00S00142.sxslv   +++|        PROC RETERN;                 # RETURN FILE #
00143  M00S00143.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
00144  M00S00144.sxslv   +++|        PROC WRITER;                 # WRITE FILE #
00145  M00S00145.sxslv   +++|        FUNC XCOD C(10);             # INTEGER TO DISPLAY #
00146  M00S00146.sxslv   +++|        PROC ZFILL;                  # ZERO FILL AN ARRAY #
00147  M00S00147.sxslv   +++|        PROC ZSETFET;                # INITIALIZE *FET* #
00148  M00S00148.sxslv   +++|        END
00149  M00S00149.sxslv   +++|
00150  M00S00150.sxslv   +++|#
00151  M00S00151.sxslv   +++|****  PROC INITSLV - XREF LIST END.
00152  M00S00152.sxslv   +++|#
00153  M00S00153.sxslv   +++|
00154  M00S00154.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00155  M00S00155.sxslv   +++|*CALL,COMBFAS
00156  M00S00156.sxslv   +++|*CALL,COMBFET
00157  M00S00157.sxslv   +++|*CALL,COMBPFS
00158  M00S00158.sxslv   +++|*CALL,COMXCTF
00159  M00S00159.sxslv   +++|*CALL,COMXINT
00160  M00S00160.sxslv   +++|*CALL,COMSPFM
00161  M00S00161.sxslv   +++|*CALL,COMXIPR
00162  M00S00162.sxslv   +++|*CALL,COMXJCA
00163  M00S00163.sxslv   +++|*CALL,COMXMMF
00164  M00S00164.sxslv   +++|*CALL,COMXSEB
00165  M00S00165.sxslv   +++|
00166  M00S00166.sxslv   +++|      ITEM I          U;             # INDUCTION VARIABLE #
00167  M00S00167.sxslv   +++|      ITEM INITMTOS   U;             # INDUCTION VARIABLE #
00168  M00S00168.sxslv   +++|      ITEM INITSTOM   U;             # INDUCTION VARIABLE #
00169  M00S00169.sxslv   +++|      ITEM MTOSOK     B;             # CONTROLS LOOP TO ATTACH *MTOS* #
00170  M00S00170.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
00171  M00S00171.sxslv   +++|      ITEM ONEMSG     B;             # CONTROLS DAYFILE MESSAGES #
00172  M00S00172.sxslv   +++|      ITEM STAT       U;             # SCRATCH VARIABLE #
00173  M00S00173.sxslv   +++|      ITEM STOMOK     B;             # CONTROLS REDEFINING *STOM* #
00174  M00S00174.sxslv   +++|
00175  M00S00175.sxslv   +++|                                               CONTROL EJECT;
00176  M00S00176.sxslv   +++|
00177  M00S00177.sxslv   +++|#
00178  M00S00178.sxslv   +++|*     INITIALIZE *MTOS*/*STOM* FILE LENGTH VARIABLES.
00179  M00S00179.sxslv   +++|#
00180  M00S00180.sxslv   +++|
00181  M00S00181.sxslv   +++|      L$STOM = (NUMRB + 1) * RBSIZE;
00182  M00S00182.sxslv   +++|      L$MTOSH = (MAXSLV + 1) * 3;
00183  M00S00183.sxslv   +++|      L$MTOS = L$MTOSH + NUMRB * NUMSLV;
00184  M00S00184.sxslv   +++|
00185  M00S00185.sxslv   +++|#
00186  M00S00186.sxslv   +++|*     CALCULATE THE SPACE NEEDED FOR THE *MTOS* BUFFER.
00187  M00S00187.sxslv   +++|*     OBTAIN THE SPACE VIA THE *MEMORY* REQUEST.
00188  M00S00188.sxslv   +++|#
00189  M00S00189.sxslv   +++|
00190  M00S00190.sxslv   +++|      P<MTOSHEAD> = RA$NWA[0];
00191  M00S00191.sxslv   +++|      I = (L$MTOS + PRULEN) / PRULEN;
00192  M00S00192.sxslv   +++|      MTOSBUFL = I * PRULEN + 1;
00193  M00S00193.sxslv   +++|      MEM$AMT[0] = RA$NWA[0] + MTOSBUFL;
00194  M00S00194.sxslv   +++|      MEMORY("CM",MEMREQ,RCL,NA);
00195  M00S00195.sxslv   +++|
00196  M00S00196.sxslv   +++|
00197  M00S00197.sxslv   +++|#
00198  M00S00198.sxslv   +++|*     INITIALIZE THE *STOM* FILE.
00199  M00S00199.sxslv   +++|#
00200  M00S00200.sxslv   +++|
00201  M00S00201.sxslv   +++|      P<STOMFILE> = LOC(STOMSBUF);
00202  M00S00202.sxslv   +++|      PFNSTOM = STOMPFN;
00203  M00S00203.sxslv   +++|      CHAR10 = XCOD(MIDX);
00204  M00S00204.sxslv   +++|      CHAR1 = C<9,1>CHAR10;
00205  M00S00205.sxslv   +++|      B<36,6>PFNSTOM = CHAR1;
00206  M00S00206.sxslv   +++|      MSG$SINDX[0] = CHAR1;
00207  M00S00207.sxslv   +++|      ABT$SINDX[0] = CHAR1;
00208  M00S00208.sxslv   +++|      ERR$SINDX[0] = CHAR1;
00209  M00S00209.sxslv   +++|      IDLE$SINDX[0] = CHAR1;
00210  M00S00210.sxslv   +++|      MSGE$SINDX[0] = CHAR1;
00211  M00S00211.sxslv   +++|
00212  M00S00212.sxslv   +++|      MSG$NAME[0] = PFNSTOM;
00213  M00S00213.sxslv   +++|
00214  M00S00214.sxslv   +++|      IF MIDX EQ 0
00215  M00S00215.sxslv   +++|      THEN                           # SINGLE MAINFRAME MODE #
00216  M00S00216.sxslv   +++|        BEGIN
00217  M00S00217.sxslv   +++|        MSG$STAT[0] = "ONE MAINFRAME.";
00218  M00S00218.sxslv   +++|        GOTO MODERROR;
00219  M00S00219.sxslv   +++|        END
00220  M00S00220.sxslv   +++|
00221  M00S00221.sxslv   +++|
00222  M00S00222.sxslv   +++|        STOMOK = TRUE;
00223  M00S00223.sxslv   +++|        ZSETFET(LOC(STOMS),STOMSLFN,LOC(MTOSHEAD),PRULEN + 1,SFETL);
00224  M00S00224.sxslv   +++|        RETERN(STOMS,RCL);
00225  M00S00225.sxslv   +++|        PFD("ATTACH",STOMSLFN,PFNSTOM,"PW",STOMPW,"M","M",
00226  M00S00226.sxslv   +++|          "RC",PFSTAT,"NA",0,"UP",0,0);
00227  M00S00227.sxslv   +++|        IF PFSTAT EQ FBS
00228  M00S00228.sxslv   +++|        THEN                         # *STOM* BUSY #
00229  M00S00229.sxslv   +++|          BEGIN
00230  M00S00230.sxslv   +++|          GOTO WAITSTOM;
00231  M00S00231.sxslv   +++|          END
00232  M00S00232.sxslv   +++|
00233  M00S00233.sxslv   +++|
00234  M00S00234.sxslv   +++|#
00235  M00S00235.sxslv   +++|*     READ THE *STOM* FILE AND INITIALIZE MISSING FIELDS.
00236  M00S00236.sxslv   +++|*     IF THE ATTACH FAILED, THE ENTIRE PERMANENT
00237  M00S00237.sxslv   +++|*     FILE WILL BE INITIALIZED.
00238  M00S00238.sxslv   +++|#
00239  M00S00239.sxslv   +++|
00240  M00S00240.sxslv   +++|        ZFILL(STOMSBUF[0],L$STOM);
00241  M00S00241.sxslv   +++|        IF PFSTAT EQ OK
00242  M00S00242.sxslv   +++|        THEN                         # INITIALIZE THE *STOM* HEADER #
00243  M00S00243.sxslv   +++|          BEGIN
00244  M00S00244.sxslv   +++|          READ(STOMS,NRCL);
00245  M00S00245.sxslv   +++|          READW(STOMS,STOMSBUF[0],RBSIZE,STAT);
00246  M00S00246.sxslv   +++|          END
00247  M00S00247.sxslv   +++|
00248  M00S00248.sxslv   +++|        STOMOK = STAT EQ OK AND PFSTAT EQ OK;
00249  M00S00249.sxslv   +++|        SM$MIDS[0] = MID;
00250  M00S00250.sxslv   +++|        SM$IDLE[0] = FALSE;
00251  M00S00251.sxslv   +++|        IF SLVDELAY LQ 0
00252  M00S00252.sxslv   +++|        THEN
00253  M00S00253.sxslv   +++|          BEGIN
00254  M00S00254.sxslv   +++|          SM$DELAY[0] = SLRP$INTV;
00255  M00S00255.sxslv   +++|          END
00256  M00S00256.sxslv   +++|
00257  M00S00257.sxslv   +++|        ELSE
00258  M00S00258.sxslv   +++|          BEGIN
00259  M00S00259.sxslv   +++|          SM$DELAY[0] = SLVDELAY;
00260  M00S00260.sxslv   +++|          END
00261  M00S00261.sxslv   +++|
00262  M00S00262.sxslv   +++|        SLOWFOR RB = 1 STEP 1 WHILE STOMOK AND RB LQ NUMRB
00263  M00S00263.sxslv   +++|        DO
00264  M00S00264.sxslv   +++|          BEGIN  # INITIALIZE EACH REQUEST BLOCK #
00265  M00S00265.sxslv   +++|
00266  M00S00266.sxslv   +++|          READW(STOMS,STOMSBUF[RB],RBSIZE,STAT);
00267  M00S00267.sxslv   +++|
00268  M00S00268.sxslv   +++|          IF STAT EQ OK
00269  M00S00269.sxslv   +++|          THEN                       # INITIALIZE OLD FIELDS #
00270  M00S00270.sxslv   +++|            BEGIN
00271  M00S00271.sxslv   +++|            IF SM$SRC[RB] EQ S"SUBMITTED"
00272  M00S00272.sxslv   +++|            THEN                     # CANCEL PREVIOUS REQUEST #
00273  M00S00273.sxslv   +++|              BEGIN
00274  M00S00274.sxslv   +++|              SM$SRC[RB] = S"CANCEL";
00275  M00S00275.sxslv   +++|              END
00276  M00S00276.sxslv   +++|
00277  M00S00277.sxslv   +++|            END
00278  M00S00278.sxslv   +++|
00279  M00S00279.sxslv   +++|          ELSE                       # ENTIRE REQUEST BLOCK #
00280  M00S00280.sxslv   +++|            BEGIN
00281  M00S00281.sxslv   +++|            STOMOK = FALSE;
00282  M00S00282.sxslv   +++|            ZFILL(STOMSBUF[RB],RBSIZE);
00283  M00S00283.sxslv   +++|            END
00284  M00S00284.sxslv   +++|
00285  M00S00285.sxslv   +++|          END  # INITIALIZE EACH REQUEST BLOCK #
00286  M00S00286.sxslv   +++|
00287  M00S00287.sxslv   +++|#
00288  M00S00288.sxslv   +++|*     INITIALIZE THE FET TO BE USED FOR DOING
00289  M00S00289.sxslv   +++|*     I/O ON THE *STOM* FILE.
00290  M00S00290.sxslv   +++|#
00291  M00S00291.sxslv   +++|
00292  M00S00292.sxslv   +++|
00293  M00S00293.sxslv   +++|        ZSETFET(LOC(STOMS),STOMSLFN,LOC(STOMSBUF),L$STOM + 1,SFETL);
00294  M00S00294.sxslv   +++|
00295  M00S00295.sxslv   +++|#
00296  M00S00296.sxslv   +++|*     IF THE ATTACH OR READ HAD A PROBLEM, PURGE
00297  M00S00297.sxslv   +++|*     THE OLD *STOM* FILE AND DEFINE A NEW ONE.  THEN
00298  M00S00298.sxslv   +++|*     WRITE OUT THE INITIALIZED *STOM* FILE AND
00299  M00S00299.sxslv   +++|*     REATTACH *STOM* IN MODIFY MODE.
00300  M00S00300.sxslv   +++|#
00301  M00S00301.sxslv   +++|
00302  M00S00302.sxslv   +++|        IF NOT STOMOK
00303  M00S00303.sxslv   +++|        THEN
00304  M00S00304.sxslv   +++|          BEGIN  # CREATE A NEW *STOM* FILE #
00305  M00S00305.sxslv   +++|
00306  M00S00306.sxslv   +++|          RETERN(STOMS,RCL);
00307  M00S00307.sxslv   +++|          PFD("PURGE",PFNSTOM,"PW",STOMPW,"RC",PFSTAT,"UP",0,0);
00308  M00S00308.sxslv   +++|          PFD("DEFINE",STOMSLFN,PFNSTOM,"PW",STOMPW,"BR","N",
00309  M00S00309.sxslv   +++|            "R",LINK$DT[0],"RC",PFSTAT,"UP",0,0);
00310  M00S00310.sxslv   +++|          IF PFSTAT NQ OK
00311  M00S00311.sxslv   +++|          THEN
00312  M00S00312.sxslv   +++|            BEGIN
00313  M00S00313.sxslv   +++|            GOTO WAITSTOM;
00314  M00S00314.sxslv   +++|            END
00315  M00S00315.sxslv   +++|
00316  M00S00316.sxslv   +++|          FET$OUT[0] = FET$FRST[0];
00317  M00S00317.sxslv   +++|          FET$IN[0] = FET$FRST[0] + L$STOM;
00318  M00S00318.sxslv   +++|          WRITER(STOMS,RCL);
00319  M00S00319.sxslv   +++|          PFD("ATTACH",STOMSLFN,PFNSTOM,"PW",STOMPW,"M","M",
00320  M00S00320.sxslv   +++|            "RC",PFSTAT,"NA",0,"UP",0,0);
00321  M00S00321.sxslv   +++|          IF PFSTAT NQ OK
00322  M00S00322.sxslv   +++|          THEN                       # REATTACH FAILED #
00323  M00S00323.sxslv   +++|            BEGIN
00324  M00S00324.sxslv   +++|            GOTO WAITSTOM;
00325  M00S00325.sxslv   +++|            END
00326  M00S00326.sxslv   +++|
00327  M00S00327.sxslv   +++|          END  # CREATE A NEW *STOM* FILE #
00328  M00S00328.sxslv   +++|
00329  M00S00329.sxslv   +++|
00330  M00S00330.sxslv   +++|
00331  M00S00331.sxslv   +++|
00332  M00S00332.sxslv   +++|
00333  M00S00333.sxslv   +++|
00334  M00S00334.sxslv   +++|#
00335  M00S00335.sxslv   +++|*     ATTACH THE *MTOS* FILE AND COMPLETE INITIALIZATION.
00336  M00S00336.sxslv   +++|#
00337  M00S00337.sxslv   +++|
00338  M00S00338.sxslv   +++|      ZSETFET(LOC(MTOSS),MTOSSLFN,LOC(MTOSHEAD),MTOSBUFL,SFETL);
00339  M00S00339.sxslv   +++|      MTOSOK = FALSE;
00340  M00S00340.sxslv   +++|      MSG$NAME[0] = MTBSPFN;
00341  M00S00341.sxslv   +++|
00342  M00S00342.sxslv   +++|      FASTFOR INITMTOS = 1 STEP 1 WHILE NOT MTOSOK
00343  M00S00343.sxslv   +++|      DO
00344  M00S00344.sxslv   +++|        BEGIN  # INITIALIZE *MTOS* FILE #
00345  M00S00345.sxslv   +++|
00346  M00S00346.sxslv   +++|        PFD("ATTACH",MTOSSLFN,MTBSPFN,"PW",MTOSPW,"M","RM",
00347  M00S00347.sxslv   +++|          "RC",PFSTAT,"NA",0,"UP",0,0);
00348  M00S00348.sxslv   +++|        IF PFSTAT NQ OK
00349  M00S00349.sxslv   +++|        THEN
00350  M00S00350.sxslv   +++|          BEGIN
00351  M00S00351.sxslv   +++|          GOTO WAITMTOS;
00352  M00S00352.sxslv   +++|          END
00353  M00S00353.sxslv   +++|
00354  M00S00354.sxslv   +++|        REWIND(MTOSS[0],RCL);
00355  M00S00355.sxslv   +++|        READ(MTOSS,RCL);
00356  M00S00356.sxslv   +++|
00357  M00S00357.sxslv   +++|#
00358  M00S00358.sxslv   +++|*     VERIFY LENGTH OF THE *MTOS* FILE IS PER EXPECTATIONS.
00359  M00S00359.sxslv   +++|#
00360  M00S00360.sxslv   +++|
00361  M00S00361.sxslv   +++|        IF FET$IN[0]-FET$OUT[0] NQ L$MTOS OR  ##
00362  M00S00362.sxslv   +++|          MSH$NUMRB[0] NQ NUMRB OR   ##
00363  M00S00363.sxslv   +++|          MSH$NUMSLV[0] NQ NUMSLV
00364  M00S00364.sxslv   +++|        THEN                         # *MTOS* FILE IS WRONG LENGTH #
00365  M00S00365.sxslv   +++|          BEGIN
00366  M00S00366.sxslv   +++|          GOTO WAITMTOS;
00367  M00S00367.sxslv   +++|          END
00368  M00S00368.sxslv   +++|
00369  M00S00369.sxslv   +++|#
00370  M00S00370.sxslv   +++|*     LOCATE INDEX OF THIS SLAVE IN THE *MTOS* FILE.
00371  M00S00371.sxslv   +++|#
00372  M00S00372.sxslv   +++|
00373  M00S00373.sxslv   +++|        SINDX = 0;
00374  M00S00374.sxslv   +++|        FASTFOR I = 1 STEP 1 WHILE I LQ MAXSLV AND SINDX EQ 0
00375  M00S00375.sxslv   +++|        DO
00376  M00S00376.sxslv   +++|          BEGIN  # SEARCH FOR THE INDEX OF THIS SLAVE #
00377  M00S00377.sxslv   +++|          IF MSH$PFNS[I] EQ PFNSTOM
00378  M00S00378.sxslv   +++|          THEN                       # FOUND MATCH #
00379  M00S00379.sxslv   +++|            BEGIN
00380  M00S00380.sxslv   +++|            SINDX = I;
00381  M00S00381.sxslv   +++|            END
00382  M00S00382.sxslv   +++|
00383  M00S00383.sxslv   +++|          END  # SEARCH FOR THE INDEX OF THIS SLAVE #
00384  M00S00384.sxslv   +++|
00385  M00S00385.sxslv   +++|        IF SINDX EQ 0
00386  M00S00386.sxslv   +++|        THEN
00387  M00S00387.sxslv   +++|          BEGIN
00388  M00S00388.sxslv   +++|          GOTO WAITMTOS;
00389  M00S00389.sxslv   +++|          END
00390  M00S00390.sxslv   +++|
00391  M00S00391.sxslv   +++|        MTOSOK = TRUE;
00392  M00S00392.sxslv   +++|        P<MTOSREPBLK> = LOC(MTOSHEAD) + L$MTOSH + (SINDX-1)*NUMRB;
00393  M00S00393.sxslv   +++|        SM$MSW[0] = MSH$MSW[0];
00394  M00S00394.sxslv   +++|        IF MSH$IDLE[0]
00395  M00S00395.sxslv   +++|        THEN                         # MASTER WAS IDLED DOWN #
00396  M00S00396.sxslv   +++|          BEGIN
00397  M00S00397.sxslv   +++|          SM$STATM[0] = S"IDLE";
00398  M00S00398.sxslv   +++|          SM$TIMOUT[0] = MAXSECS;
00399  M00S00399.sxslv   +++|          MSGE$STAT[0] = "IDLE";
00400  M00S00400.sxslv   +++|          END
00401  M00S00401.sxslv   +++|
00402  M00S00402.sxslv   +++|        ELSE                         # MASTER IS ACTIVE #
00403  M00S00403.sxslv   +++|          BEGIN
00404  M00S00404.sxslv   +++|          SM$STATM[0] = S"ACTIVE";
00405  M00S00405.sxslv   +++|          SM$TIMOUT[0] = RTIMSECS[0] + SLAV$INTV;
00406  M00S00406.sxslv   +++|          MSGE$STAT[0] = "ACTIVE";
00407  M00S00407.sxslv   +++|          END
00408  M00S00408.sxslv   +++|
00409  M00S00409.sxslv   +++|        MESSAGE(MSGEXSTAT,SYSUDF1);
00410  M00S00410.sxslv   +++|        SM$REQCTL[0] = MSH$REQCTL[0] + 1;  # FORCE A RESPONSE #
00411  M00S00411.sxslv   +++|        TEST INITMTOS;
00412  M00S00412.sxslv   +++|
00413  M00S00413.sxslv   +++|WAITMTOS:
00414  M00S00414.sxslv   +++|
00415  M00S00415.sxslv   +++|        MSGE$FLASH[0] = FLASH;
00416  M00S00416.sxslv   +++|        MSGE$STAT[0] = "IDLE";
00417  M00S00417.sxslv   +++|        IF ONEMSG
00418  M00S00418.sxslv   +++|        THEN
00419  M00S00419.sxslv   +++|          BEGIN        # MESSAGE TO B-DISPLAY ONLY #
00420  M00S00420.sxslv   +++|          MESSAGE(MSGEXSTAT,LINE1);
00421  M00S00421.sxslv   +++|          END
00422  M00S00422.sxslv   +++|
00423  M00S00423.sxslv   +++|        ELSE
00424  M00S00424.sxslv   +++|          BEGIN        # FIRST MESSAGE TO DAYFILE AND B-DISPLAY #
00425  M00S00425.sxslv   +++|          MESSAGE(MSGEXSTAT,SYSUDF1);
00426  M00S00426.sxslv   +++|          ONEMSG = TRUE;
00427  M00S00427.sxslv   +++|          END
00428  M00S00428.sxslv   +++|
00429  M00S00429.sxslv   +++|        MSGE$FLASH[0] = NOFLASH;
00430  M00S00430.sxslv   +++|
00431  M00S00431.sxslv   +++|        FASTFOR DUMMY = 1 STEP 1 UNTIL DELAYCT
00432  M00S00432.sxslv   +++|        DO
00433  M00S00433.sxslv   +++|          BEGIN
00434  M00S00434.sxslv   +++|          RECALL(0);
00435  M00S00435.sxslv   +++|          END
00436  M00S00436.sxslv   +++|
00437  M00S00437.sxslv   +++|        IF RA$IDLEDWN[0]
00438  M00S00438.sxslv   +++|        THEN
00439  M00S00439.sxslv   +++|          BEGIN
00440  M00S00440.sxslv   +++|          SLVEND = S"IDLEMTOS";
00441  M00S00441.sxslv   +++|          RETURN;
00442  M00S00442.sxslv   +++|          END
00443  M00S00443.sxslv   +++|
00444  M00S00444.sxslv   +++|        END  # INITIALIZE *MTOS* FILE #
00445  M00S00445.sxslv   +++|
00446  M00S00446.sxslv   +++|      RETURN;
00447  M00S00447.sxslv   +++|
00448  M00S00448.sxslv   +++|
00449  M00S00449.sxslv   +++|WAITSTOM:
00450  M00S00450.sxslv   +++|      MSG$STAT[0] = "FILE PROBLEM.";
00451  M00S00451.sxslv   +++|MODERROR:
00452  M00S00452.sxslv   +++|      MESSAGE(MSGSLV[0],SYSUDF1);
00453  M00S00453.sxslv   +++|      ABORT;
00454  M00S00454.sxslv   +++|
00455  M00S00455.sxslv   +++|      END  # INITSLV #
00456  M00S00456.sxslv   +++|
00457  M00S00457.sxslv   +++|    TERM
00458  M00S00458.sxslv   +++|PROC SLVEXEC;
00459  M00S00459.sxslv   +++|# TITLE SLVEXEC - SLAVE EXEC.                                         #
00460  M00S00460.sxslv   +++|
00461  M00S00461.sxslv   +++|      BEGIN  # SLVEXEC #
00462  M00S00462.sxslv   +++|
00463  M00S00463.sxslv   +++|#
00464  M00S00464.sxslv   +++|***   SLVEXEC - MULTIMAINFRAME *MSS* EXECUTIVE PROGRAM.
00465  M00S00465.sxslv   +++|*
00466  M00S00466.sxslv   +++|*     ON THE MASTER MAINFRAME OF A MULTIMAINFRAME CONFIGURATION, OR IN
00467  M00S00467.sxslv   +++|*     A SINGLE MAINFRAME CONFIGURATION, THE *NOS* PERMANENT FILE
00468  M00S00468.sxslv   +++|*     MANAGER (*PFM*) ISSUES *TDAM* REQUESTS DIRECTLY TO THE *SSEXEC*
00469  M00S00469.sxslv   +++|*     TO CAUSE A PERMANENT FILE TO BE STAGED FROM *MSS* TO DISK.  ON
00470  M00S00470.sxslv   +++|*     ALL OTHER MAINFRAMES IN A MULTIMAINFRAME CONFIGURATION, *PFM*
00471  M00S00471.sxslv   +++|*     ISSUES *TDAM* REQUESTS TO THIS *SSSLV* PROGRAM WHICH APPEARS AS
00472  M00S00472.sxslv   +++|*     A SURROGATE *SSEXEC* TO *PFM*.  THE *SSSLV* FORWARDS THE
00473  M00S00473.sxslv   +++|*     *TDAM* REQUEST TO THE *SSEXEC* BY WRITING IT ON A PERMANENT
00474  M00S00474.sxslv   +++|*     FILE KNOWN AS THE SLAVE-TO-MASTER (*STOM*) COMMUNICATION FILE.
00475  M00S00475.sxslv   +++|*     WHEN THE *SSEXEC* HAS COMPLETED THE STAGE REQUEST, IT SENDS A
00476  M00S00476.sxslv   +++|*     REPLY STATUS TO THE *SSSLV* VIA ANOTHER COMMUNICATION FILE
00477  M00S00477.sxslv   +++|*     KNOWN AS THE MASTER-TO-SLAVE (*MTOS*) FILE.  THE *SSSLV*
00478  M00S00478.sxslv   +++|*     NOTIFIES *PFM* OF THE COMPLETED REQUEST IN THE SAME MANNER AS
00479  M00S00479.sxslv   +++|*     DOES *SSEXEC*.  THE FORMAT OF THE *MTOS* AND *STOM* FILES IS
00480  M00S00480.sxslv   +++|*     DESCRIBED IN COMMON DECK *COMXMMF*.
00481  M00S00481.sxslv   +++|*
00482  M00S00482.sxslv   +++|*     PROC SLVEXEC.
00483  M00S00483.sxslv   +++|*
00484  M00S00484.sxslv   +++|*     MESSAGES
00485  M00S00485.sxslv   +++|*                * SLVI - IDLED DOWN.*
00486  M00S00486.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT THE
00487  M00S00487.sxslv   +++|*                      OPERATOR USED THE *IDLE* COMMAND TO TERMINATE
00488  M00S00488.sxslv   +++|*                      *SSSLV* PROCESSING.
00489  M00S00489.sxslv   +++|*
00490  M00S00490.sxslv   +++|*                * SLVI - ERROR TERMINATION (N).*
00491  M00S00491.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT AN
00492  M00S00492.sxslv   +++|*                      ERROR CONDITION OCCURRED WHILE READING THE
00493  M00S00493.sxslv   +++|*                      *MTOS* FILE WHICH PREVENTED FURTHER *SSSLV*
00494  M00S00494.sxslv   +++|*                      PROCESSING.
00495  M00S00495.sxslv   +++|#
00496  M00S00496.sxslv   +++|
00497  M00S00497.sxslv   +++|
00498  M00S00498.sxslv   +++|#
00499  M00S00499.sxslv   +++|****  PROC SLVEXEC - XREF LIST BEGIN.
00500  M00S00500.sxslv   +++|#
00501  M00S00501.sxslv   +++|
00502  M00S00502.sxslv   +++|      XREF
00503  M00S00503.sxslv   +++|        BEGIN
00504  M00S00504.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00505  M00S00505.sxslv   +++|        PROC FLUSHSM;                # REWRITE THE *STOM* FILE #
00506  M00S00506.sxslv   +++|        PROC SSOVL;                  # OVERLAY LOADER #
00507  M00S00507.sxslv   +++|        FUNC XCOD C(10);             # INTEGER TO DISPLAY #
00508  M00S00508.sxslv   +++|        PROC MESSAGE;                # ISSUER MESSAGE MACRO #
00509  M00S00509.sxslv   +++|        END
00510  M00S00510.sxslv   +++|
00511  M00S00511.sxslv   +++|#
00512  M00S00512.sxslv   +++|****  PROC SLVEXEC - XREF LIST END.
00513  M00S00513.sxslv   +++|#
00514  M00S00514.sxslv   +++|
00515  M00S00515.sxslv   +++|                                               CONTROL PRESET;
00516  M00S00516.sxslv   +++|
00517  M00S00517.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00518  M00S00518.sxslv   +++|*CALL,COMBFAS
00519  M00S00519.sxslv   +++|*CALL,COMBOVL
00520  M00S00520.sxslv   +++|*CALL,COMXIPR
00521  M00S00521.sxslv   +++|*CALL,COMXMMF
00522  M00S00522.sxslv   +++|*CALL,COMXSEB
00523  M00S00523.sxslv   +++|                                               CONTROL EJECT;
00524  M00S00524.sxslv   +++|      SLVEND = S"OK";
00525  M00S00525.sxslv   +++|
00526  M00S00526.sxslv   +++|      SSOVL(LSLVINIT,0);             # INITIALIZE THE SLAVE EXEC #
00527  M00S00527.sxslv   +++|      IF SLVEND EQ S"OK"
00528  M00S00528.sxslv   +++|      THEN
00529  M00S00529.sxslv   +++|        BEGIN
00530  M00S00530.sxslv   +++|        SSOVL(LSLVLOOP,0);           # EXECUTE THE MAIN LOOP #
00531  M00S00531.sxslv   +++|        END
00532  M00S00532.sxslv   +++|
00533  M00S00533.sxslv   +++|      SM$IDLE[0] = TRUE;
00534  M00S00534.sxslv   +++|
00535  M00S00535.sxslv   +++|      FLUSHSM;                       # WRITE IDLE STATUS TO THE *STOM*
00536  M00S00536.sxslv   +++|                                       FILE #
00537  M00S00537.sxslv   +++|
00538  M00S00538.sxslv   +++|      IF SLVEND LS S"LASTIDLE"
00539  M00S00539.sxslv   +++|      THEN                           # NORMAL TERMINATION #
00540  M00S00540.sxslv   +++|        BEGIN
00541  M00S00541.sxslv   +++|        MESSAGE(IDLETERM,RCL);
00542  M00S00542.sxslv   +++|        STOP;
00543  M00S00543.sxslv   +++|        END
00544  M00S00544.sxslv   +++|
00545  M00S00545.sxslv   +++|      ELSE                           # ABNORMAL TERMINATION #
00546  M00S00546.sxslv   +++|        BEGIN
00547  M00S00547.sxslv   +++|        CHAR10 = XCOD(SLVEND - SLVESTAT"LASTIDLE");
00548  M00S00548.sxslv   +++|        ERR$NUM[0] = C<9,1>CHAR10;
00549  M00S00549.sxslv   +++|        MESSAGE(ERRTERM,RCL);
00550  M00S00550.sxslv   +++|        ABORT;
00551  M00S00551.sxslv   +++|        END
00552  M00S00552.sxslv   +++|
00553  M00S00553.sxslv   +++|      END  # SLVEXEC #
00554  M00S00554.sxslv   +++|
00555  M00S00555.sxslv   +++|    TERM
00556  M00S00556.sxslv   +++|PROC SLVINIT;
00557  M00S00557.sxslv   +++|# TITLE SLVINIT  - *SSSLV* INITIALIZER SETUP ROUTINE.                 #
00558  M00S00558.sxslv   +++|
00559  M00S00559.sxslv   +++|      BEGIN  # SLVINIT #
00560  M00S00560.sxslv   +++|
00561  M00S00561.sxslv   +++|#
00562  M00S00562.sxslv   +++|**  SLVINIT  - *SSSLV* INITIALIZER SETUP ROUTINE.
00563  M00S00563.sxslv   +++|*
00564  M00S00564.sxslv   +++|*     *SLVINIT* DOES THE INITIALIZATION PROCESSING BY DIRECTLY
00565  M00S00565.sxslv   +++|*     PERFORMING SOME SETUP AND THEN CALLING *INITSLV* TO
00566  M00S00566.sxslv   +++|*     COMPLETE THE INITIALIZATION.
00567  M00S00567.sxslv   +++|*
00568  M00S00568.sxslv   +++|*     PROC SLVINIT.
00569  M00S00569.sxslv   +++|*
00570  M00S00570.sxslv   +++|*     ENTRY      THE CONTROL COMMAND IMAGE OF THE *SSSLV* CALL IS IN
00571  M00S00571.sxslv   +++|*                *RA* + 70.  THE CONTROL COMMAND PARAMETERS ARE BELOW.
00572  M00S00572.sxslv   +++|*
00573  M00S00573.sxslv   +++|*                SSSLV,Q=NN,S.
00574  M00S00574.sxslv   +++|*
00575  M00S00575.sxslv   +++|*                Q=NN  NN IS THE FREQUENCY IN SECONDS THAT THE *SSSLV*
00576  M00S00576.sxslv   +++|*                      AND *SSEXEC* PROGRAMS SHOULD READ THE *STOM*
00577  M00S00577.sxslv   +++|*                      AND *MTOS* COMMUNICATION FILES.  IF *NN* IS
00578  M00S00578.sxslv   +++|*                      GREATER THEN *SLRP$INTV*, THE LATTER IS USED.
00579  M00S00579.sxslv   +++|*
00580  M00S00580.sxslv   +++|*                S     SIMULATED MULTIMAINFRAME MODE.
00581  M00S00581.sxslv   +++|*                      IF *S* IS SPECIFIED ON BOTH THE *SSEXEC* AND
00582  M00S00582.sxslv   +++|*                      *SSSLV* PROGRAM CALLS, THEN BOTH PROGRAMS MAY
00583  M00S00583.sxslv   +++|*                      EXECUTE ON THE SAME MAINFRAME.  THIS PERMITS
00584  M00S00584.sxslv   +++|*                      PROGRAM AND OPERATIONAL PROCEDURE CHECKOUT USING
00585  M00S00585.sxslv   +++|*                      ONLY A SINGLE MAINFRAME.
00586  M00S00586.sxslv   +++|*
00587  M00S00587.sxslv   +++|*     EXIT       THE *MTOS* AND *STOM* FILES ARE ATTACHED AND READY TO
00588  M00S00588.sxslv   +++|*                BE PROCESSED BY THE *SLVLOOP* PROCEDURE WHICH IS THE
00589  M00S00589.sxslv   +++|*                MAINLOOP OF THE *SSSLV*.
00590  M00S00590.sxslv   +++|*
00591  M00S00591.sxslv   +++|*     MESSAGES
00592  M00S00592.sxslv   +++|*                * SLVI ABNORMAL, SLVINIT.*
00593  M00S00593.sxslv   +++|*                      THIS MESSAGE INDICATES THAT A FATAL SYSTEM
00594  M00S00594.sxslv   +++|*                      ERROR HAS OCCURRED.
00595  M00S00595.sxslv   +++|*
00596  M00S00596.sxslv   +++|*                * MSAS MASTER ENABLED - ABORT. *
00597  M00S00597.sxslv   +++|*
00598  M00S00598.sxslv   +++|*     NOTES      IF THE *S* PARAMETER IS SPECIFIED, THE *SSSLV* WILL
00599  M00S00599.sxslv   +++|*                USE COMMUNICATION FILES LOCATED ON THE DEFAULT FAMILY,
00600  M00S00600.sxslv   +++|*                INSTEAD OF ON THE FAMILY CONTAINING THE LINK DEVICE.
00601  M00S00601.sxslv   +++|#
00602  M00S00602.sxslv   +++|
00603  M00S00603.sxslv   +++|
00604  M00S00604.sxslv   +++|
00605  M00S00605.sxslv   +++|#
00606  M00S00606.sxslv   +++|****  PROC SLVINIT - XREF LIST BEGIN.
00607  M00S00607.sxslv   +++|#
00608  M00S00608.sxslv   +++|
00609  M00S00609.sxslv   +++|      XREF
00610  M00S00610.sxslv   +++|        BEGIN
00611  M00S00611.sxslv   +++|        PROC ABORT;                  # ISSUE ABORT MACRO #
00612  M00S00612.sxslv   +++|        PROC CALLSS;                 # ISSUE REQUEST TO SUBSYSTEMS #
00613  M00S00613.sxslv   +++|        PROC EXTAB;                  # SET UP PARAMETER LIST #
00614  M00S00614.sxslv   +++|        PROC GETFAM;                 # GET TABLE OF FAMILIES #
00615  M00S00615.sxslv   +++|        PROC GETMI;                  # GET MACHINE INDEX #
00616  M00S00616.sxslv   +++|        PROC INITDAM;                # INITIALIZE *TDAM* INTERFACE #
00617  M00S00617.sxslv   +++|        PROC INITSLV;                # INITIALIZE *SSSLV* #
00618  M00S00618.sxslv   +++|        PROC MESSAGE;                # ISSUE MESSAGE MACRO #
00619  M00S00619.sxslv   +++|        PROC SETPFP;                 # ISSUE SETPFP MACRO #
00620  M00S00620.sxslv   +++|        PROC XARG;                   # CRACK PARAMETER LIST #
00621  M00S00621.sxslv   +++|        FUNC XDXB U;                 # CONVERT DECIMAL TO BINARY #
00622  M00S00622.sxslv   +++|        END
00623  M00S00623.sxslv   +++|
00624  M00S00624.sxslv   +++|#
00625  M00S00625.sxslv   +++|****  PROC SLVINIT - XREF LIST END.
00626  M00S00626.sxslv   +++|#
00627  M00S00627.sxslv   +++|
00628  M00S00628.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00629  M00S00629.sxslv   +++|*CALL,COMBFAS
00630  M00S00630.sxslv   +++|*CALL,COMBPFP
00631  M00S00631.sxslv   +++|*CALL,COMXCTF
00632  M00S00632.sxslv   +++|*CALL,COMXEXP
00633  M00S00633.sxslv   +++|*CALL,COMXINT
00634  M00S00634.sxslv   +++|*CALL,COMXIPR
00635  M00S00635.sxslv   +++|*CALL,COMXJCA
00636  M00S00636.sxslv   +++|*CALL,COMXMMF
00637  M00S00637.sxslv   +++|*CALL,COMXSEB
00638  M00S00638.sxslv   +++|
00639  M00S00639.sxslv   +++|
00640  M00S00640.sxslv   +++|      ITEM ARGLIST    U;             # ARGUMENT LIST #
00641  M00S00641.sxslv   +++|      ITEM DELAYV     U;             # DELAY VALUE #
00642  M00S00642.sxslv   +++|      ITEM FAMILY     C(7);          # FAMILY FOR COMMUNICATION FILES #
00643  M00S00643.sxslv   +++|      ITEM FLAG       U;             # TEMPORARY #
00644  M00S00644.sxslv   +++|      ITEM MID        C(2);          # MACHINE ID #
00645  M00S00645.sxslv   +++|      ITEM MIDX       U;             # MACHINE INDEX #
00646  M00S00646.sxslv   +++|      ITEM PBLOCK     U = 0;         # PARAMETER BLOCK #
00647  M00S00647.sxslv   +++|
00648  M00S00648.sxslv   +++|
00649  M00S00649.sxslv   +++|        ARRAY MSGLINE  [0:3]  S(4);
00650  M00S00650.sxslv   +++|          BEGIN
00651  M00S00651.sxslv   +++|          ITEM MSGITEM  C(00,00,38) = ["$MSAS MASTER ENABLED - ABORT."];
00652  M00S00652.sxslv   +++|          ITEM MSGZERO  U(03,48,12) = [0];  # ZERO BYTE TERMINATOR #
00653  M00S00653.sxslv   +++|          END
00654  M00S00654.sxslv   +++|                                               CONTROL EJECT;
00655  M00S00655.sxslv   +++|
00656  M00S00656.sxslv   +++|      GETFAM(FAMT,DUMMY,LINK[0],DEFAULTORD,DUMMY);
00657  M00S00657.sxslv   +++|      DEF$FAM = FAM$NAME[DEFAULTORD];
00658  M00S00658.sxslv   +++|
00659  M00S00659.sxslv   +++|      EXTAB(ARGLIST);
00660  M00S00660.sxslv   +++|      XARG(ARGLIST,0,FLAG);
00661  M00S00661.sxslv   +++|      DELAYV = SLRP$INTV;
00662  M00S00662.sxslv   +++|      GETMI(CMRINFO,EVENT);
00663  M00S00663.sxslv   +++|      IF NOT CMR$SLAVE[0]
00664  M00S00664.sxslv   +++|      THEN      # *SLAVE* MODE NOT INDICATED #
00665  M00S00665.sxslv   +++|        BEGIN
00666  M00S00666.sxslv   +++|        MESSAGE(MSGLINE,SYSUDF1);
00667  M00S00667.sxslv   +++|        ABORT;
00668  M00S00668.sxslv   +++|        END
00669  M00S00669.sxslv   +++|
00670  M00S00670.sxslv   +++|      EESET$EVT = EESET$ASXE;        # MSAS SET UP #
00671  M00S00671.sxslv   +++|      EESET$ASXE = 0;
00672  M00S00672.sxslv   +++|      FAMILY = FAM$NAME[LINK$ORD[0]];
00673  M00S00673.sxslv   +++|      MIDX = CMR$MFID[0];
00674  M00S00674.sxslv   +++|      MID = CMR$MID[0];
00675  M00S00675.sxslv   +++|
00676  M00S00676.sxslv   +++|      P<RA$AREA> = 0;
00677  M00S00677.sxslv   +++|      RA$SSCAP[0] = 0;
00678  M00S00678.sxslv   +++|      INITDAM;                       # INITIALIZE *TDAM* INTERFACE #
00679  M00S00679.sxslv   +++|      CALLSS(0,PBLOCK,NRCL);         # REQUEST ACTIVE STATUS #
00680  M00S00680.sxslv   +++|
00681  M00S00681.sxslv   +++|      IF FLAG EQ 0
00682  M00S00682.sxslv   +++|      THEN
00683  M00S00683.sxslv   +++|        BEGIN  # CONVERT PARAMETERS #
00684  M00S00684.sxslv   +++|
00685  M00S00685.sxslv   +++|        IF ARG$QC[0] NQ  - 1
00686  M00S00686.sxslv   +++|        THEN                         # CONVERT Q = DELAY VALUE #
00687  M00S00687.sxslv   +++|          BEGIN
00688  M00S00688.sxslv   +++|          FLAG = XDXB(ARG$QC[0],1,DELAYV);
00689  M00S00689.sxslv   +++|          IF DELAYV GR SLRP$INTV
00690  M00S00690.sxslv   +++|          THEN                       # DELAY IS TOO LONG #
00691  M00S00691.sxslv   +++|            BEGIN
00692  M00S00692.sxslv   +++|            DELAYV = SLRP$INTV;
00693  M00S00693.sxslv   +++|            END
00694  M00S00694.sxslv   +++|
00695  M00S00695.sxslv   +++|          END
00696  M00S00696.sxslv   +++|
00697  M00S00697.sxslv   +++|        IF ARG$SC[0] NQ  - 1
00698  M00S00698.sxslv   +++|        THEN
00699  M00S00699.sxslv   +++|          BEGIN
00700  M00S00700.sxslv   +++|          FAMILY = DEF$FAM;
00701  M00S00701.sxslv   +++|          MIDX = 4;
00702  M00S00702.sxslv   +++|          MID = "SA";
00703  M00S00703.sxslv   +++|          END
00704  M00S00704.sxslv   +++|
00705  M00S00705.sxslv   +++|        END  # CONVERT PARAMETERS #
00706  M00S00706.sxslv   +++|
00707  M00S00707.sxslv   +++|
00708  M00S00708.sxslv   +++|#
00709  M00S00709.sxslv   +++|*     ISSUE A *SETPFP* SO THE COMMUNICATION FILES CAN BE ACCESSED.
00710  M00S00710.sxslv   +++|#
00711  M00S00711.sxslv   +++|
00712  M00S00712.sxslv   +++|      PFP$WRD0[0] = 0;
00713  M00S00713.sxslv   +++|      PFP$FAM[0] = FAMILY;
00714  M00S00714.sxslv   +++|      PFP$FG1[0] = TRUE;             # CHANGE TO LINK FAMILY #
00715  M00S00715.sxslv   +++|      PFP$FG4[0] = TRUE;             # CHANGE TO *MSS* USER INDEX #
00716  M00S00716.sxslv   +++|      PFP$UI[0] = DEF$UI;
00717  M00S00717.sxslv   +++|      SETPFP(PFP);
00718  M00S00718.sxslv   +++|      IF PFP$STAT[0] NQ 0
00719  M00S00719.sxslv   +++|      THEN                           # SETPFP FAILED #
00720  M00S00720.sxslv   +++|        BEGIN
00721  M00S00721.sxslv   +++|        ABT$PROC[0] = "SLVINIT";
00722  M00S00722.sxslv   +++|        MESSAGE(ABTMSG,SYSUDF1);
00723  M00S00723.sxslv   +++|        ABORT;
00724  M00S00724.sxslv   +++|        END
00725  M00S00725.sxslv   +++|
00726  M00S00726.sxslv   +++|
00727  M00S00727.sxslv   +++|#
00728  M00S00728.sxslv   +++|*     CALL *INITSLV* TO INITIALIZE COMMUNICATION FILES.
00729  M00S00729.sxslv   +++|#
00730  M00S00730.sxslv   +++|
00731  M00S00731.sxslv   +++|      INITSLV(MID,MIDX,DELAYV);
00732  M00S00732.sxslv   +++|
00733  M00S00733.sxslv   +++|      END  # SLVINIT #
00734  M00S00734.sxslv   +++|
00735  M00S00735.sxslv   +++|    TERM
00736  M00S00736.sxslv   +++|PROC SLVLOOP;
00737  M00S00737.sxslv   +++|# TITLE SLVLOOP - SLAVE MAIN LOOP.                                    #
00738  M00S00738.sxslv   +++|
00739  M00S00739.sxslv   +++|      BEGIN  # SLVLOOP #
00740  M00S00740.sxslv   +++|
00741  M00S00741.sxslv   +++|#
00742  M00S00742.sxslv   +++|**    SLVLOOP  - SLVEXEC MAIN LOOP.
00743  M00S00743.sxslv   +++|*
00744  M00S00744.sxslv   +++|*     PROC SLVLOOP.
00745  M00S00745.sxslv   +++|*
00746  M00S00746.sxslv   +++|*     ENTRY      INITIALIZATION WAS SUCCESSFUL.
00747  M00S00747.sxslv   +++|*
00748  M00S00748.sxslv   +++|*     EXIT       THE ITEM *SLVEND* (IN *COMXSEB*) IS UPDATED TO
00749  M00S00749.sxslv   +++|*                INDICATE THE REASON FOR TERMINATION OF *SSSLV*
00750  M00S00750.sxslv   +++|*                PROCESSING.
00751  M00S00751.sxslv   +++|*
00752  M00S00752.sxslv   +++|*     NOTES      WHILE THE VARIABLE *SLVEND* HAS THE VALUE *OK*, THE
00753  M00S00753.sxslv   +++|*                MAIN LOOP WILL DO THE FOLLOWING.
00754  M00S00754.sxslv   +++|*
00755  M00S00755.sxslv   +++|*                            1) TEST THE IDLE FLAG.
00756  M00S00756.sxslv   +++|*
00757  M00S00757.sxslv   +++|*                            2) LOOK FOR A *TDAM* REQUEST AND ADD IT TO
00758  M00S00758.sxslv   +++|*                               THE *STOM* FILE.
00759  M00S00759.sxslv   +++|*
00760  M00S00760.sxslv   +++|*                            3) CALL *SLVMTOS* TO CHECK THE STATUS OF
00761  M00S00761.sxslv   +++|*                               THE *SSEXEC* AND ALSO, TO CHECK IF A
00762  M00S00762.sxslv   +++|*                               REPLY STATUS IS AVAILABLE FOR ANY
00763  M00S00763.sxslv   +++|*                               PREVIOUSLY SUBMITTED *TDAM* REQUESTS.
00764  M00S00764.sxslv   +++|*
00765  M00S00765.sxslv   +++|*                            4) CALL *FLUSHSM* TO UPDATE THE SLAVE
00766  M00S00766.sxslv   +++|*                               STATUS WORD IN THE *STOM* FILE AND
00767  M00S00767.sxslv   +++|*                               REWRITE THE CURRENT *STOM* FILE.
00768  M00S00768.sxslv   +++|*                               THIS IS DONE PERIODICALLY OR
00769  M00S00769.sxslv   +++|*                               WHENEVER A *TDAM* REQUEST IS ADDED TO
00770  M00S00770.sxslv   +++|*                               THE *STOM* FILE BUFFER.
00771  M00S00771.sxslv   +++|*
00772  M00S00772.sxslv   +++|*                            5) DELAY VIA *RECALL* IF NO WORK IS TO BE
00773  M00S00773.sxslv   +++|*                               DONE.
00774  M00S00774.sxslv   +++|#
00775  M00S00775.sxslv   +++|
00776  M00S00776.sxslv   +++|#
00777  M00S00777.sxslv   +++|****  PROC SLVLOOP - XREF LIST BEGIN.
00778  M00S00778.sxslv   +++|#
00779  M00S00779.sxslv   +++|
00780  M00S00780.sxslv   +++|      XREF
00781  M00S00781.sxslv   +++|        BEGIN
00782  M00S00782.sxslv   +++|        PROC FLUSHSM;                # REWRITE THE *STOM* FILE #
00783  M00S00783.sxslv   +++|        PROC MEMORY;                 # ISSUE MEMORY MACRO #
00784  M00S00784.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00785  M00S00785.sxslv   +++|        PROC RECALL;                 # ISSUE RECALL MACRO #
00786  M00S00786.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
00787  M00S00787.sxslv   +++|        PROC SLVMTOS;                # PROCESS *MTOS* FILE #
00788  M00S00788.sxslv   +++|        PROC ZFILL;                  # ZERO FILL AN ARRAY #
00789  M00S00789.sxslv   +++|        PROC ZSETFET;                # INITIALIZE *FET* #
00790  M00S00790.sxslv   +++|        END
00791  M00S00791.sxslv   +++|
00792  M00S00792.sxslv   +++|#
00793  M00S00793.sxslv   +++|****  PROC SLVLOOP - XREF LIST END.
00794  M00S00794.sxslv   +++|#
00795  M00S00795.sxslv   +++|
00796  M00S00796.sxslv   +++|      DEF RCLFACTOR  #2#;            # NUMBER OF RECALLS TO DELAY ONE
00797  M00S00797.sxslv   +++|                                       SECOND #
00798  M00S00798.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
00799  M00S00799.sxslv   +++|*CALL,COMBFAS
00800  M00S00800.sxslv   +++|*CALL,COMBTDM
00801  M00S00801.sxslv   +++|*CALL,COMXCTF
00802  M00S00802.sxslv   +++|*CALL,COMXIPR
00803  M00S00803.sxslv   +++|*CALL,COMXJCA
00804  M00S00804.sxslv   +++|*CALL,COMXMMF
00805  M00S00805.sxslv   +++|*CALL,COMXSEB
00806  M00S00806.sxslv   +++|
00807  M00S00807.sxslv   +++|
00808  M00S00808.sxslv   +++|
00809  M00S00809.sxslv   +++|      ITEM I          I;             # LOOP COUNTER #
00810  M00S00810.sxslv   +++|      ITEM MAINLOOP   U;             # MAIN LOOP INDUCTION VARIABLE #
00811  M00S00811.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
00812  M00S00812.sxslv   +++|      ITEM RCLCT      U;             # NUMBER OF RECALLS TO MAKE #
00813  M00S00813.sxslv   +++|      ITEM REQPROC    B;             # REQUEST PROCESSED FLAG #
00814  M00S00814.sxslv   +++|      ITEM TDASA      U;             # ASA FROM A *TDAM* REQUEST #
00815  M00S00815.sxslv   +++|      ITEM TDFAM      C(7);          # FAMILY FROM A *TDAM* REQUEST #
00816  M00S00816.sxslv   +++|      ITEM TDUI       U;             # USER INDEX FROM *TDAM* REQUEST #
00817  M00S00817.sxslv   +++|
00818  M00S00818.sxslv   +++|                                               CONTROL EJECT;
00819  M00S00819.sxslv   +++|
00820  M00S00820.sxslv   +++|#
00821  M00S00821.sxslv   +++|*     REDUCE FIELD LENGTH SO ONLY ENOUGH *CM* SPACE FOR THE
00822  M00S00822.sxslv   +++|*     *MTOS* BUFFER IS ABOVE THE END OF THIS OVERLAY.
00823  M00S00823.sxslv   +++|#
00824  M00S00824.sxslv   +++|
00825  M00S00825.sxslv   +++|      P<MTOSHEAD> = RA$NWA[0];       # = END OF THIS OVERLAY #
00826  M00S00826.sxslv   +++|      MEM$AMT[0] = RA$NWA[0] + MTOSBUFL;
00827  M00S00827.sxslv   +++|      MEMORY("CM",MEMREQ,RCL,NA);
00828  M00S00828.sxslv   +++|      ZSETFET(LOC(MTOSS),MTOSSLFN,LOC(MTOSHEAD),MTOSBUFL,SFETL);
00829  M00S00829.sxslv   +++|      SLVMTOS;
00830  M00S00830.sxslv   +++|
00831  M00S00831.sxslv   +++|#
00832  M00S00832.sxslv   +++|*     EXECUTE THE MAINLOOP UNTIL ONE OF THE *SSSLV*
00833  M00S00833.sxslv   +++|*     TERMINATION CONDITIONS OCCURS.
00834  M00S00834.sxslv   +++|*         1). IDLE FLAG BECOMXS SET, OR
00835  M00S00835.sxslv   +++|*         2). AN I/O ERROR OCCURS ON EITHER THE *MTOS*
00836  M00S00836.sxslv   +++|*             OR *STOM* FILES.
00837  M00S00837.sxslv   +++|#
00838  M00S00838.sxslv   +++|
00839  M00S00839.sxslv   +++|      SLOWFOR MAINLOOP = 1 STEP 1 WHILE SLVEND EQ S"OK"
00840  M00S00840.sxslv   +++|      DO
00841  M00S00841.sxslv   +++|        BEGIN  # MAINLOOP #
00842  M00S00842.sxslv   +++|
00843  M00S00843.sxslv   +++|        RTIME(RTIMESTAT[0]);
00844  M00S00844.sxslv   +++|        PDATE(PDATESTAT[0]);
00845  M00S00845.sxslv   +++|
00846  M00S00846.sxslv   +++|        IF RA$IDLEDWN[0]
00847  M00S00847.sxslv   +++|        THEN
00848  M00S00848.sxslv   +++|          BEGIN
00849  M00S00849.sxslv   +++|          SLVEND = S"IDLE";
00850  M00S00850.sxslv   +++|          END
00851  M00S00851.sxslv   +++|
00852  M00S00852.sxslv   +++|        IF RA$TDAM[0] NQ 0
00853  M00S00853.sxslv   +++|        THEN                         # FOUND A *TDAM* REQUEST #
00854  M00S00854.sxslv   +++|
00855  M00S00855.sxslv   +++|          BEGIN  # PROCESS THE *TDAM* REQUEST #
00856  M00S00856.sxslv   +++|
00857  M00S00857.sxslv   +++|          REQPROC = FALSE;
00858  M00S00858.sxslv   +++|          P<TDAM> = LOC(RA$TDAM[0]);
00859  M00S00859.sxslv   +++|          IF TDAMFC[0] EQ TDAMFCODE"STAGE"
00860  M00S00860.sxslv   +++|          THEN
00861  M00S00861.sxslv   +++|            BEGIN  # CHECK STAGE REQUEST #
00862  M00S00862.sxslv   +++|            TDASA = TDAMASA[0];
00863  M00S00863.sxslv   +++|            TDUI = TDAMUI[0];
00864  M00S00864.sxslv   +++|            TDFAM = TDAMFAM[0];
00865  M00S00865.sxslv   +++|
00866  M00S00866.sxslv   +++|            FASTFOR RB = 1 STEP 1 WHILE RB LQ NUMRB AND NOT REQPROC
00867  M00S00867.sxslv   +++|            DO
00868  M00S00868.sxslv   +++|
00869  M00S00869.sxslv   +++|              BEGIN  # SEARCH FOR A DUPLICATE *TDAM* #
00870  M00S00870.sxslv   +++|
00871  M00S00871.sxslv   +++|              P<TDAM> = LOC(SM$TDAM[RB]);
00872  M00S00872.sxslv   +++|              IF TDASA EQ TDAMASA[0]  ##
00873  M00S00873.sxslv   +++|                AND TDUI EQ TDAMUI[0]  ##
00874  M00S00874.sxslv   +++|                AND TDFAM EQ TDAMFAM[0]  ##
00875  M00S00875.sxslv   +++|                AND SM$SRC[RB] EQ S"SUBMITTED"
00876  M00S00876.sxslv   +++|              THEN                   # FOUND A DUPLICATE #
00877  M00S00877.sxslv   +++|                BEGIN
00878  M00S00878.sxslv   +++|                REQPROC = TRUE;
00879  M00S00879.sxslv   +++|                END
00880  M00S00880.sxslv   +++|
00881  M00S00881.sxslv   +++|              END  # SEARCH FOR A DUPLICATE *TDAM* #
00882  M00S00882.sxslv   +++|
00883  M00S00883.sxslv   +++|            END  # CHECK STAGE REQUEST #
00884  M00S00884.sxslv   +++|
00885  M00S00885.sxslv   +++|          FASTFOR RB = 1 STEP 1 WHILE RB LQ NUMRB AND NOT REQPROC
00886  M00S00886.sxslv   +++|          DO
00887  M00S00887.sxslv   +++|            BEGIN  # SEARCH FOR A FREE REQUEST BLOCK #
00888  M00S00888.sxslv   +++|
00889  M00S00889.sxslv   +++|            IF SM$SRC[RB] EQ S"AVAIL" AND  ##
00890  M00S00890.sxslv   +++|              MSR$MRC[RB] EQ S"AVAIL"
00891  M00S00891.sxslv   +++|            THEN                     # AVAILABLE REQUEST BLOCK FOUND #
00892  M00S00892.sxslv   +++|              BEGIN  # ADD *TDAM* TO *STOM* BUFFER #
00893  M00S00893.sxslv   +++|
00894  M00S00894.sxslv   +++|              P<TDAM> = LOC(SM$TDAM[RB]);
00895  M00S00895.sxslv   +++|              TDAMREQST[0] = RA$TDAMRB[0];
00896  M00S00896.sxslv   +++|              SM$SRC[RB] = S"SUBMITTED";
00897  M00S00897.sxslv   +++|              SM$PDATERB[RB] = PDATEV[0];
00898  M00S00898.sxslv   +++|              STOM$TIME = 0;         # FORCE WRITE OF *STOM* FILE #
00899  M00S00899.sxslv   +++|              SM$REQCTL[0] = SM$REQCTL[0] + 1;
00900  M00S00900.sxslv   +++|              REQPROC = TRUE;
00901  M00S00901.sxslv   +++|              END  # ADD *TDAM* TO *STOM* BUFFER #
00902  M00S00902.sxslv   +++|
00903  M00S00903.sxslv   +++|            END  # SEARCH FOR A FREE REQUEST BLOCK #
00904  M00S00904.sxslv   +++|
00905  M00S00905.sxslv   +++|          IF REQPROC
00906  M00S00906.sxslv   +++|          THEN                       # REQUEST PROCESSED #
00907  M00S00907.sxslv   +++|            BEGIN
00908  M00S00908.sxslv   +++|            P<TDAM> = LOC(RA$TDAM[0]);
00909  M00S00909.sxslv   +++|            TDAMWORD[0] = 0;         # CLEAR FIRST WORD OF *TDAM* #
00910  M00S00910.sxslv   +++|            TEST MAINLOOP;
00911  M00S00911.sxslv   +++|            END
00912  M00S00912.sxslv   +++|
00913  M00S00913.sxslv   +++|#
00914  M00S00914.sxslv   +++|*     IF NO SPACE IS AVAILABLE IN THE REQUEST BLOCKS,
00915  M00S00915.sxslv   +++|*     GO THROUGH REST OF THE MAINLOOP AS IF THERE WERE
00916  M00S00916.sxslv   +++|*     NO *TDAM* REQUEST.
00917  M00S00917.sxslv   +++|#
00918  M00S00918.sxslv   +++|
00919  M00S00919.sxslv   +++|          END  # PROCESS THE *TDAM* REQUEST #
00920  M00S00920.sxslv   +++|
00921  M00S00921.sxslv   +++|        IF RTIMSECS[0] GR MTOS$TIME
00922  M00S00922.sxslv   +++|        THEN                         # PROCESS *MTOS* FILE #
00923  M00S00923.sxslv   +++|          BEGIN
00924  M00S00924.sxslv   +++|          SLVMTOS;
00925  M00S00925.sxslv   +++|          END
00926  M00S00926.sxslv   +++|
00927  M00S00927.sxslv   +++|        IF RTIMSECS[0] GR STOM$TIME
00928  M00S00928.sxslv   +++|        THEN                         # WRITE THE *STOM* FILE #
00929  M00S00929.sxslv   +++|          BEGIN
00930  M00S00930.sxslv   +++|          FLUSHSM;
00931  M00S00931.sxslv   +++|          TEST MAINLOOP;
00932  M00S00932.sxslv   +++|          END
00933  M00S00933.sxslv   +++|
00934  M00S00934.sxslv   +++|        IF SM$STATM[0] EQ S"ACTIVE"
00935  M00S00935.sxslv   +++|        THEN
00936  M00S00936.sxslv   +++|          BEGIN
00937  M00S00937.sxslv   +++|          RCLCT = SM$DELAY[0] * RCLFACTOR;
00938  M00S00938.sxslv   +++|          END
00939  M00S00939.sxslv   +++|
00940  M00S00940.sxslv   +++|        ELSE
00941  M00S00941.sxslv   +++|          BEGIN
00942  M00S00942.sxslv   +++|          RCLCT = SLRP$INTV * RCLFACTOR;
00943  M00S00943.sxslv   +++|          END
00944  M00S00944.sxslv   +++|
00945  M00S00945.sxslv   +++|        FASTFOR DUMMY = 1 STEP 1 UNTIL RCLCT
00946  M00S00946.sxslv   +++|        DO
00947  M00S00947.sxslv   +++|          BEGIN
00948  M00S00948.sxslv   +++|          RECALL(0);
00949  M00S00949.sxslv   +++|          END
00950  M00S00950.sxslv   +++|
00951  M00S00951.sxslv   +++|        END  # MAINLOOP #
00952  M00S00952.sxslv   +++|
00953  M00S00953.sxslv   +++|      END  # SLVLOOP #
00954  M00S00954.sxslv   +++|
00955  M00S00955.sxslv   +++|    TERM
00956  M00S00956.sxslv   +++|PROC SLVMTOS;
00957  M00S00957.sxslv   +++|# TITLE SLVMTOS - PROCESS *MTOS* COMMUNICATION FILE.                  #
00958  M00S00958.sxslv   +++|
00959  M00S00959.sxslv   +++|      BEGIN  # SLVMTOS #
00960  M00S00960.sxslv   +++|
00961  M00S00961.sxslv   +++|#
00962  M00S00962.sxslv   +++|**    SLVMTOS  - PROCESS THE *MTOS* COMMUNICATION FILE.
00963  M00S00963.sxslv   +++|*
00964  M00S00964.sxslv   +++|*     *SLVMTOS* WILL READ THE *MTOS* FILE TO A BUFFER, CHECK TO SEE IF
00965  M00S00965.sxslv   +++|*     THE *SSEXEC* HAS CHANGED STATUS, AND IF SO, ISSUE A MESSAGE TO
00966  M00S00966.sxslv   +++|*     THE DAYFILE AND CONSOLE.  IF THE *SSEXEC* IS ACTIVE, EACH REPLY
00967  M00S00967.sxslv   +++|*     BLOCK IS EXAMINED TO SEE IF A PREVIOUSLY SUBMITTED STAGE REQUEST
00968  M00S00968.sxslv   +++|*     HAS BEEN COMPLETED.
00969  M00S00969.sxslv   +++|*
00970  M00S00970.sxslv   +++|*     PROC SLVMTOS.
00971  M00S00971.sxslv   +++|*
00972  M00S00972.sxslv   +++|*     ENTRY      *MTOSS* (IN *COMXSEB*) CONTAINS THE *FET* FOR THE
00973  M00S00973.sxslv   +++|*                *MTOS* COMMUNICATION FILE.
00974  M00S00974.sxslv   +++|*
00975  M00S00975.sxslv   +++|*     EXIT       THE VARIABLE *MTOS$TIME* (IN *COMXSEB*) IS UPDATED TO
00976  M00S00976.sxslv   +++|*                INDICATE THE NEXT TIME THIS ROUTINE IS TO BE CALLED.
00977  M00S00977.sxslv   +++|*                IF AN ERROR CONDITION WAS DETECTED WHILE READING
00978  M00S00978.sxslv   +++|*                THE *MTOS* FILE, *SLVEND* IS SET TO *S"MTOSERR"*.
00979  M00S00979.sxslv   +++|*
00980  M00S00980.sxslv   +++|*     MESSAGES
00981  M00S00981.sxslv   +++|*                * SLVI ACTIVE, EXEC XXXX.*
00982  M00S00982.sxslv   +++|*                      AN INFORMATIVE MESSAGE INDICATING THAT A CHANGE
00983  M00S00983.sxslv   +++|*                      IN THE STATUS OF THE *SSEXEC* HAS BEEN NOTICED.
00984  M00S00984.sxslv   +++|*                      THE NEW STATUS *XXXX* CAN BE EITHER *ACTIVE*,
00985  M00S00985.sxslv   +++|*                      *IDLE*, OR *INACTIVE*.
00986  M00S00986.sxslv   +++|*
00987  M00S00987.sxslv   +++|#
00988  M00S00988.sxslv   +++|
00989  M00S00989.sxslv   +++|#
00990  M00S00990.sxslv   +++|****  PROC SLVMTOS - XREF LIST BEGIN.
00991  M00S00991.sxslv   +++|#
00992  M00S00992.sxslv   +++|
00993  M00S00993.sxslv   +++|      XREF
00994  M00S00994.sxslv   +++|        BEGIN
00995  M00S00995.sxslv   +++|        PROC EESET;                  # ISSUE EESET (SET EVENT) MACRO #
00996  M00S00996.sxslv   +++|        PROC MESSAGE;                # ISSUES MESSAGE MACRO #
00997  M00S00997.sxslv   +++|        PROC PDATE;                  # ISSUE PDATE MACRO #
00998  M00S00998.sxslv   +++|        PROC READ;                   # READ FILE #
00999  M00S00999.sxslv   +++|        PROC REWIND;                 # REWIND FILE #
01000  M00S01000.sxslv   +++|        PROC RTIME;                  # ISSUE RTIME MACRO #
01001  M00S01001.sxslv   +++|        END
01002  M00S01002.sxslv   +++|
01003  M00S01003.sxslv   +++|#
01004  M00S01004.sxslv   +++|****  PROC SLVMTOS - XREF LIST END.
01005  M00S01005.sxslv   +++|#
01006  M00S01006.sxslv   +++|
01007  M00S01007.sxslv   +++|      DEF LISTCON    #0#;            # DO NOT LIST COMMON DECKS #
01008  M00S01008.sxslv   +++|*CALL,COMBFAS
01009  M00S01009.sxslv   +++|*CALL,COMBFET
01010  M00S01010.sxslv   +++|*CALL,COMBTDM
01011  M00S01011.sxslv   +++|*CALL,COMXIPR
01012  M00S01012.sxslv   +++|*CALL,COMXMMF
01013  M00S01013.sxslv   +++|*CALL,COMXSEB
01014  M00S01014.sxslv   +++|
01015  M00S01015.sxslv   +++|
01016  M00S01016.sxslv   +++|      ITEM I          U;             # INDUCTION VARIABLE #
01017  M00S01017.sxslv   +++|      ITEM RB         U;             # INDEX TO A REQUEST BLOCK #
01018  M00S01018.sxslv   +++|                                               CONTROL EJECT;
01019  M00S01019.sxslv   +++|
01020  M00S01020.sxslv   +++|#
01021  M00S01021.sxslv   +++|*     READ THE *MTOS* FILE.
01022  M00S01022.sxslv   +++|#
01023  M00S01023.sxslv   +++|
01024  M00S01024.sxslv   +++|      REWIND(MTOSS,RCL);
01025  M00S01025.sxslv   +++|      P<FETSET> = LOC(MTOSS);
01026  M00S01026.sxslv   +++|      FET$IN[0] = FET$FRST[0];
01027  M00S01027.sxslv   +++|      FET$OUT[0] = FET$FRST[0];
01028  M00S01028.sxslv   +++|      READ(MTOSS,RCL);
01029  M00S01029.sxslv   +++|      RTIME(RTIMESTAT[0]);
01030  M00S01030.sxslv   +++|      PDATE(PDATESTAT[0]);
01031  M00S01031.sxslv   +++|      MTOS$TIME = RTIMSECS[0] + SM$DELAY[0];
01032  M00S01032.sxslv   +++|
01033  M00S01033.sxslv   +++|#
01034  M00S01034.sxslv   +++|*     CHECK THAT THE READ OF *MTOS* IS OK.
01035  M00S01035.sxslv   +++|#
01036  M00S01036.sxslv   +++|
01037  M00S01037.sxslv   +++|      IF FET$AT[0] NQ OK             # CIO ERROR #
01038  M00S01038.sxslv   +++|        OR FET$IN[0] - FET$OUT[0] NQ L$MTOS  # WRONG LENGTH #
01039  M00S01039.sxslv   +++|      THEN
01040  M00S01040.sxslv   +++|        BEGIN
01041  M00S01041.sxslv   +++|        SLVEND = S"MTOSERR";
01042  M00S01042.sxslv   +++|        RETURN;
01043  M00S01043.sxslv   +++|        END
01044  M00S01044.sxslv   +++|
01045  M00S01045.sxslv   +++|#
01046  M00S01046.sxslv   +++|*     LOCATE INDEX OF THIS SLAVE IN THE *MTOS* FILE.
01047  M00S01047.sxslv   +++|#
01048  M00S01048.sxslv   +++|
01049  M00S01049.sxslv   +++|      SINDX = 0;
01050  M00S01050.sxslv   +++|      FASTFOR I = 1 STEP 1 WHILE I LQ MAXSLV AND SINDX EQ 0
01051  M00S01051.sxslv   +++|      DO
01052  M00S01052.sxslv   +++|        BEGIN
01053  M00S01053.sxslv   +++|        IF MSH$PFNS[I] EQ PFNSTOM
01054  M00S01054.sxslv   +++|        THEN                         # FOUND MATCH #
01055  M00S01055.sxslv   +++|          BEGIN
01056  M00S01056.sxslv   +++|          SINDX = I;
01057  M00S01057.sxslv   +++|          END
01058  M00S01058.sxslv   +++|
01059  M00S01059.sxslv   +++|        END
01060  M00S01060.sxslv   +++|
01061  M00S01061.sxslv   +++|      IF SINDX EQ 0
01062  M00S01062.sxslv   +++|      THEN
01063  M00S01063.sxslv   +++|        BEGIN
01064  M00S01064.sxslv   +++|        SLVEND = S"MTOSERR";
01065  M00S01065.sxslv   +++|        RETURN;
01066  M00S01066.sxslv   +++|        END
01067  M00S01067.sxslv   +++|
01068  M00S01068.sxslv   +++|      P<MTOSREPBLK> = LOC(MTOSHEAD) + L$MTOSH + (SINDX-1)*NUMRB;
01069  M00S01069.sxslv   +++|                                               CONTROL EJECT;
01070  M00S01070.sxslv   +++|
01071  M00S01071.sxslv   +++|#
01072  M00S01072.sxslv   +++|*     CHECK FOR A CHANGE IN MASTER EXEC STATUS.
01073  M00S01073.sxslv   +++|#
01074  M00S01074.sxslv   +++|
01075  M00S01075.sxslv   +++|      IF MSH$MWC[0] NQ SM$MWC[0]
01076  M00S01076.sxslv   +++|      THEN                           # MASTER IS ACTIVE #
01077  M00S01077.sxslv   +++|        BEGIN  # RESET STATUS AND TIME OUT VALUES IN *STOM* #
01078  M00S01078.sxslv   +++|        IF SM$STATM[0] NQ S"ACTIVE"
01079  M00S01079.sxslv   +++|        THEN                         # MASTER RESUMED RUNNING #
01080  M00S01080.sxslv   +++|          BEGIN
01081  M00S01081.sxslv   +++|          MSGE$STAT[0] = "ACTIVE.";
01082  M00S01082.sxslv   +++|          MESSAGE(MSGEXSTAT[0],SYSUDF1);
01083  M00S01083.sxslv   +++|          END
01084  M00S01084.sxslv   +++|
01085  M00S01085.sxslv   +++|        SM$MSW[0] = MSH$MSW[0];
01086  M00S01086.sxslv   +++|        SM$STATM[0] = S"ACTIVE";
01087  M00S01087.sxslv   +++|        SM$TIMOUT[0] = RTIMSECS[0] + SLAV$INTV;
01088  M00S01088.sxslv   +++|        END  # RESET STATUS AND TIME OUT VALUES IN *STOM* #
01089  M00S01089.sxslv   +++|
01090  M00S01090.sxslv   +++|      ELSE                           # MASTER DID NOT UPDATE ITS WRITE
01091  M00S01091.sxslv   +++|                                       COUNTER #
01092  M00S01092.sxslv   +++|        BEGIN  # CHECK FOR TIMEOUT #
01093  M00S01093.sxslv   +++|        IF SM$TIMOUT[0] LS RTIMSECS[0]
01094  M00S01094.sxslv   +++|        THEN                         # MASTER IDLE OR TIMED OUT #
01095  M00S01095.sxslv   +++|          BEGIN
01096  M00S01096.sxslv   +++|          IF MSH$IDLE[0]
01097  M00S01097.sxslv   +++|          THEN
01098  M00S01098.sxslv   +++|            BEGIN
01099  M00S01099.sxslv   +++|            MSGE$STAT[0] = "IDLE.";
01100  M00S01100.sxslv   +++|            END
01101  M00S01101.sxslv   +++|
01102  M00S01102.sxslv   +++|          ELSE
01103  M00S01103.sxslv   +++|            BEGIN
01104  M00S01104.sxslv   +++|            MSGE$STAT[0] = "INACTIVE.";
01105  M00S01105.sxslv   +++|            END
01106  M00S01106.sxslv   +++|
01107  M00S01107.sxslv   +++|          MESSAGE(MSGEXSTAT[0],SYSUDF1);
01108  M00S01108.sxslv   +++|          SM$TIMOUT[0] = MAXSECS;
01109  M00S01109.sxslv   +++|          SM$STATM[0] = S"DEAD";
01110  M00S01110.sxslv   +++|          END
01111  M00S01111.sxslv   +++|
01112  M00S01112.sxslv   +++|        RETURN;
01113  M00S01113.sxslv   +++|        END  # CHECK FOR TIMEOUT #
01114  M00S01114.sxslv   +++|
01115  M00S01115.sxslv   +++|                                               CONTROL EJECT;
01116  M00S01116.sxslv   +++|
01117  M00S01117.sxslv   +++|#
01118  M00S01118.sxslv   +++|*     PROCESS REQUEST BLOCKS WHICH HAVE BEEN
01119  M00S01119.sxslv   +++|*     FINISHED BY MASTER EXEC BY MAKING THEM AVAILABLE.
01120  M00S01120.sxslv   +++|#
01121  M00S01121.sxslv   +++|
01122  M00S01122.sxslv   +++|      FASTFOR RB = 1 STEP 1 UNTIL NUMRB
01123  M00S01123.sxslv   +++|      DO
01124  M00S01124.sxslv   +++|        BEGIN  # CHECK EACH REQUEST BLOCK #
01125  M00S01125.sxslv   +++|        IF SM$SRC[RB] NQ S"AVAIL" AND  ##
01126  M00S01126.sxslv   +++|          MSR$MRC[RB] EQ S"FINISHED"
01127  M00S01127.sxslv   +++|        THEN
01128  M00S01128.sxslv   +++|          BEGIN  # PROCESS FINISHED REQUEST #
01129  M00S01129.sxslv   +++|          SM$SRC[RB] = S"AVAIL";
01130  M00S01130.sxslv   +++|          SM$REQCTL[0] = SM$REQCTL[0] + 1;
01131  M00S01131.sxslv   +++|          SM$PDATE[RB] = PDATEV[0];
01132  M00S01132.sxslv   +++|          P<TDAM> = LOC(SM$TDAM[RB]);
01133  M00S01133.sxslv   +++|          IF MSR$REPLY[0] EQ S"OK" AND  ##
01134  M00S01134.sxslv   +++|            TDAMEVENT[0] NQ 0
01135  M00S01135.sxslv   +++|          THEN                       # ISSUE THE EVENT #
01136  M00S01136.sxslv   +++|            BEGIN
01137  M00S01137.sxslv   +++|            EESET(TDAMEVENT[0]);
01138  M00S01138.sxslv   +++|            END
01139  M00S01139.sxslv   +++|
01140  M00S01140.sxslv   +++|          END  # PROCESS FINISHED REQUESTS #
01141  M00S01141.sxslv   +++|
01142  M00S01142.sxslv   +++|        END  # CHECK EACH REQUEST BLOCK #
01143  M00S01143.sxslv   +++|
01144  M00S01144.sxslv   +++|      END  # SLVMTOS #
01145  M00S01145.sxslv   +++|
01146  M00S01146.sxslv   +++|    TERM
cdc/nos2.source/opl.opl871/deck/sxslv.txt ยท Last modified: (external edit)