cdc:nos2.source:opl.opl871:deck:fsework.001
Deck FSEWORK Part 001
2 Modifications
Listing Sections
- Deck FSEWORK Start
- Deck FSEWORK Part 1 (Line 2118)
Source
Seq # *Modification Id* Act ----------------------------+ 02118 M01S02105.fsework +++|* 02119 M01S02106.fsework +++|* SPLITAPEND FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02120 M01S02107.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02121 M01S02108.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02122 M01S02109.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02123 M01S02110.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02124 M01S02111.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02125 M01S02112.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02126 M01S02113.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02127 M01S02114.fsework +++|* 02128 M01S02115.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02129 M01S02116.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02130 M01S02117.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02131 M01S02118.fsework +++|* ALL PATH CONTROLS SETUP. 02132 M01S02119.fsework +++|* ALL CACHE CONTROLS SETUP. 02133 M01S02120.fsework +++|* 02134 M01S02121.fsework +++|* EXIT PL - DECREMENTED. 02135 M01S02122.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02136 M01S02123.fsework +++|* OVERFLOW TEXT. 02137 M01S02124.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02138 M01S02125.fsework +++|* NWNEW, NEWBEFORE, NWAFTER - SET FOR ITERATION. 02139 M01S02126.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02140 M01S02127.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02141 M01S02128.fsework +++|* 02142 M01S02129.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD. 02143 M01S02130.fsework +++|* 02144 M01S02131.fsework +++|* USES P<TOO>. 02145 M01S02132.fsework +++|# 02146 M01S02133.fsework +++| CLEAN; # CLEAN OLD BLOCK # 02147 M01S02134.fsework +++| 02148 M01S02135.fsework +++| ALLOC; # BUILD NEW BLOCK # 02149 M01S02136.fsework +++| ALLOCCACHE; 02150 M01S02137.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02151 M01S02138.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02152 M01S02139.fsework +++| PAFINAL[PL] = NWNEW; 02153 M01S02140.fsework +++| PADIRTY[PL] = TRUE; 02154 M01S02141.fsework +++| 02155 M01S02142.fsework +++| PADISP[PL] = 1; # FIX UP PATH # 02156 M01S02143.fsework +++| PAFIRST[PL] = FIRST; 02157 M01S02144.fsework +++| PALAST[PL] = LAST; 02158 M01S02145.fsework +++| 02159 M01S02146.fsework +++| NEWDA[0] = PADA[PL]; # BUILD NEW DIR ENTRY # 02160 M01S02147.fsework +++| NEWNL[0] = PALAST[PL] - PAFIRST[PL] + 1; 02161 M01S02148.fsework +++| NWNEW = 1; 02162 M01S02149.fsework +++| 02163 M01S02150.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02164 M01S02151.fsework +++| NWBEFORE = PADISP[PL]; 02165 M01S02152.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02166 M01S02153.fsework +++| DISP = PADISP[PL] + 1; 02167 M01S02154.fsework +++| PADISP[PL] = DISP; 02168 M01S02155.fsework +++| IOEND 02169 M01S02156.fsework +++|PAGE 02170 M01S02157.fsework +++| PROC SPLITBEFORE; 02171 M01S02158.fsework +++| IOBEGIN(SPLITBEFORE) 02172 M01S02159.fsework +++|# 02173 M01S02160.fsework +++|** SPLITBEFORE - SPLIT SECTOR JUST BEFORE INSERTION POINT. 02174 M01S02161.fsework +++|* 02175 M01S02162.fsework +++|* SPLITBEFORE IS USED TO OVERFLOW ANY NON-ROOT SECTOR UNDER 02176 M01S02163.fsework +++|* THE CONDITION THAT THE OVERFLOW TEXT MUST BE INSERTED 02177 M01S02164.fsework +++|* SOMEWHERE IN THE MIDDLE OF THE TEXT ALREADY CONTAINED IN 02178 M01S02165.fsework +++|* THE SECTOR, AND NEW TEXT WOULD NOT FIT WITHIN THE FIRST 02179 M01S02166.fsework +++|* SECTOR OF THE NEW PAIR. THUS, THE SECTOR IS SPLIT JUST IN 02180 M01S02167.fsework +++|* FRONT OF THE INSERTION POINT, AND THE SECOND SECTOR 02181 M01S02168.fsework +++|* RESULTING FROM THE SPLIT WILL START WITH THE OVERFLOW TEXT 02182 M01S02169.fsework +++|* AND CONTINUE WITH THE REMAINING TEXT SPLIT OUT OF THE 02183 M01S02170.fsework +++|* ORIGINAL SECTOR. 02184 M01S02171.fsework +++|* 02185 M01S02172.fsework +++|* SINCE SOME EXISTING TEXT MUST BE REMOVED FROM THE CURRENT 02186 M01S02173.fsework +++|* SECTOR, IT IS NOT POSSIBLE TO KEEP USING THE SAME SECTOR, 02187 M01S02174.fsework +++|* UNDER THE RULE THAT NOTHING CAN BE POINTED TO WITHOUT FIRST 02188 M01S02175.fsework +++|* EXISTING ON DISK. THEREFORE, TWO COMPLETELY NEW SECTORS 02189 M01S02176.fsework +++|* ARE CREATED AND THE ORIGINAL SECTOR BECOMES A FRAGMENT. 02190 M01S02177.fsework +++|* SINCE THE INSERTED TEXT GOES INTO THE SECOND SECTOR OF THE 02191 M01S02178.fsework +++|* NEW PAIR, THAT IS THE SECTOR WHICH IS LEFT AS THE CURRENT 02192 M01S02179.fsework +++|* SECTOR FOR THIS TREE PATH LEVEL. 02193 M01S02180.fsework +++|* 02194 M01S02181.fsework +++|* SPLITBEFORE REQUIRES THAT AT LEAST ONE CACHE FRAME IS 02195 M01S02182.fsework +++|* AVAILABLE FOR ALLOCATION. THE EXISTING CACHE FRAME FOR 02196 M01S02183.fsework +++|* THIS TREE LEVEL IS RECYCLED TO PROVIDE THE SECOND SECTOR OF 02197 M01S02184.fsework +++|* CAPACITY. THE EXISTING CACHE FRAME IS FIRST SUBJECTED TO 02198 M01S02185.fsework +++|* THE NORMAL "CLEAN" ROUTINE TO ASSURE THAT ANY PENDING 02199 M01S02186.fsework +++|* CHANGES ARE FLUSHED TO DISK. 02200 M01S02187.fsework +++|* 02201 M01S02188.fsework +++|* SPLITBEFORE FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02202 M01S02189.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02203 M01S02190.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02204 M01S02191.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02205 M01S02192.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02206 M01S02193.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02207 M01S02194.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02208 M01S02195.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02209 M01S02196.fsework +++|* 02210 M01S02197.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02211 M01S02198.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02212 M01S02199.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02213 M01S02200.fsework +++|* ALL PATH CONTROLS SETUP. 02214 M01S02201.fsework +++|* ALL CACHE CONTROLS SETUP. 02215 M01S02202.fsework +++|* 02216 M01S02203.fsework +++|* EXIT PL - DECREMENTED. 02217 M01S02204.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02218 M01S02205.fsework +++|* OVERFLOW TEXT AND SPLIT-OFF ORGINAL TEXT. 02219 M01S02206.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02220 M01S02207.fsework +++|* NWNEW, NEWBEFORE, NWAFTER - SET FOR ITERATION. 02221 M01S02208.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02222 M01S02209.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02223 M01S02210.fsework +++|* 02224 M01S02211.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD, LAST. 02225 M01S02212.fsework +++|* 02226 M01S02213.fsework +++|* USES P<TOO>. 02227 M01S02214.fsework +++|# 02228 M01S02215.fsework +++| 02229 M01S02216.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + 1; # SAVE OLD DATA # 02230 M01S02217.fsework +++| MOVEWD(PAFINAL[PL],FROM,OBF); 02231 M01S02218.fsework +++| 02232 M01S02219.fsework +++| DEALLOC; # FREE UP OLD BLOCK # 02233 M01S02220.fsework +++| 02234 M01S02221.fsework +++| ALLOC; # BUILD OFF BLOCK # 02235 M01S02222.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02236 M01S02223.fsework +++| MOVEWD(NWBEFORE,OBF,TOO); 02237 M01S02224.fsework +++| PAFINAL[PL] = NWBEFORE; 02238 M01S02225.fsework +++| 02239 M01S02226.fsework +++| ODA = PADA[PL]; # REMEMBER THIS # 02240 M01S02227.fsework +++| ONL = FIRST - PAFIRST[PL]; 02241 M01S02228.fsework +++| 02242 M01S02229.fsework +++| PADIRTY[PL] = TRUE; # GET RID OF OFF BLOCK # 02243 M01S02230.fsework +++| CLEAN; 02244 M01S02231.fsework +++| 02245 M01S02232.fsework +++| ALLOC; # BUILD NEW BLOCK # 02246 M01S02233.fsework +++| ALLOCCACHE; 02247 M01S02234.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02248 M01S02235.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02249 M01S02236.fsework +++| P<FROM> = LOC(OBF) + DISP-1; 02250 M01S02237.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWNEW + 1; 02251 M01S02238.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02252 M01S02239.fsework +++| PAFINAL[PL] = NWNEW + NWAFTER; 02253 M01S02240.fsework +++| PADIRTY[PL] = TRUE; 02254 M01S02241.fsework +++| 02255 M01S02242.fsework +++| PADISP[PL] = PADISP[PL] - NWBEFORE; # FIX UP PATH # 02256 M01S02243.fsework +++| PAFIRST[PL] == FIRST; 02257 M01S02244.fsework +++| PALAST[PL] = PALAST[PL] + NL; 02258 M01S02245.fsework +++| LAST = PALAST[PL]; 02259 M01S02246.fsework +++| 02260 M01S02247.fsework +++| NEWDA[0] = ODA; # BUILD NEW DIR ENTRIES # 02261 M01S02248.fsework +++| NEWNL[0] = ONL; 02262 M01S02249.fsework +++| NEWDA[1] = PADA[PL]; 02263 M01S02250.fsework +++| NEWNL[1] = PALAST[PL] - PAFIRST[PL] + 1; 02264 M01S02251.fsework +++| NWNEW = 2; 02265 M01S02252.fsework +++| 02266 M01S02253.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02267 M01S02254.fsework +++| NWBEFORE = PADISP[PL] - 1; 02268 M01S02255.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02269 M01S02256.fsework +++| DISP = PADISP[PL] + 1; 02270 M01S02257.fsework +++| PADISP[PL] = DISP; 02271 M01S02258.fsework +++| IOEND 02272 M01S02259.fsework +++|PAGE 02273 M01S02260.fsework +++| PROC SPLITAFTER; 02274 M01S02261.fsework +++| IOBEGIN(SPLITAFTER) 02275 M01S02262.fsework +++|# 02276 M01S02263.fsework +++|** SPLITAFTER - SPLIT SECTOR JUST AFTER INSERTION POINT. 02277 M01S02264.fsework +++|* 02278 M01S02265.fsework +++|* SPLITAFTER IS USED TO OVERFLOW ANY NON-ROOT SECTOR UNDER 02279 M01S02266.fsework +++|* THE CONDITION THAT THE OVERFLOW TEXT MUST BE INSERTED 02280 M01S02267.fsework +++|* SOMEWHERE IN THE MIDDLE OF THE TEXT ALREADY CONTAINED IN 02281 M01S02268.fsework +++|* THE SECTOR, AND NEW TEXT WOULD FIT WITHIN THE FIRST 02282 M01S02269.fsework +++|* SECTOR OF THE NEW PAIR. THUS, THE SECTOR IS SPLIT JUST 02283 M01S02270.fsework +++|* BEYOND THE INSERTED TEXT, AND THE SECOND SECTOR 02284 M01S02271.fsework +++|* RESULTING FROM THE SPLIT WILL START WITH THE REMAINING 02285 M01S02272.fsework +++|* TEXT SPLIT OUT OF THE ORGINAL SECTOR. 02286 M01S02273.fsework +++|* 02287 M01S02274.fsework +++|* SINCE SOME EXISTING TEXT MUST BE REMOVED FROM THE CURRENT 02288 M01S02275.fsework +++|* SECTOR, IT IS NOT POSSIBLE TO KEEP USING THE SAME SECTOR, 02289 M01S02276.fsework +++|* UNDER THE RULE THAT NOTHING CAN BE POINTED TO WITHOUT FIRST 02290 M01S02277.fsework +++|* EXISTING ON DISK. THEREFORE, TWO COMPLETELY NEW SECTORS 02291 M01S02278.fsework +++|* ARE CREATED AND THE ORIGINAL SECTOR BECOMES A FRAGMENT. 02292 M01S02279.fsework +++|* SINCE THE INSERTED TEXT GOES INTO THE FIRST SECTOR OF THE 02293 M01S02280.fsework +++|* NEW PAIR, THAT IS THE SECTOR WHICH IS LEFT AS THE CURRENT 02294 M01S02281.fsework +++|* SECTOR FOR THIS TREE PATH LEVEL. 02295 M01S02282.fsework +++|* 02296 M01S02283.fsework +++|* SPLITAFTER REQUIRES THAT AT LEAST ONE CACHE FRAME IS 02297 M01S02284.fsework +++|* AVAILABLE FOR ALLOCATION. THE EXISTING CACHE FRAME FOR 02298 M01S02285.fsework +++|* THIS TREE LEVEL IS RECYCLED TO PROVIDE THE SECOND SECTOR OF 02299 M01S02286.fsework +++|* CAPACITY. THE EXISTING CACHE FRAME IS FIRST SUBJECTED TO 02300 M01S02287.fsework +++|* THE NORMAL "CLEAN" ROUTINE TO ASSURE THAT ANY PENDING 02301 M01S02288.fsework +++|* CHANGES ARE FLUSHED TO DISK. 02302 M01S02289.fsework +++|* 02303 M01S02290.fsework +++|* SPLITAFTER FINISHES ITS PROCESSING BY SETTING UP PARAMETERS 02304 M01S02291.fsework +++|* FOR THE POSSIBLE CALLING OF ANY SPLIT ROUTINE FOR THE NEXT 02305 M01S02292.fsework +++|* HIGHER LEVEL. NOTE THAT ALL SPLIT ROUTINES ANTICIPATE THAT 02306 M01S02293.fsework +++|* THE CALLER WILL ITERATE SO LONG AS PARAMETERS INDICATE THAT 02307 M01S02294.fsework +++|* MORE SPLITTING NEEDS TO BE DONE. SINCE EACH SPLIT ROUTINE 02308 M01S02295.fsework +++|* DECREMENTS THE CURRENT TREE LEVEL, THE EFFECT IS TO WORK 02309 M01S02296.fsework +++|* FROM THE BOTTOM OF THE TREE TOWARDS THE ROOT, SPLITTING 02310 M01S02297.fsework +++|* UNTIL A LEVEL IS REACHED WHERE EVERYTHING FITS. 02311 M01S02298.fsework +++|* 02312 M01S02299.fsework +++|* ENTRY P<NEW> - LOCATION OF OVERFLOW TEXT. 02313 M01S02300.fsework +++|* NWNEW - NUMBER OF WORDS IN OVERFLOW TEXT. 02314 M01S02301.fsework +++|* PL - CURRENT LEVEL IN TREE PATH. 02315 M01S02302.fsework +++|* ALL PATH CONTROLS SETUP. 02316 M01S02303.fsework +++|* ALL CACHE CONTROLS SETUP. 02317 M01S02304.fsework +++|* 02318 M01S02305.fsework +++|* EXIT PL - DECREMENTED. 02319 M01S02306.fsework +++|* SECTOR AT ORIGINAL TREE LEVEL REBUILT TO CONTAIN 02320 M01S02307.fsework +++|* OVERFLOW TEXT AND SPLIT-OFF ORGINAL TEXT. 02321 M01S02308.fsework +++|* PREVIOUS SECTOR AT ORIGINAL TREE LEVEL RELEASED. 02322 M01S02309.fsework +++|* NWNEW, NEWAFTER, NWAFTER - SET FOR ITERATION. 02323 M01S02310.fsework +++|* NEWDA, NEWNL - SET FOR ITERATION. 02324 M01S02311.fsework +++|* DISP, PADISP[NEW PL] - INCREMENTED FOR ITERATION. 02325 M01S02312.fsework +++|* 02326 M01S02313.fsework +++|* CALLS ALLOC, ALLOCCACHE, MOVEWD, CLEAN, DEALLOC. 02327 M01S02314.fsework +++|* 02328 M01S02315.fsework +++|* USES P<TOO>, FIRST, LAST. 02329 M01S02316.fsework +++|# 02330 M01S02317.fsework +++| 02331 M01S02318.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + 1; # SAVE OLD DATA # 02332 M01S02319.fsework +++| MOVEWD(PAFINAL[PL],FROM,OBF); 02333 M01S02320.fsework +++| 02334 M01S02321.fsework +++| DEALLOC; # FREE UP OLD BLOCK # 02335 M01S02322.fsework +++| 02336 M01S02323.fsework +++| ALLOC; # BUILD OFF BLOCK # 02337 M01S02324.fsework +++| P<FROM> = LOC(OBF) + DISP-1; 02338 M01S02325.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02339 M01S02326.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02340 M01S02327.fsework +++| PAFINAL[PL] = NWAFTER; 02341 M01S02328.fsework +++| 02342 M01S02329.fsework +++| ODA = PADA[PL]; # REMEMBER THIS # 02343 M01S02330.fsework +++| ONL = PALAST[PL] + NL - LAST; 02344 M01S02331.fsework +++| 02345 M01S02332.fsework +++| PADIRTY[PL] = TRUE; # GET RID OF OFF BLOCK # 02346 M01S02333.fsework +++| CLEAN; 02347 M01S02334.fsework +++| 02348 M01S02335.fsework +++| ALLOC; # BUILD NEW BLOCK # 02349 M01S02336.fsework +++| ALLOCCACHE; 02350 M01S02337.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + 1; 02351 M01S02338.fsework +++| MOVEWD(NWBEFORE,OBF,TOO); 02352 M01S02339.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE + 1; 02353 M01S02340.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02354 M01S02341.fsework +++| PAFINAL[PL] = NWBEFORE + NWNEW; 02355 M01S02342.fsework +++| PADIRTY[PL] = TRUE; 02356 M01S02343.fsework +++| 02357 M01S02344.fsework +++| FIRST = PAFIRST[PL]; # FIX UP PATH # 02358 M01S02345.fsework +++| LAST == PALAST[PL]; 02359 M01S02346.fsework +++| LAST = LAST + NL; 02360 M01S02347.fsework +++| 02361 M01S02348.fsework +++| NEWDA[0] = PADA[PL]; # BUILD NEW DIR ENTRIES # 02362 M01S02349.fsework +++| NEWNL[0] = PALAST[PL] - PAFIRST[PL] + 1; 02363 M01S02350.fsework +++| NEWDA[1] = ODA; 02364 M01S02351.fsework +++| NEWNL[1] = ONL; 02365 M01S02352.fsework +++| NWNEW = 2; 02366 M01S02353.fsework +++| 02367 M01S02354.fsework +++| PL = PL - 1; # SET UP NEXT PASS # 02368 M01S02355.fsework +++| NWBEFORE = PADISP[PL] - 1; 02369 M01S02356.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02370 M01S02357.fsework +++| DISP = PADISP[PL] + 1; 02371 M01S02358.fsework +++| IOEND 02372 M01S02359.fsework +++|PAGE 02373 M01S02360.fsework +++|PROC CHANGE; # CHANGE TREE # 02374 M01S02361.fsework +++| IOBEGIN(CHANGE) 02375 M01S02362.fsework +++|# 02376 M01S02363.fsework +++|** CHANGE - APPLY CHANGES TO TREE STRUCTURE. 02377 M01S02364.fsework +++|* 02378 M01S02365.fsework +++|* CHANGE IS THE PRINCIPAL ALGORITHM USED TO MANIPULATE THE 02379 M01S02366.fsework +++|* TREE STRUCTURE. CHANGE IS DESIGNED TO BE CALLED BY THE 02380 M01S02367.fsework +++|* INS, REP, AND DEL ENTRY POINTS. THE ALGORITHM WORKS IN 02381 M01S02368.fsework +++|* THREE PHASES. THE FIRST PHASE TAKES CARE OF CASES WHERE AN 02382 M01S02369.fsework +++|* INSERTION OF A LINE OR THE REPLACEMENT OF A LINE WITH AN 02383 M01S02370.fsework +++|* ENLARGED VERSION WILL CAUSE THE CURRENT DATA SECTOR (THE 02384 M01S02371.fsework +++|* BOTTOM LEVEL OF THE TREE STRUCTURE) TO OUTGROW THE SECTOR 02385 M01S02372.fsework +++|* CAPACITY AND CAUSE SPLITTING INTO TWO SECTORS. THIS CAUSES 02386 M01S02373.fsework +++|* ADDITIONAL DIRECTORY ENTRIES TO BE REQUIRED IN THE HIGHER 02387 M01S02374.fsework +++|* TREE LEVELS, WHICH CAN IN TURN CAUSE ONE OR MORE DIRECTORY 02388 M01S02375.fsework +++|* LEVELS TO BE SPLIT INTO MULTIPLE SECTORS. IN THE EXTREME 02389 M01S02376.fsework +++|* CASE, THE ROOT LEVEL OF THE TREE MAY OVERFLOW, IN WHICH 02390 M01S02377.fsework +++|* CASE A NEW INTERMEDIATE LEVEL OF THE TREE MUST BE CREATED, 02391 M01S02378.fsework +++|* WITH THE ROOT SECTOR CONVERTED INTO A DIRECTORY FOR THE 02392 M01S02379.fsework +++|* INTERMEDIATE LEVEL. 02393 M01S02380.fsework +++|* 02394 M01S02381.fsework +++|* AFTER THE FIRST PHASE HAS EXHAUSTED ITS ITERATION, THE 02395 M01S02382.fsework +++|* SECOND PHASE TAKES OVER, IDENTIFYING ANY TREE LEVEL 02396 M01S02383.fsework +++|* STARTING WITH THE DATA LEVEL WHICH HAS BECOME EMPTY AS THE 02397 M01S02384.fsework +++|* RESULT OF DELETIONS. THE SECOND PHASE IS THUS MUTUALLY 02398 M01S02385.fsework +++|* EXCLUSIVE OF THE FIRST PHASE. 02399 M01S02386.fsework +++|* 02400 M01S02387.fsework +++|* THE THIRD PHASE IS A CLEANUP OPERATION. WHILE EACH OF THE 02401 M01S02388.fsework +++|* FIRST TWO PHASES MAY BE A NO-OP, (AND AT LEAST ONE OF THE 02402 M01S02389.fsework +++|* FIRST TWO PHASES WILL INDEED BE A NO-OP), THE THIRD PHASE 02403 M01S02390.fsework +++|* ALWAYS IS IN EFFECT. THE CLEANUP OPERATION CONSISTS OF THE 02404 M01S02391.fsework +++|* APPLICATION OF LEFT-OVER CHANGES. LEFTOVER CHANGES MAY 02405 M01S02392.fsework +++|* CONSTITUTE THE ENTIRE CHANGE IF NEITHER PRELIMINARY PHASE 02406 M01S02393.fsework +++|* WAS NEEDED, OR IF ONE OF THE FIRST TWO PHASES WAS USED, 02407 M01S02394.fsework +++|* THEN IT WILL HAVE LEFT RESIDUAL CHANGES TO BE APPLIED ONE 02408 M01S02395.fsework +++|* LEVEL CLOSER TO THE ROOT THAN THE LAST LEVEL AFFECTED BY 02409 M01S02396.fsework +++|* THE SPLITTING OR COLLAPSING. 02410 M01S02397.fsework +++|* 02411 M01S02398.fsework +++|* ACTUAL APPLICATION OF CHANGES, WHETHER PERFORMED BY THE 02412 M01S02399.fsework +++|* THIRD PHASE OF THE CHANGE ROUTINE, OR WITHIN ONE OF THE 02413 M01S02400.fsework +++|* SPLIT ROUTINES SELECTED BY THE FIRST PHASE OF THE CHANGE 02414 M01S02401.fsework +++|* ROUTINE, SIMPLY CONSIST OF OPENING UP A GAP AT THE RIGHT 02415 M01S02402.fsework +++|* MEMORY LOCATION, OF ZERO, POSITIVE, OR NEGATIVE LENGTH, AND 02416 M01S02403.fsework +++|* MOVING IN THE TEXT OF THE CHANGE, WHICH CAN CONSIST OF ZERO 02417 M01S02404.fsework +++|* OR MORE WORDS. 02418 M01S02405.fsework +++|* 02419 M01S02406.fsework +++|* THE CLEANUP PHASE ALSO INCREMENTS OR DECREMENTS THE COUNT 02420 M01S02407.fsework +++|* OF LINES BRACKETED BY EACH LEVEL OF THE TREE. 02421 M01S02408.fsework +++|* 02422 M01S02409.fsework +++|* ENTRY PALVL - DEEPEST LEVEL IN TREE STRUCTURE. 02423 M01S02410.fsework +++|* PL - CURRENT TREE LEVEL MUST EQUAL PALVL. 02424 M01S02411.fsework +++|* NL - CHANGE IN NUMBER OF LINES IN WORKFILE. 02425 M01S02412.fsework +++|* NWBEFORE - NUMBER OF WORDS BEFORE POINT OF CHANGE. 02426 M01S02413.fsework +++|* NWAFTER - NUMBER OF WORDS AFTER POINT OF CHANGE. 02427 M01S02414.fsework +++|* NWNEW - NUMBER OF WORDS IN CHANGED TEXT. 02428 M01S02415.fsework +++|* DISP - POINTS JUST AFTER CURRENT LINE. 02429 M01S02416.fsework +++|* LINEBUF - CONTAINS TEXT OF CHANGE. 02430 M01S02417.fsework +++|* ALL PATH CONTROLS - SETUP. 02431 M01S02418.fsework +++|* ALL CACHE CONTROLS - SETUP. 02432 M01S02419.fsework +++|* 02433 M01S02420.fsework +++|* EXIT PL - ZERO. 02434 M01S02421.fsework +++|* PALVL - INCREMENTED/DECREMENTED IF TREE DEPTH CHANGED. 02435 M01S02422.fsework +++|* DISP, CURNW - BRACKET NEW CURRENT LINE. 02436 M01S02423.fsework +++|* ALL PATH, CACHE CONTROLS - UPDATED. 02437 M01S02424.fsework +++|* FET AND CIRCULAR BUFFER USED IF NEEDED. 02438 M01S02425.fsework +++|* 02439 M01S02426.fsework +++|* CALLS COUNTCACHE, FLUSHCACHE, SPLITTOP, SPLITAPEND, 02440 M01S02427.fsework +++|* SPLITBEFORE, SPLITAFTER, RECLAIMCACHE, DEALLOC, CLEAN, 02441 M01S02428.fsework +++|* MOVEWD. 02442 M01S02429.fsework +++|* 02443 M01S02430.fsework +++|* USES P<NEW>, P<FROM>, P<TOO>, FIRST, LAST, NWNEW, 02444 M01S02431.fsework +++|* NWBEFORE, NWAFTER, NL. 02445 M01S02432.fsework +++|# 02446 M01S02433.fsework +++| P<NEW> = LOC(LINEBUF); # SET THINGS UP # 02447 M01S02434.fsework +++| FIRST = CURRENT + NL; 02448 M01S02435.fsework +++| LAST = FIRST; 02449 M01S02436.fsework +++| CURNW = NWNEW; 02450 M01S02437.fsework +++| 02451 M01S02438.fsework +++| FOR PL = PL WHILE NWBEFORE+NWNEW+NWAFTER GR 63 DO 02452 M01S02439.fsework +++| BEGIN # DO ALL SPLITS # 02453 M01S02440.fsework +++| IF COUNTCACHE LQ 2 THEN FLUSHCACHE; 02454 M01S02441.fsework +++| IF PL EQ 0 THEN SPLITTOP; 02455 M01S02442.fsework +++| IF NWBEFORE EQ PAFINAL[PL] THEN SPLITAPEND; 02456 M01S02443.fsework +++| ELSE IF NWBEFORE+NWNEW LQ 63 THEN SPLITAFTER; 02457 M01S02444.fsework +++| ELSE SPLITBEFORE; 02458 M01S02445.fsework +++| RECLAIMCACHE; 02459 M01S02446.fsework +++| P<NEW> = LOC(NDIR); 02460 M01S02447.fsework +++| END 02461 M01S02448.fsework +++| 02462 M01S02449.fsework +++| FOR PL = PL WHILE NWBEFORE+NWNEW+NWAFTER EQ 0 DO 02463 M01S02450.fsework +++| BEGIN # DO ALL COLLAPSING # 02464 M01S02451.fsework +++| DEALLOC; 02465 M01S02452.fsework +++| CLEAN; # TO FREE UP CACHE FRAME # 02466 M01S02453.fsework +++| PALVL = PALVL - 1; 02467 M01S02454.fsework +++| PL = PL - 1; 02468 M01S02455.fsework +++| NWBEFORE = PADISP[PL] - 1; 02469 M01S02456.fsework +++| NWAFTER = PAFINAL[PL] - PADISP[PL]; 02470 M01S02457.fsework +++| DISP = PADISP[PL] + 1; 02471 M01S02458.fsework +++| END 02472 M01S02459.fsework +++| 02473 M01S02460.fsework +++| P<FROM> = LOC(BFPRU[PACACHE[PL]]) + DISP; # SLIDE AFTER # 02474 M01S02461.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE +NWNEW + 1; 02475 M01S02462.fsework +++| MOVEWD(NWAFTER,FROM,TOO); 02476 M01S02463.fsework +++| 02477 M01S02464.fsework +++| P<TOO> = LOC(BFPRU[PACACHE[PL]]) + NWBEFORE + 1; # MOVE IN NEW # 02478 M01S02465.fsework +++| MOVEWD(NWNEW,NEW,TOO); 02479 M01S02466.fsework +++| 02480 M01S02467.fsework +++| PAFINAL[PL] = NWBEFORE + NWNEW + NWAFTER; 02481 M01S02468.fsework +++| PADIRTY[PL] = TRUE; 02482 M01S02469.fsework +++| PALAST[PL] = PALAST[PL] + NL; # FIX UP PATH # 02483 M01S02470.fsework +++| 02484 M01S02471.fsework +++| FOR PL = PL-1 STEP -1 UNTIL 0 DO # UPDATE HIGHER DIRS # 02485 M01S02472.fsework +++| BEGIN 02486 M01S02473.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[PL]]); 02487 M01S02474.fsework +++| DIRNL[PADISP[PL]] = DIRNL[PADISP[PL]] + NL; 02488 M01S02475.fsework +++| PADIRTY[PL] = TRUE; 02489 M01S02476.fsework +++| PALAST[PL] = PALAST[PL] + NL; 02490 M01S02477.fsework +++| END 02491 M01S02478.fsework +++| 02492 M01S02479.fsework +++| CURRENT = CURRENT + NL; # UPDATE CURRENT # 02493 M01S02480.fsework +++| 02494 M01S02481.fsework +++| IOEND 02495 M01S02482.fsework +++|PAGE 02496 M01S02483.fsework +++| 02497 M01S02484.fsework +++|PROC INS; 02498 M01S02485.fsework +++| IOBEGIN(INS) 02499 M01S02486.fsework +++|# 02500 M01S02487.fsework +++|** INS - INTERFACE FOR INSERTION OF LINES. 02501 M01S02488.fsework +++|* 02502 M01S02489.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02503 M01S02490.fsework +++|* LINEBUF - LINE IMAGE. 02504 M01S02491.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02505 M01S02492.fsework +++|* 02506 M01S02493.fsework +++|* EXIT CURRENT - INCREMENETED. 02507 M01S02494.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02508 M01S02495.fsework +++|* 02509 M01S02496.fsework +++|* CALLS LINESZ, CHANGE, WIOSTAT. 02510 M01S02497.fsework +++|* 02511 M01S02498.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP. 02512 M01S02499.fsework +++|# 02513 M01S02500.fsework +++| CONTROL IFEQ MULTI,1; 02514 M01S02501.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02515 M01S02502.fsework +++| CONTROL FI; 02516 M01S02503.fsework +++| 02517 M01S02504.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02518 M01S02505.fsework +++| DISP = PADISP[PL]; 02519 M01S02506.fsework +++| 02520 M01S02507.fsework +++| NL = 1; 02521 M01S02508.fsework +++| NWBEFORE = DISP + CURNW - 1; 02522 M01S02509.fsework +++| NWNEW = LINESZ(LINEBUF); 02523 M01S02510.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02524 M01S02511.fsework +++| DISP = DISP + CURNW; 02525 M01S02512.fsework +++| 02526 M01S02513.fsework +++| PADISP[PL] = DISP; 02527 M01S02514.fsework +++| 02528 M01S02515.fsework +++| CHANGE; 02529 M01S02516.fsework +++| IOEND 02530 M01S02517.fsework +++| 02531 M01S02518.fsework +++|PROC REP; 02532 M01S02519.fsework +++| IOBEGIN(REP) 02533 M01S02520.fsework +++|# 02534 M01S02521.fsework +++|** REP - INTERFACE FOR REPLACEMENT OF LINES. 02535 M01S02522.fsework +++|* 02536 M01S02523.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02537 M01S02524.fsework +++|* LINEBUF - LINE IMAGE. 02538 M01S02525.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02539 M01S02526.fsework +++|* 02540 M01S02527.fsework +++|* EXIT CURRENT - UNCHANGED. 02541 M01S02528.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02542 M01S02529.fsework +++|* 02543 M01S02530.fsework +++|* CALLS LINESZ, CHANGE, WIOSTAT. 02544 M01S02531.fsework +++|* 02545 M01S02532.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP. 02546 M01S02533.fsework +++|# 02547 M01S02534.fsework +++| 02548 M01S02535.fsework +++| CONTROL IFEQ MULTI,1; 02549 M01S02536.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02550 M01S02537.fsework +++| CONTROL FI; 02551 M01S02538.fsework +++| 02552 M01S02539.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02553 M01S02540.fsework +++| DISP = PADISP[PL]; 02554 M01S02541.fsework +++| 02555 M01S02542.fsework +++| NL = 0; 02556 M01S02543.fsework +++| NWBEFORE = DISP - 1; 02557 M01S02544.fsework +++| NWNEW = LINESZ(LINEBUF); 02558 M01S02545.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02559 M01S02546.fsework +++| DISP = DISP + CURNW; 02560 M01S02547.fsework +++| 02561 M01S02548.fsework +++| CHANGE; 02562 M01S02549.fsework +++| IOEND 02563 M01S02550.fsework +++| 02564 M01S02551.fsework +++|PROC DEL; 02565 M01S02552.fsework +++| IOBEGIN(DEL) 02566 M01S02553.fsework +++|# 02567 M01S02554.fsework +++|** DEL - INTERFACE FOR DELETION OF LINES. 02568 M01S02555.fsework +++|* 02569 M01S02556.fsework +++|* ENTRY CURRENT - CURRENT LINE. 02570 M01S02557.fsework +++|* ALL PATH AND CACHE CONTROLS SETUP. 02571 M01S02558.fsework +++|* DELETCTL - POST-POSITIONING INCREMENT. 02572 M01S02559.fsework +++|* 02573 M01S02560.fsework +++|* EXIT CURRENT - INCREMENTED IF DELETCTL WAS ONE. 02574 M01S02561.fsework +++|* LINEBUF - NEW CURRENT LINE IS READ UP. 02575 M01S02562.fsework +++|* ALL PATH AND CACHE CONTROL UPDATED. 02576 M01S02563.fsework +++|* DELETCTL - FORCED ZERO IF DELETED LAST LINE. 02577 M01S02564.fsework +++|* 02578 M01S02565.fsework +++|* CALLS CHANGE, WIOSTAT, POSR. 02579 M01S02566.fsework +++|* 02580 M01S02567.fsework +++|* USES PL, DISP, NL, NWBEFORE, NWNEW, NWAFTER, DISP, 02581 M01S02568.fsework +++|* P<MVLNBUF>, NEWCURL. 02582 M01S02569.fsework +++|# 02583 M01S02570.fsework +++| 02584 M01S02571.fsework +++| CONTROL IFEQ MULTI,1; 02585 M01S02572.fsework +++| WIOSTAT(0); # ACCUMULATE LINE ACCESES # 02586 M01S02573.fsework +++| CONTROL FI; 02587 M01S02574.fsework +++| 02588 M01S02575.fsework +++| PL = PALVL; # STANDARD INITCHANGE # 02589 M01S02576.fsework +++| DISP = PADISP[PL]; 02590 M01S02577.fsework +++| 02591 M01S02578.fsework +++| NL = -1; 02592 M01S02579.fsework +++| NWBEFORE = DISP - 1; 02593 M01S02580.fsework +++| NWNEW = 0; 02594 M01S02581.fsework +++| NWAFTER = PAFINAL[PL] - DISP - CURNW + 1; 02595 M01S02582.fsework +++| DISP = DISP + CURNW; 02596 M01S02583.fsework +++| 02597 M01S02584.fsework +++| CHANGE; 02598 M01S02585.fsework +++| 02599 M01S02586.fsework +++| IF PALAST[0] LQ CURRENT THEN DELETCTL=0; 02600 M01S02587.fsework +++| CURRENT=CURRENT+DELETCTL; 02601 M01S02588.fsework +++| NEWCURL=CURRENT; 02602 M01S02589.fsework +++| P<MVLNBUF>=LOC(LINEBUF); 02603 M01S02590.fsework +++| POSR; 02604 M01S02591.fsework +++| P<MVLNBUF>=0; 02605 M01S02592.fsework +++| 02606 M01S02593.fsework +++| IOEND 02607 M01S02594.fsework +++|PAGE 02608 M01S02595.fsework +++|PROC INIT; 02609 M01S02596.fsework +++| BEGIN 02610 M01S02597.fsework +++|# 02611 M01S02598.fsework +++|** INIT - INITIALIZE MEMORY CELLS FOR WORKIO. 02612 M01S02599.fsework +++|* 02613 M01S02600.fsework +++|* ENTRY NO CONDITIONS. 02614 M01S02601.fsework +++|* 02615 M01S02602.fsework +++|* EXIT P<LINEBUF> -POINTS TO LIN ARRAY. 02616 M01S02603.fsework +++|* ALL ELEMENTS OF PATH ARRAY - NOMINAL. 02617 M01S02604.fsework +++|* ALL CACHE CONTROLS - NOMINAL. 02618 M01S02605.fsework +++|* READ LIST (RDLIST, RDIN, RDOUT) - EMPTY. 02619 M01S02606.fsework +++|* FLAGS (IOACT, IOREAD, IOWRITE) - FALSE. 02620 M01S02607.fsework +++|* ARRAYLEN, DATALEN, ARRAYPRUS, DATAPRUS - INITIALIZED. 02621 M01S02608.fsework +++|* SEGEMENTVER - ZEROED OUT. 02622 M01S02609.fsework +++|# 02623 M01S02610.fsework +++| P<LINEBUF>=LOC(LIN); 02624 M01S02611.fsework +++| 02625 M01S02612.fsework +++| FOR PL = 1 STEP 1 UNTIL MAXDEPTH DO # INIT PATH # 02626 M01S02613.fsework +++| BEGIN 02627 M01S02614.fsework +++| PAFIRST[PL] = 0; 02628 M01S02615.fsework +++| PALAST[PL] = 0; 02629 M01S02616.fsework +++| PADISP[PL] = 0; 02630 M01S02617.fsework +++| PAHEAD[PL] = 0; 02631 M01S02618.fsework +++| END 02632 M01S02619.fsework +++| 02633 M01S02620.fsework +++| FOR PL = 0 STEP 1 UNTIL MAXCACHE DO # INIT CACHE CTL # 02634 M01S02621.fsework +++| BEGIN 02635 M01S02622.fsework +++| CACHEOWNED[PL]=FALSE; CACHEDIRTY[PL]=FALSE; 02636 M01S02623.fsework +++| CACHEAGE[PL]=-1; 02637 M01S02624.fsework +++| BFHEAD[PL]=0; 02638 M01S02625.fsework +++| END 02639 M01S02626.fsework +++| 02640 M01S02627.fsework +++| FOR RDIN = 0 STEP 1 UNTIL RDLIM DO RDLIST[RDIN] = 0; 02641 M01S02628.fsework +++| 02642 M01S02629.fsework +++| IOACT = FALSE; # INIT IO # 02643 M01S02630.fsework +++| IOAPEND = FALSE; 02644 M01S02631.fsework +++| IOWRITE = FALSE; 02645 M01S02632.fsework +++| IOREAD = FALSE; 02646 M01S02633.fsework +++| 02647 M01S02634.fsework +++| CURNW = 0; 02648 M01S02635.fsework +++| 02649 M01S02636.fsework +++| SEGMENTVER=0; 02650 M01S02637.fsework +++| ARRAYLEN=LOC(ARRAYEND)-LOC(ARRAYSTART); 02651 M01S02638.fsework +++| ARRAYPRUS=(ARRAYLEN+O"77")/O"100"; 02652 M01S02639.fsework +++| DATALEN=LOC(DATAEND)-LOC(DATASTART); 02653 M01S02640.fsework +++| DATAPRUS=(DATALEN+O"77")/O"100"; 02654 M01S02641.fsework +++| 02655 M01S02642.fsework +++| END 02656 M01S02643.fsework +++|PAGE 02657 M01S02644.fsework +++|PROC RESUMIO; 02658 M01S02645.fsework +++| IOBEGIN(RESUMIO) 02659 M01S02646.fsework +++|# 02660 M01S02647.fsework +++|** RESUMIO - RESUME EDITOR STATUS FROM LEFTOVER WORKFILE. 02661 M01S02648.fsework +++|* 02662 M01S02649.fsework +++|* RESUMIO ATTEMPTS TO VALIDATE A FILE AS CONTAINING THE TEXT 02663 M01S02650.fsework +++|* AND STATUS LEFT BY A PREVIOUS EDIT SESSION, OR BY A 02664 M01S02651.fsework +++|* SINGLE/MULTI USER TRANSITION. SINCE THE SCALAR AND ARRAY 02665 M01S02652.fsework +++|* DATA SEGMENTS CONTAIN NEARLY ALL EDITOR DATA, SUCCESSFUL 02666 M01S02653.fsework +++|* EXECUTION OF RESUMIO CHANGES EVERYTHING. 02667 M01S02654.fsework +++|* 02668 M01S02655.fsework +++|* THE FOLLOWING CONDITIONS ARE REQUIRED TO VALIDATE AN 02669 M01S02656.fsework +++|* APPARENT WORKFILE AS A LEGITIMATE BASIS FOR RESUMPTION -- 02670 M01S02657.fsework +++|* 02671 M01S02658.fsework +++|* 1. THE FIRST WORD MUST BE FORMATTED AS A ROOT SECTOR 02672 M01S02659.fsework +++|* HEADER WORD. THE DISK ADDRESS FIELD MUST BE ONE AND 02673 M01S02660.fsework +++|* THE TOP FLAG MUST BE ON AND THE DIRECTORY AND DATA 02674 M01S02661.fsework +++|* FLAGS MUST BE UNEQUAL. 02675 M01S02662.fsework +++|* 02676 M01S02663.fsework +++|* 2. THE FIRST RECORD OF THE FILE MUST BE OF LENGTH 02677 M01S02664.fsework +++|* 64 WORDS LONGER THAN THE SCALAR DATA SEGMENT, AND 02678 M01S02665.fsework +++|* THE SECOND RECORD OF THE FILE MUST EXACTLY MATCH 02679 M01S02666.fsework +++|* THE LENGTH OF THE ARRAY SEGMENT. 02680 M01S02667.fsework +++|* 02681 M01S02668.fsework +++|* 3. THE SEGMENTLEN1 AND SEGMENTLEN2 FIELDS OF THE SCALAR 02682 M01S02669.fsework +++|* SEGMENT MUST MATCH THE ABOVE LENGTHS, AND THE 02683 M01S02670.fsework +++|* SEGMENTVER FIELD MUST MATCH THE VERSION NUMBER 02684 M01S02671.fsework +++|* COMPILED INTO THIS PROGRAM. 02685 M01S02672.fsework +++|* 02686 M01S02673.fsework +++|* AFTER READING UP ALL EDITOR DATA, THE FOLLOWING WORKIO 02687 M01S02674.fsework +++|* CONTROLS ARE RE-INITIALIZED - THE PATH VECTOR IS REFRESHED 02688 M01S02675.fsework +++|* TO MATCH THE CURRENT LINE, THE SCHEDULING FLAGS (IOACT, 02689 M01S02676.fsework +++|* IOREAD, ETC.) ARE CLEARED, MAXDA AND DANEXT ARE BASED ON 02690 M01S02677.fsework +++|* FILE SIZE, AND SEGMENTVER IS CLEARED. THE WORKFILE IS THEN 02691 M01S02678.fsework +++|* IMMEDIATELY CHECKPOINTED SO THAT IT CANNOT BE RESUMED 02692 M01S02679.fsework +++|* AGAIN, THUS INTERLOCKING IT. 02693 M01S02680.fsework +++|* 02694 M01S02681.fsework +++|* ENTRY NO CONDITIONS. 02695 M01S02682.fsework +++|* 02696 M01S02683.fsework +++|* EXIT EVERYTHING IN THE WHOLE EDITOR IS CHANGED. 02697 M01S02684.fsework +++|* IORESUMED - SUCCESS/FAILURE INDICATOR. 02698 M01S02685.fsework +++|* 02699 M01S02686.fsework +++|* CALLS INIT, INITFET, BUFUSAGE, ALLOCCACHE, RDWBUF, READ, 02700 M01S02687.fsework +++|* WAIT, TRAGIC, SKIPEI, POSR, CLEANALL. 02701 M01S02688.fsework +++|# 02702 M01S02689.fsework +++| INIT; 02703 M01S02690.fsework +++| IORESUMED=FALSE; 02704 M01S02691.fsework +++| INITFET(DISK,DSKSIZ); 02705 M01S02692.fsework +++| 02706 M01S02693.fsework +++| REWIND(FET,0); # TRY TO READ PRU 1 # 02707 M01S02694.fsework +++| WAIT; 02708 M01S02695.fsework +++| READ(FET,0); 02709 M01S02696.fsework +++| WAIT; 02710 M01S02697.fsework +++| 02711 M01S02698.fsework +++| IF BUFUSAGE GR O"100" THEN 02712 M01S02699.fsework +++| BEGIN 02713 M01S02700.fsework +++| PL=0; 02714 M01S02701.fsework +++| PADA[0]=1; 02715 M01S02702.fsework +++| ALLOCCACHE; 02716 M01S02703.fsework +++| P<TOO>=LOC(BFPRU[PACACHE[0]]); 02717 M01S02704.fsework +++| RDWBUF(O"100"); 02718 M01S02705.fsework +++| PAHEAD[0] = BFHEAD[PACACHE[0]]; 02719 M01S02706.fsework +++| END 02720 M01S02707.fsework +++| 02721 M01S02708.fsework +++| IF PADA[0] EQ 1 AND PATOP[0] 02722 M01S02709.fsework +++| AND BOOLDIFF(PADIR[0],PADATA[0]) THEN 02723 M01S02710.fsework +++| BEGIN 02724 M01S02711.fsework +++| 02725 M01S02712.fsework +++| # READ FIRST FOUR WORDS TO VERIFY SEGMENT DESCRIPTORS # 02726 M01S02713.fsework +++| P<TOO>=LOC(DATASTART); 02727 M01S02714.fsework +++| NWNEW=BUFUSAGE; 02728 M01S02715.fsework +++| NWNEW=MIN(NWNEW,4); 02729 M01S02716.fsework +++| RDWBUF(NWNEW); 02730 M01S02717.fsework +++| IORESUMED=FALSE; 02731 M01S02718.fsework +++| IF SEGMENTVER NQ IOVERSION OR SEGMENTLEN1 NQ DATALEN 02732 M01S02719.fsework +++| OR SEGMENTLEN2 NQ ARRAYLEN THEN IORET 02733 M01S02720.fsework +++| 02734 M01S02721.fsework +++| # SEGMENT DESCRIPTORS VALID, READ REST OF SCALAR SEGMENT # 02735 M01S02722.fsework +++| P<TOO>=LOC(DATASTART)+4; 02736 M01S02723.fsework +++| NWNEW=BUFUSAGE; 02737 M01S02724.fsework +++| NWNEW=MIN(DATALEN-4,NWNEW); 02738 M01S02725.fsework +++| RDWBUF(NWNEW); 02739 M01S02726.fsework +++| READ(FET,0); 02740 M01S02727.fsework +++| WAIT; 02741 M01S02728.fsework +++| 02742 M01S02729.fsework +++| # READ ARRAY SEGMENT # 02743 M01S02730.fsework +++| P<TOO>=LOC(ARRAYSTART); 02744 M01S02731.fsework +++| NWNEW=BUFUSAGE; 02745 M01S02732.fsework +++| NWNEW=MIN(ARRAYLEN,NWNEW); 02746 M01S02733.fsework +++| RDWBUF(NWNEW); 02747 M01S02734.fsework +++| 02748 M01S02735.fsework +++| IF ABORTED THEN TRAGIC(ERRSTRING); 02749 M01S02736.fsework +++| 02750 M01S02737.fsework +++| SKIPEI(FET,0); 02751 M01S02738.fsework +++| WAIT; 02752 M01S02739.fsework +++| MAXDA=FETCRI-1; 02753 M01S02740.fsework +++| DANEXT=FETCRI; 02754 M01S02741.fsework +++| 02755 M01S02742.fsework +++| PADISP[0] = 1; # SET UP PATH[0] # 02756 M01S02743.fsework +++| PAFIRST[0] = 0; 02757 M01S02744.fsework +++| PALAST[0] = -1; 02758 M01S02745.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[0]]); 02759 M01S02746.fsework +++| IF PADIR[0] THEN 02760 M01S02747.fsework +++| BEGIN 02761 M01S02748.fsework +++| FOR DISP = 1 STEP 1 UNTIL PAFINAL[0] 02762 M01S02749.fsework +++| DO PALAST[0] = PALAST[0] + DIRNL[DISP]; 02763 M01S02750.fsework +++| END 02764 M01S02751.fsework +++| ELSE # NOTE INTERNAL CHARSET SIGN BIT USAGE # 02765 M01S02752.fsework +++| BEGIN 02766 M01S02753.fsework +++| FOR DISP = 1 STEP 1 UNTIL PAFINAL[0] 02767 M01S02754.fsework +++| DO IF B<0,1>DATWORD[DISP] NQ 0 THEN PALAST[0] = PALAST[0] + 1; 02768 M01S02755.fsework +++| END 02769 M01S02756.fsework +++| 02770 M01S02757.fsework +++| IORESUMED=TRUE; # RESET FLAGS READ WITH DATA # 02771 M01S02758.fsework +++| IOACT=FALSE; 02772 M01S02759.fsework +++| IOREAD=FALSE; 02773 M01S02760.fsework +++| IOWRITE=FALSE; 02774 M01S02761.fsework +++| IOAPEND=FALSE; 02775 M01S02762.fsework +++| 02776 M01S02763.fsework +++| PALVL = 0; # BUILD REST OF PATH # 02777 M01S02764.fsework +++| NEWCURL=0; 02778 M01S02765.fsework +++| P<MVLNBUF>=LOC(LINEBUF); 02779 M01S02766.fsework +++| POSR; 02780 M01S02767.fsework +++| P<MVLNBUF>=0; 02781 M01S02768.fsework +++| 02782 M01S02769.fsework +++| SEGMENTVER=0; # INTERLOCK FILE ONWESHIP # 02783 M01S02770.fsework +++| CLEANALL; 02784 M01S02771.fsework +++| 02785 M01S02772.fsework +++| END 02786 M01S02773.fsework +++| 02787 M01S02774.fsework +++| IOEND 02788 M01S02775.fsework +++|PAGE 02789 M01S02776.fsework +++| 02790 M01S02777.fsework +++|CONTROL IFEQ SINGLE,1; 02791 M01S02778.fsework +++| 02792 M01S02779.fsework +++|PROC INITIO; 02793 M01S02780.fsework +++| IOBEGIN(INITIO) 02794 M01S02781.fsework +++|# 02795 M01S02782.fsework +++|** INITIO - FORMAT A NEW WORKFILE. 02796 M01S02783.fsework +++|* 02797 M01S02784.fsework +++|* INITIO IS USED TO BUILD A WORKFILE FROM SCRATCH OR TO 02798 M01S02785.fsework +++|* DISCARD OLD WORKFILE CONTENT AND REFRESH IT. 02799 M01S02786.fsework +++|* 02800 M01S02787.fsework +++|* ENTRY NO CONDITIONS. 02801 M01S02788.fsework +++|* 02802 M01S02789.fsework +++|* EXIT FILE INITIALIZED. 02803 M01S02790.fsework +++|* ALL PATH CONTROLS NOMINAL. 02804 M01S02791.fsework +++|* ALL CACHE CONTROL NOMINAL. 02805 M01S02792.fsework +++|* MAXDA - ZERO 02806 M01S02793.fsework +++|* DANEXT - FIRST ALLOCATABLE DISK ADDRESS RIGHT AFTER 02807 M01S02794.fsework +++|* ROOT SECTOR, AND SCALAR AND ARRAY DATA SEGMENTS. 02808 M01S02795.fsework +++|* IORESUMED - TRUE TO SHOW WORKIO ACTIVE. 02809 M01S02796.fsework +++|* SEGMENTVER - ZERO IN MEMORY AND ON DISK TO INTERLOCK. 02810 M01S02797.fsework +++|* 02811 M01S02798.fsework +++|* CALLS INITFET, EVICT, WAIT, INIT, ALLOCCACHE, CLEANALL. 02812 M01S02799.fsework +++|# 02813 M01S02800.fsework +++| INITFET(DISK,DSKSIZ); 02814 M01S02801.fsework +++| EVICT(FET,0); 02815 M01S02802.fsework +++| WAIT; 02816 M01S02803.fsework +++| 02817 M01S02804.fsework +++| INIT; 02818 M01S02805.fsework +++| MAXDA = 0; # SET MAXDA AND DANEXT # 02819 M01S02806.fsework +++| DANEXT = 2+DATAPRUS+ARRAYPRUS; 02820 M01S02807.fsework +++| 02821 M01S02808.fsework +++| PAHEAD[0] = 0; # BUILD TOP BLOCK # 02822 M01S02809.fsework +++| PADATA[0] = TRUE; 02823 M01S02810.fsework +++| PATOP[0] = TRUE; 02824 M01S02811.fsework +++| PADIRTY[0] = TRUE; 02825 M01S02812.fsework +++| PADA[0] = 1; 02826 M01S02813.fsework +++| PAFINAL[0] = 1; 02827 M01S02814.fsework +++| PL=0; 02828 M01S02815.fsework +++| ALLOCCACHE; 02829 M01S02816.fsework +++| P<PRU> = LOC(BFPRU[PACACHE[0]]); 02830 M01S02817.fsework +++| DATWORD[1] = NULLIN; 02831 M01S02818.fsework +++| CURNW = 1; 02832 M01S02819.fsework +++| 02833 M01S02820.fsework +++| PADEPTH[0] = 0; 02834 M01S02821.fsework +++| PADISP[0] = 1; # SET UP PATH # 02835 M01S02822.fsework +++| PAFIRST[0] = 0; 02836 M01S02823.fsework +++| PALAST[0] = 0; 02837 M01S02824.fsework +++| PALVL = 0; 02838 M01S02825.fsework +++| CURRENT = 0; 02839 M01S02826.fsework +++| IORESUMED=TRUE; # SHOW WORKIO ALIVE # 02840 M01S02827.fsework +++| 02841 M01S02828.fsework +++| SEGMENTVER = 0; # INTERLOCK FILE OWNERSHIP # 02842 M01S02829.fsework +++| CLEANALL; 02843 M01S02830.fsework +++| 02844 M01S02831.fsework +++| IOEND 02845 M01S02832.fsework +++| 02846 M01S02833.fsework +++|CONTROL FI; 02847 M01S02834.fsework +++|PAGE 02848 M01S02835.fsework +++|PROC CHECKIO; 02849 M01S02836.fsework +++| IOBEGIN(CHECKIO) 02850 M01S02837.fsework +++|# 02851 M01S02838.fsework +++|** CHECKIO - CHECKPOINT WORKFILE. 02852 M01S02839.fsework +++|* 02853 M01S02840.fsework +++|* CHECKIO IS USED TO ASSURE THAT ALL MEMORY DATA IS FULLY 02854 M01S02841.fsework +++|* WRITTEN TO DISK. THIS CAN BE USED TO PREPARE FOR END OF 02855 M01S02842.fsework +++|* JOB STEP OR FOR TRANSITION BETWEEN SINGLE AND MULTIPLE USER 02856 M01S02843.fsework +++|* VERSIONS OF THE EDITOR. BY CHECKPOINTING THE WORKFILE, IT 02857 M01S02844.fsework +++|* BECOMES POSSIBLE TO EXECUTE THE RESUMIO ROUTINE AND FULLY 02858 M01S02845.fsework +++|* RESTORE THE EDITOR STATUS. 02859 M01S02846.fsework +++|* 02860 M01S02847.fsework +++|* ENTRY IORESUMED - SHOWS WHETHER WORKFILE MANAGER EVER ACTIVE. 02861 M01S02848.fsework +++|* CURRENT - CURRENT LINE ORDINAL. 02862 M01S02849.fsework +++|* 02863 M01S02850.fsework +++|* EXIT SEGMENTVER, SEGMENTLEN1, SEGMENTLEN2 - SETUP. 02864 M01S02851.fsework +++|* CACHE FLUSHED, FET AND CIRCULAR BUFFER COMPLETE. 02865 M01S02852.fsework +++|* 02866 M01S02853.fsework +++|* CALLS CLEANALL. 02867 M01S02854.fsework +++|# 02868 M01S02855.fsework +++| IF NOT IORESUMED THEN IORET # WORKIO NEVER ALIVE # 02869 M01S02856.fsework +++| 02870 M01S02857.fsework +++| SAVECURL=CURRENT; 02871 M01S02858.fsework +++| SEGMENTVER = IOVERSION; # SHOW VALID WORKFILE FORMAT # 02872 M01S02859.fsework +++| SEGMENTLEN1 = DATALEN; 02873 M01S02860.fsework +++| SEGMENTLEN2 = ARRAYLEN; 02874 M01S02861.fsework +++| CLEANALL; # WRITE OUT WHOLE PATH # 02875 M01S02862.fsework +++| 02876 M01S02863.fsework +++| IOEND 02877 M01S02864.fsework +++| 02878 M01S02865.fsework +++| 02879 M01S02866.fsework +++| END TERM
cdc/nos2.source/opl.opl871/deck/fsework.001.txt ยท Last modified: by 127.0.0.1