COMPILATION LISTING OF SEGMENT bce_save Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1017.1 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1986 * 6* * * 7* *********************************************************** */ 8 9 /* format: style4,declareind10,dclind10,idind20,indattr,delnl,insnl,ifthenstmt */ 10 11 bce_save: 12 procedure (ss_info_ptr); 13 14 /**** NOTE: 15* All the internal procedures have been carefully setup to be QUICK 16* (i.e. they all share the main stack frame). Also routines that are 17* not required in the main stream save/restore loop, that do not reference 18* main stream procedures, can be in bce_save_util_. */ 19 20 /****^ HISTORY COMMENTS: 21* 1) change(86-09-18,Farley), approve(86-07-18,MCR7439), 22* audit(86-09-24,Fawcett), install(86-10-20,MR12.0-1189): 23* BCE Save/Restore program. Written November 1985 - July 1986 24* by Paul Farley. 25* 2) change(87-01-21,Farley), approve(87-02-25,MCR7615), audit(87-03-05,GWMay), 26* install(87-03-30,MR12.1-1018): 27* Corrected to properly free the I/O buffer after detecting an invalid tape 28* label in READ_TAPE_LABEL. 29* 3) change(87-05-21,Farley), approve(87-07-07,MCR7705), 30* audit(87-07-21,Fawcett), install(87-07-31,MR12.1-1051): 31* Changed to properly set si.tcbx when -display_info_tape is used. 32* 4) change(87-07-07,Farley), approve(87-07-17,MCR7733), 33* audit(87-07-21,Fawcett), install(87-07-31,MR12.1-1051): 34* Changed most of the calls to ioa_ and com_err_ to calls to syserr and 35* syserr$error_code so that a time stamp will be included in the output.. 36* Changed the code to chain the set tape density I/O to the first read 37* or write at BOT. Changed the write error recovery at BOT to consist of 38* a rewind followed by a set-density and then the retry of the write. 39* 5) change(87-07-31,Farley), approve(87-07-31,MECR0003), 40* audit(87-07-31,Fawcett), install(87-07-31,MR12.1-1051): 41* Corrected FLUSH_BUFFERS and created FREE_OR_REQUEUE_TAPE_IO to properly 42* close out a tape after EOT has been detected.. (phx20930) 43* 6) change(87-08-03,Farley), approve(87-08-06,MECR0004), 44* audit(87-08-05,Fawcett), install(87-08-06,MR12.1-1063): 45* Changed DISK_RUN to check for the oldest DISK_BUSY buffer, to correct a 46* problem with PV records on tape being out of sequence. 47* 7) change(87-08-28,Farley), approve(87-08-28,MCR7758), 48* audit(87-08-28,Fawcett), install(87-09-01,MR12.1-1095): 49* Offically install the above two MECRed changes.. 50* 8) change(87-11-04,Farley), approve(88-02-26,MCR7811), 51* audit(88-03-04,Fawcett), install(88-03-15,MR12.2-1035): 52* Changed to always call bce_save_util_$premount_check when doing a restore 53* and let it check the usable tape device count. 54* 55* Added validity checking of the next_tape_number, so that the 56* tape_seq_number will not become inconsistent when this next number is 57* calculated incorrectly from the "Info" tape or its replacement. 58* 59* Added a RELOCATE_RECORD procedure for attempting to find a missing tape 60* record during a restore. It has been found that sometimes a tape device 61* can skip a record that is REALLY on the tape, due to some device 62* malfunction. 63* 9) change(87-11-16,Farley), approve(88-02-26,MCR7811), 64* audit(88-03-04,Fawcett), install(88-03-15,MR12.2-1035): 65* Added clearing of the unused VTOC area before doing a restore. This 66* is to guarantee that there are no "bogus" VTOCEs left laying around. 67* 10) change(88-04-12,Farley), approve(88-05-31,MCR7902), 68* audit(88-05-31,Fawcett), install(88-07-05,MR12.2-1052): 69* Added checking for tape record sequence errors while doing a save. 70* Corrected bug in EOT record processing, so that duplicate records don't 71* get written to tape. Now force the mount message for the restart tape by 72* unloading any tape that may be mounted on the device, to allow better 73* operator understanding of what is going on. 74* END HISTORY COMMENTS */ 75 76 restoring = NO; 77 my_name = "save"; 78 goto common; 79 80 bce_save$bce_restore: 81 entry (ss_info_ptr); 82 83 restoring = YES; 84 my_name = "restore"; 85 common: 86 srip = addr (save_restore_info); 87 unspec (sri) = ""b; 88 sri.version_id = sri_version_1; 89 sri.set_count = 0; 90 sri.doing_restore = restoring; 91 sri.whoami = my_name; 92 sri.cf_arrayp = addr (cf_array); 93 sri.part_area_ptr = addr (part_area (1, 1)); 94 sri.pv_area_ptr = addr (pv_area (1, 1)); 95 sri.tcb_area_ptr = addr (tcb_area (1, 0)); 96 iobp = null (); 97 unspec (cf_array (*)) = ""b; 98 unspec (part_area (*, *)) = ""b; 99 unspec (pv_area (*, *)) = ""b; 100 unspec (tcb_area (*, *)) = ""b; 101 disk_post_area_ptr = null (); 102 ioi_post_area_ptr = null (); 103 sri.set_infop = addr (set_info); 104 unspec (set_info (*)) = ""b; 105 do setx = lbound (set_info, 1) to hbound (set_info, 1); 106 /* initialize array */ 107 set_info (setx).version_id = si_version_1; 108 set_info (setx).bit_map_ptr, set_info (setx).datap, set_info (setx).info_tape_label_ptr, 109 set_info (setx).part_ptr, set_info (setx).pv_ptr, set_info (setx).tape_label_ptr, 110 set_info (setx).tcb_ptr, set_info (setx).vol_preamble_ptr, set_info (setx).vol_map_ptr, 111 set_info (setx).vol_info_ptr = null (); /* so cleanup works */ 112 end; 113 114 on cleanup call CLEANUP; /* will happen on signal of sub_request_abort_ */ 115 116 if ss_info_ptr ^= null () then do; 117 call cu_$arg_count_rel (arg_count, ss_info.arg_list_ptr, code); 118 if code ^= 0 then do; 119 call com_err_ (code, my_name, "cu_$arg_count_rel"); 120 call ABORT; 121 end; 122 end; 123 else arg_count = 0; 124 125 if arg_count = 0 then do; 126 call ioa_ ("Usage is: ^a {-set} CF_1 {... CF_N} {-set CF_1 {... CF_N}}^/^-{-restart_set CF_1 {... CF_N}}", 127 my_name); 128 call ABORT; 129 end; 130 131 ss_info.flags.request_handling_opr_aborts = YES; /* let everybody know */ 132 display_info_tape = NO; 133 do argx = 1 to arg_count; 134 call cu_$arg_ptr_rel (argx, arg_ptr, arg_lth, code, ss_info.arg_list_ptr); 135 if code ^= 0 then do; 136 call com_err_ (code, my_name, "cu_$arg_ptr_rel"); 137 call ABORT; 138 end; 139 if substr (arg, 1, 1) ^= "-" then do; 140 if sri.set_count = 0 then sri.set_count = 1; 141 sri.cf_count = sri.cf_count + 1; 142 if sri.cf_count > hbound (cf_array, 1) then do; 143 call ioa_ ("^a: Too many control files specified on the command line.", my_name); 144 call ABORT; 145 end; 146 if arg_lth > length (cf_array (sri.cfx).name) then do; 147 call ioa_ ("^a: Illegal control file name ""^a"".", my_name, arg); 148 call ABORT; 149 end; 150 unspec (cf_array (sri.cf_count)) = ""b; 151 do sri.cfx = lbound (cf_array, 1) to sri.cf_count - 1 152 while (cf_array (sri.cfx).name ^= arg | (cf_array (sri.cfx).set ^= sri.set_count & ^restoring)); 153 end; 154 if sri.cfx ^= sri.cf_count then do; 155 call ioa_ ("^a: Control file ""^a"" has be multiply specified.", my_name, arg); 156 call ABORT; 157 end; 158 cf_array (sri.cfx).name = arg; 159 cf_array (sri.cfx).set = sri.set_count; 160 cf_array (sri.cfx).length = 0; 161 cf_array (sri.cfx).ptr = null (); 162 end; 163 else if arg = "-set" then do; 164 sri.set_count = sri.set_count + 1; 165 if sri.set_count > hbound (set_info, 1) then do; 166 call ioa_ ("^a: Too many SETs specified.", my_name); 167 call ABORT; 168 end; 169 set_info (sri.set_count).restart = NO; 170 end; 171 else if arg = "-restart_set" | arg = "-restart" | arg = "-rt" then do; 172 sri.set_count = sri.set_count + 1; 173 if sri.set_count > hbound (set_info, 1) then do; 174 call ioa_ ("^a: Too many SETs specified.", my_name); 175 call ABORT; 176 end; 177 set_info (sri.set_count).restart = YES; 178 end; 179 else if arg = "-debug" | arg = "-db" then sri.debug = YES; 180 else if (arg = "-display_info_tape" | arg = "-dit") & restoring then do; 181 argx = argx + 1; 182 call cu_$arg_ptr_rel (argx, arg_ptr, arg_lth, code, ss_info.arg_list_ptr); 183 if code ^= 0 then do; 184 call com_err_ (code, my_name, "Getting tape drive arg for display_info_tape."); 185 call ABORT; 186 end; 187 sri.set_count, setx = 1; 188 si_ptr = addr (set_info (setx)); 189 si.tcbx, si.tape_count, si.usable_tape_devices = 1; 190 si.tape_set = "display_info_tape"; 191 si.tcb_ptr, tcbp = addr (tcb_area (setx, si.tcbx)); 192 unspec (tcb) = ""b; 193 tcb.name = arg; /* insert tape drive name */ 194 tcb.density = ANY_DENSITY; 195 display_info_tape = YES; 196 end; 197 else do; 198 call ioa_ ("^a: Bad argument ^a.", my_name, arg); 199 call ABORT; 200 end; 201 end; 202 203 if display_info_tape then do; /* special "Info" tape display */ 204 call SETUP; 205 setx = 1; /* force primary set */ 206 call SET_PTRS; 207 call ATTACH_TAPE; 208 if ^tcb.attached then goto EXIT; 209 call bce_save_util_$init_buffers (srip); 210 si.need_info_tape = YES; 211 call READ_TAPE_LABEL; 212 call bce_save_util_$display_info_tape (srip); 213 goto EXIT; 214 end; 215 216 do setx = lbound (set_info, 1) to sri.set_count; 217 call SET_PTRS; 218 si.tape_set = ""; 219 si.complete = NO; 220 si.tape_count = 0; 221 si.usable_tape_devices = 0; 222 si.pv_count = 0; 223 si.part_count = 0; 224 do sri.cfx = 1 by 1 while (sri.cfx <= sri.cf_count); 225 if cf_array (sri.cfx).set = setx then call bce_save_util_$scan_control_file (srip); 226 end; 227 if si.tape_set = "" then do; 228 call ioa_ ("^a: No tape set name defined for set-^d.", my_name, setx); 229 call ABORT; 230 end; 231 if si.tape_count = 0 then do; 232 call ioa_ ("^a(^a): No tape drives defined.", my_name, si.tape_set); 233 call ABORT; 234 end; 235 if si.pv_count = 0 & si.part_count = 0 then do; 236 call ioa_ ("^a(^a): No physical volumes or partitions defined.", my_name, si.tape_set); 237 call ABORT; 238 end; 239 end; 240 241 call SETUP; /* setup pointers */ 242 243 do setx = lbound (set_info, 1) to sri.set_count; 244 call SET_PTRS; 245 do si.tcbx = FIRST_TAPE_DEV_IDX to si.tape_count; 246 /* try attaching each tape device requested */ 247 si.tcb_ptr, tcbp = addr (tcb_array (si.tcbx)); 248 call ATTACH_TAPE; 249 if ^tcb.attached 250 then goto remove_tape_dev; 251 else do; 252 if ^TAPE_DEVICE_USABLE () then do; 253 remove_tape_dev: 254 call syserr (ANNOUNCE, 255 "^a(^a): Device ^a is being removed from the tape device list.^66t***", my_name, 256 si.tape_set, tcb.name); 257 tcb.removed = YES; 258 si.usable_tape_devices = si.usable_tape_devices - 1; 259 end; 260 if tcb.tape_mounted then call UNLOAD_TAPE; 261 if tcb.attached then call DETACH_TAPE; 262 end; 263 end; 264 do si.tcbx = FIRST_TAPE_DEV_IDX to si.tape_count while (tcb_array (si.tcbx).removed); 265 end; 266 if si.tcbx > si.tape_count then do; 267 call syserr (ANNOUNCE, "^a(^a): No usable tape devices left in list.", my_name, si.tape_set); 268 call ABORT; 269 end; 270 si.tcb_ptr, tcbp = addr (tcb_array (si.tcbx)); 271 call ATTACH_TAPE; /* re-attach first good device */ 272 if ^tcb.attached then goto remove_tape_dev; 273 call bce_save_util_$init_buffers (srip); 274 275 call ioa_ (""); 276 call syserr (ANNOUNCE, "^a(^a): The following tape device(s) will be used:^/", my_name, si.tape_set); 277 tape_drive_string = ""; 278 do i = FIRST_TAPE_DEV_IDX to si.tape_count; 279 if ^tcb_array (i).removed then do; 280 tape_drive_string = tape_drive_string || tcb_array (i).name || " "; 281 if length (tape_drive_string) > 50 then do; 282 /* 6 per line */ 283 call ioa_ ("^-^a", tape_drive_string); 284 tape_drive_string = ""; 285 end; 286 end; 287 end; 288 if tape_drive_string ^= "" then call ioa_ ("^-^a", tape_drive_string); 289 290 do partx = lbound (part_array, 1) to si.part_count; 291 /* see if pv defined */ 292 do si.pvx = lbound (pv_array, 1) to si.pv_count 293 while (pv_array (si.pvx).name ^= part_array (partx).pv_name); 294 end; 295 if si.pvx > si.pv_count then do; /* not found, make one */ 296 si.pv_count = si.pv_count + 1; 297 if si.pv_count > hbound (pv_array, 1) then do; 298 call syserr (ANNOUNCE, "^a(^a): No room to describe PV ^a for part ^a.", my_name, 299 si.tape_set, part_array (partx).pv_name, part_array (partx).name); 300 call ABORT; 301 end; 302 si.pv_ptr, pvp = addr (pv_array (si.pv_count)); 303 si.part_ptr, partp = addr (part_array (partx)); 304 pv.name = part.pv_name; 305 pv.device = part.device; 306 pv.pvtx = part.pv_pvtx; 307 pv.all = NO; 308 pv.only_part = YES; /* only saving/restoring volume part(s) */ 309 pv.part_requested = YES; 310 pv.all_parts = (part.name = ALL_PARTS); 311 pv.restart.rec_on_pv, pv.restart.rec_in_type = 0; 312 pv.complete = NO; 313 pv.removed = NO; 314 end; 315 else do; 316 pv_array (si.pvx).part_requested = YES; 317 /* show partition requested */ 318 if ^pv_array (si.pvx).all_parts 319 then pv_array (si.pvx).all_parts = (part_array (partx).name = ALL_PARTS); 320 end; 321 end; 322 323 if restoring 324 then si.need_info_tape = YES; 325 else si.need_info_tape = NO; 326 call SETUP_SET; /* finish setup of this set */ 327 si.restart = NO; /* turn OFF restart flag */ 328 329 do si.pvx = lbound (pv_array, 1) to si.pv_count while (pv_array (si.pvx).removed); 330 end; 331 if si.pvx > si.pv_count then do; 332 call syserr (ANNOUNCE, "^a(^a): No Physical Volumes left to ^a.", my_name, si.tape_set, my_name); 333 call ABORT; 334 end; 335 336 call bce_save_util_$thread_partition_list (srip); 337 /* Thread partitions & connect to pv */ 338 si.pvx = 1; 339 si.pv_ptr, pvp = addr (pv_array (si.pvx)); /* set back to the beginning */ 340 end; 341 342 call bce_query$yes_no (yes_no, "^/^a: Would you like to continue?", my_name); 343 if ^yes_no then goto EXIT; 344 345 /* Begin Main Processing Loop */ 346 347 done = NO; 348 do while (^done); 349 do setx = lbound (set_info, 1) to sri.set_count; 350 call SET_PTRS; 351 if si.restart_requested then goto RESTART; 352 /* restart this set */ 353 if ^si.complete 354 then if ^pv.removed & ^pv.complete then do; 355 if restoring 356 then call RESTORE_PV; 357 else call SAVE_PV; 358 end; 359 else do; 360 do si.pvx = lbound (pv_array, 1) to si.pv_count 361 while (pv_array (si.pvx).removed | pv_array (si.pvx).complete); 362 end; 363 if si.pvx > si.pv_count then do; 364 if ^restoring then do; /* wrap up save */ 365 call WRITE_TAPE_EOR;/* end-of-reel record */ 366 call NEXT_TAPE_DEVICE; 367 if TAPE_DEVICE_READY () then do; 368 call bce_query$yes_no (yes_no, "^a(^a): OK to write ""Info"" tape on ^a? ", 369 my_name, si.tape_set, tcb.name); 370 if ^yes_no then call UNLOAD_TAPE; 371 end; 372 si.need_info_tape = YES; 373 /* setup to write "Info" tape */ 374 si.written_tape_label = NO; 375 call WRITE_TAPE_LABEL; 376 call WRITE_TAPE_EOR; 377 si.need_info_tape = NO; 378 end; 379 call UNLOAD_TAPE; /* unload the last tape */ 380 call syserr (ANNOUNCE, "^a(^a): ^a complete...", my_name, si.tape_set, my_name); 381 si.complete = YES; 382 end; 383 else si.pv_ptr, pvp = addr (pv_array (si.pvx)); 384 end; 385 else do; 386 do i = lbound (set_info, 1) to sri.set_count while (set_info (i).complete); 387 end; 388 if i > sri.set_count then done = YES; 389 /* ALL DONE */ 390 end; 391 call CHECK_ABORT; /* user wanta quit? */ 392 NEXT_SET: 393 end; 394 end; 395 396 /* Program EXIT */ 397 398 EXIT: 399 call CLEANUP; 400 return; 401 402 /**** The following two labels are transfered to from the 403* TAPE_ERROR_RECOVERY routine when either the "remove" or "restart" 404* requests are given. The non-local transfers are done so that all 405* the internal procedures can be QUICK (i.e. all share the same stack 406* frame). */ 407 408 REMOVE_N_RESTART: 409 tcb.removed = YES; 410 si.usable_tape_devices = si.usable_tape_devices - 1; 411 RESTART: 412 if tcb.removed 413 then call NEXT_TAPE_DEVICE; /* go to next one */ 414 else do; /* re-attach this one */ 415 if tcb.ioi_index ^= 0 then do; 416 if tcb.tape_mounted then call UNLOAD_TAPE; 417 call DETACH_TAPE; 418 end; 419 call ATTACH_TAPE; 420 call bce_save_util_$init_buffers (srip); 421 tcb.eot = NO; 422 end; 423 si.restart = YES; /* to inform rest of code */ 424 si.restart_requested = NO; /* nolonger needed */ 425 do si.pvx = lbound (pv_array, 1) to si.pv_count; 426 pv_array (si.pvx).restart.rec_on_pv, pv_array (si.pvx).restart.rec_in_type = 0; 427 pv_array (si.pvx).complete = NO; 428 end; 429 do partx = lbound (part_array, 1) to si.part_count; 430 part_array (partx).complete = NO; 431 end; 432 call SETUP_SET; /* restart this set */ 433 if si.complete then goto NEXT_SET; /* no need to restart */ 434 si.pvx = 1; 435 si.pv_ptr, pvp = addr (pv_array (si.pvx)); /* set back to the beginning */ 436 si.restart = NO; /* nolonger needed */ 437 call syserr (ANNOUNCE, "^a: Restarting ^a of set ""^a"" on ^a.^/", my_name, my_name, si.tape_set, tcb.name); 438 goto NEXT_SET; /* go back to normal processing */ 439 440 /**** ABORT - Routine to force program termination and cleanup to be done. */ 441 442 ABORT: 443 procedure; 444 445 signal sub_request_abort_; 446 return; 447 end ABORT; 448 449 /**** ATTACH_TAPE - Attach tape device. */ 450 451 ATTACH_TAPE: 452 procedure; 453 454 tcb.device = bin (substr (tcb.name, 6, 2), 17); 455 si.tape_rec_count = 0; 456 tcb.attached = NO; 457 call bce_save_util_$ioi_attach (srip); 458 tcb.write_tape = ^restoring; 459 tcb.fips = bce_save_util_$is_fips_device (srip); 460 call SET_DEVICE_OPTIONS; 461 if ^tcb.surveyed 462 then call DETACH_TAPE; 463 else tcb.attached = YES; 464 tcb.records_written = 0; 465 tcb.retry_count = 0; 466 tcb.one_eof = NO; 467 tcb.density_set = NO; 468 tcb.tape_vol_number = ""; /* don't know, yet. */ 469 return; 470 end ATTACH_TAPE; 471 472 /**** Small routine to scan the buffer list looking for a free buffer. */ 473 474 BUFFER_AVAILABLE: 475 procedure () returns (bit (1)); 476 477 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 478 if iob.state = FREE then return (YES); 479 end; 480 return (NO); 481 end BUFFER_AVAILABLE; 482 483 /**** Routine to find the number of buffers assigned to a given state. */ 484 485 BUFFER_COUNT: 486 procedure (p_buf_state) returns (fixed bin); 487 dcl buf_count fixed bin; 488 dcl p_buf_state fixed bin; 489 dcl temp_bufp ptr; 490 491 buf_count = 0; 492 do temp_bufp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, temp_bufp -> iob.next_bufx) 493 while (rel (temp_bufp) ^= ""b); 494 if temp_bufp -> iob.state = p_buf_state then buf_count = buf_count + 1; 495 end; 496 return (buf_count); 497 end BUFFER_COUNT; 498 499 /**** Routine to check if the operator has requested an abort, by using 500* the console "request" key. This routine is similar to the program 501* bce_check_abort, but allows for more flexible responses. */ 502 503 CHECK_ABORT: 504 procedure; 505 506 if ^wired_hardcore_data$abort_request then return; 507 query_abort: 508 wired_hardcore_data$abort_request = NO; 509 call bce_query (opr_input, "^a: Abort request: ", my_name); 510 if opr_input = "no" | opr_input = "n" then return; 511 else if opr_input = "abort" then call ABORT; 512 else if substr (opr_input, 1, 4) = "stop" then do; 513 opr_input = after (opr_input, " "); 514 do i = lbound (set_info, 1) to sri.set_count while (set_info (i).tape_set ^= opr_input); 515 end; 516 if i > sri.set_count then do; 517 bad_set_input: 518 call ioa_ ("Invalid tape set ""^a"".", opr_input); 519 goto query_abort; 520 end; 521 if ^set_info (i).complete then do; 522 call syserr (ANNOUNCE, "^a: Stopping ^a of set ""^a"".", my_name, my_name, set_info (i).tape_set); 523 set_info (i).complete = YES; /* abort by marking complete */ 524 return; 525 end; 526 call ioa_ ("^a: ^a set ""^a"" is no longer active.", my_name, my_name, set_info (i).tape_set); 527 goto query_abort; 528 end; 529 else if substr (opr_input, 1, 7) = "restart" then do; 530 opr_input = after (opr_input, " "); 531 do i = lbound (set_info, 1) to sri.set_count while (set_info (i).tape_set ^= opr_input); 532 end; 533 if i > sri.set_count then goto bad_set_input; 534 if ^set_info (i).complete then do; 535 set_info (i).restart_requested = YES; /* set flag to allow handling at proper time */ 536 return; 537 end; 538 call ioa_ ("^a: ^a set ""^a"" is already complete.", my_name, my_name, set_info (i).tape_set); 539 goto query_abort; 540 end; 541 else if opr_input = "help" | opr_input = "?" then do; 542 call ioa_ ("Valid inputs are: 543 no, n^21t- Go back to work. 544 abort^21t- Abort entire ^a. 545 restart TAPE_SET^21t- Restart ^a of just one set. 546 stop TAPE_SET^21t- Abort ^a of just one set.", my_name, my_name, my_name); 547 goto query_abort; 548 end; 549 else do; 550 call ioa_ ("Invalid input ""^a"". Type ""help"" or ""?"" for valid inputs.", opr_input); 551 goto query_abort; 552 end; 553 end CHECK_ABORT; 554 555 /**** Routine to validate the status returned from doing a tape connect. 556* It uses the tape_error_data data segment for help in interpretation 557* and analysis of the error. The routine will retry the error if 558* needed and call the error recovery routine when unrecoverable errors 559* are detected. */ 560 561 CHECK_STATUS: 562 procedure; 563 dcl checking_rew_status bit (1) aligned; 564 dcl detailed_status bit (216); 565 dcl detailed_status_array 566 (26) bit (8) based; 567 dcl have_detail bit (1) aligned; 568 dcl majstat fixed bin (5); 569 dcl mjsdp ptr; 570 dcl ssdp ptr; 571 dcl substat bit (6) aligned; 572 dcl tsx fixed bin; 573 574 tape_retries = 0; 575 tcb.retry_in_progress = NO; 576 checking_rew_status = NO; 577 check_status: 578 end_of_file_status, bad_density_status = NO; 579 if si.ioi_statusx = tcb.statusx then do; 580 isp = ptr (tcb.wksp, si.ioi_statusx + (size (istat) * tcb.status_idx)); 581 tcb.status_idx = mod (tcb.status_idx + 1, tcb.status_count); 582 end; 583 else isp = ptr (tcb.wksp, si.ioi_statusx); 584 io_status_word_ptr = addr (istat.iom_stat); 585 if ^istat.completion.st 586 then call syserr (CRASH, "bce_save: IO complete, but NO status returned for ^a.", si.tape_set); 587 588 substat = ""b; 589 if istat.level = FAULT_INTERRUPT then majstat = SYS_FAULT; 590 else if istat.level = SPECIAL_INTERRUPT then do; 591 call syserr (ANNOUNCE, "^a(check_status): Special Interrupt: ^.3b", my_name, 592 substr (istat.iom_stat, 1, 36)); 593 return; 594 end; 595 else if istat.time_out then do; 596 call syserr (ANNOUNCE, "^a(check_status): Time-Out on ^a", my_name, tcb.name); 597 if ^supress_error_recovery then goto error_recovery; 598 end; 599 else if (substr (istat.iom_stat, 1, 36) & STATUS_MASK) = ""b then do; 600 /* GOOD status return */ 601 if checking_rew_status then goto rew_status_ok; 602 /* don't leave yet */ 603 tcb.retry_in_progress = NO; 604 return; 605 end; 606 else if io_status_word.power then do; 607 majstat = POWER_OFF; 608 substat = ""b; 609 end; 610 else if io_status_word.channel_stat then do; 611 majstat = CHAN_STAT; 612 substat = io_status_word.channel_stat; 613 end; 614 else if io_status_word.central_stat then do; 615 majstat = CENTRAL_STAT; 616 substat = io_status_word.central_stat; 617 end; 618 else do; 619 majstat = bin (io_status_word.major, 4); 620 substat = io_status_word.sub; 621 end; 622 623 taperap = addrel (tedp, tape_error_data (majstat).interp); 624 625 do tsx = lbound (tape_status_interp_array, 1) to hbound (tape_status_interp_array, 1) 626 while ((substat & tape_status_interp_array (tsx).bitmask) ^= tape_status_interp_array (tsx).bitson); 627 end; 628 taperp = addr (tape_status_interp_array (tsx)); 629 mjsdp = addrel (tedp, tape_error_data (majstat).namep); 630 ssdp = addrel (tedp, tape_error_interp.namep); 631 if sri.debug then do; 632 call syserr (ANNOUNCE, "DEBUG: (^.3b) ^a, ^a on ^a.^/^2-tape_error_interp = ^w", unspec (io_status_word), 633 mjsdp -> tape_status_descrip.chr, ssdp -> tape_status_descrip.chr, tcb.name, 634 unspec (tape_error_interp)); 635 call ioa_ ("^- istat:^-^4( ^12.3b^)", addrel (addr (istat), 0) -> debug_based_block); 636 call ioa_ ("^2-^4( ^12.3b^)", addrel (addr (istat), 4) -> debug_based_block); 637 end; 638 639 if ^tcb.eot then tcb.eot = tape_error_interp.end_of_tape; 640 end_of_file_status = tape_error_interp.end_of_file; 641 bad_density_status = tape_error_interp.bad_density; 642 643 /**** The following check is done to find out if the retry of a data alert 644* at End of Tape completed properly. If the istat.offset is less than 645* the first buffer, then the chain was terminated prematurely and the 646* original IDCW will need to be executed again, to complete the I/O. 647* 648* An example of this is when a backspace & erase has to be inserted before 649* a write-tape-binary to retry a write error. The hardware will do this 650* properly, except when at EOT, in which case it does the backspace & 651* erase and returns data alert/end-of-tape status. The program has to 652* manually re-issue the write-tape-binary. */ 653 654 if tape_error_interp.end_of_tape then do; 655 if tcb.retry_in_progress & istat.offset < bin (tcb.buf_listx, 18) then do; 656 call TAPE_CONNECT (bin (si.last_idcwx, 18)); 657 /* re-issue */ 658 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 659 goto check_status; 660 end; 661 tcb.retry_in_progress = NO; 662 end; 663 664 if supress_error_recovery | tape_error_interp.end_of_tape | end_of_file_status | bad_density_status then return; 665 /* let the caller handle */ 666 667 if tape_retries < tape_error_interp.max_retries then do; 668 retry_the_io: 669 tcb.retry_in_progress = YES; 670 if (tcb.write_tape & ^tcb.density_set & ^si.written_tape_label & tape_error_interp.backspace) then do; 671 /* special case error writing first label record */ 672 call SET_IOI_POST_BUF (si.ioi_spec_post_buf, WAITING_SPECIAL); 673 idcwp = addr (stat_ws.retry_dcw (1)); 674 unspec (idcw) = DEFAULT_IDCW; 675 idcw.command = REWIND; 676 idcw.device = bit (bin (tcb.device, 6), 6); 677 call TAPE_CONNECT (bin (rel (addr (stat_ws.retry_dcw (1))), 18)); 678 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 679 checking_rew_status = YES; 680 goto check_status; /* see if rewind went ok */ 681 rew_status_ok: 682 checking_rew_status = NO; 683 call WAIT_FOR_SPECIAL (si.ioi_spec_post_buf); 684 if io_post_buffer.state = WAITING_SPECIAL then do; 685 call syserr (ANNOUNCE, "^a(^a): Time-out waiting for special interrupt.", my_name, si.tape_set); 686 goto error_recovery; 687 end; 688 689 call TAPE_CONNECT (bin (si.last_idcwx, 18)); 690 /* now retry the I/O chain */ 691 end; 692 else if tape_error_interp.backspace then do; 693 idcwp = addr (stat_ws.retry_dcw (1)); 694 unspec (idcw) = ""b; 695 idcw.command = BACKSPACE; 696 idcw.device = bit (bin (tcb.device, 6), 6); 697 idcw.code = IDCW; 698 idcw.control = CONTINUE_NO_MARKER; 699 idcw.chan_cmd = NON_DATA_XFER; 700 idcw.count = ONE_RECORD; /* backup 1 record */ 701 tdcwp = addr (stat_ws.retry_dcw (2)); 702 if tcb.write_tape then do; /* WRITing; erase bad spot */ 703 idcwp = addr (stat_ws.retry_dcw (2)); 704 unspec (idcw) = ""b; 705 idcw.command = ERASE; 706 idcw.device = bit (bin (tcb.device, 6), 6); 707 idcw.code = IDCW; 708 idcw.control = CONTINUE_NO_MARKER; 709 idcw.chan_cmd = NON_DATA_XFER; 710 idcw.count = ONE_RECORD; 711 tdcwp = addr (stat_ws.retry_dcw (3)); 712 iob_hold_ptr = iobp; 713 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) 714 while (rel (iobp) ^= ""b); 715 if iob.state = TAPE_BUSY then do; 716 if istat.offset >= bin (rel (addr (iob.idcw_word)), 18) 717 & istat.offset <= bin (rel (addr (iob.tdcw_word)), 18) 718 then si.last_idcwx = bit (rel (addr (iob.idcw_word)), 18); 719 /* locate BAD buffer to start retry */ 720 end; 721 end; 722 iobp = iob_hold_ptr; 723 end; 724 else do; /* READing; increment auto read retry */ 725 idcwp = ptr (tcb.wksp, si.last_idcwx); 726 if tape_retries < MAX_READ_RETRY 727 then idcw.chan_cmd = bit (bin (FIRST_READ_RETRY_CMD + tape_retries, 6), 6); 728 else idcw.chan_cmd = LAST_READ_RETRY_CMD; 729 end; 730 unspec (tdcw) = ""b; 731 tdcw.address = si.last_idcwx; /* retry previous IO */ 732 tdcw.type = TDCW; 733 tdcw.rel = ON; 734 735 call TAPE_CONNECT (bin (rel (addr (stat_ws.retry_dcw (1))), 18)); 736 end; 737 else call TAPE_CONNECT (bin (si.last_idcwx, 18)); 738 tape_retries = tape_retries + 1; 739 tcb.retry_count = tcb.retry_count + 1; 740 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 741 goto check_status; 742 end; 743 else if tape_error_interp.expect_special then do; /* wait for special */ 744 call SET_IOI_POST_BUF (si.ioi_spec_post_buf, WAITING_SPECIAL); 745 call syserr (ANNOUNCE, "^a(^a): Waiting for special on ^a.", my_name, si.tape_set, tcb.name); 746 call WAIT_FOR_SPECIAL (si.ioi_spec_post_buf); 747 if io_post_buffer.state = WAITING_SPECIAL then do; 748 call syserr (ANNOUNCE, "^a(^a): Time-out waiting for special interrupt.", my_name, si.tape_set); 749 goto error_recovery; 750 end; 751 end; 752 else do; /* Bad news */ 753 have_detail = NO; 754 if tape_error_interp.get_detail 755 then call ioi_get_status$detailed_status (tcb.ioi_index, have_detail, detailed_status, code); 756 757 call syserr (ANNOUNCE, "^a(^a):^[ (Unrecoverable)^;^] ^a, ^a on ^a.", my_name, si.tape_set, 758 tcb.retry_in_progress, mjsdp -> tape_status_descrip.chr, ssdp -> tape_status_descrip.chr, tcb.name); 759 if majstat > POWER_OFF then call ioa_ ("^5xstatus: ^.3b", unspec (io_status_word)); 760 else if have_detail 761 then call ioa_ ("^5xdetailed status:^13( ^2.4b^)^/^22t^13( ^2.4b^)", 762 addr (detailed_status) -> detailed_status_array); 763 error_recovery: 764 if tape_error_interp.bad_dev /* don't try to unload on detach */ 765 then tcb.tape_mounted = NO; 766 call TAPE_ERROR_RECOVERY; /* will only return if Opr want to retry again. */ 767 tape_retries = 0; /* reset counter */ 768 goto retry_the_io; 769 end; 770 tcb.retry_in_progress = NO; 771 return; /* good return */ 772 end CHECK_STATUS; 773 774 /**** CLEANUP - Procedure to cleanup program on exit. 775* 776* NOTE: The SET_PTRS code has been duplicated here so that 777* the SET_PTRS procedure can remain QUICK. */ 778 779 CLEANUP: 780 procedure; 781 782 do setx = lbound (set_info, 1) to sri.set_count; 783 784 /**** Begin SET_PTRS code */ 785 786 sri.set_index = setx; 787 si_ptr = addr (set_info (setx)); 788 info_tape_labelp = si.info_tape_label_ptr; 789 part_arrayp = addr (part_area (setx, 1)); 790 partp = si.part_ptr; 791 pv_arrayp = addr (pv_area (setx, 1)); 792 pvp = si.pv_ptr; 793 tape_labelp = si.tape_label_ptr; 794 tcb_arrayp = addr (tcb_area (setx, 0)); 795 tcbp = si.tcb_ptr; 796 vol_preamblep = si.vol_preamble_ptr; 797 vol_infop = si.vol_info_ptr; 798 799 /**** End SET_PTRS code */ 800 801 if tcbp ^= null () then do; 802 if tcb.ioi_index ^= 0 then do; 803 if iobp ^= null () 804 then do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) 805 while (rel (iobp) ^= ""b); 806 do while (iob.state = DISK_BUSY); 807 call bootload_disk_io$test_done (iob.disk_post_buf, code); 808 if code ^= error_table_$not_done then do; 809 iob.state = FREE; 810 iob.state_time = clock (); 811 end; 812 end; 813 end; 814 call DETACH_TAPE; 815 end; 816 end; 817 if tape_labelp ^= null () then call release_temp_segment_ (my_name, tape_labelp, code); 818 end; 819 820 if disk_post_area_ptr ^= null () then disk_post_area.number = 0; 821 822 if ioi_post_area_ptr ^= null () then ioi_post_area.number = 0; 823 if ss_info_ptr ^= null () then ss_info.flags.request_handling_opr_aborts = NO; 824 return; 825 end CLEANUP; 826 827 /**** DETACH_TAPE - Detach tape device. */ 828 829 DETACH_TAPE: 830 procedure; 831 832 call ioi_assignment$unassign (tcb.ioi_index, code); 833 if code ^= 0 then call syserr$error_code (BEEP, code, "^a: Unassigning ^a.^66t***", my_name, tcb.name); 834 tcb.attached = NO; 835 tcb.ioi_index = 0; 836 si.ioi_statusx = -1; 837 return; 838 end DETACH_TAPE; 839 840 /**** Routine to check if an outstanding disk I/O has completed. Returns 841* YES or NO based on the results. 842* 843* NOTE: This routine is duplicated in bce_save_util_.pl1 to save having 844* to push a stack frame. */ 845 846 DISK_DATA_READY: 847 procedure () returns (bit (1)); 848 849 if iob.state = DISK_READY then return (YES); 850 call bootload_disk_io$test_done (iob.disk_post_buf, code); 851 if code = error_table_$not_done then return (NO); 852 if code ^= 0 then do; /* until something better */ 853 call syserr$error_code (BEEP, code, "^a: ^a", my_name, pv.name); 854 call ABORT; 855 end; 856 iob.state = DISK_READY; 857 iob.state_time = clock (); 858 return (YES); 859 end DISK_DATA_READY; 860 861 /**** Routine to scan the IO buffers for outstanding disk I/O. */ 862 863 DISK_RUN: 864 procedure; 865 866 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 867 if iob.state = DISK_BUSY 868 then if OLDEST_BUFFER (iobp, DISK_BUSY) then do; 869 if DISK_DATA_READY () 870 then if iob.write then call FREE_BUFFER; 871 /* free buffer */ 872 end; 873 end; 874 875 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 876 if iob.state = DISK_QUEUED 877 then if OLDEST_BUFFER (iobp, DISK_QUEUED) then do; 878 if iob.write 879 then call WRITE_DISK; 880 else call READ_DISK; 881 end; 882 end; 883 return; 884 end DISK_RUN; 885 886 /**** Routine to scan the I/O buffers for all non-free ones. Based on the 887* current state of the buffer it is either freed or written to the 888* output device (disk or tape). This routine is called at the end of 889* each tape when doing either a save or restore because the buffers 890* have to be flushed before the tape device workspace disappears. */ 891 892 FLUSH_BUFFERS: 893 procedure; 894 dcl flushed bit (1); 895 896 flushed = NO; 897 do while (^flushed); 898 flushed = YES; /* until proven otherwise */ 899 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 900 if restoring then do; /* reading tape, writing disk */ 901 if iob.state = TAPE_QUEUED then do;/* Not needed */ 902 call FREE_BUFFER; 903 flushed = NO; 904 end; 905 else if iob.state = TAPE_BUSY 906 then if OLDEST_BUFFER (iobp, TAPE_BUSY) then do; 907 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 908 call CHECK_STATUS; 909 if end_of_file_status 910 then iob.state = FREE; /* not worth keeping */ 911 else iob.state = TAPE_READY; 912 /* might want to write to disk */ 913 iob.state_time = clock (); 914 flushed = NO; 915 end; 916 else flushed = NO; 917 else if iob.state = TAPE_READY 918 then if OLDEST_BUFFER (iobp, TAPE_READY) then do; 919 call QUEUE_DISK_WRITE; 920 flushed = NO; 921 end; 922 else flushed = NO; 923 else if iob.state = DISK_QUEUED 924 then if OLDEST_BUFFER (iobp, DISK_QUEUED) then do; 925 call bootload_disk_io$test_done (iob.disk_post_buf, code); 926 if code = 0 then call WRITE_DISK; 927 /* no I/O going on */ 928 flushed = NO; 929 end; 930 else flushed = NO; 931 else if iob.state = DISK_BUSY 932 then if OLDEST_BUFFER (iobp, DISK_BUSY) then do; 933 code = -1; 934 do while (code ^= 0); /* wait for IO to finish */ 935 call bootload_disk_io$test_done (iob.disk_post_buf, code); 936 if code ^= 0 & code ^= error_table_$not_done then do; 937 /* until something better */ 938 call syserr$error_code (BEEP, code, "^a: ^a", my_name, pv.name); 939 call ABORT; 940 end; 941 end; 942 call FREE_BUFFER; 943 flushed = NO; 944 end; 945 else flushed = NO; 946 end; 947 else do; /* reading disk, writing tape */ 948 if iob.state = DISK_QUEUED 949 then if OLDEST_BUFFER (iobp, DISK_QUEUED) then do; 950 call bootload_disk_io$test_done (iob.disk_post_buf, code); 951 if code = 0 then call READ_DISK; 952 /* no I/O going on */ 953 flushed = NO; 954 end; 955 else flushed = NO; 956 else if iob.state = DISK_BUSY 957 then if OLDEST_BUFFER (iobp, DISK_BUSY) then do; 958 code = -1; 959 do while (code ^= 0); /* wait for IO to finish */ 960 call bootload_disk_io$test_done (iob.disk_post_buf, code); 961 if code ^= 0 & code ^= error_table_$not_done then do; 962 /* until something better */ 963 call syserr$error_code (BEEP, code, "^a: ^a", my_name, pv.name); 964 call ABORT; 965 end; 966 end; 967 iob.state = DISK_READY; 968 iob.state_time = clock (); 969 flushed = NO; 970 end; 971 else flushed = NO; 972 else if iob.state = DISK_READY 973 then if OLDEST_BUFFER (iobp, DISK_READY) then do; 974 call QUEUE_TAPE_WRITE; 975 flushed = NO; 976 end; 977 else flushed = NO; 978 else if iob.state = TAPE_QUEUED 979 then if OLDEST_BUFFER (iobp, TAPE_QUEUED) then do; 980 if ioi_post_area.buffer (si.ioi_term_post_buf).state = IO_COMPLETE then do; 981 iob_hold_ptr = iobp;/* check if its OK to issue another I/O */ 982 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) 983 while (rel (iobp) ^= ""b); 984 if iob.state = TAPE_BUSY then do; 985 /* nop, last one has not been processed */ 986 iobp = iob_hold_ptr; 987 flushed = NO; 988 goto next_iob; 989 end; 990 end; 991 iobp = iob_hold_ptr; 992 if iob.head.rec_in_type = 0 | si.write_eof then do; 993 /* switched areas */ 994 call ISSUE (WRITE_EOF); 995 si.write_eof = NO; 996 end; 997 call WRITE_RECORD; 998 end; 999 flushed = NO; 1000 end; 1001 else flushed = NO; 1002 else if iob.state = TAPE_BUSY 1003 then if OLDEST_BUFFER (iobp, TAPE_BUSY) then do; 1004 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1005 call CHECK_STATUS; 1006 call FREE_OR_REQUEUE_TAPE_IO; 1007 flushed = NO; 1008 end; 1009 else flushed = NO; 1010 end; 1011 next_iob: 1012 end; 1013 end; 1014 return; 1015 end FLUSH_BUFFERS; 1016 1017 /**** Small routine to mark an I/O buffer as free. 1018* 1019* NOTE: This routine is duplicated in bce_save_util_.pl1 to save having 1020* to push a stack frame. */ 1021 1022 FREE_BUFFER: 1023 procedure; 1024 1025 iob.state = FREE; 1026 iob.state_time = clock (); 1027 return; 1028 end FREE_BUFFER; 1029 1030 /**** Small routine to either free the IO buffers in a write tape chain 1031* or re-queue them to be written (unchained) because of a EOT condition. */ 1032 1033 FREE_OR_REQUEUE_TAPE_IO: 1034 procedure; 1035 dcl iob_eot_state fixed bin; 1036 1037 iob_hold_ptr = iobp; 1038 iob_eot_state = FREE; /* start by freeing iob at EOT */ 1039 prev_iobp = null (); 1040 do iobp = iobp repeat ptr (tcb.wksp, iob.next_statex) while (rel (iobp) ^= ""b); 1041 if iob.head.end_of_part then part.complete = YES; 1042 /* This partition saved */ 1043 if iob.head.end_of_pv then pv.complete = YES;/* PV save complete? */ 1044 if iob_eot_state = FREE then do; 1045 tcb.records_written = tcb.records_written + 1; 1046 if tcb.records_written ^= iob.head.rec_on_tape & ^si.restart_requested then do; 1047 call syserr (ANNOUNCE, 1048 "^a(^a): Incorrect tape sequence number detected.^66t***^/^-was ^d, s/b ^d. Forcing restart of this tape set.", 1049 my_name, si.tape_set, iob.head.rec_on_tape, tcb.records_written); 1050 si.restart_requested = YES; 1051 end; 1052 end; 1053 if tcb.eot then do; 1054 idcwp = addr (iob.idcw_word); 1055 idcw.control = NO_CONTINUE_NO_MARKER; /* break dcw list thread */ 1056 iob.state = iob_eot_state; /* Free or Re-queue for writing */ 1057 if istat.offset >= bin (rel (addr (iob.idcw_word)), 18) 1058 & istat.offset <= bin (rel (addr (iob.tdcw_word)), 18) 1059 then iob_eot_state = TAPE_QUEUED; /* requeue all remaining buffers in chain */ 1060 if prev_iobp ^= null () then prev_iobp -> iob.next_statex = 0; 1061 /* unthread previous IO buffer */ 1062 prev_iobp = iobp; /* setup for next one */ 1063 end; 1064 else call FREE_BUFFER; 1065 end; 1066 iobp = iob_hold_ptr; 1067 return; 1068 end FREE_OR_REQUEUE_TAPE_IO; 1069 1070 /**** Routine to locate a free I/O buffer and mark it as suspended for 1071* disk I/O. The caller must have previously called BUFFER_AVAILABLE 1072* so that the routine does not abort when none can be found. 1073* 1074* NOTE: This routine is duplicated in bce_save_util_.pl1 to save having 1075* to push a stack frame. */ 1076 1077 GET_DISK_BUFFER: 1078 procedure; 1079 1080 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1081 if iob.state = FREE then do; 1082 iob.state = DISK_SUSPEND; 1083 iob.state_time = clock (); 1084 iob.next_statex = 0; 1085 si.datap = ptr (tcb.wksp, iob.datax); 1086 return; 1087 end; 1088 end; 1089 call syserr (CRASH, "bce_save: Out of disk buffers for ^a.", si.tape_set); 1090 end GET_DISK_BUFFER; 1091 1092 /**** Routine to locate a free I/O buffer and mark it as suspended for 1093* tape I/O. The caller must have previously called BUFFER_AVAILABLE 1094* so that the routine does not abort when none can be found. */ 1095 1096 GET_TAPE_BUFFER: 1097 procedure; 1098 1099 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1100 if iob.state = FREE then do; 1101 iob.state = TAPE_SUSPEND; 1102 iob.state_time = clock (); 1103 iob.next_statex = 0; 1104 si.datap = ptr (tcb.wksp, iob.datax); 1105 return; 1106 end; 1107 end; 1108 call syserr (CRASH, "bce_save: Out of tape buffers for ^a.", si.tape_set); 1109 return; 1110 end GET_TAPE_BUFFER; 1111 1112 /**** Routine that is used to issue all non-data transfer commands. It 1113* issues the connect and then waits for termination. */ 1114 1115 ISSUE: 1116 procedure (command_to_issue); 1117 dcl command_to_issue bit (6) unal; 1118 call CHECK_ABORT; /* user wanta quit? */ 1119 1120 stat_ws.idcw = DEFAULT_IDCW; 1121 idcwp = addr (stat_ws.idcw); 1122 idcw.command = command_to_issue; 1123 idcw.device = bit (bin (tcb.device, 6), 6); /* fill in device# */ 1124 if command_to_issue = REQUEST_STATUS then idcw.count = ""b; 1125 /* not used for this one. */ 1126 unspec (stat_ws.stat) = ""b; 1127 if bin (rel (addr (stat_ws.stat)), 18) ^= si.ioi_statusx then do; 1128 si.ioi_statusx = bin (rel (addr (stat_ws.stat)), 18); 1129 call ioi_set$status (tcb.ioi_index, si.ioi_statusx, 1, code); 1130 if code ^= 0 then do; 1131 call syserr$error_code (BEEP, code, "^a: Setting status index for ^a.^66t***", my_name, tcb.name); 1132 call ABORT; 1133 end; 1134 end; 1135 1136 call TAPE_CONNECT (bin (rel (addr (stat_ws.idcw)), 18)); 1137 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1138 call CHECK_STATUS; 1139 return; 1140 end ISSUE; 1141 1142 /**** For all calls to the routine, except for PV_PREAMBLE, iobp & 1143* si.datap will be pointing at the data read from the tape. For 1144* PV_PREAMBLE calls the record is moved to the preamble area and the 1145* buffer is freed. */ 1146 1147 LOCATE_RECORD: 1148 procedure (p_rec_type); 1149 dcl p_rec_type fixed bin parm; 1150 1151 call GET_TAPE_BUFFER; 1152 tcb.one_eof = NO; 1153 read_next_record: 1154 call READ_RECORD; 1155 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1156 call CHECK_STATUS; 1157 if end_of_file_status then do; 1158 if tcb.one_eof then do; 1159 call syserr (ANNOUNCE, "^a(^a): End of Information without detecting TAPE_EOR record.^66t***", 1160 my_name, si.tape_set); 1161 goto tape_end; 1162 end; 1163 tcb.one_eof = YES; 1164 goto read_next_record; 1165 end; 1166 tcb.one_eof = NO; 1167 if tcb.eot then do; 1168 tape_end: 1169 call FREE_BUFFER; 1170 call NEXT_TAPE_DEVICE; 1171 if si.next_tape_number > si.tape_seq_number 1172 then si.tape_seq_number = si.next_tape_number; 1173 else si.tape_seq_number = si.tape_seq_number + 1; 1174 call READ_TAPE_LABEL; 1175 call GET_TAPE_BUFFER; 1176 goto read_next_record; 1177 end; 1178 if ^VALID_REC_HEADER (0) then goto tape_end; /* bad header patterm */ 1179 if si.tape_set_uid ^= iob.head.tape_set_uid then goto tape_end; 1180 /* bad UID */ 1181 1182 if iob.head.type ^= p_rec_type then do; 1183 if iob.head.type = TAPE_EOR then goto tape_end; 1184 skip_file: 1185 call ISSUE (FORWARD_SPACE_FILE); 1186 goto read_next_record; 1187 end; 1188 iob.state = TAPE_READY; 1189 iob.state_time = clock (); 1190 si.tape_rec_count = iob.head.rec_on_tape; /* start checking from here */ 1191 if p_rec_type = PV_PREAMBLE then do; 1192 if si.datap -> label.pv_name ^= pv.name then goto skip_file; 1193 vol_preamblep -> page = si.datap -> page; /* copy label record */ 1194 call FREE_BUFFER; 1195 do volx = lbound (tape_label.vol_array, 1) to tape_label.vol_array_size 1196 while (tape_label.vol_array (volx).pvname ^= pv.name); 1197 end; 1198 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (volx)); 1199 si.display_pv_record = YES; /* display # of next record read */ 1200 end; 1201 return; 1202 end LOCATE_RECORD; 1203 1204 /**** This routine is used during a restart to read the label from the 1205* tape that is to be used as the restart check point. From the label 1206* information it can then skip the volumes that need to be skipped and 1207* locate the starting record of the current volume. If doing a save 1208* the operator is asked if the current tape should be rewritten or 1209* dismounted and another put in its place. */ 1210 1211 LOCATE_RESTART_POINT: 1212 procedure; 1213 1214 if TAPE_DEVICE_READY () then call UNLOAD_TAPE; /* force mount request */ 1215 lrp_read_tape_label: 1216 si.tape_seq_number = 0; 1217 call READ_TAPE_LABEL; /* read last good tape label */ 1218 si.tape_seq_number = bin (tape_label.tape_number, 17); 1219 /* start at this # */ 1220 if ^restoring then si.tape_seq_number = si.tape_seq_number - 1; 1221 /* write_tape_label will add 1 */ 1222 if ^restoring & tape_label.save_time + ONE_WEEK < clock () then do; 1223 call syserr (ANNOUNCE, "^a(^a): This tape is older than one week. Tape rejected.^66t***", my_name, 1224 si.tape_set); 1225 call UNLOAD_TAPE; 1226 goto lrp_read_tape_label; 1227 end; 1228 if restoring then do; 1229 do volx = lbound (tape_label.vol_array, 1) to tape_label.vol_array_idx - 1; 1230 /* skip PVs from earlier tapes */ 1231 do si.pvx = lbound (pv_array, 1) to si.pv_count; 1232 if pv_array (si.pvx).name = tape_label.vol_array (volx).pvname then do; 1233 pv_array (si.pvx).complete = YES; 1234 do partx = pv_array (si.pvx).part_idx repeat part_array (partx).next_idx while (partx ^= 0); 1235 /* mark all parts for a pv complete */ 1236 part_array (partx).complete = YES; 1237 end; 1238 goto next_vol_array; 1239 end; 1240 end; 1241 next_vol_array: 1242 end; 1243 1244 do volx = tape_label.vol_array_idx to tape_label.vol_array_size; 1245 /* locate first PV to restore */ 1246 do si.pvx = lbound (pv_array, 1) to si.pv_count; 1247 if pv_array (si.pvx).name = tape_label.vol_array (volx).pvname then goto found_pv; 1248 /* start from this PV */ 1249 end; 1250 end; 1251 do i = lbound (pv_array, 1) to si.pv_count while (pv_array (i).complete); 1252 call syserr (ANNOUNCE, "^a(^a): Skipping volume ^a on ^a, restore complete.", my_name, si.tape_set, 1253 pv_array (i).name, pv_array (i).device); 1254 end; 1255 call syserr (ANNOUNCE, "^a(^a): ^a complete...", my_name, si.tape_set, my_name); 1256 si.complete = YES; /* must be done.. */ 1257 return; 1258 1259 found_pv: 1260 do i = lbound (pv_array, 1) to si.pv_count while (pv_array (i).complete); 1261 call syserr (ANNOUNCE, "^a(^a): Skipping volume ^a on ^a, restore complete.", my_name, si.tape_set, 1262 pv_array (i).name, pv_array (i).device); 1263 end; 1264 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (volx)); 1265 pv_array (si.pvx).restart.rec_on_pv = vol_info.restart.rec_on_pv; 1266 pv_array (si.pvx).restart.rec_in_type = vol_info.restart.rec_in_type; 1267 call syserr (ANNOUNCE, "^a(^a): Starting from volume ^a on ^a.", my_name, si.tape_set, 1268 pv_array (si.pvx).name, pv_array (si.pvx).device); 1269 end; 1270 else do; 1271 do si.pvx = lbound (pv_array, 1) to si.pv_count while (pv_array (si.pvx).name ^= vol_info.pvname); 1272 end; 1273 if si.pvx > si.pv_count then do; 1274 call syserr (ANNOUNCE, 1275 "^a(^a): This tape starts with volume ^a,^66t***^/^-which was not defined. Tape rejected.", 1276 my_name, si.tape_set, vol_info.pvname); 1277 call UNLOAD_TAPE; 1278 goto lrp_read_tape_label; 1279 end; 1280 do si.pvx = lbound (pv_array, 1) to si.pv_count while (pv_array (si.pvx).name ^= vol_info.pvname); 1281 pv_array (si.pvx).complete = YES; 1282 do partx = pv_array (si.pvx).part_idx repeat part_array (partx).next_idx while (partx ^= 0); 1283 /* mark all parts for a pv complete */ 1284 part_array (partx).complete = YES; 1285 end; 1286 call syserr (ANNOUNCE, "^a(^a): Skipping volume ^a on ^a, save complete.", my_name, si.tape_set, 1287 pv_array (si.pvx).name, pv_array (si.pvx).device); 1288 end; 1289 pv_array (si.pvx).restart.rec_on_pv = vol_info.restart.rec_on_pv; 1290 pv_array (si.pvx).restart.rec_in_type = vol_info.restart.rec_in_type; 1291 call syserr (ANNOUNCE, "^a(^a): Starting from volume ^a on ^a.", my_name, si.tape_set, 1292 pv_array (si.pvx).name, pv_array (si.pvx).device); 1293 1294 save_restart_query: 1295 call bce_query (opr_input, "^a(^a): Do you want to replace or rewrite tape# ^a on ^a? ", my_name, 1296 si.tape_set, ltrim (tcb.tape_vol_number, "0"), tcb.name); 1297 if opr_input = "replace" | opr_input = "rep" then do; 1298 call UNLOAD_TAPE; 1299 return; 1300 end; 1301 else if opr_input = "rewrite" | opr_input = "rew" then ; 1302 /* don't have to do anything */ 1303 else do; 1304 call ioa_ ("^a(^a): Invalid input ""^a"". Must be ""replace"" or ""rewrite"".", my_name, si.tape_set, 1305 opr_input); 1306 goto save_restart_query; 1307 end; 1308 end; 1309 call REWIND_TAPE; 1310 return; 1311 end LOCATE_RESTART_POINT; 1312 1313 /**** This routine is for finding the number of the tape that should 1314* be on the current tape device during a restore. It also has the 1315* tape label read in. */ 1316 1317 LOCATE_TAPE: 1318 procedure; 1319 1320 call bce_save_util_$locate_tape_number (srip); 1321 if si.tape_seq_number = 0 | si.tape_seq_number ^= bin (tcb.tape_vol_number, 17) then do; 1322 /* different tape? */ 1323 if tcb.tape_vol_number ^= "" then call NEXT_TAPE_DEVICE; 1324 /* must seq to next device */ 1325 if si.tape_seq_number = 0 then si.tape_seq_number = 1; 1326 /* default to ONE */ 1327 call READ_TAPE_LABEL; 1328 end; 1329 return; 1330 end LOCATE_TAPE; 1331 1332 /**** This routine is used to create an I/O buffer with a page of ZEROs 1333* and fake it out to look as if it came from the tape. This routine 1334* is called when a partition needs to be padded or the VTOC cleared. */ 1335 1336 MAKE_ZERO_DISK_RECORD: 1337 procedure; 1338 1339 call GET_TAPE_BUFFER; 1340 pv.zrec = pv.zrec + 1; /* increment relative record# */ 1341 if pv.zero_vtoc then do; 1342 iob.head.rec_on_pv = pv.zrec; 1343 iob.head.rec_in_type = pv.zrec; 1344 call SETUP_REC_HEADER (PV_VTOC); 1345 end; 1346 else do; 1347 iob.head.rec_on_pv = part.frec + pv.zrec; 1348 iob.head.rec_in_type = pv.zrec; 1349 iob.head.part_name = part.name; 1350 call SETUP_REC_HEADER (PV_PART); 1351 end; 1352 unspec (iob.head.flags) = ""b; 1353 unspec (si.datap -> page) = ""b; /* zero data */ 1354 iob.state = TAPE_READY; /* data ready.. */ 1355 iob.state_time = clock (); 1356 return; 1357 end MAKE_ZERO_DISK_RECORD; 1358 1359 /**** This routine is called after it has been found that a tape is not 1360* mounted on the device. It requests that a tape be mounted and waits 1361* until one is mounted. It will never return unless a tape can be 1362* mounted. */ 1363 1364 MOUNTED_TAPE: 1365 procedure () returns (bit (1)); 1366 1367 mount_message: 1368 if ^tcb.mount_requested then do; 1369 if si.need_info_tape 1370 then call syserr (BEEP, "^a(^a): Please mount the ""Info"" tape on ^a.", my_name, si.tape_set, tcb.name); 1371 else if si.restart 1372 then call syserr (BEEP, "^a(^a): Please mount the ""restart"" tape on ^a.", my_name, si.tape_set, tcb.name) 1373 ; 1374 else call syserr (BEEP, "^a(^a): Please mount tape# ^d on ^a.", my_name, si.tape_set, si.tape_seq_number, 1375 tcb.name); 1376 end; 1377 tcb.mount_requested = NO; /* turn off, for next time. */ 1378 spec_wait: 1379 call SET_IOI_POST_BUF (si.ioi_spec_post_buf, WAITING_SPECIAL); 1380 call WAIT_FOR_SPECIAL (si.ioi_spec_post_buf); 1381 if io_post_buffer.state = WAITING_SPECIAL then do; 1382 if bce_save_util_$skip_tape_device (srip) then return (NO); 1383 /* skip to next */ 1384 end; 1385 if (io_special_status.byte3 & MTH_TO_READY) = "00"b4 then goto spec_wait; 1386 /* wait for the right one */ 1387 if ^TAPE_DEVICE_READY () then goto mount_message; 1388 return (YES); 1389 end MOUNTED_TAPE; 1390 1391 /**** Routine to detach the current tape device, sequence to the next 1392* device, attach it through IOI and have the workspace setup. */ 1393 1394 NEXT_TAPE_DEVICE: 1395 procedure; 1396 1397 next_tape_loop: 1398 if tcb.ioi_index ^= 0 then do; 1399 if tcb.tape_mounted then call UNLOAD_TAPE; 1400 call DETACH_TAPE; 1401 end; 1402 do si.tcbx = si.tcbx + 1 to si.tape_count while (tcb_array (si.tcbx).removed); 1403 end; 1404 if si.tcbx > si.tape_count then do; /* wrap around */ 1405 do si.tcbx = FIRST_TAPE_DEV_IDX to si.tape_count while (tcb_array (si.tcbx).removed); 1406 end; 1407 if si.tcbx > si.tape_count then do; 1408 call syserr (ANNOUNCE, "^a(^a): No usable tape drives left.", my_name, si.tape_set); 1409 call ABORT; 1410 end; 1411 end; 1412 si.tcb_ptr, tcbp = addr (tcb_array (si.tcbx)); 1413 call ATTACH_TAPE; 1414 if ^tcb.attached then goto next_tape_loop; 1415 call bce_save_util_$init_buffers (srip); 1416 tcb.eot = NO; 1417 return; 1418 end NEXT_TAPE_DEVICE; 1419 1420 /**** Routine to find the oldest I/O buffer of a given state. This is 1421* needed because there can be several buffers with the same state and 1422* if they are not handled in a First-In/First-Out fashion then 1423* everything will get very messed up. */ 1424 1425 OLDEST_BUFFER: 1426 procedure (p_bufp, p_buf_state) returns (bit (1)); 1427 dcl oldest_bufp ptr; 1428 dcl oldest_time fixed bin (71); 1429 dcl p_buf_state fixed bin; 1430 dcl p_bufp ptr; 1431 dcl temp_bufp ptr; 1432 1433 oldest_bufp = null (); 1434 oldest_time = clock (); 1435 do temp_bufp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, temp_bufp -> iob.next_bufx) 1436 while (rel (temp_bufp) ^= ""b); 1437 if temp_bufp -> iob.state = p_buf_state 1438 then if temp_bufp -> iob.state_time < oldest_time then do; 1439 oldest_bufp = temp_bufp; 1440 oldest_time = temp_bufp -> iob.state_time; 1441 end; 1442 end; 1443 if oldest_bufp = null () then return (NO); /* none found */ 1444 if p_bufp = oldest_bufp 1445 then return (YES); 1446 else return (NO); 1447 end OLDEST_BUFFER; 1448 1449 /**** Routine to get a free I/O buffer and set it up for doing a disk 1450* read. */ 1451 1452 QUEUE_DISK_READ: 1453 procedure (p_rec_type, p_recordx, p_rec_in_area, p_part); 1454 dcl p_rec_type fixed bin; 1455 dcl p_recordx fixed bin (18); 1456 dcl p_rec_in_area fixed bin (18); 1457 dcl p_part char (4); 1458 1459 call GET_DISK_BUFFER; 1460 iob.head.end_of_part = NO; 1461 if p_rec_type = PV_PART 1462 then if p_rec_in_area = part.nrec - 1 then do; 1463 iob.head.end_of_part = YES; 1464 do vol_info.current_region = lbound (vol_info.region, 1) to vol_info.nregions 1465 while (vol_info.region (vol_info.current_region).part_name ^= p_part); 1466 end; 1467 vol_info.region (vol_info.current_region).ends_on_tape = si.tape_seq_number; 1468 end; 1469 else ; 1470 if p_recordx = si.last_rec then do; 1471 iob.end_of_pv = YES; 1472 do vol_info.current_region = lbound (vol_info.region, 1) to vol_info.nregions 1473 while (vol_info.region (vol_info.current_region).part_name ^= ""); 1474 end; 1475 if vol_info.current_region <= vol_info.nregions 1476 then vol_info.region (vol_info.current_region).ends_on_tape = si.tape_seq_number; 1477 vol_info.current_region = vol_info.nregions; 1478 end; 1479 else iob.end_of_pv = NO; 1480 iob.head.type = p_rec_type; 1481 iob.head.rec_on_pv = p_recordx; 1482 iob.head.rec_in_type = p_rec_in_area; 1483 iob.head.part_name = p_part; 1484 iob.write = OFF; 1485 iob.state = DISK_QUEUED; 1486 iob.state_time = clock (); 1487 return; 1488 end QUEUE_DISK_READ; 1489 1490 /**** Routine to locate an I/O buffer that was just read in from tape and 1491* queue it to be written out to disk if needed. */ 1492 1493 QUEUE_DISK_WRITE: 1494 procedure; 1495 1496 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1497 if iob.state = TAPE_READY 1498 then if OLDEST_BUFFER (iobp, TAPE_READY) then goto found_buf; 1499 end; 1500 return; /* none found */ 1501 found_buf: 1502 if pv.only_part then do; /* restoring only partition data */ 1503 if iob.head.type ^= PV_PART then do; 1504 si.find_start_of_part = YES; 1505 call FREE_BUFFER; 1506 return; 1507 end; 1508 if iob.head.part_name ^= part.name then do; 1509 do partx = pv.part_idx repeat part_array (partx).next_idx 1510 while (partx ^= 0 & iob.head.part_name ^= part_array (partx).name); 1511 end; 1512 if partx = 0 then do; /* not restoring this partition */ 1513 si.find_start_of_part = YES; 1514 call FREE_BUFFER; 1515 return; 1516 end; 1517 si.part_ptr, partp = addr (part_array (partx)); 1518 end; 1519 if part.complete then do; /* shouldn't happen, but ... */ 1520 do partx = pv.part_idx repeat part_array (partx).next_idx 1521 while (partx ^= 0 & part_array (partx).complete); 1522 end; 1523 if partx = 0 1524 then pv.complete = YES; /* all partitions restored. */ 1525 else do; /* else skip this one and find next */ 1526 call ISSUE (FORWARD_SPACE_FILE); 1527 si.find_start_of_part = YES; 1528 end; 1529 call FREE_BUFFER; 1530 return; 1531 end; 1532 iob.head.rec_on_pv = part.frec + iob.head.rec_in_type; 1533 if si.display_pv_record | iob.head.rec_in_type = 0 then do; 1534 call syserr (ANNOUNCE, "^a(^a): Partition ^a on ^a, record ^d, on tape# ^a (^a)", my_name, 1535 si.tape_set, iob.head.part_name, pv.real_name, iob.head.rec_on_pv, 1536 ltrim (tape_label.tape_number, "0"), tcb.name); 1537 si.display_pv_record = NO; 1538 end; 1539 if iob.head.end_of_part then do; 1540 if part.lrec > iob.head.rec_on_pv then do; 1541 si.need_zero_record = YES; /* start making zero pad records */ 1542 pv.zrec = iob.head.rec_in_type; /* remember last relative rec# */ 1543 iob.state = DISK_QUEUED; 1544 iob.state_time = clock (); 1545 iob.write = YES; /* switch to writing */ 1546 iob_hold_ptr = iobp; /* remember current buffer */ 1547 call QUIESCE_TAPE; /* don't need/want any more tape data */ 1548 iobp = iob_hold_ptr; /* revert back to proper buffer */ 1549 return; 1550 end; 1551 else do; 1552 part_complete: 1553 part.complete = YES; 1554 do partx = pv.part_idx repeat part_array (partx).next_idx 1555 while (partx ^= 0 & part_array (partx).complete); 1556 end; 1557 if partx = 0 1558 then pv.complete = YES; /* all partitions restored. */ 1559 else si.find_start_of_part = YES; /* find next part */ 1560 end; 1561 end; 1562 else if iob.head.rec_on_pv = part.lrec then goto part_complete; 1563 /* end of part on PV */ 1564 end; 1565 else do; /* restoring PV & possibly parts */ 1566 if iob.head.type ^= PV_VTOC & iob.head.type ^= PV_RECORD & iob.head.type ^= PV_PART then do; 1567 call FREE_BUFFER; 1568 return; 1569 end; 1570 if iob.head.pvid ^= si.pvid_being_restored then do; 1571 call FREE_BUFFER; 1572 pv.complete = YES; 1573 return; 1574 end; 1575 if iob.head.end_of_pv then pv.complete = YES; 1576 else if iob.head.rec_on_pv < pv.restart.rec_on_pv then do; 1577 call FREE_BUFFER; 1578 return; 1579 end; 1580 if iob.head.type = PV_PART then do; 1581 if pv.part_requested then do; 1582 if iob.head.part_name = part.name then goto restore_this_part; 1583 do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 1584 si.part_ptr, partp = addr (part_array (partx)); 1585 if part.name = iob.head.part_name then goto restore_this_part; 1586 end; 1587 end; 1588 if ^iob.head.end_of_part then do; /* waste of time if at the end of the area */ 1589 call QUIESCE_TAPE; /* discard any pending tape i/o */ 1590 call ISSUE (FORWARD_SPACE_FILE); /* skip this part */ 1591 call ISSUE (BACKSPACE); /* backup before EOF */ 1592 call ISSUE (BACKSPACE); /* backup before last rec in */ 1593 /* part to check flags on next read */ 1594 end; 1595 else call FREE_BUFFER; 1596 return; 1597 restore_this_part: 1598 if si.display_pv_record | iob.head.rec_in_type = 0 then do; 1599 call syserr (ANNOUNCE, "^a(^a):^3xPartition ^a on ^a, record ^d, on tape# ^a (^a)", my_name, 1600 si.tape_set, iob.head.part_name, pv.name, iob.head.rec_on_pv, 1601 ltrim (tape_label.tape_number, "0"), tcb.name); 1602 si.display_pv_record = NO; 1603 end; 1604 if iob.head.end_of_part then do; 1605 part.complete = YES; 1606 if si.pv_record_detected then do; 1607 do partx = pv.part_idx repeat part_array (partx).next_idx 1608 while (partx ^= 0 & part_array (partx).complete); 1609 end; 1610 if partx = 0 then pv.complete = YES; 1611 /* all done. */ 1612 end; 1613 end; 1614 end; 1615 else if iob.head.type = PV_RECORD & ^si.pv_record_detected then si.pv_record_detected = YES; 1616 if si.display_pv_record & ^pv.zero_vtoc then do; 1617 call syserr (ANNOUNCE, "^a(^a): Volume ^a, record ^d, on tape# ^d (^a)", my_name, si.tape_set, 1618 pv.name, iob.head.rec_on_pv, ltrim (tape_label.tape_number, "0"), tcb.name); 1619 si.display_pv_record = NO; 1620 end; 1621 else if iob.head.type = PV_VTOC & pv.zero_vtoc 1622 then if iob.head.rec_on_pv >= vol_preamble.vtoc_size then do; 1623 pv.zero_vtoc = NO; 1624 si.need_zero_record = NO; 1625 end; 1626 else ; 1627 end; 1628 iob.state = DISK_QUEUED; 1629 iob.state_time = clock (); 1630 iob.write = YES; /* switch to writing */ 1631 return; 1632 end QUEUE_DISK_WRITE; 1633 1634 /**** Routine to get a free I/O buffer and set it up for doing a tape 1635* read. */ 1636 1637 QUEUE_TAPE_READ: 1638 procedure; 1639 1640 call GET_TAPE_BUFFER; 1641 iob.write = OFF; 1642 iob.state = TAPE_QUEUED; 1643 iob.state_time = clock (); 1644 return; 1645 end QUEUE_TAPE_READ; 1646 1647 /**** Routine to locate an I/O buffer that was just read in from disk and 1648* queue it to be written out to tape. */ 1649 1650 QUEUE_TAPE_WRITE: 1651 procedure; 1652 1653 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1654 if iob.state = DISK_READY 1655 then if OLDEST_BUFFER (iobp, DISK_READY) then do; 1656 iob.state = TAPE_QUEUED; 1657 iob.state_time = clock (); 1658 iob.write = YES; /* switch to writing */ 1659 call SETUP_REC_HEADER ((iob.head.type)); 1660 return; 1661 end; 1662 end; 1663 return; 1664 end QUEUE_TAPE_WRITE; 1665 1666 /**** Routine to scan the I/O buffers for all tape related buffers and 1667* free the ones that are queued and wait for a busy tape buffer before 1668* freeing it. */ 1669 1670 QUIESCE_TAPE: 1671 procedure; 1672 dcl quiescent bit (1); 1673 1674 quiescent = NO; 1675 do while (^quiescent); 1676 quiescent = YES; /* until proven otherwise */ 1677 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1678 if iob.state = TAPE_QUEUED then do; /* Not needed */ 1679 call FREE_BUFFER; 1680 quiescent = NO; 1681 end; 1682 else if iob.state = TAPE_BUSY then do; 1683 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1684 call CHECK_STATUS; 1685 call FREE_BUFFER; 1686 quiescent = NO; 1687 end; 1688 else if iob.state = TAPE_READY then do; 1689 call FREE_BUFFER; 1690 quiescent = NO; 1691 end; 1692 end; 1693 end; 1694 return; 1695 end QUIESCE_TAPE; 1696 1697 /**** Routine that take an I/O buffer that has been queued for a disk read 1698* and asks that it now take place. 1699* 1700* NOTE: This routine is duplicated in bce_save_util_.pl1 to save having 1701* to push a stack frame. */ 1702 1703 READ_DISK: 1704 procedure; 1705 1706 iob.state = DISK_BUSY; 1707 iob.state_time = clock (); 1708 call bootload_disk_io$queue_read ((pv.pvtx), (iob.head.rec_on_pv), 1, ptr (tcb.wksp, iob.datax), 1709 iob.disk_post_buf, code); 1710 return; 1711 end READ_DISK; 1712 1713 /**** Routine that take an I/O buffer that has been queued for a tape read 1714* and asks that it now take place. */ 1715 1716 READ_RECORD: 1717 procedure; 1718 1719 idcwp = addr (iob.idcw_word); 1720 unspec (idcw) = ""b; 1721 idcw.command = READ_BINARY; 1722 idcw.device = bit (bin (tcb.device, 6), 6); /* fill in device# */ 1723 idcw.code = IDCW; 1724 idcw.chan_cmd = AUTO_READ_RETRY; 1725 1726 if tcb.statusx ^= si.ioi_statusx then do; 1727 si.ioi_statusx = tcb.statusx; 1728 tcb.status_idx = 0; 1729 call ioi_set$status (tcb.ioi_index, si.ioi_statusx, (tcb.status_count), code); 1730 if code ^= 0 then do; 1731 call syserr$error_code (BEEP, code, "^a: Setting status index for ^a.^66t***^/^-", my_name, tcb.name); 1732 call ABORT; 1733 end; 1734 end; 1735 iob.state = TAPE_BUSY; 1736 iob.state_time = clock (); 1737 if ^tcb.density_set then do; /* chk if density chaining needed */ 1738 stat_ws.idcw = DEFAULT_IDCW; 1739 idcwp = addr (stat_ws.idcw); 1740 idcw.command = tcb.density_command; 1741 idcw.device = bit (bin (tcb.device, 6), 6); /* fill in device# */ 1742 idcw.control = CONTINUE_NO_MARKER; 1743 tdcwp = addr (stat_ws.tdcw); 1744 unspec (tdcw) = ""b; 1745 tdcw.address = rel (addr (iob.idcw_word)); 1746 tdcw.type = TDCW; 1747 tdcw.rel = ON; 1748 end; 1749 call TAPE_CONNECT (bin (rel (idcwp), 18)); 1750 return; 1751 end READ_RECORD; 1752 1753 /**** Routine to read the tape label from the current tape device. It 1754* requires two reads to get the entire tape label in. */ 1755 1756 READ_TAPE_LABEL: 1757 procedure; 1758 dcl rtx fixed bin; 1759 1760 check_tape_state: 1761 if ^TAPE_DEVICE_READY () 1762 then if ^MOUNTED_TAPE () then do; 1763 if display_info_tape then call ABORT; 1764 call NEXT_TAPE_DEVICE; 1765 goto check_tape_state; 1766 end; 1767 else ; 1768 tcb.density_set = NO; 1769 density_idx = hbound (density_commands, 1) + 1; 1770 next_den_idx: 1771 density_idx = density_idx - 1; 1772 if density_idx < 1 then do; 1773 call syserr (ANNOUNCE, "^a(^a): Unable to set density on ^a.^66t***", my_name, si.tape_set, tcb.name); 1774 if display_info_tape then call ABORT; 1775 call NEXT_TAPE_DEVICE; 1776 goto check_tape_state; 1777 end; 1778 call REWIND_TAPE; 1779 tcb.density_command = density_commands (density_idx); 1780 tcb.density = current_density (density_idx); 1781 if (tcb.density & tcb.densities_available) = ""b then goto next_den_idx; 1782 /* no sense in trying this one */ 1783 call GET_TAPE_BUFFER; 1784 do rtx = 0 to divide (size (tape_label) + PAGE_SIZE - 1, PAGE_SIZE, 17) - 1; 1785 /* read label records */ 1786 call READ_RECORD; /* read tape record */ 1787 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1788 call CHECK_STATUS; 1789 if bad_density_status then do; /* Bad density, try another */ 1790 call FREE_BUFFER; 1791 goto next_den_idx; 1792 end; 1793 else tcb.density_set = YES; 1794 if ^VALID_REC_HEADER (TAPE_LABEL) then do; 1795 call syserr (ANNOUNCE, "^a(^a): Tape on ^a does not contain a valid label.^66t***", my_name, 1796 si.tape_set, tcb.name); 1797 call FREE_BUFFER; 1798 call UNLOAD_TAPE; 1799 goto check_tape_state; 1800 end; 1801 addrel (tape_labelp, rtx * PAGE_SIZE) -> page = si.datap -> page; 1802 /* copy tape record */ 1803 end; 1804 if tape_label.version ^= TAPE_LABEL_VERSION_1 & ^display_info_tape then do; 1805 call syserr (ANNOUNCE, "^a(^a): Tape on ^a does not contain a supported tape label version.^66t***", 1806 my_name, si.tape_set, tcb.name); 1807 call FREE_BUFFER; 1808 call UNLOAD_TAPE; 1809 goto check_tape_state; 1810 end; 1811 call date_time_ (tape_label.save_time, date_time_string); 1812 if ^display_info_tape 1813 then call syserr (ANNOUNCE, "^a(^a): ^[""Info"" tape^s^;Tape# ^a^] on ^a, created ^a", my_name, si.tape_set, 1814 (tape_label.tape_number = "Info"), ltrim (tape_label.tape_number, "0"), tcb.name, date_time_string); 1815 if tape_label.tape_set ^= si.tape_set & ^display_info_tape then do; 1816 call syserr (ANNOUNCE, "^a(^a): Error, tape on ^a is part of the ""^a"" set.^66t***", my_name, si.tape_set, 1817 tcb.name, tape_label.tape_set); 1818 call FREE_BUFFER; 1819 call UNLOAD_TAPE; 1820 goto check_tape_state; 1821 end; 1822 tcb.tape_vol_number = tape_label.tape_number; 1823 if si.need_info_tape then do; 1824 if tape_label.tape_number ^= "Info" then do; /* wrong tape? */ 1825 call bce_query$yes_no (yes_no, 1826 "^a(^a): Expected ""Info"" tape on ^a.^/^-Is the ""Info"" tape available? ", my_name, 1827 si.tape_set, tcb.name); 1828 if yes_no then do; /* yes, have it mounted */ 1829 call FREE_BUFFER; 1830 call UNLOAD_TAPE; 1831 goto check_tape_state; 1832 end; 1833 end; 1834 si.tape_set_uid = iob.head.tape_set_uid; /* remember UID */ 1835 info_tape_label = tape_label; /* copy over info */ 1836 si.need_info_tape = NO; 1837 call FREE_BUFFER; 1838 if display_info_tape then return; /* done enough */ 1839 call NEXT_TAPE_DEVICE; /* seq to next tape device */ 1840 end; 1841 else if (restoring | ^si.restart) & iob.head.tape_set_uid ^= si.tape_set_uid then do; 1842 call syserr (ANNOUNCE, "^a(^a): Tape on ^a is not part of this set.^66t***", my_name, si.tape_set, 1843 tcb.name); 1844 call FREE_BUFFER; 1845 call UNLOAD_TAPE; 1846 goto check_tape_state; 1847 end; 1848 else if ^restoring & si.restart then do; /* restarting save, remember UID */ 1849 si.tape_set_uid = iob.head.tape_set_uid; 1850 call FREE_BUFFER; 1851 end; 1852 else if restoring & si.tape_seq_number ^= 0 & bin (tape_label.tape_number, 17) ^= si.tape_seq_number then do; 1853 call syserr (ANNOUNCE, "^a(^a): Incorrect tape number. Expected tape# ^d.^66t***", my_name, si.tape_set, 1854 si.tape_seq_number); 1855 call FREE_BUFFER; 1856 call UNLOAD_TAPE; 1857 goto check_tape_state; 1858 end; 1859 else call FREE_BUFFER; 1860 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (tape_label.vol_array_idx)); 1861 if restoring then call bce_save_util_$premount_check (srip); 1862 return; 1863 end READ_TAPE_LABEL; 1864 1865 /**** Routine that is used during a save to define the type of disk record 1866* of the current record index. When saving all of a volume, the partition 1867* check must be done by looking in the volume preamble. */ 1868 1869 RECORD_TYPE: 1870 procedure (p_recordx) returns (fixed bin); 1871 dcl p_recordx fixed bin (18); 1872 1873 if p_recordx < vol_preamble.vtoc_size then return (PV_VTOC); 1874 if ^pv.part_requested then return (PV_RECORD); 1875 if part.pv_name = pv.name 1876 then /* for speed check current part */ 1877 if part.frec <= p_recordx & p_recordx <= part.lrec then return (PV_PART); 1878 do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 1879 /* scan all partitions */ 1880 si.part_ptr, partp = addr (part_array (partx)); 1881 if part.frec <= p_recordx & p_recordx <= part.lrec then return (PV_PART); 1882 end; 1883 return (PV_RECORD); 1884 end RECORD_TYPE; 1885 1886 /**** Routine that is used during a restore when a one-record sequence 1887* error occurs. This will back up the tape two records and attempt 1888* to read the missing record. */ 1889 1890 RELOCATE_RECORD: 1891 procedure; 1892 1893 idcwp = addr (stat_ws.retry_dcw (1)); 1894 unspec (idcw) = ""b; 1895 idcw.command = BACKSPACE; 1896 idcw.device = bit (bin (tcb.device, 6), 6); 1897 idcw.code = IDCW; 1898 idcw.control = CONTINUE_NO_MARKER; 1899 idcw.chan_cmd = NON_DATA_XFER; 1900 idcw.count = TWO_RECORDS; /* backup 2 records */ 1901 tdcwp = addr (stat_ws.retry_dcw (2)); 1902 unspec (tdcw) = ""b; 1903 tdcw.address = bit (bin (rel (addr (iob.idcw_word)), 18)); 1904 tdcw.type = TDCW; 1905 tdcw.rel = ON; 1906 1907 call TAPE_CONNECT (bin (rel (addr (stat_ws.retry_dcw (1))), 18)); 1908 status_wait: 1909 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 1910 call CHECK_STATUS; 1911 if end_of_file_status | (si.tape_rec_count > iob.head.rec_on_tape) then do; 1912 call READ_RECORD; 1913 goto status_wait; 1914 end; 1915 if si.tape_rec_count = iob.head.rec_on_tape 1916 then call syserr (ANNOUNCE, "^a(^a): Relocated tape sequence # ^d.^66t***", my_name, si.tape_set, 1917 iob.head.rec_on_tape); 1918 return; 1919 end RELOCATE_RECORD; 1920 1921 /**** Main routine that is called during a restore to process the current 1922* physical volume. It has been setup to allow it to be called 1923* repeatedly, so that the caller can sequence from SET to SET. 1924* Depending on the current volume's restore state defines what section 1925* of code gets executed. 1926* 1927* The first phase locates the volumes preamble record from the save 1928* tape and does some partition validation checks if needed. 1929* 1930* The second main phase is used to move the selected data from the 1931* tape to the disk until complete. */ 1932 1933 RESTORE_PV: 1934 procedure; 1935 1936 goto restore_state (pv.state); 1937 1938 restore_state (1): 1939 si.pvid_being_restored = ""b; 1940 si.display_pv_record = NO; 1941 si.pv_record_detected = NO; 1942 call LOCATE_TAPE; 1943 do volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size 1944 while (info_tape_label.vol_array (volx).pvname ^= pv.name); 1945 end; 1946 si.vol_info_ptr, vol_infop = addr (info_tape_label.vol_array (volx)); 1947 if si.pvid_being_restored = ""b then si.pvid_being_restored = vol_info.pvid; 1948 call LOCATE_RECORD (PV_PREAMBLE); 1949 if pv.part_requested 1950 then do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 1951 /* see if part defined */ 1952 si.part_ptr, partp = addr (part_array (partx)); 1953 do i = lbound (vol_preamble.parts, 1) to vol_preamble.nparts 1954 while (vol_preamble.parts (i).part ^= part.name); 1955 end; 1956 if i > vol_preamble.nparts then do; /* part not found */ 1957 if part.name ^= ALL_PARTS 1958 then call syserr (ANNOUNCE, 1959 "^a(^a): Partition ^a was not defined when ^a was saved.^66t***^/^-Removing from partition list.", 1960 my_name, si.tape_set, part.name, pv.name); 1961 part.removed, part.complete = YES; 1962 end; 1963 else do; /* copy part info from save tape */ 1964 part.tfrec = vol_preamble.parts (i).frec; 1965 part.tlrec = vol_preamble.parts (i).frec + vol_preamble.parts (i).nrec - 1; 1966 part.tnrec = vol_preamble.parts (i).nrec; 1967 end; 1968 end; 1969 1970 force_tape_run = YES; /* don't buffer up tape I/O */ 1971 si.need_zero_record = NO; 1972 if pv.only_part 1973 then si.find_start_of_part = YES; 1974 else do; 1975 si.find_start_of_part = NO; 1976 if pv.restart.rec_on_pv < vol_preamble.vtoc_size 1977 & vol_preamble.gcos (1) /* saved value of si.last_used_vtoc_record */ < vol_preamble.vtoc_size 1978 then do; 1979 pv.zero_vtoc = YES; 1980 si.need_zero_record = YES; 1981 pv.zrec = vol_preamble.gcos (1); 1982 call syserr (ANNOUNCE, "^a(^a): Clearing unused VTOC region (records ^d - ^d) on ^a.", my_name, 1983 si.tape_set, pv.zrec + 1, vol_preamble.vtoc_size, pv.name); 1984 end; 1985 end; 1986 pv.state = 2; 1987 return; 1988 1989 restore_state (2): 1990 if ^pv.complete then do; 1991 if BUFFER_AVAILABLE () then do; 1992 if si.find_start_of_part then do; 1993 call FLUSH_BUFFERS; /* flush any pending I/O */ 1994 call LOCATE_RECORD (PV_PART); 1995 si.find_start_of_part = NO; 1996 si.need_zero_record = NO; 1997 end; 1998 else if si.need_zero_record then call MAKE_ZERO_DISK_RECORD; 1999 else call QUEUE_TAPE_READ; /* queue tape read */ 2000 end; 2001 call TAPE_RUN; 2002 call QUEUE_DISK_WRITE; 2003 call DISK_RUN; 2004 end; 2005 2006 if pv.complete then do; /* will be set by QUEUE_DISK_WRITE */ 2007 call FLUSH_BUFFERS; 2008 if pv.all_parts then call ZERO_PARTS_NOT_RESTORED; 2009 call syserr (ANNOUNCE, "^a(^a): Restore of volume ^a on ^a complete.", my_name, si.tape_set, pv.real_name, 2010 pv.device); 2011 end; 2012 return; 2013 end RESTORE_PV; 2014 2015 /**** Routine to rewind the tape on the current device. */ 2016 2017 REWIND_TAPE: 2018 procedure; 2019 2020 call SET_IOI_POST_BUF (si.ioi_spec_post_buf, WAITING_SPECIAL); 2021 call ISSUE (REWIND); 2022 call WAIT_FOR_SPECIAL (si.ioi_spec_post_buf); 2023 if tcb.write_tape then tcb.density_set = NO; /* force denisty to be reset during save */ 2024 return; 2025 end REWIND_TAPE; 2026 2027 /**** Main routine that is called during a save to process the current 2028* physical volume. It has been setup to allow it to be called 2029* repeatedly, so that the caller can sequence from SET to SET. 2030* Depending on the current volume's save state defines what section of 2031* code gets executed. 2032* 2033* The first phase sets up the volume preamble, reads in the vol_map 2034* and sets up the internal bit_map. 2035* 2036* The second main phase is used to move the selected data from the 2037* disk to the tape until complete. It also initiates the calls to 2038* have the tape label and volume preamble written when needed. */ 2039 2040 SAVE_PV: 2041 procedure; 2042 2043 goto save_state (pv.state); 2044 2045 save_state (1): 2046 do volx = lbound (tape_label.vol_array, 1) to tape_label.vol_array_size 2047 while (tape_label.vol_array (volx).pvname ^= pv.name); 2048 end; 2049 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (volx)); 2050 bit_map = ""b; /* Turn OFF all bits */ 2051 bit_map = ^bit_map; /* Now turn them ON */ 2052 call GET_DISK_BUFFER; 2053 iob.head.rec_on_pv = LABEL_ADDR; 2054 call READ_DISK; /* read PV label */ 2055 do while (^DISK_DATA_READY ()); 2056 end; 2057 vol_preamblep -> page = si.datap -> page; 2058 call FREE_BUFFER; 2059 if pv.all 2060 then si.last_used_vtoc_record = vol_preamble.vtoc_size; 2061 else si.last_used_vtoc_record = bce_save_util_$last_vtoc_used (srip); 2062 vol_preamble.gcos (1) = si.last_used_vtoc_record; /* save in an unused spot for later use by restore */ 2063 call GET_DISK_BUFFER; 2064 do i = 0 to divide (size (vol_map) + PAGE_SIZE - 1, PAGE_SIZE, 17) - 1; 2065 /* read vol_map records */ 2066 iob.head.rec_on_pv = VOLMAP_ADDR + i; 2067 call READ_DISK; 2068 do while (^DISK_DATA_READY ()); 2069 end; 2070 addrel (si.vol_map_ptr, i * PAGE_SIZE) -> page = si.datap -> page; 2071 end; 2072 vol_mapp = si.vol_map_ptr; 2073 call FREE_BUFFER; 2074 if pv.all then do; /* save all of pv */ 2075 substr (bit_map, 1, vol_preamble.vol_size) = OFF; 2076 do i = lbound (vol_preamble.parts, 1) to vol_preamble.nparts; 2077 /* only save requested partitions */ 2078 if pv.part_requested 2079 then do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 2080 if part_array (partx).name = vol_preamble.parts (i).part then goto this_part_ok; 2081 end; 2082 substr (bit_map, vol_preamble.parts (i).frec + 1, vol_preamble.parts (i).nrec) = 2083 ^(substr (bit_map, vol_preamble.parts (i).frec + 1, vol_preamble.parts (i).nrec)); 2084 /* turn bits back ON */ 2085 this_part_ok: 2086 end; 2087 end; 2088 else do; 2089 if ^pv.only_part then do; 2090 substr (bit_map, 1, si.last_used_vtoc_record + 1) = OFF; 2091 /* save all records upto the last used VTOC record */ 2092 do i = lbound (vol_map.bit_map, 1) to vol_map.bit_map_n_words; 2093 /* copy/pack vol_map.bit_map */ 2094 vol_map_bits_to_move = min (vol_map.n_rec - ((i - 1) * VTOCES_PER_WORD), VTOCES_PER_WORD); 2095 substr (bit_map, (i - 1) * VTOCES_PER_WORD + vol_map.base_add + 1, vol_map_bits_to_move) = 2096 substr (vol_map.bit_map (i), 2, vol_map_bits_to_move); 2097 end; 2098 end; 2099 if pv.part_requested 2100 then do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 2101 si.part_ptr, partp = addr (part_array (partx)); 2102 substr (bit_map, part.frec + 1, part.nrec) = OFF; 2103 end; 2104 end; 2105 2106 si.first_rec = find_bit_$first_off (substr (bit_map, 1, vol_preamble.vol_size)) - 1; 2107 si.last_rec = find_bit_$last_off (substr (bit_map, 1, vol_preamble.vol_size)) - 1; 2108 if si.first_rec < 0 | si.last_rec < 0 2109 then call syserr (CRASH, "bce_save: Internal bit map for ^a (^a) contains no in use pages.", pv.name, 2110 si.tape_set); 2111 if pv.restart.rec_on_pv > si.first_rec then do; /* save was restarted */ 2112 if pv.restart.rec_on_pv > si.last_rec then do; 2113 pv.complete = YES; 2114 return; 2115 end; 2116 si.first_rec = pv.restart.rec_on_pv; 2117 si.current_rec_in_area = pv.restart.rec_in_type - 1; 2118 /* save loop will increment */ 2119 si.old_rec_type = RECORD_TYPE (pv.restart.rec_on_pv); 2120 if si.old_rec_type = PV_PART then si.old_part_name = part.name; 2121 end; 2122 else do; 2123 si.old_rec_type = -1; 2124 si.current_rec_in_area = -1; 2125 end; 2126 2127 force_tape_run = NO; 2128 si.written_preamble = NO; 2129 si.write_eof = NO; 2130 si.previous_rec, si.recordx = si.first_rec - 1; 2131 pv.state = 2; 2132 return; 2133 2134 save_state (2): 2135 if ^pv.complete then do; 2136 if ^si.written_tape_label then call WRITE_TAPE_LABEL; 2137 if BUFFER_AVAILABLE () then do; /* free buffer */ 2138 si.recordx = 2139 find_bit_$first_off (substr (bit_map, si.recordx + 2, (si.last_rec + 1) - (si.recordx + 1))) 2140 + si.recordx; 2141 if si.recordx > si.previous_rec then do;/* only true when OFF bit found */ 2142 si.previous_rec, vol_info.restart.rec_on_pv = si.recordx; 2143 si.rec_type = RECORD_TYPE (si.recordx); 2144 if si.old_rec_type ^= si.rec_type then do; 2145 /* switched disk areas */ 2146 si.old_rec_type = si.rec_type; 2147 if si.rec_type = PV_PART then si.old_part_name = part.name; 2148 si.current_rec_in_area = 0; 2149 if si.rec_type ^= PV_RECORD then do; 2150 /* locate current region */ 2151 if si.rec_type = PV_VTOC 2152 then do vol_info.current_region = lbound (vol_info.region, 1) 2153 to vol_info.nregions 2154 while (vol_info.region (vol_info.current_region).part_name ^= ""); 2155 end; 2156 else if si.rec_type = PV_PART 2157 then do vol_info.current_region = lbound (vol_info.region, 1) 2158 to vol_info.nregions 2159 while (vol_info.region (vol_info.current_region).part_name 2160 ^= si.old_part_name); 2161 end; 2162 vol_info.region (vol_info.current_region).begins_on_tape = si.tape_seq_number; 2163 end; 2164 end; 2165 else if si.rec_type = PV_PART & (si.old_part_name ^= part.name) then do; 2166 /* check for part switching */ 2167 si.old_part_name = part.name; 2168 si.current_rec_in_area = 0; 2169 do vol_info.current_region = lbound (vol_info.region, 1) to vol_info.nregions 2170 while (vol_info.region (vol_info.current_region).part_name ^= si.old_part_name); 2171 end; 2172 vol_info.region (vol_info.current_region).begins_on_tape = si.tape_seq_number; 2173 end; 2174 else si.current_rec_in_area = si.current_rec_in_area + 1; 2175 call QUEUE_DISK_READ (si.rec_type, si.recordx, si.current_rec_in_area, si.old_part_name); 2176 /* queue read */ 2177 force_tape_run = NO; /* buffer tape I/O */ 2178 end; 2179 else force_tape_run = YES; /* at end of PV, force writing of queued buffers */ 2180 end; 2181 if ^si.written_preamble then call WRITE_PREAMBLE; 2182 call DISK_RUN; 2183 call QUEUE_TAPE_WRITE; 2184 call TAPE_RUN; 2185 end; 2186 2187 if pv.complete 2188 then /* will be set by TAPE_RUN */ 2189 call FLUSH_BUFFERS; /* write out all outstanding buffers */ 2190 return; 2191 end SAVE_PV; 2192 2193 /**** Routine to setup the main pointers to the external data segments and 2194* get a temp segment for holding the tape label, volume preamble, 2195* vol_map and internal bit_map during a save or tape label, volume 2196* preamble and "Info" tape label during a restore. The program uses 2197* 9 pages, the layout of the temp segment is as follows (in octal): 2198* 2199* * -- SAVE -- -- RESTORE -- 2200* * start length page contents start length page contents 2201* * ----- ------ ---- -------- ----- ------ ---- -------- 2202* * 0 4000 1-2 tape_label 0 4000 1-2 tape_label 2203* * 4000 2000 3 vol_preamble 4000 2000 3 vol_preamble 2204* * 6000 6000 4-6 vol_map 6000 4000 4-5 info_tape_label 2205* * 14000 6000 7-9 bit_map 2206**/ 2207 2208 SETUP: 2209 procedure; 2210 2211 pvtp = addr (pvt$); 2212 if pvtp = null () then do; 2213 call syserr$error_code (BEEP, error_table_$seg_not_found, "^a: pvt.", my_name); 2214 call ABORT; 2215 end; 2216 sri.pvt_array_ptr, pvt_arrayp = addr (pvt.array); 2217 tedp = addr (tape_error_data$); 2218 if tedp = null () then do; 2219 call syserr$error_code (BEEP, error_table_$seg_not_found, "^a: tape_error_data.", my_name); 2220 call ABORT; 2221 end; 2222 2223 disk_post_area_ptr = addr (bootload_disk_post_seg$); 2224 if disk_post_area_ptr = null () then do; 2225 call syserr$error_code (BEEP, error_table_$seg_not_found, "^a: bootload_disk_post_seg.", my_name); 2226 call ABORT; 2227 end; 2228 disk_post_area.number = sri.set_count * MAX_BUFFERS; 2229 /* one for each IOB per set */ 2230 unspec (disk_post_area.posted (*)) = ""b; 2231 2232 ioi_post_area_ptr = addr (bce_ioi_post_seg$); 2233 if ioi_post_area_ptr = null () then do; 2234 call syserr$error_code (BEEP, error_table_$seg_not_found, "^a: bce_ioi_post_seg.", my_name); 2235 call ABORT; 2236 end; 2237 unspec (ioi_post_area) = ""b; 2238 ioi_post_area.number = 2 * sri.set_count; /* need two per set */ 2239 do setx = lbound (set_info, 1) to sri.set_count; 2240 sri.set_index = setx; 2241 si_ptr = addr (set_info (setx)); 2242 si.first_disk_post_buf = ((setx - 1) * MAX_BUFFERS) + 1; 2243 /* first one for this set */ 2244 si.ioi_term_post_buf = (setx * 2) - 1; /* one for terminates */ 2245 si.ioi_spec_post_buf = (setx * 2); /* one for specials */ 2246 call get_temp_segment_ (my_name, tape_labelp, code); 2247 si.tape_label_ptr = tape_labelp; 2248 if code ^= 0 then do; 2249 call syserr$error_code (BEEP, code, "^a: Getting tape label temp segment.", my_name); 2250 call ABORT; 2251 end; 2252 si.vol_preamble_ptr, vol_preamblep = addrel (tape_labelp, size (tape_label)); 2253 if restoring then do; 2254 si.info_tape_label_ptr, info_tape_labelp = addrel (vol_preamblep, size (label)); 2255 si.vol_map_ptr = null (); 2256 si.bit_map_ptr = null (); 2257 end; 2258 else do; 2259 si.vol_map_ptr = addrel (vol_preamblep, size (label)); 2260 si.bit_map_ptr = addrel (si.vol_map_ptr, size (vol_map)); 2261 si.info_tape_label_ptr, info_tape_labelp = null (); 2262 end; 2263 end; 2264 return; 2265 end SETUP; 2266 2267 /**** Routine to setup the tape record header in the current I/O buffer. */ 2268 2269 SETUP_REC_HEADER: 2270 procedure (p_header_type); 2271 dcl p_header_type fixed bin parm; 2272 2273 iob.head.c1 = C1_PATTERN; 2274 iob.head.type = p_header_type; 2275 if p_header_type = TAPE_EOR & si.complete then iob.head.end_of_set = YES; 2276 if ^si.need_zero_record then si.tape_rec_count = si.tape_rec_count + 1; 2277 iob.head.rec_on_tape = si.tape_rec_count; 2278 if p_header_type = TAPE_LABEL | p_header_type = TAPE_EOR then do; 2279 iob.head.pvid = ""b; 2280 iob.head.rec_on_pv = 0; 2281 iob.head.part_name = ""; 2282 end; 2283 else do; 2284 iob.head.pvid = vol_preamble.pvid; 2285 if p_header_type ^= PV_PART then iob.head.part_name = ""; 2286 end; 2287 iob.head.tape_set_uid = si.tape_set_uid; /* set unique ID */ 2288 return; 2289 end SETUP_REC_HEADER; 2290 2291 /**** Routine that is called during the normal program startup or when 2292* restarting a SET while others are active. It initiates calls to 2293* locate a restart point if restarting, has the tape label read if 2294* doing a restore and has each of the volume labels read from this 2295* SET. */ 2296 2297 SETUP_SET: 2298 procedure; 2299 2300 si.tape_seq_number = 0; 2301 if si.need_info_tape then do; 2302 call READ_TAPE_LABEL; /* read "Info" tape */ 2303 call bce_save_util_$sort_pv_list (srip); 2304 end; 2305 if si.restart then do; 2306 call LOCATE_RESTART_POINT; /* find starting point */ 2307 if si.complete then return; /* none left to restart */ 2308 end; 2309 2310 if ^restoring then do; /* doing save */ 2311 if ^si.restart then do; 2312 unspec (tape_label) = ""b; 2313 tape_label.version = TAPE_LABEL_VERSION_1; 2314 tape_label.title = TAPE_LABEL_TITLE; 2315 tape_label.tape_set = si.tape_set; 2316 fb71 = clock (); 2317 si.tape_set_uid = substr (unspec (fb71), 36, 36); 2318 end; 2319 tape_label.save_time = 0; 2320 tape_label.tapes_in_set = 0; 2321 si.written_tape_label = NO; 2322 end; 2323 2324 do si.pvx = lbound (pv_array, 1) to si.pv_count; /* read each PV label */ 2325 call CHECK_ABORT; /* user wanta quit? */ 2326 si.pv_ptr, pvp = addr (pv_array (si.pvx)); 2327 if ^pv.complete then do; 2328 if restoring & pv.all_parts then call bce_save_util_$setup_all_parts (srip); 2329 if ^pv.removed then do; 2330 pv.state = 1; 2331 call bce_save_util_$read_pv_label (srip); 2332 end; 2333 end; 2334 end; 2335 return; 2336 end SETUP_SET; 2337 2338 /**** This procedure is responsible for finding out what densities and 2339* speed the desired device runs. This is done by requesting a device 2340* survey of all the devices in the string, then locating the info for 2341* the desired device. If the write flag is ON, then the requested 2342* density must be one of the available densities. On non-fips 2343* subsystems it is necessary to attach the tape controller and issue 2344* the survey to it. */ 2345 2346 SET_DEVICE_OPTIONS: 2347 procedure; 2348 dcl controller_attached bit (1); 2349 dcl tcb_to_survey_ptr ptr; 2350 2351 tcb.surveyed = NO; 2352 tcb_to_survey_ptr = tcbp; /* remember in case of switch */ 2353 if ^tcb.fips then do; /* must do the survey to the Controller */ 2354 tcb_array (0) = tcb; 2355 si.tcb_ptr, tcbp = addr (tcb_array (0)); 2356 tcb.name = substr (tcb.name, 1, 5) || "00"; 2357 tcb.device = 0; 2358 call bce_save_util_$ioi_attach (srip); 2359 controller_attached = YES; 2360 end; 2361 else controller_attached = NO; 2362 unspec (survey_ws) = ""b; /* clean slate */ 2363 survey_ws.idcw = SURVEY_IDCW; /* Set up survey_devices tape command. */ 2364 idcwp = addr (survey_ws.idcw); 2365 idcw.device = bit (bin (tcb.device, 6), 6); 2366 2367 dcwp = addr (survey_ws.dcw); 2368 dcw.address = rel (addr (survey_ws.data)); /* Put survey_device info in workspace data. */ 2369 dcw.tally = bit (bin (DEV_SURVEY_DATA_SIZE, 12), 12); 2370 /* Should return 8 words at most. */ 2371 2372 if bin (rel (addr (survey_ws.stat)), 18) ^= si.ioi_statusx then do; 2373 si.ioi_statusx = bin (rel (addr (survey_ws.stat)), 18); 2374 call ioi_set$status (tcb.ioi_index, si.ioi_statusx, 1, code); 2375 if code ^= 0 then do; 2376 call syserr$error_code (BEEP, code, "^a: Setting status index for ^a.^66t***^/^-", my_name, tcb.name); 2377 return; 2378 end; 2379 end; 2380 2381 call TAPE_CONNECT (bin (rel (addr (survey_ws.idcw)), 18)); 2382 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 2383 call CHECK_STATUS; 2384 2385 call bce_save_util_$scan_survey_data (srip, tcb_to_survey_ptr); 2386 if controller_attached then do; 2387 call ioi_assignment$unassign (tcb.ioi_index, code); 2388 if code ^= 0 then do; 2389 call syserr$error_code (BEEP, code, "^a: Unassigning ^a.^66t***^/^-", my_name, tcb.name); 2390 call ABORT; 2391 end; 2392 si.tcb_ptr, tcbp = addr (tcb_array (si.tcbx)); 2393 yes_no = TAPE_DEVICE_USABLE (); /* issue an IO so that IOI will wire the device workspace */ 2394 controller_attached = NO; 2395 si.ioi_statusx = -1; 2396 end; 2397 return; 2398 end SET_DEVICE_OPTIONS; 2399 2400 /**** Routine to setup an IOI post buffer with a given state and event 2401* channel. */ 2402 2403 SET_IOI_POST_BUF: 2404 procedure (buf_num, buf_state); 2405 dcl buf_num fixed bin parm; 2406 dcl buf_state fixed bin parm; 2407 2408 io_post_buffer_ptr = addr (ioi_post_area.buffer (buf_num)); 2409 unspec (io_post_buffer) = ""b; 2410 io_post_buffer.ev_chn = tcb.ioi_ev_chn; 2411 io_post_buffer.state = buf_state; 2412 return; 2413 end SET_IOI_POST_BUF; 2414 2415 /**** Routine to set the automatic pointers to the values saved in 2416* the per-set ("si") structure. */ 2417 2418 SET_PTRS: 2419 procedure; 2420 2421 sri.set_index = setx; 2422 si_ptr = addr (set_info (setx)); 2423 info_tape_labelp = si.info_tape_label_ptr; 2424 part_arrayp = addr (part_area (setx, 1)); 2425 partp = si.part_ptr; 2426 pv_arrayp = addr (pv_area (setx, 1)); 2427 pvp = si.pv_ptr; 2428 tape_labelp = si.tape_label_ptr; 2429 tcb_arrayp = addr (tcb_area (setx, 0)); 2430 tcbp = si.tcb_ptr; 2431 vol_preamblep = si.vol_preamble_ptr; 2432 vol_infop = si.vol_info_ptr; 2433 return; 2434 end SET_PTRS; 2435 2436 /**** This procedure sets up an entry in the bce_ioi_post_seg and requests 2437* IOI to issue the connect to the tape. */ 2438 2439 TAPE_CONNECT: 2440 procedure (idcw_offset); 2441 dcl idcw_offset fixed bin (18); 2442 2443 call SET_IOI_POST_BUF (si.ioi_term_post_buf, IO_OUTSTANDING); 2444 call ioi_connect (tcb.ioi_index, idcw_offset, code); 2445 if code ^= 0 2446 then call syserr$error_code (CRASH, code, "bce_save: Error issuing tape connect for ^a (^a).", tcb.name, 2447 si.tape_set); 2448 if ^tcb.retry_in_progress then si.last_idcwx = bit (idcw_offset, 18); 2449 return; 2450 end TAPE_CONNECT; 2451 2452 /**** Routine to verify that a tape is mounted on the current device. */ 2453 2454 TAPE_DEVICE_READY: 2455 procedure () returns (bit (1)); 2456 2457 if ^TAPE_DEVICE_USABLE () then return (NO); 2458 if io_status_word.major = DEV_READY then do; 2459 tcb.tape_mounted = YES; 2460 tcb.write_protected = ((io_status_word.sub & DEV_WRITE_PROTECT_MASK) = DEV_WRITE_PROTECTED); 2461 /* write protect bit on? */ 2462 return (YES); 2463 end; 2464 return (NO); 2465 end TAPE_DEVICE_READY; 2466 2467 /**** Routine that is used to verify that the current tape device is 2468* capable of accepting I/O request. This is done by requesting the 2469* current status of the device. Normal error recovery is disabled to 2470* allow this routine a chance to handle it. */ 2471 2472 TAPE_DEVICE_USABLE: 2473 procedure () returns (bit (1)); 2474 2475 supress_error_recovery = YES; 2476 call ISSUE (REQUEST_STATUS); 2477 supress_error_recovery = NO; 2478 if istat.level ^= TERMINATE_INTERRUPT then return (NO); 2479 if io_status_word.power then return (NO); 2480 if (substr (istat.iom_stat, 1, 36) & STATUS_MASK) = ""b then return (YES); 2481 if io_status_word.major = DEV_ATTENTION then do; 2482 if io_status_word.sub = DEV_STANDBY 2483 then return (YES); 2484 else return (NO); 2485 end; 2486 return (NO); 2487 end TAPE_DEVICE_USABLE; 2488 2489 /**** Routine that is called to handle unrecoverable tape I/O errors. The 2490* operator is given several possible selections to chose from. */ 2491 2492 TAPE_ERROR_RECOVERY: 2493 procedure; 2494 dcl retry_allowed bit (1); 2495 2496 retry_allowed = (^tcb.write_tape & tape_error_interp.max_retries > 0) 2497 /* retryable errors or restore */ 2498 | (tcb.write_tape & ^tcb.density_set & ^si.written_tape_label); 2499 /* first record of tape label on save */ 2500 opr_query: 2501 call bce_query (opr_input, "^a: Action: ", my_name); 2502 if opr_input = "abort" then call ABORT; 2503 else if opr_input = "retry" | opr_input = "r" then do; 2504 if ^retry_allowed then do; 2505 call ioa_ ("^a(^a): This error is non-retryable..", my_name, si.tape_set); 2506 goto opr_query; 2507 end; 2508 return; /* CHECK_STATUS will retry the error */ 2509 end; 2510 else if opr_input = "skip" | opr_input = "s" then do; 2511 if tcb.write_tape | ^tape_error_interp.backspace then do; 2512 call ioa_ ("^a(^a): skip only valid for data alerts during a restore..", my_name, si.tape_set); 2513 goto opr_query; 2514 end; 2515 call FREE_BUFFER; /* give back the buffer */ 2516 goto NEXT_SET; /* back to main loop */ 2517 end; 2518 else if opr_input = "stop_set" | opr_input = "stop" then do; 2519 call syserr (ANNOUNCE, "^a: Stopping ^a of set ""^a"".", my_name, my_name, si.tape_set); 2520 si.complete = YES; /* abort by marking complete */ 2521 goto NEXT_SET; 2522 end; 2523 else if opr_input = "remove_device_from_set" | opr_input = "remove" then do; 2524 if si.usable_tape_devices = 1 then do; 2525 call ioa_ ("^a(^a): Unable to remove ^a. This is the last device.", my_name, si.tape_set, tcb.name); 2526 goto opr_query; 2527 end; 2528 goto REMOVE_N_RESTART; 2529 end; 2530 else if opr_input = "restart_set" | opr_input = "restart" | opr_input = "rt" then goto RESTART; 2531 /* non-local */ 2532 else if opr_input = "help" | opr_input = "?" then do; 2533 call ioa_ ("Valid inputs are: 2534 abort^21t- Abort entire ^a.", my_name); 2535 if retry_allowed then call ioa_ ("retry, r^21t- Go back through retry loop again."); 2536 if ^tcb.write_tape & tape_error_interp.backspace 2537 then call ioa_ ("skip, s^21t- Skip this record and try next."); 2538 call ioa_ ("stop_set, stop^21t- Abort ^a of just this set. 2539 restart_set, restart, rt^/^21t- Restart ^a, using this device. 2540 remove_device_from_set, remove 2541 ^21t- Remove tape device, restart ^a using next device.", my_name, my_name, my_name); 2542 goto opr_query; 2543 end; 2544 else do; 2545 call ioa_ ("Invalid input ""^a"". Type ""help"" or ""?"" for valid inputs.", opr_input); 2546 goto opr_query; 2547 end; 2548 end TAPE_ERROR_RECOVERY; 2549 2550 /**** Routine that scans the I/O buffers either looking for buffers that 2551* were busy and now complete or if none are busy looking for ones that 2552* are queued so that it can request that they be initiated. This 2553* routine also manages the end of tape processing. */ 2554 2555 TAPE_RUN: 2556 procedure; 2557 2558 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 2559 if iob.state = TAPE_BUSY 2560 then if OLDEST_BUFFER (iobp, TAPE_BUSY) then do; 2561 if ioi_post_area.buffer (si.ioi_term_post_buf).state ^= IO_COMPLETE then return; 2562 call CHECK_STATUS; 2563 if iob.write then do; 2564 call FREE_OR_REQUEUE_TAPE_IO; 2565 if tcb.eot then do; /* skip to next tape */ 2566 call FLUSH_BUFFERS; /* write out all outstanding buffers */ 2567 call WRITE_TAPE_EOR; 2568 call NEXT_TAPE_DEVICE; 2569 si.written_tape_label = NO; 2570 si.written_preamble = NO; 2571 return; 2572 end; 2573 end; 2574 else do; 2575 if end_of_file_status then do;/* hit EOF */ 2576 if tcb.one_eof then do; 2577 call syserr (ANNOUNCE, 2578 "^a(^a): End of Information without detecting TAPE_EOR record.^66t***", 2579 my_name, si.tape_set); 2580 goto end_of_tape; 2581 end; 2582 tcb.one_eof = YES; 2583 call READ_RECORD; 2584 return; 2585 end; 2586 tcb.one_eof = NO; 2587 if tcb.eot then do; 2588 end_of_tape: 2589 call FLUSH_BUFFERS; 2590 call NEXT_TAPE_DEVICE; 2591 if si.next_tape_number > si.tape_seq_number 2592 then si.tape_seq_number = si.next_tape_number; 2593 else si.tape_seq_number = si.tape_seq_number + 1; 2594 call READ_TAPE_LABEL; 2595 call LOCATE_RECORD (PV_PREAMBLE); 2596 call GET_TAPE_BUFFER; 2597 call READ_RECORD; 2598 return; 2599 end; 2600 if ^VALID_REC_HEADER (0) | iob.head.tape_set_uid ^= si.tape_set_uid then do; 2601 call syserr (ANNOUNCE, "^a(^a): Abnormal tape termination of tape# ^a on ^a.^66t***", 2602 my_name, si.tape_set, ltrim (tcb.tape_vol_number, "0"), tcb.name); 2603 goto end_of_tape; 2604 end; 2605 si.tape_rec_count = si.tape_rec_count + 1; 2606 if si.tape_rec_count ^= iob.head.rec_on_tape then do; 2607 call syserr (ANNOUNCE, 2608 "^a(^a): Record sequence error on tape# ^a (^a),^66t***^/^-should be record # ^d, was record # ^d.", 2609 my_name, si.tape_set, ltrim (tcb.tape_vol_number, "0"), tcb.name, 2610 si.tape_rec_count, iob.head.rec_on_tape); 2611 if si.tape_rec_count + 1 = iob.head.rec_on_tape then call RELOCATE_RECORD; 2612 if si.tape_rec_count ^= iob.head.rec_on_tape then do; 2613 call syserr (ANNOUNCE, "^a(^a): Adjusting tape sequence # to ^d.^66t***", my_name, 2614 si.tape_set, iob.head.rec_on_tape); 2615 si.tape_rec_count = iob.head.rec_on_tape; 2616 /* readjust.. */ 2617 end; 2618 end; 2619 if iob.head.type = TAPE_EOR then goto end_of_tape; 2620 iob.state = TAPE_READY; 2621 iob.state_time = clock (); 2622 end; 2623 goto end_tape_busy_loop; /* no need to loop any longer */ 2624 end; 2625 end; 2626 end_tape_busy_loop: 2627 if ^force_tape_run 2628 then if BUFFER_COUNT (TAPE_QUEUED) < QUEUE_THRESHOLD then return; 2629 /* if buffering, don't continue until N buffers are queued */ 2630 2631 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 2632 if iob.state = TAPE_QUEUED 2633 then if OLDEST_BUFFER (iobp, TAPE_QUEUED) then do; 2634 if iob.write then do; 2635 if iob.head.rec_in_type = 0 | si.write_eof then do; 2636 /* switched areas */ 2637 call ISSUE (WRITE_EOF); 2638 si.write_eof = NO; 2639 end; 2640 call WRITE_RECORD; 2641 end; 2642 else call READ_RECORD; 2643 return; 2644 end; 2645 end; 2646 return; 2647 end TAPE_RUN; 2648 2649 /**** Routine to unload the tape from the current device. If any errors 2650* occured while the tape was mounted it displays this info to the 2651* operator. */ 2652 2653 UNLOAD_TAPE: 2654 procedure; 2655 2656 if ^display_info_tape 2657 then call syserr (ANNOUNCE, 2658 "^a(^a): Unloading ^[^[""Info"" tape^s^;tape# ^a^] from ^;^2s^]^a^[, ^d records^[ (^d errors)^;^s^]^;^s^[ (^d errors)^;^s^]^]", 2659 my_name, si.tape_set, (tcb.tape_vol_number ^= ""), (tcb.tape_vol_number = "Info"), 2660 ltrim (tcb.tape_vol_number, "0"), tcb.name, (tcb.write_tape & (si.tape_rec_count > 0)), 2661 si.tape_rec_count, (tcb.retry_count > 0), tcb.retry_count); 2662 call SET_IOI_POST_BUF (si.ioi_spec_post_buf, WAITING_SPECIAL); 2663 /* setup to handle special, but don't wait */ 2664 supress_error_recovery = YES; /* don't worry about errors */ 2665 call ISSUE (UNLOAD); 2666 supress_error_recovery = NO; 2667 tcb.tape_mounted = NO; 2668 tcb.density_set = NO; 2669 tcb.tape_vol_number = ""; 2670 return; 2671 end UNLOAD_TAPE; 2672 2673 /**** Routine to validate each record header when it is read from the 2674* tape. It does this by checking the the header constant and possibly 2675* checking the record type if requested. */ 2676 2677 VALID_REC_HEADER: 2678 procedure (p_header_type) returns (bit (1)); 2679 dcl p_header_type fixed bin parm; 2680 2681 if iob.head.c1 ^= C1_PATTERN then return (BAD); 2682 if p_header_type ^= 0 2683 then if iob.head.type ^= p_header_type then return (BAD); 2684 return (GOOD); 2685 end VALID_REC_HEADER; 2686 2687 /**** Routine to wait for a special interrupt from a tape device for upto 2688* two minutes. After this time it gives up and the caller is required 2689* to check to see if the special arrived or not. */ 2690 2691 WAIT_FOR_SPECIAL: 2692 procedure (buf_num); 2693 dcl TWO_MINUTES fixed bin (71) int static options (constant) init (120000000); 2694 dcl buf_num fixed bin parm; 2695 dcl time_to_wait fixed bin (71); 2696 2697 time_to_wait = clock () + TWO_MINUTES; 2698 io_post_buffer_ptr = addr (ioi_post_area.buffer (buf_num)); 2699 do while (io_post_buffer.state ^= SPECIAL_ARRIVED); 2700 if clock () > time_to_wait then do; /* time-out */ 2701 if sri.debug then call syserr (ANNOUNCE, "DEBUG: Timeout waiting for special interrupt."); 2702 return; 2703 end; 2704 call CHECK_ABORT; /* operator interrupt? */ 2705 end; 2706 io_special_status_ptr = addr (addr (io_post_buffer.message) -> imess.status); 2707 if sri.debug 2708 then call syserr (ANNOUNCE, "DEBUG: special interrupt (^12.3b) for ^a.", 2709 unspec (addr (io_post_buffer.message) -> imess.status), tcb.name); 2710 return; 2711 end WAIT_FOR_SPECIAL; 2712 2713 /**** Routine to wait for tape I/O to complete. It will loop forever if 2714* one isn't returned. */ 2715 2716 WAIT_FOR_STATUS: 2717 procedure (buf_num); 2718 dcl buf_num fixed bin parm; 2719 2720 io_post_buffer_ptr = addr (ioi_post_area.buffer (buf_num)); 2721 do while (io_post_buffer.state ^= IO_COMPLETE); 2722 call CHECK_ABORT; /* operator interrupt? */ 2723 end; 2724 return; 2725 end WAIT_FOR_STATUS; 2726 2727 /**** Routine that take an I/O buffer that has been queued for a disk 2728* write and asks that it now take place. */ 2729 2730 WRITE_DISK: 2731 procedure; 2732 2733 iob.state = DISK_BUSY; 2734 iob.state_time = clock (); 2735 call bootload_disk_io$queue_write ((pv.pvtx), (iob.head.rec_on_pv), 1, ptr (tcb.wksp, iob.datax), 2736 iob.disk_post_buf, code); 2737 return; 2738 end WRITE_DISK; 2739 2740 /**** Routine to write the current volume preamble from the temp segment 2741* to tape. This is called before each volume is saved. */ 2742 2743 WRITE_PREAMBLE: 2744 procedure; 2745 2746 call ISSUE (WRITE_EOF); 2747 call syserr (ANNOUNCE, "^a(^a): Volume ^a, record ^d, on tape# ^a (^a)", my_name, si.tape_set, vol_info.pvname, 2748 vol_info.restart.rec_on_pv, ltrim (tape_label.tape_number, "0"), tcb.name); 2749 call GET_TAPE_BUFFER; 2750 iob.write = YES; 2751 si.datap -> page = vol_preamblep -> page; /* copy preamble */ 2752 iob.head.type, iob.head.rec_on_pv = 0; 2753 iob.head.rec_in_type = 0; 2754 call SETUP_REC_HEADER (PV_PREAMBLE); 2755 call WRITE_RECORD; /* write data to tape */ 2756 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 2757 call CHECK_STATUS; 2758 tcb.records_written = tcb.records_written + 1; 2759 call FREE_BUFFER; 2760 si.written_preamble = YES; 2761 si.write_eof = YES; /* force writting of EOF on next I/O */ 2762 return; 2763 end WRITE_PREAMBLE; 2764 2765 /**** Routine that take an I/O buffer that has been queued for a tape 2766* write and asks that it now take place. */ 2767 2768 WRITE_RECORD: 2769 procedure; 2770 2771 iob_hold_ptr = iobp; 2772 if iob.head.type = PV_PART 2773 then if iob.head.rec_in_type = 0 2774 then call syserr (ANNOUNCE, "^a(^a):^3xPartition ^a, record ^d, on tape# ^a (^a)", my_name, si.tape_set, 2775 iob.head.part_name, iob.head.rec_on_pv, ltrim (tape_label.tape_number, "0"), tcb.name); 2776 setup_idcw: 2777 idcwp = addr (iob.idcw_word); 2778 unspec (idcw) = ""b; 2779 idcw.command = WRITE_BINARY; 2780 idcw.device = bit (bin (tcb.device, 6), 6); /* fill in device# */ 2781 idcw.code = IDCW; 2782 2783 if tcb.statusx ^= si.ioi_statusx then do; 2784 si.ioi_statusx = tcb.statusx; 2785 tcb.status_idx = 0; 2786 call ioi_set$status (tcb.ioi_index, si.ioi_statusx, (tcb.status_count), code); 2787 if code ^= 0 then do; 2788 call syserr$error_code (BEEP, code, "^a: Setting status index for ^a.^66t***^/^-", my_name, tcb.name); 2789 call ABORT; 2790 end; 2791 end; 2792 iob.state = TAPE_BUSY; 2793 iob.state_time = clock (); 2794 if iob.head.type = TAPE_LABEL | iob.head.type = TAPE_EOR | iob.head.type = PV_PREAMBLE | iob.head.end_of_part 2795 | iob.head.end_of_pv | tcb.eot 2796 then goto do_tape_connect; /* don't attempt further threading if exception exists */ 2797 prev_iobp = iobp; 2798 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 2799 if iob.state = TAPE_QUEUED 2800 then if OLDEST_BUFFER (iobp, TAPE_QUEUED) then do; 2801 if iob.head.rec_in_type = 0 then goto do_tape_connect; 2802 /* if switched areas then save for after write EOF */ 2803 /* else thread this iob to previous iob */ 2804 prev_iobp -> iob.next_statex = bin (rel (iobp), 18); 2805 idcwp = addr (prev_iobp -> iob.idcw_word); 2806 idcw.control = CONTINUE_NO_MARKER; 2807 tdcwp = addr (prev_iobp -> iob.tdcw_word); 2808 unspec (tdcw) = ""b; 2809 tdcw.address = rel (addr (iob.idcw_word)); 2810 tdcw.type = TDCW; 2811 tdcw.rel = ON; 2812 goto setup_idcw; /* setup the rest of the iob */ 2813 end; 2814 else ; 2815 end; 2816 do_tape_connect: 2817 iobp = iob_hold_ptr; 2818 idcwp = addr (iob.idcw_word); 2819 if ^tcb.density_set then do; /* chk if density chaining needed */ 2820 stat_ws.idcw = DEFAULT_IDCW; 2821 idcwp = addr (stat_ws.idcw); 2822 idcw.command = tcb.density_command; 2823 idcw.device = bit (bin (tcb.device, 6), 6); /* fill in device# */ 2824 idcw.control = CONTINUE_NO_MARKER; 2825 tdcwp = addr (stat_ws.tdcw); 2826 unspec (tdcw) = ""b; 2827 tdcw.address = rel (addr (iob.idcw_word)); 2828 tdcw.type = TDCW; 2829 tdcw.rel = ON; 2830 end; 2831 call TAPE_CONNECT (bin (rel (idcwp), 18)); 2832 return; 2833 end WRITE_RECORD; 2834 2835 /**** Routine that sets up the end of reel record and has it written to 2836* tape. */ 2837 2838 WRITE_TAPE_EOR: 2839 procedure; 2840 2841 call ISSUE (WRITE_EOF); 2842 call GET_TAPE_BUFFER; 2843 iob.write = YES; 2844 si.datap -> page (*) = OFF; /* zero data */ 2845 iob.head.type, iob.head.rec_on_pv = 0; 2846 iob.head.rec_in_type = 0; 2847 call SETUP_REC_HEADER (TAPE_EOR); 2848 call WRITE_RECORD; /* write data to tape */ 2849 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 2850 call CHECK_STATUS; 2851 tcb.records_written = tcb.records_written + 1; 2852 call FREE_BUFFER; 2853 call ISSUE (WRITE_EOF); 2854 call ISSUE (WRITE_EOF); 2855 call ISSUE (WRITE_EOF); /* one extra just in case! */ 2856 return; 2857 end WRITE_TAPE_EOR; 2858 2859 /**** Routine that is responsible for writting the tape label info from 2860* the temp segment to tape. */ 2861 2862 WRITE_TAPE_LABEL: 2863 procedure; 2864 dcl p9999 pic "9999" based; 2865 dcl tlx fixed bin; 2866 2867 if si.need_info_tape then do; /* writing "Info" tape */ 2868 tape_label.tape_number = "Info"; 2869 tape_label.tapes_in_set = si.tape_seq_number; 2870 end; 2871 else do; 2872 si.tape_seq_number = si.tape_seq_number + 1; /* increment tape# */ 2873 tape_label.tape_number = convert (p9999, si.tape_seq_number); 2874 vol_info.restart.rec_on_pv = 2875 find_bit_$first_off (substr (bit_map, si.recordx + 2, (si.last_rec + 1) - (si.recordx + 1))) 2876 + si.recordx; /* will be next PV record written */ 2877 vol_info.restart.rec_in_type = si.current_rec_in_area + 1; 2878 end; 2879 tape_label.vol_array_idx = si.pvx; 2880 check_tape_state: 2881 if ^TAPE_DEVICE_READY () 2882 then if ^MOUNTED_TAPE () then do; 2883 call NEXT_TAPE_DEVICE; 2884 goto check_tape_state; 2885 end; 2886 else ; 2887 if tcb.write_protected then do; 2888 call UNLOAD_TAPE; 2889 call syserr (BEEP, "^a(^a): Remount tape# ^a WITH write ring on ^a.", my_name, si.tape_set, 2890 ltrim (tape_label.tape_number, "0"), tcb.name); 2891 tcb.mount_requested = YES; /* already informed opr. */ 2892 goto check_tape_state; 2893 end; 2894 call REWIND_TAPE; 2895 tape_label.save_time = clock (); /* mark creation time */ 2896 call GET_TAPE_BUFFER; 2897 iob.write = YES; 2898 iob.head.type, iob.head.rec_on_pv = 0; 2899 do tlx = 0 to divide (size (tape_label) + PAGE_SIZE - 1, PAGE_SIZE, 17) - 1; 2900 /* write label records */ 2901 si.datap -> page = addrel (tape_labelp, tlx * PAGE_SIZE) -> page; 2902 /* copy data */ 2903 iob.head.rec_in_type = tlx; 2904 call SETUP_REC_HEADER (TAPE_LABEL); 2905 call WRITE_RECORD; /* write data to tape */ 2906 call WAIT_FOR_STATUS (si.ioi_term_post_buf); 2907 call CHECK_STATUS; 2908 if bad_density_status then do; 2909 call syserr (ANNOUNCE, "^a(^a): Unable to set density on ^a.^66t***", my_name, si.tape_set, tcb.name); 2910 call FREE_BUFFER; 2911 call NEXT_TAPE_DEVICE; 2912 goto check_tape_state; 2913 end; 2914 else tcb.density_set = YES; 2915 tcb.records_written = tcb.records_written + 1; 2916 end; 2917 call FREE_BUFFER; 2918 si.written_tape_label = YES; 2919 tcb.tape_vol_number = tape_label.tape_number; 2920 return; 2921 end WRITE_TAPE_LABEL; 2922 2923 /**** This routine is used to zero all the partitions that were not restored 2924* from the save tapes, when "part -all" is used. The partitions "alt", 2925* "bce" and "hc" are excluded from the zeroing process. */ 2926 2927 ZERO_PARTS_NOT_RESTORED: 2928 procedure; 2929 2930 call GET_DISK_BUFFER; 2931 iob.head.rec_on_pv = LABEL_ADDR; 2932 call READ_DISK; /* read PV label */ 2933 do while (^DISK_DATA_READY ()); 2934 end; 2935 vol_preamblep -> page = si.datap -> page; 2936 call FREE_BUFFER; 2937 do i = lbound (vol_preamble.parts, 1) to vol_preamble.nparts; 2938 if vol_preamble.parts (i).part = "alt" 2939 | (vol_preamble.pv_name = "rpv" & vol_preamble.parts (i).part = "bce") 2940 | vol_preamble.parts (i).part = "hc" 2941 then goto skip_zeroing; 2942 do partx = pv.part_idx repeat part_array (partx).next_idx while (partx ^= 0); 2943 if part_array (partx).name = vol_preamble.parts (i).part & ^part_array (partx).removed 2944 then goto skip_zeroing; 2945 end; 2946 call syserr (ANNOUNCE, "^a(^a):^3xZeroing partition ^a on ^a, record ^d.", my_name, si.tape_set, 2947 vol_preamble.parts (i).part, pv.name, vol_preamble.parts (i).frec); 2948 call GET_DISK_BUFFER; 2949 unspec (si.datap -> page) = ""b; /* zero data */ 2950 do j = 0 to vol_preamble.parts (i).nrec - 1; 2951 iob.head.rec_on_pv = vol_preamble.parts (i).frec + j; 2952 iob.head.rec_in_type = j; 2953 iob.head.part_name = vol_preamble.parts (i).part; 2954 call WRITE_DISK; 2955 do while (^DISK_DATA_READY ()); 2956 end; 2957 end; 2958 call FREE_BUFFER; 2959 skip_zeroing: 2960 end; 2961 return; 2962 end ZERO_PARTS_NOT_RESTORED; 2963 2964 /**** Automatic */ 2965 2966 dcl argx fixed bin; 2967 dcl arg_count fixed bin; 2968 dcl arg_lth fixed bin (21); 2969 dcl arg_ptr ptr; 2970 dcl bad_density_status bit (1); 2971 dcl 1 save_restore_info aligned like sri; 2972 dcl 1 cf_array (32) aligned like cf_info; 2973 dcl code fixed bin (35); 2974 dcl date_time_string char (24); 2975 dcl density_idx fixed bin; 2976 dcl display_info_tape bit (1); 2977 dcl done bit (1); 2978 dcl end_of_file_status bit (1); 2979 dcl fb71 fixed bin (71); 2980 dcl force_tape_run bit (1); 2981 dcl i fixed bin; 2982 dcl iob_hold_ptr ptr; 2983 dcl j fixed bin; 2984 dcl my_name char (8); 2985 dcl opr_input char (128); /* area to hold operator input */ 2986 dcl partx fixed bin; 2987 dcl 1 part_area (4, 64) aligned like part; 2988 dcl prev_iobp ptr; 2989 dcl 1 pv_area (4, 63) aligned like pv; 2990 dcl restoring bit (1); 2991 dcl setx fixed bin (17); /* current set_info index */ 2992 dcl 1 set_info (4) aligned like si; /* per set info array */ 2993 dcl supress_error_recovery 2994 bit (1); 2995 dcl 1 tcb_area (4, 0:16) aligned like tcb; 2996 dcl tape_drive_string char (80) varying; 2997 dcl tape_retries fixed bin; 2998 dcl yes_no bit (1); 2999 dcl volx fixed bin; 3000 dcl vol_map_bits_to_move 3001 fixed bin; 3002 3003 /**** Based variables */ 3004 3005 dcl arg char (arg_lth) based (arg_ptr); 3006 3007 dcl bit_map bit (110592) unal based (si.bit_map_ptr); 3008 /* 3 pages, recs 0 - 327777 */ 3009 3010 dcl 1 cf_info aligned based, 3011 2 name char (32), /* name of file */ 3012 2 set fixed bin, /* SET file is in */ 3013 2 length fixed bin (21), /* char length of file */ 3014 2 ptr ptr; /* pointer to file */ 3015 3016 dcl debug_based_block (4) bit (36) based; 3017 dcl page (0:1023) bit (36) aligned based; 3018 3019 /**** Constants & Builtins */ 3020 3021 dcl ALL_PARTS char (4) int static options (constant) init ("-all"); 3022 dcl ANY_DENSITY bit (5) int static options (constant) init ("11111"b); 3023 dcl AUTO_READ_RETRY bit (6) int static options (constant) init ("30"b3); 3024 dcl BAD bit (1) aligned int static options (constant) init ("0"b); 3025 dcl C1_PATTERN bit (36) int static options (constant) init ("542553413076"b3); 3026 dcl CONTINUE_NO_MARKER bit (2) int static options (constant) init ("10"b); 3027 dcl DEFAULT_IDCW bit (36) int static options (constant) init ("000000700201"b3); 3028 dcl DEV_ATTENTION bit (4) int static options (constant) init ("0010"b); 3029 dcl DEV_READY bit (4) int static options (constant) init ("0000"b); 3030 dcl DEV_STANDBY bit (6) int static options (constant) init ("04"b3); 3031 dcl DEV_SURVEY_DATA_SIZE 3032 fixed bin int static options (constant) init (8); 3033 dcl DEV_WRITE_PROTECTED bit (6) int static options (constant) init ("01"b3); 3034 dcl DEV_WRITE_PROTECT_MASK 3035 bit (6) int static options (constant) init ("01"b3); 3036 dcl FAULT_INTERRUPT fixed bin int static options (constant) init (1); 3037 dcl FIRST_READ_RETRY_CMD 3038 fixed bin int static options (constant) init (25); 3039 dcl FIRST_TAPE_DEV_IDX fixed bin int static options (constant) init (1); 3040 dcl GOOD bit (1) aligned int static options (constant) init ("1"b); 3041 dcl IDCW bit (3) int static options (constant) init ("7"b3); 3042 dcl LAST_READ_RETRY_CMD bit (6) int static options (constant) init ("37"b3); 3043 dcl MAX_BUFFERS fixed bin int static options (constant) init (6); 3044 dcl MAX_READ_RETRY fixed bin int static options (constant) init (7); 3045 dcl MTH_TO_READY bit (8) int static options (constant) init ("10"b4); 3046 dcl NO bit (1) aligned int static options (constant) init ("0"b); 3047 dcl NO_CONTINUE_NO_MARKER 3048 bit (2) int static options (constant) init ("00"b); 3049 dcl NON_DATA_XFER bit (6) int static options (constant) init ("02"b3); 3050 dcl OFF bit (1) aligned int static options (constant) init ("0"b); 3051 dcl ON bit (1) aligned int static options (constant) init ("1"b); 3052 dcl ONE_RECORD bit (6) int static options (constant) init ("01"b3); 3053 dcl ONE_WEEK fixed bin (71) int static options (constant) init (604800000000); 3054 dcl QUEUE_THRESHOLD fixed bin int static options (constant) init (3); 3055 dcl SPECIAL_INTERRUPT fixed bin int static options (constant) init (7); 3056 dcl STATUS_MASK bit (36) int static options (constant) init ("370000770000"b3); 3057 dcl SURVEY_IDCW bit (36) int static options (constant) init ("570000700000"b3); 3058 dcl TDCW bit (2) unaligned int static options (constant) init ("10"b); 3059 dcl TERMINATE_INTERRUPT fixed bin int static options (constant) init (3); 3060 dcl TWO_RECORDS bit (6) int static options (constant) init ("02"b3); 3061 dcl VTOCES_PER_WORD fixed bin (17) int static options (constant) init (32); 3062 dcl YES bit (1) aligned int static options (constant) init ("1"b); 3063 dcl density_commands (5) bit (6) int static options (constant) init ("64"b3, "61"b3, "60"b3, "65"b3, "41"b3); 3064 dcl current_density (5) bit (5) int static options (constant) init ("10000"b, 3065 /* 200 bpi */ 3066 "01000"b, /* 556 bpi */ 3067 "00100"b, /* 800 bpi */ 3068 "00010"b, /* 1600 bpi */ 3069 "00001"b); /* 6250 bpi */ 3070 3071 /**** IDCW.command Constants */ 3072 3073 dcl BACKSPACE bit (6) int static options (constant) init ("46"b3); 3074 dcl ERASE bit (6) int static options (constant) init ("54"b3); 3075 dcl FORWARD_SPACE_FILE bit (6) int static options (constant) init ("45"b3); 3076 dcl READ_BINARY bit (6) int static options (constant) init ("05"b3); 3077 dcl REQUEST_STATUS bit (6) int static options (constant) init ("00"b3); 3078 dcl REWIND bit (6) int static options (constant) init ("70"b3); 3079 dcl WRITE_BINARY bit (6) int static options (constant) init ("15"b3); 3080 dcl WRITE_EOF bit (6) int static options (constant) init ("55"b3); 3081 dcl UNLOAD bit (6) int static options (constant) init ("72"b3); 3082 3083 /**** Buffer State Constants */ 3084 3085 dcl FREE fixed bin int static options (constant) init (0); 3086 dcl DISK_SUSPEND fixed bin int static options (constant) init (1); 3087 dcl DISK_QUEUED fixed bin int static options (constant) init (2); 3088 dcl DISK_BUSY fixed bin int static options (constant) init (3); 3089 dcl DISK_READY fixed bin int static options (constant) init (4); 3090 dcl TAPE_SUSPEND fixed bin int static options (constant) init (5); 3091 dcl TAPE_QUEUED fixed bin int static options (constant) init (6); 3092 dcl TAPE_BUSY fixed bin int static options (constant) init (7); 3093 dcl TAPE_READY fixed bin int static options (constant) init (8); 3094 3095 dcl (addr, addrel, after, bin, bit, clock, convert, divide, hbound, lbound, length, ltrim, min, mod, null, ptr, rel, 3096 size, substr, unspec) 3097 builtin; 3098 3099 dcl cleanup condition; 3100 dcl sub_request_abort_ condition; 3101 3102 /**** External variables & entries */ 3103 3104 dcl error_table_$not_done 3105 fixed bin (35) ext static; 3106 dcl error_table_$seg_not_found 3107 fixed bin (35) ext static; 3108 dcl wired_hardcore_data$abort_request 3109 bit (1) aligned external; 3110 3111 dcl bce_query entry options (variable); 3112 dcl bce_query$yes_no entry options (variable); 3113 dcl bce_save_util_$display_info_tape 3114 entry (ptr); 3115 dcl bce_save_util_$init_buffers 3116 entry (ptr); 3117 dcl bce_save_util_$ioi_attach 3118 entry (ptr); 3119 dcl bce_save_util_$is_fips_device 3120 entry (ptr) returns (bit (1)); 3121 dcl bce_save_util_$last_vtoc_used 3122 entry (ptr) returns (fixed bin (18)); 3123 dcl bce_save_util_$locate_tape_number 3124 entry (ptr); 3125 dcl bce_save_util_$premount_check 3126 entry (ptr); 3127 dcl bce_save_util_$read_pv_label 3128 entry (ptr); 3129 dcl bce_save_util_$scan_control_file 3130 entry (ptr); 3131 dcl bce_save_util_$scan_survey_data 3132 entry (ptr, ptr); 3133 dcl bce_save_util_$setup_all_parts 3134 entry (ptr); 3135 dcl bce_save_util_$skip_tape_device 3136 entry (ptr) returns (bit (1)); 3137 dcl bce_save_util_$sort_pv_list 3138 entry (ptr); 3139 dcl bce_save_util_$thread_partition_list 3140 entry (ptr); 3141 dcl bootload_disk_io$queue_read 3142 entry (fixed bin, fixed bin (18), fixed bin, ptr, fixed bin, fixed bin (35)); 3143 dcl bootload_disk_io$queue_write 3144 entry (fixed bin, fixed bin (18), fixed bin, ptr, fixed bin, fixed bin (35)); 3145 dcl bootload_disk_io$test_done 3146 entry (fixed bin, fixed bin (35)); 3147 dcl com_err_ entry () options (variable); 3148 dcl cu_$arg_count_rel entry (fixed bin, ptr, fixed bin (35)); 3149 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 3150 dcl date_time_ entry (fixed bin (71), char (*)); 3151 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 3152 dcl ioa_ entry () options (variable); 3153 dcl ioi_assignment$unassign 3154 entry (fixed bin, fixed bin (35)); 3155 dcl ioi_connect entry (fixed bin, fixed bin (18), fixed bin (35)); 3156 dcl ioi_get_status$detailed_status 3157 entry (fixed bin, bit (1) aligned, bit (*), fixed bin (35)); 3158 dcl ioi_set$status entry (fixed bin, fixed bin (18), fixed bin (8), fixed bin (35)); 3159 dcl release_temp_segment_ 3160 entry (char (*), ptr, fixed bin (35)); 3161 dcl syserr entry () options (variable); 3162 dcl syserr$error_code entry () options (variable); 3163 dcl find_bit_$first_off entry (bit (*)) returns (fixed bin (24)); 3164 dcl find_bit_$last_off entry (bit (*)) returns (fixed bin (24)); 3165 1 1 /* BEGIN include file bce_ioi_post_area.incl.pl1 */ 1 2 1 3 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */ 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-07-18,Farley), approve(86-07-18,MCR7439), 1 7* audit(86-08-18,Fawcett), install(86-10-20,MR12.0-1189): 1 8* Area used for posting completion of peripheral i/o for IOI while at BCE. 1 9* END HISTORY COMMENTS */ 1 10 1 11 dcl bce_ioi_post_seg$ aligned external; 1 12 1 13 dcl 1 ioi_post_area aligned based (ioi_post_area_ptr), 1 14 2 number fixed bin, /* buffers currently active */ 1 15 2 pad (7) bit (36), 1 16 2 buffer (0 refer (ioi_post_area.number)) like io_post_buffer; 1 17 1 18 dcl 1 io_post_buffer aligned based (io_post_buffer_ptr), 1 19 2 ev_chn fixed bin (71), /* from dte.ev_chn */ 1 20 2 message fixed bin (71), /* like imess */ 1 21 2 state fixed bin, /* current buffer state */ 1 22 2 pad bit (36); /* pad to even word boundary */ 1 23 1 24 dcl io_post_buffer_ptr ptr; 1 25 dcl ioi_post_area_ptr ptr; 1 26 1 27 /* Buffer State Constants */ 1 28 1 29 dcl IO_OUTSTANDING fixed bin static options (constant) init (1); 1 30 dcl IO_COMPLETE fixed bin static options (constant) init (2); 1 31 dcl WAITING_SPECIAL fixed bin static options (constant) init (3); 1 32 dcl SPECIAL_ARRIVED fixed bin static options (constant) init (4); 1 33 1 34 /* END include file bce_ioi_post_area.incl.pl1 */ 3166 3167 2 1 /* Begin include file bce_subsystem_info_.incl.pl1 BIM 11/82 */ 2 2 2 3 /* format: style3 */ 2 4 2 5 /* Deleted unused items, Keith Loepere, 5/84 */ 2 6 2 7 2 8 /****^ HISTORY COMMENTS: 2 9* 1) change(86-04-22,Farley), approve(86-07-18,MCR7439), 2 10* audit(86-10-08,Fawcett), install(86-10-20,MR12.0-1189): 2 11* Added request_handling_opr_aborts flag for save/restore. 2 12* END HISTORY COMMENTS */ 2 13 2 14 declare ss_info_ptr pointer; 2 15 declare 1 ss_info aligned based (ss_info_ptr), 2 16 2 request_table_ptr 2 17 pointer, 2 18 2 abort_label label, 2 19 2 name char (32) unaligned, 2 20 2 arg_list_ptr pointer, 2 21 2 info_ptr pointer, 2 22 2 flags aligned, 2 23 3 forbid_semicolons bit (1) unaligned, 2 24 3 request_handling_opr_aborts bit (1) unaligned; 2 25 2 26 /* End include file bce_subsystem_info_ */ 3168 3169 3 1 /* START OF: bsr_structures.incl.pl1 * * * * * */ 3 2 3 3 /* format: style4,declareind10,dclind10,idind20,indattr,delnl,insnl */ 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(86-09-17,Farley), approve(86-07-18,MCR7439), 3 7* audit(86-09-24,Fawcett), install(86-10-20,MR12.0-1189): 3 8* Created to define the BCE Save/Restore internal structures. 3 9* 2) change(87-07-09,Farley), approve(87-07-17,MCR7733), 3 10* audit(87-07-21,Fawcett), install(87-07-31,MR12.1-1051): 3 11* Added tdcw and pad fields to stat_ws structure for chaining set-densities 3 12* to first read/write I/O.. 3 13* 3) change(87-11-16,Farley), approve(88-02-26,MCR7811), 3 14* audit(88-03-04,Fawcett), install(88-03-15,MR12.2-1035): 3 15* Added zero_vtoc flag to pv structure. Moved zrec counter from part to pv. 3 16* This will allow zeroing of both partition and vtoc areas. 3 17* 4) change(88-04-12,Farley), approve(88-05-31,MCR7902), 3 18* audit(88-05-31,Fawcett), install(88-07-05,MR12.2-1052): 3 19* Added tcb.records_written to count actual records written to tape and to 3 20* validate the tape sequence numbers of the records written to tape. 3 21* END HISTORY COMMENTS */ 3 22 3 23 dcl iobp ptr; 3 24 dcl 1 iob aligned based (iobp), /* I/O buffer */ 3 25 2 next_bufx fixed bin (17) unal, /* ptr to the next buffer in list of all buffers */ 3 26 2 next_statex fixed bin (17) unal, /* ptr to next buffer of this state */ 3 27 2 state fixed bin, /* buffer state */ 3 28 2 state_time fixed bin (71), /* time of state change */ 3 29 2 datax bit (18) unal, /* index of data page */ 3 30 2 flags unal, 3 31 3 write bit (1), /* "1"b = write data */ 3 32 /* "0"b = read data */ 3 33 3 pad bit (17), 3 34 2 disk_post_buf fixed bin, /* # of the disk IO posting buffer */ 3 35 2 idcw_word bit (36), /* holds IDCW */ 3 36 2 header_dcw bit (36), /* index to iob.head */ 3 37 2 data_dcw bit (36), /* index to page of data */ 3 38 2 tdcw_word bit (36), /* transfer dcw to the next buffer */ 3 39 2 head like rec_header, /* tape record header. */ 3 40 2 pad2 (2) bit (36); /* pad out to 24 words */ 3 41 3 42 dcl part_arrayp ptr; 3 43 dcl 1 part_array (64) aligned like part based (part_arrayp); 3 44 3 45 dcl partp ptr; 3 46 dcl 1 part aligned based (partp), /* partition list entry */ 3 47 2 name char (4), /* partition name */ 3 48 2 pv_name char (32), /* volume name */ 3 49 2 device char (8), /* "dskX_NNs" */ 3 50 2 pv_pvtx fixed bin (17) unal, /* pv index */ 3 51 2 next_idx fixed bin (17) unal, /* thread to next part */ 3 52 ( 3 53 2 complete bit (1), /* save/restore complete */ 3 54 2 removed bit (1), /* don't process flag */ 3 55 2 pad bit (16) 3 56 ) unal, 3 57 2 frec fixed bin (17) unal, /* starting record from PV label */ 3 58 2 lrec fixed bin (17) unal, /* ending record from PV label */ 3 59 2 nrec fixed bin (17) unal, /* number of recs from PV label */ 3 60 2 tfrec fixed bin (17) unal, /* starting record from preamble.label */ 3 61 2 tlrec fixed bin (17) unal, /* ending record from preamble.label */ 3 62 2 tnrec fixed bin (17) unal; /* number of recs from preamble.label */ 3 63 3 64 dcl pv_arrayp ptr; 3 65 dcl 1 pv_array (63) aligned like pv based (pv_arrayp); 3 66 3 67 dcl pvp ptr; 3 68 dcl 1 pv aligned based (pvp), /* PV list entry */ 3 69 2 name char (32), /* pv_name */ 3 70 2 real_name char (32), /* pv_name from PV label */ 3 71 2 device char (8), /* "dskX_NNs" */ 3 72 2 pvtx fixed bin (17) unal, /* pv index */ 3 73 2 state fixed bin (17) unal, /* current state in S/R */ 3 74 2 restart aligned, /* volume restart info */ 3 75 3 rec_on_pv fixed bin (18), /* restart at this record */ 3 76 3 rec_in_type fixed bin, /* relative record */ 3 77 2 part_idx fixed bin (17) unal, /* index to partition thread */ 3 78 ( 3 79 2 all bit (1), /* save all flag */ 3 80 2 part_requested bit (1), /* asked for partition(s) */ 3 81 2 all_parts bit (1), /* user wants all partitions */ 3 82 2 only_part bit (1), /* only s/r partition flag */ 3 83 2 complete bit (1), /* save/restore complete */ 3 84 2 removed bit (1), /* don't process flag */ 3 85 2 zero_vtoc bit (1), /* used to clear VTOC before restore */ 3 86 2 pad bit (11) 3 87 ) unal, 3 88 2 zrec fixed bin (17) unal; /* used during zeroing on restore */ 3 89 3 90 dcl si_version_1 char (8) internal static options (constant) init ("si_ver01"); 3 91 dcl si_ptr ptr; 3 92 dcl 1 si aligned based (si_ptr), /* per set info */ 3 93 2 version_id char (8), 3 94 /**** Pointers */ 3 95 2 bit_map_ptr ptr, /* ptr to bit map */ 3 96 2 datap ptr, /* ptr to tape data page */ 3 97 2 info_tape_label_ptr 3 98 ptr, 3 99 2 part_ptr ptr, 3 100 2 pv_ptr ptr, 3 101 2 tape_label_ptr ptr, 3 102 2 tcb_ptr ptr, /* tape control-block ptr */ 3 103 2 vol_preamble_ptr 3 104 ptr, 3 105 2 vol_map_ptr ptr, 3 106 2 vol_info_ptr ptr, 3 107 /**** Fixed Bin */ 3 108 2 current_rec_in_area 3 109 fixed bin (18), 3 110 2 first_disk_post_buf 3 111 fixed bin, 3 112 2 first_rec fixed bin (18), 3 113 2 first_tape_number 3 114 fixed bin, 3 115 2 ioi_term_post_buf 3 116 fixed bin, 3 117 2 ioi_spec_post_buf 3 118 fixed bin, 3 119 2 ioi_statusx fixed bin (18), 3 120 2 last_rec fixed bin (18), 3 121 2 last_tape_number 3 122 fixed bin, 3 123 2 last_used_vtoc_record 3 124 fixed bin (18), 3 125 2 next_tape_number 3 126 fixed bin, 3 127 2 old_rec_type fixed bin, 3 128 2 part_count fixed bin, 3 129 2 previous_rec fixed bin (18), 3 130 2 pv_count fixed bin, 3 131 2 pvx fixed bin, 3 132 2 rec_type fixed bin, 3 133 2 recordx fixed bin (18), 3 134 2 tape_count fixed bin, 3 135 2 tape_rec_count fixed bin (35), 3 136 2 tape_seq_number fixed bin, 3 137 2 tcbx fixed bin, /* index into tape control-block array */ 3 138 2 usable_tape_devices 3 139 fixed bin, 3 140 /**** Character Strings */ 3 141 2 old_part_name char (4) unal, 3 142 2 tape_set char (32) unal, 3 143 /**** Bit Strings */ 3 144 2 complete bit (1), 3 145 2 display_pv_record 3 146 bit (1), 3 147 2 find_start_of_part 3 148 bit (1), 3 149 2 last_idcwx bit (18), 3 150 2 need_info_tape bit (1), 3 151 2 need_zero_record 3 152 bit (1), 3 153 2 pv_record_detected 3 154 bit (1), 3 155 2 pvid_being_restored 3 156 bit (36), 3 157 2 restart bit (1), 3 158 2 restart_requested 3 159 bit (1), 3 160 2 tape_set_uid bit (36), 3 161 2 write_eof bit (1), 3 162 2 written_preamble 3 163 bit (1), 3 164 2 written_tape_label 3 165 bit (1); 3 166 3 167 dcl sri_version_1 char (8) internal static options (constant) init ("sri_v001"); 3 168 dcl srip ptr; 3 169 dcl 1 sri aligned based (srip), /* save/restore info */ 3 170 2 version_id char (8), /* current structure version */ 3 171 2 cf_arrayp ptr, /* control file array ptr */ 3 172 2 cf_count fixed bin, /* control files given */ 3 173 2 cfx fixed bin, /* current control file index */ 3 174 2 flags unaligned, 3 175 3 doing_restore bit (1), /* "1"= restore, "0"= save */ 3 176 3 debug bit (1), /* general debug flag */ 3 177 3 pad bit (34), 3 178 2 set_index fixed bin (17) unal, /* current set_info index */ 3 179 2 set_count fixed bin (17) unal, /* SETs defined */ 3 180 2 set_infop ptr, /* ptr to set_info array */ 3 181 2 part_area_ptr ptr, /* ptr to part area */ 3 182 2 pv_area_ptr ptr, /* ptr to pv area */ 3 183 2 tcb_area_ptr ptr, /* ptr to tcb area */ 3 184 2 pvt_array_ptr ptr, /* ptr to pvt_array */ 3 185 2 whoami char (8) unaligned; /* "save" or "restore" */ 3 186 3 187 dcl 1 stat_ws aligned based (tcb.wksp), /* IOI workspace for non-data xfers */ 3 188 2 retry_dcw (3) bit (36), 3 189 2 idcw bit (36), /* non-data idcw */ 3 190 2 tdcw bit (36), /* tdcw for chaining when needed */ 3 191 2 pad bit (36), /* pad, so stat_ws.stat will be even */ 3 192 2 stat like istat; 3 193 3 194 dcl 1 survey_ws aligned based (tcb.wksp), /* IOI workspace for survey devices */ 3 195 2 idcw bit (36), /* survey devices command. */ 3 196 2 dcw bit (36), /* DCW for survey devices command. */ 3 197 2 stat like istat, 3 198 2 data, 3 199 3 handler (16) unaligned, 3 200 4 pad1 bit (1), 3 201 4 reserved bit (1), 3 202 4 operational bit (1), 3 203 4 ready bit (1), 3 204 4 number uns fixed bin (5), 3 205 4 pad2 bit (1), 3 206 4 speed uns fixed bin (3), 3 207 4 nine_track bit (1), 3 208 4 density uns fixed bin (4); 3 209 3 210 dcl tcb_arrayp ptr; 3 211 dcl 1 tcb_array (0:16) aligned like tcb based (tcb_arrayp); 3 212 /* 0 is for MPC if needed */ 3 213 3 214 dcl tcbp ptr; 3 215 dcl 1 tcb aligned based (tcbp), /* tape control-block */ 3 216 2 name char (8), /* "tapX_nn" */ 3 217 2 device fixed bin, /* device number */ 3 218 2 ioi_index fixed bin, /* IOI index */ 3 219 2 ioi_ev_chn fixed bin (71), /* event channel */ 3 220 2 wksp ptr, /* ptr to workspace */ 3 221 2 tape_vol_number char (4), /* current tape volume# */ 3 222 2 nbufs fixed bin, /* # of buffers */ 3 223 2 buf_listx fixed bin, /* offset to buffer list */ 3 224 2 status_count fixed bin, /* number of entries in status queue */ 3 225 2 status_idx fixed bin, /* status queue index */ 3 226 2 statusx fixed bin, /* position of status queue */ 3 227 2 records_written fixed bin, /* number of records written */ 3 228 2 retry_count fixed bin, /* times we've retried */ 3 229 2 flags unal, /* FLAGS */ 3 230 3 removed bit (1), /* device is unavailable */ 3 231 3 attached bit (1), /* device is attached via IOI */ 3 232 3 surveyed bit (1), /* device has been surveyed */ 3 233 3 fips bit (1), /* device is a FIPS type */ 3 234 3 write_tape bit (1), /* user wants to write */ 3 235 3 mount_requested 3 236 bit (1), /* Mount message already displayed */ 3 237 3 tape_mounted bit (1), /* tape on device */ 3 238 3 write_protected 3 239 bit (1), /* no write ring */ 3 240 3 density_set bit (1), /* device density has been set */ 3 241 3 one_eof bit (1), /* single EOF detected */ 3 242 3 eot bit (1), /* EOT detected */ 3 243 3 retry_in_progress 3 244 bit (1), 3 245 2 density_command bit (6) unal, /* for idcw when setting density */ 3 246 2 density bit (5) unal, /* current density */ 3 247 /* "00000"b = not set */ 3 248 /* "00100"b = 800 */ 3 249 /* "00010"b = 1600 */ 3 250 /* "00001"b = 6250 */ 3 251 2 densities_available 3 252 bit (5) unal, /* available densities */ 3 253 2 speed bit (3) unal; /* speed of device */ 3 254 /* "100"b = 75 ips */ 3 255 /* "010"b = 125 ips */ 3 256 /* "001"b = 200 ips */ 3 257 3 258 3 259 3 260 /* END OF: bsr_structures.incl.pl1 * * * * * */ 3170 3171 4 1 /* START OF: bsr_tape_data.incl.pl1 * * * * * */ 4 2 4 3 /* format: style4,declareind10,dclind10,idind20,indattr,delnl,insnl */ 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(86-07-07,Farley), approve(86-07-18,MCR7439), 4 7* audit(86-08-18,Fawcett), install(86-10-20,MR12.0-1189): 4 8* Created to define the BCE Save/Restore Tape Format structures. 4 9* END HISTORY COMMENTS */ 4 10 4 11 dcl info_tape_labelp ptr; 4 12 dcl 1 info_tape_label aligned like tape_label based (info_tape_labelp); 4 13 4 14 dcl 1 rec_header aligned based, 4 15 2 c1 bit (36), /* Header pattern-1 */ 4 16 2 type fixed bin (17) unal, /* record type */ 4 17 2 flags unal, 4 18 3 end_of_set bit (1), /* valid in TAPE_EOR records */ 4 19 3 end_of_part bit (1), /* last PV_PART record */ 4 20 3 end_of_pv bit (1), /* last PV record */ 4 21 3 pad bit (15), 4 22 2 rec_on_tape fixed bin (35), /* physical tape rec# */ 4 23 2 pvid bit (36), /* origin of data */ 4 24 2 rec_on_pv fixed bin (35), /* volume rec# */ 4 25 2 rec_in_type fixed bin, /* rec# of current rec type */ 4 26 2 part_name char (4), /* name of partition */ 4 27 /* when type = PV_PART */ 4 28 2 tape_set_uid bit (36); /* unique Tape SET ID */ 4 29 4 30 dcl tape_labelp ptr; 4 31 4 32 dcl 1 tape_label aligned based (tape_labelp), /* 2048 words */ 4 33 2 version char (8), /* "B_S/R001" */ 4 34 2 title char (32), /* "Multics BCE Save/Restore Tape " */ 4 35 2 tape_set char (32), /* Tape Set name */ 4 36 2 tape_number char (4), /* tape number in set */ 4 37 /* or "Info" */ 4 38 2 pad1 bit (36), /* pad to even word */ 4 39 2 save_time fixed bin (71), /* creation date/time */ 4 40 2 vol_array_size fixed bin, /* # of volumes saved */ 4 41 2 vol_array_idx fixed bin, /* current volume being processed */ 4 42 /* = 0 on "Info" tape */ 4 43 2 tapes_in_set fixed bin, /* valid only on "Info" tape */ 4 44 2 pad2 (7) fixed bin, /* pad to 32 words */ 4 45 2 vol_array (63) like vol_info; /* array of volume info */ 4 46 4 47 dcl vol_infop ptr; 4 48 4 49 dcl 1 vol_info aligned based (vol_infop), /* 32 words */ 4 50 2 pvname char (32), /* physical volume name */ 4 51 2 pvid bit (36), /* physical volume ID */ 4 52 2 data_saved fixed bin, /* amount of data saved */ 4 53 2 restart aligned, /* restart info */ 4 54 3 rec_on_pv fixed bin (18), /* record to restart from */ 4 55 3 rec_in_type fixed bin, /* relative record */ 4 56 2 dev_type fixed bin, /* device type */ 4 57 2 nregions fixed bin, 4 58 2 current_region fixed bin, 4 59 2 pad bit (36), 4 60 2 region (8), 4 61 3 part_name char (4), /* = "" for vtoc/paging region */ 4 62 3 begins_on_tape 4 63 fixed bin (18) uns unal, 4 64 3 ends_on_tape fixed bin (18) uns unal; 4 65 4 66 dcl vol_preamblep ptr; 4 67 4 68 dcl 1 vol_preamble aligned like label based (vol_preamblep); 4 69 4 70 /**** Tape Label Constants */ 4 71 4 72 dcl TAPE_LABEL_TITLE char (32) static options (constant) init ("Multics BCE Save/Restore Tape"); 4 73 dcl TAPE_LABEL_VERSION_1 4 74 char (8) static options (constant) init ("B_S/R001"); 4 75 4 76 /**** Record Header Type Constants */ 4 77 4 78 dcl TAPE_LABEL /* tape label record */ 4 79 fixed bin static options (constant) init (1); 4 80 dcl TAPE_EOR /* end-of-reel record */ 4 81 fixed bin static options (constant) init (2); 4 82 dcl PV_PREAMBLE /* volume preamble */ 4 83 fixed bin static options (constant) init (3); 4 84 dcl PV_VTOC /* disk records 0 - end of vtoc */ 4 85 fixed bin static options (constant) init (4); 4 86 dcl PV_RECORD /* disk record */ 4 87 fixed bin static options (constant) init (5); 4 88 dcl PV_PART /* disk partition */ 4 89 fixed bin static options (constant) init (6); 4 90 4 91 /**** vol_info.data_saved Constants */ 4 92 4 93 dcl PV_ONLY /* Only normal volume records */ 4 94 fixed bin static options (constant) init (0); 4 95 dcl PART_ONLY /* Only partition records */ 4 96 fixed bin static options (constant) init (1); 4 97 dcl BOTH_SAVED /* normal records and partitions */ 4 98 fixed bin static options (constant) init (2); 4 99 5 1 /* BEGIN INCLUDE FILE ... fs_vol_label.incl.pl1 .. last modified January 1982 for new volume map format */ 5 2 5 3 /****^ HISTORY COMMENTS: 5 4* 1) change(86-04-10,Fawcett), approve(86-04-10,MCR7383), 5 5* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 5 6* Add the subvolume info. 5 7* 2) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 5 8* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 5 9* Added inconsistent_dbm bit used to determine consistency of volume 5 10* dumper bit maps. 5 11* END HISTORY COMMENTS */ 5 12 5 13 /* This is the label at fixed location of each physical volume. Length 1 page */ 5 14 /* Note: fsout_vol clears pad fields before writing the label */ 5 15 5 16 dcl labelp ptr; 5 17 5 18 dcl 1 label based (labelp) aligned, 5 19 5 20 /* First comes data not used by Multics.. for compatibility with GCOS */ 5 21 5 22 2 gcos (5*64) fixed bin, 5 23 5 24 /* Now we have the Multics label */ 5 25 5 26 2 Multics char (32) init ("Multics Storage System Volume"), /* Identifier */ 5 27 2 version fixed bin, /* Version 1 */ 5 28 2 mfg_serial char (32), /* Manufacturer's serial number */ 5 29 2 pv_name char (32), /* Physical volume name. */ 5 30 2 lv_name char (32), /* Name of logical volume for pack */ 5 31 2 pvid bit (36), /* Unique ID of this pack */ 5 32 2 lvid bit (36), /* unique ID of its logical vol */ 5 33 2 root_pvid bit (36), /* unique ID of the pack containing the root. everybody must agree. */ 5 34 2 time_registered fixed bin (71), /* time imported to system */ 5 35 2 n_pv_in_lv fixed bin, /* # phys volumes in logical */ 5 36 2 vol_size fixed bin, /* total size of volume, in records */ 5 37 2 vtoc_size fixed bin, /* number of recs in fixed area + vtoc */ 5 38 2 not_used bit (1) unal, /* used to be multiple_class */ 5 39 2 private bit (1) unal, /* TRUE if was registered as private */ 5 40 2 inconsistent_dbm bit (1) unal, /* TRUE if ESD-less crash */ 5 41 2 flagpad bit (33) unal, 5 42 2 max_access_class bit (72), /* Maximum access class for stuff on volume */ 5 43 2 min_access_class bit (72), /* Minimum access class for stuff on volume */ 5 44 2 password bit (72), /* not yet used */ 5 45 2 number_of_sv fixed bin, /* if = 0 not a subvolume else the number of svs */ 5 46 2 this_sv fixed bin, /* what subvolume number it is */ 5 47 2 sub_vol_name char (1), /* what subvolume name (a b c d) it is */ 5 48 2 pad1 (13) fixed bin, 5 49 2 time_mounted fixed bin (71), /* time mounted */ 5 50 2 time_map_updated fixed bin (71), /* time vmap known good */ 5 51 5 52 /* The next two words overlay time_unmounted on pre-MR10 systems. This 5 53* forces a salvage if an MR10 pack is mounted on an earlier system. 5 54* */ 5 55 2 volmap_version fixed bin, /* version of volume map (currently 1) */ 5 56 2 pad6 fixed bin, 5 57 5 58 2 time_salvaged fixed bin (71), /* time salvaged */ 5 59 2 time_of_boot fixed bin (71), /* time of last bootload */ 5 60 2 time_unmounted fixed bin (71), /* time unmounted cleanly */ 5 61 2 last_pvtx fixed bin, /* pvtx in that PDMAP */ 5 62 2 pad1a (2) fixed bin, 5 63 2 err_hist_size fixed bin, /* size of pack error history */ 5 64 2 time_last_dmp (3) fixed bin (71), /* time last completed dump pass started */ 5 65 2 time_last_reloaded fixed bin (71), /* what it says */ 5 66 2 pad2 (40) fixed bin, 5 67 2 root, 5 68 3 here bit (1), /* TRUE if the root is on this pack */ 5 69 3 root_vtocx fixed bin (35), /* VTOC index of root, if it is here */ 5 70 3 shutdown_state fixed bin, /* Status of hierarchy */ 5 71 3 pad7 bit (1) aligned, 5 72 3 disk_table_vtocx fixed bin, /* VTOC index of disk table on RPV */ 5 73 3 disk_table_uid bit (36) aligned, /* UID of disk table */ 5 74 3 esd_state fixed bin, /* State of esd */ 5 75 2 volmap_record fixed bin, /* Begin record of volume map */ 5 76 2 size_of_volmap fixed bin, /* Number of records in volume map */ 5 77 2 vtoc_map_record fixed bin, /* Begin record of VTOC map */ 5 78 2 size_of_vtoc_map fixed bin, /* Number of records in VTOC map */ 5 79 2 volmap_unit_size fixed bin, /* Number of words per volume map section */ 5 80 2 vtoc_origin_record fixed bin, /* Begin record of VTOC */ 5 81 2 dumper_bit_map_record fixed bin, /* Begin record of dumper bit-map */ 5 82 2 vol_trouble_count fixed bin, /* Count of inconsistencies found since salvage */ 5 83 2 pad3 (52) fixed bin, 5 84 2 nparts fixed bin, /* Number of special partitions on pack */ 5 85 2 parts (47), 5 86 3 part char (4), /* Name of partition */ 5 87 3 frec fixed bin, /* First record */ 5 88 3 nrec fixed bin, /* Number of records */ 5 89 3 pad5 fixed bin, 5 90 2 pad4 (5*64) fixed bin; 5 91 5 92 dcl Multics_ID_String char (32) init ("Multics Storage System Volume") static; 5 93 5 94 /* END INCLUDE FILE fs_vol_label.incl.pl1 */ 4 100 4 101 4 102 4 103 /* END OF: bsr_tape_data.incl.pl1 * * * * * */ 3172 3173 6 1 /* BEGIN include file bootload_post_area.incl.pl1 */ 6 2 6 3 /* Area used for posting completion of disk i/o for bootload Multics 6 4*operations (save, restore and pack copy). */ 6 5 6 6 /* format: style4,indattr,ifthenstmt,ifthen,idind33,^indcomtxt */ 6 7 6 8 dcl bootload_disk_post_seg$ aligned ext; 6 9 6 10 dcl 1 disk_buffer_post aligned based (disk_buffer_post_ptr), 6 11 2 buffer_coreadd fixed bin (26), 6 12 2 disk_complete bit (1), /* disk i/o complete */ 6 13 2 disk_error_code fixed bin (35); 6 14 6 15 dcl disk_buffer_post_ptr ptr; 6 16 dcl 1 disk_post_area aligned based (disk_post_area_ptr), 6 17 2 number fixed bin, 6 18 2 posted (0 refer (disk_post_area.number)) aligned like disk_buffer_post; 6 19 dcl disk_post_area_ptr ptr; 6 20 6 21 /* END include file bootload_post_area.incl.pl1 */ 3174 3175 7 1 /* Begin include file config_data_dcls.incl.pl1 BIM 9/82 */ 7 2 7 3 /****^ HISTORY COMMENTS: 7 4* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 7 5* audit(86-01-17,CLJones), install(86-03-21,MR12.0-1033): 7 6* Add changes made to 7 7* config_data_.cds. 7 8* 2) change(86-10-21,Fawcett), approve(86-10-21,PBF7381), 7 9* audit(86-10-23,Farley), install(86-10-28,MR12.0-1200): 7 10* Corrected the number of tape drive models supported. 7 11* END HISTORY COMMENTS */ 7 12 7 13 /* format: style3 */ 7 14 /* Modified 830523 to add console io_type and line_leng fields for different 7 15* operator's consoles and to fix a size bug... -E. A. Ranzenbach */ 7 16 /* Modified 841101 by Paul Farley to add changes made to config_data_.cds */ 7 17 7 18 /* WARNING WARNING */ 7 19 7 20 /* Due to the awful PL/I restriction that prohibits any expressions */ 7 21 /* in external variable extents, the arrays here have integers for */ 7 22 /* extents. Changes to config_data_.cds should be reflected here, */ 7 23 /* Because the declares in config_data_.cds use the "like" attribute. */ 7 24 /* Just in case, though, do NOT use hbound. Use the .count fields */ 7 25 /* in the structures instead. */ 7 26 7 27 declare config_data_$chnl_cardx 7 28 fixed binary external static; 7 29 declare config_data_$clok_cardx 7 30 fixed binary external static; 7 31 declare config_data_$cpu_cardx 7 32 fixed binary external static; 7 33 declare config_data_$fnp_cardx 7 34 fixed binary external static; 7 35 declare config_data_$intk_cardx 7 36 fixed binary external static; 7 37 declare config_data_$iom_cardx 7 38 fixed binary external static; 7 39 declare config_data_$mem_cardx 7 40 fixed binary external static; 7 41 declare config_data_$mpc_msp_cardx 7 42 fixed binary external static; 7 43 declare config_data_$mpc_mtp_cardx 7 44 fixed binary external static; 7 45 declare config_data_$ipc_fips_cardx 7 46 fixed binary external static; 7 47 declare config_data_$mpc_urp_cardx 7 48 fixed binary external static; 7 49 declare config_data_$mpc_cardx 7 50 fixed binary external static; 7 51 declare config_data_$mpcs_msp_cardx 7 52 fixed binary external static; 7 53 declare config_data_$mpcs_mtp_cardx 7 54 fixed binary external static; 7 55 declare config_data_$mpcs_urp_cardx 7 56 fixed binary external static; 7 57 declare config_data_$mpcs_cardx 7 58 fixed binary external static; 7 59 declare config_data_$parm_cardx 7 60 fixed binary external static; 7 61 declare config_data_$part_cardx 7 62 fixed binary external static; 7 63 declare config_data_$prph_dsk_cardx 7 64 fixed binary external static; 7 65 declare config_data_$prph_prt_cardx 7 66 fixed binary external static; 7 67 declare config_data_$prph_rdr_cardx 7 68 fixed binary external static; 7 69 declare config_data_$prph_pun_cardx 7 70 fixed binary external static; 7 71 declare config_data_$prph_ccu_cardx 7 72 fixed binary external static; 7 73 declare config_data_$prph_tap_cardx 7 74 fixed binary external static; 7 75 declare config_data_$prph_opc_cardx 7 76 fixed binary external static; 7 77 declare config_data_$prph_cardx 7 78 fixed binary external static; 7 79 declare config_data_$root_cardx 7 80 fixed binary external static; 7 81 declare config_data_$salv_cardx 7 82 fixed binary external static; 7 83 declare config_data_$schd_cardx 7 84 fixed binary external static; 7 85 declare config_data_$sst_cardx 7 86 fixed binary external static; 7 87 declare config_data_$stok_cardx 7 88 fixed binary external static; 7 89 declare config_data_$tbls_cardx 7 90 fixed binary external static; 7 91 declare config_data_$udsk_cardx 7 92 fixed binary external static; 7 93 7 94 declare 1 config_data_$config_cards 7 95 aligned external static, 7 96 2 count fixed binary, 7 97 2 per_card (32) aligned, 7 98 3 name char (4) aligned, 7 99 3 second_field char (4) aligned, 7 100 3 flags aligned, 7 101 4 match_second bit (1) unaligned, /* PRPH FOO */ 7 102 4 match_only_3 bit (1) unaligned; /* XXXn type */ 7 103 7 104 declare 1 config_data_$mpc_msp_model_names 7 105 aligned external static, 7 106 2 count fixed binary, 7 107 2 names (9) aligned, 7 108 3 model fixed binary, 7 109 3 name character (8), 7 110 3 fw_tag character (16), 7 111 3 valid_drives (16) fixed binary unaligned; 7 112 7 113 declare 1 config_data_$mpc_mtp_model_names 7 114 aligned external static, 7 115 2 count fixed binary, 7 116 2 names (7) aligned, 7 117 3 model fixed binary, 7 118 3 name character (8), 7 119 3 fw_tag character (16), 7 120 3 valid_drives (16) fixed binary unaligned; 7 121 7 122 declare 1 config_data_$mpc_urp_model_names 7 123 aligned external static, 7 124 2 count fixed binary, 7 125 2 names (6) aligned, 7 126 3 model fixed binary, 7 127 3 name character (8), 7 128 3 fw_tag character (16); /* "EURC" for EURC */ 7 129 7 130 declare 1 config_data_$ipc_msp_model_names 7 131 aligned external static, 7 132 2 count fixed binary, 7 133 2 names (1) aligned, 7 134 3 model fixed binary, 7 135 3 name character (8), 7 136 3 fw_tag character (16), 7 137 3 valid_drives (16) fixed binary unaligned; 7 138 7 139 declare 1 config_data_$ipc_mtp_model_names 7 140 aligned external static, 7 141 2 count fixed binary, 7 142 2 names (1) aligned, 7 143 3 model fixed binary, 7 144 3 name character (8), 7 145 3 fw_tag character (16), 7 146 3 valid_drives (16) fixed binary unaligned; 7 147 7 148 declare 1 config_data_$disk_drive_model_names 7 149 aligned external static, 7 150 2 count fixed binary, 7 151 2 names (5) aligned, 7 152 3 model fixed binary, 7 153 3 name character (8), 7 154 3 device_0_valid bit (1); 7 155 7 156 declare 1 config_data_$tape_drive_model_names 7 157 aligned external static, 7 158 2 count fixed binary, 7 159 2 names (9) aligned, 7 160 3 model fixed binary, 7 161 3 name character (8), 7 162 3 device_0_valid bit (1); 7 163 7 164 declare 1 config_data_$printer_model_names 7 165 aligned external static, 7 166 2 count fixed binary, 7 167 2 names (5) aligned, 7 168 3 model fixed binary, 7 169 3 name character (8); 7 170 7 171 declare 1 config_data_$reader_model_names 7 172 aligned external static, 7 173 2 count fixed binary, 7 174 2 names (4) aligned, 7 175 3 model fixed binary, 7 176 3 name character (8); 7 177 7 178 declare 1 config_data_$ccu_model_names 7 179 aligned external static, 7 180 2 count fixed binary, 7 181 2 names (1) aligned, 7 182 3 model fixed binary, 7 183 3 name character (8); 7 184 7 185 declare 1 config_data_$punch_model_names 7 186 aligned external static, 7 187 2 count fixed binary, 7 188 2 names (3) aligned, 7 189 3 model fixed binary, 7 190 3 name character (8); 7 191 7 192 declare 1 config_data_$console_model_names 7 193 aligned external static, 7 194 2 count fixed binary, 7 195 2 names (3) aligned, 7 196 3 model fixed binary, 7 197 3 name character (8), 7 198 3 line_leng fixed bin (17), 7 199 3 io_type character (4); 7 200 7 201 /* End include file config_data_dcls.incl.pl1 */ 3176 3177 8 1 /* BEGIN INCLUDE FILE ... config_prph_tap_card.incl.pl1 */ 8 2 8 3 dcl prph_tap_cardp ptr; /* Pointer to a PRPH TAPx card. */ 8 4 8 5 dcl 1 prph_tap_card based (prph_tap_cardp) aligned, /* PRPH TAPx card declaration */ 8 6 2 word char (4), /* "prph" */ 8 7 2 name char (4), /* "tapX" */ 8 8 2 iom fixed bin (3), /* IOM number */ 8 9 2 chan fixed bin (8), /* channel number */ 8 10 2 nchan fixed bin, /* number of channels */ 8 11 8 12 2 group (5), 8 13 3 model fixed bin, /* model number */ 8 14 3 ndrives fixed bin, /* number of drives */ 8 15 8 16 2 type_word aligned, 8 17 3 field_type (14) bit (2) unaligned, /* type of each field; see config_deck.incl.pl1 */ 8 18 3 pad1 bit (4) unaligned, 8 19 3 n_fields fixed bin (4) unsigned unaligned; /* number of fields used on card */ 8 20 8 21 dcl 1 prph_tap_card_array aligned based (prph_tap_cardp), /* Overlay for drive group array */ 8 22 2 pad1 (5) bit (36) aligned, 8 23 2 group (divide (max (0, (prph_tap_card.n_fields - 4)), 2, 17, 0)), 8 24 3 model fixed bin, /* model number */ 8 25 3 ndrives fixed bin; /* number of drives */ 8 26 8 27 /* END INCLUDE FILE ... config_prph_tap_card.incl.pl1 */ 3178 3179 9 1 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */ 9 2 9 3 9 4 9 5 9 6 /****^ HISTORY COMMENTS: 9 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 9 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 9 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and 9 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin 9 11* constants indexed by device type as defined in fs_dev_types.incl.pl1. 9 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO. 9 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533), 9 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193): 9 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants. 9 16* END HISTORY COMMENTS */ 9 17 9 18 9 19 /* 9 20* All disk packs have the standard layout described below: 9 21* 9 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1. 9 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1 9 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1 9 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1 9 26* Record 7 : formerly contained bad track list; no longer used. 9 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label) 9 28* each record contains 5 192-word vtoc entries. The last 64 words are unused. 9 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label) 9 30* 9 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning 9 32* of the particular partition. 9 33* 9 34* 9 35* 9 36* A conceptual declaration for a disk pack could be: 9 37* 9 38* dcl 1 disk_pack, 9 39* 2 label_record (0 : 0) bit(36 * 1024), 9 40* 2 volume_map_record (1 : 3) bit(36 * 1024), 9 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024), 9 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024), 9 43* 2 spare_record (7 : 7) bit(36 * 1024), 9 44* 2 vtoc_array_records (8 : n-1), 9 45* 3 vtoc_entry ( 5 ) bit(36 * 192), 9 46* 3 unused bit(36 * 64), 9 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024); 9 48* 9 49* 9 50* 9 51* 9 52**/ 9 53 9 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */ 9 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */ 9 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */ 9 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */ 9 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */ 9 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */ 9 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */ 9 61 fixed bin (17) int static options (constant); 9 62 9 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */ 9 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */ 9 65 /* or the physical volume table entry (pvte) device type. */ 9 66 9 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant); 9 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant); 9 69 9 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init 9 71 (0, 3, 3, 3, 3, 3, 3, 1, 1); 9 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init 9 73 (0, 5, 5, 5, 5, 5, 5, 2, 2); 9 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init 9 75 (0, 16, 16, 16, 16, 16, 16, 2, 2); 9 76 9 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */ 3180 3181 10 1 /* Begin include file ...... fs_dev_types.incl.pl1 */ 10 2 10 3 /****^ HISTORY COMMENTS: 10 4* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 10 5* audit(86-01-17,CLJones), install(86-03-21,MR12.0-1033): 10 6* Add support for FIPS 10 7* 3380. 10 8* 2) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 10 9* audit(86-05-15,Coppola), install(86-07-18,MR12.0-1098): 10 10* Add the support for subvolumes for the MSU3380 and MSU3390. 10 11* 3) change(86-10-02,Fawcett), approve(86-10-02,PBF7383), 10 12* audit(86-10-23,Farley), install(86-10-28,MR12.0-1200): 10 13* Changed 3390 to 3381, "d338" to "3380" & "d339" to "3381". 10 14* END HISTORY COMMENTS */ 10 15 10 16 /* Modified 5/19/76 by N. I. Morris */ 10 17 /* Modified 12/27/78 by Michael R. Jordan to correct MSS0500 information */ 10 18 /* Modified 4/79 by R.J.C. Kissel to add msu0501 information. */ 10 19 /* Modified '82 by BIM for needs_alt_part */ 10 20 /* Modified 4/84 by Chris Jones for FIPS disks */ 10 21 /* Modified 12/84 by Paul Farley for FIPS disks formatted for 512wd sectors */ 10 22 /* Modified 1/85 by Paul Farley to decrease the size of the 3380, until the 10 23* volmap and record stock can be expanded. */ 10 24 10 25 /* 10 26******************************************************************************** 10 27** * 10 28** WARNING: * 10 29** * 10 30** There exists fs_dev_types.incl.alm that must me updated when a new device * 10 31** type is added. * 10 32** * 10 33** There are other include files that contain arrays indexed by the device * 10 34** index obtained by references to MODELX or MODELN in this include file. * 10 35** These must be modified when a new device type is added: * 10 36** disk_pack.incl.pl1 * 10 37** fs_dev_types_sector.incl.pl1 (included in this include) * 10 38** * 10 39******************************************************************************** 10 40**/ 10 41 10 42 10 43 dcl (maxdevt init (9), /* maximum legal devt */ 10 44 bulkdevt init (1), /* bulk store devt */ 10 45 msu0500devt init (2), /* MSU0500 device type */ 10 46 msu0451devt init (3), /* MSU0451 device type */ 10 47 msu0450devt init (3), /* MSU0450 device type */ 10 48 msu0400devt init (4), /* MSU0400 device type */ 10 49 dsu191devt init (4), /* DSU191 device type */ 10 50 dsu190devt init (5), /* DSU190 device type */ 10 51 dsu181devt init (6), /* DSU181 device type */ 10 52 msu0501devt init (7), /* MSU0501 device type */ 10 53 fips3380devt init (8), /* 3380D FIPS device type */ 10 54 fips3381devt init (9) /* 3380E FIPS device type */ 10 55 ) fixed bin (4) static options (constant); 10 56 10 57 dcl MODEL (12) fixed bin static options (constant) init /* Known device model numbers */ 10 58 (0, 500, 451, 450, 400, 402, 191, 190, 181, 501, 3380, 3381); 10 59 10 60 dcl MODELX (12) fixed bin static options (constant) init /* translation from model number to device type */ 10 61 (1, 2, 3, 3, 4, 4, 4, 5, 6, 7, 8, 9); 10 62 10 63 dcl MODELN (9) fixed bin static options (constant) init /* translation from device type to model number */ 10 64 (0, 500, 451, 400, 190, 181, 501, 3380, 3381); 10 65 10 66 dcl device_names (9) char (4) aligned static options (constant) init /* device names indexed by device type */ 10 67 ("bulk", "d500", "d451", "d400", "d190", "d181", "d501", "3380", "3381"); 10 68 10 69 dcl first_dev_number (9) fixed bin (17) static options (constant) init /* First valid device_number */ 10 70 (1, 1, 1, 1, 1, 1, 1, 0, 0); 10 71 10 72 dcl fips_type_disk (9) bit (1) unal static options (constant) init /* ON => FIPS disk */ 10 73 ("0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"1"b,"1"b); 10 74 10 75 dcl media_removable (9) bit (1) static options (constant) init /* ON => demountable pack on device */ 10 76 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 10 77 10 78 dcl shared_spindle (9) bit (1) static options (constant) init /* ON => 2 devices per spindle */ 10 79 ("0"b, "1"b, "0"b, "0"b, "0"b, "0"b, "1"b, "0"b, "0"b); 10 80 10 81 dcl needs_alt_part (9) bit (1) static options (constant) init /* ON => needs alternate partition to run alternate tracks */ 10 82 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 10 83 10 84 dcl seek_command (9) bit (6) init /* Seek command: 00 => N/A, 30 => Seek_512, 34 => seek_64 */ 10 85 ("00"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"30"b3, "30"b3); 10 86 10 87 dcl rec_per_dev (9) fixed bin (21) static options (constant) init /* table of # of records on each device */ 10 88 (0, 38258, 38258, 19270, 14760, 4444, 67200, 112395, 224790); 10 89 10 90 dcl rec_per_sv (9) fixed bin static options (constant) init /* table of # of records on each subvol */ 10 91 (0, 38258, 38258, 19270, 14760, 4444, 67200, 56134, 74930); 10 92 10 93 dcl number_of_sv (9) fixed bin static options (constant) init /* table of subvolumes */ 10 94 (0, 0, 0, 0, 0, 0, 0, 2, 3); 10 95 10 96 dcl valid_sv_string char (3) static options (constant) init /* string of valid subvolume names */ 10 97 ("abc"); 10 98 10 99 dcl valid_sv_array (0:2) char (1) static options (constant) /* array of valid subvolume names */ 10 100 init ("a","b","c"); 10 101 10 102 dcl cyl_per_dev (9) fixed bin static options (constant) init /* table of # of cylinders on each device */ 10 103 (0, 814, 814, 410, 410, 202, 840, 885, 1770); 10 104 10 105 dcl cyl_per_sv (9) fixed bin static options (constant) init /* table of # of cylinders on each subvolume */ 10 106 (0, 814, 814, 410, 410, 202, 840, 442, 590); 10 107 10 108 dcl rec_per_cyl (9) fixed bin static options (constant) init /* table of # of records per cylinder on each device */ 10 109 (0, 47, 47, 47, 36, 22, 80, 127, 127); 10 110 10 111 dcl tracks_per_cyl (9) fixed bin static options (constant) init /* table of # of tracks per cylinder on each device */ 10 112 (0, 19, 19, 19, 19, 20, 20, 15, 15); 10 113 10 114 10 115 dcl first_rec_num (9) fixed bin static options (constant) init /* table of # of first record on each device */ 10 116 (0, 0, 0, 0, 0, 0, 0, 0, 0); 10 117 10 118 dcl last_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each device */ 10 119 (0, 38257, 38116, 19128, 14651, 4399, 67199, 112394, 224789); 10 120 10 121 dcl last_sv_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each subvolume */ 10 122 (0, 38257, 38116, 19128, 14651, 4399, 67199, 56133, 74929); 10 123 10 124 dcl first_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector for each device */ 10 125 (0, 0, 0, 0, 0, 0, 0, 0, 0); 10 126 10 127 dcl last_sect_num (9) fixed bin (24) static options (constant) init /* table of # last sector number for each device */ 10 128 (0, 618639, 616359, 309319, 239722, 71999, 1075199, 225674, 451349); 10 129 10 130 dcl first_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector of alt partition */ 10 131 (0, 638400, 616360, 309320, 239723, 72000, 1075200, 225675, 451350); 10 132 10 133 dcl last_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector of alt partition */ 10 134 (0, 639919, 618639, 311599, 241489, 72719, 1077759, 225930, 451605); 10 135 10 136 dcl last_physical_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector on device (includes T&D cylinders) */ 10 137 (0, 639919, 619399, 312359, 242249, 72359, 1077759, 225674, 451859); 10 138 10 139 dcl dev_time (9) float bin (27) static options (constant) init /* table of average access times for each device */ 10 140 (384e0, 33187e0, 33187e0, 34722e0, 46935e0, 52631e0, 33187e0, 26260e0, 26260e0); 10 141 11 1 /* Begin fs_dev_types_sector.incl.pl1 */ 11 2 11 3 11 4 /****^ HISTORY COMMENTS: 11 5* 1) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 11 6* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 11 7* Add the sector differance for devices that do 64 word IO and devices that 11 8* do 512 word IO. 11 9* END HISTORY COMMENTS */ 11 10 11 11 /* Created by R. A. Fawcett for 512 word IO. for procedures that do not 11 12* need all the data in fs_dev_types. This is also included in 11 13* fs_dev_types.incl.pl1 */ 11 14 11 15 dcl sect_per_cyl (9) fixed bin static options (constant) init /* table of # of sectors per cylinder on each device */ 11 16 (0, 760, 760, 760, 589, 360, 1280, 255, 255); 11 17 11 18 dcl sect_per_sv (9) fixed bin (24) static options (constant) init /* table of # of sectors per cylinder on each subvolume */ 11 19 (0, 0, 0, 0, 0, 0, 0, 112710, 150450); 11 20 11 21 dcl sect_per_rec (9) fixed bin static options (constant) init 11 22 /* table of # of sectors per record on each device */ 11 23 /* coresponding array in disk_pack.incl.pl1 called SECTORS_PER_RECORD */ 11 24 (0, 16, 16, 16, 16, 16, 16, 2, 2); 11 25 11 26 dcl sect_per_vtoc (9) fixed bin static options (constant) init 11 27 (0, 3, 3, 3, 3, 3, 3, 1, 1); 11 28 11 29 dcl vtoc_per_rec (9) fixed bin static options (constant) init 11 30 /* corespending array in disk_pack.incl.pl1 named VTOCES_PER_RECORD */ 11 31 (0, 5, 5, 5, 5, 5, 5, 2, 2); 11 32 11 33 dcl sect_per_track (9) fixed bin static options (constant) init /* table of # of sectors per track on each device */ 11 34 (0, 40, 40, 40, 31, 18, 64, 17, 17); 11 35 11 36 dcl words_per_sect (9) fixed bin static options (constant) init /* table of # of words per sector on each device */ 11 37 (0, 64, 64, 64, 64, 64, 64, 512, 512); 11 38 11 39 /* End fs_dev_types_sector.incl.pl1 */ 11 40 10 142 10 143 10 144 /* End of include file ...... fs_dev_types.incl.pl1 */ 3182 3183 12 1 /* Begin include file ...... io_special_status.incl.pl1 */ 12 2 /* Written February 1981 by Chris Jones (from iom_stat.incl.pl1) */ 12 3 12 4 12 5 /****^ HISTORY COMMENTS: 12 6* 1) change(88-01-06,Farley), approve(88-03-01,MCR7831), 12 7* audit(88-03-01,Parisek), install(88-03-08,MR12.2-1032): 12 8* Corrected channel size to 6 bits, was incorrectly set to 8. 12 9* END HISTORY COMMENTS */ 12 10 12 11 12 12 dcl io_special_status_ptr ptr; /* pointer to status */ 12 13 12 14 dcl 1 io_special_status based (io_special_status_ptr) aligned, 12 15 /* special status from PSIA */ 12 16 ( 12 17 2 t bit (1), /* entry present bit */ 12 18 2 pad bit (2), 12 19 2 channel bit (6), /* channel number */ 12 20 2 pad1 bit (3), 12 21 2 device bit (6), /* device address */ 12 22 2 pad2 bit (1), 12 23 2 byte2 bit (8), /* device dependent information */ 12 24 2 pad3 bit (1), 12 25 2 byte3 bit (8) 12 26 ) unal; /* device dependent information */ 12 27 12 28 /* End of include file io_special_status.incl.pl1 */ 3184 3185 13 1 /* Begin include file io_status_word.incl.pl1 */ 13 2 /* Made from iom_stat.incl.pl1 by C. Hornig */ 13 3 13 4 dcl io_status_word_ptr ptr; 13 5 dcl 1 io_status_word based (io_status_word_ptr) aligned, /* I/O status information */ 13 6 ( 13 7 2 t bit (1), /* set to "1"b by IOM */ 13 8 2 power bit (1), /* non-zero if peripheral absent or power off */ 13 9 2 major bit (4), /* major status */ 13 10 2 sub bit (6), /* substatus */ 13 11 2 eo bit (1), /* even/odd bit */ 13 12 2 marker bit (1), /* non-zero if marker status */ 13 13 2 soft bit (2), /* software status */ 13 14 2 initiate bit (1), /* initiate bit */ 13 15 2 abort bit (1), /* software abort bit */ 13 16 2 channel_stat bit (3), /* IOM channel status */ 13 17 2 central_stat bit (3), /* IOM central status */ 13 18 2 mbz bit (6), 13 19 2 rcount bit (6) 13 20 ) unaligned; /* record count residue */ 13 21 13 22 /* End include file io_status_word.incl.pl1 */ 3186 3187 14 1 14 2 /* Begin include file ...... ioi_stat.incl.pl1 */ 14 3 /* Last modified 3/24/75 by Noel I. Morris */ 14 4 14 5 dcl isp ptr; /* pointer to status structure */ 14 6 14 7 dcl 1 istat based (isp) aligned, /* I/O Interfacer status structure */ 14 8 2 completion, /* completion flags */ 14 9 (3 st bit (1), /* "1"b if status returned */ 14 10 3 er bit (1), /* "1"b if status indicates error condition */ 14 11 3 run bit (1), /* "1"b if channel still running */ 14 12 3 time_out bit (1)) unal, /* "1"b if time-out occurred */ 14 13 2 level fixed bin (3), /* IOM interrupt level */ 14 14 2 offset fixed bin (18), /* DCW list offset */ 14 15 2 absaddr fixed bin (24), /* absolute address of workspace */ 14 16 2 iom_stat bit (72), /* IOM status */ 14 17 2 lpw bit (72); /* LPW residue */ 14 18 14 19 dcl imp ptr; /* pointer to message structure */ 14 20 14 21 dcl 1 imess based (imp) aligned, /* I/O Interfacer event message structure */ 14 22 (2 completion like istat.completion, /* completion flags */ 14 23 2 pad bit (11), 14 24 2 level bit (3), /* interrupt level */ 14 25 2 offset bit (18), /* DCW list offset */ 14 26 2 status bit (36)) unal; /* first 36 bits of status */ 14 27 14 28 /* End of include file ...... ioi_stat.incl.pl1 */ 14 29 3188 3189 15 1 15 2 /* Begin include file ...... iom_dcw.incl.pl1 */ 15 3 15 4 dcl dcwp ptr, /* pointer to DCW */ 15 5 tdcwp ptr; /* pointer to TDCW */ 15 6 15 7 dcl 1 dcw based (dcwp) aligned, /* Data Control Word */ 15 8 (2 address bit (18), /* address for data transfer */ 15 9 2 char_pos bit (3), /* character position */ 15 10 2 m64 bit (1), /* non-zero for mod 64 address */ 15 11 2 type bit (2), /* DCW type */ 15 12 2 tally bit (12)) unal; /* tally for data transfer */ 15 13 15 14 dcl 1 tdcw based (tdcwp) aligned, /* Transfer DCW */ 15 15 (2 address bit (18), /* address to transfer to */ 15 16 2 mbz1 bit (4), 15 17 2 type bit (2), /* should be "10"b for TDCW */ 15 18 2 mbz2 bit (9), 15 19 2 ec bit (1), /* non-zero to set LPW AE bit */ 15 20 2 res bit (1), /* non-zero to restrict further use of IDCW */ 15 21 2 rel bit (1)) unal; /* non-zero to set relative mode after transfer */ 15 22 15 23 /* End of include file ...... iom_dcw.incl.pl1 */ 15 24 3190 3191 16 1 16 2 /* Begin include file ...... iom_pcw.incl.pl1 */ 16 3 16 4 dcl pcwp ptr; /* pointer to PCW */ 16 5 16 6 dcl 1 pcw based (pcwp) aligned, /* Peripheral Control Word */ 16 7 (2 command bit (6), /* device command */ 16 8 2 device bit (6), /* device code */ 16 9 2 ext bit (6), /* address extension */ 16 10 2 code bit (3), /* should be "111"b for PCW */ 16 11 2 mask bit (1), /* channel mask bit */ 16 12 2 control bit (2), /* terminate/proceed and marker control bits */ 16 13 2 chan_cmd bit (6), /* type of I/O operation */ 16 14 2 count bit (6), /* record count or control character */ 16 15 2 mbz1 bit (3), 16 16 2 channel bit (6), /* channel number */ 16 17 2 mbz2 bit (27)) unal; 16 18 16 19 dcl idcwp ptr; /* pointer to IDCW */ 16 20 16 21 dcl 1 idcw based (idcwp) aligned, /* Instruction DCW */ 16 22 (2 command bit (6), /* device command */ 16 23 2 device bit (6), /* device code */ 16 24 2 ext bit (6), /* address extension */ 16 25 2 code bit (3), /* should be "111"b for PCW */ 16 26 2 ext_ctl bit (1), /* "1"b if address extension to be used */ 16 27 2 control bit (2), /* terminate/proceed and marker control bits */ 16 28 2 chan_cmd bit (6), /* type of I/O operation */ 16 29 2 count bit (6)) unal; /* record count or control character */ 16 30 16 31 /* End include file ...... iom_pcw.incl.pl1 */ 16 32 3192 3193 17 1 /* BEGIN INCLUDE FILE ... pvt.incl.pl1 ... last modified January 1982 */ 17 2 17 3 17 4 /* The physical volume table (PVT) is a wired-down table. 17 5* It has one entry for each spindle present, be it for 17 6* Storage System or "I/O" use. 17 7**/ 17 8 17 9 dcl pvt$ ext, 17 10 pvtp ptr; 17 11 17 12 17 13 dcl 1 pvt based (pvtp) aligned, 17 14 17 15 2 n_entries fixed bin (17), /* number of PVT entries */ 17 16 2 max_n_entries fixed bin (17), /* max number of PVT entries */ 17 17 2 n_in_use fixed bin (17), /* number of PVT entries in use */ 17 18 2 rwun_pvtx fixed bin, /* rewind_unloading pvtx */ 17 19 2 shutdown_state fixed bin, /* state of previous shutdown */ 17 20 2 esd_state fixed bin, /* state of ESD, >0 iff in ESD */ 17 21 2 prev_shutdown_state fixed bin, /* shutdown state of previous bootload */ 17 22 2 prev_esd_state fixed bin, /* ESD state of previous bootload */ 17 23 17 24 2 time_of_bootload fixed bin (71), /* Time of bootload */ 17 25 2 root_lvid bit (36) aligned, /* Logical volume ID of Root Logical Volume (RLV) */ 17 26 2 root_pvid bit (36) aligned, /* Physical volume ID of Root Physical Volume (RPV) */ 17 27 2 root_pvtx fixed bin, /* Index to PVTE for Root Physical Volume (RPV) */ 17 28 2 root_vtocx fixed bin, /* VTOCE index for root (>) */ 17 29 2 disk_table_vtocx fixed bin, /* VTOCE index for disk table on RPV */ 17 30 2 disk_table_uid bit (36) aligned, /* File System UID for disk_table */ 17 31 17 32 2 rpvs_requested bit (1) aligned, /* RPVS keyword given on BOOT */ 17 33 2 rpv_needs_salv bit (1) aligned, /* RPV required (not requested) salvage */ 17 34 2 rlv_needs_salv bit (1) aligned, /* RLV required (not requested) salvage */ 17 35 2 volmap_lock_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 17 36 2 volmap_idle_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 17 37 2 vtoc_map_lock_wait_constant bit (36) aligned, /* For constructing wait event: OR pvte_rel into lower */ 17 38 2 n_volmap_locks_held fixed bin (17), /* Current number of volmap locks held */ 17 39 2 n_vtoc_map_locks_held fixed bin (17), /* Current number of VTOC Map locks held */ 17 40 17 41 2 last_volmap_time fixed bin (71), /* Time a volmap was last locked/unlocked */ 17 42 2 last_vtoc_map_time fixed bin (71), /* Time a VTOC Map was last locked/unlocked */ 17 43 2 total_volmap_lock_time fixed bin (71), /* Total time volmap's were locked (integral) */ 17 44 2 total_vtoc_map_lock_time fixed bin (71), /* Total time VTOC Maps were locked (integral) */ 17 45 17 46 2 n_volmap_locks fixed bin (35), /* Number times a volmap was locked */ 17 47 2 n_vtoc_map_locks fixed bin (35), /* Number times a vtoc_map was locked */ 17 48 2 volmap_lock_nowait_calls fixed bin (35), /* Number calls to lock volmap, no wait */ 17 49 2 volmap_lock_nowait_fails fixed bin (35), /* Number times lock failed */ 17 50 2 volmap_lock_wait_calls fixed bin (35), /* Number calls to lock volmap, wait */ 17 51 2 volmap_lock_wait_fails fixed bin (35), /* Number times lock failed */ 17 52 2 pad (2) bit (36) aligned, 17 53 17 54 2 array fixed bin (71); /* Array of PVTE's -- must be double-word aligned */ 17 55 17 56 17 57 17 58 /* END INCLUDE FILE ...pvt.incl.pl1 */ 3194 3195 18 1 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */ 18 2 18 3 /* Added pc_vacating, Benson Margulies 84-10-17 */ 18 4 18 5 /****^ HISTORY COMMENTS: 18 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383), 18 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 18 8* Add the support for subvolumes 18 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309), 18 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 18 11* Add root_lv flag to mount RLVs that do not have hardcore partitions. 18 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 18 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 18 14* Added inconsistent_dbm bit for determining the status of volume 18 15* dumper bit maps. 18 16* END HISTORY COMMENTS */ 18 17 18 18 dcl pvt$array aligned external; 18 19 dcl pvt$max_n_entries fixed bin external; 18 20 18 21 dcl pvt_arrayp ptr; 18 22 dcl pvtep ptr; 18 23 18 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp); 18 25 18 26 dcl 1 pvte based (pvtep) aligned, 18 27 18 28 2 pvid bit (36), /* physical volume ID */ 18 29 18 30 2 lvid bit (36), /* logical volume ID */ 18 31 18 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */ 18 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */ 18 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */ 18 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */ 18 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */ 18 37 2 pad3 bit (2) unaligned, 18 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */ 18 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */ 18 40 18 41 18 42 18 43 2 devname char (4), /* device name */ 18 44 18 45 (2 device_type fixed bin (8), /* device type */ 18 46 2 logical_area_number fixed bin (8), /* disk drive number */ 18 47 2 used bit (1), /* TRUE if this entry is used */ 18 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 18 49 2 permanent bit (1), /* TRUE if cannot be demounted */ 18 50 2 testing bit (1), /* Protocol bit for read_disk$test */ 18 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */ 18 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */ 18 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */ 18 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */ 18 55 2 rpv bit (1), /* TRUE if this is the root physical volume */ 18 56 2 scav_check_address 18 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */ 18 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */ 18 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */ 18 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */ 18 61 2 vacating bit (1), /* don't put new segs on this vol */ 18 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */ 18 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */ 18 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */ 18 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */ 18 66 18 67 18 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */ 18 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */ 18 70 18 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */ 18 72 18 73 2 nleft fixed bin (17), /* number of records left */ 18 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */ 18 75 18 76 2 dim_info bit (36), /* Information peculiar to DIM */ 18 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */ 18 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */ 18 79 2 records_per_cyl fixed bin, 18 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */ 18 81 2 sv_name char (2) aligned, 18 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */ 18 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */ 18 84 18 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */ 18 86 2 pad2 bit (18) unaligned, 18 87 18 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */ 18 89 18 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */ 18 91 18 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */ 18 93 18 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */ 18 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */ 18 96 18 97 18 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */ 18 99 18 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */ 18 101 18 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */ 18 103 18 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */ 18 105 18 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */ 18 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */ 18 108 18 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */ 18 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */ 18 111 18 112 18 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */ 18 114 VOLMAP_ASYNC_READ init (1), 18 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant); 18 116 18 117 18 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */ 3196 3197 19 1 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 19 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 19 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 19 4 19 5 /* This include file has an ALM version. Keep 'em in sync! */ 19 6 19 7 dcl ( 19 8 19 9 /* The following constants define the message action codes. This indicates 19 10*how a message is to be handled. */ 19 11 19 12 SYSERR_CRASH_SYSTEM init (1), 19 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 19 14 19 15 SYSERR_TERMINATE_PROCESS init (2), 19 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 19 17 19 18 SYSERR_PRINT_WITH_ALARM init (3), 19 19 BEEP init (3), /* Beep and print the message on the console. */ 19 20 19 21 SYSERR_PRINT_ON_CONSOLE init (0), 19 22 ANNOUNCE init (0), /* Just print the message on the console. */ 19 23 19 24 SYSERR_LOG_OR_PRINT init (4), 19 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 19 26 19 27 SYSERR_LOG_OR_DISCARD init (5), 19 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 19 29 19 30 19 31 /* The following constants are added to the normal severities to indicate 19 32*different sorting classes of messages. */ 19 33 19 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 19 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 19 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 19 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 19 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 19 39 ) fixed bin internal static options (constant); 19 40 19 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 3198 3199 20 1 /* Begin include file ...... tape_error_interp.incl.pl1 */ 20 2 20 3 /* format: style4,declareind10,dclind10,idind20,indattr,delnl,insnl */ 20 4 20 5 /* Breakdown of tape error status. */ 20 6 20 7 /****^ HISTORY COMMENTS: 20 8* 1) change(86-02-24,Farley), approve(86-07-18,MCR7439), 20 9* audit(86-08-18,Fawcett), install(86-10-20,MR12.0-1189): 20 10* Created from disk_error_interp.incl.pl1. 20 11* END HISTORY COMMENTS */ 20 12 20 13 dcl tape_error_data$ ext; /* tape error status data segment */ 20 14 20 15 dcl tedp ptr; /* pointer to major status structure */ 20 16 20 17 dcl 1 tape_error_data (0:19) aligned based (tedp), /* major status array */ 20 18 ( 2 interp bit (18), /* pointer to substatus data for this major status */ 20 19 2 namep bit (18) 20 20 ) unal; /* rel pointer to major status description */ 20 21 20 22 dcl taperap ptr; /* pointer to substatus array */ 20 23 20 24 dcl 1 tape_status_interp_array 20 25 (100) like tape_error_interp based (taperap) aligned; 20 26 /* array of substatus interpretations */ 20 27 20 28 dcl taperp ptr; /* pointer to error interpretation data */ 20 29 20 30 dcl 1 tape_error_interp based (taperp) aligned, /* substatus interpretation structure */ 20 31 ( 2 bitson bit (6), /* substatus bits which must be ON */ 20 32 2 bitmask bit (6), /* substatus bits which must be checked */ 20 33 2 max_retries fixed bin (5), /* maximum no. of retries for this error */ 20 34 2 get_detail bit (1), /* "1"b if detailed status needed */ 20 35 2 expect_special bit (1), /* "1"b if special status expected */ 20 36 2 end_of_file bit (1), /* "1"b if EOF status */ 20 37 2 end_of_tape bit (1), /* "1"b if EOT status */ 20 38 2 bad_density bit (1), /* "1"b if invalid density */ 20 39 2 backspace bit (1), /* "1"b backspace before retry */ 20 40 2 bad_dev bit (1), /* "1"b if device is inoperative */ 20 41 2 bad_path bit (1), /* "1"b if tape data path is defective */ 20 42 2 pad1 bit (10), 20 43 2 namep bit (18), /* rel pointer to substatus description */ 20 44 2 pad2 bit (18) 20 45 ) unal; 20 46 20 47 dcl tsdp ptr; /* pointer to status description */ 20 48 20 49 dcl 1 tape_status_descrip 20 50 based (tsdp) aligned, /* status description string */ 20 51 ( 2 lth fixed bin (8), /* length of string */ 20 52 2 chr char (32 refer (tape_status_descrip.lth)) 20 53 ) unal; /* status description string */ 20 54 20 55 dcl POWER_OFF fixed bin internal static options (constant) init (16); 20 56 dcl CHAN_STAT fixed bin internal static options (constant) init (17); 20 57 dcl CENTRAL_STAT fixed bin internal static options (constant) init (18); 20 58 dcl SYS_FAULT fixed bin internal static options (constant) init (19); 20 59 20 60 /* End of include file ...... tape_error_interp.incl.pl1 */ 3200 3201 21 1 /* BEGIN INCLUDE FILE ... vol_map.incl.pl1 */ 21 2 21 3 dcl vol_mapp ptr; 21 4 21 5 dcl 1 vol_map based (vol_mapp) aligned, 21 6 21 7 2 n_rec fixed bin(17), /* number of records represented in the map */ 21 8 2 base_add fixed bin(17), /* record number for first bit in bit map */ 21 9 2 n_free_rec fixed bin(17), /* number of free records */ 21 10 2 bit_map_n_words fixed bin(17), /* number of words of the bit map */ 21 11 2 pad (60) bit(36), /* pad to 64 words */ 21 12 2 bit_map (3*1024 - 64) bit(36) ; /* bit map - the entire vol map occupies 3 records */ 21 13 21 14 /* END INCLUDE ... vol_map */ 3202 3203 22 1 /* START OF: vtoc_map.incl.pl1 ... March 1982 ... * * * * * * * * * * * * * * * * */ 22 2 22 3 dcl vtoc_mapp ptr; 22 4 dcl bit_map_wordp ptr; 22 5 22 6 dcl 1 vtoc_map aligned based (vtoc_mapp), 22 7 2 n_vtoce fixed bin, /* Number of VTOCEs on the device */ 22 8 2 n_free_vtoce fixed bin, /* Number of free VTOCEs */ 22 9 2 bit_map_n_words fixed bin, /* Number of words in the bit map below */ 22 10 2 vtoc_last_recno fixed bin, /* Last record number in VTOC */ 22 11 2 pad (4) fixed bin, 22 12 2 bit_map (0:1024 - 9) bit (36); /* This structure consumes exactly 1 page */ 22 13 22 14 dcl 1 bit_map_word aligned based (bit_map_wordp), 22 15 2 pad1 bit (1) unal, 22 16 2 bits bit (32) unal, /* 32 VTOCES ON => free */ 22 17 2 pad2 bit (3) unal; 22 18 22 19 22 20 22 21 /* END OF: vtoc_map.incl.pl1 * * * * * * * * * * * * * * * * */ 3204 3205 3206 /*^ BEGIN MESSAGE DOCUMENTATION 3207* 3208* Message: 3209* bce_save: Error issuing tape connect for TAPE_DEV (TAPE_SET). ERR_MESSAGE 3210* 3211* S: $crash 3212* 3213* T: $init 3214* 3215* M: IOI has returned a non-zero error, which has been expanded in 3216* ERR_MESSAGE. $err 3217* 3218* A: $inform 3219* 3220* Message: 3221* bce_save: IO complete, but NO status returned for TAPE_SET. 3222* 3223* S: $crash 3224* 3225* T: $init 3226* 3227* M: An I/O has been posted, but there was no indication of status 3228* being returned. $err 3229* 3230* A: $inform 3231* 3232* Message: 3233* bce_save: Internal bit map for PV_NAME (TAPE_SET) contains no in use pages. 3234* 3235* S: $crash 3236* 3237* T: $init 3238* 3239* M: The copied/packed internal version of the PV's volume bit map 3240* contains no used pages (OFF bits). $err 3241* 3242* A: $inform 3243* 3244* Message: 3245* bce_save: Out of disk buffers for TAPE_SET. 3246* 3247* S: $crash 3248* 3249* T: $init 3250* 3251* M: $err 3252* 3253* A: $inform 3254* 3255* Message: 3256* bce_save: Out of tape buffers for TAPE_SET. 3257* 3258* S: $crash 3259* 3260* T: $init 3261* 3262* M: $err 3263* 3264* A: $inform 3265* 3266* Message: 3267* restore(TAPE_SET): "Info" tape on TAPE_DEV, created DATE_TIME 3268* 3269* S: $info 3270* 3271* T: $init 3272* 3273* M: Just an informative message. 3274* 3275* A: $ignore 3276* 3277* Message: 3278* restore(TAPE_SET): (Unrecoverable) MAJOR_STATUS, SUB_STATUS on TAPE_DEV. 3279* 3280* S: $info 3281* 3282* T: $init 3283* 3284* M: An unrecoverable error has occured while attempting to do I/O to 3285* the tape device. 3286* 3287* A: $recover 3288* 3289* Message: 3290* restore(TAPE_SET): Abnormal tape termination of tape# TAPE_NUMBER on TAPE_DEV. 3291* 3292* S: $info 3293* 3294* T: $init 3295* 3296* M: While reading the save tape an invalid record header was found. 3297* BCE save tapes are normally terminated with a End-of-Reel (EOR) record 3298* followed by three End-of-File (EOF) marks. This one most likely was 3299* not properly terminated. 3300* 3301* A: $ignore Unless it is felt that the tape is properly terminated, 3302* in which case the restore can be restarted and this tape re-read. 3303* 3304* Message: 3305* restore(TAPE_SET): Clearing unused VTOC region (records BEGIN_REC - END_REC) on PV_NAME. 3306* 3307* S: $info 3308* 3309* T: $init 3310* 3311* M: Just an informative message. The unused records in the VTOC region 3312* are zero cleared to avoid having erroneous VTOCEs left laying around. 3313* 3314* A: $ignore 3315* 3316* Message: 3317* restore(TAPE_SET): Device TAPE_DEV is being removed from the tape device list. 3318* 3319* S: $info 3320* 3321* T: $init 3322* 3323* M: The TAPE_DEV has returned a status indicating that it is unable 3324* to be used. 3325* 3326* A: $ignore 3327* 3328* Message: 3329* restore(TAPE_SET): End of Information without detecting TAPE_EOR record. 3330* 3331* S: $info 3332* 3333* T: $init 3334* 3335* M: Multiple End-of-File (EOF) marks have been detected, without 3336* previously reading an End-of-Reel (EOR) record. 3337* 3338* A: $ignore Unless it is felt that the tape is properly terminated, 3339* in which case the restore can be restarted and this tape re-read. 3340* 3341* Message: 3342* restore(TAPE_SET): Error, tape on TAPE_DEV is part of the "OTHER_TAPE_SET" set. 3343* 3344* S: $info 3345* 3346* T: $init 3347* 3348* M: The tape just read is not part of this tape set. 3349* 3350* A: Mount a tape on the device that is part of this tape set. 3351* 3352* Message: 3353* restore: Getting tape label temp segment. ERR_MESSAGE 3354* 3355* S: $beep 3356* 3357* T: $init 3358* 3359* M: An error occured while attempting to get a temporary segment to 3360* hold the tape label information. 3361* 3362* A: $inform 3363* 3364* Message: 3365* restore(TAPE_SET): Incorrect tape number. Expected tape# TAPE_NUMBER. 3366* 3367* S: $info 3368* 3369* T: $init 3370* 3371* M: An internal tape number tracking mechanism is used and the tape 3372* that was just read does not match what the program expects to be on the 3373* device. 3374* 3375* A: Mount the correct tape on the device. 3376* 3377* Message: 3378* restore(TAPE_SET): MAJOR_STATUS, SUB_STATUS on TAPE_DEV. 3379* 3380* S: $info 3381* 3382* T: $init 3383* 3384* M: An error has occured while attempting to do I/O to the tape 3385* device. 3386* 3387* A: $recover 3388* 3389* Message: 3390* restore(TAPE_SET): No Physical Volumes left to restore. 3391* 3392* S: $info 3393* 3394* T: $init 3395* 3396* M: For various reasons all of the physical volumes have been 3397* removed from the list of volumes. 3398* 3399* A: $ignore 3400* 3401* Message: 3402* restore(TAPE_SET): No room to describe PV PV_NAME for part PARTITION_NAME. 3403* 3404* S: $info 3405* 3406* T: $init 3407* 3408* M: The maximum number of physical volumes that can be handled by 3409* the program has been exceeded. 3410* 3411* A: The number of physical volumes defined in the control file(s) 3412* must be reduced. 3413* 3414* Message: 3415* restore(TAPE_SET): No usable tape devices left in list. 3416* 3417* S: $info 3418* 3419* T: $init 3420* 3421* M: For various reasons all of the tape devices have been removed 3422* from the list of available devices for this tape set. 3423* 3424* A: $recover 3425* 3426* Message: 3427* restore(TAPE_SET): No usable tape drives left. 3428* 3429* S: $info 3430* 3431* T: $init 3432* 3433* M: For various reasons all of the tape devices have been removed 3434* from the list of available devices for this tape set. 3435* 3436* A: $recover 3437* 3438* Message: 3439* restore: PV_NAME ERR_MESSAGE 3440* 3441* S: $beep 3442* 3443* T: $init 3444* 3445* M: The call to bootload_disk_io$test_done has returned a non-zero 3446* error code. 3447* 3448* A: $inform $recover 3449* 3450* Message: 3451* restore(TAPE_SET): Partition PARTITION_NAME on PV_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 3452* 3453* S: $info 3454* 3455* T: $init 3456* 3457* M: Just an informative message. 3458* 3459* A: $ignore 3460* 3461* Message: 3462* restore(TAPE_SET): Partition PARTITION_NAME was not defined when PV_NAME was saved. 3463* 3464* S: $info 3465* 3466* T: $init 3467* 3468* M: A restore of a partition has been requested in the control file, 3469* but the partition was not requested to be saved when the tape was made. 3470* 3471* A: Remove the partition reference from the control file. 3472* 3473* Message: 3474* restore(TAPE_SET): Partition PARTITION_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 3475* 3476* S: $info 3477* 3478* T: $init 3479* 3480* M: Just an informative message. 3481* 3482* A: $ignore 3483* 3484* Message: 3485* restore(TAPE_SET): Please mount tape# TAPE_NUMBER on TAPE_DEV. 3486* 3487* S: $beep 3488* 3489* T: $init 3490* 3491* M: Just an informative message. 3492* 3493* A: Mount tape on the device. 3494* 3495* Message: 3496* restore(TAPE_SET): Please mount the "Info" tape on TAPE_DEV. 3497* 3498* S: $beep 3499* 3500* T: $init 3501* 3502* M: Just an informative message. 3503* 3504* A: Mount the tape on the device. 3505* 3506* Message: 3507* restore(TAPE_SET): Please mount the "restart" tape on TAPE_DEV. 3508* 3509* S: $beep 3510* 3511* T: $init 3512* 3513* M: Just an informative message. 3514* 3515* A: Mount the tape on the device. 3516* 3517* Message: 3518* restore(TAPE_SET): Readjusting tape sequence # to REC_NUM. 3519* 3520* S: $info 3521* 3522* T: $init 3523* 3524* M: The missing record previously reported by the "Record sequence 3525* error ..." message can not be found. The internal tape sequence counter 3526* is corrected and processing continues as normal. 3527* 3528* A: $ignore 3529* 3530* Message: 3531* restore(TAPE_SET): Record sequence error on tape# TAPE_NUMBER (TAPE_DEV), 3532* should be record # REC_NUM, was record # REC_NUM. 3533* 3534* S: $info 3535* 3536* T: $init 3537* 3538* M: Informative message that the sequence number on the tape is out 3539* of sync with what the program expects. If the WAS is only one record 3540* more than the S/B then the program will attempt to relocate the missing 3541* record by backspacing two records and rereading the records. 3542* 3543* A: $ignore 3544* 3545* Message: 3546* restore: Restarting restore of set "TAPE_SET" on TAPE_DEV. 3547* 3548* S: $info 3549* 3550* T: $init 3551* 3552* M: Just an informative message. 3553* 3554* A: $ignore 3555* 3556* Message: 3557* restore(TAPE_SET): Restore of volume PV_NAME on DISK_DEV complete. 3558* 3559* S: $info 3560* 3561* T: $init 3562* 3563* M: Just an informative message. 3564* 3565* A: $ignore 3566* 3567* Message: 3568* restore(TAPE_SET): Relocated tape sequence # REC_NUM 3569* 3570* S: $info 3571* 3572* T: $init 3573* 3574* M: The missing record previously reported by the "Record sequence 3575* error ..." message has been found. Processing continues as normal. 3576* 3577* A: $ignore 3578* 3579* Message: 3580* restore: Setting status index for TAPE_DEV. ERR_MESSAGE 3581* 3582* S: $beep 3583* 3584* T: $init 3585* 3586* M: IOI has returned a non-zero error, which has been expanded in 3587* ERR_MESSAGE. 3588* 3589* A: $inform 3590* 3591* Message: 3592* restore(TAPE_SET): Skipping volume PV_NAME on DISK_DEV, restore complete. 3593* 3594* S: $info 3595* 3596* T: $init 3597* 3598* M: Just an informative message. 3599* 3600* A: $ignore 3601* 3602* Message: 3603* restore(check_status): Special Interrupt: STATUS_WORD 3604* 3605* S: $info 3606* 3607* T: $init 3608* 3609* M: An unexpected special interrupt has been detected. 3610* 3611* A: $ignore 3612* 3613* Message: 3614* restore(TAPE_SET): Starting from volume PV_NAME on DISK_DEV. 3615* 3616* S: $info 3617* 3618* T: $init 3619* 3620* M: Just an informative message. 3621* 3622* A: $ignore 3623* 3624* Message: 3625* restore: Stopping restore of set "TAPE_SET". 3626* 3627* S: $info 3628* 3629* T: $init 3630* 3631* M: Just an informative message. 3632* 3633* A: $ignore 3634* 3635* Message: 3636* restore(TAPE_SET): Tape on TAPE_DEV does not contain a supported tape label version. 3637* 3638* S: $info 3639* 3640* T: $init 3641* 3642* M: The tape contains a tape version identifier that is nolonger 3643* supported. 3644* 3645* A: Use the "restore -display_info_tape tapX_NN" option to display 3646* the tape. 3647* 3648* Message: 3649* restore(TAPE_SET): Tape on TAPE_DEV does not contain a valid label. 3650* 3651* S: $info 3652* 3653* T: $init 3654* 3655* M: The tape just read is not a valid save/restore tape. 3656* 3657* A: $recover 3658* 3659* Message: 3660* restore(TAPE_SET): Tape on TAPE_DEV is not part of this set. 3661* 3662* S: $info 3663* 3664* T: $init 3665* 3666* M: The tape just read contains a different tape set name than what 3667* is currently being handled, via the control file. 3668* 3669* A: $recover 3670* 3671* Message: 3672* restore(TAPE_SET): Tape# TAPE_NUMBER on TAPE_DEV, created DATE_TIME 3673* 3674* S: $info 3675* 3676* T: $init 3677* 3678* M: Just an informative message. 3679* 3680* A: $ignore 3681* 3682* Message: 3683* restore(TAPE_SET): The following tape device(s) will be used: 3684* 3685* S: $info 3686* 3687* T: $init 3688* 3689* M: Just an informative message. 3690* 3691* A: $ignore 3692* 3693* Message: 3694* restore(check_status): Time-Out on TAPE_DEV 3695* 3696* S: $info 3697* 3698* T: $init 3699* 3700* M: An I/O that was issued to the tape device has timed-out. 3701* 3702* A: $recover 3703* 3704* Message: 3705* restore(TAPE_SET): Time-out waiting for special interrupt. 3706* 3707* S: $info 3708* 3709* T: $init 3710* 3711* M: The program was waiting for a special to come from the device, 3712* but none was recieved in the alloted time. 3713* 3714* A: $recover 3715* 3716* Message: 3717* restore(TAPE_SET): Unable to set density on TAPE_DEV. 3718* 3719* S: $info 3720* 3721* T: $init 3722* 3723* M: The program was unable to set the required density of the tape 3724* device. 3725* 3726* A: $recover 3727* 3728* Message: 3729* restore: Unassigning TAPE_DEV. ERR_MESSAGE 3730* 3731* S: $beep 3732* 3733* T: $init 3734* 3735* M: IOI has returned a non-zero error, which has been expanded in 3736* ERR_MESSAGE. 3737* 3738* A: $inform 3739* 3740* Message: 3741* restore(TAPE_SET): Unloading "Info" tape from TAPE_DEV, REC_CNT records (ERR_CNT errors) 3742* 3743* S: $info 3744* 3745* T: $init 3746* 3747* M: Just an informative message. 3748* 3749* A: $ignore 3750* 3751* Message: 3752* restore(TAPE_SET): Unloading TAPE_DEV, REC_CNT records (ERR_CNT errors) 3753* 3754* S: $info 3755* 3756* T: $init 3757* 3758* M: Just an informative message. 3759* 3760* A: $ignore 3761* 3762* Message: 3763* restore(TAPE_SET): Unloading tape# TAPE_NUMBER from TAPE_DEV, REC_CNT records (ERR_CNT errors) 3764* 3765* S: $info 3766* 3767* T: $init 3768* 3769* M: Just an informative message. 3770* 3771* A: $ignore 3772* 3773* Message: 3774* restore(TAPE_SET): Volume PV_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 3775* 3776* S: $info 3777* 3778* T: $init 3779* 3780* M: Just an informative message. 3781* 3782* A: $ignore 3783* 3784* Message: 3785* restore(TAPE_SET): Waiting for special on TAPE_DEV. 3786* 3787* S: $info 3788* 3789* T: $init 3790* 3791* M: Just an informative message. 3792* 3793* A: $ignore 3794* 3795* Message: 3796* restore(TAPE_SET): Zeroing partition PARTITION_NAME on PV_NAME, record REC_NUM. 3797* 3798* S: $info 3799* 3800* T: $init 3801* 3802* M: Just an informative message. 3803* 3804* A: $ignore 3805* 3806* Message: 3807* restore: bce_ioi_post_seg. ERR_MESSAGE 3808* 3809* S: $beep 3810* 3811* T: $init 3812* 3813* M: The program was unable to get a pointer to the above segment. 3814* $err 3815* 3816* A: $inform 3817* 3818* Message: 3819* restore: bootload_disk_post_seg. ERR_MESSAGE 3820* 3821* S: $beep 3822* 3823* T: $init 3824* 3825* M: The program was unable to get a pointer to the above segment. 3826* $err 3827* 3828* A: $inform 3829* 3830* Message: 3831* restore: pvt. ERR_MESSAGE 3832* 3833* S: $beep 3834* 3835* T: $init 3836* 3837* M: The program was unable to get a pointer to the above segment. 3838* $err 3839* 3840* A: $inform 3841* 3842* Message: 3843* restore(TAPE_SET): restore complete... 3844* 3845* S: $info 3846* 3847* T: $init 3848* 3849* M: Just an informative message. 3850* 3851* A: $ignore 3852* 3853* Message: 3854* restore: tape_error_data. ERR_MESSAGE 3855* 3856* S: $beep 3857* 3858* T: $init 3859* 3860* M: The program was unable to get a pointer to the above segment. 3861* $err 3862* 3863* A: $inform 3864* 3865* Message: 3866* save(TAPE_SET): (Unrecoverable) MAJOR_STATUS, SUB_STATUS on TAPE_DEV. 3867* 3868* S: $info 3869* 3870* T: $init 3871* 3872* M: An unrecoverable error has occured while attempting to do I/O to 3873* the tape device. 3874* 3875* A: $recover 3876* 3877* Message: 3878* save(TAPE_SET): Device TAPE_DEV is being removed from the tape device list. 3879* 3880* S: $info 3881* 3882* T: $init 3883* 3884* M: The TAPE_DEV has returned a status indicating that it is unable 3885* to be used. 3886* 3887* A: $ignore 3888* 3889* Message: 3890* save(TAPE_SET): Error, tape on TAPE_DEV is part of the "OTHER_TAPE_SET" set. 3891* 3892* S: $info 3893* 3894* T: $init 3895* 3896* M: The tape just read is not part of this tape set. 3897* 3898* A: Mount a tape on the device that is part of this tape set. 3899* 3900* Message: 3901* save: Getting tape label temp segment. ERR_MESSAGE 3902* 3903* S: $beep 3904* 3905* T: $init 3906* 3907* M: An error occured while attempting to get a temporary segment to 3908* hold the tape label information. 3909* 3910* A: $inform 3911* 3912* Message: 3913* save(TAPE_SET): Incorrect tape sequence number detected. 3914*.brf 3915* was REC_NUM, s/b REC_NUM. Forcing restart of this tape set. 3916* 3917* S: $beep 3918* 3919* T: $init 3920* 3921* M: A sequence error was detected in the tape record number. 3922* $err 3923* 3924* A: Follow normal save restart procedures. 3925* $inform 3926* 3927* Message: 3928* save(TAPE_SET): MAJOR_STATUS, SUB_STATUS on TAPE_DEV. 3929* 3930* S: $info 3931* 3932* T: $init 3933* 3934* M: An error has occured while attempting to do I/O to the tape 3935* device. 3936* 3937* A: $recover 3938* 3939* Message: 3940* save(TAPE_SET): No Physical Volumes left to save. 3941* 3942* S: $info 3943* 3944* T: $init 3945* 3946* M: For various reasons all of the physical volumes have been 3947* removed from the list of volumes. 3948* 3949* A: $ignore 3950* 3951* Message: 3952* save(TAPE_SET): No room to describe PV PV_NAME for part PARTITION_NAME. 3953* 3954* S: $info 3955* 3956* T: $init 3957* 3958* M: The maximum number of physical volumes that can be handled by 3959* the program has been exceeded. 3960* 3961* A: The number of physical volumes defined in the control file(s) 3962* must be reduced. 3963* 3964* Message: 3965* save(TAPE_SET): No usable tape devices left in list. 3966* 3967* S: $info 3968* 3969* T: $init 3970* 3971* M: For various reasons all of the tape devices have been removed 3972* from the list of available devices for this tape set. 3973* 3974* A: $recover 3975* 3976* Message: 3977* save(TAPE_SET): No usable tape drives left. 3978* 3979* S: $info 3980* 3981* T: $init 3982* 3983* M: For various reasons all of the tape devices have been removed 3984* from the list of available devices for this tape set. 3985* 3986* A: $recover 3987* 3988* Message: 3989* save: PV_NAME ERR_MESSAGE 3990* 3991* S: $beep 3992* 3993* T: $init 3994* 3995* M: The call to bootload_disk_io$test_done has returned a non-zero 3996* error code. 3997* 3998* A: $inform $recover 3999* 4000* Message: 4001* save(TAPE_SET): Partition PARTITION_NAME on PV_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 4002* 4003* S: $info 4004* 4005* T: $init 4006* 4007* M: Just an informative message. 4008* 4009* A: $ignore 4010* 4011* Message: 4012* save(TAPE_SET): Partition PARTITION_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 4013* 4014* S: $info 4015* 4016* T: $init 4017* 4018* M: Just an informative message. 4019* 4020* A: $ignore 4021* 4022* Message: 4023* save(TAPE_SET): Please mount tape# TAPE_NUMBER on TAPE_DEV. 4024* 4025* S: $beep 4026* 4027* T: $init 4028* 4029* M: Just an informative message. 4030* 4031* A: Mount tape on the device. 4032* 4033* Message: 4034* save(TAPE_SET): Please mount the "Info" tape on TAPE_DEV. 4035* 4036* S: $beep 4037* 4038* T: $init 4039* 4040* M: Just an informative message. 4041* 4042* A: Mount the tape on the device. 4043* 4044* Message: 4045* save(TAPE_SET): Please mount the "restart" tape on TAPE_DEV. 4046* 4047* S: $beep 4048* 4049* T: $init 4050* 4051* M: Just an informative message. 4052* 4053* A: Mount the tape on the device. 4054* 4055* Message: 4056* save(TAPE_SET): Remount tape# TAPE_NUMBER WITH write ring on TAPE_DEV. 4057* 4058* S: $beep 4059* 4060* T: $init 4061* 4062* M: The tape is currently mounted without a write ring present. 4063* 4064* A: Remount tape with write permit ring in place. 4065* 4066* Message: 4067* save: Restarting save of set "TAPE_SET" on TAPE_DEV. 4068* 4069* S: $info 4070* 4071* T: $init 4072* 4073* M: Just an informative message. 4074* 4075* A: $ignore 4076* 4077* Message: 4078* save: Setting status index for TAPE_DEV. ERR_MESSAGE 4079* 4080* S: $beep 4081* 4082* T: $init 4083* 4084* M: IOI has returned a non-zero error, which has been expanded in 4085* ERR_MESSAGE. 4086* 4087* A: $inform 4088* 4089* Message: 4090* save(TAPE_SET): Skipping volume PV_NAME on DISK_DEV, save complete. 4091* 4092* S: $info 4093* 4094* T: $init 4095* 4096* M: Just an informative message. 4097* 4098* A: $ignore 4099* 4100* Message: 4101* save(check_status): Special Interrupt: STATUS_WORD 4102* 4103* S: $info 4104* 4105* T: $init 4106* 4107* M: An unexpected special interrupt has been detected. 4108* 4109* A: $ignore 4110* 4111* Message: 4112* save(TAPE_SET): Starting from volume PV_NAME on DISK_DEV. 4113* 4114* S: $info 4115* 4116* T: $init 4117* 4118* M: Just an informative message. 4119* 4120* A: $ignore 4121* 4122* Message: 4123* save: Stopping save of set "TAPE_SET". 4124* 4125* S: $info 4126* 4127* T: $init 4128* 4129* M: Just an informative message. 4130* 4131* A: $ignore 4132* 4133* Message: 4134* save(TAPE_SET): Tape on TAPE_DEV does not contain a supported tape label version. 4135* 4136* S: $info 4137* 4138* T: $init 4139* 4140* M: The tape contains a tape version identifier that is nolonger 4141* supported. 4142* 4143* A: Use the "restore -display_info_tape tapX_NN" option to display 4144* the tape. 4145* 4146* Message: 4147* save(TAPE_SET): Tape on TAPE_DEV does not contain a valid label. 4148* 4149* S: $info 4150* 4151* T: $init 4152* 4153* M: The tape just read is not a valid save/restore tape. 4154* 4155* A: $recover 4156* 4157* Message: 4158* save(TAPE_SET): Tape on TAPE_DEV is not part of this set. 4159* 4160* S: $info 4161* 4162* T: $init 4163* 4164* M: The tape just read contains a different tape set name than what 4165* is currently being handled, via the control file. 4166* 4167* A: $recover 4168* 4169* Message: 4170* save(TAPE_SET): Tape# TAPE_NUMBER on TAPE_DEV, created DATE_TIME 4171* 4172* S: $info 4173* 4174* T: $init 4175* 4176* M: Just an informative message. 4177* 4178* A: $ignore 4179* 4180* Message: 4181* save(TAPE_SET): The following tape device(s) will be used: 4182* 4183* S: $info 4184* 4185* T: $init 4186* 4187* M: Just an informative message. 4188* 4189* A: $ignore 4190* 4191* Message: 4192* save(TAPE_SET): This tape is older than one week. Tape rejected. 4193* 4194* S: $info 4195* 4196* T: $init 4197* 4198* M: A restart of a save is being attempted, but the tape used as the 4199* restart tape is older than one week. 4200* 4201* A: Restart with a later tape or start the save from the beginning. 4202* 4203* Message: 4204* save(TAPE_SET): This tape starts with volume PV_NAME, 4205* which was not defined. Tape rejected. 4206* 4207* S: $info 4208* 4209* T: $init 4210* 4211* M: A save restart is being attempted with a tape that begins with a 4212* PV that has not been defined in the save control file(s). 4213* 4214* A: $recover 4215* 4216* Message: 4217* save(check_status): Time-Out on TAPE_DEV 4218* 4219* S: $info 4220* 4221* T: $init 4222* 4223* M: An I/O that was issued to the tape device has timed-out. 4224* 4225* A: $recover 4226* 4227* Message: 4228* save(TAPE_SET): Time-out waiting for special interrupt. 4229* 4230* S: $info 4231* 4232* T: $init 4233* 4234* M: The program was waiting for a special to come from the device, 4235* but none was recieved in the alloted time. 4236* 4237* A: $recover 4238* 4239* Message: 4240* save(TAPE_SET): Unable to set density on TAPE_DEV. 4241* 4242* S: $info 4243* 4244* T: $init 4245* 4246* M: The program was unable to set the required density of the tape 4247* device. 4248* 4249* A: $recover 4250* 4251* Message: 4252* save: Unassigning TAPE_DEV. ERR_MESSAGE 4253* 4254* S: $beep 4255* 4256* T: $init 4257* 4258* M: IOI has returned a non-zero error, which has been expanded in 4259* ERR_MESSAGE. 4260* 4261* A: $inform 4262* 4263* Message: 4264* save(TAPE_SET): Unloading "Info" tape from TAPE_DEV, REC_CNT records (ERR_CNT errors) 4265* 4266* S: $info 4267* 4268* T: $init 4269* 4270* M: Just an informative message. 4271* 4272* A: $ignore 4273* 4274* Message: 4275* save(TAPE_SET): Unloading TAPE_DEV, REC_CNT records (ERR_CNT errors) 4276* 4277* S: $info 4278* 4279* T: $init 4280* 4281* M: Just an informative message. 4282* 4283* A: $ignore 4284* 4285* Message: 4286* save(TAPE_SET): Unloading tape# TAPE_NUMBER from TAPE_DEV, REC_CNT records (ERR_CNT errors) 4287* 4288* S: $info 4289* 4290* T: $init 4291* 4292* M: Just an informative message. 4293* 4294* A: $ignore 4295* 4296* Message: 4297* save(TAPE_SET): Volume PV_NAME, record REC_NUM, on tape# TAPE_NUMBER (TAPE_DEV) 4298* 4299* S: $info 4300* 4301* T: $init 4302* 4303* M: Just an informative message. 4304* 4305* A: $ignore 4306* 4307* Message: 4308* save(TAPE_SET): Waiting for special on TAPE_DEV. 4309* 4310* S: $info 4311* 4312* T: $init 4313* 4314* M: Just an informative message. 4315* 4316* A: $ignore 4317* 4318* Message: 4319* save: bce_ioi_post_seg. ERR_MESSAGE 4320* 4321* S: $beep 4322* 4323* T: $init 4324* 4325* M: The program was unable to get a pointer to the above segment. 4326* $err 4327* 4328* A: $inform 4329* 4330* Message: 4331* save: bootload_disk_post_seg. ERR_MESSAGE 4332* 4333* S: $beep 4334* 4335* T: $init 4336* 4337* M: The program was unable to get a pointer to the above segment. 4338* $err 4339* 4340* A: $inform 4341* 4342* Message: 4343* save: pvt. ERR_MESSAGE 4344* 4345* S: $beep 4346* 4347* T: $init 4348* 4349* M: The program was unable to get a pointer to the above segment. 4350* $err 4351* 4352* A: $inform 4353* 4354* Message: 4355* save(TAPE_SET): save complete... 4356* 4357* S: $info 4358* 4359* T: $init 4360* 4361* M: Just an informative message. 4362* 4363* A: $ignore 4364* 4365* Message: 4366* save: tape_error_data. ERR_MESSAGE 4367* 4368* S: $beep 4369* 4370* T: $init 4371* 4372* M: The program was unable to get a pointer to the above segment. 4373* $err 4374* 4375* A: $inform 4376* 4377* END MESSAGE DOCUMENTATION */ 4378 4379 end bce_save; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0826.7 bce_save.pl1 >special_ldd>install>MR12.3-1114>bce_save.pl1 3166 1 10/21/86 1251.6 bce_ioi_post_area.incl.pl1 >ldd>include>bce_ioi_post_area.incl.pl1 3168 2 10/21/86 1251.6 bce_subsystem_info_.incl.pl1 >ldd>include>bce_subsystem_info_.incl.pl1 3170 3 07/07/88 2038.7 bsr_structures.incl.pl1 >ldd>include>bsr_structures.incl.pl1 3172 4 10/21/86 1251.6 bsr_tape_data.incl.pl1 >ldd>include>bsr_tape_data.incl.pl1 4-100 5 07/21/88 2036.0 fs_vol_label.incl.pl1 >ldd>include>fs_vol_label.incl.pl1 3174 6 07/11/84 0937.3 bootload_post_area.incl.pl1 >ldd>include>bootload_post_area.incl.pl1 3176 7 10/30/86 2010.5 config_data_dcls.incl.pl1 >ldd>include>config_data_dcls.incl.pl1 3178 8 11/08/82 1005.8 config_prph_tap_card.incl.pl1 >ldd>include>config_prph_tap_card.incl.pl1 3180 9 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 3182 10 10/30/86 2010.5 fs_dev_types.incl.pl1 >ldd>include>fs_dev_types.incl.pl1 10-142 11 07/24/86 2051.8 fs_dev_types_sector.incl.pl1 >ldd>include>fs_dev_types_sector.incl.pl1 3184 12 03/10/88 2009.5 io_special_status.incl.pl1 >ldd>include>io_special_status.incl.pl1 3186 13 03/27/82 0430.3 io_status_word.incl.pl1 >ldd>include>io_status_word.incl.pl1 3188 14 08/17/79 2215.0 ioi_stat.incl.pl1 >ldd>include>ioi_stat.incl.pl1 3190 15 11/12/74 1550.1 iom_dcw.incl.pl1 >ldd>include>iom_dcw.incl.pl1 3192 16 05/06/74 1742.1 iom_pcw.incl.pl1 >ldd>include>iom_pcw.incl.pl1 3194 17 05/27/82 1525.8 pvt.incl.pl1 >ldd>include>pvt.incl.pl1 3196 18 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1 3198 19 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 3200 20 10/21/86 1251.6 tape_error_interp.incl.pl1 >ldd>include>tape_error_interp.incl.pl1 3202 21 04/29/76 1050.5 vol_map.incl.pl1 >ldd>include>vol_map.incl.pl1 3204 22 05/27/82 1525.9 vtoc_map.incl.pl1 >ldd>include>vtoc_map.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ALL_PARTS 000040 constant char(4) initial packed unaligned dcl 3021 ref 310 318 1957 ANNOUNCE 000171 constant fixed bin(17,0) initial dcl 19-7 set ref 253* 267* 276* 298* 332* 380* 437* 522* 591* 596* 632* 685* 745* 748* 757* 1047* 1159* 1223* 1252* 1255* 1261* 1267* 1274* 1286* 1291* 1408* 1534* 1599* 1617* 1773* 1795* 1805* 1812* 1816* 1842* 1853* 1915* 1957* 1982* 2009* 2519* 2577* 2601* 2607* 2613* 2656* 2701* 2707* 2747* 2772* 2909* 2946* ANY_DENSITY constant bit(5) initial packed unaligned dcl 3022 ref 194 AUTO_READ_RETRY constant bit(6) initial packed unaligned dcl 3023 ref 1724 BACKSPACE 000027 constant bit(6) initial packed unaligned dcl 3073 set ref 695 1591* 1592* 1895 BAD constant bit(1) initial dcl 3024 ref 2681 2682 BEEP 000173 constant fixed bin(17,0) initial dcl 19-7 set ref 833* 853* 938* 963* 1131* 1369* 1371* 1374* 1731* 2213* 2219* 2225* 2234* 2249* 2376* 2389* 2788* 2889* C1_PATTERN 000037 constant bit(36) initial packed unaligned dcl 3025 ref 2273 2681 CENTRAL_STAT constant fixed bin(17,0) initial dcl 20-57 ref 615 CHAN_STAT constant fixed bin(17,0) initial dcl 20-56 ref 611 CONTINUE_NO_MARKER constant bit(2) initial packed unaligned dcl 3026 ref 698 708 1742 1898 2806 2824 CRASH 000202 constant fixed bin(17,0) initial dcl 19-7 set ref 585* 1089* 1108* 2108* 2445* DEFAULT_IDCW constant bit(36) initial packed unaligned dcl 3027 ref 674 1120 1738 2820 DEV_ATTENTION constant bit(4) initial packed unaligned dcl 3028 ref 2481 DEV_READY constant bit(4) initial packed unaligned dcl 3029 ref 2458 DEV_STANDBY constant bit(6) initial packed unaligned dcl 3030 ref 2482 DEV_SURVEY_DATA_SIZE constant fixed bin(17,0) initial dcl 3031 ref 2369 DEV_WRITE_PROTECTED constant bit(6) initial packed unaligned dcl 3033 ref 2460 DEV_WRITE_PROTECT_MASK constant bit(6) initial packed unaligned dcl 3034 ref 2460 DISK_BUSY constant fixed bin(17,0) initial dcl 3088 set ref 806 867 867* 931 931* 956 956* 1706 2733 DISK_QUEUED constant fixed bin(17,0) initial dcl 3087 set ref 876 876* 923 923* 948 948* 1485 1543 1628 DISK_READY constant fixed bin(17,0) initial dcl 3089 set ref 849 856 967 972 972* 1654 1654* DISK_SUSPEND constant fixed bin(17,0) initial dcl 3086 ref 1082 ERASE constant bit(6) initial packed unaligned dcl 3074 ref 705 FAULT_INTERRUPT constant fixed bin(17,0) initial dcl 3036 ref 589 FIRST_READ_RETRY_CMD constant fixed bin(17,0) initial dcl 3037 ref 726 FIRST_TAPE_DEV_IDX constant fixed bin(17,0) initial dcl 3039 ref 245 264 278 1405 FORWARD_SPACE_FILE 000026 constant bit(6) initial packed unaligned dcl 3075 set ref 1184* 1526* 1590* FREE constant fixed bin(17,0) initial dcl 3085 ref 478 809 909 1025 1038 1044 1081 1100 GOOD constant bit(1) initial dcl 3040 ref 2684 IDCW 000036 constant bit(3) initial packed unaligned dcl 3041 ref 697 707 1723 1897 2781 IO_COMPLETE constant fixed bin(17,0) initial dcl 1-30 ref 980 2561 2721 IO_OUTSTANDING 000202 constant fixed bin(17,0) initial dcl 1-29 set ref 2443* LABEL_ADDR constant fixed bin(17,0) initial dcl 9-54 ref 2053 2931 LAST_READ_RETRY_CMD constant bit(6) initial packed unaligned dcl 3042 ref 728 MAX_BUFFERS constant fixed bin(17,0) initial dcl 3043 ref 2228 2242 MAX_READ_RETRY constant fixed bin(17,0) initial dcl 3044 ref 726 MTH_TO_READY constant bit(8) initial packed unaligned dcl 3045 ref 1385 NO constant bit(1) initial dcl 3046 ref 76 132 169 219 307 312 313 325 327 347 374 377 421 424 427 430 436 456 466 467 480 507 575 576 577 603 661 681 753 763 770 823 834 851 896 903 914 916 920 922 928 930 943 945 953 955 969 971 975 977 987 995 999 1001 1007 1009 1152 1166 1377 1382 1416 1443 1446 1460 1479 1537 1602 1619 1623 1624 1674 1680 1686 1690 1768 1836 1940 1941 1971 1975 1995 1996 2023 2127 2128 2129 2177 2321 2351 2361 2394 2457 2464 2477 2478 2479 2484 2486 2569 2570 2586 2638 2666 2667 2668 NON_DATA_XFER constant bit(6) initial packed unaligned dcl 3049 ref 699 709 1899 NO_CONTINUE_NO_MARKER constant bit(2) initial packed unaligned dcl 3047 ref 1055 OFF constant bit(1) initial dcl 3050 ref 1484 1641 2075 2090 2102 2844 ON constant bit(1) initial dcl 3051 ref 733 1747 1905 2811 2829 ONE_RECORD constant bit(6) initial packed unaligned dcl 3052 ref 700 710 ONE_WEEK 000034 constant fixed bin(71,0) initial dcl 3053 ref 1222 PAGE_SIZE constant fixed bin(17,0) initial dcl 9-67 ref 1784 1784 1801 2064 2064 2070 2899 2899 2901 POWER_OFF constant fixed bin(17,0) initial dcl 20-55 ref 607 759 PV_PART constant fixed bin(17,0) initial dcl 4-88 set ref 1350* 1461 1503 1566 1580 1875 1881 1994* 2120 2147 2156 2165 2285 2772 PV_PREAMBLE constant fixed bin(17,0) initial dcl 4-82 set ref 1191 1948* 2595* 2754* 2794 PV_RECORD constant fixed bin(17,0) initial dcl 4-86 ref 1566 1615 1874 1883 2149 PV_VTOC constant fixed bin(17,0) initial dcl 4-84 set ref 1344* 1566 1621 1873 2151 QUEUE_THRESHOLD constant fixed bin(17,0) initial dcl 3054 ref 2626 READ_BINARY constant bit(6) initial packed unaligned dcl 3076 ref 1721 REQUEST_STATUS constant bit(6) initial packed unaligned dcl 3077 set ref 1124 2476* REWIND constant bit(6) initial packed unaligned dcl 3078 set ref 675 2021* SPECIAL_ARRIVED constant fixed bin(17,0) initial dcl 1-32 ref 2699 SPECIAL_INTERRUPT constant fixed bin(17,0) initial dcl 3055 ref 590 STATUS_MASK 000033 constant bit(36) initial packed unaligned dcl 3056 ref 599 2480 SURVEY_IDCW 000032 constant bit(36) initial packed unaligned dcl 3057 ref 2363 SYS_FAULT constant fixed bin(17,0) initial dcl 20-58 ref 589 TAPE_BUSY constant fixed bin(17,0) initial dcl 3092 set ref 715 905 905* 984 1002 1002* 1682 1735 2559 2559* 2792 TAPE_EOR constant fixed bin(17,0) initial dcl 4-80 set ref 1183 2275 2278 2619 2794 2847* TAPE_LABEL constant fixed bin(17,0) initial dcl 4-78 set ref 1794* 2278 2794 2904* TAPE_LABEL_TITLE 000010 constant char(32) initial packed unaligned dcl 4-72 ref 2314 TAPE_LABEL_VERSION_1 000006 constant char(8) initial packed unaligned dcl 4-73 ref 1804 2313 TAPE_QUEUED constant fixed bin(17,0) initial dcl 3091 set ref 901 978 978* 1057 1642 1656 1678 2626* 2632 2632* 2799 2799* TAPE_READY constant fixed bin(17,0) initial dcl 3093 set ref 911 917 917* 1188 1354 1497 1497* 1688 2620 TAPE_SUSPEND constant fixed bin(17,0) initial dcl 3090 ref 1101 TDCW constant bit(2) initial packed unaligned dcl 3058 ref 732 1746 1904 2810 2828 TERMINATE_INTERRUPT constant fixed bin(17,0) initial dcl 3059 ref 2478 TWO_MINUTES 000004 constant fixed bin(71,0) initial dcl 2693 ref 2697 TWO_RECORDS constant bit(6) initial packed unaligned dcl 3060 ref 1900 UNLOAD 000024 constant bit(6) initial packed unaligned dcl 3081 set ref 2665* VOLMAP_ADDR constant fixed bin(17,0) initial dcl 9-54 ref 2066 VTOCES_PER_WORD constant fixed bin(17,0) initial dcl 3061 ref 2094 2094 2095 WAITING_SPECIAL 000173 constant fixed bin(17,0) initial dcl 1-31 set ref 672* 684 744* 747 1378* 1381 2020* 2662* WRITE_BINARY constant bit(6) initial packed unaligned dcl 3079 ref 2779 WRITE_EOF 000025 constant bit(6) initial packed unaligned dcl 3080 set ref 994* 2637* 2746* 2841* 2853* 2854* 2855* YES constant bit(1) initial dcl 3062 ref 83 131 177 179 195 210 257 308 309 316 323 372 381 388 408 423 463 478 523 535 668 679 849 858 898 1041 1043 1050 1163 1199 1233 1236 1256 1281 1284 1388 1444 1463 1471 1504 1513 1523 1527 1541 1545 1552 1557 1559 1572 1575 1605 1610 1615 1630 1658 1676 1793 1961 1970 1972 1979 1980 2113 2179 2275 2359 2459 2462 2475 2480 2482 2520 2582 2664 2750 2760 2761 2843 2891 2897 2914 2918 addr builtin function dcl 3095 ref 85 92 93 94 95 103 188 191 247 270 302 303 339 383 435 584 628 635 636 673 677 677 693 701 703 711 716 716 716 735 735 760 787 789 791 794 1054 1057 1057 1121 1127 1128 1136 1136 1198 1264 1412 1517 1584 1719 1739 1743 1745 1860 1880 1893 1901 1903 1907 1907 1946 1952 2049 2101 2211 2216 2217 2223 2232 2241 2326 2355 2364 2367 2368 2372 2373 2381 2381 2392 2408 2422 2424 2426 2429 2698 2706 2706 2707 2707 2720 2776 2805 2807 2809 2818 2821 2825 2827 addrel builtin function dcl 3095 ref 623 629 630 635 636 1801 2070 2252 2254 2259 2260 2901 address based bit(18) level 2 in structure "tdcw" packed packed unaligned dcl 15-14 in procedure "bce_save" set ref 731* 1745* 1903* 2809* 2827* address based bit(18) level 2 in structure "dcw" packed packed unaligned dcl 15-7 in procedure "bce_save" set ref 2368* after builtin function dcl 3095 ref 513 530 all 25(18) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 307* 2059 2074 all_parts 25(20) based bit(1) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save" set ref 318 318* all_parts 25(20) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" set ref 310* 2008 2328 arg based char packed unaligned dcl 3005 set ref 139 147* 151 155* 158 163 171 171 171 179 179 180 180 193 198* arg_count 000101 automatic fixed bin(17,0) dcl 2967 set ref 117* 123* 125 133 arg_list_ptr 16 based pointer level 2 dcl 2-15 set ref 117* 134* 182* arg_lth 000102 automatic fixed bin(21,0) dcl 2968 set ref 134* 139 146 147 147 151 155 155 158 163 171 171 171 179 179 180 180 182* 193 198 198 arg_ptr 000104 automatic pointer dcl 2969 set ref 134* 139 147 151 155 158 163 171 171 171 179 179 180 180 182* 193 198 argx 000100 automatic fixed bin(17,0) dcl 2966 set ref 133* 134* 181* 181 182* array 50 based fixed bin(71,0) level 2 dcl 17-13 set ref 2216 attached 20(01) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 208 249 261 272 456* 463* 834* 1414 backspace 0(23) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 670 692 2511 2536 bad_density 0(22) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 641 bad_density_status 000106 automatic bit(1) packed unaligned dcl 2970 set ref 577* 641* 664 1789 2908 bad_dev 0(24) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 763 base_add 1 based fixed bin(17,0) level 2 dcl 21-5 ref 2095 bce_ioi_post_seg$ 000122 external static fixed bin(17,0) dcl 1-11 set ref 2232 bce_query 000016 constant entry external dcl 3111 ref 509 1294 2500 bce_query$yes_no 000020 constant entry external dcl 3112 ref 342 368 1825 bce_save_util_$display_info_tape 000022 constant entry external dcl 3113 ref 212 bce_save_util_$init_buffers 000024 constant entry external dcl 3115 ref 209 273 420 1415 bce_save_util_$ioi_attach 000026 constant entry external dcl 3117 ref 457 2358 bce_save_util_$is_fips_device 000030 constant entry external dcl 3119 ref 459 bce_save_util_$last_vtoc_used 000032 constant entry external dcl 3121 ref 2061 bce_save_util_$locate_tape_number 000034 constant entry external dcl 3123 ref 1320 bce_save_util_$premount_check 000036 constant entry external dcl 3125 ref 1861 bce_save_util_$read_pv_label 000040 constant entry external dcl 3127 ref 2331 bce_save_util_$scan_control_file 000042 constant entry external dcl 3129 ref 225 bce_save_util_$scan_survey_data 000044 constant entry external dcl 3131 ref 2385 bce_save_util_$setup_all_parts 000046 constant entry external dcl 3133 ref 2328 bce_save_util_$skip_tape_device 000050 constant entry external dcl 3135 ref 1382 bce_save_util_$sort_pv_list 000052 constant entry external dcl 3137 ref 2303 bce_save_util_$thread_partition_list 000054 constant entry external dcl 3139 ref 336 begins_on_tape 21 based fixed bin(18,0) array level 3 packed packed unsigned unaligned dcl 4-49 set ref 2162* 2172* bin builtin function dcl 3095 ref 454 619 655 656 656 676 677 677 689 689 696 706 716 716 726 735 735 737 737 1057 1057 1123 1127 1128 1136 1136 1218 1321 1722 1741 1749 1749 1852 1896 1903 1907 1907 2365 2369 2372 2373 2381 2381 2780 2804 2823 2831 2831 bit builtin function dcl 3095 ref 676 696 706 716 726 1123 1722 1741 1896 1903 2365 2369 2448 2780 2823 bit_map 100 based bit(36) array level 2 in structure "vol_map" dcl 21-5 in procedure "bce_save" ref 2092 2095 bit_map based bit(110592) packed unaligned dcl 3007 in procedure "bce_save" set ref 2050* 2051* 2051 2075* 2082* 2082 2090* 2095* 2102* 2106 2106 2107 2107 2138 2138 2874 2874 bit_map_n_words 3 based fixed bin(17,0) level 2 dcl 21-5 ref 2092 bit_map_ptr 2 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* bit_map_ptr 2 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 2050 2051 2051 2075 2082 2082 2090 2095 2102 2106 2106 2107 2107 2138 2138 2256* 2260* 2874 2874 bitmask 0(06) based bit(6) array level 2 packed packed unaligned dcl 20-24 set ref 625 bitson based bit(6) array level 2 packed packed unaligned dcl 20-24 set ref 625 bootload_disk_io$queue_read 000056 constant entry external dcl 3141 ref 1708 bootload_disk_io$queue_write 000060 constant entry external dcl 3143 ref 2735 bootload_disk_io$test_done 000062 constant entry external dcl 3145 ref 807 850 925 935 950 960 bootload_disk_post_seg$ 000124 external static fixed bin(17,0) dcl 6-8 set ref 2223 buf_count 027570 automatic fixed bin(17,0) dcl 487 set ref 491* 494* 494 496 buf_listx 12 based fixed bin(17,0) level 2 dcl 3-215 set ref 477 492 655 713 803 866 875 899 982 1080 1099 1435 1496 1653 1677 2558 2631 2798 buf_num parameter fixed bin(17,0) dcl 2405 in procedure "SET_IOI_POST_BUF" ref 2403 2408 buf_num parameter fixed bin(17,0) dcl 2694 in procedure "WAIT_FOR_SPECIAL" ref 2691 2698 buf_num parameter fixed bin(17,0) dcl 2718 in procedure "WAIT_FOR_STATUS" ref 2716 2720 buf_state parameter fixed bin(17,0) dcl 2406 ref 2403 2411 buffer 10 based structure array level 2 dcl 1-13 set ref 2408 2698 2720 byte3 0(28) based bit(8) level 2 packed packed unaligned dcl 12-14 ref 1385 c1 12 based bit(36) level 3 dcl 3-24 set ref 2273* 2681 central_stat 0(21) based bit(3) level 2 packed packed unaligned dcl 13-5 ref 614 616 cf_array 000134 automatic structure array level 1 dcl 2972 set ref 92 97* 142 150* 151 cf_arrayp 2 based pointer level 2 dcl 3-169 set ref 92* cf_count 4 based fixed bin(17,0) level 2 dcl 3-169 set ref 141* 141 142 150 151 154 224 cf_info based structure level 1 dcl 3010 cfx 5 based fixed bin(17,0) level 2 dcl 3-169 set ref 146 151* 151 151* 154 158 159 160 161 224* 224* 225* chan_cmd 0(24) based bit(6) level 2 packed packed unaligned dcl 16-21 set ref 699* 709* 726* 728* 1724* 1899* channel_stat 0(18) based bit(3) level 2 packed packed unaligned dcl 13-5 ref 610 612 checking_rew_status 027654 automatic bit(1) dcl 563 set ref 576* 601 679* 681* chr 0(09) based char level 2 packed packed unaligned dcl 20-49 set ref 632* 632* 757* 757* cleanup 027260 stack reference condition dcl 3099 ref 114 clock builtin function dcl 3095 ref 810 857 913 968 1026 1083 1102 1189 1222 1355 1434 1486 1544 1629 1643 1657 1707 1736 2316 2621 2697 2700 2734 2793 2895 code 0(18) based bit(3) level 2 in structure "idcw" packed packed unaligned dcl 16-21 in procedure "bce_save" set ref 697* 707* 1723* 1897* 2781* code 000734 automatic fixed bin(35,0) dcl 2973 in procedure "bce_save" set ref 117* 118 119* 134* 135 136* 182* 183 184* 754* 807* 808 817* 832* 833 833* 850* 851 852 853* 925* 926 933* 934 935* 936 936 938* 950* 951 958* 959 960* 961 961 963* 1129* 1130 1131* 1708* 1729* 1730 1731* 2246* 2248 2249* 2374* 2375 2376* 2387* 2388 2389* 2444* 2445 2445* 2735* 2786* 2787 2788* com_err_ 000064 constant entry external dcl 3147 ref 119 136 184 command based bit(6) level 2 packed packed unaligned dcl 16-21 set ref 675* 695* 705* 1122* 1721* 1740* 1895* 2779* 2822* command_to_issue parameter bit(6) packed unaligned dcl 1117 ref 1115 1122 1124 complete 66 024274 automatic bit(1) array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 386 521 523* 534 complete 66 based bit(1) level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 219* 353 381* 433 1256* 2275 2307 2520* complete 25(22) based bit(1) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save" set ref 360 427* 1233* 1251 1259 1281* complete 14 based bit(1) array level 2 in structure "part_array" packed packed unaligned dcl 3-43 in procedure "bce_save" set ref 430* 1236* 1284* 1520 1554 1607 complete 25(22) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" set ref 312* 353 1043* 1523* 1557* 1572* 1575* 1610* 1989 2006 2113* 2134 2187 2327 complete 14 based bit(1) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save" set ref 1041* 1519 1552* 1605* 1961* completion 2 based structure level 3 in structure "survey_ws" dcl 3-194 in procedure "bce_save" completion based structure level 2 in structure "istat" dcl 14-7 in procedure "bce_save" completion 6 based structure level 3 in structure "stat_ws" dcl 3-187 in procedure "bce_save" control 0(22) based bit(2) level 2 packed packed unaligned dcl 16-21 set ref 698* 708* 1055* 1742* 1898* 2806* 2824* controller_attached 030330 automatic bit(1) packed unaligned dcl 2348 set ref 2359* 2361* 2386 2394* convert builtin function dcl 3095 ref 2873 count 0(30) based bit(6) level 2 packed packed unaligned dcl 16-21 set ref 700* 710* 1124* 1900* cu_$arg_count_rel 000066 constant entry external dcl 3148 ref 117 cu_$arg_ptr_rel 000070 constant entry external dcl 3149 ref 134 182 current_density 000030 constant bit(5) initial array packed unaligned dcl 3064 ref 1780 current_rec_in_area 26 based fixed bin(18,0) level 2 dcl 3-92 set ref 2117* 2124* 2148* 2168* 2174* 2174 2175* 2877 current_region 16 based fixed bin(17,0) level 2 dcl 4-49 set ref 1464* 1464* 1467 1472* 1472* 1475 1475 1477* 2151* 2151* 2156* 2156* 2162 2169* 2169* 2172 data 12 based structure level 2 dcl 3-194 set ref 2368 datap 4 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* datap 4 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 1085* 1104* 1192 1193 1353 1801 2057 2070 2751 2844 2901 2935 2949 datax 4 based bit(18) level 2 packed packed unaligned dcl 3-24 ref 1085 1104 1708 1708 2735 2735 date_time_ 000072 constant entry external dcl 3150 ref 1811 date_time_string 000735 automatic char(24) packed unaligned dcl 2974 set ref 1811* 1812* dcw based structure level 1 dcl 15-7 in procedure "bce_save" dcw 1 based bit(36) level 2 in structure "survey_ws" dcl 3-194 in procedure "bce_save" set ref 2367 dcwp 027336 automatic pointer dcl 15-4 set ref 2367* 2368 2369 debug 6(01) based bit(1) level 3 packed packed unaligned dcl 3-169 set ref 179* 631 2701 2707 debug_based_block based bit(36) array packed unaligned dcl 3016 set ref 635* 636* densities_available 20(23) based bit(5) level 2 packed packed unaligned dcl 3-215 set ref 1781 density 20(18) based bit(5) level 2 packed packed unaligned dcl 3-215 set ref 194* 1780* 1781 density_command 20(12) based bit(6) level 2 packed packed unaligned dcl 3-215 set ref 1740 1779* 2822 density_commands 000031 constant bit(6) initial array packed unaligned dcl 3063 ref 1769 1779 density_idx 000743 automatic fixed bin(17,0) dcl 2975 set ref 1769* 1770* 1770 1772 1779 1780 density_set 20(08) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 467* 670 1737 1768* 1793* 2023* 2496 2668* 2819 2914* detailed_status 027655 automatic bit(216) packed unaligned dcl 564 set ref 754* 760 detailed_status_array based bit(8) array packed unaligned dcl 565 set ref 760* device 20 based char(8) level 2 in structure "pv" dcl 3-68 in procedure "bce_save" set ref 305* 2009* device 0(06) based bit(6) level 2 in structure "idcw" packed packed unaligned dcl 16-21 in procedure "bce_save" set ref 676* 696* 706* 1123* 1722* 1741* 1896* 2365* 2780* 2823* device 20 based char(8) array level 2 in structure "pv_array" dcl 3-65 in procedure "bce_save" set ref 1252* 1261* 1267* 1286* 1291* device 2 based fixed bin(17,0) level 2 in structure "tcb" dcl 3-215 in procedure "bce_save" set ref 454* 676 696 706 1123 1722 1741 1896 2357* 2365 2780 2823 device 11 based char(8) level 2 in structure "part" dcl 3-46 in procedure "bce_save" ref 305 disk_buffer_post based structure level 1 dcl 6-10 disk_post_area based structure level 1 dcl 6-16 disk_post_area_ptr 027324 automatic pointer dcl 6-19 set ref 101* 820 820 2223* 2224 2228 2230 disk_post_buf 5 based fixed bin(17,0) level 2 dcl 3-24 set ref 807* 850* 925* 935* 950* 960* 1708* 2735* display_info_tape 000744 automatic bit(1) packed unaligned dcl 2976 set ref 132* 195* 203 1763 1774 1804 1812 1815 1838 2656 display_pv_record 67 based bit(1) level 2 dcl 3-92 set ref 1199* 1533 1537* 1597 1602* 1616 1619* 1940* divide builtin function dcl 3095 ref 1784 2064 2899 doing_restore 6 based bit(1) level 3 packed packed unaligned dcl 3-169 set ref 90* done 000745 automatic bit(1) packed unaligned dcl 2977 set ref 347* 348 388* end_of_file 0(20) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 640 end_of_file_status 000746 automatic bit(1) packed unaligned dcl 2978 set ref 577* 640* 664 909 1157 1911 2575 end_of_part 13(19) based bit(1) level 4 packed packed unaligned dcl 3-24 set ref 1041 1460* 1463* 1539 1588 1604 2794 end_of_pv 13(20) based bit(1) level 4 packed packed unaligned dcl 3-24 set ref 1043 1471* 1479* 1575 2794 end_of_set 13(18) based bit(1) level 4 packed packed unaligned dcl 3-24 set ref 2275* end_of_tape 0(21) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 639 654 664 ends_on_tape 21(18) based fixed bin(18,0) array level 3 packed packed unsigned unaligned dcl 4-49 set ref 1467* 1475* eot 20(10) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 421* 639 639* 1053 1167 1416* 2565 2587 2794 error_table_$not_done 000010 external static fixed bin(35,0) dcl 3104 ref 808 851 936 961 error_table_$seg_not_found 000012 external static fixed bin(35,0) dcl 3106 set ref 2213* 2219* 2225* 2234* ev_chn based fixed bin(71,0) level 2 dcl 1-18 set ref 2410* expect_special 0(19) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 743 fb71 000750 automatic fixed bin(71,0) dcl 2979 set ref 2316* 2317 find_bit_$first_off 000116 constant entry external dcl 3163 ref 2106 2138 2874 find_bit_$last_off 000120 constant entry external dcl 3164 ref 2107 find_start_of_part 70 based bit(1) level 2 dcl 3-92 set ref 1504* 1513* 1527* 1559* 1972* 1975* 1992 1995* fips 20(03) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 459* 2353 first_disk_post_buf 27 based fixed bin(17,0) level 2 dcl 3-92 set ref 2242* first_rec 30 based fixed bin(18,0) level 2 dcl 3-92 set ref 2106* 2108 2111 2116* 2130 flags 22 based structure level 2 in structure "ss_info" dcl 2-15 in procedure "bce_save" flags 20 based structure level 2 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save" flags 13(18) based structure level 3 in structure "iob" packed packed unaligned dcl 3-24 in procedure "bce_save" set ref 1352* flags 6 based structure level 2 in structure "sri" packed packed unaligned dcl 3-169 in procedure "bce_save" flags 20 based structure array level 2 in structure "tcb_array" packed packed unaligned dcl 3-211 in procedure "bce_save" flags 4(18) based structure level 2 in structure "iob" packed packed unaligned dcl 3-24 in procedure "bce_save" flushed 027716 automatic bit(1) packed unaligned dcl 894 set ref 896* 897 898* 903* 914* 916* 920* 922* 928* 930* 943* 945* 953* 955* 969* 971* 975* 977* 987* 999* 1001* 1007* 1009* force_tape_run 000752 automatic bit(1) packed unaligned dcl 2980 set ref 1970* 2127* 2177* 2179* 2626 frec 14(18) based fixed bin(17,0) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save" ref 1347 1532 1875 1881 2102 frec 1005 based fixed bin(17,0) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save" set ref 1964 1965 2082 2082 2946* 2951 gcos based fixed bin(17,0) array level 2 dcl 4-68 set ref 1976 1981 2062* get_detail 0(18) based bit(1) level 2 packed packed unaligned dcl 20-30 ref 754 get_temp_segment_ 000074 constant entry external dcl 3151 ref 2246 have_detail 027663 automatic bit(1) dcl 567 set ref 753* 754* 760 hbound builtin function dcl 3095 ref 105 142 165 173 297 625 1769 head 12 based structure level 2 dcl 3-24 i 000753 automatic fixed bin(17,0) dcl 2981 set ref 278* 279 280* 386* 386* 388 514* 514* 516 521 522 523 526 531* 531* 533 534 535 538 1251* 1251* 1252 1252* 1259* 1259* 1261 1261* 1953* 1953* 1956 1964 1965 1965 1966 2064* 2066 2070* 2076* 2080 2082 2082 2082 2082* 2092* 2094 2095 2095* 2937* 2938 2938 2938 2943 2946 2946 2950 2951 2953* idcw 3 based bit(36) level 2 in structure "stat_ws" dcl 3-187 in procedure "bce_save" set ref 1120* 1121 1136 1136 1738* 1739 2820* 2821 idcw based bit(36) level 2 in structure "survey_ws" dcl 3-194 in procedure "bce_save" set ref 2363* 2364 2381 2381 idcw based structure level 1 dcl 16-21 in procedure "bce_save" set ref 674* 694* 704* 1720* 1894* 2778* idcw_offset parameter fixed bin(18,0) dcl 2441 set ref 2439 2444* 2448 idcw_word 6 based bit(36) level 2 dcl 3-24 set ref 716 716 1054 1057 1719 1745 1903 2776 2805 2809 2818 2827 idcwp 027342 automatic pointer dcl 16-19 set ref 673* 674 675 676 693* 694 695 696 697 698 699 700 703* 704 705 706 707 708 709 710 725* 726 728 1054* 1055 1121* 1122 1123 1124 1719* 1720 1721 1722 1723 1724 1739* 1740 1741 1742 1749 1749 1893* 1894 1895 1896 1897 1898 1899 1900 2364* 2365 2776* 2778 2779 2780 2781 2805* 2806 2818* 2821* 2822 2823 2824 2831 2831 imess based structure level 1 dcl 14-21 info_tape_label based structure level 1 dcl 4-12 set ref 1835* info_tape_label_ptr 6 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 788 2254* 2261* 2423 info_tape_label_ptr 6 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* info_tape_labelp 027314 automatic pointer dcl 4-11 set ref 788* 1835 1943 1943 1943 1946 2254* 2261* 2423* interp based bit(18) array level 2 packed packed unaligned dcl 20-17 ref 623 io_post_buffer based structure level 1 dcl 1-18 set ref 2409* io_post_buffer_ptr 027266 automatic pointer dcl 1-24 set ref 684 747 1381 2408* 2409 2410 2411 2698* 2699 2706 2707 2707 2720* 2721 io_special_status based structure level 1 dcl 12-14 io_special_status_ptr 027330 automatic pointer dcl 12-12 set ref 1385 2706* io_status_word based structure level 1 dcl 13-5 ref 632 632 759 759 io_status_word_ptr 027332 automatic pointer dcl 13-4 set ref 584* 606 610 612 614 616 619 620 632 632 759 759 2458 2460 2479 2481 2482 ioa_ 000076 constant entry external dcl 3152 ref 126 143 147 155 166 174 198 228 232 236 275 283 288 517 526 538 542 550 635 636 759 760 1304 2505 2512 2525 2533 2535 2536 2538 2545 iob based structure level 1 dcl 3-24 iob_eot_state 027734 automatic fixed bin(17,0) dcl 1035 set ref 1038* 1044 1056 1057* iob_hold_ptr 000754 automatic pointer dcl 2982 set ref 712* 722 981* 986 991 1037* 1066 1546* 1548 2771* 2816 iobp 027272 automatic pointer dcl 3-23 set ref 96* 477* 477* 478* 479 712 713* 713* 715 716 716 716* 721 722* 803 803* 803* 806 807 809 810* 813 849 850 856 857 866* 866* 867 867* 869* 873 875* 875* 876 876* 878* 882 899* 899* 901 905 905* 909 911 913 917 917* 923 923* 925 931 931* 935 948 948* 950 956 956* 960 967 968 972 972* 978 978* 981 982* 982* 984 986* 990 991* 992 1002 1002* 1011 1025 1026 1037 1040* 1040 1040* 1041 1043 1046 1047 1054 1056 1057 1057 1062* 1065 1066* 1080* 1080* 1081 1082 1083 1084 1085* 1088 1099* 1099* 1100 1101 1102 1103 1104* 1107 1179 1182 1183 1188 1189 1190 1342 1343 1347 1348 1349 1352 1354 1355 1460 1463 1471 1479 1480 1481 1482 1483 1484 1485 1486 1496* 1496* 1497 1497* 1499 1503 1508 1509 1532 1532 1533 1534 1534 1539 1540 1542 1543 1544 1545 1546 1548* 1562 1566 1566 1566 1570 1575 1576 1580 1582 1585 1588 1597 1599 1599 1604 1615 1617 1621 1621 1628 1629 1630 1641 1642 1643 1653* 1653* 1654 1654* 1656 1657 1658 1659* 1662 1677* 1677* 1678 1682 1688* 1692 1706 1707 1708 1708 1708 1708 1719 1735 1736 1745 1834 1841 1849 1903 1911 1915 1915 2053 2066 2273 2274 2275 2277 2279 2280 2281 2284 2285 2287 2558* 2558* 2559 2559* 2563 2600 2606 2607 2611 2612 2613 2615 2619 2620 2621* 2625 2631* 2631* 2632 2632* 2634 2635* 2645 2681 2682 2733 2734 2735 2735 2735 2735 2750 2752 2752 2753 2771 2772 2772 2772 2772 2776 2792 2793 2794 2794 2794 2794 2794 2797 2798* 2798* 2799 2799* 2801 2804 2809* 2815 2816* 2818 2827 2843 2845 2845 2846 2897 2898 2898 2903 2931 2951 2952 2953 ioi_assignment$unassign 000100 constant entry external dcl 3153 ref 832 2387 ioi_connect 000102 constant entry external dcl 3155 ref 2444 ioi_ev_chn 4 based fixed bin(71,0) level 2 dcl 3-215 set ref 2410 ioi_get_status$detailed_status 000104 constant entry external dcl 3156 ref 754 ioi_index 3 based fixed bin(17,0) level 2 dcl 3-215 set ref 415 754* 802 832* 835* 1129* 1397 1729* 2374* 2387* 2444* 2786* ioi_post_area based structure level 1 dcl 1-13 set ref 2237* ioi_post_area_ptr 027270 automatic pointer dcl 1-25 set ref 102* 822 822 980 2232* 2233 2237 2238 2408 2561 2698 2720 ioi_set$status 000106 constant entry external dcl 3158 ref 1129 1729 2374 2786 ioi_spec_post_buf 33 based fixed bin(17,0) level 2 dcl 3-92 set ref 672* 683* 744* 746* 1378* 1380* 2020* 2022* 2245* 2662* ioi_statusx 34 based fixed bin(18,0) level 2 dcl 3-92 set ref 579 580 583 836* 1127 1128* 1129* 1726 1727* 1729* 2372 2373* 2374* 2395* 2783 2784* 2786* ioi_term_post_buf 32 based fixed bin(17,0) level 2 dcl 3-92 set ref 658* 678* 740* 907* 980 1004* 1137* 1155* 1683* 1787* 1908* 2244* 2382* 2443* 2561 2756* 2849* 2906* iom_stat 4 based bit(72) level 2 dcl 14-7 set ref 584 591 591 599 2480 isp 027334 automatic pointer dcl 14-5 set ref 580* 580 583* 584 585 589 590 591 591 595 599 635 636 655 716 716 1057 1057 2478 2480 istat based structure level 1 dcl 14-7 set ref 580 635 636 j 000756 automatic fixed bin(17,0) dcl 2983 set ref 2950* 2951 2952* label based structure level 1 dcl 5-18 ref 2254 2259 labelp automatic pointer dcl 5-16 ref 2254 2259 last_idcwx 71 based bit(18) level 2 dcl 3-92 set ref 656 656 689 689 716* 725 731 737 737 2448* last_rec 35 based fixed bin(18,0) level 2 dcl 3-92 set ref 1470 2107* 2108 2112 2138 2138 2874 2874 last_used_vtoc_record 37 based fixed bin(18,0) level 2 dcl 3-92 set ref 2059* 2061* 2062 2090 lbound builtin function dcl 3095 ref 105 151 216 243 290 292 329 349 360 386 425 429 514 531 625 782 1195 1229 1231 1246 1251 1259 1271 1280 1464 1472 1943 1953 2045 2076 2092 2151 2156 2169 2239 2324 2937 length builtin function dcl 3095 in procedure "bce_save" ref 146 281 length 11 000134 automatic fixed bin(21,0) array level 2 in structure "cf_array" dcl 2972 in procedure "bce_save" set ref 160* level 1 based fixed bin(3,0) level 2 dcl 14-7 set ref 589 590 2478 lrec 15 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 ref 1540 1562 1875 1881 lth based fixed bin(8,0) level 2 packed packed unaligned dcl 20-49 ref 632 632 632 632 757 757 757 757 ltrim builtin function dcl 3095 ref 1294 1294 1534 1534 1599 1599 1617 1617 1812 1812 2601 2601 2607 2607 2656 2656 2747 2747 2772 2772 2889 2889 major 0(02) based bit(4) level 2 packed packed unaligned dcl 13-5 ref 619 2458 2481 majstat 027664 automatic fixed bin(5,0) dcl 568 set ref 589* 607* 611* 615* 619* 623 629 759 max_retries 0(12) based fixed bin(5,0) level 2 packed packed unaligned dcl 20-30 ref 667 2496 message 2 based fixed bin(71,0) level 2 dcl 1-18 set ref 2706 2707 2707 min builtin function dcl 3095 ref 2094 mjsdp 027666 automatic pointer dcl 569 set ref 629* 632 757 mod builtin function dcl 3095 ref 581 mount_requested 20(05) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 1367 1377* 2891* my_name 000760 automatic char(8) packed unaligned dcl 2984 set ref 77* 84* 91 119* 126* 136* 143* 147* 155* 166* 174* 184* 198* 228* 232* 236* 253* 267* 276* 298* 332* 332* 342* 368* 380* 380* 437* 437* 509* 522* 522* 526* 526* 538* 538* 542* 542* 542* 591* 596* 685* 745* 748* 757* 817* 833* 853* 938* 963* 1047* 1131* 1159* 1223* 1252* 1255* 1255* 1261* 1267* 1274* 1286* 1291* 1294* 1304* 1369* 1371* 1374* 1408* 1534* 1599* 1617* 1731* 1773* 1795* 1805* 1812* 1816* 1825* 1842* 1853* 1915* 1957* 1982* 2009* 2213* 2219* 2225* 2234* 2246* 2249* 2376* 2389* 2500* 2505* 2512* 2519* 2519* 2525* 2533* 2538* 2538* 2538* 2577* 2601* 2607* 2613* 2656* 2747* 2772* 2788* 2889* 2909* 2946* n_rec based fixed bin(17,0) level 2 dcl 21-5 ref 2094 name based char(4) level 2 in structure "part" dcl 3-46 in procedure "bce_save" set ref 310 1349 1508 1582 1585 1953 1957 1957* 2120 2147 2165 2167 name based char(32) level 2 in structure "pv" dcl 3-68 in procedure "bce_save" set ref 304* 853* 938* 963* 1192 1195 1599* 1617* 1875 1943 1957* 1982* 2045 2108* 2946* name based char(8) level 2 in structure "tcb" dcl 3-215 in procedure "bce_save" set ref 193* 253* 368* 437* 454 596* 632* 745* 757* 833* 1131* 1294* 1369* 1371* 1374* 1534* 1599* 1617* 1731* 1773* 1795* 1805* 1812* 1816* 1825* 1842* 2356* 2356 2376* 2389* 2445* 2525* 2601* 2607* 2656* 2707* 2747* 2772* 2788* 2889* 2909* name based char(8) array level 2 in structure "tcb_array" dcl 3-211 in procedure "bce_save" set ref 280 name based char(4) array level 2 in structure "part_array" dcl 3-43 in procedure "bce_save" set ref 298* 318 1509 2080 2943 name based char(32) array level 2 in structure "pv_array" dcl 3-65 in procedure "bce_save" set ref 292 1232 1247 1252* 1261* 1267* 1271 1280 1286* 1291* name 000134 automatic char(32) array level 2 in structure "cf_array" dcl 2972 in procedure "bce_save" set ref 146 151 158* namep 1 based bit(18) level 2 in structure "tape_error_interp" packed packed unaligned dcl 20-30 in procedure "bce_save" ref 630 namep 0(18) based bit(18) array level 2 in structure "tape_error_data" packed packed unaligned dcl 20-17 in procedure "bce_save" ref 629 need_info_tape 72 based bit(1) level 2 dcl 3-92 set ref 210* 323* 325* 372* 377* 1369 1823 1836* 2301 2867 need_zero_record 73 based bit(1) level 2 dcl 3-92 set ref 1541* 1624* 1971* 1980* 1996* 1998 2276 next_bufx based fixed bin(17,0) level 2 packed packed unaligned dcl 3-24 ref 479 495 721 813 873 882 990 1011 1088 1107 1442 1499 1662 1692 2625 2645 2815 next_idx 13(18) based fixed bin(17,0) array level 2 packed packed unaligned dcl 3-43 set ref 1237 1285 1511 1522 1556 1586 1609 1882 1968 2081 2103 2945 next_statex 0(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-24 set ref 1060* 1065 1084* 1103* 2804* next_tape_number 40 based fixed bin(17,0) level 2 dcl 3-92 ref 1171 1171 2591 2591 nparts 1003 based fixed bin(17,0) level 2 dcl 4-68 ref 1953 1956 2076 2937 nrec 15(18) based fixed bin(17,0) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save" ref 1461 2102 nrec 1006 based fixed bin(17,0) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save" ref 1965 1966 2082 2082 2950 nregions 15 based fixed bin(17,0) level 2 dcl 4-49 ref 1464 1472 1475 1477 2151 2156 2169 null builtin function dcl 3095 ref 96 101 102 108 116 161 801 803 817 820 822 823 1039 1060 1433 1443 2212 2218 2224 2233 2255 2256 2261 number based fixed bin(17,0) level 2 in structure "ioi_post_area" dcl 1-13 in procedure "bce_save" set ref 822* 2237 2238* number based fixed bin(17,0) level 2 in structure "disk_post_area" dcl 6-16 in procedure "bce_save" set ref 820* 2228* 2230 offset 2 based fixed bin(18,0) level 2 dcl 14-7 set ref 655 716 716 1057 1057 old_part_name 55 based char(4) level 2 packed packed unaligned dcl 3-92 set ref 2120* 2147* 2156 2165 2167* 2169 2175* old_rec_type 41 based fixed bin(17,0) level 2 dcl 3-92 set ref 2119* 2120 2123* 2144 2146* oldest_bufp 030070 automatic pointer dcl 1427 set ref 1433* 1439* 1443 1444 oldest_time 030072 automatic fixed bin(71,0) dcl 1428 set ref 1434* 1437 1440* one_eof 20(09) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 466* 1152* 1158 1163* 1166* 2576 2582* 2586* only_part 25(21) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 308* 1501 1972 2089 opr_input 000762 automatic char(128) packed unaligned dcl 2985 set ref 509* 510 510 511 512 513* 513 514 517* 529 530* 530 531 541 541 550* 1294* 1297 1297 1301 1301 1304* 2500* 2502 2503 2503 2510 2510 2518 2518 2523 2523 2530 2530 2530 2532 2532 2545* p9999 based picture(4) packed unaligned dcl 2864 ref 2873 p_buf_state parameter fixed bin(17,0) dcl 488 in procedure "BUFFER_COUNT" ref 485 494 p_buf_state parameter fixed bin(17,0) dcl 1429 in procedure "OLDEST_BUFFER" ref 1425 1437 p_bufp parameter pointer dcl 1430 ref 1425 1444 p_header_type parameter fixed bin(17,0) dcl 2679 in procedure "VALID_REC_HEADER" ref 2677 2682 2682 p_header_type parameter fixed bin(17,0) dcl 2271 in procedure "SETUP_REC_HEADER" ref 2269 2274 2275 2278 2278 2285 p_part parameter char(4) packed unaligned dcl 1457 ref 1452 1464 1483 p_rec_in_area parameter fixed bin(18,0) dcl 1456 ref 1452 1461 1482 p_rec_type parameter fixed bin(17,0) dcl 1149 in procedure "LOCATE_RECORD" ref 1147 1182 1191 p_rec_type parameter fixed bin(17,0) dcl 1454 in procedure "QUEUE_DISK_READ" ref 1452 1461 1480 p_recordx parameter fixed bin(18,0) dcl 1455 in procedure "QUEUE_DISK_READ" ref 1452 1470 1481 p_recordx parameter fixed bin(18,0) dcl 1871 in procedure "RECORD_TYPE" ref 1869 1873 1875 1875 1881 1881 page based bit(36) array dcl 3017 set ref 1193* 1193 1353* 1801* 1801 2057* 2057 2070* 2070 2751* 2751 2844* 2901* 2901 2935* 2935 2949* part 1004 based char(4) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save" set ref 1953 2080 2938 2938 2938 2943 2946* 2953 part based structure level 1 dcl 3-46 in procedure "bce_save" part_area 001023 automatic structure array level 1 dcl 2987 set ref 93 98* 789 2424 part_area_ptr 12 based pointer level 2 dcl 3-169 set ref 93* part_array based structure array level 1 dcl 3-43 set ref 290 303 429 1517 1584 1880 1952 2101 part_arrayp 027274 automatic pointer dcl 3-42 set ref 290 292 298 298 303 318 429 430 789* 1236 1237 1284 1285 1509 1511 1517 1520 1522 1554 1556 1584 1586 1607 1609 1880 1882 1952 1968 2080 2081 2101 2103 2424* 2943 2943 2945 part_count 42 based fixed bin(17,0) level 2 dcl 3-92 set ref 223* 235 290 429 part_idx 25 based fixed bin(17,0) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save" set ref 1234 1282 part_idx 25 based fixed bin(17,0) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" ref 1509 1520 1554 1583 1607 1878 1949 2078 2099 2942 part_name 20 based char(4) array level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save" ref 1464 1472 2151 2156 2169 part_name 20 based char(4) level 3 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 1349* 1483* 1508 1509 1534* 1582 1585 1599* 2281* 2285* 2772* 2953* part_ptr 10 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 303* 790 1517* 1584* 1880* 1952* 2101* 2425 part_ptr 10 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* part_requested 25(19) based bit(1) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save" set ref 316* part_requested 25(19) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" set ref 309* 1581 1874 1949 2078 2099 partp 027276 automatic pointer dcl 3-45 set ref 303* 304 305 306 310 790* 1041 1347 1349 1461 1508 1517* 1519 1532 1540 1552 1562 1582 1584* 1585 1605 1875 1875 1875 1880* 1881 1881 1952* 1953 1957 1957 1961 1961 1964 1965 1966 2101* 2102 2102 2120 2147 2165 2167 2425* parts 1004 based structure array level 2 dcl 4-68 set ref 1953 2076 2937 partx 001022 automatic fixed bin(17,0) dcl 2986 set ref 290* 292 298 298 303 318* 429* 430* 1234* 1234* 1236* 1237 1282* 1282* 1284* 1285 1509* 1509 1509* 1511 1512 1517 1520* 1520 1520* 1522 1523 1554* 1554 1554* 1556 1557 1583* 1583* 1584* 1586 1607* 1607 1607* 1609 1610 1878* 1878* 1880* 1882 1949* 1949* 1952* 1968 2078* 2078* 2080* 2081 2099* 2099* 2101* 2103 2942* 2942* 2943 2943* 2945 posted 1 based structure array level 2 dcl 6-16 set ref 2230* power 0(01) based bit(1) level 2 packed packed unaligned dcl 13-5 ref 606 2479 prev_iobp 011024 automatic pointer dcl 2988 set ref 1039* 1060 1060 1062* 2797* 2804 2805 2807 previous_rec 43 based fixed bin(18,0) level 2 dcl 3-92 set ref 2130* 2141 2142* ptr builtin function dcl 3095 in procedure "bce_save" ref 477 479 492 495 580 583 713 721 725 803 813 866 873 875 882 899 982 990 1011 1065 1080 1085 1088 1099 1104 1107 1435 1442 1496 1499 1653 1662 1677 1692 1708 1708 2558 2625 2631 2645 2735 2735 2798 2815 ptr 12 000134 automatic pointer array level 2 in structure "cf_array" dcl 2972 in procedure "bce_save" set ref 161* pv based structure level 1 dcl 3-68 pv_area 011026 automatic structure array level 1 dcl 2989 set ref 94 99* 791 2426 pv_area_ptr 14 based pointer level 2 dcl 3-169 set ref 94* pv_array based structure array level 1 dcl 3-65 set ref 292 297 302 329 339 360 383 425 435 1231 1246 1251 1259 1271 1280 2324 2326 pv_arrayp 027300 automatic pointer dcl 3-64 set ref 292 292 297 302 316 318 318 329 329 339 360 360 360 383 425 426 426 427 435 791* 1231 1232 1233 1234 1246 1247 1251 1251 1252 1252 1259 1259 1261 1261 1265 1266 1267 1267 1271 1271 1280 1280 1281 1282 1286 1286 1289 1290 1291 1291 2324 2326 2426* pv_count 44 based fixed bin(17,0) level 2 dcl 3-92 set ref 222* 235 292 295 296* 296 297 302 329 331 360 363 425 1231 1246 1251 1259 1271 1273 1280 2324 pv_name 1 based char(32) level 2 in structure "part" dcl 3-46 in procedure "bce_save" ref 304 1875 pv_name 1 based char(32) array level 2 in structure "part_array" dcl 3-43 in procedure "bce_save" set ref 292 298* pv_name 521 based char(32) level 2 in structure "label" dcl 5-18 in procedure "bce_save" ref 1192 pv_name 521 based char(32) level 2 in structure "vol_preamble" dcl 4-68 in procedure "bce_save" ref 2938 pv_ptr 12 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* pv_ptr 12 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 302* 339* 383* 435* 792 2326* 2427 pv_pvtx 13 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 ref 306 pv_record_detected 74 based bit(1) level 2 dcl 3-92 set ref 1606 1615 1615* 1941* pvid 10 based bit(36) level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save" ref 1947 pvid 15 based bit(36) level 3 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 1570 2279* 2284* pvid 541 based bit(36) level 2 in structure "vol_preamble" dcl 4-68 in procedure "bce_save" ref 2284 pvid_being_restored 75 based bit(36) level 2 dcl 3-92 set ref 1570 1938* 1947 1947* pvname 40 based char(32) array level 3 in structure "tape_label" dcl 4-32 in procedure "bce_save" set ref 1195 1232 1247 2045 pvname 40 based char(32) array level 3 in structure "info_tape_label" dcl 4-12 in procedure "bce_save" set ref 1943 pvname based char(32) level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save" set ref 1271 1274* 1280 2747* pvp 027302 automatic pointer dcl 3-67 set ref 302* 304 305 306 307 308 309 310 311 311 312 313 339* 353 353 383* 435* 792* 853 938 963 1043 1192 1195 1340 1340 1341 1342 1343 1347 1348 1501 1509 1520 1523 1534 1542 1554 1557 1572 1575 1576 1581 1583 1599 1607 1610 1616 1617 1621 1623 1708 1874 1875 1878 1936 1943 1949 1949 1957 1972 1976 1979 1981 1982 1982 1986 1989 2006 2008 2009 2009 2043 2045 2059 2074 2078 2078 2089 2099 2099 2108 2111 2112 2113 2116 2117 2119 2131 2134 2187 2326* 2327 2328 2329 2330 2427* 2735 2942 2946 pvt based structure level 1 dcl 17-13 pvt$ 000126 external static fixed bin(17,0) dcl 17-9 set ref 2211 pvt_array_ptr 20 based pointer level 2 dcl 3-169 set ref 2216* pvt_arrayp 027346 automatic pointer dcl 18-21 set ref 2216* pvte based structure level 1 dcl 18-26 pvtp 027344 automatic pointer dcl 17-9 set ref 2211* 2212 2216 pvtx 22 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-68 set ref 306* 1708 2735 pvx 45 based fixed bin(17,0) level 2 dcl 3-92 set ref 292* 292* 295 316 318 318 329* 329* 331 338* 339 360* 360 360* 363 383 425* 426 426 427* 434* 435 1231* 1232 1233 1234* 1246* 1247* 1265 1266 1267 1267 1271* 1271* 1273 1280* 1280* 1281 1282 1286 1286* 1289 1290 1291 1291 2324* 2326* 2879 quiescent 030144 automatic bit(1) packed unaligned dcl 1672 set ref 1674* 1675 1676* 1680* 1686* 1690* real_name 10 based char(32) level 2 dcl 3-68 set ref 1534* 2009* rec_header based structure level 1 dcl 4-14 rec_in_type 24 based fixed bin(17,0) array level 3 in structure "pv_array" dcl 3-65 in procedure "bce_save" set ref 426* 1266* 1290* rec_in_type 24 based fixed bin(17,0) level 3 in structure "pv" dcl 3-68 in procedure "bce_save" set ref 311* 2117 rec_in_type 13 based fixed bin(17,0) level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save" set ref 1266 1290 2877* rec_in_type 17 based fixed bin(17,0) level 3 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 992 1343* 1348* 1482* 1532 1533 1542 1597 2635 2753* 2772 2801 2846* 2903* 2952* rec_on_pv 23 based fixed bin(18,0) array level 3 in structure "pv_array" dcl 3-65 in procedure "bce_save" set ref 426* 1265* 1289* rec_on_pv 12 based fixed bin(18,0) level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save" set ref 1265 1289 2142* 2747* 2874* rec_on_pv 16 based fixed bin(35,0) level 3 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 1342* 1347* 1481* 1532* 1534* 1540 1562 1576 1599* 1617* 1621 1708 2053* 2066* 2280* 2735 2752* 2772* 2845* 2898* 2931* 2951* rec_on_pv 23 based fixed bin(18,0) level 3 in structure "pv" dcl 3-68 in procedure "bce_save" set ref 311* 1576 1976 2111 2112 2116 2119* rec_on_tape 14 based fixed bin(35,0) level 3 dcl 3-24 set ref 1046 1047* 1190 1911 1915 1915* 2277* 2606 2607* 2611 2612 2613* 2615 rec_type 46 based fixed bin(17,0) level 2 dcl 3-92 set ref 2143* 2144 2146 2147 2149 2151 2156 2165 2175* records_written 16 based fixed bin(17,0) level 2 dcl 3-215 set ref 464* 1045* 1045 1046 1047* 2758* 2758 2851* 2851 2915* 2915 recordx 47 based fixed bin(18,0) level 2 dcl 3-92 set ref 2130* 2138* 2138 2138 2138 2138 2138 2141 2142 2143* 2175* 2874 2874 2874 2874 2874 region 20 based structure array level 2 dcl 4-49 set ref 1464 1472 2151 2156 2169 rel 0(35) based bit(1) level 2 in structure "tdcw" packed packed unaligned dcl 15-14 in procedure "bce_save" set ref 733* 1747* 1905* 2811* 2829* rel builtin function dcl 3095 in procedure "bce_save" ref 477 492 677 677 713 716 716 716 735 735 803 866 875 899 982 1040 1057 1057 1080 1099 1127 1128 1136 1136 1435 1496 1653 1677 1745 1749 1749 1903 1907 1907 2368 2372 2373 2381 2381 2558 2631 2798 2804 2809 2827 2831 2831 release_temp_segment_ 000110 constant entry external dcl 3159 ref 817 removed 25(23) based bit(1) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save" set ref 329 360 removed 20 based bit(1) level 3 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save" set ref 257* 408* 411 removed 14(01) based bit(1) array level 2 in structure "part_array" packed packed unaligned dcl 3-43 in procedure "bce_save" set ref 2943 removed 20 based bit(1) array level 3 in structure "tcb_array" packed packed unaligned dcl 3-211 in procedure "bce_save" set ref 264 279 1402 1405 removed 14(01) based bit(1) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save" set ref 1961* removed 25(23) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" set ref 313* 353 2329 request_handling_opr_aborts 22(01) based bit(1) level 3 packed packed unaligned dcl 2-15 set ref 131* 823* restart 12 based structure level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save" restart 23 based structure array level 2 in structure "pv_array" dcl 3-65 in procedure "bce_save" restart 76 based bit(1) level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 327* 423* 436* 1371 1841 1848 2305 2311 restart 23 based structure level 2 in structure "pv" dcl 3-68 in procedure "bce_save" restart 76 024274 automatic bit(1) array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 169* 177* restart_requested 77 024274 automatic bit(1) array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 535* restart_requested 77 based bit(1) level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 351 424* 1046 1050* restoring 024272 automatic bit(1) packed unaligned dcl 2990 set ref 76* 83* 90 151 180 323 355 364 458 900 1220 1222 1228 1841 1848 1852 1861 2253 2310 2328 retry_allowed 030400 automatic bit(1) packed unaligned dcl 2494 set ref 2496* 2504 2535 retry_count 17 based fixed bin(17,0) level 2 dcl 3-215 set ref 465* 739* 739 2656 2656* retry_dcw based bit(36) array level 2 dcl 3-187 set ref 673 677 677 693 701 703 711 735 735 1893 1901 1907 1907 retry_in_progress 20(11) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 575* 603* 655 661* 668* 757* 770* 2448 rtx 030170 automatic fixed bin(17,0) dcl 1758 set ref 1784* 1801* save_restore_info 000110 automatic structure level 1 dcl 2971 set ref 85 save_time 24 based fixed bin(71,0) level 2 dcl 4-32 set ref 1222 1811* 2319* 2895* seek_command 027326 automatic bit(6) initial array packed unaligned dcl 10-84 set ref 10-84* 10-84* 10-84* 10-84* 10-84* 10-84* 10-84* 10-84* 10-84* set 10 000134 automatic fixed bin(17,0) array level 2 dcl 2972 set ref 151 159* 225 set_count 7(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-169 set ref 89* 140 140* 151 159 164* 164 165 169 172* 172 173 177 187* 216 243 349 386 388 514 516 531 533 782 2228 2238 2239 set_index 7 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-169 set ref 786* 2240* 2421* set_info 024274 automatic structure array level 1 dcl 2992 set ref 103 104* 105 105 165 173 188 216 243 349 386 514 531 782 787 2239 2241 2422 set_infop 10 based pointer level 2 dcl 3-169 set ref 103* setx 024273 automatic fixed bin(17,0) dcl 2991 set ref 105* 107 108 108 108 108 108 108 108 108 108 108* 187* 188 191 205* 216* 225 228* 243* 349* 782* 786 787 789 791 794* 2239* 2240 2241 2242 2244 2245* 2421 2422 2424 2426 2429 si based structure level 1 dcl 3-92 si_ptr 027304 automatic pointer dcl 3-91 set ref 188* 189 189 189 190 191 191 210 218 219 220 221 222 223 227 231 232 235 235 236 245 245 247 247 253 258 258 264 264 264 266 266 267 270 270 276 278 290 292 292 292 295 295 296 296 297 298 302 302 303 316 318 318 323 325 327 329 329 329 331 331 332 338 339 339 351 353 360 360 360 360 363 363 368 372 374 377 380 381 383 383 410 410 423 424 425 425 426 426 427 429 433 434 435 435 436 437 455 579 580 583 585 656 656 658 670 672 678 683 685 689 689 716 725 731 737 737 740 744 745 746 748 757 787* 788 790 792 793 795 796 797 836 907 980 992 995 1004 1046 1047 1050 1085 1089 1104 1108 1127 1128 1129 1137 1155 1159 1171 1171 1171 1171 1173 1173 1179 1190 1192 1193 1198 1199 1215 1218 1220 1220 1223 1231 1231 1232 1233 1234 1246 1246 1247 1251 1252 1255 1256 1259 1261 1264 1265 1266 1267 1267 1267 1271 1271 1271 1273 1273 1274 1280 1280 1280 1281 1282 1286 1286 1286 1289 1290 1291 1291 1291 1294 1304 1321 1321 1325 1325 1353 1369 1369 1371 1371 1374 1374 1378 1380 1402 1402 1402 1402 1404 1404 1405 1405 1405 1407 1407 1408 1412 1412 1467 1470 1475 1504 1513 1517 1527 1533 1534 1537 1541 1559 1570 1584 1597 1599 1602 1606 1615 1615 1616 1617 1619 1624 1683 1726 1727 1729 1773 1787 1795 1801 1805 1812 1815 1816 1823 1825 1834 1836 1841 1841 1842 1848 1849 1852 1852 1853 1853 1860 1880 1908 1911 1915 1915 1938 1940 1941 1946 1947 1947 1952 1957 1971 1972 1975 1980 1982 1992 1995 1996 1998 2009 2020 2022 2049 2050 2051 2051 2057 2059 2061 2062 2070 2070 2072 2075 2082 2082 2090 2090 2095 2101 2102 2106 2106 2106 2107 2107 2107 2108 2108 2108 2111 2112 2116 2117 2119 2120 2120 2123 2124 2128 2129 2130 2130 2130 2136 2138 2138 2138 2138 2138 2138 2138 2138 2138 2138 2141 2141 2142 2142 2143 2143 2144 2144 2146 2146 2147 2147 2148 2149 2151 2156 2156 2162 2165 2165 2167 2168 2169 2172 2174 2174 2175 2175 2175 2175 2181 2241* 2242 2244 2245 2247 2252 2254 2255 2256 2259 2260 2260 2261 2275 2276 2276 2276 2277 2287 2300 2301 2305 2307 2311 2315 2317 2321 2324 2324 2326 2326 2355 2372 2373 2374 2382 2392 2392 2395 2422* 2423 2425 2427 2428 2430 2431 2432 2443 2445 2448 2496 2505 2512 2519 2520 2524 2525 2561 2569 2570 2577 2591 2591 2591 2591 2593 2593 2600 2601 2605 2605 2606 2607 2607 2611 2612 2613 2615 2635 2638 2656 2656 2656 2662 2747 2751 2756 2760 2761 2772 2783 2784 2786 2844 2849 2867 2869 2872 2872 2873 2874 2874 2874 2874 2874 2874 2874 2874 2874 2877 2879 2889 2901 2906 2909 2918 2935 2946 2949 si_version_1 000022 constant char(8) initial packed unaligned dcl 3-90 ref 107 size builtin function dcl 3095 ref 580 1784 2064 2252 2254 2259 2260 2899 sri based structure level 1 dcl 3-169 set ref 87* sri_version_1 000020 constant char(8) initial packed unaligned dcl 3-167 ref 88 srip 027306 automatic pointer dcl 3-168 set ref 85* 87 88 89 90 91 92 93 94 95 103 140 140 141 141 142 146 150 151 151 151 151 151 154 154 158 159 159 160 161 164 164 165 169 172 172 173 177 179 187 209* 212* 216 224 224 224 225 225* 243 273* 336* 349 386 388 420* 457* 459* 514 516 531 533 631 782 786 1320* 1382* 1415* 1861* 2061* 2216 2228 2238 2239 2240 2303* 2328* 2331* 2358* 2385* 2421 2701 2707 ss_info based structure level 1 dcl 2-15 ss_info_ptr parameter pointer dcl 2-14 ref 11 80 116 117 131 134 182 823 823 ssdp 027670 automatic pointer dcl 570 set ref 630* 632 757 st based bit(1) level 3 packed packed unaligned dcl 14-7 set ref 585 stat 2 based structure level 2 in structure "survey_ws" dcl 3-194 in procedure "bce_save" set ref 2372 2373 stat 6 based structure level 2 in structure "stat_ws" dcl 3-187 in procedure "bce_save" set ref 1126* 1127 1128 stat_ws based structure level 1 dcl 3-187 state 22(18) based fixed bin(17,0) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save" set ref 1936 1986* 2043 2131* 2330* state 14 based fixed bin(17,0) array level 3 in structure "ioi_post_area" dcl 1-13 in procedure "bce_save" set ref 980 2561 state 4 based fixed bin(17,0) level 2 in structure "io_post_buffer" dcl 1-18 in procedure "bce_save" set ref 684 747 1381 2411* 2699 2721 state 1 based fixed bin(17,0) level 2 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 478 494 715 806 809* 849 856* 867 876 901 905 909* 911* 917 923 931 948 956 967* 972 978 984 1002 1025* 1056* 1081 1082* 1100 1101* 1188* 1354* 1437 1485* 1497 1543* 1628* 1642* 1654 1656* 1678 1682 1688 1706* 1735* 2559 2620* 2632 2733* 2792* 2799 state_time 2 based fixed bin(71,0) level 2 dcl 3-24 set ref 810* 857* 913* 968* 1026* 1083* 1102* 1189* 1355* 1437 1440 1486* 1544* 1629* 1643* 1657* 1707* 1736* 2621* 2734* 2793* status 1 based bit(36) level 2 packed packed unaligned dcl 14-21 set ref 2706 2707 2707 status_count 13 based fixed bin(17,0) level 2 dcl 3-215 set ref 581 1729 2786 status_idx 14 based fixed bin(17,0) level 2 dcl 3-215 set ref 580 581* 581 1728* 2785* statusx 15 based fixed bin(17,0) level 2 dcl 3-215 set ref 579 1726 1727 2783 2784 sub 0(06) based bit(6) level 2 packed packed unaligned dcl 13-5 ref 620 2460 2482 sub_request_abort_ 000000 stack reference condition dcl 3100 ref 445 substat 027672 automatic bit(6) dcl 571 set ref 588* 608* 612* 616* 620* 625 substr builtin function dcl 3095 set ref 139 454 512 529 591 591 599 2075* 2082* 2082 2090* 2095* 2095 2102* 2106 2106 2107 2107 2138 2138 2317 2356 2480 2874 2874 supress_error_recovery 024714 automatic bit(1) packed unaligned dcl 2993 set ref 597 664 2475* 2477* 2664* 2666* survey_ws based structure level 1 dcl 3-194 set ref 2362* surveyed 20(02) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 461 2351* syserr 000112 constant entry external dcl 3161 ref 253 267 276 298 332 380 437 522 585 591 596 632 685 745 748 757 1047 1089 1108 1159 1223 1252 1255 1261 1267 1274 1286 1291 1369 1371 1374 1408 1534 1599 1617 1773 1795 1805 1812 1816 1842 1853 1915 1957 1982 2009 2108 2519 2577 2601 2607 2613 2656 2701 2707 2747 2772 2889 2909 2946 syserr$error_code 000114 constant entry external dcl 3162 ref 833 853 938 963 1131 1731 2213 2219 2225 2234 2249 2376 2389 2445 2788 tally 0(24) based bit(12) level 2 packed packed unaligned dcl 15-7 set ref 2369* tape_count 50 based fixed bin(17,0) level 2 dcl 3-92 set ref 189* 220* 231 245 264 266 278 1402 1404 1405 1407 tape_drive_string 027226 automatic varying char(80) dcl 2996 set ref 277* 280* 280 281 283* 284* 288 288* tape_error_data based structure array level 1 dcl 20-17 tape_error_data$ 000130 external static fixed bin(17,0) dcl 20-13 set ref 2217 tape_error_interp based structure level 1 dcl 20-30 ref 632 632 tape_label based structure level 1 dcl 4-32 set ref 1784 1835 2252 2312* 2899 tape_label_ptr 14 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 793 2247* 2428 tape_label_ptr 14 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* tape_labelp 027316 automatic pointer dcl 4-30 set ref 793* 817 817* 1195 1195 1195 1198 1218 1222 1229 1229 1232 1244 1244 1247 1264 1534 1534 1599 1599 1617 1617 1784 1801 1804 1811 1812 1812 1812 1815 1816 1822 1824 1835 1852 1860 1860 2045 2045 2045 2049 2246* 2247 2252 2252 2312 2313 2314 2315 2319 2320 2428* 2747 2747 2772 2772 2868 2869 2873 2879 2889 2889 2895 2899 2901 2919 tape_mounted 20(06) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 260 416 763* 1399 2459* 2667* tape_number 22 based char(4) level 2 dcl 4-32 set ref 1218 1534 1534 1599 1599 1617 1617 1812 1812 1812 1822 1824 1852 2747 2747 2772 2772 2868* 2873* 2889 2889 2919 tape_rec_count 51 based fixed bin(35,0) level 2 dcl 3-92 set ref 455* 1190* 1911 1915 2276* 2276 2277 2605* 2605 2606 2607* 2611 2612 2615* 2656 2656* tape_retries 027253 automatic fixed bin(17,0) dcl 2997 set ref 574* 667 726 726 738* 738 767* tape_seq_number 52 based fixed bin(17,0) level 2 dcl 3-92 set ref 1171 1171* 1173* 1173 1215* 1218* 1220* 1220 1321 1321 1325 1325* 1374* 1467 1475 1852 1852 1853* 2162 2172 2300* 2591 2591* 2593* 2593 2869 2872* 2872 2873 tape_set 56 based char(32) level 2 in structure "si" packed packed unaligned dcl 3-92 in procedure "bce_save" set ref 190* 218* 227 232* 236* 253* 267* 276* 298* 332* 368* 380* 437* 585* 685* 745* 748* 757* 1047* 1089* 1108* 1159* 1223* 1252* 1255* 1261* 1267* 1274* 1286* 1291* 1294* 1304* 1369* 1371* 1374* 1408* 1534* 1599* 1617* 1773* 1795* 1805* 1812* 1815 1816* 1825* 1842* 1853* 1915* 1957* 1982* 2009* 2108* 2315 2445* 2505* 2512* 2519* 2525* 2577* 2601* 2607* 2613* 2656* 2747* 2772* 2889* 2909* 2946* tape_set 12 based char(32) level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save" set ref 1815 1816* 2315* tape_set 56 024274 automatic char(32) array level 2 in structure "set_info" packed packed unaligned dcl 2992 in procedure "bce_save" set ref 514 522* 526* 531 538* tape_set_uid 21 based bit(36) level 3 in structure "iob" dcl 3-24 in procedure "bce_save" set ref 1179 1834 1841 1849 2287* 2600 tape_set_uid 100 based bit(36) level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 1179 1834* 1841 1849* 2287 2317* 2600 tape_status_descrip based structure level 1 dcl 20-49 tape_status_interp_array based structure array level 1 dcl 20-24 set ref 625 625 628 tape_vol_number 10 based char(4) level 2 dcl 3-215 set ref 468* 1294 1294 1321 1323 1822* 2601 2601 2607 2607 2656 2656 2656 2656 2669* 2919* taperap 027352 automatic pointer dcl 20-22 set ref 623* 625 625 625 625 628 taperp 027354 automatic pointer dcl 20-28 set ref 628* 630 632 632 639 640 641 654 664 667 670 692 743 754 763 2496 2511 2536 tapes_in_set 30 based fixed bin(17,0) level 2 dcl 4-32 set ref 2320* 2869* tcb based structure level 1 dcl 3-215 set ref 192* 2354 tcb_area 024716 automatic structure array level 1 dcl 2995 set ref 95 100* 191 794 2429 tcb_area_ptr 16 based pointer level 2 dcl 3-169 set ref 95* tcb_array based structure array level 1 dcl 3-211 set ref 247 270 1412 2354* 2355 2392 tcb_arrayp 027310 automatic pointer dcl 3-210 set ref 247 264 270 279 280 794* 1402 1405 1412 2354 2355 2392 2429* tcb_ptr 16 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 191* 247* 270* 795 1412* 2355* 2392* 2430 tcb_ptr 16 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* tcb_to_survey_ptr 030332 automatic pointer dcl 2349 set ref 2352* 2385* tcbp 027312 automatic pointer dcl 3-214 set ref 191* 192 193 194 208 247* 249 253 257 260 261 270* 272 368 408 411 415 416 421 437 454 454 456 458 459 461 463 464 465 466 467 468 477 477 479 492 492 495 575 579 580 580 581 581 581 583 596 603 632 639 639 655 655 661 668 670 670 673 676 677 677 693 696 701 702 703 706 711 713 713 721 725 735 735 739 739 745 754 757 757 763 770 795* 801 802 803 803 813 832 833 834 835 866 866 873 875 875 882 899 899 982 982 990 1011 1045 1045 1046 1047 1053 1065 1080 1080 1085 1088 1099 1099 1104 1107 1120 1121 1123 1126 1127 1128 1129 1131 1136 1136 1152 1158 1163 1166 1167 1294 1294 1294 1321 1323 1367 1369 1371 1374 1377 1397 1399 1412* 1414 1416 1435 1435 1442 1496 1496 1499 1534 1599 1617 1653 1653 1662 1677 1677 1692 1708 1708 1722 1726 1727 1728 1729 1729 1731 1737 1738 1739 1740 1741 1743 1768 1773 1779 1780 1781 1781 1793 1795 1805 1812 1816 1822 1825 1842 1893 1896 1901 1907 1907 2023 2023 2351 2352 2353 2354 2355* 2356 2356 2357 2362 2363 2364 2365 2367 2368 2372 2373 2374 2376 2381 2381 2387 2389 2392* 2410 2430* 2444 2445 2448 2459 2460 2496 2496 2496 2511 2525 2536 2558 2558 2565 2576 2582 2586 2587 2601 2601 2601 2607 2607 2607 2625 2631 2631 2645 2656 2656 2656 2656 2656 2656 2656 2656 2667 2668 2669 2707 2735 2735 2747 2758 2758 2772 2780 2783 2784 2785 2786 2786 2788 2794 2798 2798 2815 2819 2820 2821 2822 2823 2825 2851 2851 2887 2889 2891 2909 2914 2915 2915 2919 tcbx 53 based fixed bin(17,0) level 2 dcl 3-92 set ref 189* 191 245* 247* 264* 264* 266 270 1402* 1402 1402* 1404 1405* 1405* 1407 1412 2392 tdcw 4 based bit(36) level 2 in structure "stat_ws" dcl 3-187 in procedure "bce_save" set ref 1743 2825 tdcw based structure level 1 dcl 15-14 in procedure "bce_save" set ref 730* 1744* 1902* 2808* 2826* tdcw_word 11 based bit(36) level 2 dcl 3-24 set ref 716 1057 2807 tdcwp 027340 automatic pointer dcl 15-4 set ref 701* 711* 730 731 732 733 1743* 1744 1745 1746 1747 1901* 1902 1903 1904 1905 2807* 2808 2809 2810 2811 2825* 2826 2827 2828 2829 tedp 027350 automatic pointer dcl 20-15 set ref 623 623 629 629 630 2217* 2218 temp_bufp 027572 automatic pointer dcl 489 in procedure "BUFFER_COUNT" set ref 492* 492* 494* 495 temp_bufp 030074 automatic pointer dcl 1431 in procedure "OLDEST_BUFFER" set ref 1435* 1435* 1437 1437 1439 1440* 1442 tfrec 16 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 1964* time_out 0(03) based bit(1) level 3 packed packed unaligned dcl 14-7 set ref 595 time_to_wait 030432 automatic fixed bin(71,0) dcl 2695 set ref 2697* 2700 title 2 based char(32) level 2 dcl 4-32 set ref 2314* tlrec 16(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 1965* tlx 030502 automatic fixed bin(17,0) dcl 2865 set ref 2899* 2901 2903* tnrec 17 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 1966* tsx 027673 automatic fixed bin(17,0) dcl 572 set ref 625* 625 625* 628 type 13 based fixed bin(17,0) level 3 in structure "iob" packed packed unaligned dcl 3-24 in procedure "bce_save" set ref 1182 1183 1480* 1503 1566 1566 1566 1580 1615 1621 1659 2274* 2619 2682 2752* 2772 2794 2794 2794 2845* 2898* type 0(22) based bit(2) level 2 in structure "tdcw" packed packed unaligned dcl 15-14 in procedure "bce_save" set ref 732* 1746* 1904* 2810* 2828* unspec builtin function dcl 3095 set ref 87* 97* 98* 99* 100* 104* 150* 192* 632 632 632 632 674* 694* 704* 730* 759 759 1126* 1352* 1353* 1720* 1744* 1894* 1902* 2230* 2237* 2312* 2317 2362* 2409* 2707 2707 2778* 2808* 2826* 2949* usable_tape_devices 54 based fixed bin(17,0) level 2 dcl 3-92 set ref 189* 221* 258* 258 410* 410 2524 version based char(8) level 2 dcl 4-32 set ref 1804 2313* version_id based char(8) level 2 in structure "sri" dcl 3-169 in procedure "bce_save" set ref 88* version_id 024274 automatic char(8) array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 107* vol_array 40 based structure array level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save" set ref 1195 1198 1229 1264 1860 2045 2049 vol_array 40 based structure array level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save" set ref 1943 1946 vol_array_idx 27 based fixed bin(17,0) level 2 dcl 4-32 set ref 1229 1244 1860 2879* vol_array_size 26 based fixed bin(17,0) level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save" set ref 1943 vol_array_size 26 based fixed bin(17,0) level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save" set ref 1195 1244 2045 vol_info based structure level 1 dcl 4-49 vol_info_ptr 24 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 797 1198* 1264* 1860* 1946* 2049* 2432 vol_info_ptr 24 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* vol_infop 027320 automatic pointer dcl 4-47 set ref 797* 1198* 1264* 1265 1266 1271 1274 1280 1289 1290 1464 1464 1464 1464 1464 1467 1467 1472 1472 1472 1472 1472 1475 1475 1475 1475 1477 1477 1860* 1946* 1947 2049* 2142 2151 2151 2151 2151 2151 2156 2156 2156 2156 2156 2162 2162 2169 2169 2169 2169 2169 2172 2172 2432* 2747 2747 2874 2877 vol_map based structure level 1 dcl 21-5 ref 2064 2260 vol_map_bits_to_move 027256 automatic fixed bin(17,0) dcl 3000 set ref 2094* 2095 2095 vol_map_ptr 22 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 2070 2072 2255* 2259* 2260 vol_map_ptr 22 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* vol_mapp 027356 automatic pointer dcl 21-3 set ref 2064 2072* 2092 2092 2094 2095 2095 2260 vol_preamble based structure level 1 dcl 4-68 vol_preamble_ptr 20 024274 automatic pointer array level 2 in structure "set_info" dcl 2992 in procedure "bce_save" set ref 108* vol_preamble_ptr 20 based pointer level 2 in structure "si" dcl 3-92 in procedure "bce_save" set ref 796 2252* 2431 vol_preamblep 027322 automatic pointer dcl 4-66 set ref 796* 1193 1621 1873 1953 1953 1953 1956 1964 1965 1965 1966 1976 1976 1976 1981 1982 2057 2059 2062 2075 2076 2076 2080 2082 2082 2082 2082 2106 2106 2107 2107 2252* 2254 2259 2284 2431* 2751 2935 2937 2937 2938 2938 2938 2938 2943 2946 2946 2950 2951 2953 vol_size 547 based fixed bin(17,0) level 2 dcl 4-68 ref 2075 2106 2106 2107 2107 volx 027255 automatic fixed bin(17,0) dcl 2999 set ref 1195* 1195* 1198 1229* 1232* 1244* 1247* 1264 1943* 1943* 1946 2045* 2045* 2049 vtoc_size 550 based fixed bin(17,0) level 2 dcl 4-68 set ref 1621 1873 1976 1976 1982* 2059 whoami 22 based char(8) level 2 packed packed unaligned dcl 3-169 set ref 91* wired_hardcore_data$abort_request 000014 external static bit(1) dcl 3108 set ref 506 507* wksp 6 based pointer level 2 dcl 3-215 set ref 477 479 492 495 580 583 673 677 677 693 701 703 711 713 721 725 735 735 803 813 866 873 875 882 899 982 990 1011 1065 1080 1085 1088 1099 1104 1107 1120 1121 1126 1127 1128 1136 1136 1435 1442 1496 1499 1653 1662 1677 1692 1708 1708 1738 1739 1743 1893 1901 1907 1907 2362 2363 2364 2367 2368 2372 2373 2381 2381 2558 2625 2631 2645 2735 2735 2798 2815 2820 2821 2825 write 4(18) based bit(1) level 3 packed packed unaligned dcl 3-24 set ref 869 878 1484* 1545* 1630* 1641* 1658* 2563 2634 2750* 2843* 2897* write_eof 101 based bit(1) level 2 dcl 3-92 set ref 992 995* 2129* 2635 2638* 2761* write_protected 20(07) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 2460* 2887 write_tape 20(04) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 458* 670 702 2023 2496 2496 2511 2536 2656 written_preamble 102 based bit(1) level 2 dcl 3-92 set ref 2128* 2181 2570* 2760* written_tape_label 103 based bit(1) level 2 dcl 3-92 set ref 374* 670 2136 2321* 2496 2569* 2918* yes_no 027254 automatic bit(1) packed unaligned dcl 2998 set ref 342* 343 368* 370 1825* 1828 2393* zero_vtoc 25(24) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 1341 1616 1621 1623* 1979* zrec 26 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-68 set ref 1340* 1340 1342 1343 1347 1348 1542* 1981* 1982 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BOTH_SAVED internal static fixed bin(17,0) initial dcl 4-97 DEFAULT_HCPART_SIZE internal static fixed bin(17,0) initial dcl 9-54 DUMPER_BIT_MAP_ADDR internal static fixed bin(17,0) initial dcl 9-54 JUST_LOG internal static fixed bin(17,0) initial dcl 19-7 LOG internal static fixed bin(17,0) initial dcl 19-7 MAX_VTOCE_PER_PACK internal static fixed bin(17,0) initial dcl 9-54 MODEL internal static fixed bin(17,0) initial array dcl 10-57 MODELN internal static fixed bin(17,0) initial array dcl 10-63 MODELX internal static fixed bin(17,0) initial array dcl 10-60 Multics_ID_String internal static char(32) initial packed unaligned dcl 5-92 PART_ONLY internal static fixed bin(17,0) initial dcl 4-95 PV_ONLY internal static fixed bin(17,0) initial dcl 4-93 SECTORS_PER_RECORD internal static fixed bin(17,0) initial array dcl 9-74 SECTORS_PER_VTOCE internal static fixed bin(17,0) initial array dcl 9-70 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 19-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 19-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 19-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 19-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 19-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 19-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 19-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 19-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 19-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 19-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 19-7 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 19-7 VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 18-113 VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 18-113 VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 18-113 VTOCES_PER_RECORD internal static fixed bin(17,0) initial array dcl 9-72 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 9-68 VTOC_MAP_ADDR internal static fixed bin(17,0) initial dcl 9-54 VTOC_ORIGIN internal static fixed bin(17,0) initial dcl 9-54 bit_map_word based structure level 1 dcl 22-14 bit_map_wordp automatic pointer dcl 22-4 bulkdevt internal static fixed bin(4,0) initial dcl 10-43 config_data_$ccu_model_names external static structure level 1 dcl 7-178 config_data_$chnl_cardx external static fixed bin(17,0) dcl 7-27 config_data_$clok_cardx external static fixed bin(17,0) dcl 7-29 config_data_$config_cards external static structure level 1 dcl 7-94 config_data_$console_model_names external static structure level 1 dcl 7-192 config_data_$cpu_cardx external static fixed bin(17,0) dcl 7-31 config_data_$disk_drive_model_names external static structure level 1 dcl 7-148 config_data_$fnp_cardx external static fixed bin(17,0) dcl 7-33 config_data_$intk_cardx external static fixed bin(17,0) dcl 7-35 config_data_$iom_cardx external static fixed bin(17,0) dcl 7-37 config_data_$ipc_fips_cardx external static fixed bin(17,0) dcl 7-45 config_data_$ipc_msp_model_names external static structure level 1 dcl 7-130 config_data_$ipc_mtp_model_names external static structure level 1 dcl 7-139 config_data_$mem_cardx external static fixed bin(17,0) dcl 7-39 config_data_$mpc_cardx external static fixed bin(17,0) dcl 7-49 config_data_$mpc_msp_cardx external static fixed bin(17,0) dcl 7-41 config_data_$mpc_msp_model_names external static structure level 1 dcl 7-104 config_data_$mpc_mtp_cardx external static fixed bin(17,0) dcl 7-43 config_data_$mpc_mtp_model_names external static structure level 1 dcl 7-113 config_data_$mpc_urp_cardx external static fixed bin(17,0) dcl 7-47 config_data_$mpc_urp_model_names external static structure level 1 dcl 7-122 config_data_$mpcs_cardx external static fixed bin(17,0) dcl 7-57 config_data_$mpcs_msp_cardx external static fixed bin(17,0) dcl 7-51 config_data_$mpcs_mtp_cardx external static fixed bin(17,0) dcl 7-53 config_data_$mpcs_urp_cardx external static fixed bin(17,0) dcl 7-55 config_data_$parm_cardx external static fixed bin(17,0) dcl 7-59 config_data_$part_cardx external static fixed bin(17,0) dcl 7-61 config_data_$printer_model_names external static structure level 1 dcl 7-164 config_data_$prph_cardx external static fixed bin(17,0) dcl 7-77 config_data_$prph_ccu_cardx external static fixed bin(17,0) dcl 7-71 config_data_$prph_dsk_cardx external static fixed bin(17,0) dcl 7-63 config_data_$prph_opc_cardx external static fixed bin(17,0) dcl 7-75 config_data_$prph_prt_cardx external static fixed bin(17,0) dcl 7-65 config_data_$prph_pun_cardx external static fixed bin(17,0) dcl 7-69 config_data_$prph_rdr_cardx external static fixed bin(17,0) dcl 7-67 config_data_$prph_tap_cardx external static fixed bin(17,0) dcl 7-73 config_data_$punch_model_names external static structure level 1 dcl 7-185 config_data_$reader_model_names external static structure level 1 dcl 7-171 config_data_$root_cardx external static fixed bin(17,0) dcl 7-79 config_data_$salv_cardx external static fixed bin(17,0) dcl 7-81 config_data_$schd_cardx external static fixed bin(17,0) dcl 7-83 config_data_$sst_cardx external static fixed bin(17,0) dcl 7-85 config_data_$stok_cardx external static fixed bin(17,0) dcl 7-87 config_data_$tape_drive_model_names external static structure level 1 dcl 7-156 config_data_$tbls_cardx external static fixed bin(17,0) dcl 7-89 config_data_$udsk_cardx external static fixed bin(17,0) dcl 7-91 cyl_per_dev internal static fixed bin(17,0) initial array dcl 10-102 cyl_per_sv internal static fixed bin(17,0) initial array dcl 10-105 dev_time internal static float bin(27) initial array dcl 10-139 device_names internal static char(4) initial array dcl 10-66 disk_buffer_post_ptr automatic pointer dcl 6-15 dsu181devt internal static fixed bin(4,0) initial dcl 10-43 dsu190devt internal static fixed bin(4,0) initial dcl 10-43 dsu191devt internal static fixed bin(4,0) initial dcl 10-43 fips3380devt internal static fixed bin(4,0) initial dcl 10-43 fips3381devt internal static fixed bin(4,0) initial dcl 10-43 fips_type_disk internal static bit(1) initial array packed unaligned dcl 10-72 first_alt_sect_num internal static fixed bin(24,0) initial array dcl 10-130 first_dev_number internal static fixed bin(17,0) initial array dcl 10-69 first_rec_num internal static fixed bin(17,0) initial array dcl 10-115 first_sect_num internal static fixed bin(24,0) initial array dcl 10-124 imp automatic pointer dcl 14-19 last_alt_sect_num internal static fixed bin(24,0) initial array dcl 10-133 last_physical_sect_num internal static fixed bin(24,0) initial array dcl 10-136 last_rec_num internal static fixed bin(18,0) initial array dcl 10-118 last_sect_num internal static fixed bin(24,0) initial array dcl 10-127 last_sv_rec_num internal static fixed bin(18,0) initial array dcl 10-121 maxdevt internal static fixed bin(4,0) initial dcl 10-43 media_removable internal static bit(1) initial array packed unaligned dcl 10-75 msu0400devt internal static fixed bin(4,0) initial dcl 10-43 msu0450devt internal static fixed bin(4,0) initial dcl 10-43 msu0451devt internal static fixed bin(4,0) initial dcl 10-43 msu0500devt internal static fixed bin(4,0) initial dcl 10-43 msu0501devt internal static fixed bin(4,0) initial dcl 10-43 needs_alt_part internal static bit(1) initial array packed unaligned dcl 10-81 number_of_sv internal static fixed bin(17,0) initial array dcl 10-93 pcw based structure level 1 dcl 16-6 pcwp automatic pointer dcl 16-4 prph_tap_card based structure level 1 dcl 8-5 prph_tap_card_array based structure level 1 dcl 8-21 prph_tap_cardp automatic pointer dcl 8-3 pvt$array external static fixed bin(17,0) dcl 18-18 pvt$max_n_entries external static fixed bin(17,0) dcl 18-19 pvt_array based structure array level 1 dcl 18-24 pvtep automatic pointer dcl 18-22 rec_per_cyl internal static fixed bin(17,0) initial array dcl 10-108 rec_per_dev internal static fixed bin(21,0) initial array dcl 10-87 rec_per_sv internal static fixed bin(17,0) initial array dcl 10-90 sect_per_cyl internal static fixed bin(17,0) initial array dcl 11-15 sect_per_rec internal static fixed bin(17,0) initial array dcl 11-21 sect_per_sv internal static fixed bin(24,0) initial array dcl 11-18 sect_per_track internal static fixed bin(17,0) initial array dcl 11-33 sect_per_vtoc internal static fixed bin(17,0) initial array dcl 11-26 shared_spindle internal static bit(1) initial array packed unaligned dcl 10-78 tracks_per_cyl internal static fixed bin(17,0) initial array dcl 10-111 tsdp automatic pointer dcl 20-47 valid_sv_array internal static char(1) initial array packed unaligned dcl 10-99 valid_sv_string internal static char(3) initial packed unaligned dcl 10-96 vtoc_map based structure level 1 dcl 22-6 vtoc_mapp automatic pointer dcl 22-3 vtoc_per_rec internal static fixed bin(17,0) initial array dcl 11-29 words_per_sect internal static fixed bin(17,0) initial array dcl 11-36 NAMES DECLARED BY EXPLICIT CONTEXT. ABORT 005755 constant entry internal dcl 442 ref 120 128 137 144 148 156 167 175 185 199 229 233 237 268 300 333 511 854 939 964 1132 1409 1732 1763 1774 2214 2220 2226 2235 2250 2390 2502 2789 ATTACH_TAPE 005762 constant entry internal dcl 451 ref 207 248 271 419 1413 BUFFER_AVAILABLE 006062 constant entry internal dcl 474 ref 1991 2137 BUFFER_COUNT 006122 constant entry internal dcl 485 ref 2626 CHECK_ABORT 006155 constant entry internal dcl 503 ref 391 1118 2325 2704 2722 CHECK_STATUS 006613 constant entry internal dcl 561 ref 908 1005 1138 1156 1684 1788 1910 2383 2562 2757 2850 2907 CLEANUP 010314 constant entry internal dcl 779 ref 114 398 DETACH_TAPE 010551 constant entry internal dcl 829 ref 261 417 461 814 1400 DISK_DATA_READY 010640 constant entry internal dcl 846 ref 869 2055 2068 2933 2955 DISK_RUN 010747 constant entry internal dcl 863 ref 2003 2182 EXIT 005562 constant label dcl 398 ref 208 213 343 FLUSH_BUFFERS 011052 constant entry internal dcl 892 ref 1993 2007 2187 2566 2588 FREE_BUFFER 011572 constant entry internal dcl 1022 ref 869 902 942 1064 1168 1194 1505 1514 1529 1567 1571 1577 1595 1679 1685 1689 1790 1797 1807 1818 1829 1837 1844 1850 1855 1859 2058 2073 2515 2759 2852 2910 2917 2936 2958 FREE_OR_REQUEUE_TAPE_IO 011602 constant entry internal dcl 1033 ref 1006 2564 GET_DISK_BUFFER 011765 constant entry internal dcl 1077 ref 1459 2052 2063 2930 2948 GET_TAPE_BUFFER 012055 constant entry internal dcl 1096 ref 1151 1175 1339 1640 1783 2596 2749 2842 2896 ISSUE 012145 constant entry internal dcl 1115 ref 994 1184 1526 1590 1591 1592 2021 2476 2637 2665 2746 2841 2853 2854 2855 LOCATE_RECORD 012316 constant entry internal dcl 1147 ref 1948 1994 2595 LOCATE_RESTART_POINT 012532 constant entry internal dcl 1211 ref 2306 LOCATE_TAPE 013703 constant entry internal dcl 1317 ref 1942 MAKE_ZERO_DISK_RECORD 013751 constant entry internal dcl 1336 ref 1998 MOUNTED_TAPE 014031 constant entry internal dcl 1364 ref 1760 2880 NEXT_SET 005557 constant label dcl 392 ref 433 438 2516 2521 NEXT_TAPE_DEVICE 014265 constant entry internal dcl 1394 ref 366 411 1170 1323 1764 1775 1839 2568 2590 2883 2911 OLDEST_BUFFER 014443 constant entry internal dcl 1425 ref 867 876 905 917 923 931 948 956 972 978 1002 1497 1654 2559 2632 2799 QUEUE_DISK_READ 014532 constant entry internal dcl 1452 ref 2175 QUEUE_DISK_WRITE 014717 constant entry internal dcl 1493 ref 919 2002 QUEUE_TAPE_READ 015755 constant entry internal dcl 1637 ref 1999 QUEUE_TAPE_WRITE 015770 constant entry internal dcl 1650 ref 974 2183 QUIESCE_TAPE 016037 constant entry internal dcl 1670 ref 1547 1589 READ_DISK 016117 constant entry internal dcl 1703 ref 880 951 2054 2067 2932 READ_RECORD 016166 constant entry internal dcl 1716 ref 1153 1786 1912 2583 2597 2642 READ_TAPE_LABEL 016354 constant entry internal dcl 1756 ref 211 1174 1217 1327 2302 2594 RECORD_TYPE 017325 constant entry internal dcl 1869 ref 2119 2143 RELOCATE_RECORD 017434 constant entry internal dcl 1890 ref 2611 REMOVE_N_RESTART 005567 constant label dcl 408 ref 2528 RESTART 005575 constant label dcl 411 ref 351 2530 RESTORE_PV 017576 constant entry internal dcl 1933 ref 355 REWIND_TAPE 020230 constant entry internal dcl 2017 ref 1309 1778 2894 SAVE_PV 020262 constant entry internal dcl 2040 ref 357 SETUP 021376 constant entry internal dcl 2208 ref 204 241 SETUP_REC_HEADER 022007 constant entry internal dcl 2269 ref 1344 1350 1659 2754 2847 2904 SETUP_SET 022066 constant entry internal dcl 2297 ref 326 432 SET_DEVICE_OPTIONS 022233 constant entry internal dcl 2346 ref 460 SET_IOI_POST_BUF 022546 constant entry internal dcl 2403 ref 672 744 1378 2020 2443 2662 SET_PTRS 022566 constant entry internal dcl 2418 ref 206 217 244 350 TAPE_CONNECT 022632 constant entry internal dcl 2439 ref 656 677 689 735 737 1136 1749 1907 2381 2831 TAPE_DEVICE_READY 022735 constant entry internal dcl 2454 ref 367 1214 1387 1760 2880 TAPE_DEVICE_USABLE 023006 constant entry internal dcl 2472 ref 252 2393 2457 TAPE_ERROR_RECOVERY 023105 constant entry internal dcl 2492 ref 766 TAPE_RUN 023576 constant entry internal dcl 2555 ref 2001 2184 UNLOAD_TAPE 024332 constant entry internal dcl 2653 ref 260 370 379 416 1214 1225 1277 1298 1399 1798 1808 1819 1830 1845 1856 2888 VALID_REC_HEADER 024520 constant entry internal dcl 2677 ref 1178 1794 2600 WAIT_FOR_SPECIAL 024553 constant entry internal dcl 2691 ref 683 746 1380 2022 WAIT_FOR_STATUS 024665 constant entry internal dcl 2716 ref 658 678 740 907 1004 1137 1155 1683 1787 1908 2382 2756 2849 2906 WRITE_DISK 024703 constant entry internal dcl 2730 ref 878 926 2954 WRITE_PREAMBLE 024752 constant entry internal dcl 2743 ref 2181 WRITE_RECORD 025114 constant entry internal dcl 2768 ref 997 2640 2755 2848 2905 WRITE_TAPE_EOR 025513 constant entry internal dcl 2838 ref 365 376 2567 WRITE_TAPE_LABEL 025571 constant entry internal dcl 2862 ref 375 2136 ZERO_PARTS_NOT_RESTORED 026135 constant entry internal dcl 2927 ref 2008 bad_set_input 006303 constant label dcl 517 ref 533 bce_save 002712 constant entry external dcl 11 bce_save$bce_restore 002726 constant entry external dcl 80 check_status 006621 constant label dcl 577 ref 659 680 741 check_tape_state 016355 constant label dcl 1760 in procedure "READ_TAPE_LABEL" ref 1765 1776 1799 1809 1820 1831 1846 1857 check_tape_state 025671 constant label dcl 2880 in procedure "WRITE_TAPE_LABEL" ref 2884 2892 2912 common 002740 constant label dcl 85 ref 78 do_tape_connect 025434 constant label dcl 2816 ref 2794 2801 end_of_tape 023724 constant label dcl 2588 ref 2580 2603 2619 end_tape_busy_loop 024251 constant label dcl 2626 ref 2623 error_recovery 010276 constant label dcl 763 ref 597 686 749 found_buf 014751 constant label dcl 1501 ref 1497 found_pv 013116 constant label dcl 1259 ref 1247 lrp_read_tape_label 012541 constant label dcl 1215 ref 1226 1278 mount_message 014033 constant label dcl 1367 ref 1387 next_den_idx 016401 constant label dcl 1770 ref 1781 1791 next_iob 011561 constant label dcl 1011 ref 988 next_tape_loop 014266 constant label dcl 1397 ref 1414 next_vol_array 012722 constant label dcl 1241 ref 1238 opr_query 023141 constant label dcl 2500 ref 2506 2513 2526 2542 2546 part_complete 015251 constant label dcl 1552 ref 1562 query_abort 006162 constant label dcl 507 ref 519 527 539 547 551 read_next_record 012324 constant label dcl 1153 ref 1164 1176 1186 remove_tape_dev 004333 constant label dcl 253 ref 249 272 restore_state 000000 constant label array(2) dcl 1938 ref 1936 restore_this_part 015435 constant label dcl 1597 ref 1582 1585 retry_the_io 007373 constant label dcl 668 ref 768 rew_status_ok 007462 constant label dcl 681 ref 601 save_restart_query 013540 constant label dcl 1294 set ref 1306 save_state 000002 constant label array(2) dcl 2045 ref 2043 setup_idcw 025220 constant label dcl 2776 ref 2812 skip_file 012445 constant label dcl 1184 ref 1192 skip_zeroing 026371 constant label dcl 2959 ref 2938 2943 spec_wait 014200 constant label dcl 1378 ref 1385 status_wait 017517 constant label dcl 1908 ref 1913 tape_end 012406 constant label dcl 1168 ref 1161 1178 1179 1183 this_part_ok 020543 constant label dcl 2085 ref 2080 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 27606 27740 27036 27616 Length 31004 27036 132 1027 547 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME bce_save 15188 external procedure is an external procedure. on unit on line 114 64 on unit ABORT internal procedure shares stack frame of external procedure bce_save. ATTACH_TAPE internal procedure shares stack frame of external procedure bce_save. BUFFER_AVAILABLE internal procedure shares stack frame of external procedure bce_save. BUFFER_COUNT internal procedure shares stack frame of external procedure bce_save. CHECK_ABORT internal procedure shares stack frame of external procedure bce_save. CHECK_STATUS internal procedure shares stack frame of external procedure bce_save. CLEANUP 102 internal procedure is called by several nonquick procedures. DETACH_TAPE 100 internal procedure is called by several nonquick procedures. DISK_DATA_READY internal procedure shares stack frame of external procedure bce_save. DISK_RUN internal procedure shares stack frame of external procedure bce_save. FLUSH_BUFFERS internal procedure shares stack frame of external procedure bce_save. FREE_BUFFER internal procedure shares stack frame of external procedure bce_save. FREE_OR_REQUEUE_TAPE_IO internal procedure shares stack frame of external procedure bce_save. GET_DISK_BUFFER internal procedure shares stack frame of external procedure bce_save. GET_TAPE_BUFFER internal procedure shares stack frame of external procedure bce_save. ISSUE internal procedure shares stack frame of external procedure bce_save. LOCATE_RECORD internal procedure shares stack frame of external procedure bce_save. LOCATE_RESTART_POINT internal procedure shares stack frame of external procedure bce_save. LOCATE_TAPE internal procedure shares stack frame of external procedure bce_save. MAKE_ZERO_DISK_RECORD internal procedure shares stack frame of external procedure bce_save. MOUNTED_TAPE internal procedure shares stack frame of external procedure bce_save. NEXT_TAPE_DEVICE internal procedure shares stack frame of external procedure bce_save. OLDEST_BUFFER internal procedure shares stack frame of external procedure bce_save. QUEUE_DISK_READ internal procedure shares stack frame of external procedure bce_save. QUEUE_DISK_WRITE internal procedure shares stack frame of external procedure bce_save. QUEUE_TAPE_READ internal procedure shares stack frame of external procedure bce_save. QUEUE_TAPE_WRITE internal procedure shares stack frame of external procedure bce_save. QUIESCE_TAPE internal procedure shares stack frame of external procedure bce_save. READ_DISK internal procedure shares stack frame of external procedure bce_save. READ_RECORD internal procedure shares stack frame of external procedure bce_save. READ_TAPE_LABEL internal procedure shares stack frame of external procedure bce_save. RECORD_TYPE internal procedure shares stack frame of external procedure bce_save. RELOCATE_RECORD internal procedure shares stack frame of external procedure bce_save. RESTORE_PV internal procedure shares stack frame of external procedure bce_save. REWIND_TAPE internal procedure shares stack frame of external procedure bce_save. SAVE_PV internal procedure shares stack frame of external procedure bce_save. SETUP internal procedure shares stack frame of external procedure bce_save. SETUP_REC_HEADER internal procedure shares stack frame of external procedure bce_save. SETUP_SET internal procedure shares stack frame of external procedure bce_save. SET_DEVICE_OPTIONS internal procedure shares stack frame of external procedure bce_save. SET_IOI_POST_BUF internal procedure shares stack frame of external procedure bce_save. SET_PTRS internal procedure shares stack frame of external procedure bce_save. TAPE_CONNECT internal procedure shares stack frame of external procedure bce_save. TAPE_DEVICE_READY internal procedure shares stack frame of external procedure bce_save. TAPE_DEVICE_USABLE internal procedure shares stack frame of external procedure bce_save. TAPE_ERROR_RECOVERY internal procedure shares stack frame of external procedure bce_save. TAPE_RUN internal procedure shares stack frame of external procedure bce_save. UNLOAD_TAPE internal procedure shares stack frame of external procedure bce_save. VALID_REC_HEADER internal procedure shares stack frame of external procedure bce_save. WAIT_FOR_SPECIAL internal procedure shares stack frame of external procedure bce_save. WAIT_FOR_STATUS internal procedure shares stack frame of external procedure bce_save. WRITE_DISK internal procedure shares stack frame of external procedure bce_save. WRITE_PREAMBLE internal procedure shares stack frame of external procedure bce_save. WRITE_RECORD internal procedure shares stack frame of external procedure bce_save. WRITE_TAPE_EOR internal procedure shares stack frame of external procedure bce_save. WRITE_TAPE_LABEL internal procedure shares stack frame of external procedure bce_save. ZERO_PARTS_NOT_RESTORED internal procedure shares stack frame of external procedure bce_save. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME bce_save 000100 argx bce_save 000101 arg_count bce_save 000102 arg_lth bce_save 000104 arg_ptr bce_save 000106 bad_density_status bce_save 000110 save_restore_info bce_save 000134 cf_array bce_save 000734 code bce_save 000735 date_time_string bce_save 000743 density_idx bce_save 000744 display_info_tape bce_save 000745 done bce_save 000746 end_of_file_status bce_save 000750 fb71 bce_save 000752 force_tape_run bce_save 000753 i bce_save 000754 iob_hold_ptr bce_save 000756 j bce_save 000760 my_name bce_save 000762 opr_input bce_save 001022 partx bce_save 001023 part_area bce_save 011024 prev_iobp bce_save 011026 pv_area bce_save 024272 restoring bce_save 024273 setx bce_save 024274 set_info bce_save 024714 supress_error_recovery bce_save 024716 tcb_area bce_save 027226 tape_drive_string bce_save 027253 tape_retries bce_save 027254 yes_no bce_save 027255 volx bce_save 027256 vol_map_bits_to_move bce_save 027266 io_post_buffer_ptr bce_save 027270 ioi_post_area_ptr bce_save 027272 iobp bce_save 027274 part_arrayp bce_save 027276 partp bce_save 027300 pv_arrayp bce_save 027302 pvp bce_save 027304 si_ptr bce_save 027306 srip bce_save 027310 tcb_arrayp bce_save 027312 tcbp bce_save 027314 info_tape_labelp bce_save 027316 tape_labelp bce_save 027320 vol_infop bce_save 027322 vol_preamblep bce_save 027324 disk_post_area_ptr bce_save 027326 seek_command bce_save 027330 io_special_status_ptr bce_save 027332 io_status_word_ptr bce_save 027334 isp bce_save 027336 dcwp bce_save 027340 tdcwp bce_save 027342 idcwp bce_save 027344 pvtp bce_save 027346 pvt_arrayp bce_save 027350 tedp bce_save 027352 taperap bce_save 027354 taperp bce_save 027356 vol_mapp bce_save 027570 buf_count BUFFER_COUNT 027572 temp_bufp BUFFER_COUNT 027654 checking_rew_status CHECK_STATUS 027655 detailed_status CHECK_STATUS 027663 have_detail CHECK_STATUS 027664 majstat CHECK_STATUS 027666 mjsdp CHECK_STATUS 027670 ssdp CHECK_STATUS 027672 substat CHECK_STATUS 027673 tsx CHECK_STATUS 027716 flushed FLUSH_BUFFERS 027734 iob_eot_state FREE_OR_REQUEUE_TAPE_IO 030070 oldest_bufp OLDEST_BUFFER 030072 oldest_time OLDEST_BUFFER 030074 temp_bufp OLDEST_BUFFER 030144 quiescent QUIESCE_TAPE 030170 rtx READ_TAPE_LABEL 030330 controller_attached SET_DEVICE_OPTIONS 030332 tcb_to_survey_ptr SET_DEVICE_OPTIONS 030400 retry_allowed TAPE_ERROR_RECOVERY 030432 time_to_wait WAIT_FOR_SPECIAL 030502 tlx WRITE_TAPE_LABEL THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_g_a r_e_as r_ne_as alloc_char_temp alloc_bit_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this call_int_other return_mac mdfx1 signal_op enable_op shorten_stack ext_entry int_entry any_to_any_truncate_clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. bce_query bce_query$yes_no bce_save_util_$display_info_tape bce_save_util_$init_buffers bce_save_util_$ioi_attach bce_save_util_$is_fips_device bce_save_util_$last_vtoc_used bce_save_util_$locate_tape_number bce_save_util_$premount_check bce_save_util_$read_pv_label bce_save_util_$scan_control_file bce_save_util_$scan_survey_data bce_save_util_$setup_all_parts bce_save_util_$skip_tape_device bce_save_util_$sort_pv_list bce_save_util_$thread_partition_list bootload_disk_io$queue_read bootload_disk_io$queue_write bootload_disk_io$test_done com_err_ cu_$arg_count_rel cu_$arg_ptr_rel date_time_ find_bit_$first_off find_bit_$last_off get_temp_segment_ ioa_ ioi_assignment$unassign ioi_connect ioi_get_status$detailed_status ioi_set$status release_temp_segment_ syserr syserr$error_code THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. bce_ioi_post_seg$ bootload_disk_post_seg$ error_table_$not_done error_table_$seg_not_found pvt$ tape_error_data$ wired_hardcore_data$abort_request LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 10 84 002616 11 002707 76 002720 77 002721 78 002723 80 002724 83 002734 84 002736 85 002740 87 002742 88 002745 89 002750 90 002752 91 002756 92 002761 93 002763 94 002765 95 002767 96 002771 97 002773 98 002776 99 003002 100 003006 101 003012 102 003013 103 003014 104 003016 105 003021 107 003027 108 003034 112 003047 114 003051 116 003073 117 003100 118 003115 119 003117 120 003146 122 003147 123 003150 125 003151 126 003153 128 003173 131 003174 132 003201 133 003202 134 003211 135 003233 136 003235 137 003264 139 003265 140 003272 141 003301 142 003302 143 003305 144 003325 146 003326 147 003331 148 003357 150 003360 151 003367 153 003425 154 003427 155 003433 156 003462 158 003463 159 003474 160 003501 161 003504 162 003507 163 003510 164 003515 165 003523 166 003525 167 003545 169 003546 170 003554 171 003555 172 003571 173 003577 174 003601 175 003621 177 003622 178 003631 179 003632 180 003646 181 003660 182 003661 183 003703 184 003705 185 003731 187 003732 188 003737 189 003742 190 003746 191 003751 192 003763 193 003766 194 003773 195 003775 196 003777 198 004000 199 004027 201 004030 203 004032 204 004034 205 004035 206 004037 207 004040 208 004041 209 004045 210 004054 211 004057 212 004060 213 004067 216 004070 217 004103 218 004104 219 004110 220 004111 221 004112 222 004113 223 004114 224 004115 225 004126 226 004141 227 004144 228 004151 229 004175 231 004176 232 004201 233 004225 235 004226 236 004233 237 004257 239 004260 241 004262 243 004263 244 004275 245 004276 247 004312 248 004321 249 004322 252 004326 253 004333 257 004370 258 004373 260 004376 261 004403 263 004413 264 004416 265 004441 266 004443 267 004447 268 004477 270 004500 271 004507 272 004510 273 004514 275 004523 276 004534 277 004565 278 004566 279 004577 280 004604 281 004641 283 004645 284 004664 287 004665 288 004667 290 004713 292 004723 294 004754 295 004756 296 004762 297 004763 298 004766 300 005031 302 005032 303 005042 304 005051 305 005054 306 005060 307 005062 308 005064 309 005066 310 005070 311 005077 312 005101 313 005103 314 005105 316 005106 318 005112 321 005131 323 005133 325 005141 326 005143 327 005144 329 005146 330 005167 331 005171 332 005175 333 005230 336 005231 338 005240 339 005243 340 005251 342 005253 343 005277 347 005302 348 005303 349 005306 350 005321 351 005322 353 005325 355 005333 357 005337 358 005340 360 005341 362 005363 363 005365 364 005371 365 005373 366 005374 367 005375 368 005402 370 005437 372 005443 374 005446 375 005447 376 005450 377 005451 379 005453 380 005454 381 005513 382 005516 383 005517 384 005525 386 005526 387 005544 388 005546 391 005556 392 005557 394 005561 398 005562 400 005566 408 005567 410 005572 411 005575 415 005603 416 005605 417 005611 419 005615 420 005616 421 005625 423 005630 424 005633 425 005634 426 005646 427 005654 428 005660 429 005662 430 005673 431 005677 432 005701 433 005702 434 005705 435 005707 436 005715 437 005716 438 005754 442 005755 445 005756 446 005761 451 005762 454 005763 455 005776 456 006000 457 006003 458 006012 459 006021 460 006034 461 006035 463 006046 464 006050 465 006052 466 006053 467 006055 468 006057 469 006061 474 006062 477 006064 478 006074 479 006105 480 006114 485 006122 491 006124 492 006125 494 006134 495 006142 496 006151 503 006155 506 006156 507 006162 509 006164 510 006212 511 006223 512 006231 513 006234 514 006252 515 006273 516 006275 517 006303 519 006326 521 006327 522 006334 523 006366 524 006372 526 006373 527 006421 529 006422 530 006426 531 006444 532 006465 533 006467 534 006475 535 006502 536 006504 538 006505 539 006533 541 006534 542 006544 547 006570 550 006571 551 006611 553 006612 561 006613 574 006614 575 006615 576 006620 577 006621 579 006624 580 006631 581 006637 582 006644 583 006645 584 006650 585 006653 588 006702 589 006703 590 006712 591 006714 593 006746 595 006747 596 006752 597 007002 598 007004 599 007005 601 007010 603 007012 604 007015 606 007016 607 007021 609 007023 610 007024 611 007031 612 007033 613 007034 614 007035 615 007042 616 007044 617 007045 619 007046 620 007052 623 007056 625 007064 627 007105 628 007107 629 007114 630 007122 631 007127 632 007133 635 007221 636 007251 639 007301 640 007312 641 007316 654 007322 655 007325 656 007334 658 007342 659 007351 661 007352 664 007354 667 007366 668 007373 670 007376 672 007414 673 007424 674 007427 675 007431 676 007433 677 007441 678 007450 679 007457 680 007461 681 007462 683 007463 684 007472 685 007476 686 007527 689 007530 691 007536 692 007537 693 007541 694 007543 695 007544 696 007546 697 007556 698 007560 699 007564 700 007566 701 007570 702 007573 703 007576 704 007600 705 007601 706 007603 707 007611 708 007613 709 007617 710 007621 711 007623 712 007625 713 007627 715 007636 716 007642 721 007661 722 007670 723 007672 725 007673 726 007677 728 007712 730 007714 731 007715 732 007721 733 007725 735 007727 736 007737 737 007740 738 007746 739 007747 740 007751 741 007760 743 007761 744 007764 745 007775 746 010032 747 010041 748 010045 749 010076 751 010077 753 010100 754 010101 757 010131 759 010222 760 010253 763 010276 766 010304 767 010305 768 010306 770 010307 771 010312 779 010313 782 010321 786 010336 787 010341 788 010345 789 010347 790 010353 791 010355 792 010361 793 010364 794 010367 795 010373 796 010376 797 010401 801 010404 802 010410 803 010412 806 010425 807 010433 808 010444 809 010451 810 010454 812 010456 813 010457 814 010466 817 010473 818 010521 820 010524 822 010531 823 010536 824 010547 829 010550 832 010556 833 010570 834 010627 835 010633 836 010634 837 010637 846 010640 849 010642 850 010653 851 010664 852 010676 853 010700 854 010732 856 010733 857 010736 858 010741 863 010747 866 010750 867 010760 869 010771 873 011003 875 011012 876 011022 878 011033 880 011041 882 011042 883 011051 892 011052 896 011053 897 011054 898 011056 899 011060 900 011070 901 011072 902 011076 903 011077 904 011100 905 011101 907 011110 908 011117 909 011120 911 011126 913 011131 914 011134 915 011135 916 011136 917 011140 919 011147 920 011150 921 011151 922 011152 923 011154 925 011163 926 011175 928 011200 929 011201 930 011202 931 011204 933 011213 934 011215 935 011220 936 011232 938 011237 939 011271 941 011272 942 011273 943 011274 944 011275 945 011276 946 011277 948 011300 950 011311 951 011323 953 011326 954 011327 955 011330 956 011332 958 011341 959 011343 960 011346 961 011360 963 011365 964 011417 966 011420 967 011421 968 011424 969 011427 970 011430 971 011431 972 011433 974 011442 975 011443 976 011444 977 011445 978 011447 980 011456 981 011465 982 011467 984 011476 986 011502 987 011504 988 011505 990 011506 991 011515 992 011517 994 011525 995 011527 997 011531 999 011532 1000 011533 1001 011534 1002 011536 1004 011545 1005 011554 1006 011555 1007 011556 1008 011557 1009 011560 1011 011561 1013 011570 1014 011571 1022 011572 1025 011573 1026 011576 1027 011601 1033 011602 1037 011603 1038 011605 1039 011607 1040 011611 1041 011614 1043 011623 1044 011631 1045 011633 1046 011635 1047 011643 1050 011702 1053 011705 1054 011711 1055 011714 1056 011716 1057 011721 1060 011740 1062 011747 1063 011750 1064 011751 1065 011752 1066 011762 1067 011764 1077 011765 1080 011766 1081 011776 1082 012001 1083 012003 1084 012006 1085 012010 1086 012017 1088 012020 1089 012027 1090 012054 1096 012055 1099 012056 1100 012066 1101 012071 1102 012073 1103 012076 1104 012100 1105 012107 1107 012110 1108 012117 1109 012144 1115 012145 1118 012147 1120 012150 1121 012154 1122 012156 1123 012163 1124 012173 1126 012202 1127 012205 1128 012213 1129 012214 1130 012235 1131 012237 1132 012273 1136 012274 1137 012305 1138 012314 1139 012315 1147 012316 1151 012320 1152 012321 1153 012324 1155 012325 1156 012334 1157 012335 1158 012337 1159 012343 1161 012374 1163 012375 1164 012377 1166 012400 1167 012403 1168 012406 1170 012407 1171 012410 1173 012416 1174 012417 1175 012420 1176 012421 1178 012422 1179 012430 1182 012435 1183 012443 1184 012445 1186 012447 1188 012450 1189 012452 1190 012454 1191 012457 1192 012462 1193 012470 1194 012475 1195 012476 1197 012516 1198 012520 1199 012527 1201 012531 1211 012532 1214 012533 1215 012541 1217 012543 1218 012544 1220 012556 1222 012565 1223 012576 1225 012627 1226 012630 1228 012631 1229 012633 1231 012643 1232 012656 1233 012675 1234 012700 1236 012706 1237 012712 1238 012717 1240 012720 1241 012722 1244 012724 1246 012735 1247 012750 1249 012766 1250 012770 1251 012772 1252 013010 1254 013051 1255 013053 1256 013112 1257 013115 1259 013116 1261 013132 1263 013173 1264 013175 1265 013204 1266 013212 1267 013214 1269 013256 1271 013257 1272 013304 1273 013306 1274 013312 1277 013346 1278 013347 1280 013350 1281 013374 1282 013377 1284 013404 1285 013410 1286 013415 1288 013461 1289 013464 1290 013474 1291 013476 1294 013540 1297 013623 1298 013634 1299 013635 1301 013636 1304 013647 1306 013700 1309 013701 1310 013702 1317 013703 1320 013704 1321 013713 1323 013733 1325 013742 1327 013747 1329 013750 1336 013751 1339 013752 1340 013753 1341 013761 1342 013767 1343 013771 1344 013772 1345 013774 1347 013775 1348 014004 1349 014006 1350 014010 1352 014012 1353 014015 1354 014023 1355 014025 1356 014030 1364 014031 1367 014033 1369 014037 1371 014077 1374 014136 1377 014175 1378 014200 1380 014211 1381 014220 1382 014224 1385 014246 1387 014252 1388 014257 1394 014265 1397 014266 1399 014271 1400 014275 1402 014301 1403 014325 1404 014327 1405 014333 1406 014355 1407 014357 1408 014363 1409 014413 1412 014414 1413 014423 1414 014424 1415 014430 1416 014437 1417 014442 1425 014443 1433 014445 1434 014447 1435 014451 1437 014460 1439 014470 1440 014471 1442 014472 1443 014501 1444 014513 1446 014525 1452 014532 1459 014534 1460 014535 1461 014540 1463 014553 1464 014555 1466 014602 1467 014605 1470 014615 1471 014622 1472 014625 1474 014651 1475 014653 1477 014665 1478 014667 1479 014670 1480 014673 1481 014700 1482 014702 1483 014704 1484 014710 1485 014712 1486 014714 1487 014716 1493 014717 1496 014720 1497 014730 1499 014741 1500 014750 1501 014751 1503 014755 1504 014762 1505 014765 1506 014766 1508 014767 1509 014772 1511 015011 1512 015016 1513 015020 1514 015023 1515 015024 1517 015025 1519 015034 1520 015040 1522 015056 1523 015063 1526 015071 1527 015073 1529 015076 1530 015077 1532 015100 1533 015106 1534 015113 1537 015212 1539 015215 1540 015221 1541 015226 1542 015231 1543 015235 1544 015237 1545 015242 1546 015244 1547 015245 1548 015246 1549 015250 1552 015251 1554 015254 1556 015272 1557 015277 1559 015305 1561 015310 1562 015311 1564 015316 1566 015317 1567 015331 1568 015332 1570 015333 1571 015337 1572 015340 1573 015343 1575 015344 1576 015352 1577 015355 1578 015356 1580 015357 1581 015362 1582 015365 1583 015370 1584 015376 1585 015405 1586 015411 1588 015417 1589 015423 1590 015424 1591 015426 1592 015430 1594 015432 1595 015433 1596 015434 1597 015435 1599 015443 1602 015542 1604 015545 1605 015551 1606 015554 1607 015556 1609 015574 1610 015601 1614 015606 1615 015607 1616 015615 1617 015627 1619 015722 1620 015725 1621 015726 1623 015741 1624 015743 1628 015744 1629 015747 1630 015752 1631 015754 1637 015755 1640 015756 1641 015757 1642 015762 1643 015764 1644 015767 1650 015770 1653 015771 1654 016000 1656 016011 1657 016014 1658 016017 1659 016021 1660 016026 1662 016027 1663 016036 1670 016037 1674 016040 1675 016041 1676 016044 1677 016046 1678 016056 1679 016062 1680 016063 1681 016064 1682 016065 1683 016067 1684 016076 1685 016077 1686 016100 1687 016101 1688 016102 1689 016104 1690 016105 1692 016106 1693 016115 1694 016116 1703 016117 1706 016120 1707 016123 1708 016126 1710 016165 1716 016166 1719 016167 1720 016172 1721 016173 1722 016175 1723 016204 1724 016206 1726 016210 1727 016214 1728 016215 1729 016216 1730 016235 1731 016237 1732 016273 1735 016274 1736 016277 1737 016302 1738 016306 1739 016311 1740 016313 1741 016316 1742 016324 1743 016330 1744 016332 1745 016333 1746 016337 1747 016343 1748 016345 1749 016346 1750 016353 1756 016354 1760 016355 1763 016367 1764 016372 1765 016373 1768 016374 1769 016377 1770 016401 1772 016403 1773 016406 1774 016443 1775 016446 1776 016447 1778 016450 1779 016451 1780 016457 1781 016464 1783 016475 1784 016476 1786 016507 1787 016510 1788 016517 1789 016520 1790 016522 1791 016523 1793 016524 1794 016527 1795 016534 1797 016571 1798 016572 1799 016573 1801 016574 1803 016606 1804 016610 1805 016617 1807 016654 1808 016655 1809 016656 1811 016657 1812 016674 1815 016775 1816 017006 1818 017046 1819 017047 1820 017050 1822 017051 1823 017054 1824 017056 1825 017061 1828 017115 1829 017120 1830 017121 1831 017122 1834 017123 1835 017127 1836 017135 1837 017136 1838 017137 1839 017142 1840 017143 1841 017144 1842 017154 1844 017210 1845 017211 1846 017212 1848 017213 1849 017217 1850 017222 1851 017223 1852 017224 1853 017244 1855 017277 1856 017300 1857 017301 1859 017302 1860 017303 1861 017313 1862 017324 1869 017325 1873 017327 1874 017336 1875 017345 1878 017366 1880 017374 1881 017403 1882 017421 1883 017430 1890 017434 1893 017435 1894 017440 1895 017441 1896 017443 1897 017451 1898 017453 1899 017457 1900 017461 1901 017463 1902 017466 1903 017467 1904 017501 1905 017505 1907 017507 1908 017517 1910 017526 1911 017527 1912 017536 1913 017537 1915 017540 1918 017575 1933 017576 1936 017577 1938 017602 1940 017604 1941 017605 1942 017606 1943 017607 1945 017626 1946 017630 1947 017637 1948 017643 1949 017645 1952 017656 1953 017665 1955 017702 1956 017704 1957 017710 1961 017754 1962 017767 1964 017770 1965 017776 1966 020002 1968 020005 1970 020015 1971 020017 1972 020021 1975 020030 1976 020031 1979 020040 1980 020042 1981 020044 1982 020046 1986 020115 1987 020120 1989 020121 1991 020124 1992 020131 1993 020134 1994 020135 1995 020137 1996 020141 1997 020142 1998 020143 1999 020147 2001 020150 2002 020151 2003 020152 2006 020153 2007 020157 2008 020160 2009 020165 2012 020227 2017 020230 2020 020231 2021 020242 2022 020244 2023 020253 2024 020261 2040 020262 2043 020263 2045 020266 2048 020306 2049 020310 2050 020317 2051 020324 2052 020334 2053 020336 2054 020341 2055 020342 2056 020347 2057 020350 2058 020357 2059 020360 2061 020371 2062 020403 2063 020406 2064 020407 2066 020417 2067 020422 2068 020423 2069 020431 2070 020432 2071 020444 2072 020446 2073 020451 2074 020452 2075 020456 2076 020465 2078 020475 2080 020506 2081 020517 2082 020524 2085 020543 2087 020546 2089 020547 2090 020552 2092 020561 2094 020571 2095 020604 2097 020622 2099 020624 2101 020636 2102 020645 2103 020653 2106 020661 2107 020714 2108 020747 2111 021004 2112 021011 2113 021013 2114 021015 2116 021016 2117 021017 2119 021022 2120 021032 2121 021040 2123 021041 2124 021043 2127 021045 2128 021046 2129 021050 2130 021051 2131 021055 2132 021060 2134 021061 2136 021064 2137 021070 2138 021075 2141 021140 2142 021144 2143 021147 2144 021157 2146 021163 2147 021165 2148 021172 2149 021173 2151 021175 2155 021223 2156 021226 2161 021253 2162 021255 2164 021266 2165 021267 2167 021275 2168 021277 2169 021300 2171 021323 2172 021325 2173 021336 2174 021337 2175 021340 2177 021355 2178 021356 2179 021357 2181 021361 2182 021365 2183 021366 2184 021367 2187 021370 2190 021375 2208 021376 2211 021377 2212 021402 2213 021406 2214 021434 2216 021435 2217 021443 2218 021446 2219 021452 2220 021501 2223 021502 2224 021505 2225 021511 2226 021540 2228 021541 2230 021547 2232 021557 2233 021562 2234 021566 2235 021620 2237 021621 2238 021633 2239 021642 2240 021651 2241 021654 2242 021660 2244 021665 2245 021671 2246 021674 2247 021715 2248 021720 2249 021722 2250 021752 2252 021753 2253 021761 2254 021763 2255 021770 2256 021772 2257 021773 2259 021774 2260 021777 2261 022001 2263 022004 2264 022006 2269 022007 2273 022011 2274 022014 2275 022017 2276 022031 2277 022040 2278 022042 2279 022047 2280 022050 2281 022051 2282 022053 2284 022054 2285 022057 2287 022063 2288 022065 2297 022066 2300 022067 2301 022071 2302 022073 2303 022074 2305 022103 2306 022106 2307 022107 2310 022113 2311 022115 2312 022117 2313 022124 2314 022127 2315 022132 2316 022135 2317 022137 2319 022143 2320 022146 2321 022147 2324 022150 2325 022162 2326 022163 2327 022173 2328 022176 2329 022212 2330 022216 2331 022220 2334 022227 2335 022232 2346 022233 2351 022234 2352 022237 2353 022240 2354 022243 2355 022247 2356 022254 2357 022267 2358 022270 2359 022277 2360 022301 2361 022302 2362 022303 2363 022310 2364 022312 2365 022314 2367 022322 2368 022324 2369 022327 2372 022334 2373 022342 2374 022343 2375 022365 2376 022367 2377 022423 2381 022424 2382 022434 2383 022443 2385 022444 2386 022455 2387 022457 2388 022471 2389 022473 2390 022527 2392 022530 2393 022537 2394 022541 2395 022542 2397 022545 2403 022546 2408 022550 2409 022555 2410 022560 2411 022563 2412 022565 2418 022566 2421 022567 2422 022573 2423 022577 2424 022601 2425 022605 2426 022607 2427 022613 2428 022615 2429 022617 2430 022623 2431 022625 2432 022627 2433 022631 2439 022632 2443 022634 2444 022645 2445 022662 2448 022721 2449 022734 2454 022735 2457 022737 2458 022752 2459 022755 2460 022760 2462 022772 2464 023000 2472 023006 2475 023010 2476 023012 2477 023014 2478 023015 2479 023027 2480 023040 2481 023051 2482 023056 2484 023071 2486 023077 2492 023105 2496 023106 2500 023141 2502 023167 2503 023175 2504 023205 2505 023207 2506 023234 2508 023235 2510 023236 2511 023246 2512 023255 2513 023302 2515 023303 2516 023304 2518 023305 2519 023315 2520 023350 2521 023353 2523 023354 2524 023364 2525 023370 2526 023420 2528 023421 2530 023422 2532 023436 2533 023446 2535 023466 2536 023504 2538 023527 2542 023553 2545 023554 2546 023574 2548 023575 2555 023576 2558 023577 2559 023606 2561 023617 2562 023630 2563 023631 2564 023635 2565 023636 2566 023642 2567 023643 2568 023644 2569 023645 2570 023647 2571 023650 2573 023651 2575 023652 2576 023654 2577 023660 2580 023711 2582 023712 2583 023714 2584 023715 2586 023716 2587 023721 2588 023724 2590 023725 2591 023726 2593 023734 2594 023735 2595 023736 2596 023740 2597 023741 2598 023742 2600 023743 2601 023760 2603 024043 2605 024045 2606 024052 2607 024055 2611 024146 2612 024162 2613 024167 2615 024223 2619 024227 2620 024234 2621 024236 2623 024241 2625 024242 2626 024251 2631 024261 2632 024270 2634 024301 2635 024305 2637 024312 2638 024314 2640 024316 2641 024317 2642 024320 2643 024321 2645 024322 2646 024331 2653 024332 2656 024333 2662 024471 2664 024503 2665 024505 2666 024507 2667 024510 2668 024513 2669 024515 2670 024517 2677 024520 2681 024522 2682 024533 2684 024546 2691 024553 2697 024555 2698 024560 2699 024565 2700 024572 2701 024575 2702 024621 2704 024622 2705 024623 2706 024624 2707 024626 2710 024664 2716 024665 2720 024667 2721 024674 2722 024700 2723 024701 2724 024702 2730 024703 2733 024704 2734 024707 2735 024712 2737 024751 2743 024752 2746 024753 2747 024755 2749 025051 2750 025053 2751 025056 2752 025065 2753 025070 2754 025071 2755 025073 2756 025074 2757 025103 2758 025104 2759 025106 2760 025107 2761 025112 2762 025113 2768 025114 2771 025115 2772 025117 2776 025220 2778 025224 2779 025225 2780 025227 2781 025236 2783 025240 2784 025244 2785 025245 2786 025246 2787 025265 2788 025267 2789 025323 2792 025324 2793 025327 2794 025332 2797 025351 2798 025352 2799 025360 2801 025371 2804 025374 2805 025400 2806 025403 2807 025407 2808 025412 2809 025413 2810 025416 2811 025422 2812 025424 2815 025425 2816 025434 2818 025436 2819 025441 2820 025445 2821 025450 2822 025452 2823 025455 2824 025463 2825 025467 2826 025471 2827 025472 2828 025476 2829 025502 2830 025504 2831 025505 2832 025512 2838 025513 2841 025514 2842 025516 2843 025517 2844 025522 2845 025537 2846 025543 2847 025544 2848 025546 2849 025547 2850 025556 2851 025557 2852 025561 2853 025562 2854 025564 2855 025566 2856 025570 2862 025571 2867 025572 2868 025575 2869 025600 2870 025602 2872 025603 2873 025604 2874 025616 2877 025662 2879 025666 2880 025671 2883 025703 2884 025704 2887 025705 2888 025711 2889 025712 2891 025775 2892 026001 2894 026002 2895 026003 2896 026006 2897 026007 2898 026012 2899 026015 2901 026025 2903 026036 2904 026041 2905 026043 2906 026044 2907 026053 2908 026054 2909 026056 2910 026113 2911 026114 2912 026115 2914 026116 2915 026121 2916 026122 2917 026124 2918 026125 2919 026130 2920 026134 2927 026135 2930 026136 2931 026137 2932 026142 2933 026143 2934 026151 2935 026152 2936 026161 2937 026162 2938 026173 2942 026222 2943 026230 2945 026246 2946 026253 2948 026322 2949 026323 2950 026331 2951 026343 2952 026353 2953 026355 2954 026357 2955 026360 2956 026365 2957 026366 2958 026370 2959 026371 2961 026373 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved