cdc:nos2.source:opl.opl871:deck:smfex.001
Deck SMFEX Part 001
14 Modifications
Listing Sections
- Deck SMFEX Start
- Deck SMFEX Part 1 (Line 1996)
Source
Seq # *Modification Id* Act ----------------------------+ 01996 M00S01960.smfex +++|INSTSESSION: 01997 M00S01961.smfex +++| STATWORD[3]=STATWORD[3]+1; 01998 M00S01962.smfex +++| RETURN; 01999 M00S01963.smfex +++| 02000 M00S01964.smfex +++|INSTTRANS: 02001 M00S01965.smfex +++| STATWORD[4]=STATWORD[4]+1; 02002 M00S01966.smfex +++| RETURN; 02003 M00S01967.smfex +++| 02004 M00S01968.smfex +++|INSTRSPNS: 02005 M00S01969.smfex +++| STATWORD[5]=STATWORD[5]+DATA; 02006 M00S01970.smfex +++| ADDVECT(DISTRSTM,DATA/16); 02007 M00S01971.smfex +++| RETURN; 02008 M00S01972.smfex +++| 02009 M00S01973.smfex +++|INSTTHNK: 02010 M00S01974.smfex +++| STATWORD[6]=STATWORD[6]+DATA; 02011 M00S01975.smfex +++| ADDVECT(DISTTKTM,DATA/1024); 02012 M00S01976.smfex +++| RETURN; 02013 M00S01977.smfex +++| 02014 M00S01978.smfex +++|INSTPREEMPT: # WORDS 7, 8, 9 # 02015 M00S01979.smfex +++| STATWORD[6+DATA]=STATWORD[6+DATA]+1; 02016 M00S01980.smfex +++| RETURN; 02017 M00S01981.smfex +++| 02018 M00S01982.smfex +++|INSTXSTTO: 02019 M00S01983.smfex +++| STATWORD[10]=STATWORD[10]+1; 02020 M00S01984.smfex +++| RETURN; 02021 M00S01985.smfex +++| 02022 M00S01986.smfex +++|INSTBREAK: 02023 M00S01987.smfex +++| STATWORD[11]=STATWORD[11]+1; 02024 M00S01988.smfex +++| RETURN; 02025 M00S01989.smfex +++| 02026 M00S01990.smfex +++|INSTHANG: 02027 M00S01991.smfex +++| STATWORD[12]=STATWORD[12]+1; 02028 M00S01992.smfex +++| RETURN; 02029 M00S01993.smfex +++| 02030 M00S01994.smfex +++|INSTCLOCK: 02031 M00S01995.smfex +++| STATWORD[13]=MAXLOGGED; 02032 M00S01996.smfex +++| STATWORD[14]=LOGGEDIN; 02033 M00S01997.smfex +++| STATWORD[15]=TIMEOFDAY; 02034 M00S01998.smfex +++| STATWORD[16]=SLICECOUNT; 02035 M00S01999.smfex +++| RETURN; 02036 M00S02000.smfex +++| 02037 M00S02001.smfex +++|INSTSWPE: 02038 M00S02002.smfex +++| STATWORD[17]=STATWORD[17]+1; 02039 M00S02003.smfex +++| RETURN; 02040 M00S02004.smfex +++| 02041 M00S02005.smfex +++|INSTSWPD: 02042 M00S02006.smfex +++| STATWORD[18]=STATWORD[18]+1; 02043 M00S02007.smfex +++| RETURN; 02044 M00S02008.smfex +++| 02045 M00S02009.smfex +++|INSTSWPTIM: 02046 M00S02010.smfex +++| STATWORD[19]=STATWORD[19]+DATA; 02047 M00S02011.smfex +++| RETURN; 02048 M00S02012.smfex +++| 02049 M00S02013.smfex +++|INSTEDTCIO: 02050 M00S02014.smfex +++| STATWORD[20]=STATWORD[20]+DATA; # CIO MSECS # 02051 M00S02015.smfex +++| STATWORD[21]=STATWORD[21]+DATA2; # CIO COUNT # 02052 M00S02016.smfex +++| IF DATA2 EQ 0 THEN STATWORD[22]=STATWORD[22]+1; # NUM ZERO CIO # 02053 M00S02017.smfex +++| IF DATA2 GQ 16 THEN 02054 M00S02018.smfex +++| BEGIN 02055 M00S02019.smfex +++| STATWORD[23]=STATWORD[23]+1; # NUM CRUNCHERS # 02056 M00S02020.smfex +++| STATWORD[24]=STATWORD[24]+DATA2; # CRUNCHY EFFORT # 02057 M00S02021.smfex +++| END 02058 M00S02022.smfex +++| ADDVECT(DISTCICT,DATA2); 02059 M00S02023.smfex +++| RETURN; 02060 M00S02024.smfex +++| 02061 M00S02025.smfex +++|INSTBGNEDT: 02062 M00S02026.smfex +++| STATWORD[25]=STATWORD[25]+BUILDCIO; # FILEBUILD CIOS # 02063 M00S02027.smfex +++| RETURN; 02064 M00S02028.smfex +++| 02065 M00S02029.smfex +++|INSTENDEDT: 02066 M00S02030.smfex +++| ADDVECT(DISTTRCT,ACCTTRANS); 02067 M00S02031.smfex +++| ADDVECT(DISTFLSZ,PALAST[0]); 02068 M00S02032.smfex +++| RETURN; 02069 M00S02033.smfex +++| 02070 M00S02034.smfex +++|INSTINPUT: 02071 M00S02035.smfex +++| STATWORD[26]=STATWORD[26]+DATA; # NUM WORDS # 02072 M00S02036.smfex +++| RETURN; 02073 M00S02037.smfex +++| 02074 M00S02038.smfex +++|INSTXMIT: 02075 M00S02039.smfex +++| STATWORD[27]=STATWORD[27]+DATA; # NUM WORDS # 02076 M00S02040.smfex +++| STATWORD[28]=STATWORD[28]+DATA2; # NUM BLOCKS # 02077 M00S02041.smfex +++| ADDVECT(DISTMGSZ,DATA); 02078 M00S02042.smfex +++| RETURN; 02079 M00S02043.smfex +++| 02080 M00S02044.smfex +++|INSTKWIK: 02081 M00S02045.smfex +++| STATWORD[29]=STATWORD[29]+1; 02082 M00S02046.smfex +++| RETURN; 02083 M00S02047.smfex +++| 02084 M00S02048.smfex +++|INSTUTIL: 02085 M00S02049.smfex +++| STATWORD[30]=STATWORD[30]+DATA; 02086 M00S02050.smfex +++| RETURN; 02087 M00S02051.smfex +++| 02088 M00S02052.smfex +++|INSTWORK: 02089 M00S02053.smfex +++| STATWORD[31+DATA]=STATWORD[31+DATA]+1; # WORDS 31 THRU 41 # 02090 M00S02054.smfex +++| RETURN; 02091 M00S02055.smfex +++| 02092 M00S02056.smfex +++|INSTDROP: 02093 M00S02057.smfex +++| STATWORD[42]=STATWORD[42]+1; 02094 M00S02058.smfex +++| RETURN; 02095 M00S02059.smfex +++| 02096 M00S02060.smfex +++| END # OF INSTRUMENT # 02097 M00S02061.smfex +++|CONTROL FI; 02098 M00S02062.smfex +++|PAGE # USER-STATE CODE # 02099 M00S02063.smfex +++| # BASIC WAIT/INTERRUPT HOOKS # 02100 M00S02064.smfex +++| 02101 M00S02065.smfex +++| 02102 M00S02066.smfex +++|PROC SMFDLY; 02103 M00S02067.smfex +++| IOBEGIN(SMFDLY) 02104 M00S02068.smfex +++|# 02105 M00S02069.smfex +++|** SMFDLY - INTERFACE FOR TASKS TO DELAY. 02106 M00S02070.smfex +++|* 02107 M00S02071.smfex +++|* EDITING CODE USE COMPILE-TIME MACROS TO REDEFINE THE 02108 M00S02072.smfex +++|* KEYWORD "DELAY" INTO A CALL TO "SMFDLY" FOR MULTI-USER 02109 M00S02073.smfex +++|* CODE. SMFDLY INTERFACES TO THE PAUSE ROUTINE, WHICH IN 02110 M00S02074.smfex +++|* TURN WORKS WITH RUNJOBS TO CONTROL THE TASK. 02111 M00S02075.smfex +++|* 02112 M00S02076.smfex +++|* ENTRY NO CONDITIONS. 02113 M00S02077.smfex +++|* 02114 M00S02078.smfex +++|* EXIT AFTER DELAYING. 02115 M00S02079.smfex +++|* 02116 M00S02080.smfex +++|* CALLS PAUSE. 02117 M00S02081.smfex +++|* 02118 M00S02082.smfex +++|* USES CHNGSTATUS. 02119 M00S02083.smfex +++|# 02120 M00S02084.smfex +++| CHNGSTATUS=TASKST"DELAY"; 02121 M00S02085.smfex +++| PAUSE; 02122 M00S02086.smfex +++| IOEND # OF SMFDLY # 02123 M00S02087.smfex +++| 02124 M00S02088.smfex +++| 02125 M00S02089.smfex +++|PROC SMFRCL(AFET); 02126 M00S02090.smfex +++| IOBEGIN(SMFRCL) 02127 M00S02091.smfex +++|# 02128 M00S02092.smfex +++|** SMFRCL - INTERFACE FOR TASKS TO AUTO-RECALL ON AN EVENT. 02129 M00S02093.smfex +++|* 02130 M00S02094.smfex +++|* EDITING CODE USE COMPILE-TIME MACROS TO REDEFINE THE 02131 M00S02095.smfex +++|* KEYWORD "RECALL" INTO A CALL TO "SMFRCL" FOR MULTI-USER 02132 M00S02096.smfex +++|* CODE. SMFDLY INTERFACES TO THE PAUSE ROUTINE, WHICH IN 02133 M00S02097.smfex +++|* TURN WORKS WITH RUNJOBS TO CONTROL THE TASK. 02134 M00S02098.smfex +++|* 02135 M00S02099.smfex +++|* NOTE THAT EDITING CODE IS NOT ALLOWED TO SPECIFY AUTO-RECALL 02136 M00S02100.smfex +++|* ON ANY RA+1 CALL. INSTEAD, EDITING CODE MUST ISSUE 02137 M00S02101.smfex +++|* RA+1 AND THEN CALL THIS ROUTINE TO RECALL UNTIL THE SYSTEM 02138 M00S02102.smfex +++|* FUNCTION IS COMPLETE. 02139 M00S02103.smfex +++|* 02140 M00S02104.smfex +++|* ENTRY AFET - COMPLETION WORD. 02141 M00S02105.smfex +++|* 02142 M00S02106.smfex +++|* EXIT AFTER COMPLETION BIT IS FOUND TO BE ON. 02143 M00S02107.smfex +++|* 02144 M00S02108.smfex +++|* CALLS PAUSE. 02145 M00S02109.smfex +++|* 02146 M00S02110.smfex +++|* USES CHNGSTATUS, TASKRCLADR[CURTASK]. 02147 M00S02111.smfex +++|# 02148 M00S02112.smfex +++| ARRAY AFET;; 02149 M00S02113.smfex +++| TASKRCLADR[CURTASK]=LOC(AFET); 02150 M00S02114.smfex +++| CHNGSTATUS=TASKST"RECALLFET"; 02151 M00S02115.smfex +++| PAUSE; 02152 M00S02116.smfex +++| IOEND # OF SMFRCL # 02153 M00S02117.smfex +++| 02154 M00S02118.smfex +++| 02155 M00S02119.smfex +++|PROC CLEARINT; 02156 M00S02120.smfex +++| IOBEGIN(CLEARINT) 02157 M00S02121.smfex +++|# 02158 M00S02122.smfex +++|** CLEARINT - ACKNOWLEGE USER BREAK. 02159 M00S02123.smfex +++|* 02160 M00S02124.smfex +++|* EDITING CODE IS REQUIRED TO CALL THIS ROUTINE AS SOON AS 02161 M00S02125.smfex +++|* A USER BREAK HAS BEEN NOTICED, AND ALL EDITOR-SPECIFIC 02162 M00S02126.smfex +++|* RESPONSES HAVE BEEN PERFORMED. CLEARINT CLEARS FLAGS 02163 M00S02127.smfex +++|* INDICATING UNACKNOWLEGED INTERRUPT, SINCE ONLY EXECUTIVE 02164 M00S02128.smfex +++|* CODE CAN ACCESS SUCH FLAGS. 02165 M00S02129.smfex +++|* 02166 M00S02130.smfex +++|* ENTRY NO CONDITIONS. 02167 M00S02131.smfex +++|* 02168 M00S02132.smfex +++|* EXIT CURUSINTRPT - FALSE. 02169 M00S02133.smfex +++|* BUFFERED OUTPUT PURGED. 02170 M00S02134.smfex +++|* TASKREQUE - FALSE UNLESS TASK RECOVERY IN EFFECT. 02171 M00S02135.smfex +++|* 02172 M00S02136.smfex +++|* CALLS CLEARQUE. 02173 M00S02137.smfex +++|# 02174 M00S02138.smfex +++| IF CURUSINTRPT THEN TASKNXTTTO[CURTASK]=0; 02175 M00S02139.smfex +++| CLEARQUE; 02176 M00S02140.smfex +++| CURUSINTRPT=FALSE; 02177 M00S02141.smfex +++| IOEND # OF CLEARINT # 02178 M00S02142.smfex +++| 02179 M00S02143.smfex +++| 02180 M00S02144.smfex +++|PROC CLEARQUE; 02181 M00S02145.smfex +++| BEGIN 02182 M00S02146.smfex +++|# 02183 M00S02147.smfex +++|** CLEARQUE - ATTEMPT TO CLEAR TASKREQUE FLAG. 02184 M00S02148.smfex +++|* 02185 M00S02149.smfex +++|* CLEARQUE CLEARS THE TASKREQUE FLAG UNLESS TASK RECOVERY IS 02186 M00S02150.smfex +++|* IN EFFECT. TASKREQUE IS SET BY DOINPUT WHEN A USER NEEDS 02187 M00S02151.smfex +++|* TO BE SCEDULED TO A TASK BUT IS ALREADY IN A TASK. DOINPUT 02188 M00S02152.smfex +++|* HAS NO WAY TO KNOW IF THE TASK ALREADY RUNNING WILL DETECT 02189 M00S02153.smfex +++|* OR IGNORE THE INPUT EVENT. THUS, THE TASKREQUE FLAG IS 02190 M00S02154.smfex +++|* SET. IF THE EDITING CODE NEVER USES CLEARQUE TO SHOW 02191 M00S02155.smfex +++|* ACKNOWLEGEMENT, THEN WHEN THE TASK SWAPS OUT THE RUNJOBS 02192 M00S02156.smfex +++|* ROUTINE WILL IMMEDIATELY PUT THE USER BACK IN THE SWAPIN 02193 M00S02157.smfex +++|* QUEUE. IF THE EDITING CODE ACKNOWLEGES THE INPUT EVENT, 02194 M00S02158.smfex +++|* WHICH IS USUALLY A USER BREAK, THEN CLEARQUE GETS RID OF 02195 M00S02159.smfex +++|* THE RESCHEDULING AT END OF TRANSACTION. 02196 M00S02160.smfex +++|* 02197 M00S02161.smfex +++|* THE TASKREQUE FLAG IS PRESERVED IF RECOVERY IS ON. 02198 M00S02162.smfex +++|* RECOVERY DEALS WITH JOB DETACHMENT AND SUBSYSTEM EXITS. 02199 M00S02163.smfex +++|* 02200 M00S02164.smfex +++|* ENTRY CURUSRCVRY - WHETHER RECOVERY IN EFFECT. 02201 M00S02165.smfex +++|* TASKREQUE[CURTASK] - WHETHER RESCHEDULING PLANNED. 02202 M00S02166.smfex +++|* 02203 M00S02167.smfex +++|* EXIT TASKREQUE[CURTASK] - UPDATED. 02204 M00S02168.smfex +++|# 02205 M00S02169.smfex +++| TASKREQUE[CURTASK]=TASKREQUE[CURTASK] AND CURUSRCVRY; 02206 M00S02170.smfex +++| END # OF CLEARQUE # 02207 M00S02171.smfex +++| 02208 M00S02172.smfex +++| 02209 M00S02173.smfex +++|PROC SPINWHEELS; 02210 M00S02174.smfex +++| IOBEGIN(SPINWHEELS) 02211 M00S02175.smfex +++|# 02212 M00S02176.smfex +++|** SPINWHEELS - DELAY TASK UNTIL INPUT ARRIVES. 02213 M00S02177.smfex +++|* 02214 M00S02178.smfex +++|* SPINWHEELS ALLOWS A TASK TO HOLD ONTO ITS RESOURCES FOR 02215 M00S02179.smfex +++|* BRIEF TIME INTERVALS IN EXPECTATION OF A USEFUL EXTERNAL 02216 M00S02180.smfex +++|* ARRIVING PROBABLY WITHIN A FRACTION OF A SECOND. IF 02217 M00S02181.smfex +++|* RESOURCES ARE TIGHT WE TERMINATE THE WAIT SO THE CALLER CAN 02218 M00S02182.smfex +++|* SWAP OUT. 02219 M00S02183.smfex +++|* 02220 M00S02184.smfex +++|* ENTRY TIMEOFDAY - CURRENT TIME. 02221 M00S02185.smfex +++|* TASKREQUE[CURTASK], TASKTIME[CURTASK], REMAINTTI, 02222 M00S02186.smfex +++|* TASKAVAIL, TASKSBUSY - EVENT/RESOURCE DATA. 02223 M00S02187.smfex +++|* SPINTIME - TIME ALREADY SPENT SPINNING. 02224 M00S02188.smfex +++|* 02225 M00S02189.smfex +++|* EXIT TIMEOFDAY - CURRENT TIME MAY HAVE ADVANCED. 02226 M00S02190.smfex +++|* SPINTIME - POSSIBLY INCREMENTED. 02227 M00S02191.smfex +++|* 02228 M00S02192.smfex +++|* CALLS OKTOWAIT(INTERNAL), SMFRCL. 02229 M00S02193.smfex +++|* 02230 M00S02194.smfex +++|* USES SPINSTART, TASKPULSE[CURTASK]. 02231 M00S02195.smfex +++|# 02232 M00S02196.smfex +++| 02233 M00S02197.smfex +++| FUNC OKTOWAIT B; 02234 M00S02198.smfex +++| BEGIN 02235 M00S02199.smfex +++|# 02236 M00S02200.smfex +++|** OKTOWAIT - COMPUTE RULES FOR SPINWHEELS. 02237 M00S02201.smfex +++|* 02238 M00S02202.smfex +++|* OKTOWAIT DETERMINES THE EVENT/RESOURCE THRESHOLDS FOR THE 02239 M00S02203.smfex +++|* SPINWHEELS ROUTINES. A TASK MAY SPIN ITS WHEELS, HOLDING 02240 M00S02204.smfex +++|* RESOURCES, UNTIL/UNLESS ANY OF THE FOLLOWING -- 02241 M00S02205.smfex +++|* 02242 M00S02206.smfex +++|* 1. THE DESIRED INPUT ARRIVES FROM IAFEX (TASKREQUE) 02243 M00S02207.smfex +++|* 02244 M00S02208.smfex +++|* 2. TWO SECONDS EXPIRE. 02245 M00S02209.smfex +++|* 02246 M00S02210.smfex +++|* 3. ONE-HALF SECOND EXPIRES AND THERE ARE MORE USERS 02247 M00S02211.smfex +++|* SCHEDULED FOR TASKS THAN TASKS LEFT TO TAKE THEM. 02248 M00S02212.smfex +++|* 02249 M00S02213.smfex +++|* 4. REGARDLESS OF TIMING, LESS THAN HALF OF THE TERMINAL 02250 M00S02214.smfex +++|* INPUT BUFFERS ARE LEFT OVER. (MOST CRITICAL RESOURCE) 02251 M00S02215.smfex +++|* 02252 M00S02216.smfex +++|* ENTRY AND EXIT - SEE OUTER PROCEDURE. 02253 M00S02217.smfex +++|# 02254 M00S02218.smfex +++| OKTOWAIT=TRUE; 02255 M00S02219.smfex +++| IF TASKREQUE[CURTASK] OR TIMEOFDAY-TASKTIME[CURTASK] 02256 M00S02220.smfex +++| GR 2000 THEN OKTOWAIT=FALSE; 02257 M00S02221.smfex +++| IF NUMTTIBUF-REMAINTTI GR TASKSAVAIL-TASKSBUSY AND 02258 M00S02222.smfex +++| TIMEOFDAY-TASKTIME[CURTASK] GR 500 THEN OKTOWAIT=FALSE; 02259 M00S02223.smfex +++| IF REMAINTTI LQ NUMTTIBUF/2 THEN OKTOWAIT=FALSE; 02260 M00S02224.smfex +++| END 02261 M00S02225.smfex +++| 02262 M00S02226.smfex +++| 02263 M00S02227.smfex +++| # SPINWHEELS MAIN CODE STARTS HERE # 02264 M00S02228.smfex +++| 02265 M00S02229.smfex +++| SPINSTART=TIMEOFDAY; 02266 M00S02230.smfex +++| WHYLE OKTOWAIT DO 02267 M00S02231.smfex +++| BEGIN 02268 M00S02232.smfex +++| TASKPULSE[CURTASK]=2; # SIMULATE BUSY FET # 02269 M00S02233.smfex +++| P<MOVTO>=LOC(TASKPULSE[CURTASK]); 02270 M00S02234.smfex +++| SMFRCL(MOVTO); # APPROX 05-HZ DELAY LOOP # 02271 M00S02235.smfex +++| END 02272 M00S02236.smfex +++| SPINTIME=SPINTIME+TIMEOFDAY-SPINSTART; 02273 M00S02237.smfex +++| IOEND # OF SPINWHEELS # 02274 M00S02238.smfex +++|PAGE # RELIABILITY/METERING HOOKS # 02275 M00S02239.smfex +++| 02276 M00S02240.smfex +++| 02277 M00S02241.smfex +++|PROC FATALTRAP; 02278 M00S02242.smfex +++| IOBEGIN(FATALTRAP) 02279 M00S02243.smfex +++|# 02280 M00S02244.smfex +++|** FATALTRAP - INTERFACE FOR FAILING TASKS. 02281 M00S02245.smfex +++|* 02282 M00S02246.smfex +++|* FATALTRAP IS CALLED BY EDITING CODE WHICH DETECTS ITS OWN 02283 M00S02247.smfex +++|* UNCORRECTABLE ALGORITHMIC INCONSISTENCY. THIS INTERFACE 02284 M00S02248.smfex +++|* WAITS FOR ANY CIO CALL TO FINISH THEN BRANCHES DIRECTLY 02285 M00S02249.smfex +++|* TO THE RUNJOBS EXECUTIVE. 02286 M00S02250.smfex +++|* 02287 M00S02251.smfex +++|* ENTRY FET - MAYBE ACTIVE. 02288 M00S02252.smfex +++|* 02289 M00S02253.smfex +++|* EXIT FET - COMPLETE. 02290 M00S02254.smfex +++|* VIA AFTEREDIT LABEL. 02291 M00S02255.smfex +++|* 02292 M00S02256.smfex +++|* CALLS SMFRCL, AFTEREDIT. 02293 M00S02257.smfex +++|# 02294 M00S02258.smfex +++| XREF LABEL AFTEREDIT; 02295 M00S02259.smfex +++| SMFRCL(FET); # WAIT IO DONE # 02296 M00S02260.smfex +++| GOTO AFTEREDIT; # TERMINATE TASK # 02297 M00S02261.smfex +++| END # OF FATALTRAP # 02298 M00S02262.smfex +++| 02299 M00S02263.smfex +++| 02300 M00S02264.smfex +++|PROC ABTPAUSE; 02301 M00S02265.smfex +++| IOBEGIN(ABTPAUSE) 02302 M00S02266.smfex +++|# 02303 M00S02267.smfex +++|** ABTPAUSE - TRY TO CHECKPOINT WORKFILE AFTER ABORT. 02304 M00S02268.smfex +++|* 02305 M00S02269.smfex +++|* ABTPAUSE IS CALLED AS EDITING CODE BY THE RUNJOBS EXECUTIVE 02306 M00S02270.smfex +++|* WHEN A TASK HAS ABORTED ITSELF. THE INTENT IS TO ATTEMPT 02307 M00S02271.smfex +++|* TO CHECKPOINT THE WORKFILE BEFORE TRANSITIONING BACK TO 02308 M00S02272.smfex +++|* SINGLE-USER. IF THIS CAN BE DONE, THEN THE SINGLE EDITOR 02309 M00S02273.smfex +++|* WILL DETECT THE ABORTED FLAG IN THE DATA SEGMENT OF THE 02310 M00S02274.smfex +++|* WORKFILE AND WILL KNOW THAT IT CANNOT PROCEED. ABTPAUSE 02311 M00S02275.smfex +++|* MAY NOT SUCCEED, AND RUNJOBS IS RESPONSIBLE TO KEEP TRACK 02312 M00S02276.smfex +++|* OF ABTPAUSE FAILURE AND INSTEAD CALL ABTKILL. 02313 M00S02277.smfex +++|* 02314 M00S02278.smfex +++|* CALLS PAUSEIO. 02315 M00S02279.smfex +++|# 02316 M00S02280.smfex +++| PAUSEIO; 02317 M00S02281.smfex +++| IOEND # OF ABTPAUSE # 02318 M00S02282.smfex +++| 02319 M00S02283.smfex +++| 02320 M00S02284.smfex +++|PROC ABTKILL; 02321 M00S02285.smfex +++| IOBEGIN(ABTKILL) 02322 M00S02286.smfex +++|# 02323 M00S02287.smfex +++|** ABTKILL - KILL OFF TASK AFTER DOUBLE ABORT. 02324 M00S02288.smfex +++|* 02325 M00S02289.smfex +++|* THE RUNJOBS EXECUTIVE CALLS ABTKILL AS A LAST RESORT WHEN A 02326 M00S02290.smfex +++|* TASK HAS DELIBERATELY ABORTED ITSELF, THEN HAS ABORTED 02327 M00S02291.smfex +++|* ITSELF A SECOND TIME WHEN ABTPAUSE ATTEMPTED TO CHECKPOINT 02328 M00S02292.smfex +++|* THE WORKFILE. ABTKILL ATTEMPTS TO ZAP THE WORKFILE TO 02329 M00S02293.smfex +++|* CONTAIN EXACTLY ONE WORD OF ZEROES, WHICH WOULD NOT BE 02330 M00S02294.smfex +++|* ACCEPTED AS A VALID TRANSITION ONCE THE SINGLE-USER EDITOR 02331 M00S02295.smfex +++|* GETS BACK IN CONTROL. THE INTENT IS TO BE AS CERTAIN AS 02332 M00S02296.smfex +++|* POSSIBLE THAT THE SINGLE EDITOR WILL NOT PICK UP AND 02333 M00S02297.smfex +++|* CONTINUE A HOPELESS EDIT SESSION. 02334 M00S02298.smfex +++|* 02335 M00S02299.smfex +++|* CALLS SMFRCL, WRITEO, REWRITR, SMFRCL. 02336 M00S02300.smfex +++|* 02337 M00S02301.smfex +++|* USES FET. 02338 M00S02302.smfex +++|# 02339 M00S02303.smfex +++| SMFRCL(FET); 02340 M00S02304.smfex +++| FETRR=1; 02341 M00S02305.smfex +++| WRITEO(FET,0); 02342 M00S02306.smfex +++| REWRITR(FET,0); 02343 M00S02307.smfex +++| SMFRCL(FET); 02344 M00S02308.smfex +++| IOEND # OF ABTKILL # 02345 M00S02309.smfex +++| 02346 M00S02310.smfex +++| 02347 M00S02311.smfex +++|CONTROL IFEQ METERING,1; 02348 M00S02312.smfex +++| 02349 M00S02313.smfex +++| PROC BGNMETER; 02350 M00S02314.smfex +++| BEGIN 02351 M00S02315.smfex +++|# 02352 M00S02316.smfex +++|** BGNMETER - INSTRUMENT BEGINNING OF EDIT SESSION. 02353 M00S02317.smfex +++|* 02354 M00S02318.smfex +++|* BGNMETER ALLOWS THE SINGLE-USER EDITOR TO PASS DATA FROM 02355 M00S02319.smfex +++|* ITS FILE-BUILD PROCESS, INTO THE CORRESPONDING TASK IN 02356 M00S02320.smfex +++|* THE MULTI-USER EDITOR, WHICH CAN USE THIS INTERFACE TO 02357 M00S02321.smfex +++|* GLOBALLY RECORD THE DATA. 02358 M00S02322.smfex +++|* 02359 M00S02323.smfex +++|* CALLS INSTRMNT1. 02360 M00S02324.smfex +++|# 02361 M00S02325.smfex +++| INSTRMNT1(INSTST"BGNEDT"); 02362 M00S02326.smfex +++| END 02363 M00S02327.smfex +++| 02364 M00S02328.smfex +++| 02365 M00S02329.smfex +++| PROC WIOSTAT(ORDINAL); 02366 M00S02330.smfex +++| BEGIN 02367 M00S02331.smfex +++|# 02368 M00S02332.smfex +++|** WIOSTAT - WORKIO STATISTICS INTERFACE. 02369 M00S02333.smfex +++|* 02370 M00S02334.smfex +++|* WIOSTAT IS CALLED BY THE WORKFILE MANAGER AT NOTEWORTHY 02371 M00S02335.smfex +++|* EVENTS SO THAT STATISTICS CAN BE INCREMENTED. 02372 M00S02336.smfex +++|* 02373 M00S02337.smfex +++|* ENTRY ORDINAL - WHICH ACCUMULATOR TO INCREMENT. 02374 M00S02338.smfex +++|* 02375 M00S02339.smfex +++|* CALLS INSTRMNT2. 02376 M00S02340.smfex +++|# 02377 M00S02341.smfex +++| ITEM ORDINAL; 02378 M00S02342.smfex +++| INSTRMNT2(INSTST"WORKIO",ORDINAL); 02379 M00S02343.smfex +++| END 02380 M00S02344.smfex +++| 02381 M00S02345.smfex +++|CONTROL FI; 02382 M00S02346.smfex +++|PAGE # FNT MANAGEMENT # 02383 M00S02347.smfex +++| 02384 M00S02348.smfex +++| 02385 M00S02349.smfex +++|PROC RTRNWRKFIL; 02386 M00S02350.smfex +++| IOBEGIN(RTRNWRKFIL) 02387 M00S02351.smfex +++|# 02388 M00S02352.smfex +++|** RTRNWRKFIL - RETURN THE WORKFILE FNT. 02389 M00S02353.smfex +++|* 02390 M00S02354.smfex +++|* BEFORE SMFEX CAN TRANSITION A USER BACK TO THE SINGLE 02391 M00S02355.smfex +++|* USER EDITOR, IT MUST GET RID OF ITS LOCAL FNT FOR THE 02392 M00S02356.smfex +++|* USERS WORKFILE. RTRNWRKFIL DOES THIS AND IS 02393 M00S02357.smfex +++|* DESIGNED TO BE CALLED BY RUNJOBS IN USER STATE JUST AFTER 02394 M00S02358.smfex +++|* THE TASK HAS TERMINATED AT THE AFTEREDIT LABEL. 02395 M00S02359.smfex +++|* 02396 M00S02360.smfex +++|* ENTRY FET - SETUP. 02397 M00S02361.smfex +++|* 02398 M00S02362.smfex +++|* EXIT CURUSDONE - TRUE. 02399 M00S02363.smfex +++|* 02400 M00S02364.smfex +++|* CALLS RETERN, SMFRCL. 02401 M00S02365.smfex +++|# 02402 M00S02366.smfex +++| RETERN(FET,0); 02403 M00S02367.smfex +++| CURUSDONE=TRUE; # ASSURE NO RECOVERY # 02404 M00S02368.smfex +++| SMFRCL(FET); 02405 M00S02369.smfex +++| 02406 M00S02370.smfex +++| IOEND # OF RTRNWRKFIL # 02407 M00S02371.smfex +++| 02408 M00S02372.smfex +++| 02409 M00S02373.smfex +++|PAGE # LOGIN/LOGOUT CONTROL # 02410 M00S02374.smfex +++| 02411 M00S02375.smfex +++| 02412 M00S02376.smfex +++|PROC SENDLOGOUT; 02413 M00S02377.smfex +++| IOBEGIN(SENDLOGOUT) 02414 M00S02378.smfex +++|# 02415 M00S02379.smfex +++|** SENDLOGOUT - TRANSMIT LAST OUTPUT AND ROLLIN SINGLE. 02416 M00S02380.smfex +++|* 02417 M00S02381.smfex +++|* SENDLOGOUT PERFORMS THE LAST PROCESSING WHEN A TASK 02418 M00S02382.smfex +++|* COMPLETES ALL MULTI-USER PROCESSING. SENDLOGOUT SHOULD 02419 M00S02383.smfex +++|* BE CALLED ONLY BY RUNJOBS AFTER THE TASK HAS EXITED 02420 M00S02384.smfex +++|* AT LABEL AFTEREDIT AND AFTER THE WORKFILE LOCAL FNT HAS 02421 M00S02385.smfex +++|* BEEN RETURNED. SENDLOGOUT ASSURES THAT ANY OUTPUT LEFT 02422 M00S02386.smfex +++|* IN OUR BUFFERS IS SEND ON TO IAF, THEN TELLS IAF THE 02423 M00S02387.smfex +++|* USER IS LEAVING MULTI-USER MODE, THEN ISSUES AN EESET 02424 M00S02388.smfex +++|* FUNCTION TO CAUSE ROLLIN OF THE SINGLE USER JOB. 02425 M00S02389.smfex +++|* 02426 M00S02390.smfex +++|* THE TLX FUNCTION USED BY THE SINGLE USER JOB TO ROLLOUT 02427 M00S02391.smfex +++|* WILL BE RECALLED TO VERIFY THAT SMFEX HAS PROPERLY 02428 M00S02392.smfex +++|* DISPENSED WITH THE WORKFILE. TLX THEN CONFORMS TO IAF 02429 M00S02393.smfex +++|* THAT THE MULTI-USER SESISON IS OVER. 02430 M00S02394.smfex +++|* 02431 M00S02395.smfex +++|* ENTRY TASKNXTTTO[CURTASK] - INDICATES RESIDUAL OUTPUT. 02432 M00S02396.smfex +++|* 02433 M00S02397.smfex +++|* EXIT TASKNXTTTO[CURTASK] - ZERO. 02434 M00S02398.smfex +++|* 02435 M00S02399.smfex +++|* CALLS TTOTRAP, TRANSMIT, EESET. 02436 M00S02400.smfex +++|* 02437 M00S02401.smfex +++|* USES TTOADDR, TTOLEN, TTOTYPE. 02438 M00S02402.smfex +++|# 02439 M00S02403.smfex +++| IF TASKNXTTTO[CURTASK] NQ 0 THEN 02440 M00S02404.smfex +++| BEGIN 02441 M00S02405.smfex +++| TTOADDR=0; 02442 M00S02406.smfex +++| TTOLEN=0; 02443 M00S02407.smfex +++| TTOTYPE=TTOST"FORCE"; 02444 M00S02408.smfex +++| TTOTRAP; 02445 M00S02409.smfex +++| END 02446 M00S02410.smfex +++| TASKTYPTTO[CURTASK]=SMF2IAF"LOGOUT"; 02447 M00S02411.smfex +++| TRANSMIT; 02448 M00S02412.smfex +++| EESET((TTEQ*4096)+USEREJT[CURUSER]); 02449 M00S02413.smfex +++| 02450 M00S02414.smfex +++| IOEND # OF SENDLOGOUT # 02451 M00S02415.smfex +++|PAGE # TRANSMIT TO IAFEX # 02452 M00S02416.smfex +++| 02453 M00S02417.smfex +++| 02454 M00S02418.smfex +++|PROC TRANSMIT; 02455 M00S02419.smfex +++| IOBEGIN(TRANSMIT) 02456 M00S02420.smfex +++|# 02457 M00S02421.smfex +++|** TRANSMIT - TRANSMIT A FUNCTION CODE/MESSAGE TO IAFEX. 02458 M00S02422.smfex +++|* 02459 M00S02423.smfex +++|* TRANSMIT IS USED FOR THE ISSUANCE OF ALL CODES TO IAFEX 02460 M00S02424.smfex +++|* EXCEPT FOR THE SPECIAL CASE WHERE DOINPUT NEEDS TO 02461 M00S02425.smfex +++|* DISCONNECT A TERMINAL IN SERIALIZED OPERATION FOR 02462 M00S02426.smfex +++|* OVERFLOWED TABLES. TRANSMIT EXECUTES IN USER MODE, THUS 02463 M00S02427.smfex +++|* THE EXECUTIVE HAS NO WAY TO SEND MESSAGES TO IAFEX EXCEPT 02464 M00S02428.smfex +++|* FOR THE CASE ALREADY MENTIONED. 02465 M00S02429.smfex +++|* 02466 M00S02430.smfex +++|* EACH TASK HAS ITS OWN OUTPUT BUFFER WHICH IS USED TO 02467 M00S02431.smfex +++|* ACCUMULATE AND BATCH OUTPUT TEXT TOGETHER TO MINIMIZE CALLS 02468 M00S02432.smfex +++|* TO TRANSMIT. ONCE TRANSMIT IS CALLED, IT USES THE SCP/UCP 02469 M00S02433.smfex +++|* FACILITY TO SEND THE TASK'S BUFFER TO IAF. IF THE SCP/UCP 02470 M00S02434.smfex +++|* FUNCTIONS INDICATE THAT THE MESSAGE COULD NOT BE SENT TO 02471 M00S02435.smfex +++|* IAF ON THIS RECALL CYCLE, THEN THE TASK IS DELAYED 02472 M00S02436.smfex +++|* (ALLOWING OTHER TASKS TO EXECUTE IN PARALLEL) AND THE 02473 M00S02437.smfex +++|* SCP/UCP OPERATION WILL BE TRIED AGAIN. 02474 M00S02438.smfex +++|* 02475 M00S02439.smfex +++|* ENTRY TASKTYPTTO[CURTASK] - FUNCTION CODE FOR IAFEX. 02476 M00S02440.smfex +++|* TASKNXTTO[CURTASK] - AMOUNT OF TEXT TO GO WITH 02477 M00S02441.smfex +++|* FUNCTION CODE. 02478 M00S02442.smfex +++|* CURUSIAFNUM - IAFEX TERMINAL NUMBER. 02479 M00S02443.smfex +++|* TTOWORDS, TTOBLOCKS - STATISTICAL ACCUMULATORS. 02480 M00S02444.smfex +++|* CURUSLASTIM, TIMEOFDAY - ALSO FOR STATISTICS. 02481 M00S02445.smfex +++|* CURUSRCVRY, CURUSINTRPT - INDICATE PURGE BUFFER. 02482 M00S02446.smfex +++|* 02483 M00S02447.smfex +++|* EXIT TTOWORDS, TTOBLOCKS - INCREMENTED. 02484 M00S02448.smfex +++|* CURUSLASTIM, TIMEOFDAY - UP TO DATE. 02485 M00S02449.smfex +++|* 02486 M00S02450.smfex +++|* CALLS MELT, SYSTEM, INSTRMNT2, SMFDLY. 02487 M00S02451.smfex +++|* 02488 M00S02452.smfex +++|* USES IAFHEADER, P<SSCBUFFER>. 02489 M00S02453.smfex +++|# 02490 M00S02454.smfex +++| ITEM TMP1; 02491 M00S02455.smfex +++| 02492 M00S02456.smfex +++| TRCSTR("NTR TRSMT$"); 02493 M00S02457.smfex +++| CONTROL IFEQ TRACEFLAG,1; 02494 M00S02458.smfex +++| TMP1=TASKNXTTTO[CURTASK]; 02495 M00S02459.smfex +++| TRACEBOTH("NXTTTO$",TMP1); 02496 M00S02460.smfex +++| TMP1=TASKTYPTTO[CURTASK]; 02497 M00S02461.smfex +++| TRACEBOTH("TYPTTO$",TMP1); 02498 M00S02462.smfex +++| CONTROL FI; 02499 M00S02463.smfex +++| 02500 M00S02464.smfex +++| CONTROL IFGQ PARANOIA,2; 02501 M00S02465.smfex +++| IF TASKNXTTTO[CURTASK] GR SIZTTOBUF THEN MELT("TRANSMIT 1$"); 02502 M00S02466.smfex +++| IF CURUSIAFNUM GR MAXCONNECT THEN MELT("TRANSMIT 2$"); 02503 M00S02467.smfex +++| CONTROL FI; 02504 M00S02468.smfex +++| 02505 M00S02469.smfex +++| IF CURUSINTRPT OR CURUSRCVRY THEN 02506 M00S02470.smfex +++| BEGIN 02507 M00S02471.smfex +++| TASKNXTTTO[CURTASK]=0; 02508 M00S02472.smfex +++| IF SHUTDOWN EQ 2 OR TASKTYPTTO[CURTASK] EQ SMF2IAF"MSGOUT" OR 02509 M00S02473.smfex +++| TASKTYPTTO[CURTASK] EQ SMF2IAF"PROMPT" THEN 02510 M00S02474.smfex +++| BEGIN 02511 M00S02475.smfex +++| TASKTYPTTO[CURTASK]=0; 02512 M00S02476.smfex +++| IORET 02513 M00S02477.smfex +++| END 02514 M00S02478.smfex +++| END 02515 M00S02479.smfex +++| 02516 M00S02480.smfex +++| IAFFUNC=TASKTYPTTO[CURTASK]; 02517 M00S02481.smfex +++| IAFLEN=TASKNXTTTO[CURTASK]+1; 02518 M00S02482.smfex +++| IAFPTR=0; 02519 M00S02483.smfex +++| IAFTERM=CURUSIAFNUM; 02520 M00S02484.smfex +++| TTOBUFF[1]=IAFHEADER; 02521 M00S02485.smfex +++| CONTROL IFEQ METERING,1; 02522 M00S02486.smfex +++| TTOWORDS=TTOWORDS+IAFLEN; 02523 M00S02487.smfex +++| TTOBLOCKS=TTOBLOCKS+1; 02524 M00S02488.smfex +++| CONTROL FI; 02525 M00S02489.smfex +++| 02526 M00S02490.smfex +++|TRYTOSEND: # BACK HERE IF RETRY NEEDED # 02527 M00S02491.smfex +++| 02528 M00S02492.smfex +++| TTOBUFF[0]=0; 02529 M00S02493.smfex +++| P<SSCBUFFER>=LOC(TTOBUFFER); 02530 M00S02494.smfex +++| SSCTYPE=O"3"; 02531 M00S02495.smfex +++| SSCCOUNT=IAFLEN; 02532 M00S02496.smfex +++| SYSREQ("SSC",0,LOC(SSCBUFFER),IAFSSID); 02533 M00S02497.smfex +++| IF SSCSTATUS LAN O"7776" EQ 0 THEN # NO ERROR # 02534 M00S02498.smfex +++| BEGIN 02535 M00S02499.smfex +++| CONTROL IFEQ TRACEFLAG,1; 02536 M00S02500.smfex +++| ITEM TMP2,TMP3; 02537 M00S02501.smfex +++| IAFHEADER=TTOBUFF[1]; # SINCE MAY HAVE LOST CTL # 02538 M00S02502.smfex +++| TMP1=IAFFUNC; 02539 M00S02503.smfex +++| TMP2=IAFTERM; 02540 M00S02504.smfex +++| TMP3=IAFLEN-1; 02541 M00S02505.smfex +++| P<MOVFROM>=LOC(TTOBUFF[2]); 02542 M00S02506.smfex +++| TRACEBOTH("FUNCOUT$",TMP1); 02543 M00S02507.smfex +++| TRACEDEC(TMP2); 02544 M00S02508.smfex +++| IF IAFLEN GR 1 THEN TRACEWORDS(MOVFROM,TMP3); 02545 M00S02509.smfex +++| CONTROL FI; 02546 M00S02510.smfex +++| CONTROL IFEQ METERING,1; 02547 M00S02511.smfex +++| IF NOT CURUSOLDSND THEN 02548 M00S02512.smfex +++| BEGIN 02549 M00S02513.smfex +++| TMP1=TIMEOFDAY-CURUSLASTIM; 02550 M00S02514.smfex +++| INSTRMNT2(INSTST"RSPNS",TMP1); 02551 M00S02515.smfex +++| END 02552 M00S02516.smfex +++| CONTROL FI; 02553 M00S02517.smfex +++| IF TASKTYPTTO[CURTASK] EQ SMF2IAF"MSGOUT" THEN CURUSOLDSND=TRUE; 02554 M00S02518.smfex +++| ELSE CURUSOLDSND=FALSE; 02555 M00S02519.smfex +++| CURUSLASTIM=TIMEOFDAY; 02556 M00S02520.smfex +++| IORET 02557 M00S02521.smfex +++| END 02558 M00S02522.smfex +++| ELSE IF SSCSTATUS LAN O"7776" EQ 4 THEN # IAF BUSY NOW # 02559 M00S02523.smfex +++| BEGIN 02560 M00S02524.smfex +++| SMFDLY; 02561 M00S02525.smfex +++| GOTO TRYTOSEND; 02562 M00S02526.smfex +++| END 02563 M00S02527.smfex +++| ELSE MELT("CANT TALK TO IAFEX$"); 02564 M00S02528.smfex +++| 02565 M00S02529.smfex +++| IOEND # OF TRANSMIT # 02566 M00S02530.smfex +++|PAGE # VOLUNTEER TO SURRENDER TASK # 02567 M00S02531.smfex +++| 02568 M00S02532.smfex +++| 02569 M00S02533.smfex +++|PROC VOLUNTEER; 02570 M00S02534.smfex +++| IOBEGIN(VOLUNTEER) 02571 M00S02535.smfex +++|# 02572 M00S02536.smfex +++|** VOLUNTEER - SEE IF THIS TASK SHOULD SLOW DOWN. 02573 M00S02537.smfex +++|* 02574 M00S02538.smfex +++|* VOLUNTEER IS USED TO PREVENT A TASK FROM EXCESSIVE RESOURCE 02575 M00S02539.smfex +++|* USAGE. EDITING CODE SHOULD CALL VOLUNTEER PERIODICALLY 02576 M00S02540.smfex +++|* INSIDE ANY PROCESS WHICH IS POTENTIALLY LONG-RUNNING. NOTE 02577 M00S02541.smfex +++|* THAT ANY CODE IN THE WORKFILE MANAGER (THE WORKIO MODULE) 02578 M00S02542.smfex +++|* IS A "MUST COMPLETE" FUNCTION - THAT MEANS THAT VOLUNTEER 02579 M00S02543.smfex +++|* CAN BE CALLED BY ACTUAL EDITING CODE BUT CANNOT BE CALLED 02580 M00S02544.smfex +++|* FROM WORKIO ITSELF. 02581 M00S02545.smfex +++|* 02582 M00S02546.smfex +++|* VOLUNTEER FIRST CONSIDERS WHETHER THE TASK IS USING 02583 M00S02547.smfex +++|* EXCESSIVE CPU TIME ON AN INSTANTANEOUS BASIS. THE 02584 M00S02548.smfex +++|* OPERATING SYSTEM REAL TIME MILLISECOND CLOCK IS FRESHLY 02585 M00S02549.smfex +++|* ACCESSED, AND THE CURRENT TIME IS COMPARED TO THE TIME 02586 M00S02550.smfex +++|* TAKEN AT THE START OF THE RECALL CYCLE TO SEE IF MORE THAN 02587 M00S02551.smfex +++|* A FEW MILLISECONDS OF CPU HAVE BEEN USED. A CALCULATION 02588 M00S02552.smfex +++|* ATTEMPTS TO SELECT A THRESHOLD SUCH THAT SMFEX WILL NEVER 02589 M00S02553.smfex +++|* USE MORE THAN ABOUT HALF OF THE CPU. THIS MEANS THAT FOR 02590 M00S02554.smfex +++|* AN INSTALLATION WHICH INTENDS THAT SUBSTANTIALLY ALL OF THE 02591 M00S02555.smfex +++|* CPU SHOULD BE USED FOR TEXT EDITING, SMFEX MAY BE 02592 M00S02556.smfex +++|* UNSUITABLE AND THE SINGLE-USER EDITORS MAY BE BETTER. 02593 M00S02557.smfex +++|* 02594 M00S02558.smfex +++|* IF THE TASK IS CURRENTLY USING MORE THAN A FEW MILLISECONDS 02595 M00S02559.smfex +++|* OF CPU, IT DELAYS, AND THE REMAINDER OF THE VOLUNTEER 02596 M00S02560.smfex +++|* ALGORITHM WILL CONTINUE ON A LATER RECALL CYCLE. 02597 M00S02561.smfex +++|* 02598 M00S02562.smfex +++|* THE REMAINDER OF THE VOLUNTEER ALGORITHM CONSIDERS WHETHER 02599 M00S02563.smfex +++|* A TASK HAS RESIDED IN ITS SWAPPED-IN MEMORY IMAGE FOR TOO 02600 M00S02564.smfex +++|* MUCH REAL TIME. WE CALCULATE THE REAL TIME FROM THE TIME 02601 M00S02565.smfex +++|* AT WHICH THE TASK SWAPPED IN UNTIL THE PRESENT TIME. IF 02602 M00S02566.smfex +++|* THE TIME DELTA EXCEEDS THE "VOLTIME" THRESHOLD AND THERE IS 02603 M00S02567.smfex +++|* QUEUED TERMINAL OUTPUT, THE TASK WILL SWAP OUT SO THE 02604 M00S02568.smfex +++|* OUTPUT CAN BE SENT. IF THE TIME DELTA EXCEEDS THE 02605 M00S02569.smfex +++|* THRESHOLD AND THERE ARE MORE USERS AWAITING SWAPIN THAN THE 02606 M00S02570.smfex +++|* NUMBER OF TASKS FREE TO SWAP THEM IN, THEN THIS TASK WILL 02607 M00S02571.smfex +++|* SWAPOUT SO ANOTHER USER CAN SWAPIN. IF THE NUMBER OF 02608 M00S02572.smfex +++|* TERMINAL INPUT BUFFERS IS DOWN TO APPROXIMATELY ONE FOURTH 02609 M00S02573.smfex +++|* OF THE TOTAL, THEN THIS TASK WILL SWAP OUT REGARDLESS OF 02610 M00S02574.smfex +++|* WHETHER WE HAVE EXCEEDED THE THRESHOLD. 02611 M00S02575.smfex +++|* 02612 M00S02576.smfex +++|* THUS, THE "VOLTIME" THRESHOLD REPRESENTS THE AMOUNT OF TIME 02613 M00S02577.smfex +++|* A TASK IS ASSURED THAT IT CAN REMAIN SWAPPED IN. IF THE 02614 M00S02578.smfex +++|* TASK IS NOT PRODUCING OUTPUT AND THERE IS NO EXCESS QUEUE 02615 M00S02579.smfex +++|* FOR SWAPIN, THE TASK CAN EXCEED THE TRESHOLD. BUT IF THERE 02616 M00S02580.smfex +++|* IS A CRITICAL RESOURCE SHORTAGE (INPUT BUFFERS) THEN ALL 02617 M00S02581.smfex +++|* BETS ARE OFF AND WE SWAP THIS TASK AS SOON AS IT HAS 02618 M00S02582.smfex +++|* VOLUNTEERED, WITHOUT ALLOWING THE NORMAL GUARANTEED TIME. 02619 M00S02583.smfex +++|* 02620 M00S02584.smfex +++|* ENTRY TIMEOFDAY - TIME AT WHICH THIS RECALL CYCLE STARTED. 02621 M00S02585.smfex +++|* OLDTIMEDAY - TIME FOR START OF PREVIOUS RECALL CYCLE, 02622 M00S02586.smfex +++|* OR TIME OF VOLUNTEER EXECUTION WITHIN PREVIOUS 02623 M00S02587.smfex +++|* RECALL CYCLE IF VOLUNTEER WAS CALLED. 02624 M00S02588.smfex +++|* TASKTIME[CURTASK] - WHEN THIS TASK SWAPPED IN. 02625 M00S02589.smfex +++|* TASKNXTTTO[CURTASK] - WHETHER OUTPUT IS PENDING. 02626 M00S02590.smfex +++|* TASKSAVAIL - TOTAL USABLE TASKS. 02627 M00S02591.smfex +++|* TASKSBUSY - NUMBER OF TASKS USED NOW. 02628 M00S02592.smfex +++|* SWPQSIZE - NUMBER OF USERS AWAITING SWAPIN. 02629 M00S02593.smfex +++|* REMAINTTI - NUMBER OF UNUSED INPUT BUFFERS. 02630 M00S02594.smfex +++|* 02631 M00S02595.smfex +++|* EXIT TIMEOFDAY - UP TO DATE. 02632 M00S02596.smfex +++|* TASKNXTTTO[CURTASK] - CLEARED IF SWAPPED. 02633 M00S02597.smfex +++|* TASKTIME[CURTASK] - NEW VALUE IF SWAPPED. 02634 M00S02598.smfex +++|* CURUSCRUNCH - TRUE IF SWAP FOR OVERTIME BUT NO OUTPUT. 02635 M00S02599.smfex +++|* TASKREQUE[CURTASK] - TRUE IF SWAP NOT FOR OUTPUT. 02636 M00S02600.smfex +++|* 02637 M00S02601.smfex +++|* CALLS RTIME, MIN, MAX, SMFDLY, INSTRMNT1, INSTRMNT2, 02638 M00S02602.smfex +++|* TTSYNC, TTOTRAP. 02639 M00S02603.smfex +++|* 02640 M00S02604.smfex +++|* USES TTOADDR, TTOLEN, TTOTYPE. 02641 M00S02605.smfex +++|# 02642 M00S02606.smfex +++| ITEM DELTA, SURRENDER; 02643 M00S02607.smfex +++| 02644 M00S02608.smfex +++| RTIME(NEWTIMEDAY); 02645 M00S02609.smfex +++| NEWTIMEDAY=B<24,36>NEWTIMEDAY; 02646 M00S02610.smfex +++| DELTA=MAX(50,MIN(10,(TIMEOFDAY-OLDTIMEDAY)/2)); 02647 M00S02611.smfex +++| IF NEWTIMEDAY-TIMEOFDAY GR DELTA THEN 02648 M00S02612.smfex +++| BEGIN 02649 M00S02613.smfex +++| SMFDLY; 02650 M00S02614.smfex +++| CONTROL IFEQ METERING,1; 02651 M00S02615.smfex +++| INSTRMNT1(INSTST"DROPCPU"); 02652 M00S02616.smfex +++| CONTROL FI; 02653 M00S02617.smfex +++| END 02654 M00S02618.smfex +++| 02655 M00S02619.smfex +++| # NEXT CODE IS NON-REENTRANT, MUST RUN INSTANTANEOUSLY # 02656 M00S02620.smfex +++| 02657 M00S02621.smfex +++| DELTA=TIMEOFDAY-TASKTIME[CURTASK]; 02658 M00S02622.smfex +++| SURRENDER=0; 02659 M00S02623.smfex +++| 02660 M00S02624.smfex +++| # TRY TO MOVE IF SITTING ON TYPABLE OUTPUT FOR A LONG TIME # 02661 M00S02625.smfex +++| IF TASKNXTTTO[CURTASK] NQ 0 AND DELTA GQ VOLTIME*4 02662 M00S02626.smfex +++| THEN SURRENDER=1; 02663 M00S02627.smfex +++| 02664 M00S02628.smfex +++| # ALSO TRY TO MOVE IF SHORT ON TASKS FOR A SHORT TIME # 02665 M00S02629.smfex +++| IF TASKSAVAIL-TASKSBUSY LS SWPQSIZE AND DELTA GQ VOLTIME 02666 M00S02630.smfex +++| THEN SURRENDER=2; 02667 M00S02631.smfex +++| 02668 M00S02632.smfex +++| # MOVE IF CRITICAL RESOURCE SHORTAGE REGARDLESS OF TIME # 02669 M00S02633.smfex +++| IF REMAINTTI LQ (NUMTTIBUF+3)/4 02670 M00S02634.smfex +++| THEN SURRENDER=3; 02671 M00S02635.smfex +++| 02672 M00S02636.smfex +++| # END OF INSTANTANEOUS ALGORITHM # 02673 M00S02637.smfex +++| 02674 M00S02638.smfex +++| IF SURRENDER NQ 0 THEN # FACE WRITING ON WALL # 02675 M00S02639.smfex +++| BEGIN 02676 M00S02640.smfex +++| TRCBOTH("PREEMPT$",CURUSER); 02677 M00S02641.smfex +++| CONTROL IFEQ METERING,1; 02678 M00S02642.smfex +++| INSTRMNT2(INSTST"PREEMPT",SURRENDER); 02679 M00S02643.smfex +++| CONTROL FI;
Line S02644 Modification History | |
---|---|
M01 (Removed by) | smfex3 |
Seq # *Modification Id* Act ----------------------------+ 02680 M01S02644.smfex3 ---| IF TASKNXTTTO[CURTASK] EQ 0 THEN 02681 M01S02645.smfex3 ---| BEGIN 02682 M01S02646.smfex3 ---| IF DELTA GQ 0 THEN CURUSCRUNCH=TRUE; 02683 M01S02647.smfex3 ---| TASKREQUE[CURTASK]=TRUE; 02684 M01S02648.smfex3 ---| END 02685 M01S02649.smfex3 ---| # NEED FOR INSTANTANEOUS COMPUTATION ENDS HERE # 02686 M01S02650.smfex3 ---| IF SCREENMODE THEN VDSYNCH; 02687 M01S02651.smfex3 ---| ELSE TTSYNC;
Line S00001 Modification History | |
---|---|
M01 (Added by) | smfex3 |
Seq # *Modification Id* Act ----------------------------+ 02688 M01S00001.smfex3 +++| IF SCREENMODE THEN 02689 M01S00002.smfex3 +++| BEGIN # IF IN SCREEN MODE # 02690 M01S00003.smfex3 +++| VDSYNCH; # MUST PRECEED TASKNXTTTO CHECK # 02691 M01S00004.smfex3 +++| END # SINCE OUTPUT MAY BE FLUSHED # 02692 M01S00005.smfex3 +++| ELSE 02693 M01S00006.smfex3 +++| BEGIN # LINE MODE # 02694 M01S00007.smfex3 +++| TTSYNC; # MUST PRECEED TASKNXTTTO CHECK # 02695 M01S00008.smfex3 +++| END # SINCE OUTPUT MAY BE FLUSHED # 02696 M01S00009.smfex3 +++| IF TASKNXTTTO[CURTASK] EQ 0 THEN 02697 M01S00010.smfex3 +++| BEGIN # IF NO OUTPUT QUEUED FOR USER # 02698 M01S00011.smfex3 +++| CURUSCRUNCH=TRUE; # NO OUTPUT, JUST CRUNCHING # 02699 M01S00012.smfex3 +++| TASKREQUE[CURTASK]=TRUE; # SHOULD BE REQUEUED # 02700 M01S00013.smfex3 +++| END 02701 M00S02652.smfex +++| TTOADDR=0; 02702 M00S02653.smfex +++| TTOLEN=0; 02703 M00S02654.smfex +++| TTOTYPE=TTOST"FORCE"; 02704 M00S02655.smfex +++| TTOTRAP; 02705 M00S02656.smfex +++| END 02706 M00S02657.smfex +++| 02707 M00S02658.smfex +++| IOEND # OF VOLUNTEER # 02708 M00S02659.smfex +++|PAGE # TTY INPUT HOOK # 02709 M00S02660.smfex +++| 02710 M00S02661.smfex +++| 02711 M00S02662.smfex +++|PROC TTITRAP; 02712 M00S02663.smfex +++| IOBEGIN(TTITRAP) 02713 M00S02664.smfex +++|# 02714 M00S02665.smfex +++|** TTITRAP - PROVIDE EDITOR CODE WITH INPUT TEXT. 02715 M00S02666.smfex +++|* 02716 M00S02667.smfex +++|* TTITRAP IS CALLED BY THE EDITOR IN LIEU OF CIO READ 02717 M00S02668.smfex +++|* FUNCTIONS AGAINST AN INPUT FET. CALLING TTITRAP INSTEAD OF 02718 M00S02669.smfex +++|* CIO IS DONE BY CONDITIONAL COMPILATION OF CODE IN THE 02719 M00S02670.smfex +++|* TERMIO MODULE. THE EDITOR IS NOT ALLOWED TO OBTAIN INPUT 02720 M00S02671.smfex +++|* BY ANY MEANS EXCEPT TO CALL TERMIO AND LET IT DECIDE WHICH 02721 M00S02672.smfex +++|* MECHANISM IS APPROPRIATE FOR THE VERSION OF THE EDITOR. 02722 M00S02673.smfex +++|* 02723 M00S02674.smfex +++|* IN ADDITION TO PROVIDING INPUT, TTITRAP ALSO PROVIDES A 02724 M00S02675.smfex +++|* MEANS TO PURGE ANY UNUSED INPUT FROM THE BUFFERS CHAINS. 02725 M00S02676.smfex +++|* THIS IS INDICATED BY A NEGATIVE VALUE IN THE TTILEN 02726 M00S02677.smfex +++|* PARAMETER. 02727 M00S02678.smfex +++|* 02728 M00S02679.smfex +++|* WHEN INPUT IS DESIRED, TERMIO USES A POSITIVE VALUE IN THE 02729 M00S02680.smfex +++|* TTILEN PARAMETER TO INDICATE THE MAXIMUM NUMBER OF WORDS IT 02730 M00S02681.smfex +++|* CAN ACCEPT. THE WORKING BUFFER IS POINTED TO BY THE 02731 M00S02682.smfex +++|* TTIADDR PARAMETER. THE TTINEXT PARAMETER IS MAINTAINED BY 02732 M00S02683.smfex +++|* THIS ROUTINE TO KEEP TRACK OF WHAT PORTIONS OF THE CURRENT 02733 M00S02684.smfex +++|* BUFFER CHAIN HAVE ALREADY BEEN TRANSMITTED. 02734 M00S02685.smfex +++|* 02735 M00S02686.smfex +++|* INPUT FROM IAFEX IS MAINTAINED BY SMFEX, UNTIL TTITRAP IS 02736 M00S02687.smfex +++|* READY TO PASS ON TO THE EDITING CODE, IN A CHAIN OF ONE OR 02737 M00S02688.smfex +++|* MORE TERMINAL INPUT BUFFERS. ONE BUFFER IS CHAINED FOR 02738 M00S02689.smfex +++|* EACH MESSAGE FRAGMENT SENT BY IAFEX. TTITRAP MAINTAINS THE 02739 M00S02690.smfex +++|* TTILAST PARAMETER, WHICH IS THE TEXT OF THE LAST WORD 02740 M00S02691.smfex +++|* PASSED TO TERMIO, TO KNOW WHETHER THE PREVIOUS TTITRAP 02741 M00S02692.smfex +++|* CYCLE ENCOUNTERED A ZERO BYTE TERMINATOR. THIS ENABLES 02742 M00S02693.smfex +++|* TTITRAP TO KNOW WHETHER THE EDITING TASK IS IN THE MIDDLE 02743 M00S02694.smfex +++|* OF A SERIES OF FRAGMENTS OR IS AWAITING THE FIRST FRAGMENT 02744 M00S02695.smfex +++|* OF A MESSAGE. 02745 M00S02696.smfex +++|* 02746 M00S02697.smfex +++|* IF TTITRAP DETERMINES THAT THE TASK IS IN THE MIDDLE OF A 02747 M00S02698.smfex +++|* SERIES OF FRAGMENTS, BUT DOES NOT YET HAVE THE NEXT 02748 M00S02699.smfex +++|* FRAGMENT FROM IAFEX, TTITRAP WILL ATTEMPT TO KEEP THE TASK 02749 M00S02700.smfex +++|* DELAYING IN MEMORY, USING THE SPINWHEELS FUNCTION. THIS IS 02750 M00S02701.smfex +++|* DONE BECAUSE THERE IS AN EXCELLENT PROBABILITY THAT THE 02751 M00S02702.smfex +++|* NEXT INPUT FRAGMENT WILL ARRIVE FROM IAFEX WITHIN A FEW 02752 M00S02703.smfex +++|* MILLISECONDS. ON THE OTHER HAND, WHEN THE EDITING TASK 02753 M00S02704.smfex +++|* ASKS FOR THE FIRST FRAGMENT OF A MESSAGE AND NO TEXT HAS 02754 M00S02705.smfex +++|* ARRIVED YET FROM IAFEX, IT IS LIKELY THAT SEVERAL SECONDS 02755 M00S02706.smfex +++|* WILL PASS BEFORE THE INPUT ARRIVES, SO THAT TASK IS ALLOWED 02756 M00S02707.smfex +++|* TO SWAPOUT. 02757 M00S02708.smfex +++|* 02758 M00S02709.smfex +++|* ONCE THE TASK ADVANCES THRU TTITRAP BEYOND ANY WHEELSPIN OR 02759 M00S02710.smfex +++|* ANY SWAPOUT, TTITRAP ASSEMBLES AS MUCH INPUT TEXT AS IT 02760 M00S02711.smfex +++|* CAN, UNTIL EITHER THE TTILEN PARAMETER IS EXHAUSTED OR THE 02761 M00S02712.smfex +++|* END OF ONE BUFFER IS REACHED. TEXT FROM THE NEXT BUFFER OF 02762 M00S02713.smfex +++|* A CHAIN OF SEVERAL FRAGMENTS CANNOT BE PROCESSED UNTIL THE 02763 M00S02714.smfex +++|* NEXT CALL TO TTITRAP. THIS MEANS THAT THE SIZE OF EACH 02764 M00S02715.smfex +++|* FRAGMENT ALLOWED BY IAFEX AND SMFEX MUST BE ADEQUATE FOR 02765 M00S02716.smfex +++|* COMPLETE INPUTS WHEN THE EDITOR IS USED IN LINE MODE. THIS 02766 M00S02717.smfex +++|* RESTRICTION IS IN EFFECT BECAUSE THE LINE EDITOR REQUESTS 02767 M00S02718.smfex +++|* INPUT IN COMPLETE LINE IMAGES. THE SCREEN EDITOR, HOWEVER, 02768 M00S02719.smfex +++|* ASKS FOR INPUT ONE WORD AT A TIME, SO MULTIPLE FRAGMENTS 02769 M00S02720.smfex +++|* CAN BE PROCESSED WITH MULTIPLE TTITRAP CALLS. 02770 M00S02721.smfex +++|* 02771 M00S02722.smfex +++|* WHEN TTITRAP DECIDES TO SWAP THE TASK OUT, IT CALLS PAUSEIO 02772 M00S02723.smfex +++|* IN THE WORKFILE MANAGER. THIS IS DONE BECAUSE WORKIO HOLDS 02773 M00S02724.smfex +++|* SOME TRANSIENT RESOURCES, SUCH AS ITS CIRCULAR BUFFER, AND 02774 M00S02725.smfex +++|* NEEDS THE OPPORTUNITY TO COMPLETE ITS USAGE OF THESE 02775 M00S02726.smfex +++|* RESOURCES. 02776 M00S02727.smfex +++|* 02777 M00S02728.smfex +++|* 02778 M00S02729.smfex +++|* ENTRY TTILEN - NEGATIVE MEANS PURGE UNUSED INPUT. 02779 M00S02730.smfex +++|* POSITIVE IS TASKS CAPACITY FOR TEXT. 02780 M00S02731.smfex +++|* TTIADDR - WHERE THE TEXT SHOULD GO. 02781 M00S02732.smfex +++|* CURUSTTIBUF - FIRST BUFFER LINKAGE. 02782 M00S02733.smfex +++|* TTINEXT - WHERE TTITRAP PREVIOUS EXTRACTED TEXT. 02783 M00S02734.smfex +++|* TTILAST - LAST WORD OF TEXT FROM PREVIOUS TTITRAP. 02784 M00S02735.smfex +++|* RUNTIME - FOR STATISTICS. 02785 M00S02736.smfex +++|* TIMEOFDAY, TASKTIME[CURTASK] - FOR STATISTICS. 02786 M00S02737.smfex +++|* ACCTCIO, ACCTTRANS - STATISTICS/ACCOUNTING. 02787 M00S02738.smfex +++|* TTOWORDS, TTOBLOCKS - FOR STATISTICS. 02788 M00S02739.smfex +++|* TTIBUFADDR[ALL] - SETUP. 02789 M00S02740.smfex +++|* TTIBUFLNK[ALL] - LINKAGES. 02790 M00S02741.smfex +++|* TTIBUFLEN[ALL] - FRAGMENT SIZES. 02791 M00S02742.smfex +++|* TTIBITS - ALLOCATION BITMASK FOR BUFFERS. 02792 M00S02743.smfex +++|* 02793 M00S02744.smfex +++|* EXIT TTINEXT - INCREMENTED. 02794 M00S02745.smfex +++|* CURUSTTIBUF - ADVANCED/CLEARED VIA LINKAGE. 02795 M00S02746.smfex +++|* TIMEOFDAY - UP TO DATE. 02796 M00S02747.smfex +++|* TASKTIME[CURTASK] - TIME OF SWAPOUT IF ANY. 02797 M00S02748.smfex +++|* RUNTIME, ACCTCIO, ACCTTRANS - INCREMENTED. 02798 M00S02749.smfex +++|* SPINTIME, RUNTIME, CIOCOUNT - CLEARED IF SWAPPED. 02799 M00S02750.smfex +++|* CURUSOKOUT - TRUE. 02800 M00S02751.smfex +++|* TTILEN - DECREMENTED. 02801 M00S02752.smfex +++|* TTILAST - UPDATED. 02802 M00S02753.smfex +++|* REMAINTTI - INCREMENTED IF BUFFER EMPTIED. 02803 M00S02754.smfex +++|* TTOWORDS, TTOBLOCKS - CLEARED IF SWAPPED. 02804 M00S02755.smfex +++|* 02805 M00S02756.smfex +++|* CALLS PURGETTI, SPINWHEELS, CLEARQUE, PAUSEIO, INSTRMNT1, 02806 M00S02757.smfex +++|* INSTRMNT2, INSTRMNT3, TTOTRAP, MIN, MOVEWD, DEALLOC. 02807 M00S02758.smfex +++|* 02808 M00S02759.smfex +++|* USES TTOLEN, TTOTYPE. 02809 M00S02760.smfex +++|# 02810 M00S02761.smfex +++| ITEM TMP1, TMP2, TMP3;
Line S02762 Modification History | |
---|---|
M01 (Removed by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02811 M01S02762.smfex1 ---| ITEM QUESTION1=O"71000013000000000000"; 02812 M01S02763.smfex1 ---| ITEM QUESTION2=O"71550002000000000000"; 02813 M01S02764.smfex1 ---| ITEM XPTINCTL=O"00064704001500000000";
Line S00001 Modification History | |
---|---|
M01 (Added by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02814 M01S00001.smfex1 +++| ITEM QUESTION1 I=O"7100 0013 0000 0000 0000"; # PROMPT ONE # 02815 M01S00002.smfex1 +++| ITEM QUESTION2 I=O"7155 0013 0000 0000 0000"; # PROMPT TWO # 02816 M01S00003.smfex1 +++| ITEM XPTINCTL I=O"0006 4704 0015 0000 0000"; # XPARENT INPUT # 02817 M00S02765.smfex +++| 02818 M00S02766.smfex +++| TRCSTR("NTR ITRP$"); 02819 M00S02767.smfex +++| 02820 M00S02768.smfex +++| IF TTILEN LS 0 THEN # PURGE ANY BUFFERS # 02821 M00S02769.smfex +++| BEGIN 02822 M00S02770.smfex +++| IF CURUSTTIBUF NQ 0 THEN PURGETTI; 02823 M00S02771.smfex +++| TTINEXT=0; 02824 M00S02772.smfex +++| IORET 02825 M00S02773.smfex +++| END 02826 M00S02774.smfex +++| 02827 M00S02775.smfex +++| IF CURUSTTIBUF EQ 0 AND B<48,12>TTILAST NQ 0 THEN 02828 M00S02776.smfex +++| BEGIN # DELAY SINCE MORE INPUT DUE ASAP # 02829 M00S02777.smfex +++| SPINWHEELS; # DELAY TILL INPUT ARRIVES OR TIMEOUT # 02830 M00S02778.smfex +++| CLEARQUE; 02831 M00S02779.smfex +++| END 02832 M00S02780.smfex +++| 02833 M00S02781.smfex +++| IF NOT CURUSOKOUT THEN # FIRST TRANSACTION # 02834 M00S02782.smfex +++| BEGIN 02835 M00S02783.smfex +++| CURUSOKOUT=TRUE;
Line S02784 Modification History | |
---|---|
M01 (Removed by) | ns2186 |
Seq # *Modification Id* Act ----------------------------+ 02836 M01S02784.ns2186 ---| IF NOT SCREENMODE THEN
Line S00002 Modification History | |
---|---|
M01 (Added by) | ns2186 |
Seq # *Modification Id* Act ----------------------------+ 02837 M01S00002.ns2186 +++| IF SCREENMODE THEN 02838 M01S00003.ns2186 +++| BEGIN 02839 M01S00004.ns2186 +++| ROWPAINT[COMMANDROW]=TRUE; 02840 M01S00005.ns2186 +++| END 02841 M01S00006.ns2186 +++| ELSE 02842 M00S02785.smfex +++| BEGIN 02843 M00S02786.smfex +++| TTOADDR=LOC(QUESTION1); 02844 M00S02787.smfex +++| TTOLEN=1; 02845 M00S02788.smfex +++| TTOTYPE=TTOST"NORMAL"; 02846 M00S02789.smfex +++| TTOTRAP; 02847 M00S02790.smfex +++| END 02848 M00S02791.smfex +++| END 02849 M00S02792.smfex +++| 02850 M00S02793.smfex +++| IF CURUSTTIBUF EQ 0 THEN # NORMAL TRANSACTION SO SWAPOUT # 02851 M00S02794.smfex +++| BEGIN 02852 M00S02795.smfex +++| PAUSEIO; # LET WORKIO PP'S DROP # 02853 M00S02796.smfex +++| RUNTIME=TIMEOFDAY-TASKTIME[CURTASK]+RUNTIME; 02854 M00S02797.smfex +++| TASKTIME[CURTASK]=TIMEOFDAY; 02855 M00S02798.smfex +++| ACCTCIO=ACCTCIO+CIOCOUNT; 02856 M00S02799.smfex +++| ACCTTRANS=ACCTTRANS+1; 02857 M00S02800.smfex +++| CONTROL IFEQ METERING,1; 02858 M00S02801.smfex +++| INSTRMNT2(INSTST"TASKUTIL",RUNTIME); 02859 M00S02802.smfex +++| INSTRMNT3(INSTST"EDTCIO",RUNTIME-SPINTIME,CIOCOUNT); 02860 M00S02803.smfex +++| INSTRMNT1(INSTST"TRANS"); 02861 M00S02804.smfex +++| CONTROL FI; 02862 M00S02805.smfex +++| IF NOT CURUSINTRPT THEN 02863 M00S02806.smfex +++| BEGIN # NO FRESH BREAK, CAN PROMPT # 02864 M00S02807.smfex +++| TTOADDR=LOC(QUESTION2);
Line S02808 Modification History | |
---|---|
M01 (Removed by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 02865 M01S02808.v23l617 ---| IF SCREENMODE THEN TTOADDR=LOC(XPTINCTL); 02866 M00S02809.smfex +++| TTOLEN=1;
Line S00006 Modification History | |
---|---|
M01 (Added by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 02867 M01S00006.v23l617 +++| IF SCREENMODE THEN # IF SCREEN MODE # 02868 M01S00007.v23l617 +++| BEGIN 02869 M01S00008.v23l617 +++| IF TABTYPHEAD[0] THEN TTOLEN=0; # IF TYPEAHEAD USED # 02870 M01S00009.v23l617 +++| ELSE TTOADDR=LOC(XPTINCTL); # NO TYPEAHEAD # 02871 M01S00010.v23l617 +++| END 02872 M00S02810.smfex +++| TTOTYPE=TTOST"PROMPT"; 02873 M00S02811.smfex +++| TTOTRAP; 02874 M00S02812.smfex +++| END 02875 M00S02813.smfex +++| SPINTIME=0; 02876 M00S02814.smfex +++| RUNTIME=0; 02877 M00S02815.smfex +++| CIOCOUNT=0; 02878 M00S02816.smfex +++| CONTROL IFEQ METERING,1; 02879 M00S02817.smfex +++| INSTRMNT3(INSTST"XMIT",TTOWORDS,TTOBLOCKS); 02880 M00S02818.smfex +++| TTOBLOCKS=0; 02881 M00S02819.smfex +++| TTOWORDS=0; 02882 M00S02820.smfex +++| CONTROL FI; 02883 M00S02821.smfex +++| END 02884 M00S02822.smfex +++| # NOW WE KNOW WE HAVE SOMETHING # 02885 M00S02823.smfex +++| 02886 M00S02824.smfex +++| MEM[TTIADDR]=0; # ASSURE DEFAULT NULL LINE # 02887 M00S02825.smfex +++| WHYLE CURUSTTIBUF NQ 0 AND TTILEN GR 0 DO 02888 M00S02826.smfex +++| BEGIN 02889 M00S02827.smfex +++| TMP1=CURUSTTIBUF; 02890 M00S02828.smfex +++| P<MOVFROM>=TTIBUFADDR[TMP1]+TTINEXT; 02891 M00S02829.smfex +++| P<MOVTO>=TTIADDR; 02892 M00S02830.smfex +++| TMP2=TTIBUFLEN[TMP1]-TTINEXT; 02893 M00S02831.smfex +++| TMP3=MIN(TMP2,TTILEN); 02894 M00S02832.smfex +++| MOVEWD(TMP3,MOVFROM,MOVTO); 02895 M00S02833.smfex +++| TTINEXT=TTINEXT+TMP3; # INCREMENT SOURCE ADDR # 02896 M00S02834.smfex +++| TTILEN=TTILEN-TMP3; # DECREMENT CALLERS COUNT # 02897 M00S02835.smfex +++| TTILAST=MEM[LOC(MOVFROM)+TMP3-1]; # SHOWS WHETHER EOL SEEN # 02898 M00S02836.smfex +++| IF TTINEXT GQ TTIBUFLEN[TMP1] THEN 02899 M00S02837.smfex +++| BEGIN # RELEASE THIS BUFFER, POINT NEXT # 02900 M00S02838.smfex +++| TTINEXT=0; 02901 M00S02839.smfex +++| DEALLOC(TTIBITS,TMP1,NUMTTIBIT); 02902 M00S02840.smfex +++| REMAINTTI=REMAINTTI+1; 02903 M00S02841.smfex +++| CURUSTTIBUF=TTIBUFLNK[TMP1]; 02904 M00S02842.smfex +++| END 02905 M00S02843.smfex +++| END 02906 M00S02844.smfex +++| 02907 M00S02845.smfex +++| IOEND # OF TTITRAP # 02908 M00S02846.smfex +++|PAGE # TTY OUTPUT AND SWAPOUT HOOK # 02909 M00S02847.smfex +++| 02910 M00S02848.smfex +++| 02911 M00S02849.smfex +++|PROC TTOTRAP; 02912 M00S02850.smfex +++| IOBEGIN(TTOTRAP) 02913 M00S02851.smfex +++|# 02914 M00S02852.smfex +++|** TTOTRAP - QUEUE/ISSUE OUTPUT, SWAP AS NEEDED. 02915 M00S02853.smfex +++|* 02916 M00S02854.smfex +++|* TTOTRAP IS CALLED BY EDITOR CODE IN LIEU OF CIO WRITE 02917 M00S02855.smfex +++|* FUNCTIONS AGAINST AN OUTPUT FET. EDITING CODE IS REQUIRED 02918 M00S02856.smfex +++|* TO INTERFACE ALL OUTPUT THRU THE TERMIO MODULE, WHICH USES 02919 M00S02857.smfex +++|* CONDITIONAL COMPILATION TO SELECT THE RIGHT TECHNIQUE OF 02920 M00S02858.smfex +++|* OUTPUT FOR THE VERSION OF THE EDITOR. 02921 M00S02859.smfex +++|* 02922 M00S02860.smfex +++|* TTOTRAP IS ALSO USED BY THE VOLUNTEER AND TTITRAP ROUTINES 02923 M00S02861.smfex +++|* OF SMFEX. TTOTRAP PROVIDES SWAPOUT LOGIC FOR THOSE CALLERS 02924 M00S02862.smfex +++|* TOGETHER WITH ISSUANCE OF RESIDUAL OUTPUT. 02925 M00S02863.smfex +++|* 02926 M00S02864.smfex +++|* TTOTRAP IS CONTROLLED PRIMARILY BY THE TTOTYPE PARAMETER. 02927 M00S02865.smfex +++|* THE "NORMAL" VALUE INDICATES THAT THE CALLER'S INTENT IS TO 02928 M00S02866.smfex +++|* OFFER SOME OUTPUT TEXT. TTOTRAP QUEUES THIS TEXT INTO THE 02929 M00S02867.smfex +++|* TASK'S UNIQUE OUTPUT BUFFER AS POSSIBLE, CALLING THE 02930 M00S02868.smfex +++|* TRANSMIT ROUTINE TO SEND TO IAFEX WHENEVER THE BUFFER IS 02931 M00S02869.smfex +++|* FULL. FOR THIS TYPE OF COMMUNICATION TO IAFEX, TTOTRAP 02932 M00S02870.smfex +++|* THEN USES THE SPINWHEELS FUNCTION TO HOLD ONTO THE TASK FOR 02933 M00S02871.smfex +++|* A FEW EXTRA MILLISEONDS, SINCE THERE IS ABOUT AN EVEN 02934 M00S02872.smfex +++|* CHANCE THAT IAFEX WILL QUICKLY RESPOND AND ASK SMFEX TO 02935 M00S02873.smfex +++|* CONTINUE TASK EXECUTION. IF IAFEX FAILS TO RESPOND WITHIN 02936 M00S02874.smfex +++|* THE LIMITATIONS OF THE SPINWHEELS ROUTINE, THEN TTOTRAP 02937 M00S02875.smfex +++|* ASSUMES IT WILL BE SEVERAL SECONDS BEFORE IAFEX AND THE 02938 M00S02876.smfex +++|* NETWORK CAN ACCEPT ANY OTHER OUTPUT FOR THIS USER, AND 02939 M00S02877.smfex +++|* TTOTRAP SWAPS THE TASK OUT. 02940 M00S02878.smfex +++|* 02941 M00S02879.smfex +++|* THE SECOND BASIC VALUE FOR THE TTOTYPE PARAMETER IS 02942 M00S02880.smfex +++|* "PROMPT". THIS IS USED WHEN TTITRAP CALLS TTOTRAP. 02943 M00S02881.smfex +++|* TTOTRAP IS EXPECTED TO IMMEDIATELY TRANSMIT ANY RESIDUAL 02944 M00S02882.smfex +++|* QUEUE OF OUTPUT TEXT TO IAFEX, THEN SWAP THE TASK OUT. 02945 M00S02883.smfex +++|* TTOTRAP ASSUMES THAT THE CALLER (TTITRAP) HAS ALREADY MADE 02946 M00S02884.smfex +++|* A DETERMINATION AS TO LOW PROBABILITY OF RAPID REPLY FROM 02947 M00S02885.smfex +++|* IAFEX. 02948 M00S02886.smfex +++|* 02949 M00S02887.smfex +++|* THE THIRD AND LAST BASIC FUNCTION OF TTOTRAP IS THE "FORCE" 02950 M00S02888.smfex +++|* VALUE OF THE TTOTYPE PARAMETER. THIS IS USED BY VOLUNTEER 02951 M00S02889.smfex +++|* WHEN IT IS DETERMINED THAT SOME RESIDUAL TEXT HAS BEEN 02952 M00S02890.smfex +++|* QUEUED IN THE TASK'S OUTPUT BUFFER FOR AN EXCESSIVE REAL 02953 M00S02891.smfex +++|* TIME DELAY, AND OUGHT TO BE SENT TO THE USER'S TERMINAL. 02954 M00S02892.smfex +++|* WHEN TTOTRAP PROCESSES THE "FORCE" FUNCTION, IT TRANSMITS 02955 M00S02893.smfex +++|* THE BUFFER CONTENT TO IAF AND PROCEEDS TO SWAP THE TASK 02956 M00S02894.smfex +++|* WITHOUT ANY USAGE OF THE SPINWHEELS FUNCTION. 02957 M00S02895.smfex +++|* 02958 M00S02896.smfex +++|* WHEN TTOTRAP DECIDES TO SWAPOUT, IT MUST CALL PAUSEIO IN 02959 M00S02897.smfex +++|* THE WORKFILE MANAGER. THIS IS BECAUSE WORKIO DEALS WITH 02960 M00S02898.smfex +++|* SOME TRANSIENT RESOURCE, SUCH AS ITS CIRCULAR BUFFER, AND 02961 M00S02899.smfex +++|* NEEDS THE OPPORTUNITY TO COMPLETE ITS USAGE OF SUCH 02962 M00S02900.smfex +++|* RESOURCES. 02963 M00S02901.smfex +++|* 02964 M00S02902.smfex +++|* ENTRY TTOTYPE - FUNCTION CODE. 02965 M00S02903.smfex +++|* TTOADDR - ADDRESS OF TEXT. 02966 M00S02904.smfex +++|* TTOLEN - LENGTH OF TEXT. 02967 M00S02905.smfex +++|* TASKNXTTTO[CURTASK] - AMOUNT OF TEXT ALREADY QUEUED. 02968 M00S02906.smfex +++|* TTOBUFFER - ADDRESS OF THIS TASK'S BUFFER. 02969 M00S02907.smfex +++|* ALL SPINWHEELS PARAMETERS SETUP. 02970 M00S02908.smfex +++|* 02971 M00S02909.smfex +++|* EXIT TTOLEN - DECREMENTED. 02972 M00S02910.smfex +++|* TTOADDR - INCREMENETED. 02973 M00S02911.smfex +++|* TASKNXTTTO[CURTASK] - AMOUNT OF TEXT NOW IN BUFFER. 02974 M00S02912.smfex +++|* RUNTIME - INCREMENTED IF SWAPOUT. 02975 M00S02913.smfex +++|* ACCTOUT - INCREMENTED. 02976 M00S02914.smfex +++|* 02977 M00S02915.smfex +++|* CALLS MIN, MOVEWD, MELT, INSTRMNT1, TRANSMIT, 02978 M00S02916.smfex +++|* SPINWHEELS, CLEARQUE, PAUSEIO, ENDTRANS. 02979 M00S02917.smfex +++|* 02980 M00S02918.smfex +++|* USES TTOQUIT, TASKTYPTTO[CURTASK]. 02981 M00S02919.smfex +++|#
Line S02920 Modification History | |
---|---|
M01 (Removed by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02982 M01S02920.smfex1 ---| ITEM TMP1, TMP2;
Line S00004 Modification History | |
---|---|
M01 (Added by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02983 M01S00004.smfex1 +++| ITEM TMP1 I; # TEMPORARY STORAGE # 02984 M01S00005.smfex1 +++| ITEM TMP2 I; # TEMPORARY STORAGE # 02985 M01S00006.smfex1 +++| ITEM ENDBLOCK I=O"0014 0000 0000 0000 0000"; # BLOCK TERMINATOR # 02986 M00S02921.smfex +++| 02987 M00S02922.smfex +++| TRCSTR("NTR OTRP$"); 02988 M00S02923.smfex +++| 02989 M00S02924.smfex +++| IF NOT CURUSOKOUT THEN IORET # FIRST TRANS ONLY # 02990 M00S02925.smfex +++| 02991 M00S02926.smfex +++| P<MOVFROM>=TTOADDR; 02992 M00S02927.smfex +++| ACCTOUT=ACCTOUT+TTOLEN; # ACCOUNT FOR OUTPUT # 02993 M00S02928.smfex +++| 02994 M00S02929.smfex +++| TTOQUIT=FALSE; 02995 M00S02930.smfex +++| WHYLE NOT TTOQUIT DO # SEND ALL TEXT # 02996 M00S02931.smfex +++| BEGIN
Line S02932 Modification History | |
---|---|
M01 (Removed by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02997 M01S02932.smfex1 ---| TMP1=SIZTTOBUF-TASKNXTTTO[CURTASK]; # ROOM AVAIL #
Line S00007 Modification History | |
---|---|
M01 (Added by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 02998 M01S00007.smfex1 +++| TMP1=SIZTTOBUF-TASKNXTTTO[CURTASK]-1; # AVAILABLE ROOM # 02999 M00S02933.smfex +++| TMP2=MIN(TMP1,TTOLEN); # AMOUNT TO SEND # 03000 M00S02934.smfex +++| P<MOVFROM>=TTOADDR; 03001 M00S02935.smfex +++| P<MOVTO>=LOC(TTOBUFFER)+2+TASKNXTTTO[CURTASK]; 03002 M00S02936.smfex +++| MOVEWD(TMP2,MOVFROM,MOVTO); 03003 M00S02937.smfex +++| TTOLEN=TTOLEN-TMP2; 03004 M00S02938.smfex +++| TTOADDR=TTOADDR+TMP2; 03005 M00S02939.smfex +++| TASKNXTTTO[CURTASK]=TASKNXTTTO[CURTASK]+TMP2; 03006 M00S02940.smfex +++| TASKTYPTTO[CURTASK]=0; # DETERMINE TRANSMIT # 03007 M00S02941.smfex +++| CONTROL IFGQ PARANOIA,4; 03008 M00S02942.smfex +++| IF TASKNXTTTO[CURTASK] GR SIZTTOBUF THEN MELT("TTOTRAP 1$"); 03009 M00S02943.smfex +++| CONTROL FI; 03010 M00S02944.smfex +++| CONTROL IFEQ METERING,1;
Line S02945 Modification History | |
---|---|
M01 (Removed by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 03011 M01S02945.v23l617 ---| IF TASKNXTTTO[CURTASK] GQ SIZTTOBUF
Line S00011 Modification History | |
---|---|
M01 (Added by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 03012 M01S00011.v23l617 +++| IF TASKNXTTTO[CURTASK] GQ SIZTTOBUF-1 03013 M00S02946.smfex +++| THEN INSTRMNT1(INSTST"XSTTO"); 03014 M00S02947.smfex +++| CONTROL FI; 03015 M00S02948.smfex +++| IF (TTOTYPE EQ TTOST"FORCE" AND TASKNXTTTO[CURTASK] NQ 0)
Line S02949 Modification History | |
---|---|
M01 (Removed by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 03016 M01S02949.smfex1 ---| OR TASKNXTTTO[CURTASK] GQ SIZTTOBUF
Line S00008 Modification History | |
---|---|
M01 (Added by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 03017 M01S00008.smfex1 +++| OR TASKNXTTTO[CURTASK] GQ (SIZTTOBUF-1) 03018 M00S02950.smfex +++| THEN TASKTYPTTO[CURTASK]=SMF2IAF"MSGOUT"; 03019 M00S02951.smfex +++| IF TTOTYPE EQ TTOST"PROMPT" AND TTOLEN EQ 0 03020 M00S02952.smfex +++| THEN TASKTYPTTO[CURTASK]=SMF2IAF"PROMPT"; 03021 M00S02953.smfex +++| IF TASKTYPTTO[CURTASK] NQ 0 THEN # TRANSMIT # 03022 M00S02954.smfex +++| BEGIN
Line S02955 Modification History | |
---|---|
M01 (Removed by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 03023 M01S02955.smfex1 ---| TRANSMIT;
Line S00009 Modification History | |
---|---|
M01 (Added by) | smfex1 |
Seq # *Modification Id* Act ----------------------------+ 03024 M01S00009.smfex1 +++| P<MOVFROM>=LOC(ENDBLOCK); # ADD 0014 CONTROL BYTE # 03025 M01S00010.smfex1 +++| P<MOVTO>=LOC(TTOBUFFER)+2+TASKNXTTTO[CURTASK]; 03026 M01S00011.smfex1 +++| MOVEWD(1,MOVFROM,MOVTO); 03027 M01S00012.smfex1 +++| TASKNXTTTO[CURTASK]=TASKNXTTTO[CURTASK]+1; 03028 M01S00013.smfex1 +++| TRANSMIT; # TRANSMIT BUFFER TO IAFEX # 03029 M00S02956.smfex +++| TASKNXTTTO[CURTASK]=0; 03030 M00S02957.smfex +++| IF TTOTYPE NQ TTOST"FORCE" AND TASKTYPTTO[CURTASK] 03031 M00S02958.smfex +++| EQ SMF2IAF"MSGOUT" THEN # ATTEMPT CONTINUE # 03032 M00S02959.smfex +++| BEGIN 03033 M00S02960.smfex +++| SPINWHEELS; # LOOK FOR QUICK ACKNOWLEGE # 03034 M00S02961.smfex +++| IF TASKREQUE[CURTASK] THEN # CAN CONTINUE # 03035 M00S02962.smfex +++| BEGIN 03036 M00S02963.smfex +++| TRCSTR("KWIK TOCIN$"); 03037 M00S02964.smfex +++| CLEARQUE; # ACKNOWLEDGE # 03038 M00S02965.smfex +++| TASKTYPTTO[CURTASK]=0; # AVOID SWAPOUT # 03039 M00S02966.smfex +++| CONTROL IFEQ METERING,1; 03040 M00S02967.smfex +++| INSTRMNT1(INSTST"KWIKTOC"); 03041 M00S02968.smfex +++| CONTROL FI; 03042 M00S02969.smfex +++| END 03043 M00S02970.smfex +++| END 03044 M00S02971.smfex +++| END 03045 M00S02972.smfex +++| IF TASKTYPTTO[CURTASK] NQ 0 OR TTOTYPE NQ TTOST"NORMAL" THEN 03046 M00S02973.smfex +++| BEGIN 03047 M00S02974.smfex +++| PAUSEIO; 03048 M00S02975.smfex +++| RUNTIME=RUNTIME+TIMEOFDAY-TASKTIME[CURTASK]; 03049 M00S02976.smfex +++| ENDTRANS; 03050 M00S02977.smfex +++| END 03051 M00S02978.smfex +++| IF TTOLEN LQ 0 THEN TTOQUIT=TRUE; 03052 M00S02979.smfex +++| END 03053 M00S02980.smfex +++| 03054 M00S02981.smfex +++| IOEND # OF TTOTRAP # 03055 M00S02982.smfex +++|PAGE # SWAPPING ROUTINE # 03056 M00S02983.smfex +++| 03057 M00S02984.smfex +++| 03058 M00S02985.smfex +++|PROC SWAP; 03059 M00S02986.smfex +++| IOBEGIN(SWAP) 03060 M00S02987.smfex +++|# 03061 M00S02988.smfex +++|** SWAP - SWAP THIS TASK IN OR OUT. 03062 M00S02989.smfex +++|* 03063 M00S02990.smfex +++|* THE SWAP ROUTINE READS OR WRITE THE SWAP PAGE FOR THE 03064 M00S02991.smfex +++|* CURRENTLY EXECUTING TASK. FOR A SWAPIN, WE READ THE PAGE 03065 M00S02992.smfex +++|* ALREADY ASSIGNED TO THE USER. FOR A SWAPOUT, WE ASSIGN A 03066 M00S02993.smfex +++|* PAGE. THE FIRST PRIORITY IN PAGE SELECTION IS EXTENDED 03067 M00S02994.smfex +++|* MEMORY IF AVAILABLE, HEALTHY, AND NOT YET FILLED UP. THE 03068 M00S02995.smfex +++|* LOWER PRIORITY IS TO SELECT A DISK PAGE. DISK PAGES ARE 03069 M00S02996.smfex +++|* PHASED OR INTERLEAVED ROUND-ROBIN ACROSS THE SEVERAL SWAP 03070 M00S02997.smfex +++|* DATABASES. 03071 M00S02998.smfex +++|* 03072 M00S02999.smfex +++|* THE SWAP ROUTINE CAN RECOVER FROM A PARITY ERROR IN AN 03073 M00S03000.smfex +++|* EXTENDED MEMORY TRANSFER, BUT DOES NOT ATTEMPT TO HANDLE 03074 M00S03001.smfex +++|* DEVICE ERRORS ON DISKS. WHEN AN ERROR IS DETECTED FROM 03075 M00S03002.smfex +++|* EXTENDED MEMORY, A USER BEING SWAPPED IN WILL HAVE HIS TASK 03076 M00S03003.smfex +++|* ABORTED, WHILE A USER BEING SWAPPED IS UNHARMED. ERROR 03077 M00S03004.smfex +++|* RECOVERY INCLUDES THE FAULT-OUT OF THE BAD PAGE, 03078 M00S03005.smfex +++|* DETERMINATION WHETHER THE ENTIRE EXTENDED MEMORY FIELD 03079 M00S03006.smfex +++|* LENGTH SHOULD BE ABANDONED DUE TO WIDESPREAD ERRORS, AND 03080 M00S03007.smfex +++|* FOR SWAPOUT WE ALSO ALLOCATE ANOTHER PAGE AND TRY THE SWAP 03081 M00S03008.smfex +++|* AGAIN. 03082 M00S03009.smfex +++|* 03083 M00S03010.smfex +++|* WHILE SWAP IS EXECUTING, THE DISPATCHING AREA IN THE COMMON 03084 M00S03011.smfex +++|* BLOCK IS CONSIDERED TO BE IRRELEVANT. THEREFORE, THE 03085 M00S03012.smfex +++|* ROUTINE WHICH MANAGES THE BRUTE-FORCE SHUFFLING OF THE 03086 M00S03013.smfex +++|* COMMON BLOCK (SUBROUTINE GETCOMON) NEEDS TO KNOW WHEN 03087 M00S03014.smfex +++|* SWAPPING IS IN EFFECT. THIS SWAP ROUTINE IS THUS REQUIRED 03088 M00S03015.smfex +++|* TO TURN THE TASKSWPNOW FLAG ON AT ENTRY TIME AND TO TURN IT 03089 M00S03016.smfex +++|* OFF AT EXIT TIME. NO REENTRANT EVENTS CAN OCCUR BETWEEN 03090 M00S03017.smfex +++|* THE ACTUAL ENTRY OR EXIT AND THE SETTING OF THE TASKSWPNOW 03091 M00S03018.smfex +++|* FLAG. 03092 M00S03019.smfex +++|* 03093 M00S03020.smfex +++|* ENTRY TASKSWPIN[CURTASK] - DIRECTION OF SWAP. 03094 M00S03021.smfex +++|* TIMEOFDAY - CURRENT. 03095 M00S03022.smfex +++|* SWAPBITS - ALLOCATION BITMASK. 03096 M00S03023.smfex +++|* P<SWAPMASK> - ENABLES/DISABLES EXTENDED MEMORY PAGES. 03097 M00S03024.smfex +++|* CURUSSWPPAG - USERS PAGE FOR SWAPIN. 03098 M00S03025.smfex +++|* TASKADDR[CURTASK] - MEMORY ADDRESS FOR SWAP PAGE. 03099 M00S03026.smfex +++|* SWAPLEN - LENGTH OF A PAGE IN WORDS. 03100 M00S03027.smfex +++|* SWAPPRUS - LENGTH OF A PAGE IN SECTORS. 03101 M00S03028.smfex +++|* ECSERRORS - PREVIOUS EXTENDED MEMORY ERRORS. 03102 M00S03029.smfex +++|* SWPFETDONE[ALL] - INTERLOCKS ON DISK FILES. 03103 M00S03030.smfex +++|* SWPFET[ALL] - THE DISK FET'S. 03104 M00S03031.smfex +++|* MAXSWPPAG - HIGHEST DISK PAGE CREATED TO DATE. 03105 M00S03032.smfex +++|* 03106 M00S03033.smfex +++|* EXIT TIMEOFDAY - CURRENT. 03107 M00S03034.smfex +++|* SWAPBITS - UPDATED. 03108 M00S03035.smfex +++|* SWAPGOOD - EXTENDED MEMORY ERRORS FAULTED HERE. 03109 M00S03036.smfex +++|* ECSERRORS - INCREMENTED IF ERRORS. 03110 M00S03037.smfex +++|* MAXSWPPAG - INCREMENTED IF HIGHWATERMARK RAISED. 03111 M00S03038.smfex +++|* TASKTIME[CURTASK] - TIMEOFDAY. 03112 M00S03039.smfex +++|* STATUSMSG - MAY CONTAIN ERROR MSG. 03113 M00S03040.smfex +++|* CURUSSWPPAG - PAGE SELECTED FOR SWAPOUT. 03114 M00S03041.smfex +++|* CURUSVICTIM - TRUE IF ECS PARITY ERROR ON SWAPIN. 03115 M00S03042.smfex +++|* 03116 M00S03043.smfex +++|* CALLS ALLOC, MELT, INSTRMNT1, READECS, WRITECS, 03117 M00S03044.smfex +++|* FORCEALLOC, SMFDLY, MAKEFET, READ, WRITER, REWRITR, 03118 M00S03045.smfex +++|* SMFRCL, INSTRMNT2. 03119 M00S03046.smfex +++|* 03120 M00S03047.smfex +++|* USES TASKSWPNOW[CURTASK], TASKSWPFIL[CURTASK], 03121 M00S03048.smfex +++|* TASKSWPPRU[CURTASK], P<MOVFROM>, P<MOVTO>, SWPFET. 03122 M00S03049.smfex +++|# 03123 M00S03050.smfex +++| ITEM TMP1,TMP2; 03124 M00S03051.smfex +++| 03125 M00S03052.smfex +++| # SWAP IS REQUIRED TO SET TASKSWPNOW BEFORE ANY DELAYS OCCUR # 03126 M00S03053.smfex +++| 03127 M00S03054.smfex +++| TRCSTR("NTR SWP$"); 03128 M00S03055.smfex +++| TASKSWPNOW[CURTASK]=TRUE; 03129 M00S03056.smfex +++| TASKTIME[CURTASK]=TIMEOFDAY; 03130 M00S03057.smfex +++| 03131 M00S03058.smfex +++|SWAPSTART: 03132 M00S03059.smfex +++| 03133 M00S03060.smfex +++| IF NOT TASKSWPIN[CURTASK] THEN # ALLOC PAGE # 03134 M00S03061.smfex +++| BEGIN 03135 M00S03062.smfex +++| ALLOC(SWAPBITS,SWAPMASK,TMP1,NUMSWPBIT); 03136 M00S03063.smfex +++| IF TMP1 EQ 0 THEN MELT("SWPO 2$"); 03137 M00S03064.smfex +++| CURUSSWPPAG=TMP1; # SAVE INVIOLATE # 03138 M00S03065.smfex +++| END 03139 M00S03066.smfex +++| 03140 M00S03067.smfex +++| TRCBOTH("PAGE$",CURUSSWPPAG); 03141 M00S03068.smfex +++| 03142 M00S03069.smfex +++| IF CURUSSWPPAG LQ NUMSWPECS THEN # ECS SWAP # 03143 M00S03070.smfex +++| BEGIN 03144 M00S03071.smfex +++| TRCSTR("SWPECS$"); 03145 M00S03072.smfex +++| CONTROL IFEQ ECSCODE,0; 03146 M00S03073.smfex +++| CONTROL IFGQ PARANOIA,1; 03147 M00S03074.smfex +++| MELT("SWP 3$"); 03148 M00S03075.smfex +++| CONTROL FI; 03149 M00S03076.smfex +++| CONTROL FI; 03150 M00S03077.smfex +++| CONTROL IFEQ ECSCODE,1; 03151 M00S03078.smfex +++| CONTROL IFEQ METERING,1; 03152 M00S03079.smfex +++| INSTRMNT1(INSTST"SWPE"); 03153 M00S03080.smfex +++| CONTROL FI; 03154 M00S03081.smfex +++| P<MOVFROM>=TASKADDR[CURTASK]; 03155 M00S03082.smfex +++| P<MOVTO>=(CURUSSWPPAG-1)*SWAPLEN; 03156 M00S03083.smfex +++| IF TASKSWPIN[CURTASK] THEN READECS(SWAPLEN,MOVTO,MOVFROM,TMP1); 03157 M00S03084.smfex +++| ELSE WRITECS(SWAPLEN,MOVFROM,MOVTO,TMP1); 03158 M00S03085.smfex +++| CONTROL IFGQ ECSERRMAX,0; 03159 M00S03086.smfex +++| IF TMP1 NQ 0 THEN # ECS ERROR, RETRY OR KILL # 03160 M00S03087.smfex +++| BEGIN 03161 M00S03088.smfex +++| ECSERRORS=ECSERRORS+TMP1; 03162 M00S03089.smfex +++| IF ECSERRORS GQ ECSERRMAX THEN 03163 M00S03090.smfex +++| BEGIN 03164 M00S03091.smfex +++| ECSDOWN=TRUE; 03165 M00S03092.smfex +++| C<22,6>STATUSMSG="EM OFF"; 03166 M00S03093.smfex +++| END 03167 M00S03094.smfex +++| # FAULT OUT THIS PAGE TO PROTECT FUTURE USERS # 03168 M00S03095.smfex +++| FORCEALLOC(SWAPGOOD,CURUSSWPPAG,NUMSWPBIT); 03169 M00S03096.smfex +++| IF TMP1 GQ 3 AND TASKSWPIN[CURTASK] THEN CURUSVICTIM=TRUE; 03170 M00S03097.smfex +++| IF NOT TASKSWPIN[CURTASK] THEN GOTO SWAPSTART; 03171 M00S03098.smfex +++| END 03172 M00S03099.smfex +++| CONTROL FI; 03173 M00S03100.smfex +++| CONTROL IFLS ECSERRMAX,0; 03174 M00S03101.smfex +++| IF TMP1 NQ 0 THEN MELT("ECS HARDWARE$"); 03175 M00S03102.smfex +++| CONTROL FI; 03176 M00S03103.smfex +++| CONTROL FI; 03177 M00S03104.smfex +++| END 03178 M00S03105.smfex +++| ELSE # DISK SWAPPING # 03179 M00S03106.smfex +++| BEGIN 03180 M00S03107.smfex +++| TASKSWPFIL[CURTASK]=1+MOD(CURUSSWPPAG-1-NUMSWPECS,NUMSWPFET); 03181 M00S03108.smfex +++| TASKSWPPRU[CURTASK]=1+(CURUSSWPPAG-1-NUMSWPECS)/NUMSWPFET*SWAPPRUS; 03182 M00S03109.smfex +++| TRCBOTH("SWPDSK$",TASKSWPFIL[CURTASK]); 03183 M00S03110.smfex +++| TRCDEC(TASKSWPPRU[CURTASK]); 03184 M00S03111.smfex +++| CONTROL IFEQ METERING,1; 03185 M00S03112.smfex +++| INSTRMNT1(INSTST"SWPD"); 03186 M00S03113.smfex +++| CONTROL FI; 03187 M00S03114.smfex +++| WHYLE NOT SWPFETDONE[TASKSWPFIL[CURTASK]] DO SMFDLY; 03188 M00S03115.smfex +++| TMP1=TASKSWPFIL[CURTASK]; # VALID TILL SMFRCL # 03189 M00S03116.smfex +++| C<0,6>TMP2="SMFSWP"; 03190 M00S03117.smfex +++| C<6,1>TMP2=O"33"+TMP1-1; 03191 M00S03118.smfex +++| P<ANYFET>=LOC(SWPFET[TMP1]); 03192 M00S03119.smfex +++| P<MOVFROM>=TASKADDR[CURTASK]; 03193 M00S03120.smfex +++| MAKEFET(ANYFET,TMP2,MOVFROM,SWAPBUFLEN); 03194 M00S03121.smfex +++| SWPFETR[TMP1]=TRUE; 03195 M00S03122.smfex +++| SWPFETRR[TMP1]=TASKSWPPRU[CURTASK]; 03196 M00S03123.smfex +++| IF TASKSWPIN[CURTASK] THEN READ(ANYFET,0); 03197 M00S03124.smfex +++| ELSE 03198 M00S03125.smfex +++| BEGIN 03199 M00S03126.smfex +++| SWPFETIN[TMP1]=SWPFETIN[TMP1]+SWAPLEN; 03200 M00S03127.smfex +++| IF CURUSSWPPAG GR MAXSWPPAG THEN 03201 M00S03128.smfex +++| BEGIN 03202 M00S03129.smfex +++| MAXSWPPAG=CURUSSWPPAG; 03203 M00S03130.smfex +++| SWPFETRR[TMP1]=LOC(DUMB); 03204 M00S03131.smfex +++| WRITER(ANYFET,0); 03205 M00S03132.smfex +++| END 03206 M00S03133.smfex +++| ELSE REWRITR(ANYFET,0); 03207 M00S03134.smfex +++| END 03208 M00S03135.smfex +++| SMFRCL(ANYFET); 03209 M00S03136.smfex +++| END 03210 M00S03137.smfex +++| 03211 M00S03138.smfex +++| # ONCE TASKSWPNOW IS CLEARED, SWAP CANNOT DELAY ANYMORE # 03212 M00S03139.smfex +++| 03213 M00S03140.smfex +++| TASKSWPNOW[CURTASK]=FALSE; 03214 M00S03141.smfex +++| CONTROL IFEQ METERING,1; 03215 M00S03142.smfex +++| TMP1=TIMEOFDAY-TASKTIME[CURTASK]; 03216 M00S03143.smfex +++| INSTRMNT2(INSTST"SWPTIM",TMP1); 03217 M00S03144.smfex +++| CONTROL FI; 03218 M00S03145.smfex +++| TASKTIME[CURTASK]=TIMEOFDAY; 03219 M00S03146.smfex +++| 03220 M00S03147.smfex +++| IOEND # OF SWAP # 03221 M00S03148.smfex +++|PAGE # USER/SYSTEM-STATE CHANGING CODE # 03222 M00S03149.smfex +++| 03223 M00S03150.smfex +++| 03224 M00S03151.smfex +++|PROC PAUSE; 03225 M00S03152.smfex +++| IOBEGIN(PAUSE) 03226 M00S03153.smfex +++|# 03227 M00S03154.smfex +++|** PAUSE - INTERFACE TO EXECUTIVE TO START/END TIME SLICE. 03228 M00S03155.smfex +++|* 03229 M00S03156.smfex +++|* PAUSE IS THE ROUTINE USED BY USER-MODE ROUTINES TO END A 03230 M00S03157.smfex +++|* SLICE ON THE CPU, AND BY THE EXECUTIVE TO RESUME EXECUTION 03231 M00S03158.smfex +++|* WHERE THE PREVIOUS TIME SLICE ENDED. THUS, PAUSE EXITS TO 03232 M00S03159.smfex +++|* LABEL AFTERSLICE AND PROVIDES THE LABEL RESUME, WHICH 03233 M00S03160.smfex +++|* RUNJOBS WILL JUMP TO JUST IN FRONT OF THE DEFINITION OF THE 03234 M00S03161.smfex +++|* AFTERSLICE LABEL. 03235 M00S03162.smfex +++|# 03236 M00S03163.smfex +++| XDEF LABEL RESUME; 03237 M00S03164.smfex +++| XREF LABEL AFTERSLICE; 03238 M00S03165.smfex +++| GOTO AFTERSLICE; 03239 M00S03166.smfex +++| 03240 M00S03167.smfex +++|RESUME: # HERE FOR NEW TIMESLICE # 03241 M00S03168.smfex +++| 03242 M00S03169.smfex +++| IOEND # OF PAUSE # 03243 M00S03170.smfex +++| 03244 M00S03171.smfex +++| 03245 M00S03172.smfex +++|PROC TRANSACT; 03246 M00S03173.smfex +++| BEGIN 03247 M00S03174.smfex +++|# 03248 M00S03175.smfex +++|** TRANSACT - TRANSITION FROM EXECUTIVE TO USER FOR SWAPIN. 03249 M00S03176.smfex +++|* 03250 M00S03177.smfex +++|* TRANSACT IS USED BY THE RUNJOBS EXECUTIVE, JUST BEFORE 03251 M00S03178.smfex +++|* RUNJOBS DEFINES THE AFTERTRANS LABEL, TO SWITCH FROM 03252 M00S03179.smfex +++|* EXECUTIVE MODE TO USER MODE AND PERFORM SWAPINS. TRANSACT 03253 M00S03180.smfex +++|* THEN REPAIRS THE COMMON BLOCK DISPATCHING AREA, REPAIRS THE 03254 M00S03181.smfex +++|* RETURN JUMP WORDS IN ALL ACTIVE SUBROUTINE ENTRY POINTS, 03255 M00S03182.smfex +++|* CHECKS FOR CERTAIN INTERRUPT CONDITIONS, AND EXITS VIA A 03256 M00S03183.smfex +++|* JUMP TO THE MORETRANS LABEL IN THE ENDTRANS ROUTINE. THIS 03257 M00S03184.smfex +++|* TYPE OF EXIT IS USED BECAUSE THE TASK IS PRESUMED TO HAVE 03258 M00S03185.smfex +++|* HAVE COMPLETED ITS PREVIOUS SWAPPED-IN TRANSACTION BY 03259 M00S03186.smfex +++|* CALLING ENDTRANS, AND ENDTRANS IS RESUMED TO HAVE JUMPED TO 03260 M00S03187.smfex +++|* THE EXECUTIVE JUST IN FRONT OF THE DEFINITION OF LABEL 03261 M00S03188.smfex +++|* MORETRANS. 03262 M00S03189.smfex +++|* 03263 M00S03190.smfex +++|* ENTRY MAY BE CALLED ONLY BY RUNJOBS TRANSACTION SECTION. 03264 M00S03191.smfex +++|* CURUSINTRPT - AN INTERRUPT MUST BE COMMUNICATED TO 03265 M00S03192.smfex +++|* USER-MODE CODE AFTER SWAPIN IS COMPLETE. 03266 M00S03193.smfex +++|* SHUTDOWN - CAUSES SYNTHESIS OF INTERRUPTS. 03267 M00S03194.smfex +++|* CURUSRCVRY - FSE JOB DETACHING. 03268 M00S03195.smfex +++|* RSTKPTR - SIZE OF REENTRANCY STACK. 03269 M00S03196.smfex +++|* 03270 M00S03197.smfex +++|* EXIT VIA LABEL MORETRANS. 03271 M00S03198.smfex +++|* RENTSTK - REENTRANCY STACK. 03272 M00S03199.smfex +++|* COMMON BLOCK AND SUBROUTINE ENTRIES REBUILT. 03273 M00S03200.smfex +++|* USRBRK - 1 IF ANY INTERRUPT PASSED TO USER. 03274 M00S03201.smfex +++|* CURUSVICTIM - TRUE IF SWAPIN RUINED USER DATA. 03275 M00S03202.smfex +++|* FORCESINGLE, FORCENULL - ADDITIONAL INTERRUPTS. 03276 M00S03203.smfex +++|* WORKFILE CHECKPOINTED AND EXIT VIA LABEL AFTEREDIT 03277 M00S03204.smfex +++|* IF CURUSRCVRY IS ON. 03278 M00S03205.smfex +++|* 03279 M00S03206.smfex +++|* CALLS SWAP, DEALLOC, GETCOMMON, CHECKIO, MOVEWD, SPREAD. 03280 M00S03207.smfex +++|* 03281 M00S03208.smfex +++|* USES SWAPRSTK, TASKSWPIN[CURTASK]. 03282 M00S03209.smfex +++|# 03283 M00S03210.smfex +++| XREF LABEL AFTEREDIT; 03284 M00S03211.smfex +++| XREF LABEL AFTERTRANS; 03285 M00S03212.smfex +++| XREF LABEL MORETRANS; 03286 M00S03213.smfex +++| 03287 M00S03214.smfex +++| TRCSTR("NTR TRNSCT$"); 03288 M00S03215.smfex +++| TASKSWPIN[CURTASK]=TRUE; 03289 M00S03216.smfex +++| 03290 M00S03217.smfex +++| SWAP; 03291 M00S03218.smfex +++| # ONCE SWAP RETURNS, WE CANNOT REENTER UNTIL AFTER GETCOMMON # 03292 M00S03219.smfex +++| IF SHUTDOWN NQ 2 THEN DEALLOC(SWAPBITS,CURUSSWPPAG,NUMSWPBIT); 03293 M00S03220.smfex +++| CURUSSWPPAG=0; 03294 M00S03221.smfex +++| LASTTASK=0; # RECONSTRUCT COMMON AFTER SWAP # 03295 M00S03222.smfex +++| GETCOMMON; 03296 M00S03223.smfex +++| # END OF TIME-CRITICAL SEQUENCE # 03297 M00S03224.smfex +++| 03298 M00S03225.smfex +++| IF CURUSINTRPT THEN USRBRK=1; 03299 M00S03226.smfex +++| IF CURUSVICTIM THEN 03300 M00S03227.smfex +++| BEGIN 03301 M00S03228.smfex +++| SMFVICTIM=TRUE; 03302 M00S03229.smfex +++| ERRSTRING="ECS HARDWARE$"; 03303 M00S03230.smfex +++| END 03304 M00S03231.smfex +++| IF SHUTDOWN NQ 0 THEN FORCESINGLE=TRUE; 03305 M00S03232.smfex +++| IF SHUTDOWN GR 1 THEN 03306 M00S03233.smfex +++| BEGIN 03307 M00S03234.smfex +++| CURUSINTRPT=TRUE; 03308 M00S03235.smfex +++| USRBRK=1; 03309 M00S03236.smfex +++| FORCENULL=TRUE; 03310 M00S03237.smfex +++| END 03311 M00S03238.smfex +++| IF CURUSRCVRY THEN # CHKPT AND END EDIT # 03312 M00S03239.smfex +++| BEGIN 03313 M00S03240.smfex +++| FORCENULL=TRUE;
Line S03241 Modification History | |
---|---|
M01 (Removed by) | ns2136 |
Seq # *Modification Id* Act ----------------------------+ 03314 M01S03241.ns2136 ---| #VFYWRKFIL#
Line S00005 Modification History | |
---|---|
M01 (Added by) | ns2136 |
M02 (Removed by) | ns2186 |
Seq # *Modification Id* Act ----------------------------+ 03315 M02S00005.ns2186 ---| IF NOT CURUSDROP THEN USRBRK=0;
Line S00007 Modification History | |
---|---|
M01 (Added by) | ns2186 |
Seq # *Modification Id* Act ----------------------------+ 03316 M01S00007.ns2186 +++| IF SHUTDOWN EQ 2 THEN 03317 M01S00008.ns2186 +++| BEGIN 03318 M01S00009.ns2186 +++| USRBRK=0; 03319 M01S00010.ns2186 +++| CURUSINTRPT=FALSE; 03320 M01S00011.ns2186 +++| END
Line S03242 Modification History | |
---|---|
M01 (Removed by) | smfex2 |
Seq # *Modification Id* Act ----------------------------+ 03321 M01S03242.smfex2 ---| CHECKIO;
Line S00001 Modification History | |
---|---|
M01 (Added by) | smfex2 |
Seq # *Modification Id* Act ----------------------------+ 03322 M01S00001.smfex2 +++| IF NOT CURUSDONE THEN 03323 M01S00002.smfex2 +++| BEGIN # IF WORKFILE NOT YET CHECKPOINTED # 03324 M01S00003.smfex2 +++| CHECKIO; # CHECKPOINT WORKFILE # 03325 M01S00004.smfex2 +++| END 03326 M00S03243.smfex +++| GOTO AFTEREDIT; 03327 M00S03244.smfex +++| END 03328 M00S03245.smfex +++| MOVEWD(RSTKPTR-1,SWAPRSTK,RENTSTK); 03329 M00S03246.smfex +++| SPREAD(RSTKPTR,RENTSTK); 03330 M00S03247.smfex +++| 03331 M00S03248.smfex +++| # OUR RETURN GOES NOT TO CALLER BUT TO USER # 03332 M00S03249.smfex +++| GOTO MORETRANS; # LET GATHERED CODE RETURN TO USER # 03333 M00S03250.smfex +++| 03334 M00S03251.smfex +++| END # OF TRANSACT # 03335 M00S03252.smfex +++| 03336 M00S03253.smfex +++| 03337 M00S03254.smfex +++|PROC ENDTRANS; 03338 M00S03255.smfex +++| IOBEGIN(ENDTRANS) 03339 M00S03256.smfex +++|# 03340 M00S03257.smfex +++|** ENDTRANS - END A TRANSACTION WITH SWAPOUT. 03341 M00S03258.smfex +++|* 03342 M00S03259.smfex +++|* ENDTRANS IS CALLED ONLY BY TTOTRAP, FOR THE PURPOSE OF 03343 M00S03260.smfex +++|* SWAPPING THE CURRENT TASK OUT. ENDTRANS CONSOLIDATES DATA 03344 M00S03261.smfex +++|* FROM SUBROUTINE ENTRY POINTS AND FROM THE DISPATCHABLE 03345 M00S03262.smfex +++|* COMMON BLOCK, THEN SWAPS THE MEMORY IMAGE OUT. ENDTRANS 03346 M00S03263.smfex +++|* THEN EXITS BY JUMPING TO LABEL AFTERTRANS IN THE RUNJOBS 03347 M00S03264.smfex +++|* EXECUTIVE. ENDTRANS PROVIDES THE DEFINITION OF LABEL 03348 M00S03265.smfex +++|* MORETRANS SO THAT WHEN RUNJOBS CALLS TRANSACT TO SWAP THIS 03349 M00S03266.smfex +++|* USER BACK IN, TRANSACT CAN JUMP TO THE ADDRESS AT WHICH THE 03350 M00S03267.smfex +++|* TASK HAD FORFEITED CONTROL. 03351 M00S03268.smfex +++|* 03352 M00S03269.smfex +++|* ENDTRANS IS ALLOWED TO BE CALLED ONLY BY TTOTRAP BECAUSE 03353 M00S03270.smfex +++|* THE TASK CANNOT SWAPOUT WITH ANY RESIDUAL OUTPUT LEFT IN 03354 M00S03271.smfex +++|* THE BUFFER OWNED BY THE TASK. 03355 M00S03272.smfex +++|* 03356 M00S03273.smfex +++|* ENTRY ONLY FROM TTOTRAP. 03357 M00S03274.smfex +++|* RSTKPTR - DEPTH OF REENTRANCY STACK. 03358 M00S03275.smfex +++|* RENTSTK - THE REENTRANCY STACK. 03359 M00S03276.smfex +++|* 03360 M00S03277.smfex +++|* EXIT VIA LABEL AFTERTRANS. 03361 M00S03278.smfex +++|* 03362 M00S03279.smfex +++|* CALLS GATHER, MOVEWD, PUTCOMMON, SWAP, MELT. 03363 M00S03280.smfex +++|* 03364 M00S03281.smfex +++|* USES SWAPRSTK, TASKSWPIN[CURTASK]. 03365 M00S03282.smfex +++|# 03366 M00S03283.smfex +++| XREF LABEL AFTERTRANS; 03367 M00S03284.smfex +++| XDEF LABEL MORETRANS; 03368 M00S03285.smfex +++| 03369 M00S03286.smfex +++| TRCSTR("NTR NDTRNS$"); 03370 M00S03287.smfex +++| GATHER(RSTKPTR,RENTSTK); 03371 M00S03288.smfex +++| MOVEWD(RSTKPTR-1,RENTSTK,SWAPRSTK); 03372 M00S03289.smfex +++| 03373 M00S03290.smfex +++| # MUST EXECUTE INSTANTLY FROM PUTCOMMON INTO START OF SWAP # 03374 M00S03291.smfex +++| PUTCOMMON; # MAKE COMMON SWAPPABLE # 03375 M00S03292.smfex +++| TASKSWPIN[CURTASK]=FALSE; 03376 M00S03293.smfex +++| SWAP; 03377 M00S03294.smfex +++| # END OF TIME-CRITICAL SEQUENCE # 03378 M00S03295.smfex +++| 03379 M00S03296.smfex +++| CONTROL IFGQ PARANOIA,3; 03380 M00S03297.smfex +++| IF TASKNXTTTO[CURTASK] NQ 0 THEN MELT("NTRNS 2$"); 03381 M00S03298.smfex +++| CONTROL FI; 03382 M00S03299.smfex +++| GOTO AFTERTRANS; 03383 M00S03300.smfex +++| 03384 M00S03301.smfex +++| # RETURN GOES BACK TO USER # 03385 M00S03302.smfex +++|MORETRANS: 03386 M00S03303.smfex +++| 03387 M00S03304.smfex +++| IOEND # OF ENDTRANS # 03388 M00S03305.smfex +++|PAGE # INITIALIZATION AND TERMINATION # 03389 M00S03306.smfex +++| 03390 M00S03307.smfex +++| 03391 M00S03308.smfex +++|PROC INITMON; 03392 M00S03309.smfex +++| BEGIN 03393 M00S03310.smfex +++|# 03394 M00S03311.smfex +++|** INITMON - INITIALIZE SMFEX. 03395 M00S03312.smfex +++|* 03396 M00S03313.smfex +++|* INITMON IS THE PRESET ROUTINE FOR SMFEX. THE FOLLOWING 03397 M00S03314.smfex +++|* FUNCTIONS ARE PERFORMED -- 03398 M00S03315.smfex +++|* 03399 M00S03316.smfex +++|* THE PARAMETERS CRACKED BY THE OPERATING SYSTEM AT RA+2 ARE 03400 M00S03317.smfex +++|* CHECKED FOR RECOVERY MODE OR FOR A NUMBER OF TASKS TO BE 03401 M00S03318.smfex +++|* FORMATTED. THE SHUTDOWN FLAG IS SET FOR RECOVERY MODE, AND 03402 M00S03319.smfex +++|* THE TASKSAVAIL FLAG IS SET AND FORCED WITHIN REASONABLE 03403 M00S03320.smfex +++|* BOUNDS FOR A NUMERIC PARAMETER. 03404 M00S03321.smfex +++|* 03405 M00S03322.smfex +++|* MISCELLANEOUS POINTERS AND LENGTH FIELDS ARE COMPUTED. THE 03406 M00S03323.smfex +++|* FIELD LENGTH IS THEN INCREASED TO MAKE ROOM FOR THE MODEL 03407 M00S03324.smfex +++|* FORMAT OF THE COMMON BLOCK. THE FIELD LENGTH IS INCREASED 03408 M00S03325.smfex +++|* TO ALLOCATE THE TERMINAL INPUT BUFFERS. THE BITMAPS USED 03409 M00S03326.smfex +++|* FOR ALLOCATION OF SMFEX RESOURCES ARE INITIALIZED. THEN 03410 M00S03327.smfex +++|* EACH TASK IS BUILT OUT OF INCREASED FIELD LENGTH. 03411 M00S03328.smfex +++|* 03412 M00S03329.smfex +++|* TASK CONSTRUCTION IS DELEGATED TO THE BUILDTASK ROUTINE. 03413 M00S03330.smfex +++|* THE COMMON BLOCK IS USED TO CONSTRUCT THIS TASK'S POINTERS 03414 M00S03331.smfex +++|* FOR A NUMBER OF PER-TASK ARRAYS. THEN COMMON BLOCK IS THEN 03415 M00S03332.smfex +++|* COPIED INTO THE EXTENDED FIELD LENGTH SO EACH TASK CAN 03416 M00S03333.smfex +++|* CONTAIN ITS OWN BASE ADDRESSES FOR ARRAYS. 03417 M00S03334.smfex +++|* 03418 M00S03335.smfex +++|* THE EXTENDED MEMORY FIELD LENGTH IS DETERMINED BY SEEING 03419 M00S03336.smfex +++|* HOW MUCH MEMORY IS DESIRED FOR THE COMPILE-TIME 03420 M00S03337.smfex +++|* CONFIGURATION AND HOW MUCH IS ACTUALLY AVAILABLE FROM THE 03421 M00S03338.smfex +++|* RUNNING SYSTEM. THE ALLOCATION BITMAPS ARE MODIFIED IF 03422 M00S03339.smfex +++|* NEEDED TO ALLOW FOR THE NUMBER OF ECS SWAP PAGES ACTUALLY 03423 M00S03340.smfex +++|* OBTAINED. EXTENDED MEMORY SWAPPING IS COMPLETELY DISABLED 03424 M00S03341.smfex +++|* IF THE RUNNING SYSTEM CANNOT PROVIDE ANY SECONDARY FIELD 03425 M00S03342.smfex +++|* LENGTH AT ALL. 03426 M00S03343.smfex +++|* 03427 M00S03344.smfex +++|* FOR SUBSYSTEM RECOVERY, A SHORTENED INITMON ALGORITHM TAKES 03428 M00S03345.smfex +++|* EFFECT. WE ASSUME THE PREVIOUS SMFEX JOB STEP EXECUTED AN 03429 M00S03346.smfex +++|* IDENTICAL VERSION OF THIS PROGRAM (I.E., SMFEX HAS NOT BEEN 03430 M00S03347.smfex +++|* SYSEDITED WHILE RUNNING) AND THAT THE TERMINATION OF THE 03431 M00S03348.smfex +++|* PREVIOUS SMFEX JOB STEP EXITED INTO A "DMB" FORMAT DUMP 03432 M00S03349.smfex +++|* FILE. THE DUMP FILE IS SCANNED TO OBTAIN THE USER TABLE. 03433 M00S03350.smfex +++|* WE CHECK ALL USER TABLE ENTRIES FOR RECOVERABLE TASKS AND 03434 M00S03351.smfex +++|* QUEUE THOSE USERS FOR SWAPIN. RECOVERABLE TASKS ARE THOSE 03435 M00S03352.smfex +++|* WHICH EXIST ON A SWAP PAGE BUT NOT IN MEMORY. FOR 03436 M00S03353.smfex +++|* SUBSYSTEM RECOVERY, THE INITMON ALGORITHM TERMINATES AT 03437 M00S03354.smfex +++|* THIS POINT IN THE FLOW. 03438 M00S03355.smfex +++|* 03439 M00S03356.smfex +++|* FOR TRUE SUBSYSTEM INITIATION, THE REMAINDER OF THE INITMON 03440 M00S03357.smfex +++|* ALGORITHM IS AS FOLLOWS -- 03441 M00S03358.smfex +++|* 03442 M00S03359.smfex +++|* ALL DISK SWAP FILES ARE EVICTED. 03443 M00S03360.smfex +++|* 03444 M00S03361.smfex +++|* THE NEGATIVE FIELD LENGTH IS BOOSTED TO ITS ANTICIPATED 03445 M00S03362.smfex +++|* HIGH WATER MARK BY ALLOCATING THEN RETURNING A LARGE GROUP 03446 M00S03363.smfex +++|* OF TOKEN FILES. THIS IS DONE BECAUSE THE TLX PP ROUTINE 03447 M00S03364.smfex +++|* WHICH TRANSITIONS USERS FROM SINGLE USER MODE TO MULTI USER 03448 M00S03365.smfex +++|* MODE IS UNABLE TO INCREASE OUR NEGATIVE FIELD LENGTH TO 03449 M00S03366.smfex +++|* MAKE ROOM FOR LOCAL FNT'S FOR THE TRANSFERRED WORKFILES. 03450 M00S03367.smfex +++|* TLX TREATS OUR PRE-ALLOCATED NEGATIVE FIELD LENGTH AS A 03451 M00S03368.smfex +++|* LIMITATION AS TO WHETHER A PARTICULAR SINGLE USER EDITOR 03452 M00S03369.smfex +++|* JOB WILL BE ACCEPTED INTO MULTI USER MODE. 03453 M00S03370.smfex +++|* 03454 M00S03371.smfex +++|* FINALLY, COMMUNICATIONS ARE ESTABLISHED WITH IAFEX VIA THE 03455 M00S03372.smfex +++|* SCP/UCP FACILITY. SMFEX IS THE UCP AND IAFEX IS THE SCP. 03456 M00S03373.smfex +++|# 03457 M00S03374.smfex +++| ITEM TMP1,TMP2,TMP3,TMP4; 03458 M00S03375.smfex +++| 03459 M00S03376.smfex +++| P<CORE>=0;
Line S00001 Modification History | |
---|---|
M01 (Added by) | ns2167 |
Seq # *Modification Id* Act ----------------------------+ 03460 M01S00001.ns2167 +++| IF B<00,01>MEM[CSMR] EQ 0 THEN # IF SYSTEM CHARACTER SET = 63 # 03461 M01S00002.ns2167 +++| BEGIN 03462 M01S00003.ns2167 +++| XLTINTXP[O"00"]=O"4045"; # COLON = PERCENT # 03463 M01S00004.ns2167 +++| XLTINTXP[O"63"]=O"4072"; # PERCENT = COLON # 03464 M01S00005.ns2167 +++| XLTDSPXP[O"00"]=O"4045"; # COLON = PERCENT # 03465 M01S00006.ns2167 +++| XLTDSPXP[O"63"]=O"4072"; # PERCENT = COLON # 03466 M01S00007.ns2167 +++| XLTDSPINT[O"00"]=O"0063"; # COLON = PERCENT # 03467 M01S00008.ns2167 +++| XLTDSPINT[O"63"]=O"0000"; # PERCENT = COLON # 03468 M01S00009.ns2167 +++| XLTXPINT[O"45"]=O"0000"; # PERCENT = COLON # 03469 M01S00010.ns2167 +++| XLTXPINT[O"72"]=O"0063"; # COLON = PERCENT # 03470 M01S00011.ns2167 +++| XLTINTDSP[O"00"]=O"0055"; # COLON = BLANK # 03471 M01S00012.ns2167 +++| END 03472 M00S03377.smfex +++| 03473 M00S03378.smfex +++| SFMCSTF; 03474 M00S03379.smfex +++| 03475 M00S03380.smfex +++| IF C<0,7>MEM[2] EQ "RECOVER" THEN SHUTDOWN=2; 03476 M00S03381.smfex +++| ELSE 03477 M00S03382.smfex +++| BEGIN 03478 M00S03383.smfex +++| TMP1=0; 03479 M00S03384.smfex +++| TMP2=0; 03480 M00S03385.smfex +++| TMP3=C<0,1>MEM[2]-O"33"; 03481 M00S03386.smfex +++| WHYLE TMP2 LQ 6 AND TMP3 GQ 0 AND TMP3 LQ 9 DO 03482 M00S03387.smfex +++| BEGIN 03483 M00S03388.smfex +++| TMP1=TMP1*10+TMP3; 03484 M00S03389.smfex +++| TMP2=TMP2+1; 03485 M00S03390.smfex +++| TMP3=C<TMP2,1>MEM[2]-O"33"; 03486 M00S03391.smfex +++| END
Line S03392 Modification History | |
---|---|
M01 (Removed by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 03487 M01S03392.v23l617 ---| TASKSAVAIL=MAX(MIN(TMP1,NUMTASKS),2);
Line S00012 Modification History | |
---|---|
M01 (Added by) | v23l617 |
Seq # *Modification Id* Act ----------------------------+ 03488 M01S00012.v23l617 +++| IF TMP1 GQ 2 AND TMP1 LQ NUMTASKS THEN TASKSAVAIL=TMP1; 03489 M00S03393.smfex +++| END 03490 M00S03394.smfex +++| 03491 M00S03395.smfex +++| P<SWAPMASK>=LOC(SWAPGOOD); 03492 M00S03396.smfex +++| SWAPLEN=LOC(SWAPEND)-LOC(DATASTART); 03493 M00S03397.smfex +++| DISPATLEN=LOC(DISPATEND)-LOC(DATASTART); 03494 M00S03398.smfex +++| FIELDLEN=B<42,18>MEM[O"65"]; 03495 M00S03399.smfex +++| MODELPTR=FIELDLEN; 03496 M00S03400.smfex +++| MODELLEN=LOC(SWAPEND)-LOC(DATAEND); 03497 M00S03401.smfex +++| FIELDLEN=MODELPTR+MODELLEN; 03498 M00S03402.smfex +++| FLDLEN(FIELDLEN+4); 03499 M00S03403.smfex +++| P<MOVTO>=MODELPTR; 03500 M00S03404.smfex +++| MOVEWD(MODELLEN,DATAEND,MOVTO); 03501 M00S03405.smfex +++| FOR TMP3=1 STEP 1 UNTIL NUMTTIBUF DO 03502 M00S03406.smfex +++| BEGIN 03503 M00S03407.smfex +++| TTIBUFADDR[TMP3]=FIELDLEN; 03504 M00S03408.smfex +++| FIELDLEN=FIELDLEN+SIZTTIBUF; 03505 M00S03409.smfex +++| FLDLEN(FIELDLEN+4); 03506 M00S03410.smfex +++| END 03507 M00S03411.smfex +++| FOR TMP1=1 STEP 1 UNTIL MAXREENT DO RSTK[TMP1]=LOC(RSTK[TMP1]); 03508 M00S03412.smfex +++| INITBITMAP(SWAPBITS,NUMSWPBIT,NUMSWPECS+NUMSWPDSK); 03509 M00S03413.smfex +++| INITBITMAP(TTIBITS,NUMTTIBIT,NUMTTIBUF); 03510 M00S03414.smfex +++| INITBITMAP(SWAPGOOD,NUMSWPBIT,NUMSWPECS+NUMSWPDSK); 03511 M00S03415.smfex +++| INITBITMAP(SWAPBAD,NUMSWPBIT,NUMSWPECS+NUMSWPDSK); 03512 M00S03416.smfex +++| INITBITMAP(TTIGOOD,NUMTTIBIT,NUMTTIBUF); 03513 M00S03417.smfex +++| KILLECSBITS(SWAPBAD); 03514 M00S03418.smfex +++| MEM[USRBASE]=LOC(USERTAB); # FOR EASY C DISPLAY # 03515 M00S03419.smfex +++| MEM[SLTBASE]=LOC(TASKTAB); 03516 M00S03420.smfex +++| CONTROL IFEQ METERING,1; 03517 M00S03421.smfex +++| MEM[STTBASE]=LOC(INSTDATA); 03518 M00S03422.smfex +++| CONTROL FI; 03519 M00S03423.smfex +++| FOR CURTASK=1 STEP 1 UNTIL TASKSAVAIL DO BUILDTASK(CURTASK); 03520 M00S03424.smfex +++| SWAPLEN=SWAPLEN+TASKDSPADR[1]-TASKADDR[1]; 03521 M00S03425.smfex +++| SWAPPRUS=((SWAPLEN+O"100")/O"100"); 03522 M00S03426.smfex +++| SWAPBUFLEN=1+SWAPPRUS*O"100"; 03523 M00S03427.smfex +++| FLDLEN(FIELDLEN+4); 03524 M00S03428.smfex +++| 03525 M00S03429.smfex +++| CONTROL IFEQ ECSCODE,1; 03526 M00S03430.smfex +++| # REQUEST ECS FIELD LENGTH/ SEE IF IT IS THERE # 03527 M00S03431.smfex +++| GETFLCE(ECSFIELD); # GET VALIDATION LIMIT # 03528 M00S03432.smfex +++| TESTECS(TMP1); # GET EXISTENCE/ENABLED # 03529 M00S03433.smfex +++| IF B<0,12>ECSFIELD NQ 0 AND TMP1 NQ 0 THEN 03530 M00S03434.smfex +++| BEGIN 03531 M00S03435.smfex +++| # ALLOCATE DESIRED OR AVAILABLE ECS FIELD LENGTH # 03532 M00S03436.smfex +++| ECSFIELD=MIN(NUMSWPECS*SWAPLEN,512*B<0,12>ECSFIELD); 03533 M00S03437.smfex +++| FLDLENE(ECSFIELD); 03534 M00S03438.smfex +++| SETRFLE((ECSFIELD+511)/512); 03535 M00S03439.smfex +++| PROTEON; # SINCE ABORT RECOVERY ADVANCES # 03536 M00S03440.smfex +++| # TURN OFF ANY SWAP PAGES BEYOND AVAILABLE FIELD LENGTH # 03537 M00S03441.smfex +++| TMP1=ECSFIELD/SWAPLEN; 03538 M00S03442.smfex +++| FOR TMP2=TMP1+1 STEP 1 UNTIL NUMSWPECS 03539 M00S03443.smfex +++| DO FORCEALLOC(SWAPGOOD,TMP2,NUMSWPBIT); 03540 M00S03444.smfex +++| END 03541 M00S03445.smfex +++| ELSE KILLECSBITS(SWAPGOOD); # TURN OFF ALL ECS SWAP PAGES # 03542 M00S03446.smfex +++| CONTROL FI; 03543 M00S03447.smfex +++| CONTROL IFEQ ECSCODE,0; 03544 M00S03448.smfex +++| KILLECSBITS(SWAPGOOD); 03545 M00S03449.smfex +++| CONTROL FI; 03546 M00S03450.smfex +++| 03547 M00S03451.smfex +++| IF SHUTDOWN EQ 2 THEN 03548 M00S03452.smfex +++| BEGIN 03549 M00S03453.smfex +++| TERMMON; # SHUT OFF ANY INPUT # 03550 M00S03454.smfex +++| P<MOVFROM>=FIELDLEN; 03551 M00S03455.smfex +++| MAKEFET(DMBFET,"ZZZZDMB",MOVFROM,O"1001"); 03552 M00S03456.smfex +++| FIELDLEN=FIELDLEN+O"1001"; 03553 M00S03457.smfex +++| FLDLEN(FIELDLEN+4); 03554 M00S03458.smfex +++| REWIND(DMBFET,1); 03555 M00S03459.smfex +++| READ(DMBFET,0); 03556 M00S03460.smfex +++| TMP1=0; 03557 M00S03461.smfex +++| TMP4=0; 03558 M00S03462.smfex +++| FOR TMP2=0 STEP 1 UNTIL O"61" DO 03559 M00S03463.smfex +++| BEGIN # UNTIL RIGHT (CM) CONTROL WORD # 03560 M00S03464.smfex +++| READO(DMBFET,TMP1,TMP4); # ACCESS NEXT CONTROL WORD # 03561 M00S03465.smfex +++| IF TMP4 NQ 0 THEN MELT("RCVR 1$"); 03562 M00S03466.smfex +++| END 03563 M00S03467.smfex +++| IF C<0,2>TMP1 NQ "CM" THEN MELT("RCVR 2$"); 03564 M00S03468.smfex +++| FOR TMP2=1 STEP 1 UNTIL LOC(USERTAB) DO 03565 M00S03469.smfex +++| BEGIN # CONSUME LOWER FIELD LENGTH # 03566 M00S03470.smfex +++| READO(DMBFET,TMP1,TMP4); 03567 M00S03471.smfex +++| IF TMP4 NQ 0 THEN MELT("RCVR 3$"); 03568 M00S03472.smfex +++| END 03569 M00S03473.smfex +++| # FINALLY READ IN THE USER TABLE # 03570 M00S03474.smfex +++| FOR TMP2=1 STEP 1 UNTIL 3*NUMSMFUSR DO 03571 M00S03475.smfex +++| BEGIN 03572 M00S03476.smfex +++| P<MOVTO>=LOC(USERTAB)+TMP2-1; 03573 M00S03477.smfex +++| READO(DMBFET,MOVTO,TMP4); 03574 M00S03478.smfex +++| IF TMP4 NQ 0 THEN MELT("RCVR 4$"); 03575 M00S03479.smfex +++| END 03576 M00S03480.smfex +++| REWIND(DMBFET,1); # IN CASE TAKE ANOTHER DUMP # 03577 M00S03481.smfex +++| FOR CURUSER=1 STEP 1 UNTIL NUMSMFUSR DO 03578 M00S03482.smfex +++| BEGIN # UPDATE AND QUEUE CHECKPT # 03579 M00S03483.smfex +++| GETUSER; 03580 M00S03484.smfex +++| IF CURUSINTASK THEN CURUSDONE=TRUE; 03581 M00S03485.smfex +++| CURUSINQUE=FALSE; 03582 M00S03486.smfex +++| CURUSTTIBUF=0; 03583 M00S03487.smfex +++| CURUSQUELNK=0; 03584 M00S03488.smfex +++| CURUSINTASK=FALSE; 03585 M00S03489.smfex +++| IF CURUSLOGGED AND CURUSSWPPAG NQ 0 AND NOT CURUSDONE THEN 03586 M00S03490.smfex +++| BEGIN 03587 M00S03491.smfex +++| TRCBOTH("RECOVER$",CURUSER); 03588 M00S03492.smfex +++| CURUSRCVRY=TRUE; 03589 M00S03493.smfex +++| CURUSINTRPT=TRUE; 03590 M00S03494.smfex +++| PUTINQ; 03591 M00S03495.smfex +++| END 03592 M00S03496.smfex +++| PUTUSER; 03593 M00S03497.smfex +++| END 03594 M00S03498.smfex +++| FOR TMP1=1 STEP 1 UNTIL NUMSWPFET DO SWPFETDONE[TMP1]=TRUE; 03595 M00S03499.smfex +++| TRCSTR("END INITMON RCVR$"); 03596 M00S03500.smfex +++| RETURN; # SO THAT NOTHING ELSE IS DONE # 03597 M00S03501.smfex +++| END 03598 M00S03502.smfex +++| 03599 M00S03503.smfex +++| FOR TMP1=1 STEP 1 UNTIL NUMSWPFET DO 03600 M00S03504.smfex +++| BEGIN 03601 M00S03505.smfex +++| CONTROL IFGR NUMSWPFET,8; BADSTUFF; CONTROL FI; # CODE DEPENDENT # 03602 M00S03506.smfex +++| C<0,6>TMP2="SMFSWP"; 03603 M00S03507.smfex +++| C<6,1>TMP2=TMP1+O"32"; 03604 M00S03508.smfex +++| P<ANYFET>=LOC(SWPFET[TMP1]); 03605 M00S03509.smfex +++| P<MOVFROM>=TASKADDR[1]; 03606 M00S03510.smfex +++| MAKEFET(ANYFET,TMP2,MOVFROM,SWAPBUFLEN); 03607 M00S03511.smfex +++| READ(ANYFET,1); # ASSURE FNT ALLOCATE # 03608 M00S03512.smfex +++| EVICT(ANYFET,1); # ASSURE NO OLD DATA # 03609 M00S03513.smfex +++| END 03610 M00S03514.smfex +++| 03611 M00S03515.smfex +++| 03612 M00S03516.smfex +++| PROC GENNULL; 03613 M00S03517.smfex +++| BEGIN 03614 M00S03518.smfex +++| C<0,2>TMP2="NE"; 03615 M00S03519.smfex +++| TMP3=TMP1; 03616 M00S03520.smfex +++| FOR TMP4=6 STEP -1 UNTIL 2 DO 03617 M00S03521.smfex +++| BEGIN 03618 M00S03522.smfex +++| C<TMP4,1>TMP2=O"33"+MOD(TMP3,10); 03619 M00S03523.smfex +++| TMP3=TMP3/10; 03620 M00S03524.smfex +++| END 03621 M00S03525.smfex +++| MAKEFET(NULLFET,TMP2,CORE,O"101"); 03622 M00S03526.smfex +++| END # OF GENNULL # 03623 M00S03527.smfex +++| 03624 M00S03528.smfex +++| 03625 M00S03529.smfex +++| FOR TMP1=1 STEP 1 UNTIL NUMSMFUSR DO 03626 M00S03530.smfex +++| BEGIN # MANY NULL FILES TO ENLARGEN NFL # 03627 M00S03531.smfex +++| GENNULL; 03628 M00S03532.smfex +++| READ(NULLFET,1); # ASSURE FNT ALLOCATE # 03629 M00S03533.smfex +++| END 03630 M00S03534.smfex +++| FOR TMP1=1 STEP 1 UNTIL NUMSMFUSR DO 03631 M00S03535.smfex +++| BEGIN # THEN RELEASE THE FNT SPACE # 03632 M00S03536.smfex +++| GENNULL; 03633 M00S03537.smfex +++| RETERN(NULLFET,1); 03634 M00S03538.smfex +++| END 03635 M00S03539.smfex +++| IAFPTR=LOC(SSCINP[0]); 03636 M00S03540.smfex +++| INITSSCWORD[1]=IAFHEADER; 03637 M00S03541.smfex +++| 03638 M00S03542.smfex +++| P<SSCBUFFER>=LOC(INITSSC); 03639 M00S03543.smfex +++| SSCSTATUS=-1; 03640 M00S03544.smfex +++| # DELAY UNTIL IAF HANDSHAKE WORKS OR IDLE COMMAND DETECTED # 03641 M00S03545.smfex +++| WHYLE SSCSTATUS LAN O"7776" NQ 0 AND MEM[0] LAN O"100000" EQ 0 DO 03642 M00S03546.smfex +++| BEGIN 03643 M00S03547.smfex +++| SSCWORD=O"0000 0000 0000 0103 0000"; 03644 M00S03548.smfex +++| SYSREQ("SSC",0,LOC(SSCBUFFER),IAFSSID); 03645 M00S03549.smfex +++| RECALL(0); 03646 M00S03550.smfex +++| END 03647 M00S03551.smfex +++| 03648 M00S03552.smfex +++| SFMSSTF; 03649 M00S03553.smfex +++| TRCSTR("END INITMON$"); 03650 M00S03554.smfex +++| 03651 M00S03555.smfex +++| END # OF INITMON # 03652 M00S03556.smfex +++| 03653 M00S03557.smfex +++| 03654 M00S03558.smfex +++|PROC TERMMON; 03655 M00S03559.smfex +++| BEGIN 03656 M00S03560.smfex +++|# 03657 M00S03561.smfex +++|** TERMMON - TERMINATE SMFEX NORMALLY. 03658 M00S03562.smfex +++|* 03659 M00S03563.smfex +++|* CALLS SFMCSTF. 03660 M00S03564.smfex +++|# 03661 M00S03565.smfex +++| SFMCSTF; 03662 M00S03566.smfex +++| TRCSTR("COMPLETE$"); 03663 M00S03567.smfex +++| TRCFRC; 03664 M00S03568.smfex +++| END # OF TERMMON # 03665 M00S03569.smfex +++| 03666 M00S03570.smfex +++| 03667 M00S03571.smfex +++|PROC MELT(STR); 03668 M00S03572.smfex +++| BEGIN 03669 M00S03573.smfex +++|# 03670 M00S03574.smfex +++|** MELT - TERMINATE SMFEX ABNORMALLY. 03671 M00S03575.smfex +++|* 03672 M00S03576.smfex +++|* ENTRY STR - ERROR MESSAGE FOR INTERNAL ABORT CONDITION. 03673 M00S03577.smfex +++|* COMPLETE - IF ALREADY SET, THEN MELT FUNCTIONS AS 03674 M00S03578.smfex +++|* AN INTERFACE TO PRODUCE A DAYFILE MESSAGE THEN 03675 M00S03579.smfex +++|* ALLOW NORMAL TERMINATION. NORMALLY, COMPLETE 03676 M00S03580.smfex +++|* IS FALSE AND MELT ABORTS THE JOB STEP. 03677 M00S03581.smfex +++|* 03678 M00S03582.smfex +++|* EXIT VIA LABELS ABORT OR ENDRUN. 03679 M00S03583.smfex +++|* 03680 M00S03584.smfex +++|* CALLS MESSAGE, TERMMON. 03681 M00S03585.smfex +++|# 03682 M00S03586.smfex +++| ITEM STR C(30); 03683 M00S03587.smfex +++| ITEM STR2 C(30); 03684 M00S03588.smfex +++| ITEM TMP1,TMP2; 03685 M00S03589.smfex +++| 03686 M00S03590.smfex +++| TRCSTR(STR); 03687 M00S03591.smfex +++| TRCFRC; 03688 M00S03592.smfex +++| STR2=STR; 03689 M00S03593.smfex +++| TMP2=0; 03690 M00S03594.smfex +++| FOR TMP1=0 STEP 1 UNTIL 29 DO 03691 M00S03595.smfex +++| BEGIN 03692 M00S03596.smfex +++| IF TMP2 EQ 0 AND C<TMP1,1>STR2 EQ "$" THEN TMP2=TMP1+1; 03693 M00S03597.smfex +++| END 03694 M00S03598.smfex +++| FOR TMP1=29 STEP -1 UNTIL TMP2 DO C<TMP1,1>STR2=0; 03695 M00S03599.smfex +++| MESSAGE(STR2,0,1); 03696 M00S03600.smfex +++| TERMMON; 03697 M00S03601.smfex +++| IF COMPLETE THEN ENDRUN; 03698 M00S03602.smfex +++| ELSE ABORT; 03699 M00S03603.smfex +++| 03700 M00S03604.smfex +++| END # OF MELT # 03701 M00S03605.smfex +++|PAGE 03702 M00S03606.smfex +++| 03703 M00S03607.smfex +++|# 03704 M00S03608.smfex +++|** SMFEX - MAIN ALGORITHM. 03705 M00S03609.smfex +++|* 03706 M00S03610.smfex +++|* THE SMFEX MAIN ALGORITHM INITIALIZES THE SUBSYSTEM, THEN 03707 M00S03611.smfex +++|* LOOPS ON THE THREE MAIN PROCESSES UNTIL A COMPLETION FLAG 03708 M00S03612.smfex +++|* IS DETECTED. THE SUBSYSTEM IS THEN TERMINATED. 03709 M00S03613.smfex +++|* 03710 M00S03614.smfex +++|* THE THREE PROCESSING PHASES PERFORM TIME-DEPENDENT FUNCTIONS, 03711 M00S03615.smfex +++|* RECEIVE AND QUEUE MESSAGES FROM IAFEX, AND EXECUTE TASKS AND 03712 M00S03616.smfex +++|* REPLY TO IAFEX. 03713 M00S03617.smfex +++|* 03714 M00S03618.smfex +++|* CALLS INITMON, DOTIMER, DOINPUT, RUNJOBS, INITMON. 03715 M00S03619.smfex +++|# 03716 M00S03620.smfex +++|ITEM TMP1; 03717 M00S03621.smfex +++| 03718 M00S03622.smfex +++|INITMON; # GET EVERYTHING SET UP # 03719 M00S03623.smfex +++| 03720 M00S03624.smfex +++|WHYLE NOT COMPLETE DO # MAIN LOOP # 03721 M00S03625.smfex +++| BEGIN 03722 M00S03626.smfex +++| DOTIMER; # RECALL CPU, HANDLE TIMER AND OPERATOR # 03723 M00S03627.smfex +++| DOINPUT; # PROCESS INPUT FROM IAFEX # 03724 M00S03628.smfex +++| RUNJOBS; # EXECUTE ANY TASKS THAT CAN # 03725 M00S03629.smfex +++| END # OF MAIN LOOP # 03726 M00S03630.smfex +++| 03727 M00S03631.smfex +++|TERMMON; # CLOSE UP SHOP # 03728 M00S03632.smfex +++|ENDRUN; 03729 M00S03633.smfex +++| 03730 M00S03634.smfex +++| 03731 M00S03635.smfex +++|END TERM
cdc/nos2.source/opl.opl871/deck/smfex.001.txt ยท Last modified: by 127.0.0.1