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