STORMAN IDENT STORMAN STORMAN 1 TITLE STORAGE MANAGEMENT ROUTINES STORMAN 2 * FOR A LISTING OF THE SNODEF COMDECK, CALLED BELOW, SEE MAINLUP. STORMAN 3 LIST -L STORMAN 4 *CALL,SNODEF STORMAN 5 LIST L STORMAN 6 *LOWCORE STORMAN 7 EXT ISVB1,ISVX5 STORMAN 8 EXT LSCOUNT STORMAN 9 EXT HBCSTAT STORMAN 10 * ERROR STORMAN 11 EXT RTERROR STORMAN 12 EXT ERR1,ERR2,ERR3,ERR4,ERR5,ERR6,ERR7,ERR8,ERR9 STORMAN 13 EXT ERR10,ERR11,ERR13,ERR14,ERR15,ERR16,ERR17,ERR18,ERR19 STORMAN 14 EXT ERR20,ERR21,ERR22,ERR23,ERR24,ERR26,ERR27,ERR28 STORMAN 15 EXT ERR29,ERR30,ERR31,ERR32,ERR35,ERR36,ERR37,ERR38,ERR39 STORMAN 16 EXT ERR40,ERR41,ERR42,ERR43,ERR44,ERR48,ERR49 STORMAN 17 EXT ERR50,ERR52,ERR53,ERR55,ERR56 STORMAN 18 * MAINLUP STORMAN 19 EXT CALL STORMAN 20 * STORMAN STORMAN 21 ENTRY PUSHSTK,RESERVE,MORFREE,GETSTAK,GRBCOLL,RESHB STORMAN 22 ENTRY FREEHB STORMAN 23 ENTRY HBC,SELFCHK STORMAN 24 ENTRY TOFHBL STORMAN 25 * UTILITY STORMAN 27 EXT ITOS,SSTOS,STOSFX6,PTOPX4,ICX1X6,ZROX7,SSTOSF,ITOSF STORMAN 28 EXT ITOSFTP,SOPERND,X1VALUE,FREESVD,SASSIGN,INDRCT,INDRX STORMAN 29 EXT SEARCH,FREESTR STORMAN 30 EXT DECFIL,SCHHBC STORMAN 31 * PATMAT STORMAN 32 EXT PRDPM,DOLPM,ENDEXPM,ALTPM,EXPPM,ARBPM,LENPM,POSPM STORMAN 33 EXT RPOSPM,TABPM,REMPM,BALPM,FAILPM,FENCEPM,ABORTPM STORMAN 34 EXT ARBNOPM,STARPM,LITPM,ANYPM,NTANYPM,SPANPM,BREAKPM STORMAN 35 * IO STORMAN 36 EXT CALLRCL STORMAN 37 * STORMAN 38 * STORMAN 39 * DECLARE PARAMETERS: STORMAN 40 * STORMAN 41 BUFF1 EQU 10 . MINIMUM FREE LIST REQUEST STORMAN 42 BUFF2 EQU 30 . MINIMUM NUMBER OF WORDS TO BE STORMAN 43 . RETRIEVED BY THE LSC STORMAN 44 FLDINCR EQU 1000B . FIELDLENGTH INCREMENT STORMAN 45 * STORMAN 46 * MICROS TO CREATE CONSISTENCY-CHECK INTERRUPTS: STORMAN 47 * STORMAN 48 VE MICRO 1,,/400000B+*/ STORMAN 49 VE1 MICRO 1,,/400000B+*/ STORMAN 50 VE2 MICRO 1,,/400000B+*/ STORMAN 51 VE3 MICRO 1,,/400000B+*/ STORMAN 52 VE4 MICRO 1,,/400000B+*/ STORMAN 53 EJECT STORMAN 54 * PUSHSTK STORMAN 55 * PUSH THE STACK TOWARDS HIGH CORE, B3 WORDS STORMAN 56 * X1,X7,B1,B2,A0 STORMAN 57 PUSHSTK NO STORMAN 58 + SA0 B3 STORMAN 59 RJ RESERVE . RESERVE ENOUGH SPACE STORMAN 60 SA1 MINSTAK . BUMP MINSTAK STORMAN 61 SB2 X1 STORMAN 62 SX7 X1+B3 STORMAN 63 SB1 B6-B3 STORMAN 64 SA7 A1 STORMAN 65 PSHSTK1 SA1 B1 STORMAN 66 SB1 B1-1 STORMAN 67 BX7 X1 STORMAN 68 SA7 A1+B3 STORMAN 69 GE B1,B2,PSHSTK1 STORMAN 70 JP PUSHSTK STORMAN 71 * STORMAN 72 * RESERVE STORMAN 73 * THIS PROCEDURE RESERVES A0 WORDS IN THE STACK. B6 IS UPDATED STORMAN 74 * NOTE ESPECIALLY THAT A4 IS SAVED STORMAN 75 * X1,A0 STORMAN 76 * STORMAN 77 RESERVE NO STORMAN 78 + SA1 MAXSTAK STORMAN 79 SB6 A0+B6 . CHECK IF NEW B6 NOT GREATER STORMAN 80 SX1 X1+B6 . OR EQUAL THAN ABS (MAXSTAK) STORMAN 81 NG X1,RESERVE . NOTE THAT MAXSTAK IS NEGATIVE STORMAN 82 RJ GETSTAK . GET STACK SPACE IF IT IS STORMAN 83 EQ RESERVE STORMAN 84 * STORMAN 85 * STORMAN 86 * SUBROUTINE MOREFREE HAS TO BE CALLED WHENEVER THE END OF THE STORMAN 87 * FREE CHAIN IS MET.( A ZERO WORD ) HALF OF THE SPACE BETWEEN STORMAN 88 * THE STACK AND DYNAMIC WILL BE RESERVED, OR IF IT IS TOO SHORT STORMAN 89 * ADDITIONAL FIELDLENGTH WILL BE REQUESTED. STORMAN 90 * X1 STORMAN 91 * STORMAN 92 MORFREE NO STORMAN 93 + SA7 MFX7 . SAVE SOME REGISTERS STORMAN 94 SA6 MFX6 STORMAN 95 BX7 X2 STORMAN 96 SA7 MFX2 STORMAN 97 SX1 BUFF1+BUFF1 . MINIMUM STACK SPACE STORMAN 98 RJ GETLS . GET AT LEAST BUFF1 LIST WORDS STORMAN 99 SA1 MFX6 . RESTORE REGISTERS STORMAN 100 SA2 MFX7 STORMAN 101 BX6 X1 STORMAN 102 BX7 X2 STORMAN 103 SA1 B7+0 . TO ASSIST CALLING SIDE STORMAN 104 SA2 MFX2 STORMAN 105 JP MORFREE STORMAN 106 * STORMAN 107 * GETLS STORMAN 108 * GETLS IS CALLED EITHER FROM MORFREE OR GETSTAK. STORMAN 109 * IT PRODUCES AT LEAST X1 NEW LIST WORDS, A POINTER TO STORMAN 110 * THE FIRST WORD IS STORED AT B7 STORMAN 111 * X1, X2, X6, X7 STORMAN 112 * STORMAN 113 GETLS DATA 0 STORMAN 114 SX6 B0-B6 STORMAN 115 SA2 MAXSTAK STORMAN 116 IX6 X6-X2 . MAXSTAK-B6 TO X6 STORMAN 117 IX7 X6-X1 . NOTE: X1 IS AT LEAST 5 STORMAN 118 NG X7,MFLEN . STACK STORAGE NOT ENOUGH STORMAN 119 AX6 1 STORMAN 120 IX7 X2+X6 . RESERVE HALF OF IT STORMAN 121 SA7 A2 . STORE NEW MAXSTAK STORMAN 122 BX1 -X2 STORMAN 123 BX7 -X7 STORMAN 124 * CREATE FL FROM X1-1 DOWN TO X7: STORMAN 125 MFCHN SX6 X1-1 STORMAN 126 SA6 B7 . POINTER TO THE FIRST WORD STORMAN 127 SX1 X6 STORMAN 128 MFCHN1 SX6 X1-1 STORMAN 129 SA6 X1 STORMAN 130 SX1 X6 STORMAN 131 BX2 X1-X7 STORMAN 132 NZ X2,MFCHN1 STORMAN 133 SX7 B0 . END OF CHAIN WORD STORMAN 134 SA7 X1 STORMAN 135 EQ GETLS STORMAN 136 * REQUEST AT LEAST X1 MORE FIELD LENGTH STORMAN 137 MFLEN SX6 -FLDINCR+1 STORMAN 138 SA2 FIELDLN STORMAN 139 IX7 X1-X6 . ROUND X1 TO NEXT FLDINCR STORMAN 140 SA1 FLDLM STORMAN 141 BX7 X6*X7 . NEW FIELDLENGTH TO X7 STORMAN 142 IX7 X2+X7 STORMAN 143 IX1 X1-X7 STORMAN 144 NG X1,ERR17 . ERROR: MAX FIELD LENGTH HAS STORMAN 145 SX1 X7 . BEEN EXCEEDED STORMAN 146 SA7 A2 STORMAN 147 BX7 X2 SAVE OLD FL. ******* 1 SA2 RFLP ******* 2 BX6 X1+X2 RFL TO NEW FL. ******* 3 SA6 1 . CALL MEM WITH RECALL STORMAN 153 + SA2 1 STORMAN 154 NZ X2,* . WAIT UNTIL COMPLETE STORMAN 155 JP MFCHN . GO FILL UP NEWLY ACQUIRED STORAGE STORMAN 156 RFLP VFD 24/0LRFLP,36/0 ******* 4 * STORMAN 159 MFX2 DATA 0 . REGISTER SAVE WORDS STORMAN 160 MFX6 DATA 0 STORMAN 161 MFX7 DATA 0 STORMAN 162 * STORMAN 163 * STORMAN 164 * GETSTAK PRODUCES SPACE FOR THE STACK UP TO B6. B6-A0 MUST STORMAN 165 * CONTAIN THE LAST SENSIBLE STACK ENTRY. A GARBAGE COLLECTION STORMAN 166 * WILL BE PERFORMED IF NECESSARY STORMAN 167 * A0,X1 STORMAN 168 * STORMAN 169 GETSTAK NO STORMAN 170 + SA6 GSX6 . SAVE REGISTERS USED IN GETSTAK STORMAN 171 SA7 GSX7 STORMAN 172 SX6 B3 STORMAN 173 SX7 B4 STORMAN 174 SA6 GSB3 STORMAN 175 SA7 GSB4 STORMAN 176 BX6 X2 STORMAN 177 SX2 B7 STORMAN 178 SA6 GSX2 STORMAN 179 SX1 0 STORMAN 180 GS1 SX1 X1+1 . NUMBER OF FREE WORDS TO X1 STORMAN 181 SA2 X2 STORMAN 182 NZ X2,GS1 STORMAN 183 SB3 B7 STORMAN 184 SB7 A2 . DO AS IF FL WERE EMPTY STORMAN 185 SX6 B0-B6 STORMAN 186 SA2 MAXSTAK STORMAN 187 IX2 X6-X2 . MAXSTAK-B6 TO X2 STORMAN 188 IX1 X1+X2 . NUMBER OF POTENTIAL STACK WORDS STORMAN 189 SX2 X1-BUFF2 STORMAN 190 BX1 -X2 . IF NOT ENOUGH, GET SOME MORE STORMAN 191 PL X2,GS3 STORMAN 192 SX1 X1+5 . PLAY IT SAFE STORMAN 193 RJ GETLS STORMAN 194 GS3 SX6 B1 . SAVE REGISTERS USED IN GRBCOLL STORMAN 195 SX7 B2 STORMAN 196 SA6 GSB1 STORMAN 197 SA7 GSB2 STORMAN 198 SB7 B3 STORMAN 199 SB1 A0 STORMAN 200 SB6 B6-B1 . RESET B6 TO THE LAST ENTRY STORMAN 201 RJ GRBCOLL . COLLECT GARBAGE STORMAN 202 SB6 B6+A0 . RESTORE B6 STORMAN 203 SA1 GSX6 STORMAN 204 SA2 GSX7 . RESTORE ALL REGISTERS USED STORMAN 205 BX6 X1 STORMAN 206 BX7 X2 STORMAN 207 SA1 GSB1 STORMAN 208 SA2 GSB2 STORMAN 209 SB1 X1 STORMAN 210 SB2 X2 STORMAN 211 SA1 GSB3 STORMAN 212 SA2 GSB4 STORMAN 213 SB3 X1 STORMAN 214 SB4 X2 STORMAN 215 SA2 GSX2 STORMAN 216 EQ GETSTAK . RETURN STORMAN 217 * STORMAN 218 GSX2 EQU MFX2 STORMAN 219 GSX6 EQU MFX6 STORMAN 220 GSX7 EQU MFX7 STORMAN 221 GSB1 DATA 0 STORMAN 222 GSB2 DATA 0 STORMAN 223 GSB3 DATA 0 STORMAN 224 GSB4 DATA 0 STORMAN 225 * SAVE LOCATIONS USED BY RESHB STORMAN 226 RESHB1 DATA 0 STORMAN 227 RESHB4 DATA 0 STORMAN 228 TITLE GARBAGE COLLECTION STORMAN 229 * GARBAGE COLLECTION BEGINS WITH COUNTING THE NUMBER OF WORDS STORMAN 230 * ON THE FREE CHAIN. OUR AIM IS TO GATHER ALL FREE WORDS TO STORMAN 231 * THE LOWER PART OF THE DYNAMIC AREA THAT WE CAN DELETE THEM. STORMAN 232 * THIS CAN BE OBTAINED BY SCANNING ALL EXISTING LISTS STORMAN 233 * AND MOVING WORDS IN THE LOWER PART TO FREE WORDS IN THE STORMAN 234 * UPPER. STORMAN 235 * X1,X2,X6,X7,B1,B2,B3,B4 STORMAN 236 * STORMAN 237 GRBCOLL BSSZ 1 STORMAN 238 SA1 LSCOUNT . COUNT THIS COLLECTION STORMAN 239 SX7 X1+1 STORMAN 240 SA7 A1 STORMAN 241 + SX2 B7 STORMAN 242 SX6 B0 STORMAN 243 SA1 MAXSTAK STORMAN 244 GRB1 SX6 X6+1 . COUNT THE NUMBER OF FREE WORDS STORMAN 245 SB3 A2 STORMAN 246 SA2 X2 STORMAN 247 NZ X2,GRB1 STORMAN 248 IX6 X6-X1 . NOTE THAT MAXSTAK IS NEGATIVE STORMAN 249 SB4 B6 STORMAN 250 SX6 X6-1 STORMAN 251 SB1 X6 . B1 IS THE LIMIT BETWEEN THE LOWER STORMAN 252 BX6 -X6 STORMAN 253 SA6 A1 STORMAN 254 BX7 X7-X7 STORMAN 255 RJ GRBFW . AND THE UPPER PARTS STORMAN 256 SB2 A2 . IF THE END OF FREE CHAIN IS IN STORMAN 257 GE B2,B1,GRB3 . THE LOWER PART, RELOCATE STORMAN 258 SX6 A1 STORMAN 259 SA6 B3 STORMAN 260 SA7 A1 STORMAN 261 RJ GRBFW STORMAN 262 GRB3 SA2 B4 . SCAN STACK FOR LS REFERENCES STORMAN 263 SB3 X2 STORMAN 264 ZR X2,GRB2 STORMAN 265 NG X2,GRB4 STORMAN 266 SB4 B4-B3 STORMAN 267 AX2 55 STORMAN 268 NZ X2,GRB3 STORMAN 269 SA2 B4+1 . SF TYPE FOUND IN STACK STORMAN 270 RJ GRBSVD STORMAN 271 JP GRB3 STORMAN 272 GRB4 SB2 B4-2 . RETURN INFORMATION IN STACK STORMAN 273 SB4 B4-B3 . SCAN STACKED LOCAL SVD-S STORMAN 274 GRB4A SA2 B2 STORMAN 275 RJ GRBSVD STORMAN 276 SB2 B2-2 STORMAN 277 LT B4,B2,GRB4A STORMAN 278 EQ GRB3 STORMAN 279 * STORMAN 280 * GRBFW SUPPLIES THE NEXT FREE LINK WHICH IS IN THE UPPER STORMAN 281 * PART. GARBAGE COLLECTION ENDS WHEN THE END WORD IS MET. STORMAN 282 * (I.E. THERE ARE NO MORE FREE WORDS IN UPPER Q.E.D.) STORMAN 283 * LOCAL TO GRBCOLL STORMAN 284 GRB5 SB7 X1+0 . NO, THIS IS NOT THE ENTRY STORMAN 285 GRBFW NO STORMAN 286 GRB6 SA1 B7 . NEXT FREE LINK STORMAN 287 ZR X1,GRBCOLL . BRANCH IF ENDWORD STORMAN 288 GE B7,B1,GRB5 . BRANCH IF IN UPPER STORMAN 289 SB7 X1+0 STORMAN 290 EQ GRB6 . LOOP IF IT IS IN LOWER STORMAN 291 * STORMAN 292 * THIS SUBROUTINE FOLLOWS A LIST STRUCTURE. IF A LINK IS STORMAN 293 * IN LOWER, IT WILL BE RELOCATED. STORMAN 294 * LOCAL TO GRBCOLL STORMAN 295 GRBLINK NO STORMAN 296 GRBL1 SB3 X2 . POINTER TO NEXT WORD STORMAN 297 EQ B0,B3,GRBLINK . BRANCH IF END LIST STORMAN 298 GRBL2 GE B3,B1,GRBL4 . BRANCH IF IN UPPER STORMAN 299 SX7 A1 STORMAN 300 MX1 42 STORMAN 301 BX1 X1*X2 . UPDATE LINK AND RELOCATE STORMAN 302 BX7 X1+X7 STORMAN 303 SA7 A2 STORMAN 304 SA2 B3 STORMAN 305 BX7 X2 STORMAN 306 SA7 A1 STORMAN 307 SA2 A7 STORMAN 308 SB3 X2 STORMAN 309 NE B0,B3,GRBL3 . IF END LIST THEN STORMAN 310 SB3 -1 . SIGNAL LAST IS RELOCATED STORMAN 311 EQ GRBLINK . AND RETURN STORMAN 312 GRBL3 RJ GRBFW STORMAN 313 EQ GRBL2 STORMAN 314 GRBL4 SA2 X2 . IN UPPER, GET NEXT WORD STORMAN 315 EQ GRBL1 STORMAN 316 * LOCAL TO GRBCOLL STORMAN 317 * STORMAN 318 * SCAN HEAP STORAGE FOR LS REFERENCES: STORMAN 319 * STORMAN 320 GRB2 SA2 MINHS . TREAT THE 2 SPECIAL WORDS FIRST STORMAN 321 SB2 X2 STORMAN 322 SA2 X2 STORMAN 323 ZR X2,GRB2A . IGNORE IF EMPTY STORMAN 324 RJ GRBSVD . IT NEED NOT BE IN SVD FORMAT STORMAN 325 GRB2A SA2 B2+1 STORMAN 326 SB2 B2+3 . B2 POINTS TO THE FIRST HB STORMAN 327 ZR X2,GRBS1 STORMAN 328 RJ GRBSVD STORMAN 329 * STORMAN 330 * B2 POINTS TO WORD 0 OF THE NEXT HEAP BLOCK OR TO STORMAN 331 * THE NEXT SVD IN A STRUCTURE STORMAN 332 * STORMAN 333 GRBS1 SA2 B2+0 STORMAN 334 ZR X2,'VE4' . ERROR IF END OF HS STORMAN 335 PL X2,GRBS3 . BRANCH IF SVD STORMAN 336 AX2 18 STORMAN 337 SX6 B2+1 STORMAN 338 SB2 X2+B2 . X2 IS BYPASS STORMAN 339 AX2 37 STORMAN 340 SX2 X2-CALLTYP+37B . BRANCH IF NOT VARIABLE OR STORMAN 341 NG X2,GRBS4 . FUNCTION NAME STORMAN 342 NZ X2,GRBS2 . BRANCH IF NOT FUNCTION STORMAN 343 SA2 X6 STORMAN 344 NG X2,GRBS1 . BRANCH IF STANDARD PROCEDURE STORMAN 345 BX1 X2 STORMAN 346 AX1 55 STORMAN 347 SX1 X1-DATATYP STORMAN 348 ZR X1,GRBS1 . BRANCH IF NOT PROC OR FIELD STORMAN 349 RJ GRBLINK . UNDF WILL BE IGNORED (F1=0) STORMAN 350 GE B3,B0,GRBS1 STORMAN 351 RJ GRBFW STORMAN 352 JP GRBS1 STORMAN 353 GRBS2 SA2 X6+0 . IF VARIABLE STORMAN 354 SB2 B2-1 . FETCH SVD IN VALUE WORD STORMAN 355 GRBS3 SB2 B2+1 STORMAN 356 RJ GRBSVD STORMAN 357 JP GRBS1 STORMAN 358 GRBS4 SX2 X2+CALLTYP-STRTYP STORMAN 359 NZ X2,GRBS1 . BRANCH IF NOT A STRUCTURE STORMAN 360 SB2 X6 STORMAN 361 EQ GRBS1 STORMAN 362 * STORMAN 363 * TREAT SVD IN X2 (A2) STORMAN 364 GRBSVD DATA 0 STORMAN 365 BX1 X2 . UNPACK THE TYPE STORMAN 366 AX1 55 STORMAN 367 SX1 X1-ITY . BRANCH IF SF, SS, STORMAN 368 NG X1,GRBSS . PS,PA OR PE STORMAN 369 SX1 X1-1 STORMAN 370 ZR X1,GRBR . R TYPE STORMAN 371 SX1 X1-5 STORMAN 372 NG X1,GRBSVD . A,D,N OR C STORMAN 373 GRBIO RJ GRBSNGL . IN OR OUT, SVD IS IN DYNAMIC STORMAN 374 SA2 B3 . STORAGE TOO STORMAN 375 GRBSS SX6 A2 STORMAN 376 RJ GRBLINK . UPDATE LIST STORMAN 377 GE B3,B0,GRBSVD STORMAN 378 MX1 42 . CHANGE LAST IF CHANGED STORMAN 379 SA2 X6 STORMAN 380 SX7 A1 STORMAN 381 LX1 18 STORMAN 382 LX7 18 STORMAN 383 BX2 X1*X2 STORMAN 384 BX7 X2+X7 STORMAN 385 SA7 A2 STORMAN 386 * GRBFW HAS TO BE CALLED WHENEVER GRBLING RETURNS A STORMAN 387 * LAST CHANGED SIGNAL STORMAN 388 RJ GRBFW STORMAN 389 JP GRBSVD STORMAN 390 GRBR RJ GRBSNGL . ACTION ON R TYPE STORMAN 391 JP GRBSVD STORMAN 392 * STORMAN 393 * LOCAL TO GRBCOLL STORMAN 394 * STORMAN 395 GRBSNGL NO STORMAN 396 + SB3 X2 STORMAN 397 GE B3,B1,GRBSNGL . RETURN IF IN UPPER STORMAN 398 SX7 A1 STORMAN 399 MX1 42 STORMAN 400 BX1 X1*X2 . RELOCATE AND UPDATE LINK STORMAN 401 BX7 X1+X7 STORMAN 402 SA7 A2 STORMAN 403 SA2 B3 STORMAN 404 BX7 X2 STORMAN 405 SA7 A1 STORMAN 406 SB3 A1 STORMAN 407 RJ GRBFW STORMAN 408 EQ GRBSNGL STORMAN 409 * STORMAN 410 * STORMAN 411 CKSFCK BSSZ 1 STORMAN 412 SA1 STATWD STORMAN 413 MX2 1 STORMAN 414 LX2 B1,X2 STORMAN 415 BX2 X2*X1 STORMAN 416 ZR X2,CKSFCK . DON'T DO SELFCHECK STORMAN 417 RJ SELFCHK STORMAN 418 EQ CKSFCK STORMAN 419 EJECT STORMAN 420 * RESHB STORMAN 421 * THIS SUBROUTINE RESERVES A HEAP BLOCK OF SIZE B1 STORMAN 422 * FROM THE FREE POOL. IF THE POOL DOES NOT CONTAIN STORMAN 423 * ANY BLOCKS OF THE REQUIRED SIZE, OR LARGER, THE HEAP STORMAN 424 * STORAGE AREA IS EXTENDED AT THE EXPENSE OF STACK STORAGE. STORMAN 425 * A HSC IS SCHEDULED IF THE FREE POOL IS TOO FRAGMENTED STORMAN 426 * A CALL OF RESHB MAY INVOKE AN LSC. STORMAN 427 * STORMAN 428 * PARAM: B1 SIZE OF HEAP BLOCK TO BE RESERVED STORMAN 429 * RESULT: B3 POINTS TO WORD 0 OF THE RESERVED HB STORMAN 430 * X0,X1,X2,X6,X7,B2,A0 STORMAN 431 * STORMAN 432 RESHB DATA 0 STORMAN 433 RHBL0 SA2 FHBLRP . FETCH ROVING POINTER STORMAN 434 SB3 B0 STORMAN 435 BX6 X2 . END OF CIRCULAR LIST STORMAN 436 RHBL1 SA1 X2 . WORD 0 OF NEXT FREE BLOCK STORMAN 437 SX2 X1 . FORWARD POINTER STORMAN 438 LX1 60-18 STORMAN 439 SB2 X1 . SIZE OF FHB TO B2 STORMAN 440 GE B2,B1,RHBL4 . BRANCH IF FITS STORMAN 441 BX1 X2-X6 . CHECK FOR END OF LIST STORMAN 442 SB3 B3+B2 . TOTAL FREE STORAGE IN B3 STORMAN 443 NZ X1,RHBL1 STORMAN 444 * NO FIT, EXTEND HS AREA STORMAN 445 SX7 B1 . SAVE B1 AND B4 STORMAN 446 SX6 B4 STORMAN 447 SA7 RESHB1 STORMAN 448 SA6 RESHB4 STORMAN 449 LT B3,B1,RHBL2 . BRANCH IF NOT TOO FRAGMENTED STORMAN 450 RJ SCHHBC STORMAN 451 RHBL2 SA1 MAXSTAK . IF AMPLE SPACE IN SS STORMAN 452 SB3 B1+B1 STORMAN 453 SB2 X1+B6 STORMAN 454 SB2 B0-B2 STORMAN 455 GE B3,B2,RHBL3 STORMAN 456 SX1 B2 STORMAN 457 AX1 1 . TAKE HALF OF IT STORMAN 458 SB1 X1+0 STORMAN 459 RHBL3 SB3 B1 STORMAN 460 RJ PUSHSTK . PUSH THE STACK B3 WORDS TOWARD STORMAN 461 SA1 MINSTAK . HIGHER ADDRESSES STORMAN 462 SA2 MAXHS STORMAN 463 BX7 X1 STORMAN 464 SB4 X1 STORMAN 465 SA7 A2 STORMAN 466 SB3 X2 STORMAN 467 * CREATE A FREE BLOCK BETWEEN OLD MAXHS AND STORMAN 468 * MINSTAK-1. CONCATENATE WITH LAST FREE BLOCK IN HS IF ANY. STORMAN 469 SA1 MINHS STORMAN 470 SA1 X1+2 STORMAN 471 MX0 1 STORMAN 472 LX0 60-5 STORMAN 473 BX7 X1+X0 . LAST BLOCK WILL BE FREE STORMAN 474 SA7 A1 STORMAN 475 LX1 5 STORMAN 476 PL X1,RHBL3A . BRANCH IF LAST BLOCK NOT FREE STORMAN 477 SA1 B3-1 STORMAN 478 AX1 18 STORMAN 479 SB2 X1 . BYPASS FOR LAST BLOCK STORMAN 480 SA1 B3-B2 . WORD 0 OF LAST BLOCK STORMAN 481 SB3 B3-B2 STORMAN 482 RJ TOFHBL . TAKE IT OFF FHBL STORMAN 483 RHBL3A RJ INFHBL . FREE BLOCK B3-(B4-1) STORMAN 484 SA1 RESHB1 STORMAN 485 SA2 RESHB4 STORMAN 486 SB1 X1 STORMAN 487 SB4 X2 STORMAN 488 JP RHBL0 . REPEAT SEARCH STORMAN 489 * FIRST FIT: DECIDE IF EXACT FIT STORMAN 490 RHBL4 EQ B1,B2,RHBL6 . BRANCH IF EXACT FIT STORMAN 491 * NOT EXACT FIT, CREATE FHB BETWEEN A1+B1 AND A1+B2-1 STORMAN 492 SX7 A1+B1 STORMAN 493 SB2 A1+B2 STORMAN 494 SA7 FHBLRP . UPDATE FHBLRP JUST IN CASE... STORMAN 495 SB3 A1+B1 . WORD 0 OF REST TO B3 STORMAN 496 MX0 42 STORMAN 497 SX6 B2-B3 STORMAN 498 BX1 X0*X1 STORMAN 499 SB2 B2-1 STORMAN 500 LX1 18 STORMAN 501 LX6 18 STORMAN 502 BX7 X1+X6 . INSERT BYPASS INTO WORD 0 STORMAN 503 BX2 X1 STORMAN 504 SA1 X1 STORMAN 505 EQ B2,B3,RHBL5 . STORE BYPASS INTO LAST WORD STORMAN 506 SA6 B2 . UNLESS BLOCK IS 1 WORD LONG STORMAN 507 RHBL5 SA7 B3 STORMAN 508 SX0 B1 STORMAN 509 LX1 60-36 STORMAN 510 IX6 X1+X0 . UPDATE BACK(FORWARD) STORMAN 511 LX2 60-36 STORMAN 512 LX6 36 STORMAN 513 SA6 A1 STORMAN 514 SA2 X2 STORMAN 515 IX7 X2+X0 . UPDATE FORWARD (BACK) STORMAN 516 SB3 B3-B1 . RESULT TO B3 STORMAN 517 SA7 A2+0 STORMAN 518 EQ RESHB STORMAN 519 * REMOVE FROM FREE POOL COMPLETELY IF EXACT FIT STORMAN 520 RHBL6 LX1 18 STORMAN 521 SB3 A1 . RESULT TO B3 STORMAN 522 RJ TOFHBL STORMAN 523 * SET MARK BIT TO 0 IN THE IMMEDIATELY FOLLOWING HB STORMAN 524 * (WRAP AROUND AT MAXHS) STORMAN 525 SA1 B2+B3 . FETCH WORD 0 OF NEXT HB STORMAN 526 MX0 1 STORMAN 527 NZ X1,RHBL7 . BRANCH IF NOT MAXHS STORMAN 528 SA1 MINHS STORMAN 529 SA1 X1+2 . WRAP AROUND STORMAN 530 RHBL7 LX0 60-5 . MARK BIT IN X0 STORMAN 531 BX7 -X0*X1 . RESET MARK BIT AT A1 STORMAN 532 SA7 A1+0 STORMAN 533 JP RESHB STORMAN 534 * STORMAN 535 * FREEHB STORMAN 536 * RETURN BLOCK OF STORAGE TO FREE HEAP BLOCK POOL STORMAN 537 * PARAM: B3 POINTS TO WORD 0 OF BLOCK TO BE RETURNED STORMAN 538 * B4 POINTS TO THE LAST WORD+1 STORMAN 539 * X0,X1,X2,X7,B3,B4 STORMAN 540 * STORMAN 541 FREEHB DATA 0 STORMAN 542 SA1 B3 . MARK BIT IS SET IF PREVIOUS STORMAN 543 LX1 5 . BLOCK IS FREE(NEVER SET DURING HSC)STORMAN 544 PL X1,FHBA STORMAN 545 * CONCATENATE WITH PREVIOUS FREE BLOCK STORMAN 546 SA1 B3-1 . FETCH BYPASS VALUE FROM STORMAN 547 AX1 18 . PREVIOUS BLOCK STORMAN 548 BX1 -X1 STORMAN 549 SB3 B3+X1 STORMAN 550 SA1 B3 . WORD 0 OF PREVIOUS BLOCK STORMAN 551 RJ TOFHBL . REMOVE FROM FHBL STORMAN 552 FHBA SA1 B4 . CHECK IS NEXT BLOCK IS FREE STORMAN 553 AX1 55 STORMAN 554 SX1 X1-FRETYP+37B STORMAN 555 NZ X1,FHBB STORMAN 556 * CONCATENATE WITH NEXT FREE BLOCK STORMAN 557 SA1 B4 . WORD 0 OF NEXT BLOCK STORMAN 558 BX2 X1 STORMAN 559 AX2 18 STORMAN 560 SB4 B4+X2 . EXTEND THE AREA BY BYPASS STORMAN 561 RJ TOFHBL . REMOVE BLOCK FROM FHBL STORMAN 562 FHBB RJ INFHBL . INSERT THE WHOLE AREA INTO FHBL STORMAN 563 * SET MARK BIT TO 1 IN THE IMMEDIATELY FOLLOWING HB STORMAN 564 * (WRAP AROUND AT MAXHS) STORMAN 565 SA1 B4+1 . FETCH WORD 0 OF NEXT HB STORMAN 566 NZ X1,FHBC . BRANCH IF NOT MAXHS STORMAN 567 SA1 MINHS STORMAN 568 SA1 X1+2 . WRAP AROUND STORMAN 569 FHBC MX0 1 STORMAN 570 LX0 60-5 STORMAN 571 BX7 X0+X1 STORMAN 572 SA7 A1 . SET MARK BIT AT A1 STORMAN 573 JP FREEHB STORMAN 574 * STORMAN 575 * TOFHBL STORMAN 576 * TAKE A BLOCK OFF THE FREE HEAP BLOCK LIST STORMAN 577 * PARAM: X1 CONTAINS WORD 0 OF THE BLOCK TO BE TAKEN OFF STORMAN 578 * X0,X1,X2,X7 STORMAN 579 * STORMAN 580 TOFHBL DATA 0 STORMAN 581 MX0 42 STORMAN 582 SA2 X1 . WORD 0 OF NEXT BLOCK STORMAN 583 LX0 36 . MASK FOR BACK POINTER STORMAN 584 BX7 X0*X2 STORMAN 585 BX2 -X0*X1 STORMAN 586 BX7 X7+X2 . COPY BACK POINTER INTO NEXT BLOCK STORMAN 587 SA7 A2 STORMAN 588 MX0 42 STORMAN 589 SX7 X1 STORMAN 590 LX1 60-36 STORMAN 591 SA7 FHBLRP . UPDATE ROVING POINTER STORMAN 592 SA2 X1 . WORD 0 OF PREVIOUS BLOCK STORMAN 593 BX2 X0*X2 STORMAN 594 BX7 X7+X2 . COPY FORWARD POINTER INTO PREVIOUS STORMAN 595 SA7 A2 . BLOCK STORMAN 596 EQ TOFHBL STORMAN 597 * STORMAN 598 * INFHBL STORMAN 599 * INSERT BLOCK BETWEEN B3 AND B4-1 INTO THE FREE HEAP BLOCK LIST STORMAN 600 * PARAM: B3 AND STORMAN 601 * B4 DELIMIT THE AREA STORMAN 602 * X0,X1,X2,X7,B4 STORMAN 603 * STORMAN 604 INFHBL DATA 0 STORMAN 605 SA1 FHBLRP . INSERT AFTER BLOCK AT X1 STORMAN 606 SX2 FRETYP STORMAN 607 LX2 19 . ACCUMULATE NEW WORD 0 IN X2 STORMAN 608 BX2 X2+X1 . MERGE NEW BACK POINTER STORMAN 609 SA1 X1 . WORD 0 OF PREVIOUS BLOCK STORMAN 610 MX0 42 STORMAN 611 SX7 B3 . NEW FORWARD POINTER IN PREV. BLOCK STORMAN 612 BX0 X0*X1 STORMAN 613 BX7 X7+X0 STORMAN 614 SX1 X1 . ADDRESS OF NEXT BLOCK ON LIST STORMAN 615 SA7 A1 STORMAN 616 LX2 18 STORMAN 617 SX0 B4-B3 STORMAN 618 BX2 X2+X0 . MERGE NEW BYPASS VALUE STORMAN 619 LX2 18 STORMAN 620 BX7 X2+X1 . MERGE NEW FORWARD POINTER STORMAN 621 SA7 B3 . STORE NEW WORD 0 STORMAN 622 SA1 X1 . WORD 0 OF NEXT BLOCK STORMAN 623 MX0 42 STORMAN 624 SX2 B3 . NEW BACK POINTER IN NEXT BLOCK STORMAN 625 LX1 24 STORMAN 626 BX1 X0*X1 STORMAN 627 BX7 X1+X2 STORMAN 628 LX7 36 STORMAN 629 SA7 A1 STORMAN 630 SX7 B4-B3 . BYPASS VALUE TO BE STORED IN STORMAN 631 LX7 18 . LAST WORD STORMAN 632 SB4 B4-1 STORMAN 633 EQ B4,B3,INFHBL . UNLESS BLOCK IS 1 WORD LONG STORMAN 634 SA7 B4 STORMAN 635 EQ INFHBL STORMAN 636 EJECT STORMAN 637 * STORMAN 638 * SEND MESSSGE TO DAYFILE SAYING THAT A HEAP BLOCK COMPACTION IS STORMAN 639 * GOING TO TAKE PLACE STORMAN 640 * THIS WILL HELP WITH DEBUGGING STORMAN 641 HBCCALL DIS ,$ HEAP BLOCK COMPACTION CALLED$ STORMAN 642 HCALL VFD 18/3LMSG,42/HBCCALL STORMAN 643 * STORMAN 644 HBC DATA 0 STORMAN 645 SA1 HBCSTAT . DON'T DO HBC IF STORMAN 646 ZR X1,HBC . HBC STATUS WORD IS ZERO STORMAN 647 * STORMAN 648 * HBC PHASE 1 STORMAN 649 * STORMAN 650 * TURN THE MARK BITS (BIT 5) OFF ON ALL ENTRIES STORMAN 651 * IN THE HEAP STORAGE AREA STORMAN 652 * ELIMINATE SS OR SI ENTRY IN STACK, IF ANY. STORMAN 653 * STORMAN 654 SA1 1 . WAIT FOR ANY PP CALLS TO FINISH STORMAN 655 NZ X1,* STORMAN 656 SA1 HCALL . ISSUE MESSAGE TO DAYFILE STORMAN 657 BX6 X1 STORMAN 658 SA6 1 STORMAN 659 + SA1 1 STORMAN 660 NZ X1,* STORMAN 661 * STORMAN 662 * STORMAN 663 * CHECK FOR ANY INCOMPLETE FILE REQUESTS BEFORE DOING A HEAP BLOCK STORMAN 664 * COMPACTION STORMAN 665 * STORMAN 666 SX5 1 . USED TO CHECK COMPLETE BIT IN FET STORMAN 667 STREAM FILLIST . SET B2=PTR OF FIRST FILE BLOCK STORMAN 668 HBC1 SA1 B2+FI.FET+FET.LFN . STATUS WORD OF FET STORMAN 669 BX1 X1*X5 STORMAN 670 NZ X1,HBC2 . COMPLETE BIT WAS SET STORMAN 671 SX0 -1 STORMAN 672 RJ CALLRCL . GO INTO AUTORECALL STORMAN 673 HBC2 STREAM B2 . NEXT FILE BLOCK STORMAN 674 NZ B2,HBC1 STORMAN 675 * STORMAN 676 SB1 10 STORMAN 677 RJ CKSFCK . CHECK IF DO SELFCHECK STORMAN 678 SB1 4 STORMAN 679 RJ HBCTRC . FIND OUT IF TRC THIS PHASE STORMAN 680 SA1 B6 . SS OR SI MAY APPEAR ONLY STORMAN 681 AX1 55 . AT THE TOP OF STACK STORMAN 682 SX0 X1-SSTY STORMAN 683 ZR X0,WPH1A1 . BRANCH IF SS STORMAN 684 SX0 X1-SITY STORMAN 685 WPH1A1 NZ X0,WPH1A2 . BRANCH IF NOT SI AND NOT SS STORMAN 686 SA1 B6-1 STORMAN 687 SB1 A1 STORMAN 688 SA2 X1 STORMAN 689 RJ SSTOSF . TURN IT INTO SF BY COPYING STORMAN 690 SX7 2 . SF TYPE HEADER STORMAN 691 SA6 B1 STORMAN 692 SA7 B6 STORMAN 693 * STORMAN 694 WPH1A2 MX0 1 STORMAN 695 SA1 MINHS STORMAN 696 LX0 55 . MASK FOR MARK STORMAN 697 SB2 X1+3 . START AFTER THE 3 SPECIAL ENTRIES STORMAN 698 SB5 X1+3 STORMAN 699 WPH1A SA1 B2 . WORD 0 IN NEXT ENTRY TO X1 STORMAN 700 ZR X1,WPH1B . BRANCH IF END OF HS STORMAN 701 BX7 -X0*X1 . MASK MARK OFF STORMAN 702 AX1 18 . BYPASS IS F2 EXCEPT FOR STRTYP STORMAN 703 SA7 A1 STORMAN 704 SB2 B2+X1 . TENTATIVE NEXT ENTRY STORMAN 705 AX1 55-18 STORMAN 706 SX1 X1-STRTYP+37B STORMAN 707 NZ X1,WPH1A . BRANCH IF NOT STRTYP STORMAN 708 AX7 36 . BYPASS IS F3 IF STRTYP STORMAN 709 SB2 X7+0 STORMAN 710 SB2 B2+A1 STORMAN 711 EQ WPH1A STORMAN 712 * STORMAN 713 WPH1B BSS 0 STORMAN 714 * STORMAN 715 * END PHASE 1... STORMAN 716 * STORMAN 717 RJ CHKTRC . CHECK IF CAN TURN OFF TRACE STORMAN 718 EJECT STORMAN 719 * HBC PHASE 2 STORMAN 720 * ALL POSSIBLE PLACES, WHERE REFERENCES MAY BE STORMAN 721 * FOUND ARE EXAMINED AND THE REFERENCED HEAP BLOCKS STORMAN 722 * ARE MARKED. IN PARTICULAR, STORMAN 723 * SIMPLE VARIABLE, THE SVD IS EXAMINED (SEE BELOW) STORMAN 724 * LABEL CODE HB IS MARKED IF BASE NOT 0 STORMAN 725 * PROCEDURE FORMALS AND LOCALS MARKED. STORMAN 726 * ENTRY LABEL IS MARKED STORMAN 727 * DATA CONSTRUCTOR DOPE VECTOR IS MARKED STORMAN 728 * FIELD DOPE VECTORS ARE MARKED STORMAN 729 * WHEN DOPE VECTORS ARE MARKED, ALL STORMAN 730 * FUNCTIONS REFERENCED FROM THE DOPE STORMAN 731 * VECTOR ARE MARKED, TOO. STORMAN 732 * CODE REFERENCED SIMPLE VARIABLES, STORMAN 733 * LABELS, FUNCTIONS AND LITERALS STORMAN 734 * ARE MARKED STORMAN 735 * RETURN INFO IN STACK SVD-S ARE EXAMINED STORMAN 736 * CODE BLOCK CONTAINING CALL IS STORMAN 737 * MARKED. LOCALS ARE MARKED. STORMAN 738 * OTHER STACK ENTRY SVD CONTAINED IS EXAMINED. STORMAN 739 * PATTERN STACK ENTRY VARIABLES REFERENCED BY STORMAN 740 * STARPM, DOLPM OR PRDPM ARE STORMAN 741 * MARKED IF SIMPLE. IF THE VARIABLE STORMAN 742 * IS AN ELEMENT IN A STRUCTURE AND STORMAN 743 * THE STRUCTURE IS NOT MARKED, THE STORMAN 744 * SPECIAL MARK BIT IS SET IN WORD 0 STORMAN 745 * AND A REPEAT COUNTER AT MINHS IS STORMAN 746 * INCREMENTED STORMAN 747 * STRUCTURE IF THE SPECIAL MARK BIT IS SET STORMAN 748 * THE REPEAT COUNTER IS DECREMENTED, STORMAN 749 * THE SPEC. BIT IS RESET, AN NTY REFERENCE STORMAN 750 * TO THE STRUCTURE IS CREATED AND STORMAN 751 * EXAMINED. STORMAN 752 * AT THE END OF PHASE 2 IF THE REPEAT STORMAN 753 * COUNTER IS NOT 0, THE PHASE WILL BE STORMAN 754 * REPEATED. STORMAN 755 * ATY, DTY SVD IF THE REFERENCED STRUCTURE STORMAN 756 * IS NOT MARKED THEN IT WILL BE STORMAN 757 * MARKED AND ALL SVD-S IN THE STORMAN 758 * STRUCTURE ARE EXAMINED RECURSIVELY. STORMAN 759 * DOPE VECTORS ARE MARKED STORMAN 760 * NTY SVD IF SIMPLE, VARIABLE IS MARKED, STORMAN 761 * OTHERWISE TREATED LIKE DTY STORMAN 762 * PATY, PETY, PSTY SVD TREATED LIKE PATTERN STACK ENTRY STORMAN 763 * CTY SVD CODE BLOCK IS MARKED STORMAN 764 * STORMAN 765 * STORMAN 766 SA1 MINHS . MAKE SURE THAT BOTH STORMAN 767 SA3 X1+1 . SPECIAL LOCATIONS ARE 0 STORMAN 768 SA2 X1 STORMAN 769 BX3 X3+X2 STORMAN 770 NZ X3,'VE4' STORMAN 771 SB1 5 STORMAN 772 RJ HBCTRC . FIND OUT IF TRC THIS PHASE STORMAN 773 WPH2A SA1 B5 . B5 WAS INITIALIZED EARLIER STORMAN 774 ZR X1,WPH2B . END OF HS STORMAN 775 BX7 X1 STORMAN 776 AX1 18 STORMAN 777 SB1 X1 . TENTATIVE BYPASS STORMAN 778 AX1 55-18 STORMAN 779 SX5 B5+B1 . PREPARE NEXT B5 STORMAN 780 SX0 X1-VARTYP+37B STORMAN 781 ZR X0,WPH2H . SIMPLE VARIABLE STORMAN 782 SX0 X1-LBLTYP+37B STORMAN 783 ZR X0,WPH2I . LABEL STORMAN 784 SX0 X1-CALLTYP+37B STORMAN 785 ZR X0,WPH2L . FUNCTION STORMAN 786 SX0 X1-CODTYP+37B STORMAN 787 ZR X0,WPH2P STORMAN 788 SX0 X1-STRTYP+37B STORMAN 789 SB5 X5 . START OF NEXT HB, UNLESS CURR.=STR.STORMAN 790 LX7 60-36 . RIGHT JUSTIFY F3 OF CURRENT HB HEADSTORMAN 791 NZ X0,WPH2A . NOT STRUCTURE, B5 IS SET CORRECTLY STORMAN 792 * CURRENT HB IS STRUCTURE, BYPASS IS IN F3 (NOT F2) OF HEADER STORMAN 793 SB5 A1 . RESET B5 TO START OF CURRENT HB STORMAN 794 SX2 B5 STORMAN 795 SB5 B5+X7 STORMAN 796 LX7 18 STORMAN 797 PL X7,WPH2A . BRANCH IF SPECIAL BIT IS NOT SET STORMAN 798 MX0 1 STORMAN 799 BX7 X7-X0 . REMOVE BIT STORMAN 800 LX7 18 STORMAN 801 SA7 X2 STORMAN 802 SA1 MINHS STORMAN 803 MX0 59 . =-1 STORMAN 804 SA3 X1 STORMAN 805 LX7 5 STORMAN 806 IX6 X3+X0 . DECREMENT REPEAT COUNT STORMAN 807 SX0 NTY STORMAN 808 SA6 A3 STORMAN 809 NG X7,WPH2A . BRANCH IF STRUCTURE IS ALREADY STORMAN 810 LX0 55 . MARKED STORMAN 811 LX2 18 STORMAN 812 SB2 X1+1 STORMAN 813 BX7 X2+X0 . ESSENTIALLY NTY SVD TO X7 STORMAN 814 SA7 B2 STORMAN 815 RJ WSVD . EXAMINE IT STORMAN 816 JP WPH2A STORMAN 817 * STORMAN 818 * NOW SCAN THE STACK FOR RETURN INFO AND SVD-S. STORMAN 819 * STORMAN 820 WPH2B SB5 B6+0 STORMAN 821 WPH2C SA1 B5 . NEXT STACK ENTRY HEADING STORMAN 822 ZR X1,WPH2S . BOTTOM OF THE STACK STORMAN 823 SB4 X1 . BYPASS STORMAN 824 SX5 B5-B4 . PREPARE NEXT B5 STORMAN 825 PL X1,WPH2E STORMAN 826 * IT IS AN ENTRY CONTAINING RETURN INFORMATION STORMAN 827 AX1 18 . FIND THE RETURN CODE BLOCK STORMAN 828 SB2 X1 STORMAN 829 RJ CBAS STORMAN 830 MX0 1 STORMAN 831 LX0 55 STORMAN 832 RJ WMARK . MARK CODE BLOCK STORMAN 833 SX5 B5-2 . INTITIALIZE SVD POINTER STORMAN 834 SX6 B4-1 . - SVD COUNT STORMAN 835 WPH2D SA1 X5+1 . LOCAL ADDRESS STORMAN 836 MX0 1 STORMAN 837 LX6 18 STORMAN 838 LX0 55 STORMAN 839 BX5 X5+X6 . PACK X6+X5 INTO X5 STORMAN 840 RJ WMARK . MARK LOCAL STORMAN 841 SB2 X5 STORMAN 842 RJ WSVD . EXAMINE SVD STORMAN 843 BX6 X5 STORMAN 844 SX5 X5-2 . NEW SVD POINTER STORMAN 845 AX6 18 STORMAN 846 SX6 X6-2 . NEW COUNT STORMAN 847 NZ X6,WPH2D STORMAN 848 SB5 X5+1 . POINT TO NEXT HEADER STORMAN 849 JP WPH2C . FINISHED WITH RETURN INFO STORMAN 850 * NOT RETURN: DISPATCH ON TYPE STORMAN 851 WPH2E AX1 55 . SEE AT CHEK STORMAN 852 SA2 WPH2WD STORMAN 853 LX1 2 STORMAN 854 SB3 X1 STORMAN 855 AX2 B3,X2 STORMAN 856 MX0 56 STORMAN 857 SB2 X5 . PREPARE FOR PATTERNS BELOW STORMAN 858 BX2 -X0*X2 STORMAN 859 SB3 X2 STORMAN 860 JP B3+WPH2SW STORMAN 861 * STORMAN 862 WPH2WD SWITCH WPH2SW,0,1,0,0,2,2,2,0,0,3,3,3,3,0,0 STORMAN 863 + SB5 B5-B4 . 0, SF,I,R,SPEC STORMAN 864 JP WPH2C . NOTE JUMP AT WPH2F+1 STORMAN 865 + MX0 1 . 1, S STORMAN 866 LX0 55 STORMAN 867 JP WPH2E1 STORMAN 868 + MX0 1 . 2, PS,PA,PE STORMAN 869 LX0 55 STORMAN 870 JP WPH2F STORMAN 871 + SB2 B5-1 . 4, A,D,N,C STORMAN 872 RJ WSVD STORMAN 873 SB5 X5 . NOTE HOW X5 WAS PREPARED STORMAN 874 JP WPH2C STORMAN 875 * SCAN PATTERN IN STACK FOR STARPM, PRDPM OR DOLPM STORMAN 876 WPH2F SB2 B2+1 . NEXT PATTERN WORD ADDRESS STORMAN 877 EQ B2,B5,WPH2SW STORMAN 878 SA2 B2 . NEXT PATTERN WORD STORMAN 879 SX1 X2+0 STORMAN 880 UX7 B3,X2 STORMAN 881 NG X1,WPH2F . BRANCH IF BIT TABLE STORMAN 882 ID X2,WPH2G . - IF PRD OR DOLPM STORMAN 883 NE B3,B0,WPH2F - IF NOT STARPM STORMAN 884 WPH2G SX1 X1-1 STORMAN 885 RJ WMARKP . SPECIAL REFERENCE STORMAN 886 EQ WPH2F STORMAN 887 * STORMAN 888 * MARK SOURCE OF S IF NOTED: STORMAN 889 WPH2E1 SA1 B6 STORMAN 890 AX1 18 STORMAN 891 SX1 X1+0 STORMAN 892 ZR X1,WPH2SW . BRANCH IF F2=0 STORMAN 893 RJ WMARK STORMAN 894 JP WPH2SW STORMAN 895 * STORMAN 896 * PROCESS HEAP BLOCKS STORMAN 897 * SIMPLE VARIABLE HBWN STORMAN 898 * STORMAN 899 WPH2H SB2 B5+1 . POINTER TO THE VALUE WORD STORMAN 900 RJ WSVD STORMAN 901 SB5 X5 STORMAN 902 JP WPH2A STORMAN 903 * STORMAN 904 * LABEL HBWN STORMAN 905 * STORMAN 906 WPH2I SA1 B5+1 . FETCH CPD STORMAN 907 AX1 18 STORMAN 908 SX1 X1 STORMAN 909 WPH2J ZR X1,WPH2K . BRANCH IF NOT SIMPLE LABEL STORMAN 910 MX0 1 . NOTE BRANCH AT WPH2N BELOW STORMAN 911 LX0 55 STORMAN 912 RJ WMARK . MARK CODE BLOCK STORMAN 913 WPH2K SB5 X5 STORMAN 914 JP WPH2A STORMAN 915 * STORMAN 916 * FUNCTION HBWN, DISPATCH ON FUTY STORMAN 917 * STORMAN 918 WPH2L SA1 B5+1 . FETCH FUD STORMAN 919 NG X1,WPH2K . BRANCH IF STANDARD PROCEDURE STORMAN 920 BX2 X1 . X2 POINTS TO LIST WITH F2 REFS. STORMAN 921 MX0 1 . STORMAN 922 AX1 55 . FUTY TO X1 STORMAN 923 LX0 55 . MARK BIT TO X0 STORMAN 924 ZR X1,WPH2M2 . BRANCH IF PROCEDURE STORMAN 925 UX7 B4,X1 STORMAN 926 LT B4,B0,WPH2N . BRANCH IF NOT FIELD STORMAN 927 SX2 A1+0 . START OF LIST IF FIELD STORMAN 928 WPH2M SA1 X2 . LOOP TO MARK DOPE VECTORS STORMAN 929 SX2 X1+0 . IN LIST STORMAN 930 AX1 18 . GET F2 STORMAN 931 WPH2M1 RJ WMARKDP STORMAN 932 NZ X2,WPH2M . BRANCH IF NOT LAST IN LIST STORMAN 933 SB5 X5 STORMAN 934 JP WPH2A STORMAN 935 WPH2N SX7 X1-DATATYP . FUTY IS STILL IN X1 STORMAN 936 NZ X7,WPH2K . BRANCH IF NOT DATA CONSTRUCTOR STORMAN 937 SA1 B5+1 STORMAN 938 RJ WMARKDP . MARK DOPE VECTORS STORMAN 939 SB5 X5 STORMAN 940 JP WPH2A STORMAN 941 WPH2M2 SA1 X2 . LOOP TO MARK PARAMETERS OF PROCEDURSTORMAN 942 SX2 X1+0 STORMAN 943 AX1 18 . GET F2 STORMAN 944 RJ WMARK STORMAN 945 NZ X2,WPH2M2 . BRANCH IF NOT LAST IN LIST STORMAN 946 SB5 X5 STORMAN 947 JP WPH2A STORMAN 948 * STORMAN 949 * CODE HB STORMAN 950 * NOTE THAT WMARK IS NOT USED HERE TO GAIN SPEED. STORMAN 951 * B5 POINTS ONE WORD BEYOND THE CHB STORMAN 952 * B4 - TO THE CURRENT MICOP WORD STORMAN 953 * B3 CONTAINS THE CONSTANT CALL STORMAN 954 * B1 - CONSTANT -1 STORMAN 955 * X0 - MARK BIT STORMAN 956 * STORMAN 957 WPH2P MX0 1 . PREPARE REGISTERS AS DESCRIBED STORMAN 958 SB1 -1 . ABOVE STORMAN 959 SB4 B5 STORMAN 960 LX0 55 STORMAN 961 SB5 X5 STORMAN 962 SB3 CALL STORMAN 963 WPH2Q SB4 B4-B1 . ADDRESS OF NEXT MICOP WORD STORMAN 964 GE B4,B5,WPH2A . BRANCH IF END OF CHB STORMAN 965 SA1 B4 . NEXT MICOP WORD TO X1 STORMAN 966 SB2 X1 STORMAN 967 GE B3,B2,WPH2R . JUMP IF BRANCH MICOP STORMAN 968 AX1 18 STORMAN 969 SX2 X1+B1 . MARK F2 ADDRESSED HBWN STORMAN 970 NG X2,WPH2R . UNLESS F2 LE 0 STORMAN 971 SA3 X2 STORMAN 972 NO STORMAN 973 BX7 X3+X0 STORMAN 974 SA7 A3 STORMAN 975 WPH2R AX1 18 . MARK F2 OR F3 ADDRESSED HBWN STORMAN 976 SX2 X1+B1 . UNLESS FIELD IS LE 0 STORMAN 977 NG X2,WPH2Q STORMAN 978 LX1 42 . CHECK FOR V BIT SET ON GOF BRANCHESSTORMAN 979 NG X1,WPH2Q STORMAN 980 SA4 X2 STORMAN 981 NO STORMAN 982 BX6 X4+X0 STORMAN 983 SA6 A4 STORMAN 984 EQ WPH2Q STORMAN 985 * STORMAN 986 * FINISHED STACK SCAN: TREAT A5 AS IN IMPLICIT STORMAN 987 * RETURN ADDRESS. (SEE ABOVE) STORMAN 988 * STORMAN 989 WPH2S SX1 A5 STORMAN 990 RJ CBAS STORMAN 991 MX0 1 STORMAN 992 LX0 55 STORMAN 993 RJ WMARK STORMAN 994 * STORMAN 995 * REPEAT PHASE 2 IF REPEAT COUNT IS NOT 0 STORMAN 996 SA1 MINHS STORMAN 997 BX7 X7-X7 STORMAN 998 SA2 X1 . REPEAT COUNT TO X2 STORMAN 999 SA7 X1+1 . CLEAR 2ND SPECIAL WORD STORMAN 1000 SB5 X1+2 STORMAN 1001 NZ X2,WPH2A STORMAN 1002 RJ CHKTRC . CHECK IF CAN TURN OFF TRACE STORMAN 1003 * STORMAN 1004 * END PHASE 2... STORMAN 1005 * STORMAN 1006 EJECT STORMAN 1007 * HBC PHASE 3 STORMAN 1008 * IN THE THIRD PHASE UNUSED HEAP BLOCKS ARE DELETED, STORMAN 1009 * AND F3 OF WORD 0 IN ALL USED BLOCKS IS UPDATED STORMAN 1010 * TO REFLECT THE ADDRESS OF THE BLOCK, WERE THE USED STORMAN 1011 * BLOCKS FOLLOWING EACH OTHER TIGHTLY. STORMAN 1012 * IN GENERAL, UNMARKED BLOCKS ARE UNUSED, EXCEPT STORMAN 1013 * - SIMPLE VARIABLES ARE UNUSED IF UNMARKED AND STORMAN 1014 * CONTAIN A NULL STRING STORMAN 1015 * - LABELS ARE UNUSED IF UNMARKED AND UNDEFINED STORMAN 1016 * - FUNCTIONS - - - STORMAN 1017 * FILTYP BLOCKS ARE USED UNLESS THEIR REFERENCE COUNT STORMAN 1018 * IS ZERO. STORMAN 1019 * STORMAN 1020 * B1 FUTURE BASE STORMAN 1021 * B2 CURRENT BASE STORMAN 1022 * X0 MASK FOR F3 STORMAN 1023 * STORMAN 1024 SB1 6 STORMAN 1025 RJ HBCTRC . FIND OUT IF TRC THIS PHASE STORMAN 1026 SA1 MINHS . PREPARE B1,B2 AND X0 STORMAN 1027 MX0 18 STORMAN 1028 LX0 60-6 STORMAN 1029 SB2 X1+3 STORMAN 1030 SB1 B2+0 STORMAN 1031 * STORMAN 1032 WPH3A SA1 B2 . WORD 0 OF NEXT HB STORMAN 1033 ZR X1,WPH3R . BRANCH IF END OF HS STORMAN 1034 BX2 X1 STORMAN 1035 BX7 -X0*X1 . CLEAR F3 STORMAN 1036 AX1 55 . HSTY TO X1 STORMAN 1037 LX2 5 STORMAN 1038 SX6 B1 STORMAN 1039 SX3 X1-STRTYP+37B STORMAN 1040 PL X2,WPH3E . BRANCH IF NOT MARKED STORMAN 1041 WPH3B LX2 60-5-18 . BYPASS TO X2 STORMAN 1042 NZ X3,WPH3C STORMAN 1043 SA2 X2 . GET BYPASS OF STRUCT. FROM DOPE V.STORMAN 1044 WPH3C LX6 36 . MARKED BLOCKS ARE USED STORMAN 1045 SB1 B1+X2 . THEREFORE UPDATE B1 STORMAN 1046 BX7 X7+X6 . MERGE IN FUTURE BASE STORMAN 1047 SA7 A1 STORMAN 1048 WPH3D SB2 B2+X2 . GO TO NEXT HB STORMAN 1049 EQ WPH3A STORMAN 1050 * STORMAN 1051 * FOR UNMARKED BLOCKS, DECIDE IF UNUSED STORMAN 1052 WPH3E LX2 60-5-18 STORMAN 1053 ZR X3,WPH3L STORMAN 1054 SX3 X1-FILTYP+37B . IF I/O BUFFER STORMAN 1055 ZR X3,WPH3N . BRANCH TO CHECK REF. COUNT STORMAN 1056 SX3 X1-FRETYP+37B STORMAN 1057 ZR X3,WPH3D . FREE BLOCK UNUSED STORMAN 1058 SX3 X1-CODTYP+37B . IF UNUSED CODE BLOCK STORMAN 1059 ZR X3,WPH3M . GO TAKE IT OFF CODLIST STORMAN 1060 SX3 X1-DOPTYP+37B STORMAN 1061 ZR X3,WPH3P . DOPE VECTORS UNUSED STORMAN 1062 SX3 X1-VARTYP+37B STORMAN 1063 ZR X3,WPH3K . SIMPLE VARIABLES, SEE BELOW STORMAN 1064 SX3 X1-LBLTYP+37B . CHECK FOR UNDEFINED STORMAN 1065 ZR X3,WPH3F . LABEL OR FUNCTION STORMAN 1066 SX3 X1-CALLTYP+37B STORMAN 1067 NZ X3,WPH3G STORMAN 1068 WPH3F SA3 B2+1 STORMAN 1069 AX3 55 STORMAN 1070 SX3 X3-UNDFTYP STORMAN 1071 NZ X3,WPH3C . USED IF NOT UNDEFINED STORMAN 1072 * STORMAN 1073 * UNUSED HBWN, TAKE IT OFF FROM HASH LIST STORMAN 1074 WPH3G SB4 B2 STORMAN 1075 SB5 B2+2 STORMAN 1076 BX0 X1 STORMAN 1077 LX0 55 . HBTY TO X0 STORMAN 1078 SB3 B0-B5 . NEGATIVE B3 FLAGS, NO SEARCH STORMAN 1079 RJ SEARCH . RETURN HASH CODE ONLY STORMAN 1080 * X2 CONTAINS THE HEAD OF THE HASH LIST STORMAN 1081 SA1 B4 STORMAN 1082 MX0 42 STORMAN 1083 SX7 X1 . OLD HASH LINK TO BE INSERTED STORMAN 1084 AX1 18 . INTO PREVIOUS ENTRY STORMAN 1085 WPH3H SB3 X2 . LOOP TO FIND PREVIOUS ENTRY STORMAN 1086 EQ B3,B4,WPH3I . POINT STORMAN 1087 SA2 X2 STORMAN 1088 EQ WPH3H STORMAN 1089 WPH3I BX6 X0*X2 . PREV. ENTRY AT A2 STORMAN 1090 BX7 X7+X6 . MERGE LINK STORMAN 1091 NG X2,WPH3J STORMAN 1092 NG X3,WPH3J . SHIFT IF LEFT ENTRY IN STORMAN 1093 LX7 30 . HASH TABLE STORMAN 1094 WPH3J SA7 A2 STORMAN 1095 MX0 18 . RESTORE X0 STORMAN 1096 SB2 B4 . RESTORE B2 STORMAN 1097 LX0 60-6 STORMAN 1098 BX2 X1 . BYPASS TO X2 STORMAN 1099 JP WPH3P STORMAN 1100 * STORMAN 1101 * TEST IF SIMPLE VARIABLE CONTAINS THE NULL STRING STORMAN 1102 WPH3K SA3 B2+1 . SVD TO X3 STORMAN 1103 SX4 X3 STORMAN 1104 AX3 55 STORMAN 1105 SX3 X3-SSTY STORMAN 1106 NZ X3,WPH3C . USED IF NOT SS TYPE STORMAN 1107 SA3 X4 . FETCH FIRST WORD OF THE STRING STORMAN 1108 NZ X3,WPH3C . USED IF NOT NULL STRING STORMAN 1109 BX4 X6 STORMAN 1110 SX6 B7 . ADD TO FREE LIST STORMAN 1111 SA6 A3 STORMAN 1112 SB7 A3 . RELEASE LS STORMAN 1113 BX6 X4 . RESTORE X6 STORMAN 1114 JP WPH3G . UNUSED HBWN STORMAN 1115 * STORMAN 1116 * UNPACK BYPASS FROM F3 OF WORD 0 IN STRUCTURE: STORMAN 1117 WPH3L LX2 60-18 STORMAN 1118 JP WPH3P STORMAN 1119 * STORMAN 1120 * TAKE CODTYP BLOCK OFF CODLIST STORMAN 1121 WPH3M SA1 CODLIST STORMAN 1122 WPH3M1 SB3 X1 STORMAN 1123 EQ B3,B2,WPH3M2 STORMAN 1124 SA1 B3 STORMAN 1125 EQ WPH3M1 STORMAN 1126 WPH3M2 MX6 42 . WORD POINTING TO OUR BLOCK IS AT A1STORMAN 1127 SA3 B2 STORMAN 1128 SX4 X3+0 . NEW POINTER FOR A1 STORMAN 1129 WPH3M3 BX7 X6*X1 STORMAN 1130 BX7 X7+X4 STORMAN 1131 LX6 18 STORMAN 1132 SA7 A1 STORMAN 1133 NZ X4,WPH3P . BRANCH IF LAST IN LIST NOT CHANGED STORMAN 1134 SX4 A1 . UPDATE LAST IN LIST IN F2 STORMAN 1135 LX4 18 . OF CODLIST STORMAN 1136 SA1 CODLIST STORMAN 1137 EQ WPH3M3 STORMAN 1138 * STORMAN 1139 * CHECK REFERENCE COUNT IN I/O BUFFER STORMAN 1140 WPH3N SA3 B2+FI.RFC STORMAN 1141 SX3 X3+0 STORMAN 1142 NZ X3,WPH3C . BRANCH IF BLOCK IS USED STORMAN 1143 * STORMAN 1144 * MAKE UNUSED BLOCK AT B2 WITH BYPASS X2 LOOK LIKE A STORMAN 1145 * FREE HB, SO PHASE 4 WILL IGNORE IT STORMAN 1146 WPH3P SX3 FRETYP STORMAN 1147 SX7 X2 STORMAN 1148 LX3 55 STORMAN 1149 LX7 18 STORMAN 1150 BX7 X7+X3 . ONLY THE HSTY AND BYPASS STORMAN 1151 SA7 B2 . FIELDS ARE IMPORTANT STORMAN 1152 SB2 B2+X2 STORMAN 1153 EQ WPH3A STORMAN 1154 * STORMAN 1155 WPH3R BSS 0 STORMAN 1156 RJ CHKTRC . CHECK IF CAN TURN OFF TRACE STORMAN 1157 * STORMAN 1158 * END OF PHASE 3... STORMAN 1159 * STORMAN 1160 EJECT STORMAN 1161 * HBC PHASE 4 STORMAN 1162 * IN PHASE 4 ALL REFERENCES TO HEAP STORAGE WHICH STORMAN 1163 * WERE NOT DELETED IN PHASE 3 ARE UPDATED TO POINT TO STORMAN 1164 * THE SAME RELATIVE WORD AS IN THE CONTAINING HEAP STORMAN 1165 * BLOCK BUT WITH BASE ADDRESS AS INDICATED IN F3 OF WORD 0. STORMAN 1166 * STORMAN 1167 SB1 7 STORMAN 1168 RJ HBCTRC . FIND OUT IF TRC THIS PHASE STORMAN 1169 JP WPH4T STORMAN 1170 * STORMAN 1171 WPH4A SA1 B1 . NEXT HB WORD 0 OR SVD STORMAN 1172 BX2 X1 STORMAN 1173 ZR X1,WPH4Z2 STORMAN 1174 PL X1,WPH4S STORMAN 1175 AX1 55 . HSTY TO X1 STORMAN 1176 SB2 X1 STORMAN 1177 MX0 42 . PREPARE FOR WUPF1 CALL STORMAN 1178 JP B2+WPH4A1 . DISPATCH ON HSTY STORMAN 1179 + AX2 18 . FRETYP STORMAN 1180 SB1 B1+X2 . IGNORE FREE BLOCK SINCE IT WILL STORMAN 1181 EQ WPH4A . BE OVERWRITTEN IN PHASE 5. STORMAN 1182 + BX1 X2 . CODTYP STORMAN 1183 AX2 18 STORMAN 1184 JP WPH4P STORMAN 1185 + SB2 B1+1 . DOPTYP STORMAN 1186 JP WPH4K STORMAN 1187 + BX1 X2 . FILTYP STORMAN 1188 AX2 18 STORMAN 1189 JP WPH4M STORMAN 1190 + SB1 B1+1 . STRTYP STORMAN 1191 JP WPH4J STORMAN 1192 + SB5 0 . REALTYP STORMAN 1193 JP WPH4B STORMAN 1194 + SB5 -1 . INTTYP STORMAN 1195 JP WPH4B STORMAN 1196 + DATA 0 . NOT USED STORMAN 1197 + SB5 -2 . LITTYP STORMAN 1198 JP WPH4B STORMAN 1199 + SA1 B1+1 . LBLTYP STORMAN 1200 JP WPH4E STORMAN 1201 + SA1 B1+1 . CALLTYP STORMAN 1202 JP WPH4F STORMAN 1203 + SB2 B1+1 . VARTYP =-1 STORMAN 1204 RJ WP4SVD . UPDATE SVD IN VALUE WORD STORMAN 1205 WPH4A1 SB5 2 STORMAN 1206 WPH4B MX0 42 . BASE ADDRESS FOR HSTY SWITCH STORMAN 1207 SA1 B1 STORMAN 1208 RJ WUPF1 . UPDATE HASH LINK STORMAN 1209 SA7 A1 STORMAN 1210 AX1 18 . BYPASS TO X1 STORMAN 1211 SB3 B1+X1 . PREPARE NEXT B1 STORMAN 1212 AX1 18 STORMAN 1213 SB2 X1 . FUTURE ADDRESS STORMAN 1214 EQ B1,B2,WPH4D . NO UPDATING NECESSARY STORMAN 1215 SX2 B2-B1 . BLOCK DISPLACEMENT STORMAN 1216 SB2 B1+B5 . ADDRESS OF FIRST WORD OF HBWN NAME STORMAN 1217 LT B0,B5,WPH4C . BRANCH IF HBWN STORMAN 1218 SA1 B1+1 . UPDATE SVD IF HEAP BLOCK LITERAL STORMAN 1219 IX7 X1+X2 STORMAN 1220 SA7 A1 STORMAN 1221 EQ B5,B0,WPH4D . BRANCH IF REAL STORMAN 1222 LX2 18 STORMAN 1223 IX7 X7+X2 STORMAN 1224 SA7 A1 STORMAN 1225 SB2 B2+4 . ADDRESS OF FIRST WORD OF LIT. VALUESTORMAN 1226 AX2 18 . REPOSITION DISP. FOR LITERALS STORMAN 1227 WPH4C SA1 B2 . ADD BLOCK DISPLACEMENT TO LINK STORMAN 1228 SB2 X1 STORMAN 1229 EQ B2,B0,WPH4D STORMAN 1230 IX7 X1+X2 STORMAN 1231 SA7 A1 STORMAN 1232 EQ WPH4C STORMAN 1233 WPH4D SB1 B3 STORMAN 1234 JP WPH4A STORMAN 1235 * UPDATE CPD IN VALUE WORD OF LABEL STORMAN 1236 WPH4E LX1 60-18 STORMAN 1237 SX3 X1 STORMAN 1238 ZR X3,WPH4A1 . IGNORE IF RETURN ETC. STORMAN 1239 RJ WUPF1 . SIMILAR TO TREATMENT OF STORMAN 1240 LX7 18 . CTY SVD IN WP4SVD STORMAN 1241 IX3 X2-X3 STORMAN 1242 IX7 X3+X7 STORMAN 1243 SA7 A1 STORMAN 1244 JP WPH4A1 STORMAN 1245 * UPDATE FUD IN VALUE WORD OF FUNCTION STORMAN 1246 WPH4F NG X1,WPH4A1 . IGNORE IF STANDARD PROCEDURE STORMAN 1247 BX6 X1 STORMAN 1248 AX1 55 STORMAN 1249 NZ X1,WPH4H . BRANCH IF NOT PROCEDURE STORMAN 1250 MX3 59 . LIST CONTAINS POINTERS TO WORD 0 STORMAN 1251 WPH4G SA1 X6 . NEXT ON FORMAL OR FIELD LIST STORMAN 1252 SX6 X1 . LINK TO X6 STORMAN 1253 LX1 60-18 . UPDATE F2 STORMAN 1254 IX1 X1+X3 . X3 =-1 OR 0 STORMAN 1255 RJ WUPF1 STORMAN 1256 IX7 X7-X3 STORMAN 1257 LX7 18 STORMAN 1258 SA7 A1+0 STORMAN 1259 NZ X6,WPH4G . FETCH NEXT IF NOT END OF LIST STORMAN 1260 JP WPH4A1 STORMAN 1261 WPH4H SX3 X1-FLDTYP STORMAN 1262 NZ X3,WPH4I STORMAN 1263 * UPDATE FIELD LIST USING THE LOOP ABOVE WITH X3=0 STORMAN 1264 SX6 A1 . LIST STARTS AT A1 STORMAN 1265 EQ WPH4G STORMAN 1266 WPH4I SX3 X1-DATATYP STORMAN 1267 NZ X3,WPH4A1 . IGNORE IF UNDEFINED STORMAN 1268 BX1 X6 STORMAN 1269 RJ WUPF1 . UPDATE POINTER TO DOPE VECTOR STORMAN 1270 SA7 A1 STORMAN 1271 JP WPH4A1 STORMAN 1272 * STORMAN 1273 * UPDATE WORD 0 OF A STRUCTURE. THE SVD-S CONTAINED IN STORMAN 1274 * THE STRUCTURE ARE UPDATED IN THE MAIN LOOP. (NOTE THAT STORMAN 1275 * SVD-S ARE POSITIVE, WHILE HB-S START WITH A NEGATIVE WORD) STORMAN 1276 * STORMAN 1277 WPH4J BX1 X2 STORMAN 1278 LX1 60-18 STORMAN 1279 SB2 X1 . DOPE VECTOR POINTER STORMAN 1280 * STORMAN 1281 * IF THE DOPE VECTOR (B2) FOLLOWS THE STRUCTURE (B1) IS HS, WE DO NOT STORMAN 1282 * UPDATE THE DOPE POINTER. THAT WILL BE DONE IN PHASE 5 (WPH5B). STORMAN 1283 * PHASE 5 NEEDS TO BE ABLE TO FIND THE DOPE VECTOR SO IT CAN GET THE STORMAN 1284 * BYPASS FOR THE STRUCTURE. STORMAN 1285 * STORMAN 1286 GE B2,B1,WPH4A STORMAN 1287 RJ WUPF1 . UPDATE POINTER TO DOPE VECTOR STORMAN 1288 LX7 18 STORMAN 1289 SA7 A1 STORMAN 1290 JP WPH4A STORMAN 1291 * UPDATE FIELD REFERENCE IF NOT ARRAY DOPE VECTOR STORMAN 1292 WPH4K AX2 18 . BYPASS TO X2 STORMAN 1293 SB1 B1+X2 . WORD 0 OF NEXT HEAP BLOCK STORMAN 1294 WPH4L SA1 B2 . NEXT WORD IN DOPE VECTOR STORMAN 1295 BX2 X1 STORMAN 1296 BX6 X1 STORMAN 1297 LX2 1 STORMAN 1298 NG X2,WPH4A . IGNORE IF ARRAY STORMAN 1299 RJ WUPF1V . UPDATE POINTER TO FIELD FUD STORMAN 1300 SA7 A1+0 STORMAN 1301 SB2 B2+1 STORMAN 1302 PL X6,WPH4L . REPEAT IF NOT LAST WORD STORMAN 1303 JP WPH4A STORMAN 1304 * UPDATE LINK AND FET POINTERS IN INPUT/OUTPUT BUFFER STORMAN 1305 WPH4M SB3 B1+X2 . PREPARE NEXT B1 STORMAN 1306 RJ WUPF1 . UPDATE LINK IN F1, WORD 0 STORMAN 1307 SA7 A1 STORMAN 1308 AX1 36 STORMAN 1309 SB2 X1 STORMAN 1310 SX2 B2-B1 . BLOCK DISPLACEMENT TO X2 STORMAN 1311 SB2 B1+7 STORMAN 1312 SB1 B1+3 STORMAN 1313 WPH4N SA1 B1 . UPDATE FET POINTERS IN STORMAN 1314 IX7 X1+X2 . WORD 3, 4, 5 AND 6 OF THE STORMAN 1315 SA7 A1+0 . BLOCK STORMAN 1316 SB1 B1+1 STORMAN 1317 LT B1,B2,WPH4N STORMAN 1318 JP WPH4D . RESTORE B1 FROM B3 STORMAN 1319 * UPDATE LINK AND HBWN VALUE WORD REFERENCES IN STORMAN 1320 * CODE BLOCK. THE LOOP BELOW IS SIMILAR TO THE ONE STORMAN 1321 * AT WPH2P. STORMAN 1322 WPH4P SB3 B1+X2 . PREPARE NEXT B1 STORMAN 1323 RJ WUPF1 . UPDATE LINK IN F1, WORD 0 STORMAN 1324 SB5 CALL . CONSTANT TO IDENTIFY BRANCHES STORMAN 1325 WPH4Q SB1 B1+1 . ADDRESS OF NEXT MICOP WORD STORMAN 1326 GE B1,B3,WPH4A . BRANCH IF END OF BLOCK STORMAN 1327 SA1 B1 STORMAN 1328 SB2 X1 STORMAN 1329 LX1 60-18 STORMAN 1330 SB4 X1 STORMAN 1331 GE B0,B4,WPH4R . UPDATE RIGHT MICOP ADDRESS STORMAN 1332 RJ WUPF1V . IF GT 0 STORMAN 1333 BX1 X7 STORMAN 1334 LX7 18 STORMAN 1335 SA7 A1 STORMAN 1336 WPH4R GE B5,B2,WPH4Q . NO LEFT MICOP IF BRANCH STORMAN 1337 LX1 60-18 STORMAN 1338 SB4 X1 STORMAN 1339 EQ B4,B0,WPH4Q . UPDATE LEFT MICOP ADDRESS STORMAN 1340 RJ WUPF1V . UNLESS IT IS 0 STORMAN 1341 LX7 36 STORMAN 1342 SA7 A1 STORMAN 1343 EQ WPH4Q STORMAN 1344 * UPDATE SVD, PRESUMABLY APPEARING IN A STRUCTURE STORMAN 1345 WPH4S SB2 B1 STORMAN 1346 RJ WP4SVD STORMAN 1347 SB1 B1+1 STORMAN 1348 JP WPH4A STORMAN 1349 * STORMAN 1350 * STORMAN 1351 * SCAN THE STACK FOR REFERENCES IN A LOOP STORMAN 1352 * SIMILAR TO THE ONE AT WPH2B. STORMAN 1353 * NOTE THAT UNLIKE IN PHASE 2 THIS CODE IS EXECUTED BEFORE THE STORMAN 1354 * HS SCAN, SO THAT CODLIST CAN STILL BE LOOKED UP. STORMAN 1355 * STORMAN 1356 WPH4T SB5 B6+0 STORMAN 1357 * STORMAN 1358 WPH4U SA1 B5 . NEXT STACK ENTRY HEADER STORMAN 1359 ZR X1,WPH4Z . BRANCH IF BOTTOM OF STACK STORMAN 1360 SB4 X1 . BYPASS TO B4 STORMAN 1361 PL X1,WPH4W . BRANCH IF NOT RETURN INFO. STORMAN 1362 LX1 60-18 . UNPACK RETURN ADDRESS STORMAN 1363 SB2 X1 STORMAN 1364 BX6 X1 STORMAN 1365 RJ CBAS . FIND BASE OF CODE BLOCK STORMAN 1366 SX3 X1 STORMAN 1367 MX0 42 STORMAN 1368 RJ WUPF1 STORMAN 1369 IX6 X6-X3 . UPDATE RETURN ADDRESS WITH STORMAN 1370 IX6 X6+X2 . BLOCK DISPLACEMENT STORMAN 1371 LX6 18 STORMAN 1372 SA6 B5 STORMAN 1373 SB4 B5-B4 . PREPARE TO SCAN STACKED SVD-S STORMAN 1374 SB5 B5-1 . AND SVD ADDRESSES STORMAN 1375 WPH4V MX0 42 STORMAN 1376 SA1 B5 STORMAN 1377 RJ WUPF1V . UPDATE SVD ADDRESS STORMAN 1378 SA7 B5+0 STORMAN 1379 SB2 B5-1 STORMAN 1380 SB5 B5-2 STORMAN 1381 RJ WP4SVD . UPDATE SVD STORMAN 1382 LT B4,B5,WPH4V STORMAN 1383 JP WPH4U . FINISHED WITH RETURN INFO. STORMAN 1384 WPH4W AX1 55 . NOT RETURN INFO. STORMAN 1385 SA2 WPH2WD . DISPATCH ON SETY STORMAN 1386 LX1 2 STORMAN 1387 SB3 X1 STORMAN 1388 AX2 B3,X2 STORMAN 1389 MX0 56 STORMAN 1390 BX2 -X0*X2 STORMAN 1391 SB3 X2 STORMAN 1392 JP B3+WPH4SW STORMAN 1393 * STORMAN 1394 WPH4SW SB5 B5-B4 . 0, SF,I,R,SPEC STORMAN 1395 EQ WPH4U STORMAN 1396 + SA1 B5 . 1, S STORMAN 1397 LX1 60-18 STORMAN 1398 EQ WPH4W1 STORMAN 1399 + SB4 B5-B4 . 2, PS,PA,PE STORMAN 1400 MX0 42 STORMAN 1401 JP WPH4X STORMAN 1402 + SB2 B5-1 . 3, A,D,N,C STORMAN 1403 RJ WP4SVD STORMAN 1404 SB5 B5-B4 STORMAN 1405 JP WPH4U STORMAN 1406 * STORMAN 1407 * UPDATE SOURCE OF S, IF ANY STORMAN 1408 WPH4W1 SX3 X1 STORMAN 1409 MX0 42 STORMAN 1410 ZR X3,WPH4SW . BRANCH IF NO SOURCE STORMAN 1411 SA3 X1 STORMAN 1412 RJ WUPF1P . UPDATE SOURCE IN F2 STORMAN 1413 LX7 18 STORMAN 1414 SA7 B5 STORMAN 1415 JP WPH4SW STORMAN 1416 * STORMAN 1417 * SCAN PATTERN IN STACK FOR STARPM, PRDPM OR DOLPM STORMAN 1418 WPH4X SB5 B5-1 . SEE ALSO LOOP AT WPH2F STORMAN 1419 GE B4,B5,WPH4U STORMAN 1420 SA2 B5 STORMAN 1421 SX1 X2+0 STORMAN 1422 UX3 B3,X2 STORMAN 1423 NG X1,WPH4X STORMAN 1424 ID X2,WPH4Y STORMAN 1425 NE B3,B0,WPH4X STORMAN 1426 WPH4Y BX1 X2 STORMAN 1427 SA3 X1 STORMAN 1428 RJ WUPF1P . UPDATE VARIABLE REFERENCE STORMAN 1429 SA7 B5 STORMAN 1430 EQ WPH4X STORMAN 1431 * STORMAN 1432 * FINALLY, UPDATE HS REFERENCES IN THE HASH TABLE, STORMAN 1433 * IN CODLIST, FILLIST AND A5 STORMAN 1434 * STORMAN 1435 WPH4Z SX1 HASHLN-1 STORMAN 1436 SB5 X1 . NUMBER OF WORDS IN HASH TABLE STORMAN 1437 MX0 42 STORMAN 1438 WPH4Z1 SA1 B5+HASHTBL STORMAN 1439 RJ WUPF1 . UPDATE LEFT ENTRY STORMAN 1440 BX1 X7 STORMAN 1441 LX1 30 STORMAN 1442 RJ WUPF1 . UPDATE RIGHT ENTRY STORMAN 1443 LX7 30 STORMAN 1444 SA7 A1 STORMAN 1445 SB5 B5-1 STORMAN 1446 GE B5,B0,WPH4Z1 STORMAN 1447 * STORMAN 1448 SA1 CODLIST STORMAN 1449 SA4 FILLIST STORMAN 1450 RJ WUPF1 STORMAN 1451 LX7 60-18 STORMAN 1452 BX1 X7 STORMAN 1453 RJ WUPF1 . UPDATE LAST IN CODLIST STORMAN 1454 BX6 X7 STORMAN 1455 BX1 X4 STORMAN 1456 RJ WUPF1 STORMAN 1457 SA7 A4 STORMAN 1458 SB2 A5 . TREAT A5 AS A RETURN STORMAN 1459 RJ CBAS . ADDRESS AT WPH4U STORMAN 1460 LX6 18 STORMAN 1461 SA6 CODLIST . MAY STORE CODLIST NOW STORMAN 1462 SB2 X1 STORMAN 1463 RJ WUPF1 STORMAN 1464 SB3 X2 STORMAN 1465 SB3 B3-B2 STORMAN 1466 SA4 MINHS STORMAN 1467 SA1 OUTSTRM . UPDATE OUTSTRM STORMAN 1468 RJ WUPF1 STORMAN 1469 SA7 A1 STORMAN 1470 SA5 A5+B3 STORMAN 1471 SB1 X4+3 STORMAN 1472 JP WPH4A STORMAN 1473 * STORMAN 1474 WPH4Z2 BSS 0 STORMAN 1475 SA1 ISVB1 STORMAN 1476 PL X1,WPH4Z3 . XK WILL BE RESTORED FROM A5 STORMAN 1477 SA1 ISVX5 . FETCH OLD X5 STORMAN 1478 SA1 X1-1 . X5 IS CPD STORMAN 1479 AX1 36 . GET FUTURE ADDRESS OF HEAP BLOCK STORMAN 1480 SX7 X1+1 . CPD IS SECOND WORD OF BLOCK STORMAN 1481 SA7 ISVX5 . STORE THE NEW X5 STORMAN 1482 WPH4Z3 BSS 0 STORMAN 1483 RJ CHKTRC . CHECK IF CAN TURN OFF TRACE STORMAN 1484 * STORMAN 1485 * END OF PHASE 4 STORMAN 1486 * STORMAN 1487 EJECT STORMAN 1488 * HBC PHASE 5 STORMAN 1489 * PASS 5 WILL MOVE ALL USED HEAP BLOCKS TO THEIR DESTINATION STORMAN 1490 * AS DEFINED IN F3. THE ORIGINAL VALUE OF F3 IS RE- STORMAN 1491 * ESTABLISHED: STORMAN 1492 * VAR,LBL,CALL,LIT,INT TYPES: BY COUNTING THE NUMBER OF STORMAN 1493 * CHARACTERS IN THE NAME. STORMAN 1494 * STRTYP: F1 IN THE DOPE VECTOR IS COPIED TO F3 STORMAN 1495 * OTHER TYPES: F3 IS SET TO 0 STORMAN 1496 * ALL MARK BITS ARE TURNED OFF STORMAN 1497 * AFTER MOVING ALL BLOCKS, THE STACK IS MOVED SO THAT STORMAN 1498 * THE FREE SPACE IN HS WILL BE EQUAL TO THE FREE SPACE IN SS. STORMAN 1499 * MAXHS, MINSTAK, B6, ETC. ARE MODIFIED TO REFLECT THE STORMAN 1500 * REARRANGED SITUATION. HS WILL CONTAIN A SINGLE FREE STORMAN 1501 * BLOCK AT THE END. (+ THE DUMMY BLOCK) STORMAN 1502 * STORMAN 1503 SB1 8 STORMAN 1504 RJ HBCTRC . FIND OUT IF TRC THIS PHASE STORMAN 1505 SA1 MINHS STORMAN 1506 SB1 X1+3 STORMAN 1507 * STORMAN 1508 WPH5A SA1 B1 . WORD 0 OF NEXT HB STORMAN 1509 BX2 X1 STORMAN 1510 ZR X1,WPH5J . END OF HS STORMAN 1511 AX1 18 STORMAN 1512 SB2 X1 . BYPASS TO B2 STORMAN 1513 AX1 18 STORMAN 1514 SB3 X1 . FUTURE BASE TO B3 STORMAN 1515 AX1 55-36 . HSTY TO X1 STORMAN 1516 SX3 X1-INTTYP+37B STORMAN 1517 PL X3,WPH5F STORMAN 1518 SX3 X1-STRTYP+37B STORMAN 1519 ZR X3,WPH5B STORMAN 1520 SX3 X1-FRETYP+37B . DO NOT MOVE FREE BLOCK. STORMAN 1521 ZR X3,WPH5H STORMAN 1522 BX4 X4-X4 . OTHER TYPES: F3 IS SET TO 0 STORMAN 1523 SB4 B0 STORMAN 1524 JP WPH5C STORMAN 1525 * STRTYP BLOCK. GET BYPASS AND F3 FROM F1 OF DOPE VECTOR STORMAN 1526 WPH5B BX1 X2 STORMAN 1527 AX1 18 . SHIFT TO GET DOPE VECTOR POINTER STORMAN 1528 SA1 X1 STORMAN 1529 SX4 X1 STORMAN 1530 SB2 X1 STORMAN 1531 SB4 A1 STORMAN 1532 * STORMAN 1533 * IF THE DOPE VECTOR (B4) PRECEDES THE STRUCTURE (B1) IN HS, THE DOPE STORMAN 1534 * POINTER IN THE STRTYP IS CORRECT. IF NOT, THE DOPE FIELD IS UPDATEDSTORMAN 1535 * TO POINT TO THE FUTURE POSITION OF THE DOPE VECTOR. STORMAN 1536 * STORMAN 1537 LT B4,B1,WPH5B1 STORMAN 1538 MX0 42 STORMAN 1539 LX0 18 . POSITION MASK STORMAN 1540 AX1 18 . POSITION DOPE VECTOR AUX FIELD STORMAN 1541 BX1 -X0*X1 STORMAN 1542 BX2 X2*X0 STORMAN 1543 BX2 X2+X1 . UPDATE DOPE VECTOR POINTER STORMAN 1544 WPH5B1 SB4 B0 STORMAN 1545 * MOVE B2 WORDS FROM B1 TO B3. F3 OF THE FIRST WORD (X2) STORMAN 1546 * SHOULD BE SET FROM X4. B4 IS ASSUMED TO BE 0. STORMAN 1547 WPH5C MX0 41 STORMAN 1548 LX4 36 . SHIFT TO F3 POSITION STORMAN 1549 LX0 36 . F3 MASK-MARK BIT STORMAN 1550 BX7 X0*X2 . FIRST WORD IS IN X2 STORMAN 1551 BX7 X7+X4 . MERGE IN NEW F3 STORMAN 1552 SA7 B3 STORMAN 1553 NE B1,B3,WPH5E . BRANCH IF MOVE IS NECESSARY STORMAN 1554 SB5 B3+B2 STORMAN 1555 SB1 B1+B2 STORMAN 1556 EQ WPH5A STORMAN 1557 WPH5D SA1 B1+B4 . MOVE HB STORMAN 1558 NO STORMAN 1559 BX7 X1 STORMAN 1560 SA7 B3+B4 STORMAN 1561 WPH5E SB4 B4+1 STORMAN 1562 LT B4,B2,WPH5D STORMAN 1563 SB5 B3+B2 . B5 WILL BECOME THE NEW MAXHS STORMAN 1564 SB1 B1+B2 . NEXT HB STORMAN 1565 EQ WPH5A STORMAN 1566 * COUNT NUMBER OF CHARACTERS IN NAME. X3=0 IFF INTTYP STORMAN 1567 WPH5F SB4 B1+B2 STORMAN 1568 SA2 B4-1 . COUNT CHARACTERS IN THE LAST STORMAN 1569 SX6 B2-3 . WORD (OTHER WORDS CONTAIN 7) STORMAN 1570 RJ VCHCNT STORMAN 1571 NZ X3,WPH5G . NUMBER OF NAME WORDS-1 TO X6 STORMAN 1572 SX6 B2-4 STORMAN 1573 WPH5G BX5 X6 . MULTIPLY X6 BY 7 STORMAN 1574 LX6 1 STORMAN 1575 IX6 X6+X5 STORMAN 1576 LX6 1 STORMAN 1577 IX6 X6+X5 STORMAN 1578 IX4 X7+X6 . TOTAL NUMBER OF CHARS TO X4 STORMAN 1579 SA2 B1 . RESTORE FIRST WORD STORMAN 1580 SB4 B0 STORMAN 1581 JP WPH5C STORMAN 1582 * IGNORE FREE BLOCKS: STORMAN 1583 WPH5H SB1 B1+B2 STORMAN 1584 EQ WPH5A STORMAN 1585 * STORMAN 1586 * ALL BLOCKS HAVE BEEN MOVED. B5 POINTS TO THE FIRST WORD STORMAN 1587 * AFTER THE LAST USED BLOCK. STORMAN 1588 * STORMAN 1589 WPH5J SA2 MAXSTAK STORMAN 1590 SA1 MAXHS . =MINSTAK STORMAN 1591 SX3 B0-B6 STORMAN 1592 IX5 X3-X2 . X5=MAXSTAK-B6. (MAXSTAK NEG. REPR.)STORMAN 1593 SX4 B5 STORMAN 1594 IX4 X1-X4 . X4=MINHS-B5 STORMAN 1595 IX6 X5+X4 STORMAN 1596 AX6 1 . AVERAGE (X4,X5) TO X6 STORMAN 1597 SB3 B6 STORMAN 1598 IX6 X4-X6 STORMAN 1599 SB2 X1 STORMAN 1600 SB1 X6 . STACK IS TO BE DISPLACED THIS STORMAN 1601 SB6 B6-B1 . AMOUNT STORMAN 1602 SB4 B2-B1 STORMAN 1603 GE B1,B0,WPH5L STORMAN 1604 WPH5K SA1 B3 . MOVE STACK TOWARD HIGHER STORMAN 1605 NO . ADDRESSES STORMAN 1606 BX7 X1 STORMAN 1607 SA7 B3-B1 STORMAN 1608 SB3 B3-1 STORMAN 1609 GE B3,B2,WPH5K STORMAN 1610 JP WPH5M STORMAN 1611 WPH5L SA1 B2 . MOVE STACK TOWARD LOWER STORMAN 1612 NO . ADDRESSES STORMAN 1613 BX7 X1 STORMAN 1614 SA7 B2-B1 STORMAN 1615 SB2 B2+1 STORMAN 1616 GE B3,B2,WPH5L STORMAN 1617 * FIX UP POINTERS, INITIALIZE DUMMY FREE HEAP BLOCK, STORMAN 1618 * AND CREATE A FREE BLOCK BETWEEN B5 AND B4-1. STORMAN 1619 WPH5M SX7 B4 STORMAN 1620 BX6 X6-X6 STORMAN 1621 SA7 MAXHS STORMAN 1622 SA7 MINSTAK STORMAN 1623 SA1 MINHS STORMAN 1624 SX2 FRETYP . DUMMY FREE BLOCK AT MINHS+2 STORMAN 1625 SA6 X1 . FORWARD=BACK=MINHS+2 (X1) STORMAN 1626 LX2 55 . BYPASS=0 STORMAN 1627 SA6 X1+1 STORMAN 1628 SX1 X1+2 STORMAN 1629 BX7 X1 STORMAN 1630 SA7 FHBLRP STORMAN 1631 LX1 36 STORMAN 1632 BX7 X7+X1 STORMAN 1633 BX7 X7+X2 STORMAN 1634 SA7 X7 STORMAN 1635 SB3 B5 . PARAM FOR FREEHB STORMAN 1636 EQ B3,B4,WPH5N . NO ROOM FOR FREE BLOCK STORMAN 1637 * STORMAN 1638 * BEFORE MAKING FREE BLOCK, PUT DUMMY HEADER ON BLOCK THAT DOES NOT STORMAN 1639 * HAVE MARK BIT SET; A MARKED BIT COULD BE THERE FROM THE STORMAN 1640 * PREVIOUS GARBAGE COLLECTION STORMAN 1641 * STORMAN 1642 MX7 4 STORMAN 1643 SA7 B3 STORMAN 1644 RJ FREEHB STORMAN 1645 * STORMAN 1646 * END PHASE 5... STORMAN 1647 WPH5N BSS 0 STORMAN 1648 RJ CHKTRC . CHECK IF CAN TURN OFF TRACE STORMAN 1649 * STORMAN 1650 * END HEAP BLOCK COMPACTION STORMAN 1651 * STORMAN 1652 * STORMAN 1653 SX6 120B . OPEN ALTER NOREWIND CODE STORMAN 1654 MX0 60-18 . MASK FOR FILE NAME STORMAN 1655 STREAM FILLIST . B2 HAS FIRST FILE BLOCK POINTER STORMAN 1656 REOPALL RJ REOPEN STORMAN 1657 STREAM B2 . NEXT FILE BLOCK STORMAN 1658 NZ B2,REOPALL . IF ZERO, END OF FILE BLOCKS STORMAN 1659 SB1 11 STORMAN 1660 RJ CKSFCK . CHECK IF DO SELFCHECK STORMAN 1661 SB1 9 . MAYBE TRACE AFTER HBC STORMAN 1662 RJ HBCTRC STORMAN 1663 JP HBC STORMAN 1664 REOPEN BSSZ 1 . REOPEN ENTRY POINT STORMAN 1665 SA4 B2+FI.FET+FET.LFN STORMAN 1666 * STORMAN 1667 * SAVE CURRENT STATUS IN X4 STORMAN 1668 BX2 X0*X4 STORMAN 1669 BX7 X2+X6 STORMAN 1670 SA7 A4 . UPDATED FET STORMAN 1671 SA1 OPECALL STORMAN 1672 SX7 A4 . ADDRESS OF FET STORMAN 1673 BX7 X1+X7 . SET UP RA+1 CALL STORMAN 1674 SA7 1 STORMAN 1675 RWAIT SA1 1 STORMAN 1676 NZ X1,* . WAIT FOR COMPLETION STORMAN 1677 * STORMAN 1678 * REPLACE STATUS AS OF BEFORE HBC STORMAN 1679 * STORMAN 1680 BX7 X4 STORMAN 1681 SA7 A4 STORMAN 1682 JP REOPEN STORMAN 1683 * STORMAN 1684 OPECALL VFD 18/3LOPE,2/1,40/0 STORMAN 1685 * STORMAN 1686 * STORMAN 1687 * STORMAN 1688 * WHEN HBCTRC IS CALLED, B1 CONTAINS THE SHIFT FOR THE FLAG STORMAN 1689 * FOR THE PHASE NOW BEING ENTERED STORMAN 1690 * PHASE 1: 4; PHASE 2: 5; PHASE 3: 6; PHASE 6: 7; PHASE 5: 8 STORMAN 1691 * AFTER HBC: 9 STORMAN 1692 * STORMAN 1693 HBCTRC BSSZ 1 STORMAN 1694 SA1 HBCSTAT STORMAN 1695 NG X1,HBCTRC . NO TRC PACKAGE STORMAN 1696 MX2 1 STORMAN 1697 LX2 B1,X2 STORMAN 1698 BX2 X2*X1 STORMAN 1699 ZR X2,HBCTRC . DON'T TRC THIS PHASE STORMAN 1700 TRACE STORMAN 1701 TRACE LIST STORMAN 1702 EQ HBCTRC STORMAN 1703 * CHECK IF THE DEBUG PACKAGE IS IN CORE STORMAN 1704 * IF IT IS, TURN OFF TRACE STORMAN 1705 * STORMAN 1706 * STORMAN 1707 CHKTRC BSSZ 1 STORMAN 1708 SA1 HBCSTAT STORMAN 1709 NG X1,CHKTRC . TRC PACKAGE NOT IN STORMAN 1710 TRACE NOTRACE . TURN OFF TRACE STORMAN 1711 EQ CHKTRC STORMAN 1712 EJECT STORMAN 1713 * CBAS STORMAN 1714 * SUBROUTINE TO FIND THE BASE OF A CODE BLOCK STORMAN 1715 * CONTAINING THE MICOP POINTED TO BY B2. STORMAN 1716 * STORMAN 1717 * PARAM: B2 POINTER TO A MICOP STORMAN 1718 * RESULT: X1 POINTER TO WORD 0 OF CHB STORMAN 1719 * X1,B3 STORMAN 1720 * STORMAN 1721 * STORMAN 1722 CBAS DATA 0 STORMAN 1723 SA1 CODLIST STORMAN 1724 SB3 X1 STORMAN 1725 CBAS1 SA1 B3 . NEXT CHB STORMAN 1726 SB3 X1 . LINK IS F1 STORMAN 1727 EQ B3,B0,CBAS2 STORMAN 1728 LT B3,B2,CBAS1 . NOTE THAT THE LIST OF STORMAN 1729 CBAS2 SX1 A1 . CHB-S IS KEPT SORTED STORMAN 1730 EQ CBAS STORMAN 1731 * STORMAN 1732 * UTILITY ROUTINES FOR HBC PHASE 2... STORMAN 1733 * STORMAN 1734 * WMARK STORMAN 1735 * MERGE THE MARK BIT IN X0 INTO THE HB HEADER POINTED STORMAN 1736 * TO BY X1. IF X1 POINTS INTO A STRUCTURE, THE HEADER IS STORMAN 1737 * FOUND BY SCANNING BACKWARDS. STORMAN 1738 * PARAM: X0 MARK BIT STORMAN 1739 * X1 POINTER TO HB WORD 0 OR INTO STRUCTURE STORMAN 1740 * X3,X7 STORMAN 1741 * STORMAN 1742 WMARK DATA 0 STORMAN 1743 SA3 X1+0 STORMAN 1744 NG X3,WMARK2 STORMAN 1745 WMARK1 SA3 A3-1 STORMAN 1746 PL X3,WMARK1 STORMAN 1747 WMARK2 BX7 X3+X0 STORMAN 1748 SA7 A3 STORMAN 1749 EQ WMARK STORMAN 1750 * STORMAN 1751 * WMARKDP STORMAN 1752 * IF THE DOPE VECTOR IS NOT ALREADY MARKED, IT IS MARKED STORMAN 1753 * AND THE REFERENCED FUNCTIONS ARE ALSO MARKED. STORMAN 1754 * PARAM: X0 MARK BIT STORMAN 1755 * X1 POINTS TO WORD 0 OF THE DOPE VECTOR STORMAN 1756 * X1,X3,X4,X7 STORMAN 1757 WMARKDP DATA 0 STORMAN 1758 SA3 X1 STORMAN 1759 BX7 X3*X0 STORMAN 1760 NZ X7,WMARKDP . RETURN IF ALREADY MARKED STORMAN 1761 BX7 X3+X0 STORMAN 1762 SA7 A3 . MARK DOPE VECTOR STORMAN 1763 SX4 A3+0 STORMAN 1764 WMDP1 SX4 X4+1 . LOOP TO FETCH DOPE VECTOR STORMAN 1765 SA1 X4+0 . WORDS STORMAN 1766 LX1 1 STORMAN 1767 NG X1,WMARKDP . RETURN IF ARRAY DOPE STORMAN 1768 LX1 60-1 STORMAN 1769 RJ WMARK . MARK FUNCTION STORMAN 1770 PL X1,WMDP1 STORMAN 1771 JP WMARKDP . RETURN IF LAST WORD STORMAN 1772 * STORMAN 1773 * WMARKP STORMAN 1774 * PROCESS REFERENCE FROM A PATTERN AS DESCRIBED IN STORMAN 1775 * PHASE 2 COMMENTS. STORMAN 1776 * PARAM: X0 MARK BIT STORMAN 1777 * X1 VARIABLE REFERENCE FROM A PATTERN-1 STORMAN 1778 * X3,X4,X6,X7 STORMAN 1779 * STORMAN 1780 WMARKP DATA 0 STORMAN 1781 SA3 X1 STORMAN 1782 BX7 X3+X0 . PREPARE FOR MARKINK STORMAN 1783 NG X3,WMP2 . BRANCH AND MARK SIMPLE VARIABLE STORMAN 1784 WMP1 SA3 A3-1 . FIND WORD 0 OF STRUCTURE STORMAN 1785 PL X3,WMP1 STORMAN 1786 WMP1A BX7 X3*X0 STORMAN 1787 MX6 1 STORMAN 1788 NZ X7,WMARKP . RETURN IF ALREADY MARKED STORMAN 1789 LX6 18 . SET SPECIAL MARK BIT STORMAN 1790 BX7 X6+X3 STORMAN 1791 SA4 MINHS . BUMP REPEAT COUNT STORMAN 1792 SA7 A3 . DIRTY TRICK: ONLY THE SA7 A3 STORMAN 1793 SA3 X4 . IS USED BELOW TO STORE THE STORMAN 1794 SX7 X3+1 . REPEAT COUNT STORMAN 1795 * STORMAN 1796 WMP2 BX4 X3 . BRANCH BACK IF IT WAS THE STORMAN 1797 AX4 55 . FIRST ELEMENT OF A STRUCTURE STORMAN 1798 SX4 X4-STRTYP+55+37B STORMAN 1799 ZR X4,WMP1A STORMAN 1800 SA7 A3 STORMAN 1801 JP WMARKP STORMAN 1802 * STORMAN 1803 EJECT STORMAN 1804 * WSVD STORMAN 1805 * EXAMINE SVD RECURSIVELY STORMAN 1806 * THE RECURSION OF THIS SUBROUTINE IS MADE POSSIBLE STORMAN 1807 * BY THE FACT THAT THE NUMBER OF LOCAL VARIABLES (ONE-B1) STORMAN 1808 * IS EQUAL TO THE NUMBER OF UNUSED FIELDS IN SVD-S STORMAN 1809 * WHICH CAUSE RECURSION (ONE-F3 IN ATY, DYT OR NTY). STORMAN 1810 * THREE REGISTERS ARE OF MAJOR INTEREST: STORMAN 1811 * -B1, POINTS TO THE ATY, DTY OR NTY DESCRIPTOR OF THE STORMAN 1812 * STRUCTURE CURRENTLY SCANNED. IF B1 IS NEGATIVE STORMAN 1813 * THE STRUCTURE IS IN FACT A SIMPLE VARIABLE. STORMAN 1814 * THIS IS THE REGISTER WHICH IS SAVED DURING RECURSION STORMAN 1815 * -B2, POINTS TO THE CURRENT SVD. NOT SAVED. STORMAN 1816 * -B3, POINTS ONE WORD BEYOND THE LAST SVD IN THE STORMAN 1817 * CURRENT STRUCTURE. NOT SAVED. STORMAN 1818 * A5,X5,B6,B7 ARE LEFT UNALTERED STORMAN 1819 * PARAM: B2 POINTS TO AN SVD STORMAN 1820 * STORMAN 1821 * STORMAN 1822 WSVD DATA 0 STORMAN 1823 SB3 B2+1 . END OF INITIAL STRUCTURE STORMAN 1824 SB1 -1 . NEGATIVE B1 TO MARK OUTERMOST LEVELSTORMAN 1825 * STORMAN 1826 WSVDA SA1 B2 . FETCH NEXT SVD STORMAN 1827 SA4 WSVDWD . DISPATCH ON SVD TYPE STORMAN 1828 BX2 X1 . SVD TO X2, X3 STORMAN 1829 BX3 X1 STORMAN 1830 AX1 55 STORMAN 1831 LX1 2 STORMAN 1832 SB4 X1 STORMAN 1833 AX4 B4,X4 STORMAN 1834 MX0 56 STORMAN 1835 BX4 -X0*X4 STORMAN 1836 MX0 1 STORMAN 1837 SB4 X4 STORMAN 1838 LX0 55 . MARK BIT TO X0 STORMAN 1839 JP B4+WSVDSW STORMAN 1840 WSVDWD SWITCH WSVDSW,2,2,2,2,4,4,4,2,2,6,6,0,5,2,2 STORMAN 1841 + AX3 18 . 0, N STORMAN 1842 SX1 X3 STORMAN 1843 NZ X1,WSVDC . BRANCH IF NOT SIMPLE STORMAN 1844 WSVDA1 SX1 X2 . MARK SIMPLE N OR C STORMAN 1845 RJ WMARK STORMAN 1846 WSVDB SB2 B2+1 STORMAN 1847 LT B2,B3,WSVDA . PROCEED TO NEXT SVD IF NOT END STORMAN 1848 LT B1,B0,WSVD . EXIT IF OUTERMOST LEVEL STORMAN 1849 JP WSVDG . RETURN TO PREVIOUS LEVEL STORMAN 1850 + JP WSVDD . 4, PS,PA,PE STORMAN 1851 + AX2 18 . 5, C STORMAN 1852 JP WSVDA1 STORMAN 1853 + SX1 X2 . 6, A,D STORMAN 1854 RJ WMARKDP . MARK DOPE VECTOR STORMAN 1855 WSVDC MX1 18 . MASK FOR F3 TO X1 STORMAN 1856 LX1 60-6 STORMAN 1857 BX7 -X1*X2 STORMAN 1858 AX2 18 STORMAN 1859 SA2 X2 . WORD 0 OF STRUCTURE STORMAN 1860 BX4 X0*X2 STORMAN 1861 NZ X4,WSVDB . IGNORE IF ALREADY MARKED STORMAN 1862 SX4 B1 STORMAN 1863 LX4 36 STORMAN 1864 BX4 X1*X4 STORMAN 1865 BX7 X7+X4 . JAM B1 INTO F3 OF SVD STORMAN 1866 BX6 X2+X0 . MARK STRUCTURE STORMAN 1867 SA7 B2 STORMAN 1868 SA6 A2 STORMAN 1869 AX2 36 . SIZE OF STRUCTURE TO X2 STORMAN 1870 SB1 B2 .ADDRESS OF SVD AS NEW B1 STORMAN 1871 SB2 A2 . ADDRESS OF WORD 0 AS NEW B2 STORMAN 1872 SB3 B2+X2 . LAST WORD OF STRUCTURE +1 TO B3 STORMAN 1873 JP WSVDB . ADVANCE TO FIRST ELT OF STRUC STORMAN 1874 * THE FOLLOWING LOOP IS SIMILAR TO THE ONE AT WPH2F STORMAN 1875 WSVDD SA1 X2 STORMAN 1876 SX2 X1 STORMAN 1877 NG X1,WSVDF STORMAN 1878 LX1 18 STORMAN 1879 ID X1,WSVDE STORMAN 1880 UX1 B4,X1 STORMAN 1881 NE B4,B0,WSVDF STORMAN 1882 WSVDE SX1 X1-1 STORMAN 1883 RJ WMARKP STORMAN 1884 WSVDF NZ X2,WSVDD STORMAN 1885 JP WSVDB STORMAN 1886 * STORMAN 1887 * END OF CURRENT STRUCTURE, RESTORE PREVIOUS B1, B2 AND B3 STORMAN 1888 * STORMAN 1889 WSVDG SA1 B1 . FETCH SVD AT B1 STORMAN 1890 SB2 B1 . RESTORE OLD B2 STORMAN 1891 AX1 36 . RESTORE OLD B1 FROM F3 STORMAN 1892 SB1 X1 STORMAN 1893 LT B1,B0,WSVD . EXIT IF OUTERMOST LEVEL STORMAN 1894 SA1 B1 . FETCH OLD SVD STORMAN 1895 AX1 18 STORMAN 1896 SA2 X1 . WORD 0 OF OLD STRUCTURE STORMAN 1897 AX2 36 STORMAN 1898 SB3 A2 STORMAN 1899 SB3 B3+X2 . LAST WORD OF OLD STRUCTURE+1 TO B3 STORMAN 1900 JP WSVDB STORMAN 1901 * STORMAN 1902 EJECT STORMAN 1903 * STORMAN 1904 * UTILITY ROUTINES FOR HBC PHASE 4... STORMAN 1905 * WUPF1 STORMAN 1906 * UPDATE F1 POINTING TO WORD 0 OF A HB UNLESS F1=0 STORMAN 1907 * PARAM: X1 CONTAINS A WORD WITH F1 TO BE UPDATED STORMAN 1908 * X0 CONTAINS MASK FOR 1 (MX0 42) STORMAN 1909 * RESULT: X7 WILL CONTAIN X1 WITH F1 UPDATED STORMAN 1910 * X2 CONTAINS F1 (X7) STORMAN 1911 * X2,X7 STORMAN 1912 * STORMAN 1913 WUPF1 DATA 0 STORMAN 1914 BX7 X0*X1 STORMAN 1915 SX2 X1 STORMAN 1916 ZR X2,WUPF1 . RETURN IF F1=0 STORMAN 1917 SA2 X1 . WORD 0 TO X2 STORMAN 1918 AX2 36 . FUTURE ADDRESS IN F3 STORMAN 1919 BX2 -X0*X2 STORMAN 1920 BX7 X7+X2 STORMAN 1921 EQ WUPF1 STORMAN 1922 * STORMAN 1923 * WUPF1V STORMAN 1924 * UPDATE F1 POINTING TO THE VALUE WORD OF A HBWN STORMAN 1925 * REGISTER USAGE IS THE SAME AS IN WUPF1 STORMAN 1926 * STORMAN 1927 WUPF1V DATA 0 STORMAN 1928 SA2 X1-1 . WORD 0 OF HBWN TO X2 STORMAN 1929 AX2 36 STORMAN 1930 BX7 X0*X1 STORMAN 1931 SX2 X2+1 STORMAN 1932 BX7 X7+X2 STORMAN 1933 EQ WUPF1V STORMAN 1934 * STORMAN 1935 * WUPF1P STORMAN 1936 * UPDATE F1 POINTING TO AN SVD IN A SIMPLE VARIABLE STORMAN 1937 * OR IN A STRUCTURE STORMAN 1938 * REGISTER USAGE, IN ADDITION TO THE ONES IN WUPF1 STORMAN 1939 * A3 ADDRESS OF THE SVD (SA3 X1) STORMAN 1940 * X1,X2,X3,X7 STORMAN 1941 * STORMAN 1942 WUPF1P DATA 0 STORMAN 1943 WUPA SA3 A3-1 STORMAN 1944 PL X3,WUPA . FIND BASE OF HB STORMAN 1945 BX3 X1 . WORD TO BE UPDATED STORMAN 1946 SX1 A3 STORMAN 1947 RJ WUPF1 STORMAN 1948 IX3 X3+X2 . ADD NEW BASE OF HB STORMAN 1949 SX7 A3+0 . SUBTRACT OLD BASE OF HB STORMAN 1950 IX7 X3-X7 STORMAN 1951 EQ WUPF1P STORMAN 1952 * STORMAN 1953 * WP4SVD STORMAN 1954 * UPDATE SVD (NOT FOR LITERALS) STORMAN 1955 * PARAM: B2 POINTS TO THE SVD TO BE UPDATED STORMAN 1956 * X0,X1,X2,X3,X4,X7,B3 STORMAN 1957 * STORMAN 1958 WP4SVD DATA 0 STORMAN 1959 SA1 B2 STORMAN 1960 AX1 55 . TYPE OF SVD TO X1 STORMAN 1961 SX2 X1-PSTY STORMAN 1962 NG X2,WP4SVD . BRANCH IF SF,SS STORMAN 1963 SX2 X1-ITY STORMAN 1964 NG X2,WP4SD . IF PS, PA, PE STORMAN 1965 SX2 X1-ATY STORMAN 1966 NG X2,WP4SVD . IF I OR R STORMAN 1967 SX2 X1-NTY STORMAN 1968 NG X2,WP4SB . IF A OR D STORMAN 1969 SX4 X1-INTY STORMAN 1970 * UPDATE F2 IN INTY OR OUTTY (X4 GE 0) OF F2 AND F1 IN CTY, NTY STORMAN 1971 SA1 B2 . FETCH SVD AGAIN STORMAN 1972 MX0 42 STORMAN 1973 LX1 60-18 STORMAN 1974 SX3 X1 . F2 OF SVD TO X3 STORMAN 1975 ZR X3,WP4SA . BRANCH IF BASE=0 IN NTY SVD STORMAN 1976 RJ WUPF1 . UPDATE F2 STORMAN 1977 PL X4,WP4SC . THIS IS ENOUGH FOR INTY/OUTTY STORMAN 1978 LX7 18 STORMAN 1979 IX3 X2-X3 . DECREMENT F1 BY THE SAME AMOUNT STORMAN 1980 IX7 X7+X3 . NOTE THAT WUPF COULD NOT BE USED STORMAN 1981 SA7 A1 STORMAN 1982 JP WP4SVD STORMAN 1983 * UPDATE NTY POINTING TO A SIMPLE VARIABLE STORMAN 1984 WP4SA LX1 18 STORMAN 1985 RJ WUPF1 . UPDATE F1 STORMAN 1986 SA7 A1 STORMAN 1987 JP WP4SVD STORMAN 1988 * UPDATE F1 AND F2 IN ATY AND DTY STORMAN 1989 WP4SB SA1 B2 STORMAN 1990 MX0 42 STORMAN 1991 RJ WUPF1 . UPDATE F1 STORMAN 1992 BX1 X7 STORMAN 1993 LX1 60-18 STORMAN 1994 RJ WUPF1 . UPDATE F2 STORMAN 1995 WP4SC LX7 18 STORMAN 1996 SA7 A1 . STORE UPDATED SVD STORMAN 1997 JP WP4SVD STORMAN 1998 * SCAN PATTERN, UPDATE STARPM, PRDPM AND DOLPM STORMAN 1999 WP4SD SA4 B2+0 . THIS LOOP IS SIMILAR TO STORMAN 2000 WP4SE SA1 X4 . THE ONE AT WPH2F STORMAN 2001 SX4 X1 STORMAN 2002 NG X1,WP4SG STORMAN 2003 LX1 19 STORMAN 2004 ID X1,WP4SF STORMAN 2005 UX7 B3,X1 STORMAN 2006 NE B3,B0,WP4SG STORMAN 2007 WP4SF SA3 X1 STORMAN 2008 MX0 42 STORMAN 2009 RJ WUPF1P . UPDATE PM WORD IN X1 STORMAN 2010 LX7 60-19 STORMAN 2011 SA7 A1+0 STORMAN 2012 WP4SG NZ X4,WP4SE STORMAN 2013 JP WP4SVD STORMAN 2014 * STORMAN 2015 EJECT STORMAN 2016 * STORMAN 2017 * START OF SELF CHECKING... STORMAN 2018 * STORMAN 2019 SELFCHK DATA 0 STORMAN 2020 SX7 0 STORMAN 2021 SA1 MINHS STORMAN 2022 SA7 VNWLS . NUMBER OF WORDS IN LIST STORAGE STORMAN 2023 SA7 VNFHB . - FREE HEAP BLOCKS STORMAN 2024 SA7 VNCODB . - CODE BLOCKS STORMAN 2025 SA7 VNFILB . - FILE BLOCKS STORMAN 2026 SA1 X1+3 . WORD 0 OF FIRST HB STORMAN 2027 * STORMAN 2028 * THE FOLLOWING LOOP FINDS ALL HEAP BLOCKS STORMAN 2029 * FIRST WORD OF NEXT HB IS IN X1. ADDRESS IS IN A1 STORMAN 2030 * STORMAN 2031 VL1 BX2 X1 STORMAN 2032 SX7 A1 . REMEMBER LAST BLOCK STORMAN 2033 SA7 VLASTB STORMAN 2034 ZR X1,VL35 STORMAN 2035 PL X1,'VE' . NO HS TYPE STORMAN 2036 AX1 55 STORMAN 2037 SB2 X1 . DISPATCH ON HS TYPE STORMAN 2038 JP B2+VL2 STORMAN 2039 + JP 'VE' . 17, NOT USED STORMAN 2040 + JP 'VE' . 16, - STORMAN 2041 + JP 'VE' . 15, - STORMAN 2042 + SA3 VNFHB . 14, FRETYP STORMAN 2043 JP VL3 STORMAN 2044 + AX2 18 . 13, CODTYP STORMAN 2045 SB1 X2 STORMAN 2046 JP VL5 STORMAN 2047 + AX2 18 . 12, DOPTYP STORMAN 2048 SB1 X2 STORMAN 2049 JP VL10 STORMAN 2050 + SB4 A1 . 11, FILTYP STORMAN 2051 JP VL18 . NO CODE TO CHECK FILTYP YET ***** STORMAN 2052 + AX2 18 . 10, STRTYP STORMAN 2053 SA3 X2 STORMAN 2054 JP VL13 STORMAN 2055 + AX2 18 . 7, REALTYP STORMAN 2056 SB4 A1 STORMAN 2057 JP VL15 STORMAN 2058 + SX0 SITY . 6, INTTYP STORMAN 2059 JP VL19 STORMAN 2060 + JP 'VE' . 5, NOT USED STORMAN 2061 + SX0 SSTY . 4, LITTYP STORMAN 2062 JP VL20 STORMAN 2063 + SB4 A1 . 3, LBLTYP STORMAN 2064 AX2 18 STORMAN 2065 JP VL24 STORMAN 2066 + SB4 A1 . 2, CALLTYP STORMAN 2067 AX2 18 STORMAN 2068 JP VL26 STORMAN 2069 + SB5 A1 . 1, VARTYP STORMAN 2070 BX5 X2 STORMAN 2071 JP VL34 STORMAN 2072 VL2 JP 'VE' . 0, NOT USED STORMAN 2073 * STORMAN 2074 * CHECK FREE HEAP BLOCK . WORD 0 IN X2, ADDR IN A1 STORMAN 2075 VL3 SX6 X3+1 STORMAN 2076 SB3 A1 STORMAN 2077 SA6 A3 . INCREMENT FREE BLOCK COUNTER STORMAN 2078 SA1 X2 STORMAN 2079 AX1 36 STORMAN 2080 SB2 X1 STORMAN 2081 AX1 55-36 STORMAN 2082 NE B3,B2,'VE' . BACK POINTER OF NEXT BLOCK STORMAN 2083 SX1 X1-FRETYP+37B . TYPE OF NEXT BLOCK ON FREE LIST STORMAN 2084 NZ X1,'VE' STORMAN 2085 AX2 18 STORMAN 2086 SX1 B3+X2 STORMAN 2087 SA1 X1-1 STORMAN 2088 AX1 18 STORMAN 2089 SX1 X1 STORMAN 2090 SX7 X2 STORMAN 2091 BX1 X1-X7 STORMAN 2092 NZ X1,'VE1' . BYPASS IN LAST WORD STORMAN 2093 SA1 A1+1 STORMAN 2094 BX4 X1 STORMAN 2095 NZ X1,VL4 . WRAP AROUND IF END OF HS STORMAN 2096 SA3 MINHS STORMAN 2097 SA4 X3+2 STORMAN 2098 VL4 LX4 5 . CHECK PREVIOUS FREE BIT SET STORMAN 2099 PL X4,'VE1' . IN IMMEDIATELY FOLLOWING BLOCK STORMAN 2100 AX2 18 STORMAN 2101 SA3 X2 STORMAN 2102 SB2 X3 STORMAN 2103 AX3 55 STORMAN 2104 NE B3,B2,'VE1' . FORWARD POINTER IN PREVIOUS BLOCK STORMAN 2105 SX3 X3-FRETYP+37B STORMAN 2106 ZR X3,VL1 . TYPE OF PREV. BLOCK ON FREE LIST STORMAN 2107 JP 'VE1' STORMAN 2108 * STORMAN 2109 * CHECK CODE HEAP BLOCK. THE FOLLOWING B REGISTERS STORMAN 2110 * CONTAIN CONSTANTS, STORMAN 2111 * B1 POINTS TO THE LAST WORD IN THE BLOCK +1 STORMAN 2112 * B3 =MAXHS STORMAN 2113 * B4 =MINHS STORMAN 2114 * B5 =CALL STORMAN 2115 * STORMAN 2116 VL5 SB1 A1+B1 . PREPARE CONSTANTS STORMAN 2117 SA2 MINHS STORMAN 2118 SB4 X2 STORMAN 2119 SB5 CALL STORMAN 2120 SA2 VNCODB . BUMP NUMBER OF CODE BLOCKS STORMAN 2121 SX7 X2+1 STORMAN 2122 SA7 A2 STORMAN 2123 SA2 MAXHS STORMAN 2124 SB3 X2 STORMAN 2125 VL6 SA1 A1+1 . NEXT MICOP WORD STORMAN 2126 SX0 A1-B1 STORMAN 2127 SB2 X1 STORMAN 2128 ZR X0,VL1 . BRANCH IF END OF CODE BLOCK STORMAN 2129 LT B5,B2,VL9 . JUMP IF NOT BRANCH MICOP STORMAN 2130 * CHECK BRANCH INSTRUCTION STORMAN 2131 AX1 18 STORMAN 2132 EQ B5,B2,VL8 . BRANCH IF CALL STORMAN 2133 SB2 X1 STORMAN 2134 GE B0,B2,VL6 . UNLESS RIGHT ADDRESS LE 0 STORMAN 2135 SX7 LBLTYP-37B . IT MUST POINT TO LABEL STORMAN 2136 VL7 SA2 X1-1 STORMAN 2137 AX2 55 STORMAN 2138 IX2 X2-X7 STORMAN 2139 ZR X2,VL6 STORMAN 2140 JP 'VE' STORMAN 2141 VL8 SX7 CALLTYP-37B . IF CALL, IT MUST POINT TO A STORMAN 2142 EQ VL7 . FUNCTION STORMAN 2143 * CHECK OTHER MICOPS STORMAN 2144 VL9 GE B2,B4,'VE' STORMAN 2145 AX1 18 STORMAN 2146 SB2 X1 STORMAN 2147 RJ VMICAD . CHECK RIGHT ADDRESS STORMAN 2148 AX1 18 STORMAN 2149 SB2 X1 STORMAN 2150 RJ VMICAD . CHECK LEFT ADDRESS STORMAN 2151 JP VL6 STORMAN 2152 * STORMAN 2153 * SUBROUTINE USED ABOVE TO CHECK LEFT AND RIGHT STORMAN 2154 * ADDRESSES IN A MICOP STORMAN 2155 VMICAD DATA 0 STORMAN 2156 GE B2,B3,'VE1' . MUST POINT TO HBWN OR HBL STORMAN 2157 EQ B2,B0,VMICAD STORMAN 2158 LT B2,B4,'VE1' STORMAN 2159 SA3 B2-1 STORMAN 2160 AX3 55 STORMAN 2161 PL X3,'VE1' STORMAN 2162 SX0 X3-REALTYP+37B STORMAN 2163 PL X0,VMICAD STORMAN 2164 JP 'VE1' STORMAN 2165 * STORMAN 2166 * CHECK ARRAY OR DATA STRUCTURE DOPE VECTOR STORMAN 2167 * X7=A1, B1=BYPASS STORMAN 2168 VL10 SA1 A1+1 . NEXT WORD IN THE VECTOR STORMAN 2169 BX2 X1 STORMAN 2170 LX1 1 STORMAN 2171 PL X1,VL11 . BRANCH IF NOT ARRAY STORMAN 2172 SX3 X2 . UPPER BOUND STORMAN 2173 AX2 18 STORMAN 2174 SX4 X2 . LOWER BOUND STORMAN 2175 AX2 18 STORMAN 2176 IX4 X3-X4 STORMAN 2177 SX3 X2 . U-L+1 STORMAN 2178 SX4 X4+1 STORMAN 2179 BX3 X3-X4 STORMAN 2180 ZR X3,VL12 STORMAN 2181 JP 'VE' STORMAN 2182 VL11 SA3 X2 . DATA DOPE VECTOR MUST STORMAN 2183 AX3 55 . POINT TO FIELD FUD-S STORMAN 2184 SX3 X3-FLDTYP STORMAN 2185 ZR X3,VL12 STORMAN 2186 SX3 X3+FLDTYP-DATATYP . OR TO DATA CONSTRUCTOR STORMAN 2187 NZ X3,'VE' STORMAN 2188 VL12 PL X2,VL10 . NOT LAST WORD IN BLOCK STORMAN 2189 SA1 A1+1 STORMAN 2190 SB1 X7+B1 . SIGN BIT MAY BE SET ONLY IN STORMAN 2191 SB1 A1-B1 . THE LAST WORD. STORMAN 2192 EQ B1,B0,VL1 STORMAN 2193 JP 'VE1' STORMAN 2194 * CHECK STRUCTURE, INCLUDING THE SVD-S OF THE ELEMENTS STORMAN 2195 * A3 = WORD 0 OF DOPE VECTOR STORMAN 2196 VL13 SB3 X3 STORMAN 2197 AX3 55 . CHECK DOPE POINTER STORMAN 2198 SX3 X3-DOPTYP+37B STORMAN 2199 NZ X3,'VE' STORMAN 2200 AX2 18 STORMAN 2201 SB2 X2 STORMAN 2202 NE B2,B3,'VE' . CHECK STRUCTURE SIZE STORMAN 2203 SX6 A1 STORMAN 2204 SX5 A1+B2 STORMAN 2205 SA6 VIPTR STORMAN 2206 * LOOP TO CHECK SVD-S BETWEEN VISTR AND VLSTR-1 STORMAN 2207 VL14 SA1 VIPTR STORMAN 2208 SX7 X1+1 STORMAN 2209 SA7 A1 STORMAN 2210 SA1 X7 STORMAN 2211 IX2 X7-X5 STORMAN 2212 PL X2,VL1 STORMAN 2213 NG X1,'VE1' STORMAN 2214 RJ VSVD STORMAN 2215 JP VL14 STORMAN 2216 * STORMAN 2217 * CHECK REAL LITERAL AND RTY SVD IN VALUE WORD STORMAN 2218 VL15 SX7 X2-3 STORMAN 2219 NZ X7,'VE' . BYPASS MUST BE 3 STORMAN 2220 SA1 A1+1 STORMAN 2221 SB1 X1-2 STORMAN 2222 AX1 55 STORMAN 2223 SX1 X1-RTY . SVD MUST BE RETY, POINTING STORMAN 2224 NE B1,B4,'VE' . TO WORD 2 STORMAN 2225 NZ X1,'VE' STORMAN 2226 * STORMAN 2227 * CHECK HASH CODE OF HBWN OR HBL AT B4 STORMAN 2228 VL16 SA1 B4 STORMAN 2229 BX0 X1 STORMAN 2230 SB5 B4+2 STORMAN 2231 SB3 B0-B5 . NEGATIVE B3 FLAGS, NO SEARCH STORMAN 2232 RJ SEARCH . RETURN HASH CODE ONLY STORMAN 2233 VL17 SB3 X2 . TRAVERSE HASH LIST STORMAN 2234 SA2 X2 STORMAN 2235 EQ B3,B4,VL18 . ENTRY IS ON THE LIST STORMAN 2236 NE B3,B0,VL17 . ERROR IS END OF LIST STORMAN 2237 JP 'VE2' STORMAN 2238 VL18 AX2 18 STORMAN 2239 SA1 B4+X2 . GO TO NEXT HB STORMAN 2240 JP VL1 STORMAN 2241 * STORMAN 2242 * CHECK INTYP AND LITTYP HBL STORMAN 2243 VL19 SA3 A1+1 STORMAN 2244 SB2 X3-3 . SVD FIRST POINTER FOR SITY STORMAN 2245 JP VL21 STORMAN 2246 VL20 SA3 A1+1 STORMAN 2247 SB2 X3-2 . SVD FIRST POINTER FOR SSTY STORMAN 2248 VL21 SB4 A1 STORMAN 2249 NE B2,B4,'VE' . CHECK FIRST POINTER STORMAN 2250 AX3 18 STORMAN 2251 AX2 18 STORMAN 2252 SB2 X3+1 STORMAN 2253 SB1 B4+X2 STORMAN 2254 NE B1,B2,'VE' . CHECK LAST POINTER STORMAN 2255 AX3 55-18 STORMAN 2256 BX3 X0-X3 . CHECK SVD TYPE STORMAN 2257 NZ X3,'VE' STORMAN 2258 SX3 X0-SITY STORMAN 2259 NZ X3,VL22 STORMAN 2260 SA3 A3+1 STORMAN 2261 * CHECK NAME PART OF HBWN OR HBL STARTING AT B4, ENDING STORMAN 2262 * AT B1. NAME STARTS AT A3+1. CHECK HASH CODE, TOO. STORMAN 2263 VL22 SA3 A3+1 STORMAN 2264 SB2 X3+0 STORMAN 2265 SB3 A3+1 STORMAN 2266 EQ B2,B0,VL23 . UNLESS LAST WORD STORMAN 2267 EQ B1,B3,'VE1' STORMAN 2268 EQ B2,B3,VL22 . IT MUST POINT TO THE NEXT STORMAN 2269 JP 'VE1' STORMAN 2270 VL23 EQ B1,B3,VL16 . LAST WORD MUST HAVE 0 POINTER STORMAN 2271 JP 'VE1' STORMAN 2272 * STORMAN 2273 * CHECK CPD IN LBL HBWN STORMAN 2274 VL24 SB1 B4+X2 . PREPARE B1 FOR VL22 STORMAN 2275 SA3 B4+1 . FETCH CPD STORMAN 2276 BX4 X3 STORMAN 2277 SB2 X3 STORMAN 2278 AX3 55 STORMAN 2279 NZ X3,VL25 . BRANCH IF SPECIAL STORMAN 2280 AX4 18 STORMAN 2281 RJ CBAS STORMAN 2282 SB2 X4 STORMAN 2283 SB3 X1 STORMAN 2284 EQ B2,B3,VL22 . CHECK IF BASE FIELD IS STORMAN 2285 JP 'VE1' . CONSISTENT STORMAN 2286 VL25 SB3 CALL . CHECK SPECIAL LABELS STORMAN 2287 LT B3,B2,'VE1' STORMAN 2288 AX4 18 STORMAN 2289 SB2 X4 STORMAN 2290 EQ B2,B0,VL22 STORMAN 2291 JP 'VE1' STORMAN 2292 * STORMAN 2293 * CHECK FUD IN FUNCTION (CALLTYP) HBWN STORMAN 2294 VL26 SB1 B4+X2 . PREPARE B1 FOR VL22 STORMAN 2295 SA3 A1+1 . FETCH FUD STORMAN 2296 BX2 X3 STORMAN 2297 BX4 X3 STORMAN 2298 AX3 55 STORMAN 2299 NZ X3,VL29 STORMAN 2300 * IT IS A PROCEDURE STORMAN 2301 BX3 X4 STORMAN 2302 AX3 18 STORMAN 2303 RJ VLIST . TRAVERSE FORMAL LIST STORMAN 2304 SB2 X7-1 STORMAN 2305 SB3 X3 STORMAN 2306 AX3 18 STORMAN 2307 GE B3,B2,'VE' . CHECK NUMBER OF FORMALS STORMAN 2308 SB2 B2+B2 STORMAN 2309 SB3 X3 STORMAN 2310 SB2 B2+1 STORMAN 2311 NE B2,B3,'VE1' . CHECK APPETITE STORMAN 2312 VL27 SA2 X4 . ADDRESSES ON FORMAL STORMAN 2313 SX4 X2 . LIST MUST POINT TO SIMPLE STORMAN 2314 AX2 18 . VARIABLES, STORMAN 2315 SA1 X2-1 STORMAN 2316 AX1 55 STORMAN 2317 ZR X4,VL28 STORMAN 2318 SX1 X1-VARTYP+37B STORMAN 2319 ZR X1,VL27 STORMAN 2320 JP 'VE' STORMAN 2321 VL28 SX1 X1-LBLTYP+37B . EXCEPT THE LAST ONE MUST STORMAN 2322 ZR X1,VL22 . POINT TO A LABEL. STORMAN 2323 JP 'VE' STORMAN 2324 * DISPATCH ON FUTY STORMAN 2325 VL29 NG X3,VL33 . BRANCH IF STANDARD PROCEDURE STORMAN 2326 SX0 X3-DATATYP STORMAN 2327 ZR X0,VL32 . - DATA CONSTRUCTOR STORMAN 2328 SX0 X3-FLDTYP STORMAN 2329 ZR X0,VL30 . - FIELD SELECTOR STORMAN 2330 SX0 X3-UNDFTYP STORMAN 2331 ZR X0,VL22 . - UNDEFINED STORMAN 2332 JP 'VE' STORMAN 2333 * CHECK FIELD FUD, X2=X4=FUD STORMAN 2334 VL30 RJ VLIST STORMAN 2335 VL31 SX3 X4 STORMAN 2336 AX4 18 STORMAN 2337 SA1 X4 . FETCH WORD 0 OF DOPE VECTOR STORMAN 2338 AX4 18 STORMAN 2339 SB2 X1 . SIZE OF STRUCTURE STORMAN 2340 AX1 55 STORMAN 2341 SX1 X1-DOPTYP+37B STORMAN 2342 NZ X1,'VE' STORMAN 2343 SB3 X4 . FIELD DISPLACEMENT STORMAN 2344 SA4 X3 STORMAN 2345 GE B3,B2,'VE' STORMAN 2346 SB3 B3+1 STORMAN 2347 SA1 A1+B3 . BACK POINTER IN DOPE VECTOR STORMAN 2348 SB3 X1-1 STORMAN 2349 NE B3,B4,'VE' STORMAN 2350 NZ X3,VL31 STORMAN 2351 JP VL22 STORMAN 2352 * CHECK DATA CONSTRUCTOR FUD STORMAN 2353 VL32 SA1 X4 . WORD 0 OF DOPE VECTOR STORMAN 2354 SB2 X1 STORMAN 2355 AX4 18 STORMAN 2356 AX1 55 STORMAN 2357 SX1 X1-DOPTYP+37B STORMAN 2358 NZ X1,'VE' STORMAN 2359 SB3 X4+1 STORMAN 2360 NE B2,B3,'VE' . CHECK NUMBER OF FIELDS STORMAN 2361 JP VL22 STORMAN 2362 * CHECK STANDARD PROCEDURE FUD STORMAN 2363 VL33 SA1 MINHS . CHECK IF MACHINE CODE STORMAN 2364 SB2 X4 . ADDRESS IS AT ALL REASONABLE STORMAN 2365 SB3 X1 STORMAN 2366 GE B0,B2,'VE' STORMAN 2367 GE B2,B3,'VE' STORMAN 2368 JP VL22 STORMAN 2369 * STORMAN 2370 * CHECK SVD IN SIMPLE VARIABLE HBWN STORMAN 2371 VL34 SA1 A1+1 STORMAN 2372 RJ VSVD . CHECK SVD IN X1 STORMAN 2373 AX5 18 STORMAN 2374 SB4 B5+0 STORMAN 2375 SB1 B4+X5 . PREPARE B4,B1 STORMAN 2376 SA3 B4+1 . GO CHECK NAME AND HASH CODE STORMAN 2377 JP VL22 STORMAN 2378 * LOOP TO SCAN THE STACK IS SIMILAR TO THE ONE AT STORMAN 2379 * WPH2B OR WPH4U STORMAN 2380 * STORMAN 2381 VL35 SB5 B6+0 STORMAN 2382 * STORMAN 2383 VL36 SA1 B5 . NEXT STACK ENTRY HEADER STORMAN 2384 ZR X1,VL43 . BRANCH IF BOTTOM OF STACK STORMAN 2385 SB4 X1 . BYPASS TO B4 STORMAN 2386 GE B0,B4,'VE' . BYPASS MUST BE NOT LESS THAN 1 STORMAN 2387 * STORMAN 2388 PL X1,VL38 . BRANCH IF NOT RETURN INFO. STORMAN 2389 AX1 18 STORMAN 2390 SA1 X1 . RETURN ADDRESS MUST POINT STORMAN 2391 SB2 CALL . TO A CALL MICOP STORMAN 2392 SB3 X1+0 STORMAN 2393 NE B2,B3,'VE' STORMAN 2394 SX5 B4-2 STORMAN 2395 SB5 B5-1 . PREPARE TO SCAN STACKED SVD-S STORMAN 2396 VL37 SA2 B5 . ADDRESS MUST POINT TO A STORMAN 2397 SA2 X2-1 . SIMPLE VARIABLE STORMAN 2398 AX2 55 STORMAN 2399 SA1 B5-1 . SVD TO X1 STORMAN 2400 SX2 X2-VARTYP+37B STORMAN 2401 NZ X2,'VE' STORMAN 2402 RJ VSVD . CHECK SVD STORMAN 2403 SB5 B5-2 STORMAN 2404 SX5 X5-2 STORMAN 2405 PL X5,VL37 STORMAN 2406 JP VL36 STORMAN 2407 VL38 AX1 55 . NOT RETURN INFO STORMAN 2408 SA2 VWD . DISPATCH ON HSTY STORMAN 2409 LX1 2 STORMAN 2410 SB3 X1 STORMAN 2411 AX2 B3,X2 STORMAN 2412 MX0 56 STORMAN 2413 BX2 -X0*X2 STORMAN 2414 SB3 X2 STORMAN 2415 JP B3+VSW STORMAN 2416 VWD SWITCH VSW,4,0,1,1,2,3,2,0,0,4,4,4,4,0,0 STORMAN 2417 + SB5 B5-B4 . 0, S,I,R,SPEC STORMAN 2418 JP VL36 STORMAN 2419 + JP VL39 . 1, SS,SI STORMAN 2420 + SB4 B5-B4 . 2, PS,PE STORMAN 2421 JP VL41 STORMAN 2422 + SA1 B5 . 3, PA STORMAN 2423 AX1 18 STORMAN 2424 JP VL40 STORMAN 2425 + SA1 B5-1 . 4, SF,A,D,N,C STORMAN 2426 SB5 B5-B4 . NOTE ATY MAY BE 4-WORD SELECTOR ENTSTORMAN 2427 RJ VSVD STORMAN 2428 JP VL36 STORMAN 2429 * SI OR SS MAY APPEAR ONLY ON THE TOP OF THE STACK STORMAN 2430 VL39 NE B5,B6,'VE' STORMAN 2431 SA1 B5-1 . OPERAND MUST POINT TO A STORMAN 2432 SA2 X1-1 . VARIABLE OR LITERAL STORMAN 2433 RJ VVARLIT STORMAN 2434 SB5 B5-2 STORMAN 2435 JP VL36 STORMAN 2436 * CHECK PARAM FOR PA (IN X1) STORMAN 2437 VL40 SB3 X1 STORMAN 2438 GE B3,B4,'VE' . PARAM MUST BE LESS THAN BYPASS STORMAN 2439 SB4 B5-B4 . BUT GREATER THAN 0. STORMAN 2440 GE B0,B3,'VE' STORMAN 2441 * FALL THROUGH TO CHECK STARPM, ETC. (SEE VSVD3) STORMAN 2442 VL41 SB5 B5-1 STORMAN 2443 GE B4,B5,VL36 STORMAN 2444 SA1 B5 STORMAN 2445 SX2 X1+0 STORMAN 2446 UX3 B3,X1 STORMAN 2447 NG X2,VL41 STORMAN 2448 ID X1,VL42 STORMAN 2449 NE B3,B0,VL41 STORMAN 2450 VL42 SA2 X1-1 STORMAN 2451 RJ VVAR STORMAN 2452 EQ VL41 STORMAN 2453 * STORMAN 2454 * END OF LOOP TO SCAN THE STACK... STORMAN 2455 VL43 BSS 0 STORMAN 2456 * CONCLUSION OF SELF-CHECK... STORMAN 2457 * CHECK MAXHS AND MINSTAK STORMAN 2458 * STORMAN 2459 SA1 MAXHS . BOTH MUST POINT TO THE STORMAN 2460 SA2 MINSTAK . BOTTOM OF THE STACK STORMAN 2461 SB1 X1 STORMAN 2462 SB2 X2 STORMAN 2463 NE B1,B5,'VE3' STORMAN 2464 NE B2,B5,'VE3' STORMAN 2465 SA1 MINHS . CHECK SAVE LOCATIONS STORMAN 2466 SB5 X1 . FOR LISTS. (MAY BE EMPTY) STORMAN 2467 SA2 X1 STORMAN 2468 RJ VLIST STORMAN 2469 SA2 B5+1 STORMAN 2470 RJ VLIST STORMAN 2471 SX1 B5+2 . CHECK DUMMY FREE BLOCK ON STORMAN 2472 SB3 FRETYP-37B . CIRCULAR FREE HB LIST STORMAN 2473 SA4 VNFHB STORMAN 2474 BX2 X1 STORMAN 2475 SX4 X4+1 STORMAN 2476 RJ VHLIST STORMAN 2477 SA1 FHBLRP . CHECK SAME CIRCULAR LIST STARTING STORMAN 2478 BX2 X1 . AT THE ROVING POINTER STORMAN 2479 SB5 CODTYP-37B STORMAN 2480 RJ VHLIST STORMAN 2481 SA1 CODLIST . CHECK CODE LIST STORMAN 2482 BX2 X2-X2 STORMAN 2483 SB3 B5 STORMAN 2484 SA4 VNCODB STORMAN 2485 RJ VHLIST STORMAN 2486 SA1 FILLIST . CHECK FILELIST (MAY BE EMPTY) STORMAN 2487 SA4 VNFILB STORMAN 2488 BX5 X4 STORMAN 2489 JP VL44 . *********** REMOVE IF FILECHECK DONSTORMAN 2490 ZR X1,VL44 . IF LIST IS EMPTY STORMAN 2491 BX5 X5-X5 STORMAN 2492 SB3 FILTYP-37B STORMAN 2493 RJ VHLIST STORMAN 2494 VL44 NZ X5,'VE3' . NUMBER OF BLOCKS MUST BE 0 STORMAN 2495 SA4 MAXLS STORMAN 2496 SX2 B7 . TRAVERSE FREE LIST STORMAN 2497 RJ VLIST STORMAN 2498 ZR X7,'VE3' . MUST BE AT LEAST 1 WORD LONG STORMAN 2499 NZ X2,'VE3' . LAST WORD MUST BE 0 STORMAN 2500 SA3 MAXSTAK . NUMBER OF WORDS IN LS MUST STORMAN 2501 SA2 VNWLS . BE MAXLS-MAXSTAK. STORMAN 2502 IX3 X4+X3 STORMAN 2503 IX2 X2-X3 STORMAN 2504 NZ X2,'VE3' STORMAN 2505 * STORMAN 2506 * END OF SELF-CHECKING... STORMAN 2507 * STORMAN 2508 JP SELFCHK STORMAN 2509 * STORMAN 2510 EJECT STORMAN 2511 * VCHCNT STORMAN 2512 * COUNT THE NUMBER OF NONZERO CHARACTERS IN X2 STORMAN 2513 * PARAM: X2 STORMAN 2514 * RESULT: X7 STORMAN 2515 * X0,X1,X2,X7 STORMAN 2516 * STORMAN 2517 VCHCNT DATA 0 STORMAN 2518 MX0 6 STORMAN 2519 SX7 0 STORMAN 2520 VCHCA BX1 X0*X2 STORMAN 2521 ZR X1,VCHCNT STORMAN 2522 LX2 6 STORMAN 2523 SX7 X7+1 STORMAN 2524 EQ VCHCA STORMAN 2525 * STORMAN 2526 * VLIST STORMAN 2527 * TRAVERSE LIST STARTING AT X2. STORMAN 2528 * PARAM: X2 STORMAN 2529 * RESULT: X2 CONTAINS THE LAST WORD IN THE LIST STORMAN 2530 * X7 NUMBER OF WORDS IN THE LIST STORMAN 2531 * X1,X2,X6,X7,B1,B3 STORMAN 2532 * STORMAN 2533 VLIST1 SA1 VNWLS . THIS IS NOT THE ENTRY POINT STORMAN 2534 IX6 X1+X7 . INCREMENT LS WORD COUNT STORMAN 2535 SA6 A1 STORMAN 2536 VLIST DATA 0 STORMAN 2537 SA1 MAXSTAK . LS DELIMITER STORMAN 2538 BX7 X7-X7 . INIT WORD COUNT STORMAN 2539 SB2 X1 STORMAN 2540 VLIST2 SB3 X2 STORMAN 2541 EQ B3,B0,VLIST1 . RETURN IF POINTER IS 0 STORMAN 2542 SB3 B0-B3 . MAXSTAK IN NEGATIVE REPR. STORMAN 2543 LT B2,B3,'VE3' . WORD NOT IN LS STORMAN 2544 SA2 X2 . NEXT WORD ON LIST STORMAN 2545 SX7 X7+1 STORMAN 2546 EQ VLIST2 STORMAN 2547 * VVAR STORMAN 2548 * CHECK IF X1 IS A VALID VARIABLE REFERENCE STORMAN 2549 * CALL: SA2 X1-1 STORMAN 2550 * RJ VVAR STORMAN 2551 * PARAM: X1 VARIABLE REFERENCE STORMAN 2552 * RETURNS: A2 = WORD 0 OF CONTAINING HB STORMAN 2553 * B1 = 0 IFF THAT BLOCK IS VARTYP STORMAN 2554 * X2,B1 STORMAN 2555 * STORMAN 2556 VVAR0 AX2 55 STORMAN 2557 SB1 X2+B1 STORMAN 2558 NZ B1,VVAR2 . NOT SIMPLE VARIABLE STORMAN 2559 VVAR DATA 0 . ENTRY/EXIT STORMAN 2560 SB1 -VARTYP+37B . EXPECT VARTYP HB STORMAN 2561 NG X2,VVAR0 . CHECK FOR SIMPLE VARIABLE STORMAN 2562 VVAR1 SA2 A2-1 . FIND WORD 0 IN STRUCTURE STORMAN 2563 PL X2,VVAR1 STORMAN 2564 AX2 55 STORMAN 2565 VVAR2 SB1 -STRTYP+37B . EXPECT STRUCTURE HB STORMAN 2566 SX2 B1+X2 . CHECK HSTY STORMAN 2567 ZR X2,VVAR . NOTE B1 .NE. 0 STORMAN 2568 JP 'VE2' STORMAN 2569 * VVARLIT STORMAN 2570 * VERIFY THAT X1 IS A REFERENCE TO: STORMAN 2571 * A VARIABLE (STRUCTURE ELEMENT OR SIMPLE) STORMAN 2572 * OR A LITERAL (STRING OR INTEGER) STORMAN 2573 * CALL: SA2 X1-1 STORMAN 2574 * RJ VVARLIT STORMAN 2575 * USES: A2/X2, B1 STORMAN 2576 VVARLIT DATA 0 . ENTRY/EXIT STORMAN 2577 PL X2,VVL1 . X1 MUST POINT TO STRUCTURE ELEMENT STORMAN 2578 AX2 55 STORMAN 2579 SB1 X2-LITTYP+37B STORMAN 2580 ZR B1,VVARLIT . LITERAL STRING STORMAN 2581 SB1 X2-INTTYP+37B STORMAN 2582 ZR B1,VVARLIT . LITERAL INTEGER STORMAN 2583 VVL1 SA2 A2 STORMAN 2584 RJ VVAR . IF NOT LITERAL, THEN VARIABLE STORMAN 2585 JP VVARLIT STORMAN 2586 * VSVD STORMAN 2587 * CHECK SVD IN X1 STORMAN 2588 * X5,B5 ARE SAVED STORMAN 2589 * STORMAN 2590 VSVD DATA 0 STORMAN 2591 BX2 X1 STORMAN 2592 BX3 X1 STORMAN 2593 NG X1,'VE2' . SVD MUST BE POSITIVE STORMAN 2594 AX1 55 STORMAN 2595 SB1 X1 . DISPATCH ON SVTY STORMAN 2596 JP B1+VSVD1 STORMAN 2597 VSVD1 JP VSVD2 . SF STORMAN 2598 + JP 'VE2' . S STORMAN 2599 + JP VSVD2 . SS STORMAN 2600 + JP VSVD2 . SI STORMAN 2601 + BX0 X0-X0 . PS STORMAN 2602 JP VSVD3 STORMAN 2603 + MX0 1 . PA STORMAN 2604 JP VSVD3 STORMAN 2605 + BX0 X0-X0 . PE STORMAN 2606 JP VSVD3 STORMAN 2607 + JP VSVD . I STORMAN 2608 + SA1 MAXSTAK . R STORMAN 2609 JP VSVD8 STORMAN 2610 + AX3 18 . A STORMAN 2611 SA4 X3 STORMAN 2612 JP VSVD9 STORMAN 2613 + AX3 18 . D STORMAN 2614 SA4 X3 STORMAN 2615 JP VSVD9 STORMAN 2616 + SX1 X2 . N STORMAN 2617 AX3 18 STORMAN 2618 JP VSVD10 STORMAN 2619 + JP VSVD12 . C STORMAN 2620 + SA1 MAXSTAK . IN STORMAN 2621 JP VSVD13 STORMAN 2622 + SA1 MAXSTAK . OUT STORMAN 2623 JP VSVD13 STORMAN 2624 JP 'VE2' ***** CHARLES, WHAT IS THIS ***** STORMAN 2625 * CHECK SF, SS TYPES STORMAN 2626 VSVD2 RJ VLIST STORMAN 2627 SX7 X7-1 STORMAN 2628 NG X7,'VE2' . LIST MUST CONTAIN AT LEAST STORMAN 2629 AX3 18 . 1 WORD STORMAN 2630 SB3 X3 STORMAN 2631 SB2 A2 STORMAN 2632 NE B2,B3,'VE2' . CHECK LAST STORMAN 2633 BX6 X7 STORMAN 2634 LX7 3 . COUNT NUMBER OF CHARACTERS BY STORMAN 2635 IX6 X7-X6 . COMPUTING 7*(WORDS-1) "7 = 8 - 1!STORMAN 2636 RJ VCHCNT STORMAN 2637 AX3 18 STORMAN 2638 IX7 X7+X6 . AND ADDING THE NUMBER OF STORMAN 2639 SB3 X3 . CHARS IN THE LAST WORD STORMAN 2640 SB2 X7 STORMAN 2641 NE B2,B3,'VE2' . CHECK CLENGTH STORMAN 2642 JP VSVD STORMAN 2643 * CHECK PATTERNS. X0 IS NEGATIVE IF PA. STORMAN 2644 VSVD3 BX4 X3 STORMAN 2645 RJ VLIST STORMAN 2646 AX3 18 STORMAN 2647 SB3 X3 STORMAN 2648 SB2 A2 STORMAN 2649 AX3 18 STORMAN 2650 NE B2,B3,'VE2' . CHECK LAST STORMAN 2651 SB3 X3 STORMAN 2652 SB2 X7 STORMAN 2653 PL X0,VSVD4 STORMAN 2654 GE B3,B2,'VE2' . PARAM IN PA MUST BE LESS STORMAN 2655 GE B0,B3,'VE2' . THAN X7 BUT GREATER THAN 1 STORMAN 2656 EQ VSVD5 STORMAN 2657 VSVD4 NE B3,B0,'VE2' . PARAM=0 IN PS OR PE STORMAN 2658 * USUAL LOOP TO FIND STARPM, PRDPM AND DOLPM STORMAN 2659 * SEE ALSO WPH2F STORMAN 2660 VSVD5 SA1 X4 STORMAN 2661 SX4 X1 STORMAN 2662 NG X1,VSVD7 STORMAN 2663 LX1 19 STORMAN 2664 ID X1,VSVD6 STORMAN 2665 UX7 B2,X1 STORMAN 2666 NE B2,B0,VSVD7 STORMAN 2667 VSVD6 SA2 X1-1 STORMAN 2668 RJ VVAR STORMAN 2669 VSVD7 NZ X4,VSVD5 STORMAN 2670 JP VSVD STORMAN 2671 * CHECK REAL NUMBER (NOT LITERAL). OPERAND MUST STORMAN 2672 * BE IN LIST STORAGE. X1=MAXSTAK STORMAN 2673 VSVD8 SA4 X2 STORMAN 2674 SB3 X2 STORMAN 2675 BX1 -X1 STORMAN 2676 SB2 X1 STORMAN 2677 LT B3,B2,'VE2' STORMAN 2678 SA1 VNWLS . INCREMENT LS WORD COUNT STORMAN 2679 SX7 X1+1 STORMAN 2680 SA7 A1 STORMAN 2681 JP VSVD STORMAN 2682 * CHECK ATY AND DTY SVD. X4=WORD 0 OF STRUCTURE STORMAN 2683 VSVD9 AX4 18 . DOPE POINTER STORMAN 2684 SB1 X4 STORMAN 2685 SB2 X2 . F1 MUST BE A COPY STORMAN 2686 AX4 55-18 STORMAN 2687 NE B1,B2,'VE2' STORMAN 2688 SX4 X4-STRTYP+37B STORMAN 2689 ZR X4,VSVD . BASE MUST POINT TO A STORMAN 2690 JP 'VE2' . STRUCTURE STORMAN 2691 * CHECK NTY, X1=F1, X3=F2 OF SVD STORMAN 2692 VSVD10 SA2 X1-1 STORMAN 2693 RJ VVAR . RETURNS B1=0 IFF VARTYP HB STORMAN 2694 SB2 A2 . BASE OF HB STORMAN 2695 SB3 X3 STORMAN 2696 EQ B3,B0,VSVD11 . IF F2 IS NOT 0 STORMAN 2697 EQ B0,B1,'VE2' . NTY POINTS TO A STRUCTURE STORMAN 2698 EQ B2,B3,VSVD . AND F2=BASE STORMAN 2699 JP 'VE2' STORMAN 2700 VSVD11 EQ B0,B1,VSVD . OTHERWISE IT POINTS TO A STORMAN 2701 JP 'VE2' . SIMPLE VARIABLE STORMAN 2702 * CHECKING CTY IS SIMILAR TO VL24 STORMAN 2703 VSVD12 SB2 X3 STORMAN 2704 AX3 18 STORMAN 2705 RJ CBAS STORMAN 2706 SB2 X1 STORMAN 2707 SB3 X3 STORMAN 2708 NE B2,B3,'VE2' . VERIFY BASE STORMAN 2709 SA1 B2 STORMAN 2710 AX1 55 STORMAN 2711 SX1 X1-CODTYP+37B . MUST BE A CODE BLOCK STORMAN 2712 ZR X1,VSVD STORMAN 2713 JP 'VE2' STORMAN 2714 * STORMAN 2715 * CHECK INTY AND OUTTY, THEN CHECK SS TYPE VALUE STORMAN 2716 * X1=MAXSTAK STORMAN 2717 VSVD13 SB2 X2 STORMAN 2718 AX2 18 STORMAN 2719 BX1 -X1 STORMAN 2720 SB1 X1 STORMAN 2721 LT B2,B1,'VE2' . SS SVD MUST BE IN LS STORMAN 2722 SA4 VNWLS . INCREMENT LS WORD COUNTER STORMAN 2723 SA2 X2 STORMAN 2724 SA1 B2 . FETCH SS SVD STORMAN 2725 SX7 X4+1 STORMAN 2726 AX2 55 STORMAN 2727 SA7 A4 STORMAN 2728 SX2 X2-FILTYP+37B . F2 MUST POINT TO AN I/O STORMAN 2729 BX3 X1 . BUFFER STORMAN 2730 AX1 55 STORMAN 2731 NZ X2,'VE2' STORMAN 2732 SX1 X1-SSTY . VERIFY SS TYPE STORMAN 2733 NZ X1,'VE2' STORMAN 2734 BX2 X3 STORMAN 2735 JP VSVD2 . GO CHECK SS SVD STORMAN 2736 * STORMAN 2737 * VHLIST STORMAN 2738 * VERIFY THAT HEAP BLOCK LIST IS INTACT STORMAN 2739 * PARAM: X1 LIST HEADER (MAY NOT BE EMPTY) STORMAN 2740 * X2 END OF LIST MARK STORMAN 2741 * X4 NUMBER OF BLOCKS EXPECTED STORMAN 2742 * B3 TYPE OF BLOCKS ON THE LIST STORMAN 2743 * X1,X7,B1,B2,B4 STORMAN 2744 * STORMAN 2745 VHLIST DATA 0 STORMAN 2746 BX7 X7-X7 STORMAN 2747 SB1 X1 STORMAN 2748 SB2 X2+0 STORMAN 2749 VHL1 SA1 B1 . WORD 0 OF NEXT HB STORMAN 2750 SB1 X1 . LINK IS IN F1 STORMAN 2751 AX1 55 STORMAN 2752 SB4 X1 . HSTY TO B4 STORMAN 2753 NE B4,B3,'VE3' . WRONG TYPE STORMAN 2754 SX7 X7+1 STORMAN 2755 NE B1,B2,VHL1 . BRANCH IF NOT END STORMAN 2756 IX1 X4-X7 STORMAN 2757 ZR X1,VHLIST . BRANCH IF COUNT IS OK STORMAN 2758 JP 'VE3' STORMAN 2759 * STORMAN 2760 * STORMAN 2761 END STORMAN 2762