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