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