cdc:nos2.source:opl.opl871:deck:fsework.001
Deck FSEWORK Part 001
2 Modifications
Listing Sections
- Deck FSEWORK Start
- Deck FSEWORK Part 1 (Line 2105)
Source
Seq # *Modification Id* Act ----------------------------+ 02105 M00S02092.fsework +++|* SECTOR REMAINS JUST AS IT IS, AND A NEW SECTOR IS 02106 M00S02093.fsework +++|* CONSTRUCTED WHICH CONTAINS PRECISELY THE OVERFLOW TEXT. 02107 M00S02094.fsework +++|* SINCE NO EXISTING TEXT LEAVES THE SECTOR, THERE IS NO NEED 02108 M00S02095.fsework +++|* TO DISCARD IT AND BUILD TWO COMPLETELY NEW SECTORS. THUS, 02109 M00S02096.fsework +++|* SPLITAPEND IS MORE EFFICIENT THAN SPLITBEFORE OR 02110 M00S02097.fsework +++|* SPLITAFTER. 02111 M00S02098.fsework +++|* 02112 M00S02099.fsework +++|* THE NEWLY BUILT SECTOR BECOMES THE CURRENT SECTOR FOR THIS 02113 M00S02100.fsework +++|* LEVEL OF THE TREE. THE ORIGINAL SECTOR IS RELEASED FROM 02114 M00S02101.fsework +++|* OWNERSHIP. 02115 M00S02102.fsework +++|* 02116 M00S02103.fsework +++|* SPLITAPEND REQUIRES THAT AT LEAST ONE CACHE FRAME IS 02117 M00S02104.fsework +++|* AVAILABLE FOR ALLOCATION. 02118 M00S02105.fsework +++|* 02119 M00S02106.fsework +++|* SPLITAPEND FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02120 M00S02107.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02121 M00S02108.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02122 M00S02109.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02123 M00S02110.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02124 M00S02111.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02125 M00S02112.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02126 M00S02113.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02127 M00S02114.fsework +++|* 02128 M00S02115.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02129 M00S02116.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02130 M00S02117.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02131 M00S02118.fsework +++|* ALL PATH CONTROLS SETUP. 02132 M00S02119.fsework +++|* ALL CACHE CONTROLS SETUP. 02133 M00S02120.fsework +++|* 02134 M00S02121.fsework +++|* EXIT PL - DECREMENTED. 02135 M00S02122.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02136 M00S02123.fsework +++|* OVERFLOW TEXT. 02137 M00S02124.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02138 M00S02125.fsework +++|* NWNEW, NEWBEFORE, NWAFTER - SET FOR ITERATION. 02139 M00S02126.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02140 M00S02127.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02141 M00S02128.fsework +++|* 02142 M00S02129.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD. 02143 M00S02130.fsework +++|* 02144 M00S02131.fsework +++|* USES P<TOO>. 02145 M00S02132.fsework +++|# 02146 M00S02133.fsework +++| CLEAN; # CLEAN OLD BLOCK # 02147 M00S02134.fsework +++| 02148 M00S02135.fsework +++| ALLOC; # BUILD NEW BLOCK # 02149 M00S02136.fsework +++| ALLOCCACHE; 02150 M00S02137.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02151 M00S02138.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02152 M00S02139.fsework +++| PAFINAL[PL] = NWNEW; 02153 M00S02140.fsework +++| PADIRTY[PL] = TRUE; 02154 M00S02141.fsework +++| 02155 M00S02142.fsework +++| PADISP[PL] = 1; # FIX UP PATH # 02156 M00S02143.fsework +++| PAFIRST[PL] = FIRST; 02157 M00S02144.fsework +++| PALAST[PL] = LAST; 02158 M00S02145.fsework +++| 02159 M00S02146.fsework +++| NEWDA[0] = PADA[PL]; # BUILD NEW DIR ENTRY # 02160 M00S02147.fsework +++| NEWNL[0] = PALAST[PL] - PAFIRST[PL] + 1; 02161 M00S02148.fsework +++| NWNEW = 1; 02162 M00S02149.fsework +++| 02163 M00S02150.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02164 M00S02151.fsework +++| NWBEFORE = PADISP[PL]; 02165 M00S02152.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02166 M00S02153.fsework +++| DISP = PADISP[PL] + 1; 02167 M00S02154.fsework +++| PADISP[PL] = DISP; 02168 M00S02155.fsework +++| IOEND 02169 M00S02156.fsework +++|PAGE 02170 M00S02157.fsework +++| PROC SPLITBEFORE; 02171 M00S02158.fsework +++| IOBEGIN(SPLITBEFORE) 02172 M00S02159.fsework +++|# 02173 M00S02160.fsework +++|** SPLITBEFORE - SPLIT SECTOR JUST BEFORE INSERTION POINT. 02174 M00S02161.fsework +++|* 02175 M00S02162.fsework +++|* SPLITBEFORE IS USED TO OVERFLOW ANY NON-ROOT SECTOR UNDER 02176 M00S02163.fsework +++|* THE CONDITION THAT THE OVERFLOW TEXT MUST BE INSERTED 02177 M00S02164.fsework +++|* SOMEWHERE IN THE MIDDLE OF THE TEXT ALREADY CONTAINED IN 02178 M00S02165.fsework +++|* THE SECTOR, AND NEW TEXT WOULD NOT FIT WITHIN THE FIRST 02179 M00S02166.fsework +++|* SECTOR OF THE NEW PAIR. THUS, THE SECTOR IS SPLIT JUST IN 02180 M00S02167.fsework +++|* FRONT OF THE INSERTION POINT, AND THE SECOND SECTOR 02181 M00S02168.fsework +++|* RESULTING FROM THE SPLIT WILL START WITH THE OVERFLOW TEXT 02182 M00S02169.fsework +++|* AND CONTINUE WITH THE REMAINING TEXT SPLIT OUT OF THE 02183 M00S02170.fsework +++|* ORIGINAL SECTOR. 02184 M00S02171.fsework +++|* 02185 M00S02172.fsework +++|* SINCE SOME EXISTING TEXT MUST BE REMOVED FROM THE CURRENT 02186 M00S02173.fsework +++|* SECTOR, IT IS NOT POSSIBLE TO KEEP USING THE SAME SECTOR, 02187 M00S02174.fsework +++|* UNDER THE RULE THAT NOTHING CAN BE POINTED TO WITHOUT FIRST 02188 M00S02175.fsework +++|* EXISTING ON DISK. THEREFORE, TWO COMPLETELY NEW SECTORS 02189 M00S02176.fsework +++|* ARE CREATED AND THE ORIGINAL SECTOR BECOMES A FRAGMENT. 02190 M00S02177.fsework +++|* SINCE THE INSERTED TEXT GOES INTO THE SECOND SECTOR OF THE 02191 M00S02178.fsework +++|* NEW PAIR, THAT IS THE SECTOR WHICH IS LEFT AS THE CURRENT 02192 M00S02179.fsework +++|* SECTOR FOR THIS TREE PATH LEVEL. 02193 M00S02180.fsework +++|* 02194 M00S02181.fsework +++|* SPLITBEFORE REQUIRES THAT AT LEAST ONE CACHE FRAME IS 02195 M00S02182.fsework +++|* AVAILABLE FOR ALLOCATION. THE EXISTING CACHE FRAME FOR 02196 M00S02183.fsework +++|* THIS TREE LEVEL IS RECYCLED TO PROVIDE THE SECOND SECTOR OF 02197 M00S02184.fsework +++|* CAPACITY. THE EXISTING CACHE FRAME IS FIRST SUBJECTED TO 02198 M00S02185.fsework +++|* THE NORMAL "CLEAN" ROUTINE TO ASSURE THAT ANY PENDING 02199 M00S02186.fsework +++|* CHANGES ARE FLUSHED TO DISK. 02200 M00S02187.fsework +++|* 02201 M00S02188.fsework +++|* SPLITBEFORE FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02202 M00S02189.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02203 M00S02190.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02204 M00S02191.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02205 M00S02192.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02206 M00S02193.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02207 M00S02194.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02208 M00S02195.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02209 M00S02196.fsework +++|* 02210 M00S02197.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02211 M00S02198.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02212 M00S02199.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02213 M00S02200.fsework +++|* ALL PATH CONTROLS SETUP. 02214 M00S02201.fsework +++|* ALL CACHE CONTROLS SETUP. 02215 M00S02202.fsework +++|* 02216 M00S02203.fsework +++|* EXIT PL - DECREMENTED. 02217 M00S02204.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02218 M00S02205.fsework +++|* OVERFLOW TEXT AND SPLIT-OFF ORGINAL TEXT. 02219 M00S02206.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02220 M00S02207.fsework +++|* NWNEW, NEWBEFORE, NWAFTER - SET FOR ITERATION. 02221 M00S02208.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02222 M00S02209.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02223 M00S02210.fsework +++|* 02224 M00S02211.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD, LAST. 02225 M00S02212.fsework +++|* 02226 M00S02213.fsework +++|* USES P<TOO>. 02227 M00S02214.fsework +++|# 02228 M00S02215.fsework +++| 02229 M00S02216.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + 1; # SAVE OLD DATA # 02230 M00S02217.fsework +++| MOVEWD(PAFINAL[PL],FROM,OBF); 02231 M00S02218.fsework +++| 02232 M00S02219.fsework +++| DEALLOC; # FREE UP OLD BLOCK # 02233 M00S02220.fsework +++| 02234 M00S02221.fsework +++| ALLOC; # BUILD OFF BLOCK # 02235 M00S02222.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02236 M00S02223.fsework +++| MOVEWD(NWBEFORE,OBF,TOO); 02237 M00S02224.fsework +++| PAFINAL[PL] = NWBEFORE; 02238 M00S02225.fsework +++| 02239 M00S02226.fsework +++| ODA = PADA[PL]; # REMEMBER THIS # 02240 M00S02227.fsework +++| ONL = FIRST - PAFIRST[PL]; 02241 M00S02228.fsework +++| 02242 M00S02229.fsework +++| PADIRTY[PL] = TRUE; # GET RID OF OFF BLOCK # 02243 M00S02230.fsework +++| CLEAN; 02244 M00S02231.fsework +++| 02245 M00S02232.fsework +++| ALLOC; # BUILD NEW BLOCK # 02246 M00S02233.fsework +++| ALLOCCACHE; 02247 M00S02234.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02248 M00S02235.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02249 M00S02236.fsework +++| P<FROM> = LOC(OBF) + DISP-1; 02250 M00S02237.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWNEW + 1; 02251 M00S02238.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02252 M00S02239.fsework +++| PAFINAL[PL] = NWNEW + NWAFTER; 02253 M00S02240.fsework +++| PADIRTY[PL] = TRUE; 02254 M00S02241.fsework +++| 02255 M00S02242.fsework +++| PADISP[PL] = PADISP[PL] - NWBEFORE; # FIX UP PATH # 02256 M00S02243.fsework +++| PAFIRST[PL] == FIRST; 02257 M00S02244.fsework +++| PALAST[PL] = PALAST[PL] + NL; 02258 M00S02245.fsework +++| LAST = PALAST[PL]; 02259 M00S02246.fsework +++| 02260 M00S02247.fsework +++| NEWDA[0] = ODA; # BUILD NEW DIR ENTRIES # 02261 M00S02248.fsework +++| NEWNL[0] = ONL; 02262 M00S02249.fsework +++| NEWDA[1] = PADA[PL]; 02263 M00S02250.fsework +++| NEWNL[1] = PALAST[PL] - PAFIRST[PL] + 1; 02264 M00S02251.fsework +++| NWNEW = 2; 02265 M00S02252.fsework +++| 02266 M00S02253.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02267 M00S02254.fsework +++| NWBEFORE = PADISP[PL] - 1; 02268 M00S02255.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02269 M00S02256.fsework +++| DISP = PADISP[PL] + 1; 02270 M00S02257.fsework +++| PADISP[PL] = DISP; 02271 M00S02258.fsework +++| IOEND 02272 M00S02259.fsework +++|PAGE 02273 M00S02260.fsework +++| PROC SPLITAFTER; 02274 M00S02261.fsework +++| IOBEGIN(SPLITAFTER) 02275 M00S02262.fsework +++|# 02276 M00S02263.fsework +++|** SPLITAFTER - SPLIT SECTOR JUST AFTER INSERTION POINT. 02277 M00S02264.fsework +++|* 02278 M00S02265.fsework +++|* SPLITAFTER IS USED TO OVERFLOW ANY NON-ROOT SECTOR UNDER 02279 M00S02266.fsework +++|* THE CONDITION THAT THE OVERFLOW TEXT MUST BE INSERTED 02280 M00S02267.fsework +++|* SOMEWHERE IN THE MIDDLE OF THE TEXT ALREADY CONTAINED IN 02281 M00S02268.fsework +++|* THE SECTOR, AND NEW TEXT WOULD FIT WITHIN THE FIRST 02282 M00S02269.fsework +++|* SECTOR OF THE NEW PAIR. THUS, THE SECTOR IS SPLIT JUST 02283 M00S02270.fsework +++|* BEYOND THE INSERTED TEXT, AND THE SECOND SECTOR 02284 M00S02271.fsework +++|* RESULTING FROM THE SPLIT WILL START WITH THE REMAINING 02285 M00S02272.fsework +++|* TEXT SPLIT OUT OF THE ORGINAL SECTOR. 02286 M00S02273.fsework +++|* 02287 M00S02274.fsework +++|* SINCE SOME EXISTING TEXT MUST BE REMOVED FROM THE CURRENT 02288 M00S02275.fsework +++|* SECTOR, IT IS NOT POSSIBLE TO KEEP USING THE SAME SECTOR, 02289 M00S02276.fsework +++|* UNDER THE RULE THAT NOTHING CAN BE POINTED TO WITHOUT FIRST 02290 M00S02277.fsework +++|* EXISTING ON DISK. THEREFORE, TWO COMPLETELY NEW SECTORS 02291 M00S02278.fsework +++|* ARE CREATED AND THE ORIGINAL SECTOR BECOMES A FRAGMENT. 02292 M00S02279.fsework +++|* SINCE THE INSERTED TEXT GOES INTO THE FIRST SECTOR OF THE 02293 M00S02280.fsework +++|* NEW PAIR, THAT IS THE SECTOR WHICH IS LEFT AS THE CURRENT 02294 M00S02281.fsework +++|* SECTOR FOR THIS TREE PATH LEVEL. 02295 M00S02282.fsework +++|* 02296 M00S02283.fsework +++|* SPLITAFTER REQUIRES THAT AT LEAST ONE CACHE FRAME IS 02297 M00S02284.fsework +++|* AVAILABLE FOR ALLOCATION. THE EXISTING CACHE FRAME FOR 02298 M00S02285.fsework +++|* THIS TREE LEVEL IS RECYCLED TO PROVIDE THE SECOND SECTOR OF 02299 M00S02286.fsework +++|* CAPACITY. THE EXISTING CACHE FRAME IS FIRST SUBJECTED TO 02300 M00S02287.fsework +++|* THE NORMAL "CLEAN" ROUTINE TO ASSURE THAT ANY PENDING 02301 M00S02288.fsework +++|* CHANGES ARE FLUSHED TO DISK. 02302 M00S02289.fsework +++|* 02303 M00S02290.fsework +++|* SPLITAFTER FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02304 M00S02291.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02305 M00S02292.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02306 M00S02293.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02307 M00S02294.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02308 M00S02295.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02309 M00S02296.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02310 M00S02297.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02311 M00S02298.fsework +++|* 02312 M00S02299.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02313 M00S02300.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02314 M00S02301.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02315 M00S02302.fsework +++|* ALL PATH CONTROLS SETUP. 02316 M00S02303.fsework +++|* ALL CACHE CONTROLS SETUP. 02317 M00S02304.fsework +++|* 02318 M00S02305.fsework +++|* EXIT PL - DECREMENTED. 02319 M00S02306.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02320 M00S02307.fsework +++|* OVERFLOW TEXT AND SPLIT-OFF ORGINAL TEXT. 02321 M00S02308.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02322 M00S02309.fsework +++|* NWNEW, NEWAFTER, NWAFTER - SET FOR ITERATION. 02323 M00S02310.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02324 M00S02311.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02325 M00S02312.fsework +++|* 02326 M00S02313.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD, CLEAN, DEALLOC. 02327 M00S02314.fsework +++|* 02328 M00S02315.fsework +++|* USES P<TOO>, FIRST, LAST. 02329 M00S02316.fsework +++|# 02330 M00S02317.fsework +++| 02331 M00S02318.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + 1; # SAVE OLD DATA # 02332 M00S02319.fsework +++| MOVEWD(PAFINAL[PL],FROM,OBF); 02333 M00S02320.fsework +++| 02334 M00S02321.fsework +++| DEALLOC; # FREE UP OLD BLOCK # 02335 M00S02322.fsework +++| 02336 M00S02323.fsework +++| ALLOC; # BUILD OFF BLOCK # 02337 M00S02324.fsework +++| P<FROM> = LOC(OBF) + DISP-1; 02338 M00S02325.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02339 M00S02326.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02340 M00S02327.fsework +++| PAFINAL[PL] = NWAFTER; 02341 M00S02328.fsework +++| 02342 M00S02329.fsework +++| ODA = PADA[PL]; # REMEMBER THIS # 02343 M00S02330.fsework +++| ONL = PALAST[PL] + NL - LAST; 02344 M00S02331.fsework +++| 02345 M00S02332.fsework +++| PADIRTY[PL] = TRUE; # GET RID OF OFF BLOCK # 02346 M00S02333.fsework +++| CLEAN; 02347 M00S02334.fsework +++| 02348 M00S02335.fsework +++| ALLOC; # BUILD NEW BLOCK # 02349 M00S02336.fsework +++| ALLOCCACHE; 02350 M00S02337.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02351 M00S02338.fsework +++| MOVEWD(NWBEFORE,OBF,TOO); 02352 M00S02339.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE + 1; 02353 M00S02340.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02354 M00S02341.fsework +++| PAFINAL[PL] = NWBEFORE + NWNEW; 02355 M00S02342.fsework +++| PADIRTY[PL] = TRUE; 02356 M00S02343.fsework +++| 02357 M00S02344.fsework +++| FIRST = PAFIRST[PL]; # FIX UP PATH # 02358 M00S02345.fsework +++| LAST == PALAST[PL]; 02359 M00S02346.fsework +++| LAST = LAST + NL; 02360 M00S02347.fsework +++| 02361 M00S02348.fsework +++| NEWDA[0] = PADA[PL]; # BUILD NEW DIR ENTRIES # 02362 M00S02349.fsework +++| NEWNL[0] = PALAST[PL] - PAFIRST[PL] + 1; 02363 M00S02350.fsework +++| NEWDA[1] = ODA; 02364 M00S02351.fsework +++| NEWNL[1] = ONL; 02365 M00S02352.fsework +++| NWNEW = 2; 02366 M00S02353.fsework +++| 02367 M00S02354.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02368 M00S02355.fsework +++| NWBEFORE = PADISP[PL] - 1; 02369 M00S02356.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02370 M00S02357.fsework +++| DISP = PADISP[PL] + 1; 02371 M00S02358.fsework +++| IOEND 02372 M00S02359.fsework +++|PAGE 02373 M00S02360.fsework +++|PROC CHANGE; # CHANGE TREE # 02374 M00S02361.fsework +++| IOBEGIN(CHANGE) 02375 M00S02362.fsework +++|# 02376 M00S02363.fsework +++|** CHANGE - APPLY CHANGES TO TREE STRUCTURE. 02377 M00S02364.fsework +++|* 02378 M00S02365.fsework +++|* CHANGE IS THE PRINCIPAL ALGORITHM USED TO MANIPULATE THE 02379 M00S02366.fsework +++|* TREE STRUCTURE. CHANGE IS DESIGNED TO BE CALLED BY THE 02380 M00S02367.fsework +++|* INS, REP, AND DEL ENTRY POINTS. THE ALGORITHM WORKS IN 02381 M00S02368.fsework +++|* THREE PHASES. THE FIRST PHASE TAKES CARE OF CASES WHERE AN 02382 M00S02369.fsework +++|* INSERTION OF A LINE OR THE REPLACEMENT OF A LINE WITH AN 02383 M00S02370.fsework +++|* ENLARGED VERSION WILL CAUSE THE CURRENT DATA SECTOR (THE 02384 M00S02371.fsework +++|* BOTTOM LEVEL OF THE TREE STRUCTURE) TO OUTGROW THE SECTOR 02385 M00S02372.fsework +++|* CAPACITY AND CAUSE SPLITTING INTO TWO SECTORS. THIS CAUSES 02386 M00S02373.fsework +++|* ADDITIONAL DIRECTORY ENTRIES TO BE REQUIRED IN THE HIGHER 02387 M00S02374.fsework +++|* TREE LEVELS, WHICH CAN IN TURN CAUSE ONE OR MORE DIRECTORY 02388 M00S02375.fsework +++|* LEVELS TO BE SPLIT INTO MULTIPLE SECTORS. IN THE EXTREME 02389 M00S02376.fsework +++|* CASE, THE ROOT LEVEL OF THE TREE MAY OVERFLOW, IN WHICH 02390 M00S02377.fsework +++|* CASE A NEW INTERMEDIATE LEVEL OF THE TREE MUST BE CREATED, 02391 M00S02378.fsework +++|* WITH THE ROOT SECTOR CONVERTED INTO A DIRECTORY FOR THE 02392 M00S02379.fsework +++|* INTERMEDIATE LEVEL. 02393 M00S02380.fsework +++|* 02394 M00S02381.fsework +++|* AFTER THE FIRST PHASE HAS EXHAUSTED ITS ITERATION, THE 02395 M00S02382.fsework +++|* SECOND PHASE TAKES OVER, IDENTIFYING ANY TREE LEVEL 02396 M00S02383.fsework +++|* STARTING WITH THE DATA LEVEL WHICH HAS BECOME EMPTY AS THE 02397 M00S02384.fsework +++|* RESULT OF DELETIONS. THE SECOND PHASE IS THUS MUTUALLY 02398 M00S02385.fsework +++|* EXCLUSIVE OF THE FIRST PHASE. 02399 M00S02386.fsework +++|* 02400 M00S02387.fsework +++|* THE THIRD PHASE IS A CLEANUP OPERATION. WHILE EACH OF THE 02401 M00S02388.fsework +++|* FIRST TWO PHASES MAY BE A NO-OP, (AND AT LEAST ONE OF THE 02402 M00S02389.fsework +++|* FIRST TWO PHASES WILL INDEED BE A NO-OP), THE THIRD PHASE 02403 M00S02390.fsework +++|* ALWAYS IS IN EFFECT. THE CLEANUP OPERATION CONSISTS OF THE 02404 M00S02391.fsework +++|* APPLICATION OF LEFT-OVER CHANGES. LEFTOVER CHANGES MAY 02405 M00S02392.fsework +++|* CONSTITUTE THE ENTIRE CHANGE IF NEITHER PRELIMINARY PHASE 02406 M00S02393.fsework +++|* WAS NEEDED, OR IF ONE OF THE FIRST TWO PHASES WAS USED, 02407 M00S02394.fsework +++|* THEN IT WILL HAVE LEFT RESIDUAL CHANGES TO BE APPLIED ONE 02408 M00S02395.fsework +++|* LEVEL CLOSER TO THE ROOT THAN THE LAST LEVEL AFFECTED BY 02409 M00S02396.fsework +++|* THE SPLITTING OR COLLAPSING. 02410 M00S02397.fsework +++|* 02411 M00S02398.fsework +++|* ACTUAL APPLICATION OF CHANGES, WHETHER PERFORMED BY THE 02412 M00S02399.fsework +++|* THIRD PHASE OF THE CHANGE ROUTINE, OR WITHIN ONE OF THE 02413 M00S02400.fsework +++|* SPLIT ROUTINES SELECTED BY THE FIRST PHASE OF THE CHANGE 02414 M00S02401.fsework +++|* ROUTINE, SIMPLY CONSIST OF OPENING UP A GAP AT THE RIGHT 02415 M00S02402.fsework +++|* MEMORY LOCATION, OF ZERO, POSITIVE, OR NEGATIVE LENGTH, AND 02416 M00S02403.fsework +++|* MOVING IN THE TEXT OF THE CHANGE, WHICH CAN CONSIST OF ZERO 02417 M00S02404.fsework +++|* OR MORE WORDS. 02418 M00S02405.fsework +++|* 02419 M00S02406.fsework +++|* THE CLEANUP PHASE ALSO INCREMENTS OR DECREMENTS THE COUNT 02420 M00S02407.fsework +++|* OF LINES BRACKETED BY EACH LEVEL OF THE TREE. 02421 M00S02408.fsework +++|* 02422 M00S02409.fsework +++|* ENTRY PALVL - DEEPEST LEVEL IN TREE STRUCTURE. 02423 M00S02410.fsework +++|* PL - CURRENT TREE LEVEL MUST EQUAL PALVL. 02424 M00S02411.fsework +++|* NL - CHANGE IN NUMBER OF LINES IN WORKFILE. 02425 M00S02412.fsework +++|* NWBEFORE - NUMBER OF WORDS BEFORE POINT OF CHANGE. 02426 M00S02413.fsework +++|* NWAFTER - NUMBER OF WORDS AFTER POINT OF CHANGE. 02427 M00S02414.fsework +++|* NWNEW - NUMBER OF WORDS IN CHANGED TEXT. 02428 M00S02415.fsework +++|* DISP - POINTS JUST AFTER CURRENT LINE. 02429 M00S02416.fsework +++|* LINEBUF - CONTAINS TEXT OF CHANGE. 02430 M00S02417.fsework +++|* ALL PATH CONTROLS - SETUP. 02431 M00S02418.fsework +++|* ALL CACHE CONTROLS - SETUP. 02432 M00S02419.fsework +++|* 02433 M00S02420.fsework +++|* EXIT PL - ZERO. 02434 M00S02421.fsework +++|* PALVL - INCREMENTED/DECREMENTED IF TREE DEPTH CHANGED. 02435 M00S02422.fsework +++|* DISP, CURNW - BRACKET NEW CURRENT LINE. 02436 M00S02423.fsework +++|* ALL PATH, CACHE CONTROLS - UPDATED. 02437 M00S02424.fsework +++|* FET AND CIRCULAR BUFFER USED IF NEEDED. 02438 M00S02425.fsework +++|* 02439 M00S02426.fsework +++|* CALLS COUNTCACHE, FLUSHCACHE, SPLITTOP, SPLITAPEND, 02440 M00S02427.fsework +++|* SPLITBEFORE, SPLITAFTER, RECLAIMCACHE, DEALLOC, CLEAN, 02441 M00S02428.fsework +++|* MOVEWD. 02442 M00S02429.fsework +++|* 02443 M00S02430.fsework +++|* USES P<NEW>, P<FROM>, P<TOO>, FIRST, LAST, NWNEW, 02444 M00S02431.fsework +++|* NWBEFORE, NWAFTER, NL. 02445 M00S02432.fsework +++|# 02446 M00S02433.fsework +++| P<NEW> = LOC(LINEBUF); # SET THINGS UP # 02447 M00S02434.fsework +++| FIRST = CURRENT + NL; 02448 M00S02435.fsework +++| LAST = FIRST; 02449 M00S02436.fsework +++| CURNW = NWNEW; 02450 M00S02437.fsework +++| 02451 M00S02438.fsework +++| FOR PL = PL WHILE NWBEFORE+NWNEW+NWAFTER GR 63 DO 02452 M00S02439.fsework +++| BEGIN # DO ALL SPLITS # 02453 M00S02440.fsework +++| IF COUNTCACHE LQ 2 THEN FLUSHCACHE; 02454 M00S02441.fsework +++| IF PL EQ 0 THEN SPLITTOP; 02455 M00S02442.fsework +++| IF NWBEFORE EQ PAFINAL[PL] THEN SPLITAPEND; 02456 M00S02443.fsework +++| ELSE IF NWBEFORE+NWNEW LQ 63 THEN SPLITAFTER; 02457 M00S02444.fsework +++| ELSE SPLITBEFORE; 02458 M00S02445.fsework +++| RECLAIMCACHE; 02459 M00S02446.fsework +++| P<NEW> = LOC(NDIR); 02460 M00S02447.fsework +++| END 02461 M00S02448.fsework +++| 02462 M00S02449.fsework +++| FOR PL = PL WHILE NWBEFORE+NWNEW+NWAFTER EQ 0 DO 02463 M00S02450.fsework +++| BEGIN # DO ALL COLLAPSING # 02464 M00S02451.fsework +++| DEALLOC; 02465 M00S02452.fsework +++| CLEAN; # TO FREE UP CACHE FRAME # 02466 M00S02453.fsework +++| PALVL = PALVL - 1; 02467 M00S02454.fsework +++| PL = PL - 1; 02468 M00S02455.fsework +++| NWBEFORE = PADISP[PL] - 1; 02469 M00S02456.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02470 M00S02457.fsework +++| DISP = PADISP[PL] + 1; 02471 M00S02458.fsework +++| END 02472 M00S02459.fsework +++| 02473 M00S02460.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + DISP; # SLIDE AFTER # 02474 M00S02461.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE +NWNEW + 1; 02475 M00S02462.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02476 M00S02463.fsework +++| 02477 M00S02464.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE + 1; # MOVE IN NEW # 02478 M00S02465.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02479 M00S02466.fsework +++| 02480 M00S02467.fsework +++| PAFINAL[PL] = NWBEFORE + NWNEW + NWAFTER; 02481 M00S02468.fsework +++| PADIRTY[PL] = TRUE; 02482 M00S02469.fsework +++| PALAST[PL] = PALAST[PL] + NL; # FIX UP PATH # 02483 M00S02470.fsework +++| 02484 M00S02471.fsework +++| FOR PL = PL-1 STEP -1 UNTIL 0 DO # UPDATE HIGHER DIRS # 02485 M00S02472.fsework +++| BEGIN 02486 M00S02473.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[PL]]); 02487 M00S02474.fsework +++| DIRNL[PADISP[PL]] = DIRNL[PADISP[PL]] + NL; 02488 M00S02475.fsework +++| PADIRTY[PL] = TRUE; 02489 M00S02476.fsework +++| PALAST[PL] = PALAST[PL] + NL; 02490 M00S02477.fsework +++| END 02491 M00S02478.fsework +++| 02492 M00S02479.fsework +++| CURRENT = CURRENT + NL; # UPDATE CURRENT # 02493 M00S02480.fsework +++| 02494 M00S02481.fsework +++| IOEND 02495 M00S02482.fsework +++|PAGE 02496 M00S02483.fsework +++| 02497 M00S02484.fsework +++|PROC INS; 02498 M00S02485.fsework +++| IOBEGIN(INS) 02499 M00S02486.fsework +++|# 02500 M00S02487.fsework +++|** INS - INTERFACE FOR INSERTION OF LINES. 02501 M00S02488.fsework +++|* 02502 M00S02489.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02503 M00S02490.fsework +++|* LINEBUF - LINE IMAGE. 02504 M00S02491.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02505 M00S02492.fsework +++|* 02506 M00S02493.fsework +++|* EXIT CURRENT - INCREMENETED. 02507 M00S02494.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02508 M00S02495.fsework +++|* 02509 M00S02496.fsework +++|* CALLS LINESZ, CHANGE, WIOSTAT. 02510 M00S02497.fsework +++|* 02511 M00S02498.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP. 02512 M00S02499.fsework +++|# 02513 M00S02500.fsework +++| CONTROL IFEQ MULTI,1; 02514 M00S02501.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02515 M00S02502.fsework +++| CONTROL FI; 02516 M00S02503.fsework +++| 02517 M00S02504.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02518 M00S02505.fsework +++| DISP = PADISP[PL]; 02519 M00S02506.fsework +++| 02520 M00S02507.fsework +++| NL = 1; 02521 M00S02508.fsework +++| NWBEFORE = DISP + CURNW - 1; 02522 M00S02509.fsework +++| NWNEW = LINESZ(LINEBUF); 02523 M00S02510.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02524 M00S02511.fsework +++| DISP = DISP + CURNW; 02525 M00S02512.fsework +++| 02526 M00S02513.fsework +++| PADISP[PL] = DISP; 02527 M00S02514.fsework +++| 02528 M00S02515.fsework +++| CHANGE; 02529 M00S02516.fsework +++| IOEND 02530 M00S02517.fsework +++| 02531 M00S02518.fsework +++|PROC REP; 02532 M00S02519.fsework +++| IOBEGIN(REP) 02533 M00S02520.fsework +++|# 02534 M00S02521.fsework +++|** REP - INTERFACE FOR REPLACEMENT OF LINES. 02535 M00S02522.fsework +++|* 02536 M00S02523.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02537 M00S02524.fsework +++|* LINEBUF - LINE IMAGE. 02538 M00S02525.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02539 M00S02526.fsework +++|* 02540 M00S02527.fsework +++|* EXIT CURRENT - UNCHANGED. 02541 M00S02528.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02542 M00S02529.fsework +++|* 02543 M00S02530.fsework +++|* CALLS LINESZ, CHANGE, WIOSTAT. 02544 M00S02531.fsework +++|* 02545 M00S02532.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP. 02546 M00S02533.fsework +++|# 02547 M00S02534.fsework +++| 02548 M00S02535.fsework +++| CONTROL IFEQ MULTI,1; 02549 M00S02536.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02550 M00S02537.fsework +++| CONTROL FI; 02551 M00S02538.fsework +++| 02552 M00S02539.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02553 M00S02540.fsework +++| DISP = PADISP[PL]; 02554 M00S02541.fsework +++| 02555 M00S02542.fsework +++| NL = 0; 02556 M00S02543.fsework +++| NWBEFORE = DISP - 1; 02557 M00S02544.fsework +++| NWNEW = LINESZ(LINEBUF); 02558 M00S02545.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02559 M00S02546.fsework +++| DISP = DISP + CURNW; 02560 M00S02547.fsework +++| 02561 M00S02548.fsework +++| CHANGE; 02562 M00S02549.fsework +++| IOEND 02563 M00S02550.fsework +++| 02564 M00S02551.fsework +++|PROC DEL; 02565 M00S02552.fsework +++| IOBEGIN(DEL) 02566 M00S02553.fsework +++|# 02567 M00S02554.fsework +++|** DEL - INTERFACE FOR DELETION OF LINES. 02568 M00S02555.fsework +++|* 02569 M00S02556.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02570 M00S02557.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02571 M00S02558.fsework +++|* DELETCTL - POST-POSITIONING INCREMENT. 02572 M00S02559.fsework +++|* 02573 M00S02560.fsework +++|* EXIT CURRENT - INCREMENTED IF DELETCTL WAS ONE. 02574 M00S02561.fsework +++|* LINEBUF - NEW CURRENT LINE IS READ UP. 02575 M00S02562.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02576 M00S02563.fsework +++|* DELETCTL - FORCED ZERO IF DELETED LAST LINE. 02577 M00S02564.fsework +++|* 02578 M00S02565.fsework +++|* CALLS CHANGE, WIOSTAT, POSR. 02579 M00S02566.fsework +++|* 02580 M00S02567.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP, 02581 M00S02568.fsework +++|* P<MVLNBUF>, NEWCURL. 02582 M00S02569.fsework +++|# 02583 M00S02570.fsework +++| 02584 M00S02571.fsework +++| CONTROL IFEQ MULTI,1; 02585 M00S02572.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02586 M00S02573.fsework +++| CONTROL FI; 02587 M00S02574.fsework +++| 02588 M00S02575.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02589 M00S02576.fsework +++| DISP = PADISP[PL]; 02590 M00S02577.fsework +++| 02591 M00S02578.fsework +++| NL = -1; 02592 M00S02579.fsework +++| NWBEFORE = DISP - 1; 02593 M00S02580.fsework +++| NWNEW = 0; 02594 M00S02581.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02595 M00S02582.fsework +++| DISP = DISP + CURNW; 02596 M00S02583.fsework +++| 02597 M00S02584.fsework +++| CHANGE; 02598 M00S02585.fsework +++| 02599 M00S02586.fsework +++| IF PALAST[0] LQ CURRENT THEN DELETCTL=0; 02600 M00S02587.fsework +++| CURRENT=CURRENT+DELETCTL; 02601 M00S02588.fsework +++| NEWCURL=CURRENT; 02602 M00S02589.fsework +++| P<MVLNBUF>=LOC(LINEBUF); 02603 M00S02590.fsework +++| POSR; 02604 M00S02591.fsework +++| P<MVLNBUF>=0; 02605 M00S02592.fsework +++| 02606 M00S02593.fsework +++| IOEND 02607 M00S02594.fsework +++|PAGE 02608 M00S02595.fsework +++|PROC INIT; 02609 M00S02596.fsework +++| BEGIN 02610 M00S02597.fsework +++|# 02611 M00S02598.fsework +++|** INIT - INITIALIZE MEMORY CELLS FOR WORKIO. 02612 M00S02599.fsework +++|* 02613 M00S02600.fsework +++|* ENTRY NO CONDITIONS. 02614 M00S02601.fsework +++|* 02615 M00S02602.fsework +++|* EXIT P<LINEBUF> -POINTS TO LIN ARRAY. 02616 M00S02603.fsework +++|* ALL ELEMENTS OF PATH ARRAY - NOMINAL. 02617 M00S02604.fsework +++|* ALL CACHE CONTROLS - NOMINAL. 02618 M00S02605.fsework +++|* READ LIST (RDLIST, RDIN, RDOUT) - EMPTY. 02619 M00S02606.fsework +++|* FLAGS (IOACT, IOREAD, IOWRITE) - FALSE. 02620 M00S02607.fsework +++|* ARRAYLEN, DATALEN, ARRAYPRUS, DATAPRUS - INITIALIZED. 02621 M00S02608.fsework +++|* SEGEMENTVER - ZEROED OUT. 02622 M00S02609.fsework +++|# 02623 M00S02610.fsework +++| P<LINEBUF>=LOC(LIN); 02624 M00S02611.fsework +++| 02625 M00S02612.fsework +++| FOR PL = 1 STEP 1 UNTIL MAXDEPTH DO # INIT PATH # 02626 M00S02613.fsework +++| BEGIN 02627 M00S02614.fsework +++| PAFIRST[PL] = 0; 02628 M00S02615.fsework +++| PALAST[PL] = 0; 02629 M00S02616.fsework +++| PADISP[PL] = 0; 02630 M00S02617.fsework +++| PAHEAD[PL] = 0; 02631 M00S02618.fsework +++| END 02632 M00S02619.fsework +++| 02633 M00S02620.fsework +++| FOR PL = 0 STEP 1 UNTIL MAXCACHE DO # INIT CACHE CTL # 02634 M00S02621.fsework +++| BEGIN 02635 M00S02622.fsework +++| CACHEOWNED[PL]=FALSE; CACHEDIRTY[PL]=FALSE; 02636 M00S02623.fsework +++| CACHEAGE[PL]=-1; 02637 M00S02624.fsework +++| BFHEAD[PL]=0; 02638 M00S02625.fsework +++| END 02639 M00S02626.fsework +++| 02640 M00S02627.fsework +++| FOR RDIN = 0 STEP 1 UNTIL RDLIM DO RDLIST[RDIN] = 0; 02641 M00S02628.fsework +++| 02642 M00S02629.fsework +++| IOACT = FALSE; # INIT IO # 02643 M00S02630.fsework +++| IOAPEND = FALSE; 02644 M00S02631.fsework +++| IOWRITE = FALSE; 02645 M00S02632.fsework +++| IOREAD = FALSE; 02646 M00S02633.fsework +++| 02647 M00S02634.fsework +++| CURNW = 0; 02648 M00S02635.fsework +++| 02649 M00S02636.fsework +++| SEGMENTVER=0; 02650 M00S02637.fsework +++| ARRAYLEN=LOC(ARRAYEND)-LOC(ARRAYSTART); 02651 M00S02638.fsework +++| ARRAYPRUS=(ARRAYLEN+O"77")/O"100"; 02652 M00S02639.fsework +++| DATALEN=LOC(DATAEND)-LOC(DATASTART); 02653 M00S02640.fsework +++| DATAPRUS=(DATALEN+O"77")/O"100"; 02654 M00S02641.fsework +++| 02655 M00S02642.fsework +++| END 02656 M00S02643.fsework +++|PAGE 02657 M00S02644.fsework +++|PROC RESUMIO; 02658 M00S02645.fsework +++| IOBEGIN(RESUMIO) 02659 M00S02646.fsework +++|# 02660 M00S02647.fsework +++|** RESUMIO - RESUME EDITOR STATUS FROM LEFTOVER WORKFILE. 02661 M00S02648.fsework +++|* 02662 M00S02649.fsework +++|* RESUMIO ATTEMPTS TO VALIDATE A FILE AS CONTAINING THE TEXT 02663 M00S02650.fsework +++|* AND STATUS LEFT BY A PREVIOUS EDIT SESSION, OR BY A 02664 M00S02651.fsework +++|* SINGLE/MULTI USER TRANSITION. SINCE THE SCALAR AND ARRAY 02665 M00S02652.fsework +++|* DATA SEGMENTS CONTAIN NEARLY ALL EDITOR DATA, SUCCESSFUL 02666 M00S02653.fsework +++|* EXECUTION OF RESUMIO CHANGES EVERYTHING. 02667 M00S02654.fsework +++|* 02668 M00S02655.fsework +++|* THE FOLLOWING CONDITIONS ARE REQUIRED TO VALIDATE AN 02669 M00S02656.fsework +++|* APPARENT WORKFILE AS A LEGITIMATE BASIS FOR RESUMPTION -- 02670 M00S02657.fsework +++|* 02671 M00S02658.fsework +++|* 1. THE FIRST WORD MUST BE FORMATTED AS A ROOT SECTOR 02672 M00S02659.fsework +++|* HEADER WORD. THE DISK ADDRESS FIELD MUST BE ONE AND 02673 M00S02660.fsework +++|* THE TOP FLAG MUST BE ON AND THE DIRECTORY AND DATA 02674 M00S02661.fsework +++|* FLAGS MUST BE UNEQUAL. 02675 M00S02662.fsework +++|* 02676 M00S02663.fsework +++|* 2. THE FIRST RECORD OF THE FILE MUST BE OF LENGTH 02677 M00S02664.fsework +++|* 64 WORDS LONGER THAN THE SCALAR DATA SEGMENT, AND 02678 M00S02665.fsework +++|* THE SECOND RECORD OF THE FILE MUST EXACTLY MATCH 02679 M00S02666.fsework +++|* THE LENGTH OF THE ARRAY SEGMENT. 02680 M00S02667.fsework +++|* 02681 M00S02668.fsework +++|* 3. THE SEGMENTLEN1 AND SEGMENTLEN2 FIELDS OF THE SCALAR 02682 M00S02669.fsework +++|* SEGMENT MUST MATCH THE ABOVE LENGTHS, AND THE 02683 M00S02670.fsework +++|* SEGMENTVER FIELD MUST MATCH THE VERSION NUMBER 02684 M00S02671.fsework +++|* COMPILED INTO THIS PROGRAM. 02685 M00S02672.fsework +++|* 02686 M00S02673.fsework +++|* AFTER READING UP ALL EDITOR DATA, THE FOLLOWING WORKIO 02687 M00S02674.fsework +++|* CONTROLS ARE RE-INITIALIZED - THE PATH VECTOR IS REFRESHED 02688 M00S02675.fsework +++|* TO MATCH THE CURRENT LINE, THE SCHEDULING FLAGS (IOACT, 02689 M00S02676.fsework +++|* IOREAD, ETC.) ARE CLEARED, MAXDA AND DANEXT ARE BASED ON 02690 M00S02677.fsework +++|* FILE SIZE, AND SEGMENTVER IS CLEARED. THE WORKFILE IS THEN 02691 M00S02678.fsework +++|* IMMEDIATELY CHECKPOINTED SO THAT IT CANNOT BE RESUMED 02692 M00S02679.fsework +++|* AGAIN, THUS INTERLOCKING IT. 02693 M00S02680.fsework +++|* 02694 M00S02681.fsework +++|* ENTRY NO CONDITIONS. 02695 M00S02682.fsework +++|* 02696 M00S02683.fsework +++|* EXIT EVERYTHING IN THE WHOLE EDITOR IS CHANGED. 02697 M00S02684.fsework +++|* IORESUMED - SUCCESS/FAILURE INDICATOR. 02698 M00S02685.fsework +++|* 02699 M00S02686.fsework +++|* CALLS INIT, INITFET, BUFUSAGE, ALLOCCACHE, RDWBUF, READ, 02700 M00S02687.fsework +++|* WAIT, TRAGIC, SKIPEI, POSR, CLEANALL. 02701 M00S02688.fsework +++|# 02702 M00S02689.fsework +++| INIT; 02703 M00S02690.fsework +++| IORESUMED=FALSE; 02704 M00S02691.fsework +++| INITFET(DISK,DSKSIZ); 02705 M00S02692.fsework +++| 02706 M00S02693.fsework +++| REWIND(FET,0); # TRY TO READ PRU 1 # 02707 M00S02694.fsework +++| WAIT; 02708 M00S02695.fsework +++| READ(FET,0); 02709 M00S02696.fsework +++| WAIT; 02710 M00S02697.fsework +++| 02711 M00S02698.fsework +++| IF BUFUSAGE GR O"100" THEN 02712 M00S02699.fsework +++| BEGIN 02713 M00S02700.fsework +++| PL=0; 02714 M00S02701.fsework +++| PADA[0]=1; 02715 M00S02702.fsework +++| ALLOCCACHE; 02716 M00S02703.fsework +++| P<TOO>=LOC(BFPRU[PACACHE[0]]); 02717 M00S02704.fsework +++| RDWBUF(O"100"); 02718 M00S02705.fsework +++| PAHEAD[0] = BFHEAD[PACACHE[0]]; 02719 M00S02706.fsework +++| END 02720 M00S02707.fsework +++| 02721 M00S02708.fsework +++| IF PADA[0] EQ 1 AND PATOP[0] 02722 M00S02709.fsework +++| AND BOOLDIFF(PADIR[0],PADATA[0]) THEN 02723 M00S02710.fsework +++| BEGIN 02724 M00S02711.fsework +++| 02725 M00S02712.fsework +++| # READ FIRST FOUR WORDS TO VERIFY SEGMENT DESCRIPTORS # 02726 M00S02713.fsework +++| P<TOO>=LOC(DATASTART); 02727 M00S02714.fsework +++| NWNEW=BUFUSAGE; 02728 M00S02715.fsework +++| NWNEW=MIN(NWNEW,4); 02729 M00S02716.fsework +++| RDWBUF(NWNEW); 02730 M00S02717.fsework +++| IORESUMED=FALSE; 02731 M00S02718.fsework +++| IF SEGMENTVER NQ IOVERSION OR SEGMENTLEN1 NQ DATALEN 02732 M00S02719.fsework +++| OR SEGMENTLEN2 NQ ARRAYLEN THEN IORET 02733 M00S02720.fsework +++| 02734 M00S02721.fsework +++| # SEGMENT DESCRIPTORS VALID, READ REST OF SCALAR SEGMENT # 02735 M00S02722.fsework +++| P<TOO>=LOC(DATASTART)+4; 02736 M00S02723.fsework +++| NWNEW=BUFUSAGE; 02737 M00S02724.fsework +++| NWNEW=MIN(DATALEN-4,NWNEW); 02738 M00S02725.fsework +++| RDWBUF(NWNEW); 02739 M00S02726.fsework +++| READ(FET,0); 02740 M00S02727.fsework +++| WAIT; 02741 M00S02728.fsework +++| 02742 M00S02729.fsework +++| # READ ARRAY SEGMENT # 02743 M00S02730.fsework +++| P<TOO>=LOC(ARRAYSTART); 02744 M00S02731.fsework +++| NWNEW=BUFUSAGE; 02745 M00S02732.fsework +++| NWNEW=MIN(ARRAYLEN,NWNEW); 02746 M00S02733.fsework +++| RDWBUF(NWNEW); 02747 M00S02734.fsework +++| 02748 M00S02735.fsework +++| IF ABORTED THEN TRAGIC(ERRSTRING); 02749 M00S02736.fsework +++| 02750 M00S02737.fsework +++| SKIPEI(FET,0); 02751 M00S02738.fsework +++| WAIT; 02752 M00S02739.fsework +++| MAXDA=FETCRI-1; 02753 M00S02740.fsework +++| DANEXT=FETCRI; 02754 M00S02741.fsework +++| 02755 M00S02742.fsework +++| PADISP[0] = 1; # SET UP PATH[0] # 02756 M00S02743.fsework +++| PAFIRST[0] = 0; 02757 M00S02744.fsework +++| PALAST[0] = -1; 02758 M00S02745.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[0]]); 02759 M00S02746.fsework +++| IF PADIR[0] THEN 02760 M00S02747.fsework +++| BEGIN 02761 M00S02748.fsework +++| FOR DISP = 1 STEP 1 UNTIL PAFINAL[0] 02762 M00S02749.fsework +++| DO PALAST[0] = PALAST[0] + DIRNL[DISP]; 02763 M00S02750.fsework +++| END 02764 M00S02751.fsework +++| ELSE # NOTE INTERNAL CHARSET SIGN BIT USAGE # 02765 M00S02752.fsework +++| BEGIN 02766 M00S02753.fsework +++| FOR DISP = 1 STEP 1 UNTIL PAFINAL[0] 02767 M00S02754.fsework +++| DO IF B<0,1>DATWORD[DISP] NQ 0 THEN PALAST[0] = PALAST[0] + 1; 02768 M00S02755.fsework +++| END 02769 M00S02756.fsework +++| 02770 M00S02757.fsework +++| IORESUMED=TRUE; # RESET FLAGS READ WITH DATA # 02771 M00S02758.fsework +++| IOACT=FALSE; 02772 M00S02759.fsework +++| IOREAD=FALSE; 02773 M00S02760.fsework +++| IOWRITE=FALSE; 02774 M00S02761.fsework +++| IOAPEND=FALSE; 02775 M00S02762.fsework +++| 02776 M00S02763.fsework +++| PALVL = 0; # BUILD REST OF PATH # 02777 M00S02764.fsework +++| NEWCURL=0; 02778 M00S02765.fsework +++| P<MVLNBUF>=LOC(LINEBUF); 02779 M00S02766.fsework +++| POSR; 02780 M00S02767.fsework +++| P<MVLNBUF>=0; 02781 M00S02768.fsework +++| 02782 M00S02769.fsework +++| SEGMENTVER=0; # INTERLOCK FILE ONWESHIP # 02783 M00S02770.fsework +++| CLEANALL; 02784 M00S02771.fsework +++| 02785 M00S02772.fsework +++| END 02786 M00S02773.fsework +++| 02787 M00S02774.fsework +++| IOEND 02788 M00S02775.fsework +++|PAGE 02789 M00S02776.fsework +++| 02790 M00S02777.fsework +++|CONTROL IFEQ SINGLE,1; 02791 M00S02778.fsework +++| 02792 M00S02779.fsework +++|PROC INITIO; 02793 M00S02780.fsework +++| IOBEGIN(INITIO) 02794 M00S02781.fsework +++|# 02795 M00S02782.fsework +++|** INITIO - FORMAT A NEW WORKFILE. 02796 M00S02783.fsework +++|* 02797 M00S02784.fsework +++|* INITIO IS USED TO BUILD A WORKFILE FROM SCRATCH OR TO 02798 M00S02785.fsework +++|* DISCARD OLD WORKFILE CONTENT AND REFRESH IT. 02799 M00S02786.fsework +++|* 02800 M00S02787.fsework +++|* ENTRY NO CONDITIONS. 02801 M00S02788.fsework +++|* 02802 M00S02789.fsework +++|* EXIT FILE INITIALIZED. 02803 M00S02790.fsework +++|* ALL PATH CONTROLS NOMINAL. 02804 M00S02791.fsework +++|* ALL CACHE CONTROL NOMINAL. 02805 M00S02792.fsework +++|* MAXDA - ZERO 02806 M00S02793.fsework +++|* DANEXT - FIRST ALLOCATABLE DISK ADDRESS RIGHT AFTER 02807 M00S02794.fsework +++|* ROOT SECTOR, AND SCALAR AND ARRAY DATA SEGMENTS. 02808 M00S02795.fsework +++|* IORESUMED - TRUE TO SHOW WORKIO ACTIVE. 02809 M00S02796.fsework +++|* SEGMENTVER - ZERO IN MEMORY AND ON DISK TO INTERLOCK. 02810 M00S02797.fsework +++|* 02811 M00S02798.fsework +++|* CALLS INITFET, EVICT, WAIT, INIT, ALLOCCACHE, CLEANALL. 02812 M00S02799.fsework +++|# 02813 M00S02800.fsework +++| INITFET(DISK,DSKSIZ); 02814 M00S02801.fsework +++| EVICT(FET,0); 02815 M00S02802.fsework +++| WAIT; 02816 M00S02803.fsework +++| 02817 M00S02804.fsework +++| INIT; 02818 M00S02805.fsework +++| MAXDA = 0; # SET MAXDA AND DANEXT # 02819 M00S02806.fsework +++| DANEXT = 2+DATAPRUS+ARRAYPRUS; 02820 M00S02807.fsework +++| 02821 M00S02808.fsework +++| PAHEAD[0] = 0; # BUILD TOP BLOCK # 02822 M00S02809.fsework +++| PADATA[0] = TRUE; 02823 M00S02810.fsework +++| PATOP[0] = TRUE; 02824 M00S02811.fsework +++| PADIRTY[0] = TRUE; 02825 M00S02812.fsework +++| PADA[0] = 1; 02826 M00S02813.fsework +++| PAFINAL[0] = 1; 02827 M00S02814.fsework +++| PL=0; 02828 M00S02815.fsework +++| ALLOCCACHE; 02829 M00S02816.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[0]]); 02830 M00S02817.fsework +++| DATWORD[1] = NULLIN; 02831 M00S02818.fsework +++| CURNW = 1; 02832 M00S02819.fsework +++| 02833 M00S02820.fsework +++| PADEPTH[0] = 0; 02834 M00S02821.fsework +++| PADISP[0] = 1; # SET UP PATH # 02835 M00S02822.fsework +++| PAFIRST[0] = 0; 02836 M00S02823.fsework +++| PALAST[0] = 0; 02837 M00S02824.fsework +++| PALVL = 0; 02838 M00S02825.fsework +++| CURRENT = 0; 02839 M00S02826.fsework +++| IORESUMED=TRUE; # SHOW WORKIO ALIVE # 02840 M00S02827.fsework +++| 02841 M00S02828.fsework +++| SEGMENTVER = 0; # INTERLOCK FILE OWNERSHIP # 02842 M00S02829.fsework +++| CLEANALL; 02843 M00S02830.fsework +++| 02844 M00S02831.fsework +++| IOEND 02845 M00S02832.fsework +++| 02846 M00S02833.fsework +++|CONTROL FI; 02847 M00S02834.fsework +++|PAGE 02848 M00S02835.fsework +++|PROC CHECKIO; 02849 M00S02836.fsework +++| IOBEGIN(CHECKIO) 02850 M00S02837.fsework +++|# 02851 M00S02838.fsework +++|** CHECKIO - CHECKPOINT WORKFILE. 02852 M00S02839.fsework +++|* 02853 M00S02840.fsework +++|* CHECKIO IS USED TO ASSURE THAT ALL MEMORY DATA IS FULLY 02854 M00S02841.fsework +++|* WRITTEN TO DISK. THIS CAN BE USED TO PREPARE FOR END OF 02855 M00S02842.fsework +++|* JOB STEP OR FOR TRANSITION BETWEEN SINGLE AND MULTIPLE USER 02856 M00S02843.fsework +++|* VERSIONS OF THE EDITOR. BY CHECKPOINTING THE WORKFILE, IT 02857 M00S02844.fsework +++|* BECOMES POSSIBLE TO EXECUTE THE RESUMIO ROUTINE AND FULLY 02858 M00S02845.fsework +++|* RESTORE THE EDITOR STATUS. 02859 M00S02846.fsework +++|* 02860 M00S02847.fsework +++|* ENTRY IORESUMED - SHOWS WHETHER WORKFILE MANAGER EVER ACTIVE. 02861 M00S02848.fsework +++|* CURRENT - CURRENT LINE ORDINAL. 02862 M00S02849.fsework +++|* 02863 M00S02850.fsework +++|* EXIT SEGMENTVER, SEGMENTLEN1, SEGMENTLEN2 - SETUP. 02864 M00S02851.fsework +++|* CACHE FLUSHED, FET AND CIRCULAR BUFFER COMPLETE. 02865 M00S02852.fsework +++|* 02866 M00S02853.fsework +++|* CALLS CLEANALL. 02867 M00S02854.fsework +++|# 02868 M00S02855.fsework +++| IF NOT IORESUMED THEN IORET # WORKIO NEVER ALIVE # 02869 M00S02856.fsework +++| 02870 M00S02857.fsework +++| SAVECURL=CURRENT; 02871 M00S02858.fsework +++| SEGMENTVER = IOVERSION; # SHOW VALID WORKFILE FORMAT # 02872 M00S02859.fsework +++| SEGMENTLEN1 = DATALEN; 02873 M00S02860.fsework +++| SEGMENTLEN2 = ARRAYLEN; 02874 M00S02861.fsework +++| CLEANALL; # WRITE OUT WHOLE PATH # 02875 M00S02862.fsework +++| 02876 M00S02863.fsework +++| IOEND 02877 M00S02864.fsework +++| 02878 M00S02865.fsework +++| 02879 M00S02866.fsework +++| END TERM
cdc/nos2.source/opl.opl871/deck/fsework.001.txt ยท Last modified: by 127.0.0.1