COMPILATION LISTING OF SEGMENT mtape_iox_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 11/30/87 1325.7 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(87-08-17,GWMay), approve(87-09-09,MECR0006), 12* audit(87-09-04,Farley), install(87-09-09,MR12.1-1101): 13* Added more complete setting of the iocb. Return on tape errors. 14* 2) change(87-10-19,GWMay), approve(87-10-19,MCR7779), audit(87-11-02,Farley), 15* install(87-11-30,MR12.2-1006): 16* Formally install MECR0006. 17* END HISTORY COMMENTS */ 18 19 20 mtape_iox_: procedure; 21 22 /* format: style4 */ 23 24 /* * This program is part of the mtape_ I/O module and as such is not 25* * called directly by users, but through the iox_ I/O system. This 26* * program implements most of the entries called through iox_ for 27* * mtape_. 28* * 29* * Modification History: 30* * 31* * Created by J. A. Bush 10/05/82 32* * Modified by J. A. Bush 12/01/83 for performance improvements 33**/ 34 35 /* ARGUMENT DATA */ 36 37 dcl arg_iocbp ptr; /* (Input) Pointer to the I/O control block */ 38 dcl arg_options (*) char (*) varying; /* (Input) Attach options from attach description. */ 39 dcl arg_com_err_flag bit (1) aligned; /* (Input) "1"b => call com_err_ on attach errors */ 40 dcl arg_extend_flag bit (1); 41 dcl arg_open_mode fixed bin; /* Opening mode */ 42 dcl arg_buf_ptr ptr; /* Pointer to users buffer to read into/write from */ 43 dcl arg_buf_len fixed bin (21); /* Length of users buffer/bytes to be read */ 44 dcl arg_rec_len fixed bin (21); /* Length of record/number of bytes read */ 45 dcl arg_code fixed bin (35); /* (Output) Standard system error code */ 46 47 /* AUTOMATIC DATA */ 48 49 dcl iocbp ptr; /* pointer to our IOCB */ 50 dcl com_err_flag bit (1) aligned; /* "1"b => call com_err_ on attach errors */ 51 dcl (output, com_sent) bit (1) aligned; 52 dcl (i, nsusp_bufs) fixed bin; 53 dcl ips_mask bit (36) aligned; 54 dcl desc_len fixed bin (21); 55 dcl (code, iox_code) fixed bin (35); /* error code value */ 56 dcl 1 auto_mtd like mtape_data aligned; /* temporary auto copy of mtape_ data base */ 57 dcl 1 ai like area_info aligned; 58 59 /* CONSTANT DATA */ 60 61 dcl myname char (6) int static options (constant) init ("mtape_"); 62 dcl null_options (1) char (1) varying int static options (constant) init (""); 63 dcl READ_IO fixed bin int static options (constant) init (1); 64 dcl WRITE_IO fixed bin int static options (constant) init (2); 65 66 /* EXTERNAL STATIC DATA */ 67 68 dcl error_table_$no_operation fixed bin (35) ext static; 69 dcl error_table_$not_detached fixed bin (35) ext static; 70 dcl error_table_$bad_mode fixed bin (35) ext static; 71 dcl error_table_$bad_label fixed bin (35) ext static; 72 dcl error_table_$inconsistent fixed bin (35) ext static; 73 dcl error_table_$long_record fixed bin (35) ext static; 74 dcl sys_info$max_seg_size fixed bin (35) ext static; 75 76 /* BUILTIN FUNCTIONS */ 77 78 dcl (addr, hbound, lbound, length, null, unspec) builtin; 79 80 /* EXTERNAL ENTRIES */ 81 82 dcl (ioa_, com_err_) entry options (variable); 83 dcl hcs_$set_ips_mask entry (bit (36) aligned, bit (36) aligned); 84 dcl hcs_$reset_ips_mask entry (bit (36) aligned, bit (36) aligned); 85 dcl user_info_$process_type entry (fixed bin); 86 dcl mtape_util_$error entry options (variable); 87 dcl mtape_util_$get_statistics entry (ptr, fixed bin (35)); 88 dcl mtape_util_$init_pfm entry (ptr, fixed bin (35)); 89 dcl mtape_util_$user_query entry (ptr, fixed bin, fixed bin (35)); 90 dcl mtape_parse_$attach entry (ptr, (*) char (*) varying, fixed bin (35)); 91 dcl mtape_parse_$open entry (ptr, (*) char (*) varying, fixed bin, fixed bin (35)); 92 dcl mtape_parse_$close entry (ptr, (*) char (*) varying, fixed bin (35)); 93 dcl mtape_parse_$detach entry (ptr, (*) char (*) varying, fixed bin (35)); 94 dcl mtape_mount_cntl_$mount entry (ptr, fixed bin (35)); 95 dcl mtape_mount_cntl_$demount entry (ptr, fixed bin (35)); 96 dcl mtape_iox_$open entry options (variable); 97 dcl mtape_iox_$open_file entry options (variable); 98 dcl mtape_iox_$close entry options (variable); 99 dcl mtape_iox_$close_file entry options (variable); 100 dcl mtape_iox_$detach entry options (variable); 101 dcl mtape_iox_$detach_iocb entry options (variable); 102 dcl mtape_control_$control entry options (variable); 103 dcl mtape_position_ entry options (variable); 104 dcl mtape_position_$read_length entry options (variable); 105 dcl mtape_io_$allocate_buffers entry (ptr, fixed bin (21), fixed bin (35)); 106 dcl mtape_io_$set_mode entry (ptr, char (*), fixed bin, ptr, fixed bin (35)); 107 dcl mtape_io_$order entry (ptr, char (*), fixed bin, ptr, fixed bin (35)); 108 dcl mtape_io_$stop_tape entry (ptr, fixed bin (35)); 109 dcl mtape_iox_$write entry options (variable); 110 dcl mtape_iox_$read entry options (variable); 111 dcl iox_$propagate entry (ptr); 112 dcl iox_$err_not_open entry () options (variable); 113 dcl iox_$err_not_closed entry () options (variable); 114 dcl iox_$err_not_attached entry () options (variable); 115 dcl define_area_ entry (ptr, fixed bin (35)); 116 dcl release_area_ entry (ptr); 117 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 118 119 /* BASED STORAGE */ 120 121 dcl desc_string char (desc_len) varying based; 122 dcl based_area area based (mtape_data.areap); 123 124 /* CONDITIONS */ 125 126 dcl (any_other, cleanup) condition; 127 128 mtape_attach: entry (arg_iocbp, arg_options, arg_com_err_flag, arg_code); 129 130 /* * This entry is called to attach a tape volume or volume set to the 131* * users process through the specified I/O switch. The major tasks 132* * performed by this entry are as follows: 133* * 134* * 1. Parsing and validation of the options array, which iox_ generated 135* * from the users attach description. 136* * 2. Initialization of the mtape_ environment, including allocation of 137* * 1 volume set structure for each volume set member specified in 138* * the options array and initialization of the global default values 139* * from the users default value_seg (this includes creation of the 140* * global default values on first reference). 141* * 3. Requesting the mount of the first volume in the volume set via 142* * RCP. 143* * 4. Establishing the tape_ioi_ activation. 144* * 5. Selection of the appropriate "Per-Format" module, based on 145* * information returned from RCP in conjuction with any "-label" and 146* * "-no_labels" information specified by the user in the attach 147* * description and/or the current value of the "mtape_.global.label" 148* * default value. 149* * 6. Perform a search for the selected per-format module via the 150* * search path mechanism to verify its existence. 151* * 7. Fill in the standard fields of the I/O control block to indicate 152* * I/O switch attachment complete, ready for opening. 153**/ 154 155 iocbp = arg_iocbp; /* copy arguments */ 156 com_err_flag = arg_com_err_flag; 157 mtdp = null; /* make this ptr consistent for first possible error msg */ 158 if iocbp -> iocb.attach_data_ptr ^= null then do; /* If aready attached.. */ 159 call ATTACH_ERROR (error_table_$not_detached, (iocbp -> iocb.name)); /* complain and let user call */ 160 return; /* again until he gets it right */ 161 end; 162 163 on cleanup call CLEANUP; 164 165 call INIT_ENVIRONMENT; /* Initialize working environment */ 166 if arg_code ^= 0 then /* quit if some problem */ 167 return; 168 call mtape_parse_$attach (mtdp, arg_options, code); /* parse the attach options */ 169 if code ^= 0 then do; /* return to user if unrecoverable error */ 170 arg_code = code; 171 call CLEANUP; /* undo everything we have done so far */ 172 return; 173 end; 174 com_err_flag = com_err_flag | mtape_data.display_errors; /* error messages if either one */ 175 if mtape_attach_info.display then do; /* user wants to see attach description */ 176 desc_len = length (mtape_data.atdp -> desc_string); /* set the length */ 177 call ioa_ ("^/ATTACH DESCRIPTION:^/^a^/", mtape_data.atdp -> desc_string); /* display it */ 178 end; 179 180 call mtape_mount_cntl_$mount (mtdp, code); /* get the first volume mounted */ 181 if code ^= 0 then do; /* return to user if unrecoverable error */ 182 arg_code = code; 183 call CLEANUP; /* undo everything we have done so far */ 184 return; 185 end; 186 187 call mtape_util_$init_pfm (mtdp, code); /* perform the Per-Format module selection */ 188 if code ^= 0 then do; /* if we can't find it, bail out */ 189 call CLEANUP; 190 arg_code = code; 191 return; 192 end; 193 call mtape_data.pfm_init (mtdp, code); /* Let PFM initialize and check volume label */ 194 if code ^= 0 then do; 195 arg_code = code; 196 call CLEANUP; 197 return; 198 end; 199 if (^mtape_attach_info.labeled & ^mtape_pfm_info.no_labels_ok) then do; /* illegal combo */ 200 arg_code = error_table_$inconsistent; 201 call mtape_util_$error (mtdp, arg_code, 202 "^/The ^a Per-Format module does not support unlabeled volumes", mtape_pfm_info.module_id); 203 return; 204 end; 205 206 /* The attachment is now complete. We must now fill in the IOCB with 207* appropriate information and propagate it. */ 208 209 ips_mask = ""b; 210 on any_other call hcs_$reset_ips_mask (ips_mask, ips_mask); 211 call hcs_$set_ips_mask ("0"b, ips_mask); 212 213 iocbp -> iocb.attach_descrip_ptr = mtape_data.atdp; 214 iocbp -> iocb.attach_data_ptr = mtdp; 215 iocbp -> iocb.detach_iocb = mtape_iox_$detach_iocb; 216 iocbp -> iocb.detach = mtape_iox_$detach; 217 iocbp -> iocb.open = mtape_iox_$open; 218 iocbp -> iocb.open_file = mtape_iox_$open_file; 219 iocbp -> iocb.close = iox_$err_not_open; 220 iocbp -> iocb.close_file = iox_$err_not_open; 221 iocbp -> iocb.control = mtape_control_$control; 222 223 call iox_$propagate (iocbp); /* propagate this IOCB */ 224 call hcs_$reset_ips_mask (ips_mask, ips_mask); 225 226 return; /* thats all folks */ 227 228 /* open - entry to open the I/O switch */ 229 230 open: entry (arg_iocbp, arg_open_mode, arg_extend_flag, arg_code); 231 232 /* this entry merely passes control to the open_file entry with a null option array */ 233 234 call open_file_int (arg_iocbp, arg_open_mode, null_options, arg_extend_flag, arg_code); 235 236 return; 237 238 /* open_file - entry to open an I/O switch with open arguments passed in the open argument array */ 239 240 open_file: open_file_int: entry (arg_iocbp, arg_open_mode, arg_options, arg_extend_flag, arg_code); 241 242 iocbp = arg_iocbp -> iocb.actual_iocb_ptr; /* copy argument */ 243 code, arg_code = 0; /* reset return code */ 244 mtdp = iocbp -> iocb.attach_data_ptr; /* get our working storage pointer */ 245 mtape_data.iocb_ptr = iocbp; /* save our IOCB ptr */ 246 maip = mtape_data.attach_info_ptr; 247 moip = mtape_data.open_info_ptr; 248 mpfmip = mtape_data.pfm_info_ptr; 249 mspfmip = mtape_data.saved_pfm_info_ptr; 250 vs_ptr = mtape_data.vs_current; /* get vol set structure ptr */ 251 do i = 1 to hbound (mtape_pfm_info.open_modes_allowed, 1) /* check open mode legality */ 252 while (arg_open_mode ^= mtape_pfm_info.open_modes_allowed (i)); 253 end; 254 if i > hbound (mtape_pfm_info.open_modes_allowed, 1) then do; /* can't open for this mode */ 255 code = error_table_$bad_mode; /* set appropriate error code */ 256 call mtape_util_$error (mtdp, code, 257 "Open mode of ^d is invalid for the selected Per-Format module", arg_open_mode); 258 go to OPEN_EXIT; 259 end; 260 if arg_open_mode = Stream_input | arg_open_mode = Sequential_input then /* input mode? */ 261 output = "0"b; 262 else output = "1"b; /* no output type mode */ 263 if output & ^mtape_attach_info.ring then do; /* if output mode and no write ring */ 264 code = error_table_$bad_mode; 265 call mtape_util_$error (mtdp, code, 266 "Opening for ""^a"" requires the presence of a write ring.^/^a^/^a", iox_modes (arg_open_mode), 267 "Either detach and reattach with a ""-ring"" attach description argument,", 268 "or use the ""ring_in"" control order."); 269 go to OPEN_EXIT; 270 end; 271 if ^mtape_data.first_file then /* if the first opening */ 272 if output then do; /* opening for output */ 273 mtape_vol_set.volume_density = mtape_attach_info.density; 274 275 if mtape_vol_set.volume_check = RECOG_FORMAT_VOLUME | /* query user before destroying */ 276 (mtape_vol_set.volume_check < BLANK_VOLUME & ^mtape_attach_info.labeled) then do; 277 call mtape_util_$user_query (mtdp, Q_LABELED_VOLUME, code); 278 if code ^= 0 then go to OPEN_EXIT; 279 end; 280 end; 281 else do; /* opening for input */ 282 if mtape_vol_set.volume_check > NON_MULT_VOLUME & /* trying to read is clearly wrong */ 283 ^(mtape_pfm_info.no_labels_ok & mtape_vol_set.volume_check = UNLABELED_VOLUME) then do; 284 code = error_table_$bad_label; /* set appropriate error code */ 285 call mtape_util_$error (mtdp, code,/* and report error */ 286 "^/Attempting to open a file for ^a on a volume ^[(^a) ^;^1s^]which has an ^a label", 287 iox_modes (arg_open_mode), (mtape_vol_set.volume_check = RECOG_FORMAT_VOLUME), 288 mtape_vol_set.volume_id, Tape_volume_types (mtape_vol_set.volume_type)); 289 end; 290 else if (mtape_vol_set.volume_check < BLANK_VOLUME & ^mtape_attach_info.labeled) then do; 291 call mtape_util_$error (mtdp, 0, 292 "Volume ^a will be processed as a standard ^a labeled tape. ^a.", 293 mtape_vol_set.volume_id, mtape_pfm_info.module_id, 294 "The ""-no_labels"" attach description argument will be ignored"); 295 mtape_attach_info.labeled = "1"b; /* make it a labeled tape */ 296 end; 297 else if (mtape_vol_set.volume_check = UNLABELED_VOLUME & mtape_pfm_info.no_labels_ok) then 298 if mtape_attach_info.labeled then do; /* go ahead and process as unlabeled */ 299 call mtape_util_$error (mtdp, 0, "Volume ^a will be processed as an ^a unlabeled volume", 300 mtape_vol_set.volume_name, mtape_pfm_info.module_id); 301 mtape_attach_info.labeled = "0"b; /* force the unlabeled attribute */ 302 end; 303 end; 304 if code ^= 0 then /* if some problem up above */ 305 go to OPEN_EXIT; /* bail out now */ 306 call mtape_parse_$open (mtdp, arg_options, arg_open_mode, code); /* go parse the open options */ 307 if code ^= 0 then go to OPEN_EXIT; 308 if mtape_open_info.display then do; /* user wants to see open description */ 309 desc_len = length (mtape_data.opdp -> desc_string); /* set the length */ 310 call ioa_ ("^/OPEN DESCRIPTION:^/^a^/", mtape_data.opdp -> desc_string); /* display it */ 311 end; 312 call mtape_data.file_open (mtdp, code); /* let the PFM do his thing */ 313 if code ^= 0 then go to OPEN_EXIT; 314 mtape_data.error_lock = 0; /* reset data error lock */ 315 if mspfmip ^= null then /* if we have done a change_module control OP */ 316 if output then /* and this is an output type opening */ 317 if mtape_saved_pfm_info.open_mode = 0 then /* and first output */ 318 mtape_saved_pfm_info.open_mode = arg_open_mode; /* save this one */ 319 fi_ptr = mtape_data.fi_current; 320 mtape_data.char_size = mtape_file_info.char_size; /* copy required info into mtape_data */ 321 mtape_data.length_mode = mtape_file_info.length_mode; 322 mtape_data.hdw_mode = mtape_file_info.hdw_mode; 323 mtape_data.conversion = mtape_file_info.conversion; 324 mtape_data.buffer_offset = mtape_file_info.buffer_offset; 325 mtape_data.block_size, mtape_data.length = mtape_file_info.block_size; 326 mtape_data.record_size = mtape_file_info.record_size; 327 mtape_data.native_file = mtape_file_info.native_file; 328 if mtape_file_info.file_format > 4 then do; /* set adjusted format code */ 329 mtape_data.ad_file_format = mtape_file_info.file_format - 3; 330 mtape_data.file_blocked = "1"b; /* set switch for blocked file */ 331 end; 332 else do; /* not a blocked file */ 333 mtape_data.ad_file_format = mtape_file_info.file_format; 334 mtape_data.file_blocked = "0"b; 335 end; 336 mtape_data.tot_bytes_processed, mtape_data.last_io, mtape_data.prev_block_no = 0; 337 mtape_data.write_after_read, mtape_data.run = "0"b; 338 mtape_data.first_file = "1"b; 339 if mtape_data.nbufs > 0 then /* buffers already allocated? */ 340 if mtape_data.buf_size ^= mtape_data.block_size then do; 341 call tape_ioi_$deallocate_buffers (mtape_data.tioi_id, code); 342 if code ^= 0 then go to OPEN_EXIT; 343 mtape_data.nbufs = 0; /* set indicator to reallocate buffers */ 344 end; 345 else do; /* buffers allocated and of right size */ 346 call tape_ioi_$list_buffers (mtape_data.tioi_id, READY_STATE, mtape_data.buf_ptrs, nsusp_bufs, code); 347 if code ^= 0 then go to OPEN_EXIT; 348 end; 349 if mtape_data.nbufs = 0 then do; /* If we don't already have buffers */ 350 call mtape_io_$allocate_buffers (mtdp, mtape_data.block_size, code); /* allocate them */ 351 if code ^= 0 then go to OPEN_EXIT; 352 end; 353 call mtape_io_$set_mode (mtdp, "data", mtape_data.hdw_mode, null, code); /* set desired HW mode */ 354 if code = 0 then 355 call mtape_io_$set_mode (mtdp, "length", mtape_data.length_mode, null, code); /* and length mode */ 356 if code ^= 0 then go to OPEN_EXIT; 357 mtape_data.cur_buf_idx = lbound (mtape_data.buf_ptrs, 1); 358 mtape_data.cur_buf_ptr = mtape_data.buf_ptrs (mtape_data.cur_buf_idx); 359 mtape_data.cur_block.length = mtape_data.buf_size;/* set up for max length */ 360 mtape_data.processed = mtape_data.buffer_offset; /* skip over any buffer offset */ 361 if output then /* if writing, set remaining bytes */ 362 mtape_data.remain = mtape_data.cur_block.length - mtape_data.processed; 363 else mtape_data.remain = 0; /* if reading, must read first block */ 364 mtape_data.log_record_ptr = addr (tape_blk (mtape_data.processed + 1)); /* set initial lrec ptr */ 365 mtape_data.buf_len (*) = 0; 366 if mtape_open_info.comment ^= "" then /* user wants to see comment */ 367 call ioa_ ("^/OPEN COMMENT:^/^a^/", mtape_open_info.comment); 368 369 /* opened ok, now fill in IOCB */ 370 371 ips_mask = ""b; 372 on any_other call hcs_$reset_ips_mask (ips_mask, ips_mask); 373 call hcs_$set_ips_mask ("0"b, ips_mask); 374 375 iocbp -> iocb.open_descrip_ptr = mtape_data.opdp; 376 iocbp -> iocb.open = iox_$err_not_closed; 377 iocbp -> iocb.open_file = iox_$err_not_closed; 378 iocbp -> iocb.detach_iocb = iox_$err_not_closed; 379 iocbp -> iocb.detach = iox_$err_not_closed; 380 iocbp -> iocb.close = mtape_iox_$close; 381 iocbp -> iocb.close_file = mtape_iox_$close_file; 382 if arg_open_mode = Sequential_output then 383 iocbp -> iocb.write_record = mtape_iox_$write; 384 else if arg_open_mode = Stream_output then 385 iocbp -> iocb.put_chars = mtape_iox_$write; 386 else if arg_open_mode = Sequential_input then do; 387 iocbp -> iocb.read_record = mtape_iox_$read; 388 iocbp -> iocb.position = mtape_position_; 389 iocbp -> iocb.read_length = mtape_position_$read_length; 390 end; 391 else if arg_open_mode = Stream_input then do; 392 iocbp -> iocb.get_chars = mtape_iox_$read; 393 iocbp -> iocb.position = mtape_position_; 394 end; 395 else if arg_open_mode = Sequential_input_output then do; 396 iocbp -> iocb.read_record = mtape_iox_$read; 397 iocbp -> iocb.write_record = mtape_iox_$write; 398 iocbp -> iocb.position = mtape_position_; 399 iocbp -> iocb.read_length = mtape_position_$read_length; 400 end; 401 else do; /* Steam_input_output */ 402 iocbp -> iocb.get_chars = mtape_iox_$read; 403 iocbp -> iocb.put_chars = mtape_iox_$write; 404 iocbp -> iocb.position = mtape_position_; 405 end; 406 call iox_$propagate (iocbp); 407 408 call hcs_$reset_ips_mask (ips_mask, ips_mask); 409 410 OPEN_EXIT: 411 arg_code = code; 412 return; 413 414 /* close - entry to close the I/O switch */ 415 416 close: entry (arg_iocbp, arg_code); 417 418 /* this entry merely passes control to the close_file entry with a null option array */ 419 420 call close_file_int (arg_iocbp, null_options, arg_code); 421 422 return; 423 424 /* close_file - entry to close an I/O switch with close arguments passed in the close argument array */ 425 426 close_file: close_file_int: entry (arg_iocbp, arg_options, arg_code); 427 428 iocbp = arg_iocbp -> iocb.actual_iocb_ptr; /* copy argument */ 429 arg_code = 0; /* reset return code */ 430 mtdp = iocbp -> iocb.attach_data_ptr; /* get our working storage pointer */ 431 mtape_data.iocb_ptr = iocbp; /* save our IOCB ptr */ 432 vs_ptr = mtape_data.vs_current; /* get vol set structure ptr */ 433 maip = mtape_data.attach_info_ptr; 434 moip = mtape_data.open_info_ptr; 435 mcip = mtape_data.close_info_ptr; 436 mpfmip = mtape_data.pfm_info_ptr; 437 call mtape_parse_$close (mtdp, arg_options, code);/* go parse the close description */ 438 if code ^= 0 then go to CLOSE_EXIT; 439 if mtape_close_info.display then do; /* user wants to see close description */ 440 desc_len = length (mtape_data.cldp -> desc_string); /* set the length */ 441 call ioa_ ("^/CLOSE DESCRIPTION:^/^a^/", mtape_data.cldp -> desc_string); /* display it */ 442 end; 443 call mtape_data.file_close (mtdp, code); /* let the PFM do his thing */ 444 if mtape_data.fi_current ^= null then /* if we were actually processing file */ 445 call mtape_io_$stop_tape (mtdp, code); /* get the tape stopped & buffers rdyed */ 446 call mtape_util_$get_statistics (mtdp, code); /* update error stats */ 447 mtape_data.error_lock = 0; /* reset data error lock */ 448 mtape_data.cur_block.length, mtape_data.cur_block.processed, 449 mtape_data.cur_block.remain, mtape_data.cur_block.log_record = 0; 450 mtape_data.last_io, mtape_data.lrec_rrcx = 0; 451 mtape_data.lrec_rrc (*).block_no, mtape_data.lrec_rrc (*).abs_byte, 452 mtape_data.lrec_rrc (*).byte_offset = 0; 453 if mtape_close_info.comment ^= "" then /* user wants to see comment */ 454 call ioa_ ("^/CLOSE COMMENT:^/^a^/", mtape_close_info.comment); 455 456 /* closed ok, now reset pertinent IOCB entries */ 457 458 ips_mask = ""b; 459 on any_other call hcs_$reset_ips_mask (ips_mask, ips_mask); 460 call hcs_$set_ips_mask ("0"b, ips_mask); 461 462 iocbp -> iocb.detach_iocb = mtape_iox_$detach_iocb; 463 iocbp -> iocb.detach = mtape_iox_$detach; 464 iocbp -> iocb.open = mtape_iox_$open; 465 iocbp -> iocb.open_file = mtape_iox_$open_file; 466 iocbp -> iocb.control = mtape_control_$control; 467 iocbp -> iocb.open_descrip_ptr = null; 468 iocbp -> iocb.put_chars = iox_$err_not_open; 469 iocbp -> iocb.get_chars = iox_$err_not_open; 470 iocbp -> iocb.write_record = iox_$err_not_open; 471 iocbp -> iocb.read_record = iox_$err_not_open; 472 iocbp -> iocb.read_length = iox_$err_not_open; 473 iocbp -> iocb.position = iox_$err_not_open; 474 iocbp -> iocb.close = iox_$err_not_open; 475 iocbp -> iocb.close_file = iox_$err_not_open; 476 call iox_$propagate (iocbp); 477 call hcs_$reset_ips_mask (ips_mask, ips_mask); 478 479 CLOSE_EXIT: 480 arg_code = code; 481 return; 482 483 /* detach_iocb - entry to detach the I/O switch */ 484 485 detach_iocb: entry (arg_iocbp, arg_code); 486 487 /* this entry merely passes control to the detach entry with a null option array */ 488 489 call detach_int (arg_iocbp, null_options, arg_code); 490 491 return; 492 493 /* detach - entry to detach an I/O switch with detach arguments passed in the detach argument array */ 494 495 detach: detach_int: entry (arg_iocbp, arg_options, arg_code); 496 497 iocbp = arg_iocbp -> iocb.actual_iocb_ptr; /* copy argument */ 498 arg_code = 0; /* reset return code */ 499 mtdp = iocbp -> iocb.attach_data_ptr; /* get our root pointer */ 500 mtape_data.iocb_ptr = iocbp; /* save our IOCB ptr */ 501 mdip = mtape_data.detach_info_ptr; /* set this ptr */ 502 call mtape_parse_$detach (mtdp, arg_options, code); /* parse detach options */ 503 if code ^= 0 then 504 go to DETACH_EXIT; 505 if mtape_detach_info.display then do; /* user wants to see detach description */ 506 desc_len = length (mtape_data.dtdp -> desc_string); /* set the length */ 507 call ioa_ ("^/DETACH DESCRIPTION:^/^a^/", mtape_data.dtdp -> desc_string); /* display it */ 508 end; 509 auto_mtd = mtape_data; /* copy mtape_data back to auto storage */ 510 mtdp = addr (auto_mtd); /* now we can deallocate our work area */ 511 512 /* Now go through the entire volume set and demount all volumes */ 513 com_sent = "0"b; 514 do vs_ptr = mtape_data.vs_head repeat mtape_vol_set.next_vs_ptr while (vs_ptr ^= null); 515 if mtape_vol_set.mounted then do; /* if volume currently mounted... */ 516 mtape_data.vs_current = vs_ptr; /* set current volume set ptr */ 517 mtape_data.tioi_id = mtape_vol_set.tioi_id; /* just to be sure */ 518 if mtape_detach_info.comment ^= "" then /* if we have a demount comment */ 519 if ^com_sent then do; /* and it hasn't already been seen */ 520 com_sent = "1"b; /* set flag so we want send it again */ 521 mtape_vol_set.demount_comment = mtape_detach_info.comment; /* copy the comment */ 522 end; 523 if mtape_detach_info.unload then /* if user wants volume unloaded */ 524 call mtape_io_$order (mtdp, "runw", 0, null, code); /* unload volume */ 525 else call mtape_io_$order (mtdp, "rwnw", 0, null, code); /* rewind volume */ 526 call mtape_mount_cntl_$demount (mtdp, code); /* demount the volume */ 527 end; 528 end; 529 530 call release_area_ (mtape_data.areap); /* we can free up our area now */ 531 if mtape_data.mount_echan ^= 0 then /* if we created mount event channel.. */ 532 call ipc_$delete_ev_chn (mtape_data.mount_echan, code); /* delete it */ 533 if mtape_data.io_echan ^= 0 then /* if we created io event channel.. */ 534 call ipc_$delete_ev_chn (mtape_data.io_echan, code); /* delete it */ 535 ips_mask = ""b; 536 on any_other call hcs_$reset_ips_mask (ips_mask, ips_mask); 537 call hcs_$set_ips_mask ("0"b, ips_mask); 538 539 iocbp -> iocb.attach_data_ptr = null; 540 iocbp -> iocb.attach_descrip_ptr = null; 541 iocbp -> iocb.open = iox_$err_not_attached; 542 iocbp -> iocb.open_file = iox_$err_not_attached; 543 iocbp -> iocb.close = iox_$err_not_attached; 544 iocbp -> iocb.close_file = iox_$err_not_attached; 545 iocbp -> iocb.detach = iox_$err_not_attached; 546 iocbp -> iocb.detach_iocb = iox_$err_not_attached; 547 call iox_$propagate (iocbp); /* wipe us out as far as iox_ is concerned */ 548 549 call hcs_$reset_ips_mask (ips_mask, ips_mask); 550 551 DETACH_EXIT: 552 arg_code = code; /* copy return code */ 553 554 return; 555 556 /* read - This entry implements the iox_$read_record entry for sqi and sqio openings, 557* and the iox_$get_chars entry for si and sio openings */ 558 559 read: entry (arg_iocbp, arg_buf_ptr, arg_buf_len, arg_rec_len, arg_code); 560 561 mtdp = arg_iocbp -> iocb.actual_iocb_ptr -> iocb.attach_data_ptr; /* get ptr to our control structure */ 562 mtape_data.iocb_ptr = arg_iocbp -> iocb.actual_iocb_ptr; /* save IOCB ptr */ 563 mtape_data.arg_buf_ptr = arg_buf_ptr; /* save iox_ args for PFM */ 564 mtape_data.arg_buf_len = arg_buf_len; 565 if mtape_data.error_lock ^= 0 then do; /* if a previous error exists.. */ 566 arg_rec_len = 0; /* can't read anymore */ 567 arg_code = mtape_data.error_lock; /* give user back same error */ 568 return; 569 end; 570 if mtape_data.last_io = WRITE_IO then do; /* Read after write a no-no */ 571 iox_code = error_table_$no_operation; /* set error code */ 572 call mtape_util_$error (mtdp, code, "Attempting forward read after write."); 573 go to read_return; 574 end; 575 mtape_data.last_io = READ_IO; /* set for next operation check */ 576 call RECORD_HISTORY; /* update record history counters */ 577 call mtape_data.read (mtdp, iox_code); /* let the PFM do the work */ 578 arg_rec_len = mtape_data.arg_rec_len; /* copy record length for user */ 579 if iox_code ^= 0 then /* if we had an error */ 580 if iox_code ^= error_table_$long_record then do; /* and not a long record */ 581 mtape_data.error_lock = iox_code; /* set the error lock */ 582 go to read_return; 583 end; 584 mtape_data.log_record = mtape_data.log_record + 1;/* increment log records, this block */ 585 read_return: 586 arg_code = iox_code; /* return error code */ 587 return; 588 589 /* write - This entry implements the iox_$write_record entry for sqo and sqio openings, 590* and the iox_$put_chars entry for so and sio openings */ 591 592 write: entry (arg_iocbp, arg_buf_ptr, arg_buf_len, arg_code); 593 594 mtdp = arg_iocbp -> iocb.actual_iocb_ptr -> iocb.attach_data_ptr; /* get ptr to our control structure */ 595 mtape_data.iocb_ptr = arg_iocbp -> iocb.actual_iocb_ptr; /* save IOCB ptr */ 596 mtape_data.arg_buf_ptr = arg_buf_ptr; /* copy iox_ args for PFM */ 597 mtape_data.arg_buf_len = arg_buf_len; 598 if mtape_data.error_lock ^= 0 then do; /* if a previous error exists.. */ 599 arg_code = mtape_data.error_lock; /* give user back same error */ 600 return; 601 end; 602 if mtape_data.last_io = READ_IO then /* nothing wrong with this for input/output openings */ 603 mtape_data.write_after_read = "1"b; /* But flag it */ 604 mtape_data.last_io = WRITE_IO; 605 call RECORD_HISTORY; /* increment record history counters */ 606 call mtape_data.write (mtdp, iox_code); /* let the PFM do the work */ 607 if iox_code ^= 0 then /* if we had an error */ 608 if iox_code ^= error_table_$long_record then do; /* and not a long record */ 609 mtape_data.error_lock = iox_code; /* set the error lock */ 610 go to write_return; 611 end; 612 mtape_data.log_record = mtape_data.log_record + 1;/* increment log record counter */ 613 write_return: 614 arg_code = iox_code; /* return error code */ 615 return; 616 617 /* ATTACH_ERROR - internal procedure to handle errors encountered during the attach call. */ 618 619 ATTACH_ERROR: procedure (ecode, msg); 620 621 dcl ecode fixed bin (35); 622 dcl msg char (*); 623 624 arg_code = ecode; /* return error code to user */ 625 if com_err_flag then 626 call com_err_ (ecode, myname, "^a", msg); 627 628 end ATTACH_ERROR; 629 630 /* CLEANUP - internal procedure to clean up the mtape_ environment on an attach error */ 631 632 CLEANUP: procedure; 633 634 if mtdp ^= null then do; /* if we have a structure already */ 635 if mtape_data.vs_current ^= null then /* if we have a volume set */ 636 if mtape_data.vs_current -> mtape_vol_set.mounted then do; /* and a volume is mounted */ 637 auto_mtd = mtape_data; /* copy mtape_ data out of work area */ 638 mtdp = addr (auto_mtd); /* and set ptr to it */ 639 call mtape_mount_cntl_$demount (mtdp, (0)); /* demount it */ 640 end; 641 642 call release_area_ (mtape_data.areap); /* release our area */ 643 mtdp = null; /* set pointer to null */ 644 end; 645 646 end CLEANUP; 647 648 /* RECORD_HISTORY - internal procedure to record logical record history */ 649 650 RECORD_HISTORY: proc; 651 652 mtape_data.lrec_rrc (mtape_data.lrec_rrcx).block_no = mtape_data.phy_block; 653 mtape_data.lrec_rrc (mtape_data.lrec_rrcx).block_len = mtape_data.length; 654 mtape_data.lrec_rrc (mtape_data.lrec_rrcx).lrec_no = mtape_data.log_record; 655 mtape_data.lrec_rrc (mtape_data.lrec_rrcx).abs_byte = mtape_data.tot_bytes_processed; 656 mtape_data.lrec_rrc (mtape_data.lrec_rrcx).byte_offset = mtape_data.processed + 1; 657 mtape_data.lrec_rrcx = mtape_data.lrec_rrcx + 1; /* increment history index */ 658 if mtape_data.lrec_rrcx > hbound (mtape_data.lrec_rrc.block_no, 1) then /* if at the top of RRC */ 659 mtape_data.lrec_rrcx = lbound (mtape_data.lrec_rrc.block_no, 1); /* reset for bottom */ 660 661 end RECORD_HISTORY; 662 663 /* INIT_ENVIRONMENT - internal procedure to initialize the mtape_ working environment */ 664 665 INIT_ENVIRONMENT: procedure; 666 667 mtdp = addr (auto_mtd); /* put data in temporary auto copy for now */ 668 unspec (auto_mtd) = "0"b; /* Initialize structure */ 669 mtape_data.version = mtape_data_version_1; /* set version */ 670 mtape_data.areap = null; /* Now set some required fields */ 671 mtape_data.iocb_ptr = iocbp; /* save IOCB ptr */ 672 mtape_data.atdp, mtape_data.opdp, mtape_data.cldp, mtape_data.dtdp, mtape_data.cmtdp = null; 673 mtape_data.vs_head, mtape_data.vs_tail, mtape_data.vs_current = null; 674 mtape_data.fi_head, mtape_data.fi_tail, mtape_data.fi_current = null; 675 mtape_data.vs_mounted_tail, mtape_data.tape_infop, mtape_data.tlb = null; 676 mtape_data.buf_ptrs (*), mtape_data.saved_pfm_info_ptr, mtape_data.last_ur_status_ptr = null; 677 mtape_data.lab_bufp, mtape_data.cur_buf_ptr, mtape_data.log_record_ptr = null; 678 mtape_data.pfm_name, mtape_data.abs_ans = ""; 679 call user_info_$process_type (i); /* What kind of user is this anyway? */ 680 if i ^= 2 then /* if not absentee.... */ 681 mtape_data.user_type = "1"b; /* set bit for interactive user */ 682 683 unspec (ai) = "0"b; /* clear out area info */ 684 ai.version = area_info_version_1; /* set up area info block */ 685 ai.control.extend = "1"b; 686 ai.control.zero_on_alloc = "1"b; 687 ai.owner = myname; 688 ai.size = sys_info$max_seg_size; 689 ai.version_of_area = area_info_version_1; 690 ai.areap = null; 691 call define_area_ (addr (ai), code); /* get an area, for general use */ 692 if code ^= 0 then do; 693 call ATTACH_ERROR (code, "from define_area_"); 694 return; 695 end; 696 mtape_data.areap = ai.areap; /* copy area pointer */ 697 698 /* Now allocate assorted info structures */ 699 700 allocate mtape_attach_info in (based_area) set (maip); /* allocate attach info structure */ 701 allocate mtape_open_info in (based_area) set (moip); /* allocate open info structure */ 702 allocate mtape_close_info in (based_area) set (mcip); /* allocate close info structure */ 703 allocate mtape_detach_info in (based_area) set (mdip); /* allocate detach info structure */ 704 allocate mtape_pfm_info in (based_area) set (mpfmip); /* allocate pfm info structure */ 705 706 /* and do any necessary initialization */ 707 708 mtape_attach_info.version = mtape_attach_info_version_1; /* Set proper structure version */ 709 mtape_attach_info.version = mtape_attach_info_version_1; 710 mtape_open_info.version = mtape_open_info_version_1; 711 mtape_close_info.version = mtape_close_info_version_1; 712 mtape_open_info.cs_ptr, mtape_close_info.cs_ptr = null; 713 mtape_open_info.cal_ptr, mtape_close_info.cal_ptr = null; 714 mtape_open_info.so_ptr, mtape_close_info.so_ptr = null; 715 mtape_detach_info.version = mtape_detach_info_version_1; 716 mtape_pfm_info.version = mtape_pfm_info_version_1; 717 mtape_data.attach_info_ptr = maip; /* Record ptrs in root structure */ 718 mtape_data.open_info_ptr = moip; 719 mtape_data.close_info_ptr = mcip; 720 mtape_data.detach_info_ptr = mdip; 721 mtape_data.pfm_info_ptr = mpfmip; 722 mtape_pfm_info.module_id = ""; /* Do any necessary blank filling */ 723 mtape_pfm_info.pfm_open_options.pfm_opt_flags (*).flag_name = ""; 724 mtape_pfm_info.pfm_open_options.pfm_opt_flags (*).flag_ant_name = ""; 725 mtape_pfm_info.pfm_open_options.pfm_opt_value_name (*) = ""; 726 mtape_pfm_info.pfm_open_options.pfm_opt_str_name (*) = ""; 727 mtape_pfm_info.pfm_close_options.pfm_opt_flags (*).flag_name = ""; 728 mtape_pfm_info.pfm_close_options.pfm_opt_flags (*).flag_ant_name = ""; 729 mtape_pfm_info.pfm_close_options.pfm_opt_value_name (*) = ""; 730 mtape_pfm_info.pfm_close_options.pfm_opt_str_name (*) = ""; 731 mtape_attach_info.pfm_prefix, mtape_attach_info.default_pfm_prefix = ""; 732 733 end INIT_ENVIRONMENT; 734 1 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 1 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 1 3* version number to IOX2. */ 1 4 /* format: style2 */ 1 5 1 6 dcl 1 iocb aligned based, /* I/O control block. */ 1 7 2 version character (4) aligned, /* IOX2 */ 1 8 2 name char (32), /* I/O name of this block. */ 1 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 1 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 1 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 1 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 1 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 1 14 2 reserved bit (72), /* Reserved for future use. */ 1 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 1 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 1 17 /* open(p,mode,not_used,s) */ 1 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 1 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 20 /* get_line(p,bufptr,buflen,actlen,s) */ 1 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 1 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 1 24 /* put_chars(p,bufptr,buflen,s) */ 1 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 1 26 /* modes(p,newmode,oldmode,s) */ 1 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 1 28 /* position(p,u1,u2,s) */ 1 29 2 control entry (ptr, char (*), ptr, fixed (35)), 1 30 /* control(p,order,infptr,s) */ 1 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 32 /* read_record(p,bufptr,buflen,actlen,s) */ 1 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 1 34 /* write_record(p,bufptr,buflen,s) */ 1 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 1 36 /* rewrite_record(p,bufptr,buflen,s) */ 1 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 1 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 1 39 /* seek_key(p,key,len,s) */ 1 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 1 41 /* read_key(p,key,len,s) */ 1 42 2 read_length entry (ptr, fixed (21), fixed (35)), 1 43 /* read_length(p,len,s) */ 1 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 1 45 /* open_file(p,mode,desc,not_used,s) */ 1 46 2 close_file entry (ptr, char (*), fixed bin (35)), 1 47 /* close_file(p,desc,s) */ 1 48 2 detach entry (ptr, char (*), fixed bin (35)); 1 49 /* detach(p,desc,s) */ 1 50 1 51 declare iox_$iocb_version_sentinel 1 52 character (4) aligned external static; 1 53 1 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 735 736 2 1 /* BEGIN INCLUDE FILE mtape_data.incl.pl1. Created by J. A. Bush 10/06/82 */ 2 2 /* format: style4 */ 2 3 2 4 dcl mtdp ptr; 2 5 2 6 dcl mtape_data_version_1 char (8) int static options (constant) init ("mtdv0001"); 2 7 2 8 dcl 1 mtape_data aligned based (mtdp), 2 9 2 version char (8), /* Current structure version */ 2 10 2 areap ptr, /* Pointer to an allocation area */ 2 11 2 iocb_ptr ptr, /* Pointer to our IO control block */ 2 12 2 atdp ptr, /* Pointer to the attach description string */ 2 13 2 opdp ptr, /* Pointer to the open description string */ 2 14 2 cldp ptr, /* Pointer to close description string */ 2 15 2 dtdp ptr, /* Pointer to detach description string */ 2 16 2 cmtdp ptr, /* If non-null, Ptr to allocated copy of mtape_data */ 2 17 2 vs_head ptr, /* Pointer to the first volume_set structure */ 2 18 2 vs_tail ptr, /* Pointer to the last volume_set structure */ 2 19 2 vs_current ptr, /* Pointer to the current volume_set structure */ 2 20 2 vs_mounted_tail ptr, /* Pointer to MRM volume_set member */ 2 21 2 fi_head ptr, /* Pointer to the first file_info structure */ 2 22 2 fi_tail ptr, /* Pointer to the last file_info structure */ 2 23 2 fi_current ptr, /* Pointer to the current file_info structure */ 2 24 2 tape_infop ptr, /* Pointer to rcp tape info structure */ 2 25 2 last_ur_status_ptr ptr, /* If non-null, Ptr to last unrecoverable status */ 2 26 2 io_echan fixed bin (71), /* Fast wait channel for I/O interrupts */ 2 27 2 mount_echan fixed bin (71), /* Regular wait channel for mount requests */ 2 28 2 data_xfer_args, /* Arguments for time critical (read/write) calls */ 2 29 3 arg_buf_ptr ptr, /* Pointer to users buffer */ 2 30 3 arg_buf_len fixed bin (21), /* Length of users buffer in bytes */ 2 31 3 arg_rec_len fixed bin (21), /* Length of record read in bytes */ 2 32 2 error_lock fixed bin (35), /* if ^= 0 = file locked error code */ 2 33 2 abs_ans char (3), /* Query answer (yes or no) for abs user */ 2 34 2 user_type bit (1), /* "1"b => interactive; "0"b => absentee */ 2 35 2 display_errors bit (1), /* "1"b => display verbose error messages */ 2 36 2 force_end_of_volume bit (1), /* "1"b => simulate EOV on next write */ 2 37 2 opd_len fixed bin (21), /* Allocated length of open description */ 2 38 2 drives_in_use fixed bin, /* Number of tape drives currently in use */ 2 39 2 data_buffers, /* Info about data buffers */ 2 40 3 buf_ptrs (8) ptr, /* Pointers to a subset of ioi buffers */ 2 41 3 blind_buf_ptrs (8) ptr, /* Pointers to other subset of buffers */ 2 42 3 buf_len (8) fixed bin (21), /* Length of buffers in 9 bit bytes */ 2 43 3 blind_buf_len (8) fixed bin (21), /* Lengths of other subset of buffers */ 2 44 3 nbufs fixed bin, /* Number of data buffers currently in use */ 2 45 3 buf_size fixed bin (21), /* Allocated size of data buffers in bytes */ 2 46 3 bufs_per_subset fixed bin, /* Number of buffers to write/read per I/O */ 2 47 3 cur_buf_idx fixed bin, /* Index into subset of current buffer */ 2 48 3 run bit (1), /* "1"b => wrt I/O queued thru tape_ioi_; "0"b => ^Queued */ 2 49 2 label_buffer, /* Info about label record buffer */ 2 50 3 lab_bufp ptr, /* Pointer to label I/O buffer */ 2 51 3 lab_buf_len fixed bin (21), /* Length of label buffer in 9 bit bytes */ 2 52 2 tlb ptr, /* Pointer to a temp label record structure */ 2 53 2 position, /* Position on current volume */ 2 54 3 phy_file fixed bin, /* physical file number */ 2 55 3 phy_block fixed bin, /* physical block within physical file */ 2 56 2 current_file, /* instantanious info about current file */ 2 57 3 cur_block, /* info about current block */ 2 58 4 cur_buf_ptr ptr, /* Pointer to the current data buffer */ 2 59 4 log_record_ptr ptr, /* Pointer to current logical record */ 2 60 4 length fixed bin (21), /* Length of current block in bytes */ 2 61 4 processed fixed bin (21), /* Number of chars processed already */ 2 62 4 remain fixed bin (21), /* Number of chars remaining to be processed */ 2 63 4 log_record fixed bin (21), /* Log. record within the current block */ 2 64 3 char_size fixed bin, /* Size in bits of the data chars of this file */ 2 65 3 padding_char char (1), /* To pad blocks to mod 4 on binary writes */ 2 66 3 length_mode fixed bin, /* 0 => W/R mod 4 blocks; 1 => W/R non-mod 4 blocks */ 2 67 3 hdw_mode fixed bin, /* Hardware recording mode: 2 68* 1 = binary; 2 = nine track; 3 = BCD */ 2 69 3 conversion fixed bin, /* File data conversion: 2 70* 0 = no conversion; 1 = ASCII<->EBCDIC; 2 = ASCII<->BCD */ 2 71 3 buffer_offset fixed bin, /* Number of bytes prior to data */ 2 72 3 block_size fixed bin (21), /* Maximum block size for this file */ 2 73 3 record_size fixed bin (21), /* Maximum record size for this file */ 2 74 3 prev_block_no fixed bin (21), /* Number of previous block read */ 2 75 3 ad_file_format fixed bin, /* 1 = U; 2 = F; 3 = D or V; 4 = S or VS */ 2 76 3 file_blocked bit (1), /* "1"b => file is blocked */ 2 77 3 native_file bit (1), /* "1"b => current file written by mtape_ PFM */ 2 78 3 write_after_read bit (1), /* "1"b => truncate file (and file_set) at this record */ 2 79 3 first_file bit (1), /* "1"b => first file has been processed */ 2 80 3 tot_bytes_processed fixed bin (35), /* total bytes in this file section */ 2 81 3 last_io fixed bin, /* Last I/O operation (1 = read; 2 = write) */ 2 82 3 lrec_rrcx fixed bin, /* current index of the lrec round robin counter */ 2 83 3 lrec_rrc, /* history of last n logical records */ 2 84 4 block_no (0:7) fixed bin (35), /* block (within file section) where lrec starts */ 2 85 4 block_len (0:7) fixed bin (35), /* block len of current block */ 2 86 4 lrec_no (0:7) fixed bin (35), /* logical record within currnt block */ 2 87 4 abs_byte (0:7) fixed bin (35), /* byte (within file section) where lrec starts */ 2 88 4 byte_offset (0:7) fixed bin, /* offset of 1st byte of lrec (within block) */ 2 89 3 blk_rrcx fixed bin, /* index into blk_rrrc array of last block */ 2 90 3 blk_rrrc (0:7) fixed bin (35), /* contains Lrec count of last n blocks */ 2 91 3 tot_lrec fixed bin (35), /* Total logical records processed in current file */ 2 92 2 tioi_id bit (36), /* Identifier used for calls to tape_ioi_ */ 2 93 2 attach_info_ptr ptr, /* Pointer to attach option info */ 2 94 2 open_info_ptr ptr, /* Pointer to open option info */ 2 95 2 close_info_ptr ptr, /* Pointer to close option info */ 2 96 2 detach_info_ptr ptr, /* Pointer to detach option info */ 2 97 2 pfm_info_ptr ptr, /* Pointer to PFM info block */ 2 98 2 saved_pfm_info_ptr ptr, /* Pointer to info for "change_module" control OP */ 2 99 2 pfm_name char (32), /* Name of Per-Format module */ 2 100 2 pfm_required_entries like pfm_entries, /* Required entry point declarations in PFM */ 2 101 2 pfm_work_area (32) fixed bin (35); /* PFM work buffer */ 2 102 2 103 dcl 1 pfm_entries based aligned, /* Entry declarations for PFM entries */ 2 104 2 pfm_init entry (ptr, fixed bin (35)), /* PFM initialization entry */ 2 105 2 file_open entry (ptr, fixed bin (35)), /* PFM file_open entry */ 2 106 2 file_close entry (ptr, fixed bin (35)), /* PFM file_close entry */ 2 107 2 read entry (ptr, fixed bin (35)), /* PFM read entry */ 2 108 2 write entry (ptr, fixed bin (35)), /* PFM write entry */ 2 109 2 order entry (ptr, char (*), ptr, ptr, fixed bin (35)), /* PFM control order entry */ 2 110 2 decode_file_labels entry (ptr, ptr, fixed bin, fixed bin, fixed bin (35)), 2 111 2 encode_file_labels entry (ptr, ptr, fixed bin, fixed bin, fixed bin, fixed bin (35)); 2 112 2 113 dcl all_buf_ptrs (16) ptr based (addr (mtape_data.buf_ptrs)); 2 114 dcl all_buf_lens (16) fixed bin (21) based (addr (mtape_data.buf_len)); 2 115 dcl tape_blk (mtape_data.length) char (1) unaligned based (mtape_data.cur_buf_ptr); /* template for a tape block */ 2 116 2 117 /* END INCLUDE FILE mtape_data.incl.pl1 */ 737 738 3 1 /* BEGIN INCLUDE FILE mtape_attach_info.incl.pl1. Created by J. A. Bush 06/13/83 */ 3 2 /* format: style4 */ 3 3 3 4 dcl maip ptr; 3 5 3 6 dcl mtape_attach_info_version_1 char (8) int static options (constant) init ("maiv0001"); 3 7 3 8 dcl 1 mtape_attach_info aligned based (maip), 3 9 2 version char (8), /* Current structure version */ 3 10 2 density fixed bin (35), /* 200, 556, 800, 1600, 6250 BPI */ 3 11 2 tracks fixed bin (35), /* Number of tracks, 7 or 9 */ 3 12 2 speed bit (36), /* "000"b = any speed; "1xx"b = 75 IPS; 3 13* "x1x"b = 125 IPS; "xx1"b = 200 IPS */ 3 14 2 ndrives fixed bin (35), /* 0 = unspecified; 1 - 63 devices to be used */ 3 15 2 wait_time fixed bin (35), /* time to wait in minutes for available device */ 3 16 2 pfm_prefix char (21), /* if "-volume_type" was specified */ 3 17 2 default_pfm_prefix char (21), /* if no "-vt" specified and blank volume */ 3 18 2 display bit (1), /* Display attach description on user_output */ 3 19 2 labeled bit (1), /* "1"b => labeled; "0"b => unlabeled volume set */ 3 20 2 wait bit (1), /* "1"b => wait for available devices; "0"b => don't wait */ 3 21 2 system bit (1), /* "1"b => User wants to be a "system" process */ 3 22 2 ring bit (1); /* "1"b => write ring in; "0"b => no write ring */ 3 23 3 24 /* END INCLUDE FILE mtape_attach_info.incl.pl1 */ 739 740 4 1 /* BEGIN INCLUDE FILE mtape_detach_info.incl.pl1. Created by J. A. Bush 06/13/83 */ 4 2 /* format: style4 */ 4 3 4 4 dcl mdip ptr; 4 5 4 6 dcl mtape_detach_info_version_1 char (8) int static options (constant) init ("mdiv0001"); 4 7 4 8 dcl 1 mtape_detach_info aligned based (mdip), 4 9 2 version char (8), /* Current structure version */ 4 10 2 comment char (64), /* To display on operators console at volume detach time */ 4 11 2 display bit (1), /* Display detach description on user_output */ 4 12 2 unload bit (1); /* "1"b => unload volume on detach; "0"b => rewind on detach */ 4 13 4 14 /* END INCLUDE FILE mtape_detach_info.incl.pl1 */ 741 742 5 1 /* BEGIN INCLUDE FILE mtape_saved_pfm_info.incl.pl1. Created by J. A. Bush 07/28/83 */ 5 2 /* format: style4 */ 5 3 /* This include file references information in the mtape_dta.incl.pl1 include file */ 5 4 5 5 dcl mspfmip ptr; 5 6 5 7 dcl mtape_saved_pfm_info_version_1 char (8) int static options (constant) init ("mspiv001"); 5 8 5 9 dcl 1 mtape_saved_pfm_info aligned based (mspfmip), /* Saved info for "change_module" control OP */ 5 10 2 version char (8), /* Current structure version */ 5 11 2 pfm_name char (32), /* PFM name of previous PFM */ 5 12 2 open_mode fixed bin, /* Opening mode of PFM we changed to */ 5 13 2 old_pfm_entries like pfm_entries; /* old PFM entry variables */ 5 14 5 15 /* END INCLUDE FILE mtape_saved_pfm_info.incl.pl1 */ 743 744 6 1 /* BEGIN INCLUDE FILE mtape_open_close_info.incl.pl1. Created by J. A. Bush 06/13/83 */ 6 2 /* format: style4 */ 6 3 6 4 dcl moip ptr; /* Pointer to mtape_open_info structure */ 6 5 dcl mcip ptr; /* Pointer to mtape_close_info structure */ 6 6 6 7 dcl mtape_open_info_version_1 char (8) int static options (constant) init ("moiv0001"); 6 8 dcl mtape_close_info_version_1 char (8) int static options (constant) init ("mciv0001"); 6 9 6 10 dcl 1 mtape_open_info aligned based (moip), 6 11 2 version char (8), /* Current structure version */ 6 12 2 cs_ptr ptr, /* Pointer to arg processing control structure */ 6 13 2 cal_ptr ptr, /* Pointer to arg processing ctl arg list */ 6 14 2 so_ptr ptr, /* Pointer to last saved iox_ options */ 6 15 2 open_mode fixed bin, /* iox_ opening mode */ 6 16 2 comment char (80), /* Display on user_output after open */ 6 17 2 expiration char (24), /* File expiration date */ 6 18 2 file_format char (3), /* File format code */ 6 19 2 recording_mode char (6), /* Ascii, ebcdic, or binary */ 6 20 2 file_name char (32), /* Name of file to be recorded */ 6 21 2 replace_id char (32), /* Name of file to replace */ 6 22 2 init_to_zero, /* Enables clearing rest of structure */ 6 23 3 block_length fixed bin (35), /* Block size in bytes */ 6 24 3 record_length fixed bin (35), /* Record length specified by user */ 6 25 3 default_span_rlen fixed bin (35), /* Default record length for spanned records */ 6 26 3 default_var_rlen fixed bin (35), /* Default record length for variable records */ 6 27 3 default_fix_rlen fixed bin (35), /* Default record length for fixed records */ 6 28 3 seq_number fixed bin (35), /* File sequence number */ 6 29 3 append bit (1), /* "1"b => append file to end of file set */ 6 30 3 create bit (1), /* "1"b => create this file */ 6 31 3 display bit (1), /* "1"b => display the open description */ 6 32 3 extend bit (1), /* "1"b => extend the current file */ 6 33 3 force bit (1), /* "1"b => disregard file expiration when creating */ 6 34 3 last_file bit (1), /* "1"b => position to last file of file set */ 6 35 3 next_file bit (1), /* "1"b => position to next file of file set */ 6 36 3 modify bit (1), /* "1"b => modify the current file */ 6 37 3 label_entry_present bit (1), /* "1"b => user label entry is valid */ 6 38 3 user_label entry (ptr, char (*), fixed bin, fixed bin, fixed bin, fixed bin (35)), 6 39 3 pfm_args like pfm_arg_values; /* see structure below */ 6 40 6 41 dcl 1 mtape_close_info aligned based (mcip), 6 42 2 version char (8), /* Current structure version */ 6 43 2 cs_ptr ptr, /* Pointer to arg processing control structure */ 6 44 2 cal_ptr ptr, /* Pointer to arg processing ctl arg list */ 6 45 2 so_ptr ptr, /* Pointer to last saved iox_ options */ 6 46 2 comment char (80), /* Display on user_output after open */ 6 47 2 init_to_zero, /* Enables clearing rest of structure */ 6 48 3 display bit (1), /* Display open description for user */ 6 49 3 position fixed bin, /* For positioning on file closing: 6 50* 0 = Leave at current position; 6 51* 1 = Position to beginning of file; 6 52* 2 = Position to end of file; 6 53* 3 = Position to beginning of file section; 6 54* 4 = Position to end of file section */ 6 55 3 pfm_args like pfm_arg_values; /* see structure below */ 6 56 6 57 dcl 1 pfm_arg_values aligned based, /* Common to open and close_info */ 6 58 2 pfm_opt_sw (5) bit (1), /* PFM dependent */ 6 59 2 pfm_opt_value (5) fixed bin (35), /* PFM dependent */ 6 60 2 pfm_opt_str (5) char (32); /* PFM dependent */ 6 61 6 62 /* END INCLUDE FILE mtape_open_close_info.incl.pl1 */ 745 746 7 1 /* BEGIN INCLUDE FILE mtape_pfm_info.incl.pl1. Created by J. A. Bush 06/16/83 */ 7 2 /* format: style4 */ 7 3 7 4 dcl mpfmip ptr; 7 5 7 6 dcl mtape_pfm_info_version_1 char (8) int static options (constant) init ("mpiv0001"); 7 7 7 8 dcl 1 mtape_pfm_info aligned based (mpfmip), /* PFM information block */ 7 9 2 version char (8), /* Current structure version */ 7 10 2 module_id char (21), /* For identification of PFM. (e.g. ANSI, IBM, GCOS) */ 7 11 2 open_modes_allowed (3) fixed bin, /* Allowable open modes for this PFM */ 7 12 2 bof_prefix char (3), /* For identification of BOF labels */ 7 13 2 eov_prefix char (3), /* For identification of EOV labels */ 7 14 2 eof_prefix char (3), /* For identification of EOF labels */ 7 15 2 no_labels_ok bit (1), /* "1"b => PFM processes unlabeled volumes */ 7 16 2 multi_volumes_ok bit (1), /* "1"b => PFM processes multi-volume sets */ 7 17 2 extended_error_recovery bit (1), /* "1"b => PFM will do error recovery after mtape_ gives up */ 7 18 2 pfm_open_options like pfm_options, /* open options common to this PFM */ 7 19 2 pfm_close_options like pfm_options; /* close options common to this PFM */ 7 20 7 21 dcl 1 pfm_options aligned based, /* common to open and close pfm options */ 7 22 2 pfm_opt_flags (5), /* identifies use of "pfm_opt_sw (1-5)" close flags */ 7 23 3 flag_name char (32), /* name of flag */ 7 24 3 flag_ant_name char (32), /* antonym name */ 7 25 2 pfm_opt_value_name (5) char (32), /* identifies use of "pfm_opt_value (1-5)" */ 7 26 2 pfm_opt_str_name (5) char (32); /* identifies use of "pfm_opt_str (1-5)" */ 7 27 7 28 /* END INCLUDE FILE mtape_pfm_info.incl.pl1 */ 747 748 8 1 /* BEGIN INCLUDE FILE mtape_err_stats.incl.pl1. Created by J. A. Bush 07/22/83. */ 8 2 /* format: style4 */ 8 3 8 4 dcl es_ptr ptr; 8 5 8 6 dcl 1 mtape_err_stats aligned based (es_ptr), /* Error statistics block */ 8 7 2 read like err_entry, /* For read operations */ 8 8 2 write like err_entry, /* For write operations */ 8 9 2 orders like err_entry, /* For non-data xfer operations */ 8 10 2 successful_retry (7) fixed bin (35); /* retrys that succeeded after 1-7 trys */ 8 11 8 12 dcl 1 err_entry aligned based, 8 13 2 errors fixed bin (35), 8 14 2 operations fixed bin (35); 8 15 8 16 /* END INCLUDE FILE mtape_err_stats.incl.pl1 */ 749 750 9 1 /* BEGIN INCLUDE FILE mtape_vol_set.incl.pl1. Created by J. A. Bush 10/13/82 */ 9 2 /* The include file mtape_err_stats.incl.pl1 is referenced by this include file */ 9 3 /* format: style4 */ 9 4 9 5 dcl vs_ptr ptr; 9 6 9 7 dcl mtape_vs_version_1 char (8) int static options (constant) init ("mtvsv001"); 9 8 9 9 dcl 1 mtape_vol_set aligned based (vs_ptr), 9 10 2 version char (8), /* Current version */ 9 11 2 prev_vs_ptr ptr, /* Pointer to previous volume set entry */ 9 12 2 next_vs_ptr ptr, /* Pointer to next volume set entry */ 9 13 2 mrm_vs_ptr ptr, /* Pointer to Most Recently Mounted VS member */ 9 14 2 lrm_vs_ptr ptr, /* Pointer to Least Recently Mounted VS member */ 9 15 2 first_vl_ptr ptr, /* Pointer to the first volume label record structure */ 9 16 2 last_vl_ptr ptr, /* Pointer to the last volume label record structure */ 9 17 2 volume_name char (32), /* Name specified in the attach description */ 9 18 2 volume_id char (32), /* Name as recorded in the volume label */ 9 19 2 mount_comment char (64), /* Mount comment from attach description */ 9 20 2 demount_comment char (64), /* Demount comment from detach description */ 9 21 2 device_name char (8), /* Device volume is currently or last mounted on */ 9 22 2 rcp_id bit (36), /* RCP activation for this volume */ 9 23 2 tioi_id bit (36), /* tape_ioi_ activation for this volume */ 9 24 2 volume_index fixed bin, /* Volume sequence number within volume set */ 9 25 2 volume_density fixed bin, /* Actual volume density determined by RCP */ 9 26 2 volume_type fixed bin, /* Use rcp_volume_formats.incl.pl1 for decode */ 9 27 2 volume_check fixed bin, /* Refer to named constants below for values */ 9 28 2 number_of_vol_labels fixed bin, /* # of volume label records on this volume */ 9 29 2 auth_required bit (1), /* "1"b => Operator authentication was required */ 9 30 2 mounted bit (1), /* "1"b => volume currently mounted */ 9 31 2 ever_mounted bit (1), /* "1"b => volume has been mounted */ 9 32 2 volume_end bit (1), /* "1"b => reached end of volume (EOT foil) on write */ 9 33 2 first_file_unexpired bit (1), /* "1"b => first file of volume is unexpired */ 9 34 2 dev_att_retry bit (1), /* "1"b => DEVICE ATTENTION recovery in progress */ 9 35 2 pwr_off_retry bit (1), /* "1"b => POWER OFF recovery in progress */ 9 36 2 mounts fixed bin, /* Number of times volume mounted during attachment */ 9 37 2 tot_error_stats like mtape_err_stats, /* Summation of error statistics for all mounts */ 9 38 2 rel_error_stats like mtape_err_stats; /* Summation of error statistics, this mount */ 9 39 9 40 /* Named constants applied to volume_check variable, when volume label read by PFMs pfm_init entry */ 9 41 9 42 dcl (MTAPE_VOLUME init (1), /* Volume recorded by mtape_ (desired type) */ 9 43 MULT_PRIOR_VOLUME init (2), /* Volume recorded by prior Multics software 9 44* (desired type) */ 9 45 NON_MULT_VOLUME init (3), /* Volume recorded by other vendor (desired type) */ 9 46 BLANK_VOLUME init (4), /* Volume is blank/unreadable */ 9 47 UNLABELED_VOLUME init (5), /* Volume is unlabeled or has unrecognized label */ 9 48 RECOG_FORMAT_VOLUME init (6) /* Volume has label of other recognized format */ 9 49 ) fixed bin int static options (constant); 9 50 9 51 /* END INCLUDE FILE mtape_vol_set.incl.pl1 */ 751 752 10 1 /* BEGIN INCLUDE FILE mtape_file_info.incl.pl1. Created by J. A. Bush 10/13/82 */ 10 2 /* format: style4 */ 10 3 10 4 dcl fi_ptr ptr; 10 5 10 6 dcl mtape_fi_version_1 char (8) int static options (constant) init ("mtfiv001"); 10 7 10 8 dcl 1 mtape_file_info aligned based (fi_ptr), 10 9 2 version char (8), /* Current version */ 10 10 2 prev_fi_ptr ptr, /* Pointer to the previous file info structure */ 10 11 2 next_fi_ptr ptr, /* Pointer to the next file info structure */ 10 12 2 first_file_lab_ptr ptr, /* Pointer to 1st label record struc. */ 10 13 2 last_file_lab_ptr ptr, /* Pointer to last label record struc. */ 10 14 2 first_file_trail_ptr ptr, /* Pointer to 1st trailer record struc. */ 10 15 2 last_file_trail_ptr ptr, /* Pointer to last trailer record struc. */ 10 16 2 first_file_section_ptr ptr, /* Pointer to file_info struct. of 1st file section */ 10 17 2 begin_vs_ptr ptr, /* Pointer to 1st volume set struct. containing this file */ 10 18 2 end_vs_ptr ptr, /* Pointer to last volume set struct. containing this file */ 10 19 2 position_within_file fixed bin, /* 0 = In HDR; 1 = In data file; 2 = In trailer; 10 20* 3 = Not positioned within this file 10 21* 4 = At beginning of data file; 5 = At EOF */ 10 22 2 per_file_info, /* Information pertaining to entire file */ 10 23 3 file_id char (32), /* File identifier or name */ 10 24 3 file_set_id char (32), /* Identifies the file set */ 10 25 3 creation_date char (6), /* File creation date in form " yyddd" */ 10 26 3 expiration_date char (6), /* File expiration date in form " yyddd" */ 10 27 3 file_code char (3), /* Printable file code */ 10 28 3 file_format fixed bin, /* Current file format: 10 29* 0 = unspecified; 1 = U; 2 = F; 3 = D or V; 10 30* 4 = S or VS; 5 = FB; 10 31* 6 = DB or VB; 7 = SB or VBS; */ 10 32 3 seq_number fixed bin, /* File sequence number */ 10 33 3 generation fixed bin, /* File generation number, if supported */ 10 34 3 gen_version fixed bin, /* File generation version number, if supported */ 10 35 3 char_size fixed bin, /* Size in bits of the data chars of this file */ 10 36 3 hdw_mode fixed bin, /* Hardware mode: 1 = binary; 2 = nine; 3 = BCD */ 10 37 3 conversion fixed bin, /* File data conversion: 10 38* 1 = no conversion; 2 = ASCII<->EBCDIC; 3 = ASCII<->BCD */ 10 39 3 buffer_offset fixed bin, /* Number of bytes prior to data */ 10 40 3 length_mode fixed bin, /* 0 => W/R mod 4 blocks; 1 => W/R non-mod 4 blocks */ 10 41 3 block_size fixed bin (21), /* Maximum block size for this file */ 10 42 3 record_size fixed bin (21), /* Maximum record size for this file */ 10 43 3 native_file bit (1), /* "1"b => current file written by mtape_ PFM */ 10 44 3 user_labels_present bit (1), /* "1"b => UHL/UTL are present */ 10 45 3 unlabeled_file bit (1), /* "1"b => this is unlabeled file */ 10 46 3 pfm_opt_sw (5) bit (1), /* PFM dependent */ 10 47 3 pfm_opt_value (5) fixed bin (35), /* PFM dependent */ 10 48 3 pfm_opt_str (5) char (32), /* PFM dependent */ 10 49 2 per_section_info, /* Information pertaining only to this file section */ 10 50 3 section fixed bin, /* File section number for multi-volume files */ 10 51 3 phy_file fixed bin, /* Phy. file of HDR label GRP, on the current volume */ 10 52 3 first_file_on_volume bit (1), /* "1"b => First file or file section on this volume */ 10 53 3 end_of_file_set bit (1), /* "1"b => This is last file of file set */ 10 54 3 block_count fixed bin (35), /* Number of blocks in this file section */ 10 55 3 read_errors fixed bin (35), /* of errors encountered reading this file */ 10 56 3 write_errors fixed bin (35); /* of errors encountered writing this file */ 10 57 10 58 /* END INCLUDE FILE mtape_file_info.incl.pl1 */ 753 754 11 1 /* BEGIN INCLUDE FILE mtape_constants.incl.pl1. Created by J. A. Bush 10/07/82 */ 11 2 /* format: style4 */ 11 3 11 4 /* This include file defines various named constants used throughout mtape_ 11 5* and its associated Per-Format modules */ 11 6 11 7 /* Storage allocation constants, used to denote what type of storage to allocate */ 11 8 11 9 dcl (MTAPE_ALLOC_VS init (1), /* to allocate a volume_set structure */ 11 10 MTAPE_ALLOC_LR init (2), /* to allocate a label record structure */ 11 11 MTAPE_ALLOC_FI init (3), /* to allocate a file_info structure */ 11 12 MTAPE_ALLOC_STR init (4) /* to allocate a character string, or undefined block */ 11 13 ) fixed bin int static options (constant); 11 14 11 15 /* Volume density constants */ 11 16 11 17 dcl MTAPE_VALID_DENSITIES (5) init (200, 556, 800, 1600, 6250) 11 18 fixed bin int static options (constant); 11 19 11 20 /* Device speed constants */ 11 21 11 22 dcl MTAPE_SPEED_VALUES (4) init (0, 75, 125, 200) /* 0 is any speed device */ 11 23 fixed bin int static options (constant); 11 24 11 25 /* Hardware Mode constants */ 11 26 11 27 dcl (MTAPE_HWM_BIN init (1), /* For binary hardware mode */ 11 28 MTAPE_HWM_NINE init (2), /* For nine hardware mode */ 11 29 MTAPE_HWM_BCD init (3) /* For BCD hardware mode */ 11 30 ) fixed bin int static options (constant); 11 31 11 32 /* Data conversion constants */ 11 33 11 34 dcl (MTAPE_UNSPECIFIED init (0), /* attribute not specified */ 11 35 MTAPE_NO_CONVERSION init (1), /* No conversion on input or output */ 11 36 MTAPE_CV_EBCDIC init (2), /* Convert to/from EBCDIC (from/to ASCII) */ 11 37 MTAPE_CV_BCD init (3), /* Convert to/from BCD (from/to ASCII) */ 11 38 MTAPE_CV_UC_ASCII init (4), /* Convert to Upper case ASCII (from any case ASCII) */ 11 39 MTAPE_CV_UC_EBCDIC init (5) /* Convert to Upper case EBCDIC (from any case ASCII) */ 11 40 ) fixed bin int static options (constant); 11 41 11 42 /* File positioning constants */ 11 43 11 44 dcl (NOT_POSITIONED_IN_FILE init (0), /* Not currently positioned within this file */ 11 45 AT_BOFH init (1), /* Positioned at beginning of file hdr */ 11 46 AT_EOFH init (2), /* Positioned at end of file hdr */ 11 47 AT_BOFD init (3), /* Positioned at beginning of file data */ 11 48 AT_IFD init (4), /* Positioned in file data, not beginning */ 11 49 AT_EOFD init (5), /* Positioned prior to end of data file */ 11 50 AT_BOFT init (6), /* Positioned at beginning of trailer label file */ 11 51 AT_EOFT init (7), /* Positioned at end of trailer label file */ 11 52 AT_EOF init (8), /* Positioned after trailer labels at EOF */ 11 53 FILES_PER_FILE_GRP init (3) /* # of physical files per file (section) group */ 11 54 ) fixed bin int static options (constant); 11 55 11 56 dcl (BOF_LABEL init (1), /* indicates beginning of file label */ 11 57 EOV_LABEL init (2), /* indicates end of volume label */ 11 58 EOF_LABEL init (3) /* indicates end of file label */ 11 59 ) fixed bin int static options (constant); 11 60 11 61 /* user query constant codes */ 11 62 11 63 dcl (Q_NO_NEXT_VOLUME init (1), 11 64 Q_LABELED_VOLUME init (2), 11 65 Q_UNEXPIRED_VOLUME init (3), 11 66 Q_INCORRECT_VOLUME init (4), 11 67 Q_UNEXPIRED_FILE init (5), 11 68 Q_ABORT_FILE init (6) 11 69 ) fixed bin int static options (constant); 11 70 11 71 /* END INCLUDE FILE mtape_constants.incl.pl1 */ 755 756 12 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 12 2 12 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 12 4 12 5 dcl area_infop ptr; 12 6 12 7 dcl 1 area_info aligned based (area_infop), 12 8 2 version fixed bin, /* version number for this structure is 1 */ 12 9 2 control aligned like area_control, /* control bits for the area */ 12 10 2 owner char (32) unal, /* creator of the area */ 12 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 12 12 2 size fixed bin (18), /* size of the area in words */ 12 13 2 version_of_area fixed bin, /* version of area (returned only) */ 12 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 12 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 12 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 12 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 12 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 12 19 12 20 dcl 1 area_control aligned based, 12 21 2 extend bit (1) unal, /* says area is extensible */ 12 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 12 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 12 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 12 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 12 26 2 system bit (1) unal, /* says area is managed by system */ 12 27 2 pad bit (30) unal; 12 28 12 29 /* END INCLUDE FILE area_info.incl.pl1 */ 757 758 13 1 /* --------------- BEGIN include file rcp_volume_formats.incl.pl1 --------------- */ 13 2 13 3 13 4 13 5 /****^ HISTORY COMMENTS: 13 6* 1) change(86-12-08,GWMay), approve(86-12-08,PBF7552), 13 7* audit(86-12-08,Martinson), install(86-12-17,MR12.0-1250): 13 8* added array entry 0 to the volume format types to indicate that the tape 13 9* volume was not authenticated by rcp. 13 10* END HISTORY COMMENTS */ 13 11 13 12 13 13 /* General volume types */ 13 14 13 15 dcl (Volume_unauthenticated initial (0), 13 16 Volume_blank initial (1), 13 17 Volume_unknown_format initial (6), 13 18 Volume_unreadable initial (7), 13 19 13 20 /* Tape volume types */ 13 21 13 22 Volume_multics_tape initial (2), 13 23 Volume_gcos_tape initial (3), 13 24 Volume_ibm_tape initial (4), 13 25 Volume_ansi_tape initial (5)) fixed bin static options (constant); 13 26 13 27 /* Printable descriptions of volume types */ 13 28 13 29 dcl Tape_volume_types (0:7) char (16) static options (constant) initial 13 30 ("unauthenticated", 13 31 "blank", 13 32 "Multics", 13 33 "GCOS", 13 34 "IBM", 13 35 "ANSI", 13 36 "unrecognizable", 13 37 "unreadable"); 13 38 13 39 /* ---------------- END include file rcp_volume_formats.incl.pl1 ---------------- */ 759 760 14 1 /* Begin include file ..... iox_modes.incl.pl1 */ 14 2 14 3 /* Written by C. D. Tavares, 03/17/75 */ 14 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 14 5 14 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 14 7 ("stream_input", "stream_output", "stream_input_output", 14 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 14 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 14 10 "direct_input", "direct_output", "direct_update"); 14 11 14 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 14 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 14 14 14 15 dcl (Stream_input initial (1), 14 16 Stream_output initial (2), 14 17 Stream_input_output initial (3), 14 18 Sequential_input initial (4), 14 19 Sequential_output initial (5), 14 20 Sequential_input_output initial (6), 14 21 Sequential_update initial (7), 14 22 Keyed_sequential_input initial (8), 14 23 Keyed_sequential_output initial (9), 14 24 Keyed_sequential_update initial (10), 14 25 Direct_input initial (11), 14 26 Direct_output initial (12), 14 27 Direct_update initial (13)) fixed bin int static options (constant); 14 28 14 29 /* End include file ..... iox_modes.incl.pl1 */ 761 762 15 1 /* START OF: tape_ioi_dcls.incl.pl1 * * * * * * * * * * * * * * * * */ 15 2 15 3 /* Written 22 April 1982 by Chris Jones */ 15 4 /* Modified September 1983 by Chris Jones for reserve_buffer and release_buffer */ 15 5 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 15 6 15 7 /* call tape_ioi_$activate (rsc_ptr, tioi_info_ptr, tioi_id, code); */ 15 8 dcl tape_ioi_$activate entry (ptr, ptr, bit (36) aligned, fixed bin (35)); 15 9 15 10 /* call tape_ioi_$allocate_buffers (tioi_id, req_length, req_number, act_length, act_number, buffer_ptrs, code); */ 15 11 dcl tape_ioi_$allocate_buffers 15 12 entry (bit (36) aligned, fixed bin (21), fixed bin, fixed bin (21), fixed bin, 15 13 dim (*) ptr, fixed bin (35)); 15 14 15 15 /* call tape_ioi_$allocate_work_area (tioi_id, req_size, act_size, work_area_ptr, code); */ 15 16 dcl tape_ioi_$allocate_work_area 15 17 entry (bit (36) aligned, fixed bin (19), fixed bin (19), ptr, fixed bin (35)); 15 18 15 19 /* call tape_ioi_$buffer_status (tioi_id, buffer_ptr, tbs_ptr, code); */ 15 20 dcl tape_ioi_$buffer_status 15 21 entry (bit (36) aligned, ptr, ptr, fixed bin (35)); 15 22 15 23 /* call tape_ioi_$check_order (tioi_id, ocount, rx, code); */ 15 24 dcl tape_ioi_$check_order entry (bit (36) aligned, fixed bin, fixed bin, fixed bin (35)); 15 25 15 26 /* call tape_ioi_$check_read (tioi_id, buffer_ptr, data_len, rx, code); */ 15 27 dcl tape_ioi_$check_read entry (bit (36) aligned, ptr, fixed bin (21), fixed bin, fixed bin (35)); 15 28 15 29 /* call tape_ioi_$check_write (tioi_id, buffer_ptr, rx, code); */ 15 30 dcl tape_ioi_$check_write entry (bit (36) aligned, ptr, fixed bin, fixed bin (35)); 15 31 15 32 /* call tape_ioi_$deactivate (tioi_id, error_ptr, code); */ 15 33 dcl tape_ioi_$deactivate entry (bit (36) aligned, ptr, fixed bin (35)); 15 34 15 35 /* call tape_ioi_$deallocate (tioi_id, code); */ 15 36 dcl tape_ioi_$deallocate entry (bit (36) aligned, fixed bin (35)); 15 37 15 38 /* call tape_ioi_$deallocate_buffers (tioi_id, code); */ 15 39 dcl tape_ioi_$deallocate_buffers 15 40 entry (bit (36) aligned, fixed bin (35)); 15 41 15 42 /* call tape_ioi_$get_mode (tioi_id, mode, data_ptr, code); */ 15 43 dcl tape_ioi_$get_mode entry (bit (36) aligned, char (*), ptr, fixed bin (35)); 15 44 15 45 /* call tape_ioi_$get_statistics (tioi_id, tec_ptr, code); */ 15 46 dcl tape_ioi_$get_statistics 15 47 entry (bit (36) aligned, ptr, fixed bin (35)); 15 48 15 49 /* call tape_ioi_$hardware_status (tioi_id, ths_ptr, code); */ 15 50 dcl tape_ioi_$hardware_status 15 51 entry (bit (36) aligned, ptr, fixed bin (35)); 15 52 15 53 /* call tape_ioi_$list_buffers (tioi_id, state, buffer_ptrs, num_buffers, code); */ 15 54 dcl tape_ioi_$list_buffers entry (bit (36) aligned, fixed bin, dim (*) ptr, fixed bin, fixed bin (35)); 15 55 15 56 /* call tape_ioi_$order (tioi_id, order, count, data_ptr, ocount, rx, code); */ 15 57 dcl tape_ioi_$order entry (bit (36) aligned, char (4), fixed bin, ptr, fixed bin, fixed bin, fixed bin (35)); 15 58 15 59 /* call tape_ioi_$queue_order (tioi_id, order, count, data_ptr, code); */ 15 60 dcl tape_ioi_$queue_order entry (bit (36) aligned, char (4), fixed bin, ptr, fixed bin (35)); 15 61 15 62 /* call tape_ioi_$queue_read (tioi_id, buffer_ptr, code); */ 15 63 dcl tape_ioi_$queue_read entry (bit (36) aligned, ptr, fixed bin (35)); 15 64 15 65 /* call tape_ioi_$queue_write (tioi_id, buffer_ptr, data_len, code); */ 15 66 dcl tape_ioi_$queue_write entry (bit (36) aligned, ptr, fixed bin (21), fixed bin (35)); 15 67 15 68 /* call tape_ioi_$read (tioi_id, buffer_ptr, data_len, rx, code); */ 15 69 dcl tape_ioi_$read entry (bit (36) aligned, ptr, fixed bin (21), fixed bin, fixed bin (35)); 15 70 15 71 /* call tape_ioi_$release_buffer (tioi_id, buffer_ptr, code); */ 15 72 dcl tape_ioi_$release_buffer 15 73 entry (bit (36) aligned, ptr, fixed bin (35)); 15 74 15 75 /* call tape_ioi_$reserve_buffer (tioi_id, buffer_ptr, code); */ 15 76 dcl tape_ioi_$reserve_buffer 15 77 entry (bit (36) aligned, ptr, fixed bin (35)); 15 78 15 79 /* call tape_ioi_$reset_statistics (tioi_id, code); */ 15 80 dcl tape_ioi_$reset_statistics 15 81 entry (bit (36) aligned, fixed bin (35)); 15 82 15 83 /* call tape_ioi_$set_buffer_ready (tioi_id, buffer_ptr, code); */ 15 84 dcl tape_ioi_$set_buffer_ready 15 85 entry (bit (36) aligned, ptr, fixed bin (35)); 15 86 15 87 /* call tape_ioi_$set_mode (tioi_id, mode, data_ptr, code); */ 15 88 dcl tape_ioi_$set_mode entry (bit (36) aligned, char (*), ptr, fixed bin (35)); 15 89 15 90 /* call tape_ioi_$stop_tape (tioi_id, count, rx, code); */ 15 91 dcl tape_ioi_$stop_tape entry (bit (36) aligned, fixed bin, fixed bin, fixed bin (35)); 15 92 15 93 /* call tape_ioi_$write (tioi_id, write_buffer_ptrs, data_len, buffer_ptr, rx, code); */ 15 94 dcl tape_ioi_$write entry (bit (36) aligned, (*) ptr, fixed bin (21), ptr, fixed bin, fixed bin (35)); 15 95 15 96 /* END OF: tape_ioi_dcls.incl.pl1 * * * * * * * * * * * * * * * * */ 763 764 16 1 /* Begin include file ..... tape_ioi_buffer_status.incl.pl1 */ 16 2 16 3 /* This structure defines the data returned by tape_ioi_$buffer_status */ 16 4 /* Modified April 1982 by Chris Jones */ 16 5 /* Modified 2 February 1983 by Chris Jones to add support for reserved buffers. */ 16 6 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 16 7 dcl tbs_ptr ptr; 16 8 16 9 dcl 1 tbs aligned based (tbs_ptr), 16 10 2 version fixed bin, 16 11 2 state fixed bin, 16 12 2 buffer_len fixed bin (21), 16 13 2 data_len fixed bin (21), 16 14 2 bit_count fixed bin (24), 16 15 2 channel_inst bit (6), 16 16 2 data_mode char (4), 16 17 ( 16 18 2 align_mode bit (1), 16 19 2 length_mode bit (1), 16 20 2 recovery_mode bit (1), 16 21 2 reserved bit (1), 16 22 2 pad bit (32) 16 23 ) unal; 16 24 16 25 dcl TBS_VERSION_1 fixed bin internal static init (1) options (constant); 16 26 16 27 dcl TBS_VERSION fixed bin internal static init (1) options (constant); 16 28 16 29 dcl READY_STATE fixed bin internal static options (constant) init (1); 16 30 dcl QUEUED_STATE fixed bin internal static options (constant) init (2); 16 31 dcl SUSPENDED_STATE fixed bin internal static options (constant) init (3); 16 32 dcl READY_AND_RESERVED_STATE fixed bin internal static options (constant) init (4); 16 33 16 34 /* End include file ..... tape_ioi_buffer_status.incl.pl1 */ 765 766 767 end mtape_iox_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/30/87 1323.7 mtape_iox_.pl1 >spec>install>1006>mtape_iox_.pl1 735 1 05/20/83 1846.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 737 2 02/16/84 1452.3 mtape_data.incl.pl1 >ldd>include>mtape_data.incl.pl1 739 3 02/16/84 1452.3 mtape_attach_info.incl.pl1 >ldd>include>mtape_attach_info.incl.pl1 741 4 02/16/84 1452.3 mtape_detach_info.incl.pl1 >ldd>include>mtape_detach_info.incl.pl1 743 5 02/16/84 1452.4 mtape_saved_pfm_info.incl.pl1 >ldd>include>mtape_saved_pfm_info.incl.pl1 745 6 06/11/85 1429.6 mtape_open_close_info.incl.pl1 >ldd>include>mtape_open_close_info.incl.pl1 747 7 02/16/84 1452.4 mtape_pfm_info.incl.pl1 >ldd>include>mtape_pfm_info.incl.pl1 749 8 02/16/84 1452.3 mtape_err_stats.incl.pl1 >ldd>include>mtape_err_stats.incl.pl1 751 9 02/16/84 1452.4 mtape_vol_set.incl.pl1 >ldd>include>mtape_vol_set.incl.pl1 753 10 02/16/84 1452.3 mtape_file_info.incl.pl1 >ldd>include>mtape_file_info.incl.pl1 755 11 02/16/84 1452.3 mtape_constants.incl.pl1 >ldd>include>mtape_constants.incl.pl1 757 12 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 759 13 12/17/86 1550.5 rcp_volume_formats.incl.pl1 >ldd>include>rcp_volume_formats.incl.pl1 761 14 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 763 15 09/16/83 1110.4 tape_ioi_dcls.incl.pl1 >ldd>include>tape_ioi_dcls.incl.pl1 765 16 09/16/83 1110.4 tape_ioi_buffer_status.incl.pl1 >ldd>include>tape_ioi_buffer_status.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. BLANK_VOLUME constant fixed bin(17,0) initial dcl 9-42 ref 275 290 NON_MULT_VOLUME constant fixed bin(17,0) initial dcl 9-42 ref 282 Q_LABELED_VOLUME 000237 constant fixed bin(17,0) initial dcl 11-63 set ref 277* READY_STATE 000244 constant fixed bin(17,0) initial dcl 16-29 set ref 346* READ_IO constant fixed bin(17,0) initial dcl 63 ref 575 602 RECOG_FORMAT_VOLUME constant fixed bin(17,0) initial dcl 9-42 ref 275 285 Sequential_input constant fixed bin(17,0) initial dcl 14-15 ref 260 386 Sequential_input_output constant fixed bin(17,0) initial dcl 14-15 ref 395 Sequential_output constant fixed bin(17,0) initial dcl 14-15 ref 382 Stream_input constant fixed bin(17,0) initial dcl 14-15 ref 260 391 Stream_output constant fixed bin(17,0) initial dcl 14-15 ref 384 Tape_volume_types 000116 constant char(16) initial array unaligned dcl 13-29 set ref 285* UNLABELED_VOLUME constant fixed bin(17,0) initial dcl 9-42 ref 282 297 WRITE_IO constant fixed bin(17,0) initial dcl 64 ref 570 604 abs_ans 53 based char(3) level 2 dcl 2-8 set ref 678* abs_byte 241 based fixed bin(35,0) array level 4 dcl 2-8 set ref 451* 655* actual_iocb_ptr 12 based pointer level 2 dcl 1-6 ref 242 428 497 561 562 594 595 ad_file_format 201 based fixed bin(17,0) level 3 dcl 2-8 set ref 329* 333* addr builtin function dcl 78 ref 364 510 638 667 691 691 ai 000534 automatic structure level 1 dcl 57 set ref 683* 691 691 any_other 000560 stack reference condition dcl 126 ref 210 372 459 536 area_control based structure level 1 dcl 12-20 area_info based structure level 1 dcl 12-7 area_info_version_1 constant fixed bin(17,0) initial dcl 12-3 ref 684 689 areap 2 based pointer level 2 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 530* 642* 670* 696* 700 701 702 703 704 areap 16 000534 automatic pointer level 2 in structure "ai" dcl 57 in procedure "mtape_iox_" set ref 690* 696 arg_buf_len 50 based fixed bin(21,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 564* 597* arg_buf_len parameter fixed bin(21,0) dcl 43 in procedure "mtape_iox_" ref 559 564 592 597 arg_buf_ptr 46 based pointer level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 563* 596* arg_buf_ptr parameter pointer dcl 42 in procedure "mtape_iox_" ref 559 563 592 596 arg_code parameter fixed bin(35,0) dcl 45 set ref 128 166 170* 182* 190* 195* 200* 201* 230 234* 240 240 243* 410* 416 420* 426 426 429* 479* 485 489* 495 495 498* 551* 559 567* 585* 592 599* 613* 624* arg_com_err_flag parameter bit(1) dcl 39 ref 128 156 arg_extend_flag parameter bit(1) unaligned dcl 40 set ref 230 234* 240 240 arg_iocbp parameter pointer dcl 37 set ref 128 155 230 234* 240 240 242 416 420* 426 426 428 485 489* 495 495 497 559 561 562 592 594 595 arg_open_mode parameter fixed bin(17,0) dcl 41 set ref 230 234* 240 240 251 256* 260 260 265 285 306* 315 382 384 386 391 395 arg_options parameter varying char array dcl 38 set ref 128 168* 240 240 306* 426 426 437* 495 495 502* arg_rec_len 51 based fixed bin(21,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" ref 578 arg_rec_len parameter fixed bin(21,0) dcl 44 in procedure "mtape_iox_" set ref 559 566* 578* atdp 6 based pointer level 2 dcl 2-8 set ref 176 177 213 672* attach_data_ptr 16 based pointer level 2 dcl 1-6 set ref 158 214* 244 430 499 539* 561 594 attach_descrip_ptr 14 based pointer level 2 dcl 1-6 set ref 213* 540* attach_info_ptr 274 based pointer level 2 dcl 2-8 set ref 246 433 717* auto_mtd 000114 automatic structure level 1 dcl 56 set ref 509* 510 637* 638 667 668* based_area based area(1024) dcl 122 ref 700 701 702 703 704 block_len 221 based fixed bin(35,0) array level 4 dcl 2-8 set ref 653* block_no 211 based fixed bin(35,0) array level 4 dcl 2-8 set ref 451* 652* 658 658 block_size 176 based fixed bin(21,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 325* 339 350* block_size 63 based fixed bin(21,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 325 buf_len 122 based fixed bin(21,0) array level 3 dcl 2-8 set ref 365* buf_ptrs 62 based pointer array level 3 dcl 2-8 set ref 346* 357 358 676* buf_size 143 based fixed bin(21,0) level 3 dcl 2-8 ref 339 359 buffer_offset 175 based fixed bin(17,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 324* 360 buffer_offset 61 based fixed bin(17,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 324 byte_offset 251 based fixed bin(17,0) array level 4 dcl 2-8 set ref 451* 656* cal_ptr 4 based pointer level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" set ref 713* cal_ptr 4 based pointer level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" set ref 713* char_size 170 based fixed bin(17,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 320* char_size 56 based fixed bin(17,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 320 cldp 12 based pointer level 2 dcl 2-8 set ref 440 441 672* cleanup 000566 stack reference condition dcl 126 ref 163 close 36 based entry variable level 2 dcl 1-6 set ref 219* 380* 474* 543* close_file 132 based entry variable level 2 dcl 1-6 set ref 220* 381* 475* 544* close_info_ptr 300 based pointer level 2 dcl 2-8 set ref 435 719* cmtdp 16 based pointer level 2 dcl 2-8 set ref 672* code 000111 automatic fixed bin(35,0) dcl 55 set ref 168* 169 170 180* 181 182 187* 188 190 193* 194 195 243* 255* 256* 264* 265* 277* 278 284* 285* 304 306* 307 312* 313 341* 342 346* 347 350* 351 353* 354 354* 356 410 437* 438 443* 444* 446* 479 502* 503 523* 525* 526* 531* 533* 551 572* 691* 692 693* com_err_ 000030 constant entry external dcl 82 ref 625 com_err_flag 000102 automatic bit(1) dcl 50 set ref 156* 174* 174 625 com_sent 000104 automatic bit(1) dcl 51 set ref 513* 518 520* comment 11 based char(80) level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" set ref 366 366* comment 10 based char(80) level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" set ref 453 453* comment 2 based char(64) level 2 in structure "mtape_detach_info" dcl 4-8 in procedure "mtape_iox_" ref 518 521 control 1 000534 automatic structure level 2 in structure "ai" dcl 57 in procedure "mtape_iox_" control 66 based entry variable level 2 in structure "iocb" dcl 1-6 in procedure "mtape_iox_" set ref 221* 466* conversion 174 based fixed bin(17,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 323* conversion 60 based fixed bin(17,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 323 cs_ptr 2 based pointer level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" set ref 712* cs_ptr 2 based pointer level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" set ref 712* cur_block 160 based structure level 3 dcl 2-8 cur_buf_idx 145 based fixed bin(17,0) level 3 dcl 2-8 set ref 357* 358 cur_buf_ptr 160 based pointer level 4 dcl 2-8 set ref 358* 364 677* current_file 160 based structure level 2 dcl 2-8 data_buffers 62 based structure level 2 dcl 2-8 data_xfer_args 46 based structure level 2 dcl 2-8 default_pfm_prefix 15 based char(21) level 2 dcl 3-8 set ref 731* define_area_ 000132 constant entry external dcl 115 ref 691 demount_comment 56 based char(64) level 2 dcl 9-9 set ref 521* density 2 based fixed bin(35,0) level 2 dcl 3-8 ref 273 desc_len 000110 automatic fixed bin(21,0) dcl 54 set ref 176* 177 309* 310 440* 441 506* 507 desc_string based varying char dcl 121 set ref 176 177* 309 310* 440 441* 506 507* detach 136 based entry variable level 2 dcl 1-6 set ref 216* 379* 463* 545* detach_info_ptr 302 based pointer level 2 dcl 2-8 set ref 501 720* detach_iocb 26 based entry variable level 2 dcl 1-6 set ref 215* 378* 462* 546* display 23 based bit(1) level 2 in structure "mtape_attach_info" dcl 3-8 in procedure "mtape_iox_" ref 175 display 76 based bit(1) level 3 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" ref 308 display 22 based bit(1) level 2 in structure "mtape_detach_info" dcl 4-8 in procedure "mtape_iox_" ref 505 display 34 based bit(1) level 3 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" ref 439 display_errors 55 based bit(1) level 2 dcl 2-8 ref 174 dtdp 14 based pointer level 2 dcl 2-8 set ref 506 507 672* ecode parameter fixed bin(35,0) dcl 621 set ref 619 624 625* err_entry based structure level 1 dcl 8-12 error_lock 52 based fixed bin(35,0) level 2 dcl 2-8 set ref 314* 447* 565 567 581* 598 599 609* error_table_$bad_label 000016 external static fixed bin(35,0) dcl 71 ref 284 error_table_$bad_mode 000014 external static fixed bin(35,0) dcl 70 ref 255 264 error_table_$inconsistent 000020 external static fixed bin(35,0) dcl 72 ref 200 error_table_$long_record 000022 external static fixed bin(35,0) dcl 73 ref 579 607 error_table_$no_operation 000010 external static fixed bin(35,0) dcl 68 ref 571 error_table_$not_detached 000012 external static fixed bin(35,0) dcl 69 set ref 159* extend 1 000534 automatic bit(1) level 3 packed unaligned dcl 57 set ref 685* fi_current 34 based pointer level 2 dcl 2-8 set ref 319 444 674* fi_head 30 based pointer level 2 dcl 2-8 set ref 674* fi_ptr 000614 automatic pointer dcl 10-4 set ref 319* 320 321 322 323 324 325 326 327 328 329 333 fi_tail 32 based pointer level 2 dcl 2-8 set ref 674* file_blocked 202 based bit(1) level 3 dcl 2-8 set ref 330* 334* file_close 330 based entry variable level 3 dcl 2-8 ref 443 file_format 52 based fixed bin(17,0) level 3 dcl 10-8 ref 328 329 333 file_open 324 based entry variable level 3 dcl 2-8 ref 312 first_file 205 based bit(1) level 3 dcl 2-8 set ref 271 338* flag_ant_name 271 based char(32) array level 4 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 728* flag_ant_name 31 based char(32) array level 4 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 724* flag_name 21 based char(32) array level 4 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 723* flag_name 261 based char(32) array level 4 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 727* get_chars 46 based entry variable level 2 dcl 1-6 set ref 392* 402* 469* hbound builtin function dcl 78 ref 251 254 658 hcs_$reset_ips_mask 000034 constant entry external dcl 84 ref 210 224 372 408 459 477 536 549 hcs_$set_ips_mask 000032 constant entry external dcl 83 ref 211 373 460 537 hdw_mode 173 based fixed bin(17,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 322* 353* hdw_mode 57 based fixed bin(17,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 322 i 000105 automatic fixed bin(17,0) dcl 52 set ref 251* 251* 254 679* 680 init_to_zero 34 based structure level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" init_to_zero 66 based structure level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" io_echan 42 based fixed bin(71,0) level 2 dcl 2-8 set ref 533 533* ioa_ 000026 constant entry external dcl 82 ref 177 310 366 441 453 507 iocb based structure level 1 dcl 1-6 iocb_ptr 4 based pointer level 2 dcl 2-8 set ref 245* 431* 500* 562* 595* 671* iocbp 000100 automatic pointer dcl 49 set ref 155* 158 159 213 214 215 216 217 218 219 220 221 223* 242* 244 245 375 376 377 378 379 380 381 382 384 387 388 389 392 393 396 397 398 399 402 403 404 406* 428* 430 431 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476* 497* 499 500 539 540 541 542 543 544 545 546 547* 671 iox_$err_not_attached 000130 constant entry external dcl 114 ref 541 542 543 544 545 546 iox_$err_not_closed 000126 constant entry external dcl 113 ref 376 377 378 379 iox_$err_not_open 000124 constant entry external dcl 112 ref 219 220 468 469 470 471 472 473 474 475 iox_$propagate 000122 constant entry external dcl 111 ref 223 406 476 547 iox_code 000112 automatic fixed bin(35,0) dcl 55 set ref 571* 577* 579 579 581 585 606* 607 607 609 613 iox_modes 000000 constant char(24) initial array dcl 14-6 set ref 265* 285* ipc_$delete_ev_chn 000136 constant entry external dcl 117 ref 531 533 ips_mask 000107 automatic bit(36) dcl 53 set ref 209* 210* 210* 211* 224* 224* 371* 372* 372* 373* 408* 408* 458* 459* 459* 460* 477* 477* 535* 536* 536* 537* 549* 549* lab_bufp 150 based pointer level 3 dcl 2-8 set ref 677* label_buffer 150 based structure level 2 dcl 2-8 labeled 24 based bit(1) level 2 dcl 3-8 set ref 199 275 290 295* 297 301* last_io 207 based fixed bin(17,0) level 3 dcl 2-8 set ref 336* 450* 570 575* 602 604* last_ur_status_ptr 40 based pointer level 2 dcl 2-8 set ref 676* lbound builtin function dcl 78 ref 357 658 length builtin function dcl 78 in procedure "mtape_iox_" ref 176 309 440 506 length 164 based fixed bin(21,0) level 4 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 325* 359* 361 448* 653 length_mode 62 based fixed bin(17,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 321 length_mode 172 based fixed bin(17,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 321* 354* log_record 167 based fixed bin(21,0) level 4 dcl 2-8 set ref 448* 584* 584 612* 612 654 log_record_ptr 162 based pointer level 4 dcl 2-8 set ref 364* 677* lrec_no 231 based fixed bin(35,0) array level 4 dcl 2-8 set ref 654* lrec_rrc 211 based structure level 3 dcl 2-8 lrec_rrcx 210 based fixed bin(17,0) level 3 dcl 2-8 set ref 450* 652 653 654 655 656 657* 657 658 658* maip 000576 automatic pointer dcl 3-4 set ref 175 199 246* 263 273 275 290 295 297 301 433* 700* 708 709 717 731 731 mcip 000606 automatic pointer dcl 6-5 set ref 435* 439 453 453 702* 711 712 713 714 719 mdip 000600 automatic pointer dcl 4-4 set ref 501* 505 518 521 523 703* 715 720 module_id 2 based char(21) level 2 dcl 7-8 set ref 201* 291* 299* 722* moip 000604 automatic pointer dcl 6-4 set ref 247* 308 366 366 434* 701* 710 712 713 714 718 mount_echan 44 based fixed bin(71,0) level 2 dcl 2-8 set ref 531 531* mounted 110 based bit(1) level 2 dcl 9-9 ref 515 635 mpfmip 000610 automatic pointer dcl 7-4 set ref 199 201 248* 251 251 254 282 291 297 299 436* 704* 716 721 722 723 724 725 726 727 728 729 730 msg parameter char unaligned dcl 622 set ref 619 625* mspfmip 000602 automatic pointer dcl 5-5 set ref 249* 315 315 315 mtape_attach_info based structure level 1 dcl 3-8 set ref 700 mtape_attach_info_version_1 000166 constant char(8) initial unaligned dcl 3-6 ref 708 709 mtape_close_info based structure level 1 dcl 6-41 set ref 702 mtape_close_info_version_1 000160 constant char(8) initial unaligned dcl 6-8 ref 711 mtape_control_$control 000100 constant entry external dcl 102 ref 221 466 mtape_data based structure level 1 dcl 2-8 set ref 509 637 mtape_data_version_1 000170 constant char(8) initial unaligned dcl 2-6 ref 669 mtape_detach_info based structure level 1 dcl 4-8 set ref 703 mtape_detach_info_version_1 000164 constant char(8) initial unaligned dcl 4-6 ref 715 mtape_err_stats based structure level 1 dcl 8-6 mtape_file_info based structure level 1 dcl 10-8 mtape_io_$allocate_buffers 000106 constant entry external dcl 105 ref 350 mtape_io_$order 000112 constant entry external dcl 107 ref 523 525 mtape_io_$set_mode 000110 constant entry external dcl 106 ref 353 354 mtape_io_$stop_tape 000114 constant entry external dcl 108 ref 444 mtape_iox_$close 000070 constant entry external dcl 98 ref 380 mtape_iox_$close_file 000072 constant entry external dcl 99 ref 381 mtape_iox_$detach 000074 constant entry external dcl 100 ref 216 463 mtape_iox_$detach_iocb 000076 constant entry external dcl 101 ref 215 462 mtape_iox_$open 000064 constant entry external dcl 96 ref 217 464 mtape_iox_$open_file 000066 constant entry external dcl 97 ref 218 465 mtape_iox_$read 000120 constant entry external dcl 110 ref 387 392 396 402 mtape_iox_$write 000116 constant entry external dcl 109 ref 382 384 397 403 mtape_mount_cntl_$demount 000062 constant entry external dcl 95 ref 526 639 mtape_mount_cntl_$mount 000060 constant entry external dcl 94 ref 180 mtape_open_info based structure level 1 dcl 6-10 set ref 701 mtape_open_info_version_1 000162 constant char(8) initial unaligned dcl 6-7 ref 710 mtape_parse_$attach 000050 constant entry external dcl 90 ref 168 mtape_parse_$close 000054 constant entry external dcl 92 ref 437 mtape_parse_$detach 000056 constant entry external dcl 93 ref 502 mtape_parse_$open 000052 constant entry external dcl 91 ref 306 mtape_pfm_info based structure level 1 dcl 7-8 set ref 704 mtape_pfm_info_version_1 000156 constant char(8) initial unaligned dcl 7-6 ref 716 mtape_position_ 000102 constant entry external dcl 103 ref 388 393 398 404 mtape_position_$read_length 000104 constant entry external dcl 104 ref 389 399 mtape_saved_pfm_info based structure level 1 dcl 5-9 mtape_util_$error 000040 constant entry external dcl 86 ref 201 256 265 285 291 299 572 mtape_util_$get_statistics 000042 constant entry external dcl 87 ref 446 mtape_util_$init_pfm 000044 constant entry external dcl 88 ref 187 mtape_util_$user_query 000046 constant entry external dcl 89 ref 277 mtape_vol_set based structure level 1 dcl 9-9 mtdp 000574 automatic pointer dcl 2-4 set ref 157* 168* 174 176 177 180* 187* 193 193* 201* 213 214 244* 245 246 247 248 249 250 256* 265* 271 277* 285* 291* 299* 306* 309 310 312 312* 314 319 320 321 322 323 324 325 325 326 327 329 330 333 334 336 336 336 337 337 338 339 339 339 341 343 346 346 349 350* 350 353* 353 354* 354 357 357 358 358 358 359 359 360 360 361 361 361 363 364 364 364 365 375 430* 431 432 433 434 435 436 437* 440 441 443 443* 444 444* 446* 447 448 448 448 448 450 450 451 451 451 499* 500 501 502* 506 507 509 510* 514 516 517 523* 525* 526* 530 531 531 533 533 561* 562 563 564 565 567 570 572* 575 577 577* 578 581 584 584 594* 595 596 597 598 599 602 602 604 606 606* 609 612 612 634 635 635 637 638* 639* 642 643* 652 652 652 653 653 653 654 654 654 655 655 655 656 656 656 657 657 658 658 658 658 667* 669 670 671 672 672 672 672 672 673 673 673 674 674 674 675 675 675 676 676 676 677 677 677 678 678 680 696 700 701 702 703 704 717 718 719 720 721 myname 000174 constant char(6) initial unaligned dcl 61 set ref 625* 687 name 1 based char(32) level 2 dcl 1-6 ref 159 native_file 65 based bit(1) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 327 native_file 203 based bit(1) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 327* nbufs 142 based fixed bin(17,0) level 3 dcl 2-8 set ref 339 343* 349 next_vs_ptr 4 based pointer level 2 dcl 9-9 ref 528 no_labels_ok 16 based bit(1) level 2 dcl 7-8 ref 199 282 297 nsusp_bufs 000106 automatic fixed bin(17,0) dcl 52 set ref 346* null builtin function dcl 78 ref 157 158 315 353 353 354 354 444 467 514 523 523 525 525 539 540 634 635 643 670 672 673 674 675 676 677 690 712 713 714 null_options 000172 constant varying char(1) initial array dcl 62 set ref 234* 420* 489* opdp 10 based pointer level 2 dcl 2-8 set ref 309 310 375 672* open 32 based entry variable level 2 dcl 1-6 set ref 217* 376* 464* 541* open_descrip_ptr 20 based pointer level 2 dcl 1-6 set ref 375* 467* open_file 126 based entry variable level 2 dcl 1-6 set ref 218* 377* 465* 542* open_info_ptr 276 based pointer level 2 dcl 2-8 set ref 247 434 718* open_mode 12 based fixed bin(17,0) level 2 dcl 5-9 set ref 315 315* open_modes_allowed 10 based fixed bin(17,0) array level 2 dcl 7-8 ref 251 251 254 output 000103 automatic bit(1) dcl 51 set ref 260* 262* 263 271 315 361 owner 2 000534 automatic char(32) level 2 packed unaligned dcl 57 set ref 687* per_file_info 25 based structure level 2 dcl 10-8 pfm_arg_values based structure level 1 dcl 6-57 pfm_close_options 261 based structure level 2 dcl 7-8 pfm_entries based structure level 1 dcl 2-103 pfm_info_ptr 304 based pointer level 2 dcl 2-8 set ref 248 436 721* pfm_init 320 based entry variable level 3 dcl 2-8 ref 193 pfm_name 310 based char(32) level 2 dcl 2-8 set ref 678* pfm_open_options 21 based structure level 2 dcl 7-8 pfm_opt_flags 21 based structure array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" pfm_opt_flags 261 based structure array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" pfm_opt_str_name 211 based char(32) array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 726* pfm_opt_str_name 451 based char(32) array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 730* pfm_opt_value_name 401 based char(32) array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 729* pfm_opt_value_name 141 based char(32) array level 3 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 725* pfm_options based structure level 1 dcl 7-21 pfm_prefix 7 based char(21) level 2 dcl 3-8 set ref 731* pfm_required_entries 320 based structure level 2 dcl 2-8 phy_block 157 based fixed bin(17,0) level 3 dcl 2-8 ref 652 position 156 based structure level 2 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" position 62 based entry variable level 2 in structure "iocb" dcl 1-6 in procedure "mtape_iox_" set ref 388* 393* 398* 404* 473* prev_block_no 200 based fixed bin(21,0) level 3 dcl 2-8 set ref 336* processed 165 based fixed bin(21,0) level 4 dcl 2-8 set ref 360* 361 364 448* 656 put_chars 52 based entry variable level 2 dcl 1-6 set ref 384* 403* 468* read 334 based entry variable level 3 dcl 2-8 ref 577 read_length 122 based entry variable level 2 dcl 1-6 set ref 389* 399* 472* read_record 72 based entry variable level 2 dcl 1-6 set ref 387* 396* 471* record_size 64 based fixed bin(21,0) level 3 in structure "mtape_file_info" dcl 10-8 in procedure "mtape_iox_" ref 326 record_size 177 based fixed bin(21,0) level 3 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 326* release_area_ 000134 constant entry external dcl 116 ref 530 642 remain 166 based fixed bin(21,0) level 4 dcl 2-8 set ref 361* 363* 448* ring 27 based bit(1) level 2 dcl 3-8 ref 263 run 146 based bit(1) level 3 dcl 2-8 set ref 337* saved_pfm_info_ptr 306 based pointer level 2 dcl 2-8 set ref 249 676* size 13 000534 automatic fixed bin(18,0) level 2 dcl 57 set ref 688* so_ptr 6 based pointer level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" set ref 714* so_ptr 6 based pointer level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" set ref 714* sys_info$max_seg_size 000024 external static fixed bin(35,0) dcl 74 ref 688 tape_blk based char(1) array unaligned dcl 2-115 set ref 364 tape_infop 36 based pointer level 2 dcl 2-8 set ref 675* tape_ioi_$deallocate_buffers 000140 constant entry external dcl 15-39 ref 341 tape_ioi_$list_buffers 000142 constant entry external dcl 15-54 ref 346 tioi_id 273 based bit(36) level 2 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 341* 346* 517* tioi_id 101 based bit(36) level 2 in structure "mtape_vol_set" dcl 9-9 in procedure "mtape_iox_" ref 517 tlb 154 based pointer level 2 dcl 2-8 set ref 675* tot_bytes_processed 206 based fixed bin(35,0) level 3 dcl 2-8 set ref 336* 655 unload 23 based bit(1) level 2 dcl 4-8 ref 523 unspec builtin function dcl 78 set ref 668* 683* user_info_$process_type 000036 constant entry external dcl 85 ref 679 user_type 54 based bit(1) level 2 dcl 2-8 set ref 680* version based char(8) level 2 in structure "mtape_open_info" dcl 6-10 in procedure "mtape_iox_" set ref 710* version based char(8) level 2 in structure "mtape_pfm_info" dcl 7-8 in procedure "mtape_iox_" set ref 716* version 000534 automatic fixed bin(17,0) level 2 in structure "ai" dcl 57 in procedure "mtape_iox_" set ref 684* version based char(8) level 2 in structure "mtape_detach_info" dcl 4-8 in procedure "mtape_iox_" set ref 715* version based char(8) level 2 in structure "mtape_attach_info" dcl 3-8 in procedure "mtape_iox_" set ref 708* 709* version based char(8) level 2 in structure "mtape_close_info" dcl 6-41 in procedure "mtape_iox_" set ref 711* version based char(8) level 2 in structure "mtape_data" dcl 2-8 in procedure "mtape_iox_" set ref 669* version_of_area 14 000534 automatic fixed bin(17,0) level 2 dcl 57 set ref 689* volume_check 105 based fixed bin(17,0) level 2 dcl 9-9 ref 275 275 282 282 285 290 297 volume_density 103 based fixed bin(17,0) level 2 dcl 9-9 set ref 273* volume_id 26 based char(32) level 2 dcl 9-9 set ref 285* 291* volume_name 16 based char(32) level 2 dcl 9-9 set ref 299* volume_type 104 based fixed bin(17,0) level 2 dcl 9-9 ref 285 vs_current 24 based pointer level 2 dcl 2-8 set ref 250 432 516* 635 635 673* vs_head 20 based pointer level 2 dcl 2-8 set ref 514 673* vs_mounted_tail 26 based pointer level 2 dcl 2-8 set ref 675* vs_ptr 000612 automatic pointer dcl 9-5 set ref 250* 273 275 275 282 282 285 285 285 290 291 297 299 432* 514* 514* 515 516 517 521* 528 vs_tail 22 based pointer level 2 dcl 2-8 set ref 673* write 340 based entry variable level 3 dcl 2-8 ref 606 write_after_read 204 based bit(1) level 3 dcl 2-8 set ref 337* 602* write_record 76 based entry variable level 2 dcl 1-6 set ref 382* 397* 470* zero_on_alloc 1(01) 000534 automatic bit(1) level 3 packed unaligned dcl 57 set ref 686* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AT_BOFD internal static fixed bin(17,0) initial dcl 11-44 AT_BOFH internal static fixed bin(17,0) initial dcl 11-44 AT_BOFT internal static fixed bin(17,0) initial dcl 11-44 AT_EOF internal static fixed bin(17,0) initial dcl 11-44 AT_EOFD internal static fixed bin(17,0) initial dcl 11-44 AT_EOFH internal static fixed bin(17,0) initial dcl 11-44 AT_EOFT internal static fixed bin(17,0) initial dcl 11-44 AT_IFD internal static fixed bin(17,0) initial dcl 11-44 BOF_LABEL internal static fixed bin(17,0) initial dcl 11-56 Direct_input internal static fixed bin(17,0) initial dcl 14-15 Direct_output internal static fixed bin(17,0) initial dcl 14-15 Direct_update internal static fixed bin(17,0) initial dcl 14-15 EOF_LABEL internal static fixed bin(17,0) initial dcl 11-56 EOV_LABEL internal static fixed bin(17,0) initial dcl 11-56 FILES_PER_FILE_GRP internal static fixed bin(17,0) initial dcl 11-44 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 14-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 14-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 14-15 MTAPE_ALLOC_FI internal static fixed bin(17,0) initial dcl 11-9 MTAPE_ALLOC_LR internal static fixed bin(17,0) initial dcl 11-9 MTAPE_ALLOC_STR internal static fixed bin(17,0) initial dcl 11-9 MTAPE_ALLOC_VS internal static fixed bin(17,0) initial dcl 11-9 MTAPE_CV_BCD internal static fixed bin(17,0) initial dcl 11-34 MTAPE_CV_EBCDIC internal static fixed bin(17,0) initial dcl 11-34 MTAPE_CV_UC_ASCII internal static fixed bin(17,0) initial dcl 11-34 MTAPE_CV_UC_EBCDIC internal static fixed bin(17,0) initial dcl 11-34 MTAPE_HWM_BCD internal static fixed bin(17,0) initial dcl 11-27 MTAPE_HWM_BIN internal static fixed bin(17,0) initial dcl 11-27 MTAPE_HWM_NINE internal static fixed bin(17,0) initial dcl 11-27 MTAPE_NO_CONVERSION internal static fixed bin(17,0) initial dcl 11-34 MTAPE_SPEED_VALUES internal static fixed bin(17,0) initial array dcl 11-22 MTAPE_UNSPECIFIED internal static fixed bin(17,0) initial dcl 11-34 MTAPE_VALID_DENSITIES internal static fixed bin(17,0) initial array dcl 11-17 MTAPE_VOLUME internal static fixed bin(17,0) initial dcl 9-42 MULT_PRIOR_VOLUME internal static fixed bin(17,0) initial dcl 9-42 NOT_POSITIONED_IN_FILE internal static fixed bin(17,0) initial dcl 11-44 QUEUED_STATE internal static fixed bin(17,0) initial dcl 16-30 Q_ABORT_FILE internal static fixed bin(17,0) initial dcl 11-63 Q_INCORRECT_VOLUME internal static fixed bin(17,0) initial dcl 11-63 Q_NO_NEXT_VOLUME internal static fixed bin(17,0) initial dcl 11-63 Q_UNEXPIRED_FILE internal static fixed bin(17,0) initial dcl 11-63 Q_UNEXPIRED_VOLUME internal static fixed bin(17,0) initial dcl 11-63 READY_AND_RESERVED_STATE internal static fixed bin(17,0) initial dcl 16-32 SUSPENDED_STATE internal static fixed bin(17,0) initial dcl 16-31 Sequential_update internal static fixed bin(17,0) initial dcl 14-15 Stream_input_output internal static fixed bin(17,0) initial dcl 14-15 TBS_VERSION internal static fixed bin(17,0) initial dcl 16-27 TBS_VERSION_1 internal static fixed bin(17,0) initial dcl 16-25 Volume_ansi_tape internal static fixed bin(17,0) initial dcl 13-15 Volume_blank internal static fixed bin(17,0) initial dcl 13-15 Volume_gcos_tape internal static fixed bin(17,0) initial dcl 13-15 Volume_ibm_tape internal static fixed bin(17,0) initial dcl 13-15 Volume_multics_tape internal static fixed bin(17,0) initial dcl 13-15 Volume_unauthenticated internal static fixed bin(17,0) initial dcl 13-15 Volume_unknown_format internal static fixed bin(17,0) initial dcl 13-15 Volume_unreadable internal static fixed bin(17,0) initial dcl 13-15 all_buf_lens based fixed bin(21,0) array dcl 2-114 all_buf_ptrs based pointer array dcl 2-113 area_infop automatic pointer dcl 12-5 es_ptr automatic pointer dcl 8-4 iox_$iocb_version_sentinel external static char(4) dcl 1-51 mtape_fi_version_1 internal static char(8) initial unaligned dcl 10-6 mtape_saved_pfm_info_version_1 internal static char(8) initial unaligned dcl 5-7 mtape_vs_version_1 internal static char(8) initial unaligned dcl 9-7 short_iox_modes internal static char(4) initial array dcl 14-12 tape_ioi_$activate 000000 constant entry external dcl 15-8 tape_ioi_$allocate_buffers 000000 constant entry external dcl 15-11 tape_ioi_$allocate_work_area 000000 constant entry external dcl 15-16 tape_ioi_$buffer_status 000000 constant entry external dcl 15-20 tape_ioi_$check_order 000000 constant entry external dcl 15-24 tape_ioi_$check_read 000000 constant entry external dcl 15-27 tape_ioi_$check_write 000000 constant entry external dcl 15-30 tape_ioi_$deactivate 000000 constant entry external dcl 15-33 tape_ioi_$deallocate 000000 constant entry external dcl 15-36 tape_ioi_$get_mode 000000 constant entry external dcl 15-43 tape_ioi_$get_statistics 000000 constant entry external dcl 15-46 tape_ioi_$hardware_status 000000 constant entry external dcl 15-50 tape_ioi_$order 000000 constant entry external dcl 15-57 tape_ioi_$queue_order 000000 constant entry external dcl 15-60 tape_ioi_$queue_read 000000 constant entry external dcl 15-63 tape_ioi_$queue_write 000000 constant entry external dcl 15-66 tape_ioi_$read 000000 constant entry external dcl 15-69 tape_ioi_$release_buffer 000000 constant entry external dcl 15-72 tape_ioi_$reserve_buffer 000000 constant entry external dcl 15-76 tape_ioi_$reset_statistics 000000 constant entry external dcl 15-80 tape_ioi_$set_buffer_ready 000000 constant entry external dcl 15-84 tape_ioi_$set_mode 000000 constant entry external dcl 15-88 tape_ioi_$stop_tape 000000 constant entry external dcl 15-91 tape_ioi_$write 000000 constant entry external dcl 15-94 tbs based structure level 1 dcl 16-9 tbs_ptr automatic pointer dcl 16-7 NAMES DECLARED BY EXPLICIT CONTEXT. ATTACH_ERROR 004301 constant entry internal dcl 619 ref 159 693 CLEANUP 004351 constant entry internal dcl 632 ref 163 171 183 189 196 CLOSE_EXIT 003360 constant label dcl 479 ref 438 DETACH_EXIT 004061 constant label dcl 551 ref 503 INIT_ENVIRONMENT 004452 constant entry internal dcl 665 ref 165 OPEN_EXIT 002674 constant label dcl 410 ref 258 269 278 304 307 313 342 347 351 356 RECORD_HISTORY 004426 constant entry internal dcl 650 ref 576 605 close 002703 constant entry external dcl 416 close_file 002761 constant entry external dcl 426 close_file_int 002741 constant entry external dcl 426 ref 420 detach 003441 constant entry external dcl 495 detach_int 003421 constant entry external dcl 495 ref 489 detach_iocb 003365 constant entry external dcl 485 mtape_attach 000612 constant entry external dcl 128 mtape_iox_ 000577 constant entry external dcl 20 open 001242 constant entry external dcl 230 open_file 001335 constant entry external dcl 240 open_file_int 001313 constant entry external dcl 240 ref 234 read 004071 constant entry external dcl 559 read_return 004204 constant label dcl 585 ref 573 582 write 004214 constant entry external dcl 592 write_return 004277 constant label dcl 613 ref 610 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6040 6204 5174 6050 Length 7066 5174 144 646 644 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mtape_iox_ 614 external procedure is an external procedure. on unit on line 163 64 on unit on unit on line 210 70 on unit on unit on line 372 70 on unit on unit on line 459 70 on unit on unit on line 536 70 on unit ATTACH_ERROR internal procedure shares stack frame of external procedure mtape_iox_. CLEANUP 72 internal procedure is called by several nonquick procedures. RECORD_HISTORY internal procedure shares stack frame of external procedure mtape_iox_. INIT_ENVIRONMENT internal procedure shares stack frame of external procedure mtape_iox_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mtape_iox_ 000100 iocbp mtape_iox_ 000102 com_err_flag mtape_iox_ 000103 output mtape_iox_ 000104 com_sent mtape_iox_ 000105 i mtape_iox_ 000106 nsusp_bufs mtape_iox_ 000107 ips_mask mtape_iox_ 000110 desc_len mtape_iox_ 000111 code mtape_iox_ 000112 iox_code mtape_iox_ 000114 auto_mtd mtape_iox_ 000534 ai mtape_iox_ 000574 mtdp mtape_iox_ 000576 maip mtape_iox_ 000600 mdip mtape_iox_ 000602 mspfmip mtape_iox_ 000604 moip mtape_iox_ 000606 mcip mtape_iox_ 000610 mpfmip mtape_iox_ 000612 vs_ptr mtape_iox_ 000614 fi_ptr mtape_iox_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ent_var call_ext_in_desc call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op ext_entry ext_entry_desc int_entry op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ define_area_ hcs_$reset_ips_mask hcs_$set_ips_mask ioa_ iox_$err_not_attached iox_$err_not_closed iox_$err_not_open iox_$propagate ipc_$delete_ev_chn mtape_control_$control mtape_io_$allocate_buffers mtape_io_$order mtape_io_$set_mode mtape_io_$stop_tape mtape_iox_$close mtape_iox_$close_file mtape_iox_$detach mtape_iox_$detach_iocb mtape_iox_$open mtape_iox_$open_file mtape_iox_$read mtape_iox_$write mtape_mount_cntl_$demount mtape_mount_cntl_$mount mtape_parse_$attach mtape_parse_$close mtape_parse_$detach mtape_parse_$open mtape_position_ mtape_position_$read_length mtape_util_$error mtape_util_$get_statistics mtape_util_$init_pfm mtape_util_$user_query release_area_ tape_ioi_$deallocate_buffers tape_ioi_$list_buffers user_info_$process_type THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_label error_table_$bad_mode error_table_$inconsistent error_table_$long_record error_table_$no_operation error_table_$not_detached sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000576 128 000604 155 000627 156 000633 157 000636 158 000640 159 000643 160 000662 163 000663 165 000705 166 000706 168 000710 169 000731 170 000733 171 000734 172 000740 174 000741 175 000744 176 000747 177 000751 180 000774 181 001005 182 001007 183 001010 184 001014 187 001015 188 001026 189 001030 190 001034 191 001036 193 001037 194 001050 195 001052 196 001053 197 001057 199 001060 200 001066 201 001071 203 001120 209 001121 210 001122 211 001147 213 001162 214 001166 215 001170 216 001175 217 001200 218 001203 219 001206 220 001211 221 001213 223 001216 224 001224 226 001234 230 001235 234 001254 236 001305 240 001306 242 001354 243 001361 244 001363 245 001365 246 001366 247 001370 248 001372 249 001374 250 001376 251 001400 253 001413 254 001415 255 001420 256 001423 258 001453 260 001454 262 001464 263 001466 264 001473 265 001476 269 001545 271 001546 273 001553 275 001557 277 001566 278 001601 280 001603 282 001604 284 001620 285 001623 289 001677 290 001700 291 001705 295 001752 296 001755 297 001756 299 001766 301 002023 304 002025 306 002027 307 002055 308 002057 309 002062 310 002065 312 002110 313 002121 314 002123 315 002125 319 002141 320 002143 321 002145 322 002147 323 002151 324 002153 325 002155 326 002160 327 002162 328 002164 329 002167 330 002171 331 002173 333 002174 334 002175 336 002176 337 002201 338 002203 339 002205 341 002212 342 002223 343 002225 344 002227 346 002230 347 002260 349 002262 350 002265 351 002300 353 002302 354 002337 356 002376 357 002400 358 002403 359 002406 360 002410 361 002412 363 002420 364 002421 365 002425 366 002437 371 002467 372 002470 373 002515 375 002530 376 002534 377 002541 378 002543 379 002545 380 002547 381 002552 382 002555 384 002566 386 002575 387 002577 388 002603 389 002606 390 002611 391 002612 392 002614 393 002620 394 002623 395 002624 396 002626 397 002632 398 002635 399 002640 400 002643 402 002644 403 002650 404 002653 406 002656 408 002664 410 002674 412 002676 416 002677 420 002713 422 002734 426 002735 428 002776 429 003003 430 003004 431 003006 432 003007 433 003011 434 003013 435 003015 436 003017 437 003021 438 003042 439 003044 440 003047 441 003052 443 003075 444 003106 446 003124 447 003135 448 003137 450 003143 451 003145 453 003203 458 003233 459 003234 460 003261 462 003274 463 003302 464 003305 465 003310 466 003313 467 003316 468 003320 469 003324 470 003326 471 003330 472 003332 473 003334 474 003336 475 003340 476 003342 477 003350 479 003360 481 003362 485 003363 489 003375 491 003416 495 003417 497 003456 498 003463 499 003464 500 003466 501 003467 502 003471 503 003512 505 003514 506 003517 507 003522 509 003545 510 003551 513 003553 514 003554 515 003562 516 003565 517 003567 518 003571 520 003600 521 003602 523 003605 525 003645 526 003702 528 003713 530 003717 531 003727 533 003743 535 003757 536 003760 537 004005 539 004020 540 004023 541 004024 542 004031 543 004033 544 004035 545 004037 546 004041 547 004043 549 004051 551 004061 554 004063 559 004064 561 004101 562 004107 563 004110 564 004113 565 004115 566 004117 567 004120 568 004121 570 004122 571 004125 572 004130 573 004153 575 004154 576 004156 577 004157 578 004170 579 004174 581 004201 582 004202 584 004203 585 004204 587 004206 592 004207 594 004224 595 004232 596 004233 597 004236 598 004240 599 004242 600 004243 602 004244 604 004251 605 004253 606 004254 607 004265 609 004272 610 004274 612 004275 613 004277 615 004300 619 004301 624 004312 625 004315 628 004347 632 004350 634 004356 635 004363 637 004373 638 004376 639 004400 642 004411 643 004422 646 004425 650 004426 652 004427 653 004433 654 004435 655 004437 656 004441 657 004444 658 004445 661 004451 665 004452 667 004453 668 004455 669 004460 670 004464 671 004466 672 004471 673 004504 674 004513 675 004522 676 004531 677 004553 678 004562 679 004570 680 004577 683 004605 684 004610 685 004612 686 004614 687 004616 688 004621 689 004624 690 004626 691 004630 692 004642 693 004644 694 004652 696 004653 700 004656 701 004664 702 004672 703 004700 704 004706 708 004714 710 004720 711 004724 712 004730 713 004733 714 004736 715 004741 716 004745 717 004750 718 004752 719 004755 720 004760 721 004763 722 004765 723 004770 724 005005 725 005023 726 005041 727 005057 728 005075 729 005113 730 005131 731 005147 733 005156 ----------------------------------------------------------- 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