COMPILATION LISTING OF SEGMENT bce_save_util_ 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 1016.0 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_util_: 12 procedure (a_sri_ptr); 13 14 /****^ HISTORY COMMENTS: 15* 1) change(86-09-18,Farley), approve(86-07-18,MCR7439), 16* audit(86-09-24,Fawcett), install(86-10-20,MR12.0-1189): 17* Collection of Save/Restore routines that are not part of the main 18* stream save/restore loop and do not reference main stream procedures. 19* Therefore they can take the time to push a stack frame. 20* 2) change(87-07-07,Farley), approve(87-07-17,MCR7733), 21* audit(87-07-21,Fawcett), install(87-07-31,MR12.1-1051): 22* Changed most of the calls to ioa_ and com_err_ to calls to syserr and 23* syserr$error_code so that a time stamp will be included in the output.. 24* 3) change(87-11-04,Farley), approve(88-02-26,MCR7811), 25* audit(88-03-03,Fawcett), install(88-03-15,MR12.2-1035): 26* Changed premount_check entry to only display the pre-mount message if the 27* usable tape device count is greater than 1. This is needed because 28* bce_save is now calling this entry without checking this count. 29* 4) change(87-11-16,Farley), approve(88-02-26,MCR7811), 30* audit(88-03-03,Fawcett), install(88-03-15,MR12.2-1035): 31* Removed the setting of part.zrec, since this value was moved to pv.zrec 32* and does not need to be set to a -1. 33* END HISTORY COMMENTS */ 34 35 dcl a_sri_ptr ptr parameter; /* pointer to save/restore info */ 36 37 return; /* main entry not used */ 38 39 /**** This entry will display the contents of the "Info" tape. */ 40 41 bce_save_util_$display_info_tape: 42 entry (a_sri_ptr); 43 44 call SETUP; 45 call ioa_ ("^/^2x^a, version (^a)^/", info_tape_label.title, info_tape_label.version); 46 call ioa_ ("^4xSave time = ^a", 47 date_time_$format ("clock", info_tape_label.save_time, "system_zone", "system_lang")); 48 call ioa_ ("^4xTape set ""^a"", which contains ^d tapes^/^4xVolumes in set = ^d", info_tape_label.tape_set, 49 info_tape_label.tapes_in_set, info_tape_label.vol_array_size); 50 call ioa_ ( 51 "^2/^57tType of^/^50tDevice^xRecords^3xBegin^2xEnd^/^2xPhysical Volume^40tPVID^50tType^3xSaved^5xTape^3xTape^/" 52 ); 53 do volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size; 54 vol_infop = addr (info_tape_label.vol_array (volx)); 55 if vol_info.data_saved = PART_ONLY then do; 56 rx = lbound (vol_info.region, 1); 57 vol_begin_tape = vol_info.region (1).begins_on_tape; 58 vol_end_tape = vol_info.region (vol_info.nregions).ends_on_tape; 59 end; 60 else do; 61 rx = lbound (vol_info.region, 1) + 1; /* skip vtoc/paging region info */ 62 vol_begin_tape = vol_info.region (1).begins_on_tape; 63 vol_end_tape = vol_info.region (1).ends_on_tape; 64 end; 65 call ioa_ ("^2x^32a^x^12.3b^2x^4a^3x^[PV_ONLY ^;PART_ONLY^;PV/PART ^]^2x^3d^4x^3d", vol_info.pvname, 66 vol_info.pvid, device_names (vol_info.dev_type), vol_info.data_saved + 1, vol_begin_tape, 67 vol_end_tape); 68 do rx = rx to vol_info.nregions; 69 call ioa_ ("^4xpartition - ^a^68t^3d^4x^3d", vol_info.region (rx).part_name, 70 vol_info.region (rx).begins_on_tape, vol_info.region (rx).ends_on_tape); 71 end; 72 end; 73 call ioa_ ("^2/"); 74 return; 75 76 /**** This entry is responsible for setting up the IOI workspace to 77* allow for the IO buffers to work properly. The workspace is setup so 78* that the first page is reserved for the IO buffers and status queue 79* and the remaining pages will be used for the actual data, minus the 80* header (which is in the tape buffer). This allows the data to be on 81* page boundaries and easily sent to/from tape and disk without ever 82* having to move it to different memory areas. NOTE: the first 32 83* words of the workspace will be reserved for other IO posibilities. */ 84 85 bce_save_util_$init_buffers: 86 entry (a_sri_ptr); 87 88 call SETUP; 89 tcb.buf_listx = bin (rel (tcb.wksp), 18) + 32; 90 tcb.nbufs = 0; 91 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (tcb.nbufs < MAX_BUFFERS); 92 unspec (iob) = ""b; /* clear buffer */ 93 iob.next_bufx = bin (rel (iobp), 18) + size (iob); 94 /* point to next buffer */ 95 call FREE_BUFFER; /* mark it as FREE */ 96 iob.disk_post_buf = si.first_disk_post_buf + tcb.nbufs; 97 /* set correct disk posting buffer */ 98 tcb.nbufs = tcb.nbufs + 1; /* up the buffer count */ 99 if tcb.nbufs = MAX_BUFFERS then do; /* LAST? */ 100 iob.next_bufx = 0; /* mark this as the last */ 101 tcb.statusx = bin (rel (iobp), 18) + size (iob); 102 /* status queue is after last buffer */ 103 end; 104 105 iob.datax = bit (bin (tcb.nbufs * PAGE_SIZE, 18), 18); 106 /* page addr = page (buf#) */ 107 108 dcwp = addr (iob.header_dcw); 109 dcw.address = rel (addr (iob.head)); 110 dcw.type = IOTP; 111 dcw.tally = bit (bin (size (rec_header), 12)); 112 113 dcwp = addr (iob.data_dcw); 114 dcw.address = iob.datax; 115 dcw.type = IOTD; 116 dcw.tally = bit (bin (PAGE_SIZE, 12)); /* 1 page */ 117 end; 118 119 tcb.status_count = tcb.nbufs; 120 tcb.status_idx = 0; 121 si.ioi_statusx = tcb.statusx; 122 call ioi_set$status (tcb.ioi_index, si.ioi_statusx, (tcb.status_count), code); 123 if code ^= 0 then do; 124 call syserr$error_code (BEEP, code, "^a: Setting status index for ^a.^66t***^/^-", my_name, tcb.name); 125 call ABORT; 126 end; 127 128 return; 129 130 /**** Entry to attach the tape device specified in tcb, via IOI. */ 131 132 bce_save_util_$ioi_attach: 133 entry (a_sri_ptr); 134 135 call SETUP; 136 unspec (tcb.ioi_ev_chn) = ""b; 137 substr (unspec (tcb.ioi_ev_chn), 37, 36) = unspec (substr (tcb.name, 4, 4)); 138 tcb.wksp = null (); 139 si.ioi_statusx = -1; 140 call ioi_assignment$assign (tcb.ioi_index, tcb.name, tcb.ioi_ev_chn, OFF, code); 141 if code ^= 0 then do; 142 call syserr$error_code (BEEP, code, "^a: Attaching ^a.^66t***^/^-", my_name, tcb.name); 143 call ABORT; 144 end; 145 call ioi_set$max_workspace (tcb.ioi_index, WORKSPACE_SIZE, code); 146 if code ^= 0 then do; 147 call syserr$error_code (BEEP, code, "^a: Setting max workspace for ^a.^66t***^/^-", my_name, tcb.name); 148 unassign_device: 149 call ioi_assignment$unassign (tcb.ioi_index, code); 150 if code ^= 0 then call syserr$error_code (BEEP, code, "^a: Unassigning ^a.^66t***^/^-", my_name, tcb.name); 151 call ABORT; 152 end; 153 call ioi_set$workspace (tcb.ioi_index, tcb.wksp, WORKSPACE_SIZE, code); 154 if code ^= 0 then do; 155 call syserr$error_code (BEEP, code, "^a: Setting up workspace for ^a.^66t***^/^-", my_name, tcb.name); 156 goto unassign_device; 157 end; 158 return; 159 160 /**** Entry for finding out if a given tape device is a FIPS type. 161* Which is done by finding the first valid device model number from 162* the PRPH card, then looking this device up in the config_data_ 163* segment. If device numbers start at zero, then it is assumed to be 164* part of a FIPS subsystem. */ 165 166 bce_save_util_$is_fips_device: 167 entry (a_sri_ptr) returns (bit (1)); 168 dcl tap_groupx fixed bin; 169 170 call SETUP; 171 call config_$find_periph (substr (tcb.name, 1, 4), prph_tap_cardp); 172 if prph_tap_cardp = null () then do; 173 call syserr (ANNOUNCE, "^a(^a): Tape subsystem ""^a"" is not defined in the config.", my_name, si.tape_set, 174 substr (tcb.name, 1, 4)); 175 call ABORT; 176 end; 177 do tap_groupx = lbound (prph_tap_card.group, 1) to hbound (prph_tap_card.group, 1); 178 if prph_tap_card.group (tap_groupx).model ^= 0 then do; 179 do i = lbound (config_data_$tape_drive_model_names.names, 1) 180 to config_data_$tape_drive_model_names.count; 181 if config_data_$tape_drive_model_names.names (i).model = prph_tap_card.group (tap_groupx).model 182 then return (config_data_$tape_drive_model_names.names (i).device_0_valid); 183 end; 184 return (NO); 185 end; 186 end; 187 return (NO); 188 189 /**** Entry to find the last used vtoce from the vtoc_map, then 190* use that to calculate the last vtoc record that is in use. This 191* is done to allow the save to not have to save the vtoc records that 192* are not being used, hence speeding up the save. */ 193 194 bce_save_util_$last_vtoc_used: 195 entry (a_sri_ptr) returns (fixed bin (18)); 196 dcl ALL_FREE_IN_WORD bit (32) int static options (constant) init ("ffffffff"b4); 197 dcl bit_idx fixed bin; 198 dcl last_vtoc_record_used 199 fixed bin (18); 200 dcl last_vtoce_used fixed bin; 201 dcl vtoce_bit fixed bin; 202 203 call SETUP; 204 call GET_DISK_BUFFER; 205 iob.head.rec_on_pv = VTOC_MAP_ADDR; 206 call READ_DISK; /* read vtoc map */ 207 do while (^DISK_DATA_READY ()); 208 end; 209 si.vol_map_ptr -> page = si.datap -> page; /* will get overlayed by vol_map */ 210 call FREE_BUFFER; 211 vtoc_mapp = si.vol_map_ptr; 212 bit_idx = mod (vtoc_map.n_vtoce, VTOCES_PER_WORD); 213 if bit_idx = 0 then bit_idx = VTOCES_PER_WORD; /* show full word */ 214 bit_map_wordp = addr (vtoc_map.bit_map (vtoc_map.bit_map_n_words - 1)); 215 vtoce_bit = find_bit_$last_off (substr (bit_map_word.bits, 1, bit_idx)); 216 if vtoce_bit > 0 then do; /* last word has used VTOCE */ 217 last_vtoce_used = ((vtoc_map.bit_map_n_words - 1) * VTOCES_PER_WORD) + vtoce_bit - 1; 218 goto set_vtoc_record; 219 end; 220 do i = vtoc_map.bit_map_n_words - 2 by -1 to lbound (vtoc_map.bit_map, 1); 221 bit_map_wordp = addr (vtoc_map.bit_map (i)); 222 if bit_map_word.bits ^= ALL_FREE_IN_WORD then goto found_last; 223 end; 224 return (VTOC_ORIGIN); /* No used vtoces */ 225 found_last: 226 last_vtoce_used = (i * VTOCES_PER_WORD) + find_bit_$last_off (bit_map_word.bits) - 1; 227 set_vtoc_record: 228 last_vtoc_record_used = 229 VTOC_ORIGIN 230 + 231 divide ((last_vtoce_used + VTOCES_PER_RECORD (pvt_array (pv.pvtx).device_type)), 232 VTOCES_PER_RECORD (pvt_array (pv.pvtx).device_type), 18); 233 vtoc_mapp = null (); 234 return (last_vtoc_record_used); 235 236 /**** This entry is for finding the number of the tape that should 237* be on the current tape device during a restore. */ 238 239 bce_save_util_$locate_tape_number: 240 entry (a_sri_ptr); 241 242 call SETUP; 243 do volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size 244 while (info_tape_label.vol_array (volx).pvname ^= pv.name); 245 end; 246 si.vol_info_ptr, vol_infop = addr (info_tape_label.vol_array (volx)); 247 248 if pv.only_part then do; 249 do partx = pv.part_idx repeat part_array (partx).next_idx while (part_array (partx).complete); 250 end; 251 do rx = lbound (vol_info.region, 1) to vol_info.nregions 252 while (vol_info.region (rx).part_name ^= part_array (partx).name); 253 end; 254 si.first_tape_number = vol_info.region (rx).begins_on_tape; 255 do partx = partx repeat part_array (partx).next_idx while (partx ^= 0); 256 end; 257 do rx = lbound (vol_info.region, 1) to vol_info.nregions 258 while (vol_info.region (rx).part_name ^= part_array (partx).name); 259 end; 260 si.last_tape_number = vol_info.region (rx).ends_on_tape; 261 end; 262 else do; 263 do rx = lbound (vol_info.region, 1) to vol_info.nregions while (vol_info.region (rx).part_name ^= ""); 264 end; 265 si.first_tape_number = vol_info.region (rx).begins_on_tape; 266 si.last_tape_number = vol_info.region (rx).ends_on_tape; 267 end; 268 if si.tape_seq_number < si.first_tape_number then si.tape_seq_number = si.first_tape_number; 269 if si.tape_seq_number = 0 & info_tape_label.tape_number ^= "Info" 270 then si.tape_seq_number = bin (info_tape_label.tape_number, 17); 271 /* start search with this tape */ 272 return; 273 274 /**** This entry determines if another tape, after the current one, is going 275* to be needed. If needed, then a pre-mount message will be displayed to 276* the operator if more than 1 device is usable. */ 277 278 bce_save_util_$premount_check: 279 entry (a_sri_ptr); 280 dcl info_volx fixed bin; 281 dcl LARGE_TAPE_NUMBER fixed bin int static options (constant) init (9999); 282 dcl temp_pvx fixed bin; 283 284 call SETUP; 285 si.next_tape_number = si.tape_seq_number + 1; /* default to next tape# */ 286 if tcb.tape_vol_number = "" then return; /* no current tape mounted */ 287 if si.restart then si.tape_seq_number = bin (tape_label.tape_number, 17); 288 /* start with restart tape# */ 289 if si.tape_seq_number < si.last_tape_number then do; 290 /* current region continues on next tape */ 291 si.next_tape_number = si.tape_seq_number + 1; 292 goto display_premount; 293 end; 294 si.next_tape_number = LARGE_TAPE_NUMBER; /* start very high */ 295 do temp_pvx = si.pvx to si.pv_count; 296 do info_volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size 297 while (info_tape_label.vol_array (info_volx).pvname ^= pv_array (temp_pvx).name); 298 end; 299 if pv_array (temp_pvx).only_part then do; 300 do temp_partx = pv_array (temp_pvx).part_idx repeat part_array (temp_partx).next_idx 301 while (temp_partx ^= 0); 302 if ^part_array (temp_partx).complete then do; 303 do rx = lbound (info_tape_label.vol_array (info_volx).region, 1) 304 to info_tape_label.vol_array (info_volx).nregions 305 while (info_tape_label.vol_array (info_volx).region (rx).part_name 306 ^= part_array (temp_partx).name); 307 end; 308 if info_tape_label.vol_array (info_volx).region (rx).begins_on_tape > si.tape_seq_number 309 then if info_tape_label.vol_array (info_volx).region (rx).begins_on_tape 310 < si.next_tape_number 311 then si.next_tape_number = 312 info_tape_label.vol_array (info_volx).region (rx).begins_on_tape; 313 else ; 314 else if info_tape_label.vol_array (info_volx).region (rx).ends_on_tape > si.tape_seq_number 315 then if info_tape_label.vol_array (info_volx).region (rx).ends_on_tape < si.next_tape_number 316 then si.next_tape_number = 317 max (info_tape_label.vol_array (info_volx).region (rx).begins_on_tape + 1, 318 si.tape_seq_number + 1); 319 else ; 320 if si.next_tape_number = si.tape_seq_number + 1 then goto display_premount; 321 /* can't get much closer */ 322 end; 323 end; 324 end; 325 else do; 326 do rx = lbound (info_tape_label.vol_array (info_volx).region, 1) 327 to info_tape_label.vol_array (info_volx).nregions 328 while (info_tape_label.vol_array (info_volx).region (rx).part_name ^= ""); 329 end; 330 if info_tape_label.vol_array (info_volx).region (rx).begins_on_tape > si.tape_seq_number 331 then if info_tape_label.vol_array (info_volx).region (rx).begins_on_tape < si.next_tape_number 332 then si.next_tape_number = info_tape_label.vol_array (info_volx).region (rx).begins_on_tape; 333 else ; 334 else if info_tape_label.vol_array (info_volx).region (rx).ends_on_tape > si.tape_seq_number 335 then if info_tape_label.vol_array (info_volx).region (rx).ends_on_tape < si.next_tape_number 336 then si.next_tape_number = 337 max (info_tape_label.vol_array (info_volx).region (rx).begins_on_tape + 1, 338 si.tape_seq_number + 1); 339 else ; 340 if si.next_tape_number = si.tape_seq_number + 1 then goto display_premount; 341 /* can't get much closer */ 342 end; 343 end; 344 if si.next_tape_number = LARGE_TAPE_NUMBER | si.next_tape_number <= si.tape_seq_number then do; 345 si.next_tape_number = si.tape_seq_number + 1;/* assume next # in sequence */ 346 return; 347 end; 348 display_premount: 349 if si.usable_tape_devices > 1 350 then call syserr (ANNOUNCE, "^a(^a): Please pre-mount tape# ^d on ^a.", my_name, si.tape_set, 351 si.next_tape_number, FIND_NEXT_TAPE_DEVICE ()); 352 return; 353 354 /**** Entry that is called to read and validate a volume label. If 355* doing a restore, then several checks are also made between the 356* volume label and the volume info contained in the tape label. */ 357 358 bce_save_util_$read_pv_label: 359 entry (a_sri_ptr); 360 361 call SETUP; 362 read_pv_label: 363 call read_disk ((pv.pvtx), (LABEL_ADDR), vol_preamblep, code); 364 if code ^= 0 then do; 365 call syserr$error_code (BEEP, code, "^a: Could not read label of ^a on ^a.^66t***^/^-", my_name, pv.name, 366 pv.device); 367 disk_error_query: 368 call bce_query (opr_input, "^a(^a): Do you want to retry or remove the pv? ", my_name, si.tape_set); 369 if opr_input = "retry" then goto read_pv_label; 370 else if opr_input ^= "remove" then do; 371 call ioa_ ("^a(^a): Invalid input ""^a"". Must be ""retry"" or ""remove"".", my_name, si.tape_set, 372 opr_input); 373 goto disk_error_query; 374 end; 375 pv.removed = YES; 376 return; 377 end; 378 if vol_preamble.Multics ^= Multics_ID_String then do; 379 call syserr (ANNOUNCE, "^a(^a): Volume on ^a is not a ^a.^[^;^66t***^/^-Removing from PV list.^]", my_name, 380 si.tape_set, pv.device, Multics_ID_String, restoring); 381 if restoring then do; 382 if pv.only_part then do; 383 call syserr (ANNOUNCE, 384 "^a(^a): Unable to restore only partitions. Removing from PV list.^66t***", my_name, 385 si.tape_set); 386 pv.removed = YES; 387 end; 388 end; 389 else pv.removed = YES; 390 pv.real_name = pv.name; 391 return; 392 end; 393 call date_time_ (vol_preamble.time_map_updated, date_time_string); 394 call ioa_ (""); 395 call syserr (ANNOUNCE, "^a(^a): ^a ^a on ^a^/^2-Last updated: ^[Never Updated^s^;^a^]", my_name, si.tape_set, 396 Multics_ID_String, vol_preamble.pv_name, pv.device, (vol_preamble.time_map_updated = 0), date_time_string); 397 pv.real_name = vol_preamble.pv_name; 398 if pv.real_name ^= pv.name then do; 399 if restoring 400 then if ^pv.only_part 401 then call syserr (ANNOUNCE, "^a(^a): Volume ^a will become ^a, as requested.^66t***", my_name, 402 si.tape_set, vol_preamble.pv_name, pv.name); 403 else ; 404 else do; 405 call syserr (ANNOUNCE, "^a(^a): Volume was expected to be ^a. Removing from PV list.^66t***", my_name, 406 si.tape_set, pv.name); 407 pv.removed = YES; 408 return; 409 end; 410 end; 411 412 if ^restoring & pv.all_parts then do; 413 call bce_save_util_$setup_all_parts (srip); 414 if pv.removed then return; 415 end; 416 if pv.part_requested & (^restoring | pv.only_part) then do; 417 /* only do when saving, or restoring only parts */ 418 call SORT_PARTITION_LIST; 419 do partx = lbound (part_array, 1) to si.part_count; 420 /* see if part defined */ 421 si.part_ptr, partp = addr (part_array (partx)); 422 if part.pv_name = pv.name & part.name ^= ALL_PARTS then do; 423 do i = lbound (vol_preamble.parts, 1) to vol_preamble.nparts 424 while (vol_preamble.parts (i).part ^= part.name); 425 end; 426 if i > vol_preamble.nparts 427 then part.removed, part.complete = YES; 428 /* part not on volume */ 429 else do; 430 part.frec = vol_preamble.parts (i).frec; 431 part.lrec = vol_preamble.parts (i).frec + vol_preamble.parts (i).nrec - 1; 432 part.nrec = vol_preamble.parts (i).nrec; 433 if pv.restart.rec_on_pv > part.lrec then part.complete = YES; 434 call ioa_ ("^- Partition ^4a:^2x^6d^2xfor^x^5d records^[ (^ad)^;^s^]", part.name, part.frec, 435 part.nrec, part.complete, my_name); 436 end; 437 end; 438 end; 439 do partx = lbound (part_array, 1) to si.part_count; 440 /* report about any that were removed */ 441 if part_array (partx).pv_name = pv.name & part_array (partx).removed 442 then call syserr (ANNOUNCE, 443 "^a(^a): Partition ^a is not defined on ^a.^66t***^/^-Removing from partition list.", 444 my_name, si.tape_set, part_array (partx).name, vol_preamble.pv_name); 445 end; 446 if pv.only_part then do; 447 do partx = lbound (part_array, 1) to si.part_count 448 while (part_array (partx).pv_name ^= pv.name | part_array (partx).removed); 449 end; 450 if partx > si.part_count then do; 451 call syserr (ANNOUNCE, 452 "^a(^a): Removing volume ^a from PV list,^66t***^/^-because all partitions were removed.", 453 my_name, si.tape_set, pv.name); 454 pv.removed = YES; 455 return; 456 end; 457 end; 458 end; 459 460 if restoring then do; 461 do volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size 462 while (info_tape_label.vol_array (volx).pvname ^= pv.name); 463 end; 464 if volx > info_tape_label.vol_array_size then do; 465 call syserr (ANNOUNCE, "^a(^a): Volume ^a not found in tape label.^66t***^/^-Removing from PV list.", 466 my_name, si.tape_set, pv.name); 467 pv.removed = YES; 468 return; 469 end; 470 si.vol_info_ptr, vol_infop = addr (info_tape_label.vol_array (volx)); 471 if pv.part_requested then do; 472 call SORT_PARTITION_LIST; 473 do partx = lbound (part_array, 1) to si.part_count; 474 /* see if part defined */ 475 if part_array (partx).pv_name = pv.name & part_array (partx).name ^= ALL_PARTS then do; 476 si.part_ptr, partp = addr (part_array (partx)); 477 do i = lbound (vol_info.region, 1) to vol_info.nregions 478 while (part.name ^= vol_info.region (i).part_name); 479 end; 480 if i > vol_info.nregions then do; 481 /* part not found */ 482 call syserr (ANNOUNCE, 483 "^a(^a): Partition ^a on ^a was not saved.^66t***^/^-Removing from partition list.", 484 my_name, si.tape_set, part.name, pv.name); 485 part.removed, part.complete = YES; 486 end; 487 end; 488 end; 489 end; 490 if pv.only_part then do; 491 if vol_info.data_saved = PV_ONLY then do; 492 call syserr (ANNOUNCE, 493 "^a(^a): No partitions were saved for volume ^a.^66t***^/^-Removing from PV list.", my_name, 494 si.tape_set, vol_info.pvname); 495 pv.removed = YES; 496 end; 497 return; 498 end; 499 if vol_info.data_saved = PART_ONLY then do; 500 call syserr (ANNOUNCE, 501 "^a(^a): Only partitions were saved for volume ^a.^66t***^/^-Removing from PV list.", my_name, 502 si.tape_set, vol_info.pvname); 503 pv.removed = YES; 504 return; 505 end; 506 if ^pv.only_part & (vol_info.dev_type ^= pvt_array (pv.pvtx).device_type) then do; 507 call syserr (ANNOUNCE, 508 "^a(^a): Device type mis-match. ^a is on a ^a,^66t***^/^-but was saved from a ^a. Removing from PV list.", 509 my_name, si.tape_set, pv.name, device_names (pvt_array (pv.pvtx).device_type), 510 device_names (vol_info.dev_type)); 511 pv.removed = YES; 512 end; 513 return; 514 end; 515 516 /* Doing Save */ 517 /* check label times */ 518 519 if ^pv.all then do; 520 if vol_preamble.time_map_updated = vol_preamble.time_unmounted then goto label_ok; 521 if vol_preamble.time_map_updated = vol_preamble.time_salvaged 522 & vol_preamble.time_map_updated > vol_preamble.time_unmounted 523 then goto label_ok; 524 call syserr (ANNOUNCE, 525 "^a(^a): Volume ^a requires salvaging.^66t***^/^-Setting -all to save all paging records on the volume.", 526 my_name, si.tape_set, pv.name); 527 pv.all = YES; 528 end; 529 label_ok: 530 if pv.name = "rpv" then do; 531 do partx = lbound (part_array, 1) to si.part_count 532 while (part_array (partx).pv_name ^= pv.name | part_array (partx).name ^= "conf"); 533 end; 534 if partx > si.part_count 535 then call syserr (ANNOUNCE, "^a(^a): The ""conf"" partition of rpv is not being saved.^66t***", my_name, 536 si.tape_set); 537 do partx = lbound (part_array, 1) to si.part_count 538 while (part_array (partx).pv_name ^= pv.name | part_array (partx).name ^= "file"); 539 end; 540 if partx > si.part_count 541 then call syserr (ANNOUNCE, "^a(^a): The ""file"" partition of rpv is not being saved.^66t***", my_name, 542 si.tape_set); 543 do partx = lbound (part_array, 1) to si.part_count 544 while (part_array (partx).pv_name ^= pv.name | part_array (partx).name ^= "log"); 545 end; 546 if partx > si.part_count 547 then call syserr (ANNOUNCE, "^a(^a): The ""log"" partition of rpv is not being saved.^66t***", my_name, 548 si.tape_set); 549 end; 550 551 /* Now fill in some of the volume info */ 552 553 if si.restart then do; 554 do volx = lbound (tape_label.vol_array, 1) to tape_label.vol_array_size 555 while (tape_label.vol_array (volx).pvname ^= pv.name); 556 end; 557 if volx > tape_label.vol_array_size then do; 558 call syserr (ANNOUNCE, 559 "^a(^a): Volume ^a not found in restart tape label.^66t***^/^-Removing from PV list.", my_name, 560 si.tape_set, pv.name); 561 pv.removed = YES; 562 return; 563 end; 564 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (volx)); 565 if vol_info.pvid ^= vol_preamble.pvid then do; 566 call syserr (ANNOUNCE, 567 "^a(^a): Volume ^a's PVID does not match^66t***^/^-the one in the restart tape label. Removing from PV list.", 568 my_name, si.tape_set, pv.name); 569 pv.removed = YES; 570 return; 571 end; 572 if (pv.only_part & vol_info.data_saved ^= PART_ONLY) 573 | (^pv.part_requested & vol_info.data_saved = BOTH_SAVED) then do; 574 call syserr (ANNOUNCE, 575 "^a(^a): Type of data being saved for volume ^a^66t***^/^-does not match the type in the restart tape label.^/^-Removing from PV list.", 576 my_name, si.tape_set, pv.name); 577 pv.removed = YES; 578 return; 579 end; 580 do partx = lbound (part_array, 1) to si.part_count; 581 if part_array (partx).pv_name = vol_info.pvname then do; 582 do i = lbound (vol_info.region, 1) to vol_info.nregions 583 while (vol_info.region (i).part_name ^= part_array (partx).name); 584 end; 585 if i > vol_info.nregions then do; 586 call syserr (ANNOUNCE, 587 "^a(^a): Partition ^a of volume ^a^66t***^/^-is not defined in the restart tape label. Removing from PV list.", 588 my_name, si.tape_set, part_array (partx).name, vol_info.pvname); 589 pv.removed = YES; 590 return; 591 end; 592 end; 593 end; 594 end; 595 else do; /* normal path */ 596 tape_label.vol_array_size = tape_label.vol_array_size + 1; 597 si.vol_info_ptr, vol_infop = addr (tape_label.vol_array (tape_label.vol_array_size)); 598 si.first_rec, si.last_rec, vol_info.restart.rec_on_pv, vol_info.restart.rec_in_type = -1; 599 vol_info.pvname = vol_preamble.pv_name; 600 vol_info.pvid = vol_preamble.pvid; 601 if pv.only_part then vol_info.data_saved = PART_ONLY; 602 else if pv.part_requested then vol_info.data_saved = BOTH_SAVED; 603 else vol_info.data_saved = PV_ONLY; 604 vol_info.dev_type = pvt_array (pv.pvtx).device_type; 605 vol_info.nregions = 0; 606 if ^pv.only_part then do; /* define vtoc/paging region */ 607 vol_info.nregions = vol_info.nregions + 1; 608 vol_info.region (vol_info.nregions).part_name = ""; 609 vol_info.region (vol_info.nregions).begins_on_tape = 0; 610 vol_info.region (vol_info.nregions).ends_on_tape = 0; 611 end; 612 do partx = lbound (part_array, 1) to si.part_count; 613 if part_array (partx).pv_name = pv.name & ^part_array (partx).removed then do; 614 vol_info.nregions = vol_info.nregions + 1; 615 vol_info.region (vol_info.nregions).part_name = part_array (partx).name; 616 vol_info.region (vol_info.nregions).begins_on_tape = 0; 617 vol_info.region (vol_info.nregions).ends_on_tape = 0; 618 end; 619 end; 620 vol_info.current_region = 1; 621 end; 622 return; 623 624 /**** Entry to read and parse save/restore control files that are kept in 625* the FILE partition on the RPV. */ 626 627 bce_save_util_$scan_control_file: 628 entry (a_sri_ptr); 629 dcl cf char (cf_len) based (cf_ptr); 630 dcl cf_arg char (cf_arg_lth) based (cf_arg_ptr); 631 dcl cf_arg_lth fixed bin; 632 dcl cf_arg_ptr ptr; 633 dcl 1 cf_array (32) aligned based (cf_array_ptr) like cf_info; 634 dcl cf_array_ptr ptr; 635 dcl cf_idx fixed bin (21); 636 dcl cf_len fixed bin (21); 637 dcl cf_line char (256) varying; 638 dcl cf_line_start fixed bin; 639 dcl cf_ptr ptr; 640 dcl chk_start fixed bin; 641 dcl expect_cf_arg bit (1); 642 dcl have_cf_arg bit (1); 643 dcl line_count fixed bin; 644 dcl nl_idx fixed bin; 645 dcl part_device char (8); 646 dcl part_pv_name char (32); 647 dcl temp_pvtx fixed bin (17); 648 649 call SETUP; 650 cf_array_ptr = sri.cf_arrayp; 651 call bootload_fs_$get_ptr ((cf_array (sri.cfx).name), cf_array (sri.cfx).ptr, cf_array (sri.cfx).length, code); 652 if code ^= 0 then do; 653 call syserr$error_code (BEEP, code, "^a: Initiating ^a for set-^d^66t***^/^-", my_name, 654 cf_array (sri.cfx).name, setx); 655 call ABORT; 656 end; 657 cf_ptr = cf_array (sri.cfx).ptr; 658 cf_len = cf_array (sri.cfx).length; 659 cf_idx = 1; 660 line_count = 0; 661 do while (cf_idx < cf_len); 662 nl_idx = index (substr (cf, cf_idx), NL); 663 if nl_idx = 0 then do; 664 call ioa_ ("^a: Line ^d of ^a does not end with a line_feed character.", my_name, line_count + 1, 665 cf_array (sri.cfx).name); 666 call ABORT; 667 end; 668 line_count = line_count + 1; 669 cf_line = ltrim (rtrim (substr (cf, cf_idx, nl_idx), BREAKS), BREAKS); 670 cf_arg_ptr = addr (cf_line); 671 cf_line_start = 1; 672 have_cf_arg = YES; 673 if index (COMMENT_CHARS, substr (cf_line, 1, 1)) > 0 then have_cf_arg = NO; 674 /* skip comment line */ 675 expect_cf_arg = YES; 676 do while (have_cf_arg); 677 call GET_CF_ARG; 678 if ^have_cf_arg then goto end_cf_arg_scan; 679 if ^expect_cf_arg then do; 680 call ioa_ ("^a: Invalid argument ""^a""^/^-at line ^d of ^a for set-^[^a^s^;^s^d^].", my_name, 681 cf_arg, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 682 call ABORT; 683 end; 684 685 /**** tape_set, ts TAPE_SET_NAME */ 686 687 if cf_arg = "tape_set" | cf_arg = "ts" then do; 688 if si.tape_set ^= "" then do; 689 call ioa_ ("^a: Attempt to multiply define tape set name ""^a""^/^-at line ^d of ^a.", 690 my_name, si.tape_set, line_count, cf_array (sri.cfx).name); 691 call ABORT; 692 end; 693 call GET_CF_ARG; /* get tape set name */ 694 if ^have_cf_arg then do; 695 bad_ts_arg: 696 call ioa_ ("^a: Invalid tape_set request at line ^d of ^a.", my_name, line_count, 697 cf_array (sri.cfx).name); 698 call ABORT; 699 end; 700 if cf_arg_lth > length (si.tape_set) then goto bad_ts_arg; 701 do i = lbound (set_info, 1) to setx - 1; 702 /* check for multiple definitions */ 703 if set_info (i).tape_set = cf_arg then do; 704 call ioa_ ("^a: Tape set ^a has been multiply defined^/^-at line ^d of ^a.", my_name, 705 cf_arg, line_count, cf_array (sri.cfx).name); 706 call ABORT; 707 end; 708 end; 709 si.tape_set = cf_arg; /* now save name */ 710 expect_cf_arg = NO; 711 end; 712 713 /**** tape_device, td TAPE_DEVICE {-density N, -den N, density=N, den=N, d=N} */ 714 715 else if cf_arg = "tape_device" | cf_arg = "td" then do; 716 si.tape_count = si.tape_count + 1; 717 si.usable_tape_devices = si.usable_tape_devices + 1; 718 if si.tape_count > hbound (tcb_array, 1) then do; 719 call ioa_ ("^a: Attempt to define more than ^d tape devices for set-^[^a^s^;^s^d^].", 720 my_name, hbound (tcb_array, 1), (si.tape_set ^= ""), si.tape_set, setx); 721 call ABORT; 722 end; 723 si.tcb_ptr, tcbp = addr (tcb_array (si.tape_count)); 724 unspec (tcb) = ""b; /* start fresh */ 725 726 call GET_CF_ARG; /* get device name */ 727 if ^have_cf_arg then do; 728 bad_td_arg: 729 call ioa_ ("^a: Invalid tape_drive request at line ^d of ^a for set-^[^a^s^;^s^d^].", 730 my_name, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 731 call ABORT; 732 end; 733 if substr (cf_arg, 1, 3) ^= "tap" then goto bad_td_arg; 734 do i = lbound (set_info, 1) to setx; 735 /* check for multiple definitions */ 736 do j = FIRST_TAPE_DEV_IDX to set_info (i).tape_count; 737 tcb_arrayp = addr (tcb_area (i, 0)); 738 if tcb_array (j).name = cf_arg then do; 739 call ioa_ ("^a: Device ^a has been multiply defined.", my_name, cf_arg); 740 call ABORT; 741 end; 742 end; 743 end; 744 tcb.name = cf_arg; /* now save name */ 745 746 call GET_CF_ARG; /* get density, if available. */ 747 if ^have_cf_arg then do; /* no arg */ 748 if restoring 749 then tcb.density = ANY_DENSITY; 750 /* restore, allow any */ 751 else tcb.density = DEN6250; /* save, default to 6250 */ 752 goto end_cf_arg_scan; 753 end; 754 if substr (cf_arg, 1, 2) = "-d" then do; 755 call GET_CF_ARG; 756 if ^have_cf_arg then goto bad_td_arg; 757 if cf_arg = "6250" then tcb.density = DEN6250; 758 else if cf_arg = "1600" then tcb.density = DEN1600; 759 else if cf_arg = "800" then tcb.density = DEN800; 760 else if cf_arg = "556" then tcb.density = DEN556; 761 else goto bad_td_arg; 762 end; 763 else do; 764 if after (cf_arg, "=") = "6250" then tcb.density = DEN6250; 765 else if after (cf_arg, "=") = "1600" then tcb.density = DEN1600; 766 else if after (cf_arg, "=") = "800" then tcb.density = DEN800; 767 else if after (cf_arg, "=") = "556" then tcb.density = DEN556; 768 else goto bad_td_arg; 769 end; 770 expect_cf_arg = NO; 771 end; 772 773 /**** physical_volume, pv PV_NAME DEVICE_NAME {-all} */ 774 775 else if cf_arg = "physical_volume" | cf_arg = "pv" then do; 776 si.pv_count = si.pv_count + 1; 777 if si.pv_count > hbound (pv_array, 1) then do; 778 call ioa_ ("^a: Attempt to ^a more than ^d physical volumes for set-^[^a^s^;^s^d^].", 779 my_name, my_name, hbound (pv_array, 1), (si.tape_set ^= ""), si.tape_set, setx); 780 call ABORT; 781 end; 782 si.pv_ptr, pvp = addr (pv_array (si.pv_count)); 783 unspec (pv) = ""b; /* start fresh */ 784 785 call GET_CF_ARG; /* get pv_name */ 786 if ^have_cf_arg then do; 787 bad_pv_arg: 788 call ioa_ ("^a: Invalid pv request at line ^d of ^a for set-^[^a^s^;^s^d^].", my_name, 789 line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 790 call ABORT; 791 end; 792 if restoring 793 then chk_start = 1; /* check all sets */ 794 else chk_start = setx; /* only check this set */ 795 do i = chk_start to setx; 796 pv_arrayp = addr (pv_area (i, 1)); 797 do j = lbound (pv_array, 1) to si.pv_count; 798 /* check for multiple definitions */ 799 if pv_array (j).name = cf_arg then do; 800 call ioa_ ( 801 "^a: PV ^a has been multiply defined at line ^d of ^a for set-^[^a^s^;^s^d^].", 802 my_name, cf_arg, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), 803 si.tape_set, setx); 804 call ABORT; 805 end; 806 end; 807 end; 808 pv.name = cf_arg; /* now save name */ 809 810 call GET_CF_ARG; /* get device name */ 811 if ^have_cf_arg then goto bad_pv_arg; 812 if cf_arg_lth > 8 then goto bad_pv_arg; 813 pv.device = cf_arg; 814 call disk_name_pvtx ((pv.device), temp_pvtx, code); 815 if code ^= 0 then do; 816 call com_err_ (code, my_name, pv.device); 817 goto bad_pv_arg; 818 end; 819 pv.pvtx = temp_pvtx; 820 if ^restoring then do; 821 call GET_CF_ARG; /* check for -all */ 822 if ^have_cf_arg then pv.all = NO; 823 else if cf_arg = "-all" | cf_arg = "-a" then pv.all = YES; 824 else goto bad_pv_arg; 825 end; 826 pv.restart.rec_on_pv, pv.restart.rec_in_type = 0; 827 pv.only_part = NO; 828 pv.part_requested = NO; 829 pv.complete = NO; 830 pv.removed = NO; 831 expect_cf_arg = NO; 832 end; 833 834 /**** partition, part PV_NAME DEVICE_NAME PART_NAME(-all) {PART_NAME ...} */ 835 836 else if cf_arg = "partition" | cf_arg = "part" then do; 837 call GET_CF_ARG; /* get pv_name */ 838 if ^have_cf_arg then do; 839 bad_part_arg: 840 call ioa_ ("^a: Invalid part request at line ^d of ^a for set-^[^a^s^;^s^d^].", my_name, 841 line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 842 call ABORT; 843 end; 844 part_pv_name = cf_arg; /* now save pv_name */ 845 846 call GET_CF_ARG; /* get device name */ 847 if ^have_cf_arg then goto bad_part_arg; 848 if cf_arg_lth > 8 then goto bad_part_arg; 849 part_device = cf_arg; 850 call disk_name_pvtx (part_device, temp_pvtx, code); 851 if code ^= 0 then do; 852 call com_err_ (code, my_name, part_device); 853 goto bad_part_arg; 854 end; 855 856 call GET_CF_ARG; /* get part_name */ 857 if ^have_cf_arg then goto bad_part_arg; 858 /* must have at least one */ 859 do while (have_cf_arg); 860 si.part_count = si.part_count + 1; 861 if si.part_count > hbound (part_array, 1) then do; 862 call ioa_ ("^a: Attempt to ^a more than ^d partitions for set-^[^a^s^;^s^d^].", 863 my_name, my_name, hbound (part_array, 1), (si.tape_set ^= ""), si.tape_set, setx); 864 call ABORT; 865 end; 866 si.part_ptr, partp = addr (part_array (si.part_count)); 867 unspec (part) = ""b; /* start fresh */ 868 part.pv_name = part_pv_name; /* save pv_name */ 869 part.device = part_device; 870 part.pv_pvtx = temp_pvtx; 871 872 if cf_arg = "alt" | cf_arg = "hc" then do; 873 call ioa_ ("^a: Not allowed to ^a the ""^a"" partition.", my_name, my_name, cf_arg); 874 goto bad_part_arg; 875 end; 876 if part.pv_name = "rpv" & cf_arg = "bce" then do; 877 call ioa_ ("^a: Not allowed to ^a the ""bce"" partition of the RPV.", my_name, my_name) 878 ; 879 goto bad_part_arg; 880 end; 881 if restoring 882 then chk_start = 1; /* check all sets */ 883 else chk_start = setx; /* only check this set */ 884 if cf_arg = ALL_PARTS 885 then doing_all_parts = YES; 886 else doing_all_parts = NO; 887 do i = chk_start to setx; 888 part_arrayp = addr (part_area (i, 1)); 889 part_entries = 0; 890 do j = lbound (part_array, 1) to si.part_count; 891 if part_array (j).pv_name = part.pv_name then do; 892 part_entries = part_entries + 1; 893 if part_array (j).name = ALL_PARTS then doing_all_parts = YES; 894 /* check for multiple definitions */ 895 if part_array (j).name = cf_arg then do; 896 call ioa_ ( 897 "^a: Partition ^a of ^a has been multiply defined at line ^d of ^a for set-^[^a^s^;^s^d^].", 898 my_name, cf_arg, part.pv_name, line_count, cf_array (sri.cfx).name, 899 (si.tape_set ^= ""), si.tape_set, setx); 900 call ABORT; 901 end; 902 end; 903 end; 904 if doing_all_parts & part_entries > 1 then do; 905 call ioa_ ( 906 "^a: Invalid partition request at line ^d of ^a for set-^[^a^s^;^s^d^].^/^-No other partition names can be given when ""-all"" is used.", 907 my_name, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), 908 si.tape_set, setx); 909 call ABORT; 910 end; 911 end; 912 part.name = cf_arg; 913 if PARTITION_COUNT (part.pv_name) > MAX_PARTS_PER_VOL then do; 914 call ioa_ ("^a: Attempt to ^a more than ^d partitions per volume for ^a.", my_name, 915 my_name, MAX_PARTS_PER_VOL, part.pv_name); 916 call ABORT; 917 end; 918 part.complete = NO; 919 part.removed = NO; 920 part.frec, part.lrec, part.nrec = -1; 921 part.tfrec, part.tlrec, part.tnrec = -1; 922 923 call GET_CF_ARG; /* get next part name */ 924 end; 925 expect_cf_arg = NO; 926 end; 927 928 /**** control_file, cf CONTROL_FILE_NAME */ 929 930 else if cf_arg = "control_file" | cf_arg = "cf" then do; 931 call GET_CF_ARG; 932 if ^have_cf_arg then do; 933 call ioa_ ( 934 "^a: No file given for control_file request at line ^d of ^a for set-^[^a^s^;^s^d^].", 935 my_name, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 936 call ABORT; 937 end; 938 sri.cf_count = sri.cf_count + 1; /* extend control file array */ 939 if sri.cf_count > hbound (cf_array, 1) then do; 940 call ioa_ ("^a: Attempt to process more than ^d control files.", my_name, 941 hbound (cf_array, 1)); 942 call ABORT; 943 end; 944 if cf_arg_lth > length (cf_array (1).name) then do; 945 call ioa_ ("^a: Illegal control file name ""^a"" on line ^d of ^a for set-^[^a^s^;^s^d^].", 946 my_name, cf_arg, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, 947 setx); 948 call ABORT; 949 end; 950 unspec (cf_array (sri.cf_count)) = ""b; 951 do i = lbound (cf_array, 1) to sri.cf_count - 1 952 while (cf_array (i).name ^= cf_arg | (cf_array (i).set ^= setx & ^restoring)); 953 end; 954 if i ^= sri.cf_count then do; 955 call ioa_ ( 956 "^a: Control file ""^a"" has be multiply specified on line ^d of ^a for set-^[^a^s^;^s^d^].", 957 my_name, cf_arg, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, 958 setx); 959 call ABORT; 960 end; 961 cf_array (i).name = cf_arg; 962 cf_array (i).set = setx; 963 cf_array (i).length = 0; 964 cf_array (i).ptr = null (); 965 expect_cf_arg = NO; 966 end; 967 else do; 968 call ioa_ ("^a: Invalid request ""^a""^/^-at line ^d of ^a for set-^[^a^s^;^s^d^].", my_name, 969 cf_arg, line_count, cf_array (sri.cfx).name, (si.tape_set ^= ""), si.tape_set, setx); 970 call ABORT; 971 end; 972 end_cf_arg_scan: 973 end; 974 next_cf_line: 975 cf_idx = cf_idx + nl_idx; /* skip to next line */ 976 end; 977 return; 978 979 /**** This entry is used to scan the tape device survey data, returned 980* by the tape controller. Then extract the speed and densities available. 981* a_tcbp is required because we may have switched to the controller tcb 982* to do the survey but need to reference the device tcb. */ 983 984 bce_save_util_$scan_survey_data: 985 entry (a_sri_ptr, a_tcbp); 986 dcl a_tcbp ptr; 987 988 call SETUP; 989 do i = lbound (survey_ws.handler, 1) to hbound (survey_ws.handler, 1); 990 if unspec (survey_ws.data.handler (i)) ^= ""b & survey_ws.data.handler (i).number = a_tcbp -> tcb.device 991 then goto found_device; 992 end; 993 call syserr$error_code (BEEP, error_table_$no_device, "^a: ^a", my_name, a_tcbp -> tcb.name); 994 return; 995 996 found_device: 997 if ^survey_ws.data.handler (i).operational then do; 998 call syserr$error_code (BEEP, error_table_$device_not_usable, "^a: ^a", my_name, a_tcbp -> tcb.name); 999 return; 1000 end; 1001 1002 a_tcbp -> tcb.densities_available = density_table (survey_ws.data.handler (i).density); 1003 if a_tcbp -> tcb.write_tape & (a_tcbp -> tcb.densities_available & a_tcbp -> tcb.density) = ""b then do; 1004 /* density not available */ 1005 call syserr$error_code (BEEP, error_table_$bad_density, "^a: ^a", my_name, a_tcbp -> tcb.name); 1006 return; 1007 end; 1008 density_idx = index (a_tcbp -> tcb.density, ON); 1009 a_tcbp -> tcb.density_command = density_commands (density_idx); 1010 1011 a_tcbp -> tcb.speed = speed_table (survey_ws.data.handler (i).speed); 1012 if a_tcbp -> tcb.speed = ""b then do; /* something is amiss */ 1013 call syserr$error_code (BEEP, error_table_$incorrect_device_type, "^a: ^a", my_name, a_tcbp -> tcb.name); 1014 return; 1015 end; 1016 a_tcbp -> tcb.surveyed = YES; 1017 return; 1018 1019 /**** Entry to create entries in the part_array when "-all" was 1020* given in the part request. When saving, the info comes from the 1021* vol_preamble. When restoring, the info comes from the info_tape_label. */ 1022 1023 bce_save_util_$setup_all_parts: 1024 entry (a_sri_ptr); 1025 1026 call SETUP; 1027 if restoring then do; 1028 do volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size 1029 while (info_tape_label.vol_array (volx).pvname ^= pv.name); 1030 end; 1031 if volx > info_tape_label.vol_array_size then return; 1032 /* volume not defined */ 1033 si.vol_info_ptr, vol_infop = addr (info_tape_label.vol_array (volx)); 1034 if vol_info.data_saved = PV_ONLY then do; 1035 if pv.only_part then do; /* game over for this PV */ 1036 call syserr (ANNOUNCE, 1037 "^a(^a): No partitions were saved for volume ^a.^66t***^/^-Removing from PV list.", my_name, 1038 si.tape_set, vol_info.pvname); 1039 pv.removed = YES; 1040 end; 1041 return; 1042 end; 1043 do i = lbound (vol_info.region, 1) to vol_info.nregions; 1044 if vol_info.region (i).part_name ^= "" then do; 1045 do partx = lbound (part_array, 1) to si.part_count 1046 while (part_array (partx).pv_name ^= pv.name 1047 | part_array (partx).name ^= vol_info.region (i).part_name); 1048 if part_array (partx).pv_name = pv.name & part_array (partx).name = ALL_PARTS then do; 1049 si.part_ptr, partp = addr (part_array (partx)); 1050 goto fill_in_part_entry_for_restore; 1051 /* reuse this entry */ 1052 end; 1053 end; 1054 if partx > si.part_count then do; /* need to add */ 1055 if partx > hbound (part_array, 1) 1056 then call syserr (ANNOUNCE, 1057 "^a(^a): Unable to ^a ""^a"" partition.^66t***^/^-Internal partition list full.", 1058 my_name, si.tape_set, my_name, vol_preamble.parts (i).part); 1059 else if PARTITION_COUNT (pv.name) = MAX_PARTS_PER_VOL 1060 then call syserr (ANNOUNCE, 1061 "^a(^a): Unable to ^a ""^a"" partition.^66t***^/^-^d partitions already defined", 1062 my_name, si.tape_set, my_name, vol_preamble.parts (i).part, MAX_PARTS_PER_VOL); 1063 else do; 1064 si.part_count = partx; 1065 si.part_ptr, partp = addr (part_array (si.part_count)); 1066 fill_in_part_entry_for_restore: 1067 unspec (part) = ""b; 1068 part.name = vol_info.region (i).part_name; 1069 part.pv_name = pv.name; 1070 part.device = pv.device; 1071 part.pv_pvtx = pv.pvtx; 1072 part.complete = NO; 1073 part.removed = NO; 1074 part.frec, part.lrec, part.nrec = -1; 1075 part.tfrec, part.tlrec, part.tnrec = -1; 1076 end; 1077 end; 1078 end; 1079 end; 1080 end; 1081 else do; /* doing a save */ 1082 part_entries = 0; 1083 do i = lbound (vol_preamble.parts, 1) to vol_preamble.nparts; 1084 if vol_preamble.parts (i).part ^= "alt" & vol_preamble.parts (i).part ^= "bce" 1085 & vol_preamble.parts (i).part ^= "hc" then do; 1086 do partx = lbound (part_array, 1) to si.part_count 1087 while (part_array (partx).pv_name ^= pv.name 1088 | part_array (partx).name ^= vol_preamble.parts (i).part); 1089 if part_array (partx).pv_name = pv.name & part_array (partx).name = ALL_PARTS then do; 1090 si.part_ptr, partp = addr (part_array (partx)); 1091 goto fill_in_part_entry_for_save; 1092 /* reuse this entry */ 1093 end; 1094 end; 1095 if partx > si.part_count then do; /* need to add */ 1096 if partx > hbound (part_array, 1) 1097 then call syserr (ANNOUNCE, 1098 "^a(^a): Unable to ^a ""^a"" partition.^66t***^/^-Internal partition list full.", 1099 my_name, si.tape_set, my_name, vol_preamble.parts (i).part); 1100 else if PARTITION_COUNT (pv.name) = MAX_PARTS_PER_VOL 1101 then call syserr (ANNOUNCE, 1102 "^a(^a): Unable to ^a ""^a"" partition.^66t***^/^-^d partitions already defined", 1103 my_name, si.tape_set, my_name, vol_preamble.parts (i).part, MAX_PARTS_PER_VOL); 1104 else do; 1105 si.part_count = partx; 1106 si.part_ptr, partp = addr (part_array (si.part_count)); 1107 fill_in_part_entry_for_save: 1108 unspec (part) = ""b; 1109 part.name = vol_preamble.parts (i).part; 1110 part.pv_name = pv.name; 1111 part.device = pv.device; 1112 part.pv_pvtx = pv.pvtx; 1113 part.complete = NO; 1114 part.removed = NO; 1115 part.frec = vol_preamble.parts (i).frec; 1116 part.lrec = vol_preamble.parts (i).frec + vol_preamble.parts (i).nrec - 1; 1117 part.nrec = vol_preamble.parts (i).nrec; 1118 part.tfrec, part.tlrec, part.tnrec = -1; 1119 end; 1120 end; 1121 part_entries = part_entries + 1; 1122 end; 1123 end; 1124 if part_entries = 0 then do; 1125 if pv.only_part then do; 1126 call syserr (ANNOUNCE, 1127 "^a(^a): Removing volume ^a from PV list,^66t***^/^-because there are no partitions to save.", 1128 my_name, si.tape_set, pv.name); 1129 pv.removed = YES; 1130 return; 1131 end; 1132 call syserr (ANNOUNCE, 1133 "^a(^a): Reverting ""-all"" partition request^66t***^/^-for volume ^a, because there are no partitions to save.", 1134 my_name, si.tape_set, pv.name); 1135 pv.part_requested, pv.all_parts = NO; 1136 return; 1137 end; 1138 end; 1139 call SORT_PARTITION_LIST; 1140 return; 1141 1142 /**** Entry that is called after a time-out waiting for a tape mount. 1143* That asks if the current device should be skipped and the next 1144* device in the list be used. It might be that the current device is 1145* defective and the tape cannot be mounted. */ 1146 1147 bce_save_util_$skip_tape_device: 1148 entry (a_sri_ptr) returns (bit (1)); 1149 1150 call SETUP; 1151 skip_query: 1152 call bce_query (opr_input, "^a(^a): Would you like to skip to the next tape device?", my_name, si.tape_set); 1153 if opr_input = "yes" | opr_input = "y" then return (YES); 1154 else if opr_input = "no" | opr_input = "n" then return (NO); 1155 else if opr_input = "remove" then do; 1156 if si.usable_tape_devices = 1 then do; 1157 call ioa_ ("^a(^a): Unable to remove ^a. This is the last device.", my_name, si.tape_set, tcb.name); 1158 goto skip_query; 1159 end; 1160 tcb.removed = YES; /* remove & */ 1161 si.usable_tape_devices = si.usable_tape_devices - 1; 1162 return (YES); /* skip device */ 1163 end; 1164 else if opr_input = "help" | opr_input = "?" then do; 1165 call ioa_ ("Valid inputs are:"); 1166 call ioa_ ("yes, y^21t- Skip this device and go to next."); 1167 call ioa_ ("no, n^21t- Continue to use this device."); 1168 call ioa_ ("remove^21t- Remove this device, skip to next."); 1169 goto skip_query; 1170 end; 1171 else do; 1172 call ioa_ ("Invalid input ""^a"". Type ""help"" or ""?"" for valid inputs.", opr_input); 1173 goto skip_query; 1174 end; 1175 return; 1176 1177 /**** This entry is used during a restore to get the PV list generated 1178* from processing the control files into the same order that the save 1179* tape label has them in. This is necessary to allow sequential tape 1180* processing. */ 1181 1182 bce_save_util_$sort_pv_list: 1183 entry (a_sri_ptr); 1184 dcl pv_from_idx fixed bin; 1185 dcl 1 pv_hold_area aligned like pv; 1186 dcl pv_to_idx fixed bin; 1187 dcl temp_volx fixed bin; 1188 1189 call SETUP; 1190 pv_to_idx = 1; /* start with first PV slot */ 1191 do temp_volx = lbound (info_tape_label.vol_array, 1) to info_tape_label.vol_array_size; 1192 do pv_from_idx = lbound (pv_array, 1) to si.pv_count; 1193 if pv_array (pv_from_idx).name = info_tape_label.vol_array (temp_volx).pvname then do; 1194 pv_hold_area = pv_array (pv_to_idx); 1195 /* save current info */ 1196 pv_array (pv_to_idx) = pv_array (pv_from_idx); 1197 /* swap in new info */ 1198 pv_array (pv_from_idx) = pv_hold_area; 1199 /* replace with old */ 1200 pv_to_idx = pv_to_idx + 1; 1201 goto next_tape_vol; 1202 end; 1203 end; 1204 next_tape_vol: 1205 end; 1206 return; 1207 1208 /**** Entry to connect all the non-removed partitions for a given 1209* pv into a threaded list. Then the part_idx in the pv entry is 1210* setup to point to the start of the list. */ 1211 1212 bce_save_util_$thread_partition_list: 1213 entry (a_sri_ptr); 1214 dcl first_part_idx fixed bin; 1215 dcl prev_part_idx fixed bin; 1216 1217 call SETUP; 1218 do si.pvx = lbound (pv_array, 1) to si.pv_count; 1219 si.pv_ptr, pvp = addr (pv_array (si.pvx)); 1220 if pv.part_requested then do; 1221 prev_part_idx = -1; 1222 do partx = lbound (part_array, 1) to si.part_count; 1223 if part_array (partx).pv_name = pv.name & ^part_array (partx).removed then do; 1224 if prev_part_idx > 0 1225 then part_array (prev_part_idx).next_idx = partx; 1226 else first_part_idx = partx; 1227 part_array (partx).next_idx = 0; 1228 prev_part_idx = partx; 1229 end; 1230 end; 1231 pv.part_idx = first_part_idx; 1232 end; 1233 end; 1234 return; 1235 1236 /**** ABORT - Routine to force program termination and cleanup to be done. */ 1237 1238 ABORT: 1239 procedure; 1240 1241 signal sub_request_abort_; 1242 return; 1243 end ABORT; 1244 1245 /**** Routine to check if an outstanding disk I/O has completed. Returns 1246* YES or NO based on the results. 1247* 1248* NOTE: This routine is duplicated in bce_save.pl1 to save having to 1249* push a stack frame. */ 1250 1251 DISK_DATA_READY: 1252 procedure () returns (bit (1)); 1253 1254 if iob.state = DISK_READY then return (YES); 1255 call bootload_disk_io$test_done (iob.disk_post_buf, code); 1256 if code = error_table_$not_done then return (NO); 1257 if code ^= 0 then do; /* until something better */ 1258 call syserr$error_code (BEEP, code, "^a: ^a", my_name, pv.name); 1259 call ABORT; 1260 end; 1261 iob.state = DISK_READY; 1262 iob.state_time = clock (); 1263 return (YES); 1264 end DISK_DATA_READY; 1265 1266 /**** Procedure to find the next tape device to be used and return 1267* its name. */ 1268 1269 FIND_NEXT_TAPE_DEVICE: 1270 procedure () returns (char (8)); 1271 dcl temp_tcbx fixed bin; 1272 1273 do temp_tcbx = si.tcbx + 1 to si.tape_count while (tcb_array (temp_tcbx).removed); 1274 end; 1275 if temp_tcbx > si.tape_count then do; /* wrap around */ 1276 do temp_tcbx = FIRST_TAPE_DEV_IDX to si.tape_count while (tcb_array (temp_tcbx).removed); 1277 end; 1278 if temp_tcbx > si.tape_count then return ("????"); 1279 end; 1280 return (tcb_array (temp_tcbx).name); 1281 end FIND_NEXT_TAPE_DEVICE; 1282 1283 /**** Small routine to mark an I/O buffer as free. 1284* 1285* NOTE: This routine is duplicated in bce_save.pl1 to save having to 1286* push a stack frame. */ 1287 1288 FREE_BUFFER: 1289 procedure; 1290 1291 iob.state = FREE; 1292 iob.state_time = clock (); 1293 return; 1294 end FREE_BUFFER; 1295 1296 /**** This procedure is used to locate the next argument in a line. 1297* If one is found a pointer, length and flag are set. Otherwise 1298* the flag is reset, which will be used to sequence to the next 1299* line. */ 1300 1301 GET_CF_ARG: 1302 procedure; 1303 1304 if cf_line_start > length (cf_line) then do; 1305 have_cf_arg = NO; 1306 return; 1307 end; 1308 cf_arg_lth = search (substr (cf_line, cf_line_start), BREAKS) - 1; 1309 if cf_arg_lth = -1 then cf_arg_lth = length (cf_line) - cf_line_start + 1; 1310 1311 if cf_arg_lth = 0 then do; 1312 have_cf_arg = NO; 1313 return; 1314 end; 1315 cf_arg_ptr = addr (substr (cf_line, cf_line_start)); 1316 cf_line_start = cf_line_start + cf_arg_lth + 1; 1317 have_cf_arg = YES; 1318 return; 1319 end GET_CF_ARG; 1320 1321 /**** Routine to locate a free I/O buffer and mark it as suspended for 1322* disk I/O. The caller must have previously called BUFFER_AVAILABLE 1323* so that the routine does not abort when none can be found. 1324* 1325* NOTE: This routine is duplicated in bce_save.pl1 to save having to 1326* push a stack frame. */ 1327 1328 GET_DISK_BUFFER: 1329 procedure; 1330 1331 do iobp = ptr (tcb.wksp, tcb.buf_listx) repeat ptr (tcb.wksp, iob.next_bufx) while (rel (iobp) ^= ""b); 1332 if iob.state = FREE then do; 1333 iob.state = DISK_SUSPEND; 1334 iob.state_time = clock (); 1335 iob.next_statex = 0; 1336 si.datap = ptr (tcb.wksp, iob.datax); 1337 return; 1338 end; 1339 end; 1340 call syserr (CRASH, "bce_save_util_: Out of disk buffers for ^a.", si.tape_set); 1341 end GET_DISK_BUFFER; 1342 1343 /**** Procedure to find the number of requested partitions for a given 1344* volume. The threads are not used, as they may not be setup. */ 1345 1346 PARTITION_COUNT: 1347 procedure (p_pvname) returns (fixed bin); 1348 dcl p_pvname char (32) aligned parm; 1349 dcl part_count_for_vol fixed bin; 1350 1351 part_count_for_vol = 0; 1352 do temp_partx = lbound (part_array, 1) to si.part_count; 1353 if part_array (temp_partx).pv_name = p_pvname then part_count_for_vol = part_count_for_vol + 1; 1354 end; 1355 return (part_count_for_vol); 1356 end PARTITION_COUNT; 1357 1358 /**** Routine that take an I/O buffer that has been queued for a disk read 1359* and asks that it now take place. 1360* 1361* NOTE: This routine is duplicated in bce_save.pl1 to save having to 1362* push a stack frame. */ 1363 1364 READ_DISK: 1365 procedure; 1366 1367 iob.state = DISK_BUSY; 1368 iob.state_time = clock (); 1369 call bootload_disk_io$queue_read ((pv.pvtx), (iob.head.rec_on_pv), 1, ptr (tcb.wksp, iob.datax), 1370 iob.disk_post_buf, code); 1371 return; 1372 end READ_DISK; 1373 1374 /**** Routine to setup the per-set pointers. */ 1375 1376 SETUP: 1377 procedure; 1378 1379 srip = a_sri_ptr; 1380 if sri.version_id ^= sri_version_1 then do; 1381 call syserr$error_code (BEEP, error_table_$unimplemented_version, "^a: sri", my_name); 1382 call ABORT; 1383 end; 1384 setx = sri.set_index; 1385 restoring = sri.doing_restore; 1386 my_name = sri.whoami; 1387 pvt_arrayp = sri.pvt_array_ptr; 1388 si_ptr = addr (set_info (setx)); 1389 if si.version_id ^= si_version_1 then do; 1390 call syserr$error_code (BEEP, error_table_$unimplemented_version, "^a: si", my_name); 1391 call ABORT; 1392 end; 1393 iobp = null (); 1394 info_tape_labelp = si.info_tape_label_ptr; 1395 part_arrayp = addr (part_area (setx, 1)); 1396 partp = si.part_ptr; 1397 pv_arrayp = addr (pv_area (setx, 1)); 1398 pvp = si.pv_ptr; 1399 tape_labelp = si.tape_label_ptr; 1400 tcb_arrayp = addr (tcb_area (setx, 0)); 1401 tcbp = si.tcb_ptr; 1402 vol_preamblep = si.vol_preamble_ptr; 1403 vol_infop = si.vol_info_ptr; 1404 return; 1405 end SETUP; 1406 1407 /**** This procedure is used during a save or restore to get the Partition 1408* list generated from processing the control files into an order that 1409* will match the way that they will be saved or restored. This is 1410* necessary to allow sequential tape processing. During a save the 1411* order is based on the physical position of the partition on the 1412* volume being saved. During a restore the order is based on the 1413* sequence they are in the vol_info.regions array. */ 1414 1415 SORT_PARTITION_LIST: 1416 procedure; 1417 dcl low_part_frec fixed bin; 1418 dcl low_px fixed bin; 1419 dcl part_from_idx fixed bin; 1420 dcl 1 part_hold_area aligned like part; 1421 dcl part_to_idx fixed bin; 1422 dcl px fixed bin; 1423 dcl sort_done bit (1); 1424 dcl water_mark fixed bin; 1425 1426 1427 if restoring then do; 1428 do part_to_idx = lbound (part_array, 1) to si.part_count 1429 while (part_array (part_to_idx).pv_name ^= pv.name); 1430 /* locate first partition */ 1431 end; 1432 do rx = lbound (vol_info.region, 1) to vol_info.nregions; 1433 do part_from_idx = part_to_idx to si.part_count; 1434 if part_array (part_from_idx).pv_name = pv.name 1435 & part_array (part_from_idx).name = vol_info.region (rx).part_name then do; 1436 part_hold_area = part_array (part_to_idx); 1437 /* save current info */ 1438 part_array (part_to_idx) = part_array (part_from_idx); 1439 /* swap in new info */ 1440 part_array (part_from_idx) = part_hold_area; 1441 /* replace with old */ 1442 do part_to_idx = part_to_idx + 1 to si.part_count 1443 while (part_array (part_to_idx).pv_name ^= pv.name); 1444 /* locate next partition */ 1445 end; 1446 goto next_rx; 1447 end; 1448 end; 1449 next_rx: 1450 end; 1451 end; 1452 else do; 1453 sort_done = NO; 1454 do part_to_idx = lbound (part_array, 1) to si.part_count 1455 while (part_array (part_to_idx).pv_name ^= pv.name); 1456 /* locate first partition */ 1457 end; 1458 water_mark = 0; 1459 do while (^sort_done); 1460 low_part_frec = vol_preamble.vol_size; /* set to highest possible */ 1461 do px = lbound (vol_preamble.parts, 1) to vol_preamble.nparts; 1462 if vol_preamble.parts (px).frec < low_part_frec & vol_preamble.parts (px).frec > water_mark 1463 then do; 1464 low_part_frec = vol_preamble.parts (px).frec; 1465 low_px = px; 1466 end; 1467 end; 1468 if low_part_frec < vol_preamble.vol_size then do; 1469 water_mark = low_part_frec; /* bring up the low end */ 1470 do part_from_idx = part_to_idx to si.part_count; 1471 if part_array (part_from_idx).pv_name = pv.name 1472 & part_array (part_from_idx).name = vol_preamble.parts (low_px).part then do; 1473 part_hold_area = part_array (part_to_idx); 1474 /* save current info */ 1475 part_array (part_to_idx) = part_array (part_from_idx); 1476 /* swap in new info */ 1477 part_array (part_from_idx) = part_hold_area; 1478 /* replace with old */ 1479 do part_to_idx = part_to_idx + 1 to si.part_count 1480 while (part_array (part_to_idx).pv_name ^= pv.name); 1481 /* locate next partition */ 1482 end; 1483 goto next_low_part; 1484 end; 1485 end; 1486 end; 1487 else sort_done = YES; 1488 next_low_part: 1489 end; 1490 end; 1491 return; 1492 end SORT_PARTITION_LIST; 1493 1494 /**** Automatic */ 1495 1496 dcl code fixed bin (35); 1497 dcl date_time_string char (24); 1498 dcl density_idx fixed bin; 1499 dcl doing_all_parts bit (1); 1500 dcl i fixed bin; 1501 dcl j fixed bin; 1502 dcl my_name char (8); 1503 dcl opr_input char (128); /* area to hold operator input */ 1504 dcl partx fixed bin; 1505 dcl part_entries fixed bin; 1506 dcl restoring bit (1); 1507 dcl rx fixed bin; 1508 dcl setx fixed bin (17); /* current set_info index */ 1509 dcl temp_partx fixed bin; 1510 dcl volx fixed bin; 1511 dcl vol_begin_tape fixed bin; 1512 dcl vol_end_tape fixed bin; 1513 1514 /**** Based variables */ 1515 1516 dcl 1 cf_info aligned based, 1517 2 name char (32), /* name of file */ 1518 2 set fixed bin, /* SET file is in */ 1519 2 length fixed bin (21), /* char length of file */ 1520 2 ptr ptr; /* pointer to file */ 1521 1522 dcl 1 part_area (4, 64) aligned like part based (sri.part_area_ptr); 1523 1524 dcl 1 pv_area (4, 63) aligned like pv based (sri.pv_area_ptr); 1525 1526 dcl 1 set_info (4) aligned like si based (sri.set_infop); 1527 1528 dcl 1 tcb_area (4, 0:16) aligned like tcb based (sri.tcb_area_ptr); 1529 1530 dcl page (0:1023) bit (36) aligned based; 1531 1532 /**** Constants & Builtins */ 1533 1534 dcl ALL_PARTS char (4) int static options (constant) init ("-all"); 1535 dcl ANY_DENSITY bit (5) int static options (constant) init ("11111"b); 1536 dcl BREAKS char (5) int static options (constant) init (" 1537 "); /* breaks: NL HT SP VT FF */ 1538 dcl COMMENT_CHARS char (3) int static options (constant) init ("""/&"); 1539 dcl DEN556 bit (5) int static options (constant) init ("01000"b); 1540 dcl DEN800 bit (5) int static options (constant) init ("00100"b); 1541 dcl DEN1600 bit (5) int static options (constant) init ("00010"b); 1542 dcl DEN6250 bit (5) int static options (constant) init ("00001"b); 1543 dcl FIRST_TAPE_DEV_IDX fixed bin int static options (constant) init (1); 1544 dcl IOTD bit (2) unaligned int static options (constant) init ("00"b); 1545 dcl IOTP bit (2) unaligned int static options (constant) init ("01"b); 1546 dcl MAX_BUFFERS fixed bin int static options (constant) init (6); 1547 dcl MAX_PARTS_PER_VOL fixed bin int static options (constant) init (7); 1548 dcl NL char (1) int static options (constant) init (" 1549 "); 1550 dcl NO bit (1) aligned int static options (constant) init ("0"b); 1551 dcl OFF bit (1) aligned int static options (constant) init ("0"b); 1552 dcl ON bit (1) aligned int static options (constant) init ("1"b); 1553 dcl VTOCES_PER_WORD fixed bin (17) int static options (constant) init (32); 1554 dcl WORKSPACE_SIZE fixed bin (18) int static options (constant) init (7168); 1555 dcl YES bit (1) aligned int static options (constant) init ("1"b); 1556 dcl density_commands (5) bit (6) int static options (constant) init ("64"b3, "61"b3, "60"b3, "65"b3, "41"b3); 1557 dcl density_table (0:15) bit (5) int static options (constant) 1558 /* Used to set density characteristic. */ 1559 init ("00010"b, /* 1600 */ 1560 "11100"b, /* 200 , 556 , 800 */ 1561 "00000"b, /* Invalid */ 1562 "00000"b, /* Invalid */ 1563 "11110"b, /* 200, 556, 800, 1600 */ 1564 "01110"b, /* 556, 800, 1600 */ 1565 "00000"b, /* Invalid */ 1566 "00111"b, /* 800, 1600, 6250 */ 1567 "00110"b, /* 800, 1600 */ 1568 "01100"b, /* 556, 800 */ 1569 "00000"b, /* Invalid */ 1570 "00011"b, /* 1600, 6250 */ 1571 "00000"b, /* Invalid */ 1572 "00000"b, /* Invalid */ 1573 "00000"b, /* Invalid */ 1574 "00000"b); /* Invalid */ 1575 dcl speed_table (0:7) bit (3) int static options (constant) 1576 /* Used to set speed characteristics. */ 1577 init ("000"b, /* Invalid */ 1578 "100"b, /* 75 ips */ 1579 "010"b, /* 125 ips */ 1580 "000"b, /* Invalid */ 1581 "001"b, /* 200 ips */ 1582 "000"b, /* Invalid */ 1583 "000"b, /* Invalid */ 1584 "000"b); /* Invalid */ 1585 1586 /**** Buffer State Constants */ 1587 1588 dcl FREE fixed bin int static options (constant) init (0); 1589 dcl DISK_SUSPEND fixed bin int static options (constant) init (1); 1590 dcl DISK_BUSY fixed bin int static options (constant) init (3); 1591 dcl DISK_READY fixed bin int static options (constant) init (4); 1592 1593 dcl (addr, after, bin, bit, clock, divide, hbound, index, lbound, length, ltrim, max, mod, null, ptr, rel, rtrim, 1594 search, size, substr, unspec) 1595 builtin; 1596 1597 dcl sub_request_abort_ condition; 1598 1599 /**** External variables & entries */ 1600 1601 dcl error_table_$bad_density 1602 fixed bin (35) ext static; 1603 dcl error_table_$device_not_usable 1604 fixed bin (35) ext static; 1605 dcl error_table_$incorrect_device_type 1606 fixed bin (35) ext static; 1607 dcl error_table_$no_device 1608 fixed bin (35) ext static; 1609 dcl error_table_$not_done 1610 fixed bin (35) ext static; 1611 dcl error_table_$unimplemented_version 1612 fixed bin (35) ext static; 1613 1614 dcl bce_query entry options (variable); 1615 dcl bootload_disk_io$queue_read 1616 entry (fixed bin, fixed bin (18), fixed bin, ptr, fixed bin, fixed bin (35)); 1617 dcl bootload_disk_io$test_done 1618 entry (fixed bin, fixed bin (35)); 1619 dcl bootload_fs_$get_ptr 1620 entry (char (*), ptr, fixed bin (21), fixed bin (35)); 1621 dcl com_err_ entry () options (variable); 1622 dcl config_$find_periph entry (char (4) aligned, ptr); 1623 dcl date_time_ entry (fixed bin (71), char (*)); 1624 dcl date_time_$format entry (char (*), fixed bin (71), char (*), char (*)) returns (char (250) var); 1625 dcl disk_name_pvtx entry (char (8), fixed bin (17), fixed bin (35)); 1626 dcl ioa_ entry () options (variable); 1627 dcl ioi_assignment$assign 1628 entry (fixed bin, char (*) aligned, fixed bin (71), bit (1) aligned, fixed bin (35)); 1629 dcl ioi_assignment$unassign 1630 entry (fixed bin, fixed bin (35)); 1631 dcl ioi_set$max_workspace 1632 entry (fixed bin, fixed bin (18), fixed bin (35)); 1633 dcl ioi_set$status entry (fixed bin, fixed bin (18), fixed bin (8), fixed bin (35)); 1634 dcl ioi_set$workspace entry (fixed bin, ptr, fixed bin (18), fixed bin (35)); 1635 dcl read_disk entry (fixed bin, fixed bin (18), ptr, fixed bin (35)); 1636 dcl syserr entry () options (variable); 1637 dcl syserr$error_code entry () options (variable); 1638 dcl find_bit_$last_off entry (bit (*)) returns (fixed bin (24)); 1639 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 */ 1640 1641 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_ */ 1642 1643 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 * * * * * */ 1644 1645 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 * * * * * */ 1646 1647 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 */ 1648 1649 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 */ 1650 1651 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 */ 1652 1653 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 */ 1654 1655 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 */ 1656 1657 12 1 /* Begin include file io_status_word.incl.pl1 */ 12 2 /* Made from iom_stat.incl.pl1 by C. Hornig */ 12 3 12 4 dcl io_status_word_ptr ptr; 12 5 dcl 1 io_status_word based (io_status_word_ptr) aligned, /* I/O status information */ 12 6 ( 12 7 2 t bit (1), /* set to "1"b by IOM */ 12 8 2 power bit (1), /* non-zero if peripheral absent or power off */ 12 9 2 major bit (4), /* major status */ 12 10 2 sub bit (6), /* substatus */ 12 11 2 eo bit (1), /* even/odd bit */ 12 12 2 marker bit (1), /* non-zero if marker status */ 12 13 2 soft bit (2), /* software status */ 12 14 2 initiate bit (1), /* initiate bit */ 12 15 2 abort bit (1), /* software abort bit */ 12 16 2 channel_stat bit (3), /* IOM channel status */ 12 17 2 central_stat bit (3), /* IOM central status */ 12 18 2 mbz bit (6), 12 19 2 rcount bit (6) 12 20 ) unaligned; /* record count residue */ 12 21 12 22 /* End include file io_status_word.incl.pl1 */ 1658 1659 13 1 13 2 /* Begin include file ...... ioi_stat.incl.pl1 */ 13 3 /* Last modified 3/24/75 by Noel I. Morris */ 13 4 13 5 dcl isp ptr; /* pointer to status structure */ 13 6 13 7 dcl 1 istat based (isp) aligned, /* I/O Interfacer status structure */ 13 8 2 completion, /* completion flags */ 13 9 (3 st bit (1), /* "1"b if status returned */ 13 10 3 er bit (1), /* "1"b if status indicates error condition */ 13 11 3 run bit (1), /* "1"b if channel still running */ 13 12 3 time_out bit (1)) unal, /* "1"b if time-out occurred */ 13 13 2 level fixed bin (3), /* IOM interrupt level */ 13 14 2 offset fixed bin (18), /* DCW list offset */ 13 15 2 absaddr fixed bin (24), /* absolute address of workspace */ 13 16 2 iom_stat bit (72), /* IOM status */ 13 17 2 lpw bit (72); /* LPW residue */ 13 18 13 19 dcl imp ptr; /* pointer to message structure */ 13 20 13 21 dcl 1 imess based (imp) aligned, /* I/O Interfacer event message structure */ 13 22 (2 completion like istat.completion, /* completion flags */ 13 23 2 pad bit (11), 13 24 2 level bit (3), /* interrupt level */ 13 25 2 offset bit (18), /* DCW list offset */ 13 26 2 status bit (36)) unal; /* first 36 bits of status */ 13 27 13 28 /* End of include file ...... ioi_stat.incl.pl1 */ 13 29 1660 1661 14 1 14 2 /* Begin include file ...... iom_dcw.incl.pl1 */ 14 3 14 4 dcl dcwp ptr, /* pointer to DCW */ 14 5 tdcwp ptr; /* pointer to TDCW */ 14 6 14 7 dcl 1 dcw based (dcwp) aligned, /* Data Control Word */ 14 8 (2 address bit (18), /* address for data transfer */ 14 9 2 char_pos bit (3), /* character position */ 14 10 2 m64 bit (1), /* non-zero for mod 64 address */ 14 11 2 type bit (2), /* DCW type */ 14 12 2 tally bit (12)) unal; /* tally for data transfer */ 14 13 14 14 dcl 1 tdcw based (tdcwp) aligned, /* Transfer DCW */ 14 15 (2 address bit (18), /* address to transfer to */ 14 16 2 mbz1 bit (4), 14 17 2 type bit (2), /* should be "10"b for TDCW */ 14 18 2 mbz2 bit (9), 14 19 2 ec bit (1), /* non-zero to set LPW AE bit */ 14 20 2 res bit (1), /* non-zero to restrict further use of IDCW */ 14 21 2 rel bit (1)) unal; /* non-zero to set relative mode after transfer */ 14 22 14 23 /* End of include file ...... iom_dcw.incl.pl1 */ 14 24 1662 1663 15 1 15 2 /* Begin include file ...... iom_pcw.incl.pl1 */ 15 3 15 4 dcl pcwp ptr; /* pointer to PCW */ 15 5 15 6 dcl 1 pcw based (pcwp) aligned, /* Peripheral Control Word */ 15 7 (2 command bit (6), /* device command */ 15 8 2 device bit (6), /* device code */ 15 9 2 ext bit (6), /* address extension */ 15 10 2 code bit (3), /* should be "111"b for PCW */ 15 11 2 mask bit (1), /* channel mask bit */ 15 12 2 control bit (2), /* terminate/proceed and marker control bits */ 15 13 2 chan_cmd bit (6), /* type of I/O operation */ 15 14 2 count bit (6), /* record count or control character */ 15 15 2 mbz1 bit (3), 15 16 2 channel bit (6), /* channel number */ 15 17 2 mbz2 bit (27)) unal; 15 18 15 19 dcl idcwp ptr; /* pointer to IDCW */ 15 20 15 21 dcl 1 idcw based (idcwp) aligned, /* Instruction DCW */ 15 22 (2 command bit (6), /* device command */ 15 23 2 device bit (6), /* device code */ 15 24 2 ext bit (6), /* address extension */ 15 25 2 code bit (3), /* should be "111"b for PCW */ 15 26 2 ext_ctl bit (1), /* "1"b if address extension to be used */ 15 27 2 control bit (2), /* terminate/proceed and marker control bits */ 15 28 2 chan_cmd bit (6), /* type of I/O operation */ 15 29 2 count bit (6)) unal; /* record count or control character */ 15 30 15 31 /* End include file ...... iom_pcw.incl.pl1 */ 15 32 1664 1665 16 1 /* BEGIN INCLUDE FILE ... pvt.incl.pl1 ... last modified January 1982 */ 16 2 16 3 16 4 /* The physical volume table (PVT) is a wired-down table. 16 5* It has one entry for each spindle present, be it for 16 6* Storage System or "I/O" use. 16 7**/ 16 8 16 9 dcl pvt$ ext, 16 10 pvtp ptr; 16 11 16 12 16 13 dcl 1 pvt based (pvtp) aligned, 16 14 16 15 2 n_entries fixed bin (17), /* number of PVT entries */ 16 16 2 max_n_entries fixed bin (17), /* max number of PVT entries */ 16 17 2 n_in_use fixed bin (17), /* number of PVT entries in use */ 16 18 2 rwun_pvtx fixed bin, /* rewind_unloading pvtx */ 16 19 2 shutdown_state fixed bin, /* state of previous shutdown */ 16 20 2 esd_state fixed bin, /* state of ESD, >0 iff in ESD */ 16 21 2 prev_shutdown_state fixed bin, /* shutdown state of previous bootload */ 16 22 2 prev_esd_state fixed bin, /* ESD state of previous bootload */ 16 23 16 24 2 time_of_bootload fixed bin (71), /* Time of bootload */ 16 25 2 root_lvid bit (36) aligned, /* Logical volume ID of Root Logical Volume (RLV) */ 16 26 2 root_pvid bit (36) aligned, /* Physical volume ID of Root Physical Volume (RPV) */ 16 27 2 root_pvtx fixed bin, /* Index to PVTE for Root Physical Volume (RPV) */ 16 28 2 root_vtocx fixed bin, /* VTOCE index for root (>) */ 16 29 2 disk_table_vtocx fixed bin, /* VTOCE index for disk table on RPV */ 16 30 2 disk_table_uid bit (36) aligned, /* File System UID for disk_table */ 16 31 16 32 2 rpvs_requested bit (1) aligned, /* RPVS keyword given on BOOT */ 16 33 2 rpv_needs_salv bit (1) aligned, /* RPV required (not requested) salvage */ 16 34 2 rlv_needs_salv bit (1) aligned, /* RLV required (not requested) salvage */ 16 35 2 volmap_lock_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 16 36 2 volmap_idle_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 16 37 2 vtoc_map_lock_wait_constant bit (36) aligned, /* For constructing wait event: OR pvte_rel into lower */ 16 38 2 n_volmap_locks_held fixed bin (17), /* Current number of volmap locks held */ 16 39 2 n_vtoc_map_locks_held fixed bin (17), /* Current number of VTOC Map locks held */ 16 40 16 41 2 last_volmap_time fixed bin (71), /* Time a volmap was last locked/unlocked */ 16 42 2 last_vtoc_map_time fixed bin (71), /* Time a VTOC Map was last locked/unlocked */ 16 43 2 total_volmap_lock_time fixed bin (71), /* Total time volmap's were locked (integral) */ 16 44 2 total_vtoc_map_lock_time fixed bin (71), /* Total time VTOC Maps were locked (integral) */ 16 45 16 46 2 n_volmap_locks fixed bin (35), /* Number times a volmap was locked */ 16 47 2 n_vtoc_map_locks fixed bin (35), /* Number times a vtoc_map was locked */ 16 48 2 volmap_lock_nowait_calls fixed bin (35), /* Number calls to lock volmap, no wait */ 16 49 2 volmap_lock_nowait_fails fixed bin (35), /* Number times lock failed */ 16 50 2 volmap_lock_wait_calls fixed bin (35), /* Number calls to lock volmap, wait */ 16 51 2 volmap_lock_wait_fails fixed bin (35), /* Number times lock failed */ 16 52 2 pad (2) bit (36) aligned, 16 53 16 54 2 array fixed bin (71); /* Array of PVTE's -- must be double-word aligned */ 16 55 16 56 16 57 16 58 /* END INCLUDE FILE ...pvt.incl.pl1 */ 1666 1667 17 1 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */ 17 2 17 3 /* Added pc_vacating, Benson Margulies 84-10-17 */ 17 4 17 5 /****^ HISTORY COMMENTS: 17 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383), 17 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 17 8* Add the support for subvolumes 17 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309), 17 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 17 11* Add root_lv flag to mount RLVs that do not have hardcore partitions. 17 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 17 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 17 14* Added inconsistent_dbm bit for determining the status of volume 17 15* dumper bit maps. 17 16* END HISTORY COMMENTS */ 17 17 17 18 dcl pvt$array aligned external; 17 19 dcl pvt$max_n_entries fixed bin external; 17 20 17 21 dcl pvt_arrayp ptr; 17 22 dcl pvtep ptr; 17 23 17 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp); 17 25 17 26 dcl 1 pvte based (pvtep) aligned, 17 27 17 28 2 pvid bit (36), /* physical volume ID */ 17 29 17 30 2 lvid bit (36), /* logical volume ID */ 17 31 17 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */ 17 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */ 17 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */ 17 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */ 17 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */ 17 37 2 pad3 bit (2) unaligned, 17 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */ 17 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */ 17 40 17 41 17 42 17 43 2 devname char (4), /* device name */ 17 44 17 45 (2 device_type fixed bin (8), /* device type */ 17 46 2 logical_area_number fixed bin (8), /* disk drive number */ 17 47 2 used bit (1), /* TRUE if this entry is used */ 17 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 17 49 2 permanent bit (1), /* TRUE if cannot be demounted */ 17 50 2 testing bit (1), /* Protocol bit for read_disk$test */ 17 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */ 17 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */ 17 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */ 17 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */ 17 55 2 rpv bit (1), /* TRUE if this is the root physical volume */ 17 56 2 scav_check_address 17 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */ 17 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */ 17 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */ 17 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */ 17 61 2 vacating bit (1), /* don't put new segs on this vol */ 17 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */ 17 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */ 17 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */ 17 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */ 17 66 17 67 17 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */ 17 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */ 17 70 17 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */ 17 72 17 73 2 nleft fixed bin (17), /* number of records left */ 17 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */ 17 75 17 76 2 dim_info bit (36), /* Information peculiar to DIM */ 17 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */ 17 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */ 17 79 2 records_per_cyl fixed bin, 17 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */ 17 81 2 sv_name char (2) aligned, 17 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */ 17 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */ 17 84 17 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */ 17 86 2 pad2 bit (18) unaligned, 17 87 17 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */ 17 89 17 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */ 17 91 17 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */ 17 93 17 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */ 17 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */ 17 96 17 97 17 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */ 17 99 17 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */ 17 101 17 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */ 17 103 17 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */ 17 105 17 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */ 17 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */ 17 108 17 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */ 17 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */ 17 111 17 112 17 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */ 17 114 VOLMAP_ASYNC_READ init (1), 17 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant); 17 116 17 117 17 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */ 1668 1669 18 1 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 18 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 18 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 18 4 18 5 /* This include file has an ALM version. Keep 'em in sync! */ 18 6 18 7 dcl ( 18 8 18 9 /* The following constants define the message action codes. This indicates 18 10*how a message is to be handled. */ 18 11 18 12 SYSERR_CRASH_SYSTEM init (1), 18 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 18 14 18 15 SYSERR_TERMINATE_PROCESS init (2), 18 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 18 17 18 18 SYSERR_PRINT_WITH_ALARM init (3), 18 19 BEEP init (3), /* Beep and print the message on the console. */ 18 20 18 21 SYSERR_PRINT_ON_CONSOLE init (0), 18 22 ANNOUNCE init (0), /* Just print the message on the console. */ 18 23 18 24 SYSERR_LOG_OR_PRINT init (4), 18 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 18 26 18 27 SYSERR_LOG_OR_DISCARD init (5), 18 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 18 29 18 30 18 31 /* The following constants are added to the normal severities to indicate 18 32*different sorting classes of messages. */ 18 33 18 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 18 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 18 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 18 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 18 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 18 39 ) fixed bin internal static options (constant); 18 40 18 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 1670 1671 19 1 /* Begin include file ...... tape_error_interp.incl.pl1 */ 19 2 19 3 /* format: style4,declareind10,dclind10,idind20,indattr,delnl,insnl */ 19 4 19 5 /* Breakdown of tape error status. */ 19 6 19 7 /****^ HISTORY COMMENTS: 19 8* 1) change(86-02-24,Farley), approve(86-07-18,MCR7439), 19 9* audit(86-08-18,Fawcett), install(86-10-20,MR12.0-1189): 19 10* Created from disk_error_interp.incl.pl1. 19 11* END HISTORY COMMENTS */ 19 12 19 13 dcl tape_error_data$ ext; /* tape error status data segment */ 19 14 19 15 dcl tedp ptr; /* pointer to major status structure */ 19 16 19 17 dcl 1 tape_error_data (0:19) aligned based (tedp), /* major status array */ 19 18 ( 2 interp bit (18), /* pointer to substatus data for this major status */ 19 19 2 namep bit (18) 19 20 ) unal; /* rel pointer to major status description */ 19 21 19 22 dcl taperap ptr; /* pointer to substatus array */ 19 23 19 24 dcl 1 tape_status_interp_array 19 25 (100) like tape_error_interp based (taperap) aligned; 19 26 /* array of substatus interpretations */ 19 27 19 28 dcl taperp ptr; /* pointer to error interpretation data */ 19 29 19 30 dcl 1 tape_error_interp based (taperp) aligned, /* substatus interpretation structure */ 19 31 ( 2 bitson bit (6), /* substatus bits which must be ON */ 19 32 2 bitmask bit (6), /* substatus bits which must be checked */ 19 33 2 max_retries fixed bin (5), /* maximum no. of retries for this error */ 19 34 2 get_detail bit (1), /* "1"b if detailed status needed */ 19 35 2 expect_special bit (1), /* "1"b if special status expected */ 19 36 2 end_of_file bit (1), /* "1"b if EOF status */ 19 37 2 end_of_tape bit (1), /* "1"b if EOT status */ 19 38 2 bad_density bit (1), /* "1"b if invalid density */ 19 39 2 backspace bit (1), /* "1"b backspace before retry */ 19 40 2 bad_dev bit (1), /* "1"b if device is inoperative */ 19 41 2 bad_path bit (1), /* "1"b if tape data path is defective */ 19 42 2 pad1 bit (10), 19 43 2 namep bit (18), /* rel pointer to substatus description */ 19 44 2 pad2 bit (18) 19 45 ) unal; 19 46 19 47 dcl tsdp ptr; /* pointer to status description */ 19 48 19 49 dcl 1 tape_status_descrip 19 50 based (tsdp) aligned, /* status description string */ 19 51 ( 2 lth fixed bin (8), /* length of string */ 19 52 2 chr char (32 refer (tape_status_descrip.lth)) 19 53 ) unal; /* status description string */ 19 54 19 55 dcl POWER_OFF fixed bin internal static options (constant) init (16); 19 56 dcl CHAN_STAT fixed bin internal static options (constant) init (17); 19 57 dcl CENTRAL_STAT fixed bin internal static options (constant) init (18); 19 58 dcl SYS_FAULT fixed bin internal static options (constant) init (19); 19 59 19 60 /* End of include file ...... tape_error_interp.incl.pl1 */ 1672 1673 20 1 /* BEGIN INCLUDE FILE ... vol_map.incl.pl1 */ 20 2 20 3 dcl vol_mapp ptr; 20 4 20 5 dcl 1 vol_map based (vol_mapp) aligned, 20 6 20 7 2 n_rec fixed bin(17), /* number of records represented in the map */ 20 8 2 base_add fixed bin(17), /* record number for first bit in bit map */ 20 9 2 n_free_rec fixed bin(17), /* number of free records */ 20 10 2 bit_map_n_words fixed bin(17), /* number of words of the bit map */ 20 11 2 pad (60) bit(36), /* pad to 64 words */ 20 12 2 bit_map (3*1024 - 64) bit(36) ; /* bit map - the entire vol map occupies 3 records */ 20 13 20 14 /* END INCLUDE ... vol_map */ 1674 1675 21 1 /* START OF: vtoc_map.incl.pl1 ... March 1982 ... * * * * * * * * * * * * * * * * */ 21 2 21 3 dcl vtoc_mapp ptr; 21 4 dcl bit_map_wordp ptr; 21 5 21 6 dcl 1 vtoc_map aligned based (vtoc_mapp), 21 7 2 n_vtoce fixed bin, /* Number of VTOCEs on the device */ 21 8 2 n_free_vtoce fixed bin, /* Number of free VTOCEs */ 21 9 2 bit_map_n_words fixed bin, /* Number of words in the bit map below */ 21 10 2 vtoc_last_recno fixed bin, /* Last record number in VTOC */ 21 11 2 pad (4) fixed bin, 21 12 2 bit_map (0:1024 - 9) bit (36); /* This structure consumes exactly 1 page */ 21 13 21 14 dcl 1 bit_map_word aligned based (bit_map_wordp), 21 15 2 pad1 bit (1) unal, 21 16 2 bits bit (32) unal, /* 32 VTOCES ON => free */ 21 17 2 pad2 bit (3) unal; 21 18 21 19 21 20 21 21 /* END OF: vtoc_map.incl.pl1 * * * * * * * * * * * * * * * * */ 1676 1677 1678 /*^ BEGIN MESSAGE DOCUMENTATION 1679* 1680* Message: 1681* bce_save_util_: Out of disk buffers for TAPE_SET. 1682* 1683* S: $crash 1684* 1685* T: $init 1686* 1687* M: $err 1688* 1689* A: $inform 1690* 1691* Message: 1692* restore: Attaching TAPE_DEV. ERR_MESSAGE 1693* 1694* S: $beep 1695* 1696* T: $init 1697* 1698* M: IOI has returned a non-zero error code in response to a request 1699* to assign TAPE_DEV. 1700* 1701* A: $recover 1702* 1703* Message: 1704* restore: Could not read label of PV_NAME on DISK_DEV. ERR_MESSAGE 1705* 1706* S: $beep 1707* 1708* T: $init 1709* 1710* M: The volume label of the PV could not be read due to the error 1711* given in ERR_MESSAGE. 1712* 1713* A: A operator query is done to find out if the read should be 1714* retried or the PV removed from the list. 1715* 1716* Message: 1717* restore(TAPE_SET): Device type mis-match. PV_NAME is on a DEV_TYPE, 1718* but was saved from a DEV_TYPE. 1719* 1720* S: $info 1721* 1722* T: $init 1723* 1724* M: The program is unable to restore the contents of the PV because 1725* the disk device currently being used is different than the one in use 1726* when the PV was saved. Only partitions can be restored to PVs mounted 1727* on different devices. 1728* 1729* A: $recover 1730* 1731* Message: 1732* restore: Initiating CONTROL_FILE_NAME for set-TAPE_SET_IDX ERR_MESSAGE 1733* 1734* S: $beep 1735* 1736* T: $init 1737* 1738* M: An error was detected while initiating the restore control file. 1739* 1740* A: $inform $recover 1741* 1742* Message: 1743* restore(TAPE_SET): MULTICS_VOL_ID PV_NAME on DISK_DEV 1744* Last updated: DATE_TIME 1745* 1746* S: $info 1747* 1748* T: $init 1749* 1750* M: Just an informative message. 1751* 1752* A: $ignore 1753* 1754* Message: 1755* restore(TAPE_SET): No partitions were saved for volume PV_NAME. 1756* Removing from PV list. 1757* S: $info 1758* 1759* T: $init 1760* 1761* M: A request has been made to restore one or more partitions on 1762* 1763* PV_NAME, but the save tape indicates that no partitions were saved. 1764* 1765* A: Remove the partition reference from the control file. 1766* 1767* Message: 1768* restore(TAPE_SET): Only partitions were saved for volume PV_NAME. 1769* 1770* S: $info 1771* 1772* T: $init 1773* 1774* M: A request to restore the contents of a PV has been made, but 1775* when the PV was saved only partitions were included. 1776* 1777* A: Correct the control file(s) accordingly. 1778* 1779* Message: 1780* restore(TAPE_SET): Partition PARTITION_NAME is not defined on PV_NAME. 1781* 1782* S: $info 1783* 1784* T: $init 1785* 1786* M: A request to restore specific partition has been made, but the 1787* partition does not exist of the PV. 1788* 1789* A: Correct the control file(s) accordingly. 1790* 1791* Message: 1792* restore(TAPE_SET): Partition PARTITION_NAME on PV_NAME was not saved. 1793* 1794* S: $info 1795* 1796* T: $init 1797* 1798* M: A request was made to restore a partition from a PV, but the 1799* partition was not saved as part of this tape set. 1800* 1801* A: Correct the control file(s) accordingly. 1802* 1803* Message: 1804* restore(TAPE_SET): Please pre-mount tape# TAPE_NUMBER on TAPE_DEV. 1805* 1806* S: $info 1807* 1808* T: $init 1809* 1810* M: The program is able to look ahead and find the tape that will be 1811* required next. This is an informative message that allows the restore 1812* to move at a faster pace. 1813* 1814* A: Mount the specified tape on the specified device. 1815* 1816* Message: 1817* restore(TAPE_SET): Removing volume PV_NAME from PV list, 1818* because all partitions were removed. 1819* 1820* S: $info 1821* 1822* T: $init 1823* 1824* M: It is nolonger necessary for the program to keep track of the 1825* PV, since all of the partition requests have been removed. 1826* 1827* A: Correct the control files accordingly. 1828* 1829* Message: 1830* restore: Setting max workspace for TAPE_DEV. ERR_MESSAGE 1831* 1832* S: $beep 1833* 1834* T: $init 1835* 1836* M: IOI has returned a non-zero error code in response to a request 1837* to set the max workspace size for TAPE_DEV. 1838* 1839* A: $inform 1840* 1841* Message: 1842* restore: Setting up workspace for TAPE_DEV. ERR_MESSAGE 1843* 1844* S: $beep 1845* 1846* T: $init 1847* 1848* M: IOI has returned a non-zero error code from the request to 1849* create a workspace for TAPE_DEV. 1850* 1851* A: $inform 1852* 1853* Message: 1854* restore: TAPE_DEV ERR_MESSAGE 1855* 1856* S: $beep 1857* 1858* T: $init 1859* 1860* M: An error occured while scanning the tape subsystem survey data. 1861* 1862* A: $recover 1863* 1864* Message: 1865* restore(TAPE_SET): Tape subsystem "SUB_SYS" is not defined in the config. 1866* 1867* S: $info 1868* 1869* T: $init 1870* 1871* M: No "prph" entry could be found for the tape subsystem. 1872* 1873* A: Correct config_deck or save/restore control file(s) to indicate 1874* proper tape subsystem. 1875* 1876* Message: 1877* restore(TAPE_SET): Unable to restore "PARTITION_NAME" partition. 1878* Internal partition list full. 1879* 1880* S: $info 1881* 1882* T: $init 1883* 1884* M: More partitions have been requested than the program can handle. 1885* 1886* A: Change control files to reduce the number defined, possibly by 1887* breaking them up into seperate tape sets. 1888* 1889* Message: 1890* restore(TAPE_SET): Unable to restore "PARTITION_NAME" partition. 1891* N partitions already defined 1892* 1893* S: $info 1894* 1895* T: $init 1896* 1897* M: An attempt has been made to restore more than the N maximum 1898* partitions allowed. 1899* 1900* A: Change control files(s) to reduce the number requested. 1901* 1902* Message: 1903* restore(TAPE_SET): Unable to restore only partitions. 1904* 1905* S: $info 1906* 1907* T: $init 1908* 1909* M: A request to restore partition information on this PV was made, 1910* but the PV does not contain a vaild label to locate the partition 1911* information. The PV is removed from the restore list. 1912* 1913* A: $recover 1914* 1915* Message: 1916* restore(TAPE_SET): Volume PV_NAME not found in tape label. 1917* Removing from PV list. 1918* 1919* S: $info 1920* 1921* T: $init 1922* 1923* M: A request was made to restore a PV, but the PV was not saved as 1924* part of this tape set. 1925* 1926* A: Correct the control file(s) accordingly. 1927* 1928* Message: 1929* restore(TAPE_SET): Volume PV_NAME will become NEW_PV_NAME, as requested. 1930* 1931* S: $info 1932* 1933* T: $init 1934* 1935* M: The PV to be restored currently has a dirrerent label than that 1936* to be restored. This is only an informative message to make the user 1937* aware of the change. 1938* 1939* A: $ignore 1940* 1941* Message: 1942* restore(TAPE_SET): Volume on DISK_DEV is not a MULTICS_VOL_ID. 1943* 1944* S: $info 1945* 1946* T: $init 1947* 1948* M: Informative message to let the operator know that the volume 1949* does not currently contain a valid Multics label. 1950* 1951* A: $ignore 1952* 1953* Message: 1954* restore: si ERR_MESSAGE 1955* 1956* S: $beep 1957* 1958* T: $init 1959* 1960* M: An error has been found with the internal "si" structure. $err 1961* 1962* A: $inform 1963* 1964* Message: 1965* restore: sri ERR_MESSAGE 1966* 1967* S: $beep 1968* 1969* T: $init 1970* 1971* M: An error has been found with the internal "sri" structure. $err 1972* 1973* A: $inform 1974* 1975* Message: 1976* save: Attaching TAPE_DEV. ERR_MESSAGE 1977* 1978* S: $beep 1979* 1980* T: $init 1981* 1982* M: IOI has returned a non-zero error code in response to a request 1983* to assign TAPE_DEV. 1984* 1985* A: $recover 1986* 1987* Message: 1988* save: Could not read label of PV_NAME on DISK_DEV. ERR_MESSAGE 1989* 1990* S: $beep 1991* 1992* T: $init 1993* 1994* M: The volume label of the PV could not be read due to the error 1995* given in ERR_MESSAGE. 1996* 1997* A: A operator query is done to find out if the read should be 1998* retried or the PV removed from the list. 1999* 2000* Message: 2001* save: Initiating CONTROL_FILE_NAME for set-TAPE_SET_IDX ERR_MESSAGE 2002* 2003* S: $beep 2004* 2005* T: $init 2006* 2007* M: An error was detected while initiating the save control file. 2008* 2009* A: $inform $recover 2010* 2011* Message: 2012* save(TAPE_SET): MULTICS_VOL_ID PV_NAME on DISK_DEV 2013* Last updated: DATE_TIME 2014* 2015* S: $info 2016* 2017* T: $init 2018* 2019* M: Just an informative message. 2020* 2021* A: $ignore 2022* 2023* Message: 2024* save(TAPE_SET): Partition PARTITION_NAME is not defined on PV_NAME. 2025* 2026* S: $info 2027* 2028* T: $init 2029* 2030* M: A request to save specific partition has been made, but the 2031* partition does not exist of the PV. 2032* 2033* A: Correct the control file(s) accordingly. 2034* 2035* Message: 2036* save(TAPE_SET): Partition PARTITION_NAME of volume PV_NAME 2037* is not defined in the restart tape label. 2038* 2039* S: $info 2040* 2041* T: $init 2042* 2043* M: There is an inconsistency between the restart tape and the save 2044* control file(s). 2045* 2046* A: Either correct the control file(s) or start the save over from 2047* the beginning. 2048* 2049* Message: 2050* save(TAPE_SET): Removing volume PV_NAME from PV list, 2051* because there are no partitions to save. 2052* 2053* S: $info 2054* 2055* T: $init 2056* 2057* M: Only partition requests were made for this volume and now for 2058* various reasons there are none left to save. 2059* 2060* A: $recover 2061* 2062* Message: 2063* save(TAPE_SET): Removing volume PV_NAME from PV list, 2064* because all partitions were removed. 2065* 2066* S: $info 2067* 2068* T: $init 2069* 2070* M: It is nolonger necessary for the program to keep track of the 2071* PV, since all of the partition requests have been removed. 2072* 2073* A: Correct the control files accordingly. 2074* 2075* Message: 2076* save(TAPE_SET): Reverting "-all" partition request 2077* for volume PV_NAME, because there are no partitions to save. 2078* 2079* S: $info 2080* 2081* T: $init 2082* 2083* M: This PV_NAME has no partitions defined. 2084* 2085* A: $ignore 2086* 2087* Message: 2088* save: Setting max workspace for TAPE_DEV. ERR_MESSAGE 2089* 2090* S: $beep 2091* 2092* T: $init 2093* 2094* M: IOI has returned a non-zero error code in response to a request 2095* to set the max workspace size for TAPE_DEV. 2096* 2097* A: $inform 2098* 2099* Message: 2100* save: Setting up workspace for TAPE_DEV. ERR_MESSAGE 2101* 2102* S: $beep 2103* 2104* T: $init 2105* 2106* M: IOI has returned a non-zero error code from the request to 2107* create a workspace for TAPE_DEV. 2108* 2109* A: $inform 2110* 2111* Message: 2112* save: TAPE_DEV ERR_MESSAGE 2113* 2114* S: $beep 2115* 2116* T: $init 2117* 2118* M: An error occured while scanning the tape subsystem survey data. 2119* 2120* A: $recover 2121* 2122* Message: 2123* save(TAPE_SET): Tape subsystem "SUB_SYS" is not defined in the config. 2124* 2125* S: $info 2126* 2127* T: $init 2128* 2129* M: No "prph" entry could be found for the tape subsystem. 2130* 2131* A: Correct config_deck or save/restore control file(s) to indicate 2132* proper tape subsystem. 2133* 2134* Message: 2135* save(TAPE_SET): The "conf" partition of rpv is not being saved. 2136* 2137* S: $info 2138* 2139* T: $init 2140* 2141* M: Just an informative message. 2142* 2143* A: Add the request to the save control file if desired. 2144* 2145* Message: 2146* save(TAPE_SET): The "file" partition of rpv is not being saved. 2147* 2148* S: $info 2149* 2150* T: $init 2151* 2152* M: Just an informative message. 2153* 2154* A: Add the request to the save control file if desired. 2155* 2156* Message: 2157* save(TAPE_SET): The "log" partition of rpv is not being saved. 2158* 2159* S: $info 2160* 2161* T: $init 2162* 2163* M: Just an informative message. 2164* 2165* A: Add the request to the save control file if desired. 2166* 2167* Message: 2168* save(TAPE_SET): Type of data being saved for volume PV_NAME 2169* does not match the type in the restart tape label. 2170* 2171* S: $info 2172* 2173* T: $init 2174* 2175* M: There is an inconsistency between the restart tape and the save 2176* control file(s). 2177* 2178* A: Either correct the control file(s) or start the save over from 2179* the beginning. 2180* 2181* Message: 2182* save(TAPE_SET): Unable to save "PARTITION_NAME" partition. 2183* Internal partition list full. 2184* 2185* S: $info 2186* 2187* T: $init 2188* 2189* M: More partitions have been requested than the program can handle. 2190* 2191* A: Change control files to reduce the number defined, possibly by 2192* breaking them up into seperate tape sets. 2193* 2194* Message: 2195* save(TAPE_SET): Unable to save "PARTITION_NAME" partition. 2196* N partitions already defined 2197* 2198* S: $info 2199* 2200* T: $init 2201* 2202* M: An attempt has been made to save more than the N maximum 2203* partitions allowed. 2204* 2205* A: Change control files(s) to reduce the number requested. 2206* 2207* Message: 2208* save(TAPE_SET): Volume PV_NAME not found in restart tape label. 2209* 2210* S: $info 2211* 2212* T: $init 2213* 2214* M: There is an inconsistency between the restart tape and the save 2215* control file(s). 2216* 2217* A: Either correct the control file(s) or start the save over from 2218* the beginning. 2219* 2220* Message: 2221* save(TAPE_SET): Volume PV_NAME requires salvaging. 2222* Setting -all to save all paging records on the volume. 2223* 2224* S: $info 2225* 2226* T: $init 2227* 2228* M: Just an informative message. 2229* 2230* A: $ignore 2231* 2232* Message: 2233* save(TAPE_SET): Volume PV_NAME's PVID does not match 2234* the one in the restart tape label. 2235* 2236* S: $info 2237* 2238* T: $init 2239* 2240* M: There is an inconsistency between what is on the restart tape 2241* and what is currently defined on the PV's disk label. 2242* 2243* A: Start the save over from the beginning. 2244* 2245* Message: 2246* save(TAPE_SET): Volume on DISK_DEV is not a MULTICS_VOL_ID. 2247* 2248* S: $info 2249* 2250* T: $init 2251* 2252* M: The volume to be saved is not a valid Multics volume and 2253* therefore cannot be saved. 2254* 2255* A: $recover 2256* 2257* Message: 2258* save(TAPE_SET): Volume was expected to be PV_NAME. 2259* 2260* S: $info 2261* 2262* T: $init 2263* 2264* M: The PV name read from the disk label does not match the PV name 2265* that was defined in the save control file(s). 2266* 2267* A: Correct the control file to show the proper PV name mounted on 2268* the device. 2269* 2270* Message: 2271* save: si ERR_MESSAGE 2272* 2273* S: $beep 2274* 2275* T: $init 2276* 2277* M: An error has been found with the internal "si" structure. $err 2278* 2279* A: $inform 2280* 2281* Message: 2282* save: sri ERR_MESSAGE 2283* 2284* S: $beep 2285* 2286* T: $init 2287* 2288* M: An error has been found with the internal "sri" structure. $err 2289* 2290* A: $inform 2291* 2292* END MESSAGE DOCUMENTATION */ 2293 2294 end bce_save_util_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0826.7 bce_save_util_.pl1 >special_ldd>install>MR12.3-1114>bce_save_util_.pl1 1640 1 10/21/86 1251.6 bce_ioi_post_area.incl.pl1 >ldd>include>bce_ioi_post_area.incl.pl1 1642 2 10/21/86 1251.6 bce_subsystem_info_.incl.pl1 >ldd>include>bce_subsystem_info_.incl.pl1 1644 3 07/07/88 2038.7 bsr_structures.incl.pl1 >ldd>include>bsr_structures.incl.pl1 1646 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 1648 6 07/11/84 0937.3 bootload_post_area.incl.pl1 >ldd>include>bootload_post_area.incl.pl1 1650 7 10/30/86 2010.5 config_data_dcls.incl.pl1 >ldd>include>config_data_dcls.incl.pl1 1652 8 11/08/82 1005.8 config_prph_tap_card.incl.pl1 >ldd>include>config_prph_tap_card.incl.pl1 1654 9 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 1656 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 1658 12 03/27/82 0430.3 io_status_word.incl.pl1 >ldd>include>io_status_word.incl.pl1 1660 13 08/17/79 2215.0 ioi_stat.incl.pl1 >ldd>include>ioi_stat.incl.pl1 1662 14 11/12/74 1550.1 iom_dcw.incl.pl1 >ldd>include>iom_dcw.incl.pl1 1664 15 05/06/74 1742.1 iom_pcw.incl.pl1 >ldd>include>iom_pcw.incl.pl1 1666 16 05/27/82 1525.8 pvt.incl.pl1 >ldd>include>pvt.incl.pl1 1668 17 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1 1670 18 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 1672 19 10/21/86 1251.6 tape_error_interp.incl.pl1 >ldd>include>tape_error_interp.incl.pl1 1674 20 04/29/76 1050.5 vol_map.incl.pl1 >ldd>include>vol_map.incl.pl1 1676 21 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_FREE_IN_WORD 020410 constant bit(32) initial packed unaligned dcl 196 ref 222 ALL_PARTS 000061 constant char(4) initial packed unaligned dcl 1534 ref 422 475 884 893 1048 1089 ANNOUNCE 000011 constant fixed bin(17,0) initial dcl 18-7 set ref 173* 348* 379* 383* 395* 399* 405* 441* 451* 465* 482* 492* 500* 507* 524* 534* 540* 546* 558* 566* 574* 586* 1036* 1055* 1059* 1096* 1100* 1126* 1132* ANY_DENSITY constant bit(5) initial packed unaligned dcl 1535 ref 748 BEEP 000172 constant fixed bin(17,0) initial dcl 18-7 set ref 124* 142* 147* 150* 155* 365* 653* 993* 998* 1005* 1013* 1258* 1381* 1390* BOTH_SAVED constant fixed bin(17,0) initial dcl 4-97 ref 572 602 BREAKS 000036 constant char(5) initial packed unaligned dcl 1536 ref 669 669 1308 COMMENT_CHARS 000034 constant char(3) initial packed unaligned dcl 1538 ref 673 CRASH 000176 constant fixed bin(17,0) initial dcl 18-7 set ref 1340* DEN1600 constant bit(5) initial packed unaligned dcl 1541 ref 758 765 DEN556 constant bit(5) initial packed unaligned dcl 1539 ref 760 767 DEN6250 constant bit(5) initial packed unaligned dcl 1542 ref 751 757 764 DEN800 constant bit(5) initial packed unaligned dcl 1540 ref 759 766 DISK_BUSY constant fixed bin(17,0) initial dcl 1590 ref 1367 DISK_READY constant fixed bin(17,0) initial dcl 1591 ref 1254 1261 DISK_SUSPEND constant fixed bin(17,0) initial dcl 1589 ref 1333 FIRST_TAPE_DEV_IDX constant fixed bin(17,0) initial dcl 1543 ref 736 1276 FREE constant fixed bin(17,0) initial dcl 1588 ref 1291 1332 IOTD constant bit(2) initial packed unaligned dcl 1544 ref 115 IOTP constant bit(2) initial packed unaligned dcl 1545 ref 110 LABEL_ADDR constant fixed bin(17,0) initial dcl 9-54 ref 362 LARGE_TAPE_NUMBER constant fixed bin(17,0) initial dcl 281 ref 294 344 MAX_BUFFERS constant fixed bin(17,0) initial dcl 1546 ref 91 99 MAX_PARTS_PER_VOL 000167 constant fixed bin(17,0) initial dcl 1547 set ref 913 914* 1059 1059* 1100 1100* Multics 500 based char(32) initial level 2 dcl 4-68 ref 378 Multics_ID_String 000010 internal static char(32) initial packed unaligned dcl 5-92 set ref 378 379* 395* NL constant char(1) initial packed unaligned dcl 1548 ref 662 NO constant bit(1) initial dcl 1550 ref 184 187 673 710 770 822 827 828 829 830 831 886 918 919 925 965 1072 1073 1113 1114 1135 1154 1256 1305 1312 1453 OFF 000175 constant bit(1) initial dcl 1551 set ref 140* ON constant bit(1) initial dcl 1552 ref 1008 PAGE_SIZE constant fixed bin(17,0) initial dcl 9-67 ref 105 116 PART_ONLY constant fixed bin(17,0) initial dcl 4-95 ref 55 499 572 601 PV_ONLY constant fixed bin(17,0) initial dcl 4-93 ref 491 603 1034 VTOCES_PER_RECORD 000011 constant fixed bin(17,0) initial array dcl 9-72 ref 227 227 VTOCES_PER_WORD 020407 constant fixed bin(17,0) initial dcl 1553 ref 212 213 217 225 VTOC_MAP_ADDR constant fixed bin(17,0) initial dcl 9-54 ref 205 VTOC_ORIGIN constant fixed bin(17,0) initial dcl 9-54 ref 224 227 WORKSPACE_SIZE 000033 constant fixed bin(18,0) initial dcl 1554 set ref 145* 153* YES constant bit(1) initial dcl 1555 ref 375 386 389 407 426 433 454 467 485 495 503 511 527 561 569 577 589 672 675 823 884 893 1016 1039 1129 1153 1160 1162 1254 1263 1317 1487 a_sri_ptr parameter pointer dcl 35 ref 11 41 85 132 166 194 239 278 358 627 984 1023 1147 1182 1212 1379 a_tcbp parameter pointer dcl 986 ref 984 990 993 998 1002 1003 1003 1003 1005 1008 1009 1011 1012 1013 1016 addr builtin function dcl 1593 ref 54 108 109 113 214 221 246 421 470 476 564 597 670 723 737 782 796 866 888 1033 1049 1065 1090 1106 1219 1315 1388 1395 1397 1400 address based bit(18) level 2 packed packed unaligned dcl 14-7 set ref 109* 114* after builtin function dcl 1593 ref 764 765 766 767 all 25(18) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 519 527* 822* 823* all_parts 25(20) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 412 1135* bce_query 000034 constant entry external dcl 1614 ref 367 1151 begins_on_tape 21 based fixed bin(18,0) array level 3 in structure "vol_info" packed packed unsigned unaligned dcl 4-49 in procedure "bce_save_util_" set ref 57 62 69* 254 265 609* 616* begins_on_tape 61 based fixed bin(18,0) array level 4 in structure "info_tape_label" packed packed unsigned unaligned dcl 4-12 in procedure "bce_save_util_" set ref 308 308 308 314 330 330 330 334 bin builtin function dcl 1593 ref 89 93 101 105 111 116 269 287 bit builtin function dcl 1593 ref 105 111 116 bit_idx 000101 automatic fixed bin(17,0) dcl 197 set ref 212* 213 213* 215 215 bit_map 10 based bit(36) array level 2 dcl 21-6 set ref 214 220 221 bit_map_n_words 2 based fixed bin(17,0) level 2 dcl 21-6 ref 214 217 220 bit_map_word based structure level 1 dcl 21-14 bit_map_wordp 000432 automatic pointer dcl 21-4 set ref 214* 215 215 221* 222 225 bits 0(01) based bit(32) level 2 packed packed unaligned dcl 21-14 set ref 215 215 222 225* bootload_disk_io$queue_read 000036 constant entry external dcl 1615 ref 1369 bootload_disk_io$test_done 000040 constant entry external dcl 1617 ref 1255 bootload_fs_$get_ptr 000042 constant entry external dcl 1619 ref 651 buf_listx 12 based fixed bin(17,0) level 2 dcl 3-215 set ref 89* 91 1331 cf based char packed unaligned dcl 629 ref 662 669 cf_arg based char packed unaligned dcl 630 set ref 680* 687 687 703 704* 709 715 715 733 738 739* 744 754 757 758 759 760 764 765 766 767 775 775 799 800* 808 813 823 823 836 836 844 849 872 872 873* 876 884 895 896* 912 930 930 945* 951 955* 961 968* cf_arg_lth 000107 automatic fixed bin(17,0) dcl 631 set ref 680 680 687 687 700 703 704 704 709 715 715 733 738 739 739 744 754 757 758 759 760 764 765 766 767 775 775 799 800 800 808 812 813 823 823 836 836 844 848 849 872 872 873 873 876 884 895 896 896 912 930 930 944 945 945 951 955 955 961 968 968 1308* 1309 1309* 1311 1316 cf_arg_ptr 000110 automatic pointer dcl 632 set ref 670* 680 687 687 703 704 709 715 715 733 738 739 744 754 757 758 759 760 764 765 766 767 775 775 799 800 808 813 823 823 836 836 844 849 872 872 873 876 884 895 896 912 930 930 945 951 955 961 968 1315* cf_array based structure array level 1 dcl 633 set ref 939 940 940 950* 951 cf_array_ptr 000112 automatic pointer dcl 634 set ref 650* 651 651 651 653 657 658 664 680 689 695 704 728 787 800 839 896 905 933 939 940 940 944 945 950 951 951 951 955 961 962 963 964 968 cf_arrayp 2 based pointer level 2 dcl 3-169 ref 650 cf_count 4 based fixed bin(17,0) level 2 dcl 3-169 set ref 938* 938 939 950 951 954 cf_idx 000114 automatic fixed bin(21,0) dcl 635 set ref 659* 661 662 669 974* 974 cf_info based structure level 1 dcl 1516 cf_len 000115 automatic fixed bin(21,0) dcl 636 set ref 658* 661 662 669 cf_line 000116 automatic varying char(256) dcl 637 set ref 669* 670 673 1304 1308 1309 1315 cf_line_start 000217 automatic fixed bin(17,0) dcl 638 set ref 671* 1304 1308 1309 1315 1316* 1316 cf_ptr 000220 automatic pointer dcl 639 set ref 657* 662 669 cfx 5 based fixed bin(17,0) level 2 dcl 3-169 ref 651 651 651 653 657 658 664 680 689 695 704 728 787 800 839 896 905 933 945 955 968 chk_start 000222 automatic fixed bin(17,0) dcl 640 set ref 792* 794* 795 881* 883* 887 clock builtin function dcl 1593 ref 1262 1292 1334 1368 code 000277 automatic fixed bin(35,0) dcl 1496 set ref 122* 123 124* 140* 141 142* 145* 146 147* 148* 150 150* 153* 154 155* 362* 364 365* 651* 652 653* 814* 815 816* 850* 851 852* 1255* 1256 1257 1258* 1369* com_err_ 000044 constant entry external dcl 1621 ref 816 852 complete 14 based bit(1) array level 2 in structure "part_array" packed packed unaligned dcl 3-43 in procedure "bce_save_util_" set ref 249 302 complete 14 based bit(1) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save_util_" set ref 426* 433* 434* 485* 918* 1072* 1113* complete 25(22) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save_util_" set ref 829* completion 2 based structure level 3 in structure "survey_ws" dcl 3-194 in procedure "bce_save_util_" completion 6 based structure level 3 in structure "stat_ws" dcl 3-187 in procedure "bce_save_util_" completion based structure level 2 in structure "istat" dcl 13-7 in procedure "bce_save_util_" config_$find_periph 000046 constant entry external dcl 1622 ref 171 config_data_$tape_drive_model_names 000102 external static structure level 1 dcl 7-156 count 000102 external static fixed bin(17,0) level 2 dcl 7-156 ref 179 current_region 16 based fixed bin(17,0) level 2 dcl 4-49 set ref 620* data 12 based structure level 2 dcl 3-194 data_dcw 10 based bit(36) level 2 dcl 3-24 set ref 113 data_saved 11 based fixed bin(17,0) level 2 dcl 4-49 set ref 55 65 491 499 572 572 601* 602* 603* 1034 datap 4 based pointer level 2 dcl 3-92 set ref 209 1336* datax 4 based bit(18) level 2 packed packed unaligned dcl 3-24 set ref 105* 114 1336 1369 1369 date_time_ 000050 constant entry external dcl 1623 ref 393 date_time_$format 000052 constant entry external dcl 1624 ref 46 date_time_string 000300 automatic char(24) packed unaligned dcl 1497 set ref 393* 395* dcw based structure level 1 dcl 14-7 dcwp 000424 automatic pointer dcl 14-4 set ref 108* 109 110 111 113* 114 115 116 densities_available 20(23) based bit(5) level 2 packed packed unaligned dcl 3-215 set ref 1002* 1003 density 12(14) based fixed bin(4,0) array level 4 in structure "survey_ws" packed packed unsigned unaligned dcl 3-194 in procedure "bce_save_util_" ref 1002 density 20(18) based bit(5) level 2 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save_util_" set ref 748* 751* 757* 758* 759* 760* 764* 765* 766* 767* 1003 1008 density_command 20(12) based bit(6) level 2 packed packed unaligned dcl 3-215 set ref 1009* density_commands 000032 constant bit(6) initial array packed unaligned dcl 1556 ref 1009 density_idx 000306 automatic fixed bin(17,0) dcl 1498 set ref 1008* 1009 density_table 000027 constant bit(5) initial array packed unaligned dcl 1557 ref 1002 dev_type 14 based fixed bin(17,0) level 2 dcl 4-49 set ref 65 506 507 604* device 20 based char(8) level 2 in structure "pv" dcl 3-68 in procedure "bce_save_util_" set ref 365* 379* 395* 813* 814 816* 1070 1111 device 11 based char(8) level 2 in structure "part" dcl 3-46 in procedure "bce_save_util_" set ref 869* 1070* 1111* device 2 based fixed bin(17,0) level 2 in structure "tcb" dcl 3-215 in procedure "bce_save_util_" set ref 990 device_0_valid 4 000102 external static bit(1) array level 3 dcl 7-156 ref 181 device_names 000000 constant char(4) initial array dcl 10-66 set ref 65* 507* 507* device_type 4 based fixed bin(8,0) array level 2 packed packed unaligned dcl 17-24 ref 227 227 506 507 604 disk_buffer_post based structure level 1 dcl 6-10 disk_name_pvtx 000054 constant entry external dcl 1625 ref 814 850 disk_post_buf 5 based fixed bin(17,0) level 2 dcl 3-24 set ref 96* 1255* 1369* divide builtin function dcl 1593 ref 227 doing_all_parts 000307 automatic bit(1) packed unaligned dcl 1499 set ref 884* 886* 893* 904 doing_restore 6 based bit(1) level 3 packed packed unaligned dcl 3-169 ref 1385 ends_on_tape 21(18) based fixed bin(18,0) array level 3 in structure "vol_info" packed packed unsigned unaligned dcl 4-49 in procedure "bce_save_util_" set ref 58 63 69* 260 266 610* 617* ends_on_tape 61(18) based fixed bin(18,0) array level 4 in structure "info_tape_label" packed packed unsigned unaligned dcl 4-12 in procedure "bce_save_util_" set ref 314 314 334 334 error_table_$bad_density 000020 external static fixed bin(35,0) dcl 1601 set ref 1005* error_table_$device_not_usable 000022 external static fixed bin(35,0) dcl 1603 set ref 998* error_table_$incorrect_device_type 000024 external static fixed bin(35,0) dcl 1605 set ref 1013* error_table_$no_device 000026 external static fixed bin(35,0) dcl 1607 set ref 993* error_table_$not_done 000030 external static fixed bin(35,0) dcl 1609 ref 1256 error_table_$unimplemented_version 000032 external static fixed bin(35,0) dcl 1611 set ref 1381* 1390* expect_cf_arg 000223 automatic bit(1) packed unaligned dcl 641 set ref 675* 679 710* 770* 831* 925* 965* find_bit_$last_off 000100 constant entry external dcl 1638 ref 215 225 first_disk_post_buf 27 based fixed bin(17,0) level 2 dcl 3-92 ref 96 first_part_idx 000275 automatic fixed bin(17,0) dcl 1214 set ref 1226* 1231 first_rec 30 based fixed bin(18,0) level 2 dcl 3-92 set ref 598* first_tape_number 31 based fixed bin(17,0) level 2 dcl 3-92 set ref 254* 265* 268 268 flags 20 based structure level 2 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save_util_" flags 20 based structure array level 2 in structure "tcb_array" packed packed unaligned dcl 3-211 in procedure "bce_save_util_" flags 6 based structure level 2 in structure "sri" packed packed unaligned dcl 3-169 in procedure "bce_save_util_" frec 1005 based fixed bin(17,0) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save_util_" ref 430 431 1115 1116 1462 1462 1464 frec 14(18) based fixed bin(17,0) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save_util_" set ref 430* 434* 920* 1074* 1115* group 5 based structure array level 2 dcl 8-5 ref 177 177 handler 12 based structure array level 3 packed packed unaligned dcl 3-194 ref 989 989 990 have_cf_arg 000224 automatic bit(1) packed unaligned dcl 642 set ref 672* 673* 676 678 694 727 747 756 786 811 822 838 847 857 859 932 1305* 1312* 1317* hbound builtin function dcl 1593 ref 177 718 719 719 777 778 778 861 862 862 939 940 940 989 1055 1096 head 12 based structure level 2 dcl 3-24 set ref 109 header_dcw 7 based bit(36) level 2 dcl 3-24 set ref 108 i 000310 automatic fixed bin(17,0) dcl 1500 set ref 179* 181 181* 220* 221* 225 423* 423* 426 430 431 431 432 477* 477* 480 582* 582* 585 701* 703* 734* 736 737* 795* 796* 887* 888* 951* 951 951* 954 961 962 963 964 989* 990 990* 996 1002 1011 1043* 1044 1045 1055 1059 1068* 1083* 1084 1084 1084 1086 1096 1100 1109 1115 1116 1116 1117* index builtin function dcl 1593 ref 662 673 1008 info_tape_label based structure level 1 dcl 4-12 info_tape_label_ptr 6 based pointer level 2 dcl 3-92 ref 1394 info_tape_labelp 000410 automatic pointer dcl 4-11 set ref 45 45 46 48 48 48 53 53 54 243 243 243 246 269 269 296 296 296 303 303 303 308 308 308 314 314 314 326 326 326 330 330 330 334 334 334 461 461 461 464 470 1028 1028 1028 1031 1033 1191 1191 1193 1394* info_volx 000105 automatic fixed bin(17,0) dcl 280 set ref 296* 296* 303 303 308 308 308 314 314 314 326 326 330 330 330 334 334 334 io_post_buffer based structure level 1 dcl 1-18 ioa_ 000056 constant entry external dcl 1626 ref 45 46 48 50 65 69 73 371 394 434 664 680 689 695 704 719 728 739 778 787 800 839 862 873 877 896 905 914 933 940 945 955 968 1157 1165 1166 1167 1168 1172 iob based structure level 1 dcl 3-24 set ref 92* 93 101 iobp 000366 automatic pointer dcl 3-23 set ref 91* 92 93 93 93 96 100 101 101 105 108 109 113 114* 117* 205 1254 1255 1261 1262 1291 1292 1331* 1331* 1332 1333 1334 1335 1336* 1339 1367 1368 1369 1369 1369 1369 1393* ioi_assignment$assign 000060 constant entry external dcl 1627 ref 140 ioi_assignment$unassign 000062 constant entry external dcl 1629 ref 148 ioi_ev_chn 4 based fixed bin(71,0) level 2 dcl 3-215 set ref 136* 137 140* ioi_index 3 based fixed bin(17,0) level 2 dcl 3-215 set ref 122* 140* 145* 148* 153* ioi_set$max_workspace 000064 constant entry external dcl 1631 ref 145 ioi_set$status 000066 constant entry external dcl 1633 ref 122 ioi_set$workspace 000070 constant entry external dcl 1634 ref 153 ioi_statusx 34 based fixed bin(18,0) level 2 dcl 3-92 set ref 121* 122* 139* istat based structure level 1 dcl 13-7 j 000311 automatic fixed bin(17,0) dcl 1501 set ref 736* 738* 797* 799* 890* 891 893 895* label based structure level 1 dcl 5-18 last_rec 35 based fixed bin(18,0) level 2 dcl 3-92 set ref 598* last_tape_number 36 based fixed bin(17,0) level 2 dcl 3-92 set ref 260* 266* 289 last_vtoc_record_used 000102 automatic fixed bin(18,0) dcl 198 set ref 227* 234 last_vtoce_used 000103 automatic fixed bin(17,0) dcl 200 set ref 217* 225* 227 lbound builtin function dcl 1593 ref 53 56 61 177 179 220 243 251 257 263 296 303 326 419 423 439 447 461 473 477 531 537 543 554 580 582 612 701 734 797 890 951 989 1028 1043 1045 1083 1086 1191 1192 1218 1222 1352 1428 1432 1454 1461 length 11 based fixed bin(21,0) array level 2 in structure "cf_array" dcl 633 in procedure "bce_save_util_" set ref 651* 658 963* length builtin function dcl 1593 in procedure "bce_save_util_" ref 700 944 1304 1309 line_count 000225 automatic fixed bin(17,0) dcl 643 set ref 660* 664 668* 668 680* 689* 695* 704* 728* 787* 800* 839* 896* 905* 933* 945* 955* 968* low_part_frec 000622 automatic fixed bin(17,0) dcl 1417 set ref 1460* 1462 1464* 1468 1469 low_px 000623 automatic fixed bin(17,0) dcl 1418 set ref 1465* 1471 lrec 15 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 431* 433 920* 1074* 1116* ltrim builtin function dcl 1593 ref 669 max builtin function dcl 1593 ref 314 334 mod builtin function dcl 1593 ref 212 model 1 000102 external static fixed bin(17,0) array level 3 in structure "config_data_$tape_drive_model_names" dcl 7-156 in procedure "bce_save_util_" ref 181 model 5 based fixed bin(17,0) array level 3 in structure "prph_tap_card" dcl 8-5 in procedure "bce_save_util_" ref 178 181 my_name 000312 automatic char(8) packed unaligned dcl 1502 set ref 124* 142* 147* 150* 155* 173* 348* 365* 367* 371* 379* 383* 395* 399* 405* 434* 441* 451* 465* 482* 492* 500* 507* 524* 534* 540* 546* 558* 566* 574* 586* 653* 664* 680* 689* 695* 704* 719* 728* 739* 778* 778* 787* 800* 816* 839* 852* 862* 862* 873* 873* 877* 877* 896* 905* 914* 914* 933* 940* 945* 955* 968* 993* 998* 1005* 1013* 1036* 1055* 1055* 1059* 1059* 1096* 1096* 1100* 1100* 1126* 1132* 1151* 1157* 1258* 1381* 1386* 1390* n_vtoce based fixed bin(17,0) level 2 dcl 21-6 ref 212 name based char(8) array level 2 in structure "tcb_array" dcl 3-211 in procedure "bce_save_util_" set ref 738 1280 name based char(4) level 2 in structure "part" dcl 3-46 in procedure "bce_save_util_" set ref 422 423 434* 477 482* 912* 1068* 1109* name based char(8) level 2 in structure "tcb" dcl 3-215 in procedure "bce_save_util_" set ref 124* 137 140* 142* 147* 150* 155* 171 171 173 173 744* 993* 998* 1005* 1013* 1157* name based char(32) array level 2 in structure "pv_array" dcl 3-65 in procedure "bce_save_util_" set ref 296 799 1193 name based char(32) array level 2 in structure "cf_array" dcl 633 in procedure "bce_save_util_" set ref 651 653* 664* 680* 689* 695* 704* 728* 787* 800* 839* 896* 905* 933* 944 945* 951 955* 961* 968* name based char(32) level 2 in structure "pv" dcl 3-68 in procedure "bce_save_util_" set ref 243 365* 390 398 399* 405* 422 441 447 451* 461 465* 475 482* 507* 524* 529 531 537 543 554 558* 566* 574* 613 808* 1028 1045 1048 1059* 1069 1086 1089 1100* 1110 1126* 1132* 1223 1258* 1428 1434 1442 1454 1471 1479 name based char(4) array level 2 in structure "part_array" dcl 3-43 in procedure "bce_save_util_" set ref 251 257 303 441* 475 531 537 543 582 586* 615 893 895 1045 1048 1086 1089 1434 1471 names 1 000102 external static structure array level 2 dcl 7-156 ref 179 nbufs 11 based fixed bin(17,0) level 2 dcl 3-215 set ref 90* 91 96 98* 98 99 105 119 next_bufx based fixed bin(17,0) level 2 packed packed unaligned dcl 3-24 set ref 93* 100* 117 1339 next_idx 13(18) based fixed bin(17,0) array level 2 packed packed unaligned dcl 3-43 set ref 250 256 323 1224* 1227* next_statex 0(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-24 set ref 1335* next_tape_number 40 based fixed bin(17,0) level 2 dcl 3-92 set ref 285* 291* 294* 308 308* 314 314* 320 330 330* 334 334* 340 344 344 345* 348* nl_idx 000226 automatic fixed bin(17,0) dcl 644 set ref 662* 663 669 974 nparts 1003 based fixed bin(17,0) level 2 dcl 4-68 ref 423 426 1083 1461 nrec 1006 based fixed bin(17,0) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save_util_" ref 431 432 1116 1117 nrec 15(18) based fixed bin(17,0) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save_util_" set ref 432* 434* 920* 1074* 1117* nregions 15 based fixed bin(17,0) level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 58 68 251 257 263 477 480 582 585 605* 607* 607 608 609 610 614* 614 615 616 617 1043 1432 nregions 55 based fixed bin(17,0) array level 3 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 303 326 null builtin function dcl 1593 ref 138 172 233 964 1393 number 12(04) based fixed bin(5,0) array level 4 packed packed unsigned unaligned dcl 3-194 ref 990 only_part 25(21) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save_util_" set ref 248 382 399 416 446 490 506 572 601 606 827* 1035 1125 only_part 25(21) based bit(1) array level 2 in structure "pv_array" packed packed unaligned dcl 3-65 in procedure "bce_save_util_" set ref 299 operational 12(02) based bit(1) array level 4 packed packed unaligned dcl 3-194 ref 996 opr_input 000314 automatic char(128) packed unaligned dcl 1503 set ref 367* 369 370 371* 1151* 1153 1153 1154 1154 1155 1164 1164 1172* p_pvname parameter char(32) dcl 1348 ref 1346 1353 page based bit(36) array dcl 1530 set ref 209* 209 part based structure level 1 dcl 3-46 in procedure "bce_save_util_" set ref 867* 1066* 1107* part 1004 based char(4) array level 3 in structure "vol_preamble" dcl 4-68 in procedure "bce_save_util_" set ref 423 1055* 1059* 1084 1084 1084 1086 1096* 1100* 1109 1471 part_area based structure array level 1 dcl 1522 set ref 888 1395 part_area_ptr 12 based pointer level 2 dcl 3-169 ref 888 1395 part_array based structure array level 1 dcl 3-43 set ref 419 421 439 447 473 476 531 537 543 580 612 861 862 862 866 890 1045 1049 1055 1065 1086 1090 1096 1106 1222 1352 1428 1436 1438* 1438 1440* 1454 1473 1475* 1475 1477* part_arrayp 000370 automatic pointer dcl 3-42 set ref 249 250 251 256 257 302 303 323 419 421 439 441 441 441 447 447 447 473 475 475 476 531 531 531 537 537 537 543 543 543 580 581 582 586 612 613 613 615 861 862 862 866 888* 890 891 893 895 1045 1045 1045 1048 1048 1049 1055 1065 1086 1086 1086 1089 1089 1090 1096 1106 1222 1223 1223 1224 1227 1352 1353 1395* 1428 1428 1434 1434 1436 1438 1438 1440 1442 1454 1454 1471 1471 1473 1475 1475 1477 1479 part_count 42 based fixed bin(17,0) level 2 dcl 3-92 set ref 419 439 447 450 473 531 534 537 540 543 546 580 612 860* 860 861 866 890 1045 1054 1064* 1065 1086 1095 1105* 1106 1222 1352 1428 1433 1442 1454 1470 1479 part_count_for_vol 000576 automatic fixed bin(17,0) dcl 1349 set ref 1351* 1353* 1353 1355 part_device 000230 automatic char(8) packed unaligned dcl 645 set ref 849* 850* 852* 869 part_entries 000355 automatic fixed bin(17,0) dcl 1505 set ref 889* 892* 892 904 1082* 1121* 1121 1124 part_from_idx 000624 automatic fixed bin(17,0) dcl 1419 set ref 1433* 1434 1434 1438 1440* 1470* 1471 1471 1475 1477* part_hold_area 000625 automatic structure level 1 dcl 1420 set ref 1436* 1440 1473* 1477 part_idx 25 based fixed bin(17,0) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save_util_" set ref 249 1231* 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_util_" set ref 300 part_name 60 based char(4) array level 4 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 303 326 part_name 20 based char(4) array level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 69* 251 257 263 477 582 608* 615* 1044 1045 1068 1434 part_ptr 10 based pointer level 2 dcl 3-92 set ref 421* 476* 866* 1049* 1065* 1090* 1106* 1396 part_pv_name 000232 automatic char(32) packed unaligned dcl 646 set ref 844* 868 part_requested 25(19) based bit(1) level 2 packed packed unaligned dcl 3-68 set ref 416 471 572 602 828* 1135* 1220 part_to_idx 000645 automatic fixed bin(17,0) dcl 1421 set ref 1428* 1428* 1433 1436 1438 1442* 1442 1442* 1454* 1454* 1470 1473 1475 1479* 1479 1479* partp 000372 automatic pointer dcl 3-45 set ref 421* 422 422 423 426 426 430 431 432 433 433 434 434 434 434 476* 477 482 485 485 866* 867 868 869 870 876 891 896 912 913 914 918 919 920 920 920 921 921 921 1049* 1065* 1066 1068 1069 1070 1071 1072 1073 1074 1074 1074 1075 1075 1075 1090* 1106* 1107 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1118 1118 1396* parts 1004 based structure array level 2 dcl 4-68 set ref 423 1083 1461 partx 000354 automatic fixed bin(17,0) dcl 1504 set ref 249* 249* 250 251 255* 255 255* 256 257 419* 421* 439* 441 441 441* 447* 447 447* 450 473* 475 475 476* 531* 531 531* 534 537* 537 537* 540 543* 543 543* 546 580* 581 582 586* 612* 613 613 615* 1045* 1045 1045* 1048 1048 1049* 1054 1055 1064 1086* 1086 1086* 1089 1089 1090* 1095 1096 1105 1222* 1223 1223 1224 1226 1227 1228* prev_part_idx 000276 automatic fixed bin(17,0) dcl 1215 set ref 1221* 1224 1224 1228* prph_tap_card based structure level 1 dcl 8-5 prph_tap_cardp 000420 automatic pointer dcl 8-3 set ref 171* 172 177 177 178 181 ptr 12 based pointer array level 2 in structure "cf_array" dcl 633 in procedure "bce_save_util_" set ref 651* 657 964* ptr builtin function dcl 1593 in procedure "bce_save_util_" ref 91 117 1331 1336 1339 1369 1369 pv based structure level 1 dcl 3-68 set ref 783* pv_area based structure array level 1 dcl 1524 set ref 796 1397 pv_area_ptr 14 based pointer level 2 dcl 3-169 ref 796 1397 pv_array based structure array level 1 dcl 3-65 set ref 777 778 778 782 797 1192 1194 1196* 1196 1198* 1218 1219 pv_arrayp 000374 automatic pointer dcl 3-64 set ref 296 299 300 777 778 778 782 796* 797 799 1192 1193 1194 1196 1196 1198 1218 1219 1397* pv_count 44 based fixed bin(17,0) level 2 dcl 3-92 set ref 295 776* 776 777 782 797 1192 1218 pv_from_idx 000243 automatic fixed bin(17,0) dcl 1184 set ref 1192* 1193 1196 1198* pv_hold_area 000244 automatic structure level 1 dcl 1185 set ref 1194* 1198 pv_name 1 based char(32) level 2 in structure "part" dcl 3-46 in procedure "bce_save_util_" set ref 422 868* 876 891 896* 913* 914* 1069* 1110* pv_name 1 based char(32) array level 2 in structure "part_array" dcl 3-43 in procedure "bce_save_util_" set ref 441 447 475 531 537 543 581 613 891 1045 1048 1086 1089 1223 1353 1428 1434 1442 1454 1471 1479 pv_name 521 based char(32) level 2 in structure "vol_preamble" dcl 4-68 in procedure "bce_save_util_" set ref 395* 397 399* 441* 599 pv_ptr 12 based pointer level 2 dcl 3-92 set ref 782* 1219* 1398 pv_pvtx 13 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 870* 1071* 1112* pv_to_idx 000273 automatic fixed bin(17,0) dcl 1186 set ref 1190* 1194 1196 1200* 1200 pvid 10 based bit(36) level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 65* 565 600* pvid 541 based bit(36) level 2 in structure "vol_preamble" dcl 4-68 in procedure "bce_save_util_" ref 565 600 pvname 40 based char(32) array level 3 in structure "tape_label" dcl 4-32 in procedure "bce_save_util_" set ref 554 pvname based char(32) level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 65* 492* 500* 581 586* 599* 1036* pvname 40 based char(32) array level 3 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 243 296 461 1028 1193 pvp 000376 automatic pointer dcl 3-67 set ref 227 227 243 248 249 362 365 365 375 379 382 386 389 390 390 395 397 398 398 399 399 405 407 412 414 416 416 422 433 441 446 447 451 454 461 465 467 471 475 482 490 495 503 506 506 507 507 511 519 524 527 529 531 537 543 554 558 561 566 569 572 572 574 577 589 601 602 604 606 613 782* 783 808 813 814 816 819 822 823 826 826 827 828 829 830 1028 1035 1039 1045 1048 1059 1069 1070 1071 1086 1089 1100 1110 1111 1112 1125 1126 1129 1132 1135 1135 1219* 1220 1223 1231 1258 1369 1398* 1428 1434 1442 1454 1471 1479 pvt_array based structure array level 1 dcl 17-24 pvt_array_ptr 20 based pointer level 2 dcl 3-169 ref 1387 pvt_arrayp 000426 automatic pointer dcl 17-21 set ref 227 227 506 507 604 1387* pvte based structure level 1 dcl 17-26 pvtx 22 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-68 set ref 227 227 362 506 507 604 819* 1071 1112 1369 pvx 45 based fixed bin(17,0) level 2 dcl 3-92 set ref 295 1218* 1219* px 000646 automatic fixed bin(17,0) dcl 1422 set ref 1461* 1462 1462 1464 1465* read_disk 000072 constant entry external dcl 1635 ref 362 real_name 10 based char(32) level 2 dcl 3-68 set ref 390* 397* 398 rec_header based structure level 1 dcl 4-14 ref 111 rec_in_type 24 based fixed bin(17,0) level 3 in structure "pv" dcl 3-68 in procedure "bce_save_util_" set ref 826* rec_in_type 13 based fixed bin(17,0) level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 598* rec_on_pv 23 based fixed bin(18,0) level 3 in structure "pv" dcl 3-68 in procedure "bce_save_util_" set ref 433 826* rec_on_pv 16 based fixed bin(35,0) level 3 in structure "iob" dcl 3-24 in procedure "bce_save_util_" set ref 205* 1369 rec_on_pv 12 based fixed bin(18,0) level 3 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 598* region 20 based structure array level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" set ref 56 61 251 257 263 477 582 1043 1432 region 60 based structure array level 3 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 303 326 rel builtin function dcl 1593 ref 89 93 101 109 1331 removed 14(01) based bit(1) level 2 in structure "part" packed packed unaligned dcl 3-46 in procedure "bce_save_util_" set ref 426* 485* 919* 1073* 1114* removed 20 based bit(1) array level 3 in structure "tcb_array" packed packed unaligned dcl 3-211 in procedure "bce_save_util_" set ref 1273 1276 removed 20 based bit(1) level 3 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save_util_" set ref 1160* removed 25(23) based bit(1) level 2 in structure "pv" packed packed unaligned dcl 3-68 in procedure "bce_save_util_" set ref 375* 386* 389* 407* 414 454* 467* 495* 503* 511* 561* 569* 577* 589* 830* 1039* 1129* removed 14(01) based bit(1) array level 2 in structure "part_array" packed packed unaligned dcl 3-43 in procedure "bce_save_util_" set ref 441 447 613 1223 restart 23 based structure level 2 in structure "pv" dcl 3-68 in procedure "bce_save_util_" restart 76 based bit(1) level 2 in structure "si" dcl 3-92 in procedure "bce_save_util_" ref 287 553 restart 12 based structure level 2 in structure "vol_info" dcl 4-49 in procedure "bce_save_util_" restoring 000356 automatic bit(1) packed unaligned dcl 1506 set ref 379* 381 399 412 416 460 748 792 820 881 951 1027 1385* 1427 rtrim builtin function dcl 1593 ref 669 rx 000357 automatic fixed bin(17,0) dcl 1507 set ref 56* 61* 68* 68* 69 69 69* 251* 251* 254 257* 257* 260 263* 263* 265 266 303* 303* 308 308 308 314 314 314 326* 326* 330 330 330 334 334 334 1432* 1434* save_time 24 based fixed bin(71,0) level 2 dcl 4-12 set ref 46* search builtin function dcl 1593 ref 1308 seek_command 000422 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 based fixed bin(17,0) array level 2 dcl 633 set ref 951 962* set_index 7 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-169 ref 1384 set_info based structure array level 1 dcl 1526 set ref 701 734 1388 set_infop 10 based pointer level 2 dcl 3-169 ref 701 703 734 736 1388 setx 000360 automatic fixed bin(17,0) dcl 1508 set ref 653* 680* 701 719* 728* 734 778* 787* 794 795 800* 839* 862* 883 887 896* 905* 933* 945* 951 955* 962 968* 1384* 1388 1395 1397 1400 si based structure level 1 dcl 3-92 si_ptr 000400 automatic pointer dcl 3-91 set ref 96 121 122 139 173 209 209 211 246 254 260 265 266 268 268 268 268 269 269 285 285 287 287 289 289 291 291 294 295 295 308 308 308 314 314 314 314 320 320 330 330 330 334 334 334 334 340 340 344 344 344 345 345 348 348 348 367 371 379 383 395 399 405 419 421 439 441 447 450 451 465 470 473 476 482 492 500 507 524 531 534 534 537 540 540 543 546 546 553 558 564 566 574 580 586 597 598 598 612 680 680 688 689 700 709 716 716 717 717 718 719 719 723 723 728 728 776 776 777 778 778 782 782 787 787 797 800 800 839 839 860 860 861 862 862 866 866 890 896 896 905 905 933 933 945 945 955 955 968 968 1033 1036 1045 1049 1054 1055 1059 1064 1065 1065 1086 1090 1095 1096 1100 1105 1106 1106 1126 1132 1151 1156 1157 1161 1161 1192 1218 1218 1219 1219 1222 1273 1273 1275 1276 1278 1336 1340 1352 1388* 1389 1394 1396 1398 1399 1401 1402 1403 1428 1433 1442 1454 1470 1479 si_version_1 000024 constant char(8) initial packed unaligned dcl 3-90 ref 1389 size builtin function dcl 1593 ref 93 101 111 sort_done 000647 automatic bit(1) packed unaligned dcl 1423 set ref 1453* 1459 1487* speed 20(28) based bit(3) level 2 in structure "tcb" packed packed unaligned dcl 3-215 in procedure "bce_save_util_" set ref 1011* 1012 speed 12(10) based fixed bin(3,0) array level 4 in structure "survey_ws" packed packed unsigned unaligned dcl 3-194 in procedure "bce_save_util_" ref 1011 speed_table 000026 constant bit(3) initial array packed unaligned dcl 1575 ref 1011 sri based structure level 1 dcl 3-169 sri_version_1 000022 constant char(8) initial packed unaligned dcl 3-167 ref 1380 srip 000402 automatic pointer dcl 3-168 set ref 413* 650 651 651 651 653 657 658 664 680 689 695 701 703 704 728 734 736 737 787 796 800 839 888 896 905 933 938 938 939 945 950 951 954 955 968 1379* 1380 1384 1385 1386 1387 1388 1395 1397 1400 state 1 based fixed bin(17,0) level 2 dcl 3-24 set ref 1254 1261* 1291* 1332 1333* 1367* state_time 2 based fixed bin(71,0) level 2 dcl 3-24 set ref 1262* 1292* 1334* 1368* status_count 13 based fixed bin(17,0) level 2 dcl 3-215 set ref 119* 122 status_idx 14 based fixed bin(17,0) level 2 dcl 3-215 set ref 120* statusx 15 based fixed bin(17,0) level 2 dcl 3-215 set ref 101* 121 sub_request_abort_ 000000 stack reference condition dcl 1597 ref 1241 substr builtin function dcl 1593 set ref 137* 137 171 171 173 173 215 215 662 669 673 733 754 1308 1315 survey_ws based structure level 1 dcl 3-194 surveyed 20(02) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 1016* syserr 000074 constant entry external dcl 1636 ref 173 348 379 383 395 399 405 441 451 465 482 492 500 507 524 534 540 546 558 566 574 586 1036 1055 1059 1096 1100 1126 1132 1340 syserr$error_code 000076 constant entry external dcl 1637 ref 124 142 147 150 155 365 653 993 998 1005 1013 1258 1381 1390 tally 0(24) based bit(12) level 2 packed packed unaligned dcl 14-7 set ref 111* 116* tap_groupx 000100 automatic fixed bin(17,0) dcl 168 set ref 177* 178 181* tape_count 50 based fixed bin(17,0) array level 2 in structure "set_info" dcl 1526 in procedure "bce_save_util_" set ref 736 tape_count 50 based fixed bin(17,0) level 2 in structure "si" dcl 3-92 in procedure "bce_save_util_" set ref 716* 716 718 723 1273 1275 1276 1278 tape_error_interp based structure level 1 dcl 19-30 tape_label based structure level 1 dcl 4-32 tape_label_ptr 14 based pointer level 2 dcl 3-92 ref 1399 tape_labelp 000412 automatic pointer dcl 4-30 set ref 287 554 554 554 557 564 596 596 597 597 1399* tape_number 22 based char(4) level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save_util_" ref 287 tape_number 22 based char(4) level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" ref 269 269 tape_seq_number 52 based fixed bin(17,0) level 2 dcl 3-92 set ref 268 268* 269 269* 285 287* 289 291 308 314 314 320 330 334 334 340 344 345 tape_set 56 based char(32) array level 2 in structure "set_info" packed packed unaligned dcl 1526 in procedure "bce_save_util_" set ref 703 tape_set 12 based char(32) level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 48* tape_set 56 based char(32) level 2 in structure "si" packed packed unaligned dcl 3-92 in procedure "bce_save_util_" set ref 173* 348* 367* 371* 379* 383* 395* 399* 405* 441* 451* 465* 482* 492* 500* 507* 524* 534* 540* 546* 558* 566* 574* 586* 680 680* 688 689* 700 709* 719 719* 728 728* 778 778* 787 787* 800 800* 839 839* 862 862* 896 896* 905 905* 933 933* 945 945* 955 955* 968 968* 1036* 1055* 1059* 1096* 1100* 1126* 1132* 1151* 1157* 1340* tape_vol_number 10 based char(4) level 2 dcl 3-215 set ref 286 tapes_in_set 30 based fixed bin(17,0) level 2 dcl 4-12 set ref 48* tcb based structure level 1 dcl 3-215 set ref 724* tcb_area based structure array level 1 dcl 1528 set ref 737 1400 tcb_area_ptr 16 based pointer level 2 dcl 3-169 ref 737 1400 tcb_array based structure array level 1 dcl 3-211 set ref 718 719 719 723 tcb_arrayp 000404 automatic pointer dcl 3-210 set ref 718 719 719 723 737* 738 1273 1276 1280 1400* tcb_ptr 16 based pointer level 2 dcl 3-92 set ref 723* 1401 tcbp 000406 automatic pointer dcl 3-214 set ref 89 89 90 91 91 91 96 98 98 99 101 105 117 119 119 120 121 122 122 124 136 137 137 138 140 140 140 142 145 147 148 150 153 153 155 171 171 173 173 286 723* 724 744 748 751 757 758 759 760 764 765 766 767 989 989 990 990 996 1002 1011 1157 1160 1331 1331 1336 1339 1369 1369 1401* tcbx 53 based fixed bin(17,0) level 2 dcl 3-92 ref 1273 temp_partx 000361 automatic fixed bin(17,0) dcl 1509 set ref 300* 300* 302 303* 323 1352* 1353* temp_pvtx 000242 automatic fixed bin(17,0) dcl 647 set ref 814* 819 850* 870 temp_pvx 000106 automatic fixed bin(17,0) dcl 282 set ref 295* 296 299 300* temp_tcbx 000542 automatic fixed bin(17,0) dcl 1271 set ref 1273* 1273* 1275 1276* 1276* 1278 1280 temp_volx 000274 automatic fixed bin(17,0) dcl 1187 set ref 1191* 1193* tfrec 16 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 921* 1075* 1118* time_map_updated 602 based fixed bin(71,0) level 2 dcl 4-68 set ref 393* 395 520 521 521 time_salvaged 606 based fixed bin(71,0) level 2 dcl 4-68 ref 521 time_unmounted 612 based fixed bin(71,0) level 2 dcl 4-68 ref 520 521 title 2 based char(32) level 2 dcl 4-12 set ref 45* tlrec 16(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 921* 1075* 1118* tnrec 17 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-46 set ref 921* 1075* 1118* type 0(22) based bit(2) level 2 packed packed unaligned dcl 14-7 set ref 110* 115* unspec builtin function dcl 1593 set ref 92* 136* 137 137 724* 783* 867* 950* 990 1066* 1107* usable_tape_devices 54 based fixed bin(17,0) level 2 dcl 3-92 set ref 348 717* 717 1156 1161* 1161 version based char(8) level 2 dcl 4-12 set ref 45* version_id based char(8) level 2 in structure "sri" dcl 3-169 in procedure "bce_save_util_" ref 1380 version_id based char(8) level 2 in structure "si" dcl 3-92 in procedure "bce_save_util_" ref 1389 vol_array 40 based structure array level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 53 54 243 246 296 461 470 1028 1033 1191 vol_array 40 based structure array level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save_util_" set ref 554 564 597 vol_array_size 26 based fixed bin(17,0) level 2 in structure "tape_label" dcl 4-32 in procedure "bce_save_util_" set ref 554 557 596* 596 597 vol_array_size 26 based fixed bin(17,0) level 2 in structure "info_tape_label" dcl 4-12 in procedure "bce_save_util_" set ref 48* 53 243 296 461 464 1028 1031 1191 vol_begin_tape 000363 automatic fixed bin(17,0) dcl 1511 set ref 57* 62* 65* vol_end_tape 000364 automatic fixed bin(17,0) dcl 1512 set ref 58* 63* 65* vol_info based structure level 1 dcl 4-49 vol_info_ptr 24 based pointer level 2 dcl 3-92 set ref 246* 470* 564* 597* 1033* 1403 vol_infop 000414 automatic pointer dcl 4-47 set ref 54* 55 56 57 58 58 61 62 63 65 65 65 65 68 69 69 69 246* 251 251 251 254 257 257 257 260 263 263 263 265 266 470* 477 477 477 480 491 492 499 500 506 507 564* 565 572 572 581 582 582 582 585 586 597* 598 598 599 600 601 602 603 604 605 607 607 608 608 609 609 610 610 614 614 615 615 616 616 617 617 620 1033* 1034 1036 1043 1043 1044 1045 1068 1403* 1432 1432 1434 vol_map_ptr 22 based pointer level 2 dcl 3-92 ref 209 211 vol_preamble based structure level 1 dcl 4-68 vol_preamble_ptr 20 based pointer level 2 dcl 3-92 ref 1402 vol_preamblep 000416 automatic pointer dcl 4-66 set ref 362* 378 393 395 395 397 399 423 423 423 426 430 431 431 432 441 520 520 521 521 521 521 565 599 600 1055 1059 1083 1083 1084 1084 1084 1086 1096 1100 1109 1115 1116 1116 1117 1402* 1460 1461 1461 1462 1462 1464 1468 1471 vol_size 547 based fixed bin(17,0) level 2 dcl 4-68 ref 1460 1468 volx 000362 automatic fixed bin(17,0) dcl 1510 set ref 53* 54* 243* 243* 246 461* 461* 464 470 554* 554* 557 564 1028* 1028* 1031 1033 vtoc_map based structure level 1 dcl 21-6 vtoc_mapp 000430 automatic pointer dcl 21-3 set ref 211* 212 214 214 217 220 220 221 233* vtoce_bit 000104 automatic fixed bin(17,0) dcl 201 set ref 215* 216 217 water_mark 000650 automatic fixed bin(17,0) dcl 1424 set ref 1458* 1462 1469* whoami 22 based char(8) level 2 packed packed unaligned dcl 3-169 ref 1386 wksp 6 based pointer level 2 dcl 3-215 set ref 89 91 117 138* 153* 989 989 990 990 996 1002 1011 1331 1336 1339 1369 1369 write_tape 20(04) based bit(1) level 3 packed packed unaligned dcl 3-215 set ref 1003 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CENTRAL_STAT internal static fixed bin(17,0) initial dcl 19-57 CHAN_STAT internal static fixed bin(17,0) initial dcl 19-56 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 IO_COMPLETE internal static fixed bin(17,0) initial dcl 1-30 IO_OUTSTANDING internal static fixed bin(17,0) initial dcl 1-29 JUST_LOG internal static fixed bin(17,0) initial dcl 18-7 LOG internal static fixed bin(17,0) initial dcl 18-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 POWER_OFF internal static fixed bin(17,0) initial dcl 19-55 PV_PART internal static fixed bin(17,0) initial dcl 4-88 PV_PREAMBLE internal static fixed bin(17,0) initial dcl 4-82 PV_RECORD internal static fixed bin(17,0) initial dcl 4-86 PV_VTOC internal static fixed bin(17,0) initial dcl 4-84 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 SPECIAL_ARRIVED internal static fixed bin(17,0) initial dcl 1-32 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 18-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 18-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 18-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 18-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 18-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 18-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 18-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 18-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 18-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 18-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 18-7 SYS_FAULT internal static fixed bin(17,0) initial dcl 19-58 TAPE_EOR internal static fixed bin(17,0) initial dcl 4-80 TAPE_LABEL internal static fixed bin(17,0) initial dcl 4-78 TAPE_LABEL_TITLE internal static char(32) initial packed unaligned dcl 4-72 TAPE_LABEL_VERSION_1 internal static char(8) initial packed unaligned dcl 4-73 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 18-7 VOLMAP_ADDR internal static fixed bin(17,0) initial dcl 9-54 VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 17-113 VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 17-113 VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 17-113 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 9-68 WAITING_SPECIAL internal static fixed bin(17,0) initial dcl 1-31 bce_ioi_post_seg$ external static fixed bin(17,0) dcl 1-11 bootload_disk_post_seg$ external static fixed bin(17,0) dcl 6-8 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_$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 disk_buffer_post_ptr automatic pointer dcl 6-15 disk_post_area based structure level 1 dcl 6-16 disk_post_area_ptr automatic pointer dcl 6-19 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 idcw based structure level 1 dcl 15-21 idcwp automatic pointer dcl 15-19 imess based structure level 1 dcl 13-21 imp automatic pointer dcl 13-19 io_post_buffer_ptr automatic pointer dcl 1-24 io_status_word based structure level 1 dcl 12-5 io_status_word_ptr automatic pointer dcl 12-4 ioi_post_area based structure level 1 dcl 1-13 ioi_post_area_ptr automatic pointer dcl 1-25 isp automatic pointer dcl 13-5 labelp automatic pointer dcl 5-16 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 15-6 pcwp automatic pointer dcl 15-4 prph_tap_card_array based structure level 1 dcl 8-21 pvt based structure level 1 dcl 16-13 pvt$ external static fixed bin(17,0) dcl 16-9 pvt$array external static fixed bin(17,0) dcl 17-18 pvt$max_n_entries external static fixed bin(17,0) dcl 17-19 pvtep automatic pointer dcl 17-22 pvtp automatic pointer dcl 16-9 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 ss_info based structure level 1 dcl 2-15 ss_info_ptr automatic pointer dcl 2-14 stat_ws based structure level 1 dcl 3-187 tape_error_data based structure array level 1 dcl 19-17 tape_error_data$ external static fixed bin(17,0) dcl 19-13 tape_status_descrip based structure level 1 dcl 19-49 tape_status_interp_array based structure array level 1 dcl 19-24 taperap automatic pointer dcl 19-22 taperp automatic pointer dcl 19-28 tdcw based structure level 1 dcl 14-14 tdcwp automatic pointer dcl 14-4 tedp automatic pointer dcl 19-15 tracks_per_cyl internal static fixed bin(17,0) initial array dcl 10-111 tsdp automatic pointer dcl 19-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 vol_map based structure level 1 dcl 20-5 vol_mapp automatic pointer dcl 20-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 016572 constant entry internal dcl 1238 ref 125 143 151 175 655 666 682 691 698 706 721 731 740 780 790 804 842 864 900 909 916 936 942 948 959 970 1259 1382 1391 DISK_DATA_READY 016577 constant entry internal dcl 1251 ref 207 FIND_NEXT_TAPE_DEVICE 016706 constant entry internal dcl 1269 ref 348 348 FREE_BUFFER 016774 constant entry internal dcl 1288 ref 95 210 GET_CF_ARG 017004 constant entry internal dcl 1301 ref 677 693 726 746 755 785 810 821 837 846 856 923 931 GET_DISK_BUFFER 017055 constant entry internal dcl 1328 ref 204 PARTITION_COUNT 017145 constant entry internal dcl 1346 ref 913 1059 1100 READ_DISK 017202 constant entry internal dcl 1364 ref 206 SETUP 017251 constant entry internal dcl 1376 ref 44 88 135 170 203 242 284 361 649 988 1026 1150 1189 1217 SORT_PARTITION_LIST 017442 constant entry internal dcl 1415 ref 418 472 1139 bad_part_arg 012604 constant label dcl 839 ref 847 848 853 857 874 879 bad_pv_arg 012217 constant label dcl 787 ref 811 812 817 823 bad_td_arg 011534 constant label dcl 728 ref 733 756 760 767 bad_ts_arg 011271 constant label dcl 695 ref 700 bce_save_util_ 002655 constant entry external dcl 11 bce_save_util_$display_info_tape 002701 constant entry external dcl 41 bce_save_util_$init_buffers 003303 constant entry external dcl 85 bce_save_util_$ioi_attach 003533 constant entry external dcl 132 bce_save_util_$is_fips_device 004067 constant entry external dcl 166 bce_save_util_$last_vtoc_used 004315 constant entry external dcl 194 bce_save_util_$locate_tape_number 004600 constant entry external dcl 239 bce_save_util_$premount_check 005061 constant entry external dcl 278 bce_save_util_$read_pv_label 005540 constant entry external dcl 358 bce_save_util_$scan_control_file 010610 constant entry external dcl 627 bce_save_util_$scan_survey_data 014225 constant entry external dcl 984 bce_save_util_$setup_all_parts 014612 constant entry external dcl 1023 ref 413 bce_save_util_$skip_tape_device 015761 constant entry external dcl 1147 bce_save_util_$sort_pv_list 016325 constant entry external dcl 1182 bce_save_util_$thread_partition_list 016442 constant entry external dcl 1212 disk_error_query 005637 constant label dcl 367 ref 373 display_premount 005456 constant label dcl 348 ref 292 320 340 end_cf_arg_scan 014203 constant label dcl 972 ref 678 752 fill_in_part_entry_for_restore 015211 constant label dcl 1066 ref 1050 fill_in_part_entry_for_save 015531 constant label dcl 1107 ref 1091 found_device 014336 constant label dcl 996 ref 990 found_last 004500 constant label dcl 225 ref 222 label_ok 007561 constant label dcl 529 ref 520 521 next_cf_line 014204 constant label dcl 974 next_low_part 017765 constant label dcl 1488 ref 1483 next_rx 017576 constant label dcl 1449 ref 1446 next_tape_vol 016424 constant label dcl 1204 ref 1201 read_pv_label 005551 constant label dcl 362 ref 369 set_vtoc_record 004530 constant label dcl 227 ref 218 skip_query 015772 constant label dcl 1151 set ref 1158 1169 1173 unassign_device 003723 constant label dcl 148 set ref 156 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 21360 21464 20427 21370 Length 22466 20427 104 765 730 10 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME bce_save_util_ 806 external procedure is an external procedure. ABORT internal procedure shares stack frame of external procedure bce_save_util_. DISK_DATA_READY internal procedure shares stack frame of external procedure bce_save_util_. FIND_NEXT_TAPE_DEVICE internal procedure shares stack frame of external procedure bce_save_util_. FREE_BUFFER internal procedure shares stack frame of external procedure bce_save_util_. GET_CF_ARG internal procedure shares stack frame of external procedure bce_save_util_. GET_DISK_BUFFER internal procedure shares stack frame of external procedure bce_save_util_. PARTITION_COUNT internal procedure shares stack frame of external procedure bce_save_util_. READ_DISK internal procedure shares stack frame of external procedure bce_save_util_. SETUP internal procedure shares stack frame of external procedure bce_save_util_. SORT_PARTITION_LIST internal procedure shares stack frame of external procedure bce_save_util_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 Multics_ID_String bce_save_util_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME bce_save_util_ 000100 tap_groupx bce_save_util_ 000101 bit_idx bce_save_util_ 000102 last_vtoc_record_used bce_save_util_ 000103 last_vtoce_used bce_save_util_ 000104 vtoce_bit bce_save_util_ 000105 info_volx bce_save_util_ 000106 temp_pvx bce_save_util_ 000107 cf_arg_lth bce_save_util_ 000110 cf_arg_ptr bce_save_util_ 000112 cf_array_ptr bce_save_util_ 000114 cf_idx bce_save_util_ 000115 cf_len bce_save_util_ 000116 cf_line bce_save_util_ 000217 cf_line_start bce_save_util_ 000220 cf_ptr bce_save_util_ 000222 chk_start bce_save_util_ 000223 expect_cf_arg bce_save_util_ 000224 have_cf_arg bce_save_util_ 000225 line_count bce_save_util_ 000226 nl_idx bce_save_util_ 000230 part_device bce_save_util_ 000232 part_pv_name bce_save_util_ 000242 temp_pvtx bce_save_util_ 000243 pv_from_idx bce_save_util_ 000244 pv_hold_area bce_save_util_ 000273 pv_to_idx bce_save_util_ 000274 temp_volx bce_save_util_ 000275 first_part_idx bce_save_util_ 000276 prev_part_idx bce_save_util_ 000277 code bce_save_util_ 000300 date_time_string bce_save_util_ 000306 density_idx bce_save_util_ 000307 doing_all_parts bce_save_util_ 000310 i bce_save_util_ 000311 j bce_save_util_ 000312 my_name bce_save_util_ 000314 opr_input bce_save_util_ 000354 partx bce_save_util_ 000355 part_entries bce_save_util_ 000356 restoring bce_save_util_ 000357 rx bce_save_util_ 000360 setx bce_save_util_ 000361 temp_partx bce_save_util_ 000362 volx bce_save_util_ 000363 vol_begin_tape bce_save_util_ 000364 vol_end_tape bce_save_util_ 000366 iobp bce_save_util_ 000370 part_arrayp bce_save_util_ 000372 partp bce_save_util_ 000374 pv_arrayp bce_save_util_ 000376 pvp bce_save_util_ 000400 si_ptr bce_save_util_ 000402 srip bce_save_util_ 000404 tcb_arrayp bce_save_util_ 000406 tcbp bce_save_util_ 000410 info_tape_labelp bce_save_util_ 000412 tape_labelp bce_save_util_ 000414 vol_infop bce_save_util_ 000416 vol_preamblep bce_save_util_ 000420 prph_tap_cardp bce_save_util_ 000422 seek_command bce_save_util_ 000424 dcwp bce_save_util_ 000426 pvt_arrayp bce_save_util_ 000430 vtoc_mapp bce_save_util_ 000432 bit_map_wordp bce_save_util_ 000542 temp_tcbx FIND_NEXT_TAPE_DEVICE 000576 part_count_for_vol PARTITION_COUNT 000622 low_part_frec SORT_PARTITION_LIST 000623 low_px SORT_PARTITION_LIST 000624 part_from_idx SORT_PARTITION_LIST 000625 part_hold_area SORT_PARTITION_LIST 000645 part_to_idx SORT_PARTITION_LIST 000646 px SORT_PARTITION_LIST 000647 sort_done SORT_PARTITION_LIST 000650 water_mark SORT_PARTITION_LIST THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as alloc_bit_temp call_ext_in call_ext_out_desc call_ext_out return_mac mdfx1 signal_op shorten_stack ext_entry index_bs_1_eis any_to_any_truncate_clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. bce_query bootload_disk_io$queue_read bootload_disk_io$test_done bootload_fs_$get_ptr com_err_ config_$find_periph date_time_ date_time_$format disk_name_pvtx find_bit_$last_off ioa_ ioi_assignment$assign ioi_assignment$unassign ioi_set$max_workspace ioi_set$status ioi_set$workspace read_disk syserr syserr$error_code THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. config_data_$tape_drive_model_names error_table_$bad_density error_table_$device_not_usable error_table_$incorrect_device_type error_table_$no_device error_table_$not_done error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 10 84 002561 11 002652 37 002665 41 002677 44 002711 45 002712 46 002742 48 003031 50 003061 53 003075 54 003105 55 003110 56 003113 57 003115 58 003120 59 003125 61 003126 62 003130 63 003133 65 003136 68 003205 69 003215 71 003250 72 003252 73 003254 74 003267 85 003301 88 003313 89 003314 90 003321 91 003322 92 003332 93 003336 95 003343 96 003344 98 003352 99 003353 100 003356 101 003360 105 003364 108 003374 109 003376 110 003401 111 003405 113 003412 114 003414 115 003416 116 003420 117 003425 119 003434 120 003435 121 003436 122 003441 123 003460 124 003462 125 003516 128 003517 132 003531 135 003543 136 003544 137 003550 138 003554 139 003556 140 003561 141 003612 142 003614 143 003650 145 003651 146 003665 147 003667 148 003723 150 003735 151 003773 153 003774 154 004012 155 004014 156 004050 158 004051 166 004063 170 004077 171 004100 172 004113 173 004117 175 004156 177 004157 178 004165 179 004172 181 004203 183 004243 184 004245 186 004266 187 004270 194 004311 203 004324 204 004325 205 004326 206 004331 207 004332 208 004337 209 004340 210 004347 211 004350 212 004353 213 004357 214 004362 215 004365 216 004412 217 004415 218 004426 220 004427 221 004436 222 004441 223 004446 224 004451 225 004500 227 004530 233 004545 234 004547 239 004576 242 004610 243 004611 245 004630 246 004632 248 004641 249 004645 250 004657 251 004664 253 004706 254 004710 255 004717 256 004724 257 004733 259 004754 260 004756 261 004765 263 004766 264 005005 265 005007 266 005017 268 005022 269 005027 272 005045 278 005057 284 005071 285 005072 286 005076 287 005116 289 005131 291 005135 292 005137 294 005140 295 005142 296 005151 298 005174 299 005176 300 005205 302 005212 303 005217 307 005247 308 005251 313 005272 314 005273 320 005314 323 005320 324 005330 326 005331 329 005360 330 005362 333 005403 334 005404 340 005425 343 005431 344 005433 345 005441 346 005444 348 005456 352 005524 358 005536 361 005550 362 005551 364 005574 365 005576 367 005637 369 005670 370 005674 371 005700 373 005731 375 005732 376 005735 378 005747 379 005755 381 006021 382 006024 383 006030 386 006061 388 006064 389 006065 390 006070 391 006073 393 006105 394 006121 395 006132 397 006213 398 006220 399 006224 403 006272 405 006273 407 006330 408 006333 412 006345 413 006356 414 006364 416 006402 418 006413 419 006414 421 006425 422 006434 423 006444 425 006462 426 006464 430 006504 431 006511 432 006515 433 006517 434 006526 438 006570 439 006572 441 006603 445 006662 446 006664 447 006670 449 006716 450 006720 451 006724 454 006760 455 006763 460 006775 461 007000 463 007020 464 007022 465 007026 467 007063 468 007066 470 007100 471 007106 472 007112 473 007113 475 007123 476 007137 477 007144 479 007162 480 007164 482 007170 485 007231 488 007244 490 007246 491 007254 492 007257 495 007314 497 007317 499 007331 500 007335 503 007372 504 007375 506 007407 507 007422 511 007470 513 007473 519 007505 520 007511 521 007515 524 007521 527 007556 529 007561 531 007565 533 007612 534 007614 537 007650 539 007676 540 007700 543 007734 545 007765 546 007767 553 010023 554 010026 556 010046 557 010050 558 010054 561 010111 562 010114 564 010126 565 010134 566 010140 569 010174 570 010177 572 010211 574 010226 577 010262 578 010265 580 010277 581 010307 582 010317 584 010340 585 010342 586 010346 589 010412 590 010415 593 010427 594 010431 596 010432 597 010434 598 010442 599 010450 600 010454 601 010456 602 010467 603 010475 604 010477 605 010506 606 010507 607 010511 608 010512 609 010516 610 010521 612 010524 613 010535 614 010552 615 010554 616 010561 617 010564 619 010567 620 010571 622 010574 627 010606 649 010620 650 010621 651 010624 652 010660 653 010662 655 010725 657 010726 658 010734 659 010737 660 010741 661 010742 662 010745 663 010764 664 010765 666 011024 668 011025 669 011026 670 011071 671 011073 672 011075 673 011077 675 011111 676 011112 677 011114 678 011115 679 011117 680 011121 682 011205 687 011206 688 011220 689 011225 691 011265 693 011266 694 011267 695 011271 698 011325 700 011326 701 011331 703 011341 704 011353 706 011416 708 011417 709 011421 710 011427 711 011430 715 011431 716 011441 717 011443 718 011444 719 011447 721 011516 723 011517 724 011526 726 011531 727 011532 728 011534 731 011611 733 011612 734 011617 736 011627 737 011641 738 011647 739 011660 740 011707 742 011710 743 011712 744 011714 746 011722 747 011723 748 011725 751 011734 752 011741 754 011742 755 011747 756 011750 757 011752 758 011766 759 012000 760 012012 762 012023 764 012024 765 012053 766 012065 767 012077 770 012110 771 012111 775 012112 776 012122 777 012124 778 012127 780 012200 782 012201 783 012211 785 012214 786 012215 787 012217 790 012274 792 012275 794 012303 795 012305 796 012315 797 012322 799 012333 800 012344 804 012430 806 012431 807 012433 808 012435 810 012443 811 012444 812 012446 813 012451 814 012456 815 012474 816 012476 817 012520 819 012521 820 012525 821 012530 822 012531 823 012537 826 012554 827 012557 828 012561 829 012563 830 012565 831 012567 832 012570 836 012571 837 012601 838 012602 839 012604 842 012661 844 012662 846 012667 847 012670 848 012672 849 012675 850 012701 851 012714 852 012716 853 012736 856 012737 857 012740 859 012742 860 012744 861 012746 862 012751 864 013022 866 013023 867 013033 868 013036 869 013041 870 013044 872 013047 873 013061 874 013112 876 013113 877 013123 879 013145 881 013146 883 013154 884 013156 886 013165 887 013166 888 013175 889 013202 890 013203 891 013213 892 013223 893 013224 895 013233 896 013242 900 013332 903 013333 904 013335 905 013342 909 013417 911 013420 912 013422 913 013430 914 013443 916 013476 918 013477 919 013502 920 013504 921 013512 923 013520 924 013521 925 013522 926 013523 930 013524 931 013534 932 013535 933 013537 936 013614 938 013615 939 013617 940 013622 942 013650 944 013651 945 013654 948 013737 950 013740 951 013750 953 014002 954 014004 955 014010 959 014073 961 014074 962 014105 963 014111 964 014112 965 014114 966 014115 968 014116 970 014202 972 014203 974 014204 976 014206 977 014207 984 014221 988 014235 989 014236 990 014243 992 014265 993 014267 994 014324 996 014336 998 014343 999 014376 1002 014410 1003 014421 1005 014435 1006 014470 1008 014502 1009 014507 1011 014513 1012 014524 1013 014527 1014 014562 1016 014574 1017 014576 1023 014610 1026 014622 1027 014623 1028 014626 1030 014646 1031 014650 1033 014666 1034 014674 1035 014676 1036 014702 1039 014736 1041 014741 1043 014753 1044 014763 1045 014773 1048 015024 1049 015035 1050 015042 1053 015043 1054 015045 1055 015051 1059 015116 1064 015200 1065 015203 1066 015211 1068 015215 1069 015222 1070 015226 1071 015232 1072 015234 1073 015236 1074 015240 1075 015246 1079 015254 1080 015256 1082 015257 1083 015260 1084 015271 1086 015313 1089 015344 1090 015355 1091 015362 1094 015363 1095 015365 1096 015371 1100 015436 1105 015520 1106 015523 1107 015531 1109 015535 1110 015542 1111 015546 1112 015553 1113 015555 1114 015557 1115 015561 1116 015563 1117 015567 1118 015571 1121 015577 1123 015600 1124 015602 1125 015604 1126 015610 1129 015645 1130 015650 1132 015662 1135 015717 1136 015732 1139 015744 1140 015745 1147 015757 1150 015771 1151 015772 1153 016023 1154 016056 1155 016107 1156 016113 1157 016117 1158 016147 1160 016150 1161 016153 1162 016155 1164 016200 1165 016210 1166 016224 1167 016240 1168 016254 1169 016270 1172 016271 1173 016311 1175 016312 1182 016323 1189 016335 1190 016336 1191 016340 1192 016351 1193 016361 1194 016376 1196 016405 1198 016414 1200 016420 1201 016421 1203 016422 1204 016424 1206 016426 1212 016440 1217 016452 1218 016453 1219 016466 1220 016476 1221 016501 1222 016503 1223 016513 1224 016530 1226 016540 1227 016542 1228 016546 1230 016547 1231 016551 1233 016555 1234 016560 1238 016572 1241 016573 1242 016576 1251 016577 1254 016601 1255 016612 1256 016623 1257 016635 1258 016637 1259 016671 1261 016672 1262 016675 1263 016700 1269 016706 1273 016710 1274 016726 1275 016730 1276 016734 1277 016750 1278 016752 1280 016764 1288 016774 1291 016775 1292 017000 1293 017003 1301 017004 1304 017005 1305 017010 1306 017011 1308 017012 1309 017031 1311 017037 1312 017041 1313 017042 1315 017043 1316 017047 1317 017052 1318 017054 1328 017055 1331 017056 1332 017066 1333 017071 1334 017073 1335 017076 1336 017100 1337 017107 1339 017110 1340 017117 1341 017144 1346 017145 1351 017147 1352 017150 1353 017161 1354 017174 1355 017176 1364 017202 1367 017203 1368 017206 1369 017211 1371 017250 1376 017251 1379 017252 1380 017256 1381 017262 1382 017311 1384 017312 1385 017316 1386 017322 1387 017325 1388 017327 1389 017334 1390 017340 1391 017367 1393 017370 1394 017372 1395 017375 1396 017403 1397 017406 1398 017414 1399 017417 1400 017422 1401 017430 1402 017433 1403 017436 1404 017441 1415 017442 1427 017443 1428 017446 1431 017467 1432 017471 1433 017501 1434 017511 1436 017533 1438 017541 1440 017546 1442 017552 1445 017571 1446 017573 1448 017574 1449 017576 1451 017600 1453 017601 1454 017602 1457 017623 1458 017625 1459 017626 1460 017630 1461 017633 1462 017643 1464 017653 1465 017654 1467 017656 1468 017660 1469 017664 1470 017665 1471 017675 1473 017717 1475 017725 1477 017732 1479 017736 1482 017755 1483 017757 1485 017760 1486 017762 1487 017763 1488 017765 1491 017766 ----------------------------------------------------------- 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