COMPILATION LISTING OF SEGMENT transaction_call_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/04/82 1737.6 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* Vfile_ Transaction Interfaces. 12* 13* Written by Mike Asherman. 14*Modified: 15*03/02/79 by M. N. Davidoff to use better interfaces and cleaned up a little . 16*05/17/79 by Lindsey Spratt to interpret 22-byte reflist keys as non-passive references when gk_inf.descrip 17* = -1. 18*07/06/79 by M. N. Davidoff to fix bug where transaction_call_$status was not verifying if P_trc_status_ptr = null. 19**/ 20 transaction_call_: 21 procedure; 22 23 /* parameter */ 24 25 declare P_command_line char (*); 26 declare P_status fixed binary; 27 declare P_transaction_no fixed binary (35); 28 declare P_trc_flags bit (36) aligned; 29 declare P_trc_status_ptr pointer; 30 declare code fixed binary (35); 31 declare tcfp pointer; 32 33 /* automatic */ 34 35 declare adjust_mod fixed binary (35); 36 declare block_ptr pointer; 37 declare change_tcf bit (1) aligned; 38 declare cur_mod fixed binary (35); 39 declare cur_tcode fixed binary (35); 40 declare current_descrip fixed binary (35); 41 declare end_of_reference_list bit (1) aligned; 42 declare entry_point char (32); 43 declare 1 gk_inf, 44 2 header like gk_header, 45 2 key char (22); 46 declare ind_desc fixed binary (35); 47 declare iocb_ptr pointer; 48 declare iocbp pointer; 49 declare last_file_id fixed binary (35); 50 declare mod fixed binary; 51 declare pos_ptr pointer; 52 declare ref_cnt fixed binary; 53 declare refp pointer; 54 declare rollback_sw bit (1) aligned; 55 declare time_stamp fixed binary (71); 56 declare timeout fixed binary (71); 57 declare transaction bit (1) aligned; 58 declare unique_name char (32); 59 60 /* based */ 61 62 /* Reference list and TCF key structure. The TCF has keys which are 4 bytes long. These keys are transaction 63* entries. The reference list has keys which are 12, 16 or 22 bytes long. The 12 byte keys are I/O switch entries. 64* The 16 and 22 byte keys are reference list entries. */ 65 66 declare 1 gk_key aligned based (addr (gk_inf.key)), 67 2 number fixed binary (35), 68 2 file_id fixed binary (35), 69 2 rec_id fixed binary (35), 70 2 blockp pointer unaligned, 71 2 time fixed binary (53) unaligned; 72 73 /* builtin */ 74 75 declare binary builtin; 76 declare codeptr builtin; 77 declare clock builtin; 78 declare rtrim builtin; 79 declare stacq builtin; 80 declare string builtin; 81 82 /* condition */ 83 84 declare cleanup condition; 85 86 /* entry */ 87 88 declare cu_$cp entry (pointer, fixed binary (21), fixed binary (35)); 89 declare date_time_ entry (fixed binary (71), char (*)); 90 declare get_pdir_ entry returns (char (168)); 91 declare ioa_ entry options (variable); 92 declare open_indx_file$adjust_record 93 entry (pointer, fixed binary (35), fixed binary (35), fixed binary (35)); 94 declare sub_err_ entry options (variable); 95 declare unique_chars_ entry (bit (*)) returns (char (15)); 96 97 /* Execute a Multics command line as a transaction. */ 98 99 transact: 100 entry (tcfp, P_command_line, P_transaction_no, code); 101 102 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 103* P_command_line (Input) Multics command line to execute 104* P_transaction_no (Output) transaction number of the transaction 105* code (Output) standard status code */ 106 107 entry_point = "transact"; 108 code = 0; 109 P_transaction_no = 0; 110 111 call check_tcf_io_switch; 112 113 on cleanup 114 call rollback (tcfp, P_transaction_no, code); 115 116 call cu_$cp (addr (P_command_line), length (P_command_line), code); 117 118 call commit (tcfp, P_transaction_no, code); 119 if code ^= error_table_$asynch_change 120 then return; 121 122 call rollback (tcfp, P_transaction_no, code); 123 124 code = error_table_$asynch_change; 125 return; 126 127 /* Obtain the status of a transaction. */ 128 129 status: 130 entry (tcfp, P_transaction_no, P_trc_flags, P_trc_status_ptr, P_status, code); 131 132 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 133* P_transaction_no (Input) transaction to find the status of. Zero 134* means the current transaction. 135* P_trc_flags (Input) what actions to perform 136* P_trc_status_ptr (Input) pointer to a trc_status structure or null 137* P_status (Output) status of the transaction 138* code (Output) standard status code */ 139 140 entry_point = "status"; 141 trc_flags = P_trc_flags; 142 trc_status_ptr = P_trc_status_ptr; 143 P_status = trc_UNDEFINED; 144 code = 0; 145 146 call check_tcf_io_switch; 147 148 if P_transaction_no = 0 149 then cur_tcode = tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code; 150 else cur_tcode = P_transaction_no; 151 152 if cur_tcode ^= 0 153 then do; 154 unspec (gk_inf.flags) = ""b; 155 gk_inf.input_key = "1"b; 156 gk_inf.head_size = 4; 157 gk_inf.key_len = 4; 158 gk_key.number = cur_tcode; 159 160 call iox_$control (tcfp, "get_key", addr (gk_inf), code); 161 162 if code = 0 163 then P_status = -gk_inf.descrip; 164 else if code = error_table_$no_key | code = error_table_$no_record 165 then code = 0; 166 else call check_code ("Can't get TCF entry."); 167 end; 168 169 /* Return more detailed information only if requested. */ 170 171 if trc_status_ptr ^= null 172 then do; 173 if trc_status.version ^= trc_status_version_1 174 then do; 175 code = error_table_$unimplemented_version; 176 return; 177 end; 178 179 trc_status.transaction_no = cur_tcode; 180 trc_status.transaction_status = P_status; 181 trc_status.passive_refs = 0; 182 trc_status.non_passive_refs = 0; 183 end; 184 185 if P_status = trc_UNDEFINED 186 then return; 187 188 /* There are no asynchronous changes or references if there is no reference list. */ 189 190 refp = tcfp -> iocb.open_data_ptr -> indx_cb.reflp; 191 if refp = null 192 then return; 193 194 call verification ("1"b, trc_flag_s.verify_refs); 195 196 code = 0; 197 return; 198 199 /* Clean up after aborting a transaction. */ 200 201 rollback: 202 entry (tcfp, P_transaction_no, code); 203 204 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 205* P_transaction_no (Output) transaction number of the aborted transaction 206* code (Output) standard status code */ 207 208 entry_point = "rollback"; 209 rollback_sw = "1"b; 210 goto join; 211 212 /* Start a new transaction and finish an old one. */ 213 214 checkpoint: /* TEMPORARY -- This entry point should be deleted. */ 215 commit: 216 entry (tcfp, P_transaction_no, code); 217 218 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 219* P_transaction_no (Output) transaction number of the completed transaction 220* code (Output) standard status code */ 221 222 entry_point = "commit"; 223 rollback_sw = "0"b; 224 225 join: 226 P_transaction_no = 0; 227 code = 0; 228 229 call check_tcf_io_switch; 230 231 cur_tcode = tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code; 232 P_transaction_no = cur_tcode; 233 234 /* Return if there is no transaction in progress. */ 235 236 if cur_tcode = 0 237 then return; 238 239 /* Get the reference list. It's an error if there isn't one because a transaction is in progress. */ 240 241 refp = tcfp -> iocb.open_data_ptr -> indx_cb.reflp; 242 if refp = null 243 then do; 244 code = error_table_$no_operation; 245 call check_code ("No reference list."); 246 end; 247 248 /* Indicate roll back or roll forward to adjust_record logic. Perform passive verification before the commitment. */ 249 250 if rollback_sw 251 then adjust_mod = 0; 252 else do; 253 adjust_mod = cur_tcode; 254 call verification ("0"b, "1"b); 255 end; 256 257 /* Go through non-passive references and indicate the status of the transaction. */ 258 259 call find_first_ref; 260 if code ^= 0 261 then do; 262 code = error_table_$no_operation; 263 call check_code ("No reference list entries after passive verification."); 264 end; 265 266 call get_next_non_passive_ref (end_of_reference_list); 267 268 change_tcf = "1"b; 269 last_file_id = 0; 270 do while (gk_key.number = cur_tcode & ^end_of_reference_list); 271 if gk_key.file_id ^= last_file_id /* must set iocbp for this file */ 272 then do; 273 call set_iocbp (gk_key.file_id); /* gets information from start of reference list */ 274 last_file_id = gk_key.file_id; 275 end; 276 277 /* Prepare to alter the TCF entry. A commitment or rollback is irreversible once the TCF has been changed. */ 278 279 if change_tcf 280 then begin; 281 declare 1 rk_inf, 282 2 header like rk_header, 283 2 key char (4); 284 declare transaction_status fixed binary; 285 286 tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code = 0; 287 288 string (rk_inf.flags) = "111"b; 289 rk_inf.old_descrip = -trc_INCOMPLETE; 290 rk_inf.key_len = length (rk_inf.key); 291 unspec (rk_inf.key) = unspec (cur_tcode); 292 293 if rollback_sw 294 then rk_inf.new_descrip = -trc_ROLLED_BACK; 295 else rk_inf.new_descrip = -trc_COMMITTED; 296 297 call iox_$control (tcfp, "reassign_key", addr (rk_inf), code); 298 if code ^= 0 299 then if code = error_table_$no_key 300 then call check_code ("No TCF entry for transaction."); 301 else if code ^= error_table_$no_record 302 then call check_code ("Can't change TCF entry."); 303 else do; /* see if already did operation */ 304 call status (tcfp, cur_tcode, ""b, null, transaction_status, code); 305 call check_code ("Couldn't change TCF entry. Can't get transaction's status."); 306 307 if transaction_status = trc_UNDEFINED 308 then do; 309 code = error_table_$no_operation; 310 call check_code ("Couldn't change TCF entry. Transaction's entry is gone.") 311 ; 312 end; 313 314 if rollback_sw 315 then if transaction_status = trc_COMMITTED 316 then do; 317 code = error_table_$no_operation; 318 call check_code ("Transaction already committed."); 319 end; 320 else if transaction_status ^= trc_ROLLED_BACK 321 then do; 322 code = error_table_$no_operation; 323 call check_code ("Invalid TCF status code found during rollback."); 324 end; 325 else ; 326 else if transaction_status = trc_ROLLED_BACK 327 then do; 328 code = error_table_$no_operation; 329 call check_code ("Transaction already rolled back."); 330 end; 331 else if transaction_status ^= trc_COMMITTED 332 then do; 333 code = error_table_$no_operation; 334 call check_code ("Invalid TCF status code found during commitment."); 335 end; 336 end; 337 338 change_tcf = "0"b; 339 end; 340 341 call open_indx_file$adjust_record (iocbp, gk_key.rec_id, adjust_mod, code); 342 call check_code ("Can't adjust a modified record."); 343 344 gk_inf.descrip = 0; /* move onto the next non-passive reference */ 345 call get_next_non_passive_ref (end_of_reference_list); 346 end; 347 348 code = 0; 349 tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code = 0; 350 351 return_from_transaction_call_: 352 return; 353 354 /* Reserve a transaction number for the next transaction. */ 355 356 assign: 357 entry (tcfp, P_transaction_no, code); 358 359 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 360* P_transaction_no (Output) new transaction number 361* code (Output) standard status code */ 362 363 entry_point = "assign"; 364 P_transaction_no = 0; 365 366 call check_tcf_io_switch; 367 368 if tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code ^= 0 369 then do; 370 code = error_table_$no_operation; 371 return; 372 end; 373 374 /* This loop will try again if there is an asynchronous insertion. */ 375 376 code = 1; 377 do while (code ^= 0); 378 call iox_$position (tcfp, 1, 0, code); /* eof */ 379 call check_code ("Can't position to end of TCF to find last entry."); 380 381 call iox_$position (tcfp, 0, -1, code); /* backspace */ 382 if code = 0 383 then do; /* get last used transaction number */ 384 unspec (gk_inf.flags) = ""b; 385 386 call iox_$control (tcfp, "get_key", addr (gk_inf), code); 387 call check_code ("Can't get last key of TCF."); 388 389 cur_tcode = gk_key.number + 1; 390 end; 391 else if code = error_table_$end_of_info 392 then cur_tcode = 1; /* first TCF entry */ 393 else call check_code ("Can't backspace from end of TCF."); 394 395 call create_tcf_entry (cur_tcode); 396 if code ^= 0 397 then if code ^= error_table_$key_duplication 398 then call check_code ("Can't add a new key to the TCF."); 399 end; 400 401 P_transaction_no = cur_tcode; 402 return; 403 404 /* Get the current transaction number. */ 405 406 number: 407 entry (tcfp, P_transaction_no, code); 408 409 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 410* P_transaction_no (Output) current transaction number 411* code (Output) standard status code */ 412 413 entry_point = "number"; 414 P_transaction_no = 0; 415 code = 0; 416 417 call check_tcf_io_switch; 418 419 P_transaction_no = tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code; 420 return; 421 422 /* Change the current transaction number. This should be used with caution. */ 423 424 change_current_transaction_no: 425 entry (tcfp, P_transaction_no, code); 426 427 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 428* P_transaction_no (Input) new current transaction number 429* code (Output) standard status code */ 430 431 entry_point = "change_current_transaction_no"; 432 code = 0; 433 434 call check_tcf_io_switch; 435 436 if P_transaction_no < 0 437 then do; 438 code = error_table_$bad_arg; 439 return; 440 end; 441 442 443 tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code = P_transaction_no; 444 return; 445 446 /* Create a reference list. */ 447 448 setup_ref_list: 449 entry (tcfp, code); 450 451 /* tcfp (Input) pointer to the iocb for the TCF I/O switch 452* code (Output) standard status code */ 453 454 entry_point = "setup_ref_list"; 455 code = 0; 456 457 call check_tcf_io_switch; 458 459 unique_name = unique_chars_ (""b) || ".refl.vfile_"; 460 461 call iox_$attach_name (unique_name, iocbp, "vfile_ " || rtrim (get_pdir_ ()) || ">" || unique_name, 462 codeptr (transaction_call_), code); 463 call check_code ("Can't attach reference list."); 464 465 call iox_$open (iocbp, Keyed_sequential_update, "0"b, code); 466 call check_code ("Can't open reference list."); 467 468 tcfp -> iocb.open_data_ptr -> indx_cb.reflp = iocbp; 469 return; 470 471 /* Make sure the TCF I/O switch is open. */ 472 473 check_tcf_io_switch: 474 procedure; 475 476 if tcfp -> iocb.open_descrip_ptr ^= null 477 then return; 478 479 code = error_table_$not_open; 480 goto return_from_transaction_call_; 481 end check_tcf_io_switch; 482 483 /* Perform passive verification. */ 484 485 verification: 486 procedure (verify_only, check_asynch_changes); 487 488 declare verify_only bit (1) aligned; /* (Input) on if only obtaining a transaction's status */ 489 declare check_asynch_changes bit (1); /* (Input) on to check for asychronous changes */ 490 491 declare end_of_reference_list bit (1) aligned; 492 declare my_lock_id bit (36) aligned; 493 494 call find_first_ref; 495 if code ^= 0 496 then if verify_only 497 then return; 498 else do; 499 code = error_table_$no_operation; 500 call check_code ("No reference list entries."); 501 end; 502 503 my_lock_id = tcfp -> iocb.open_data_ptr -> indx_cb.saved_lock_copy; 504 transaction = "1"b; 505 timeout = 0; /* no point waiting to verify */ 506 507 end_of_reference_list = "0"b; 508 do while (gk_key.number = cur_tcode & ^end_of_reference_list); 509 block_ptr = gk_key.blockp; /* pointer to stat record header */ 510 511 /* If the record is locked, then we have a non-passive reference, otherwise if the record is not locked, the 512* reference is passive. For non-passive references before a commitment (^verify_only) make sure 513* record_block.lock_flag is on. All flags will then be set before the commitment starts. This will force users to 514* examine the TCF to determine which record image currently applies. When record_block.lock_flag is off, the before 515* image is guaranteed to be valid. */ 516 517 if gk_inf.descrip = -1 518 then if verify_only 519 then do; 520 if trc_status_ptr ^= null 521 then trc_status.non_passive_refs = trc_status.non_passive_refs + 1; 522 523 if trc_flag_s.list 524 then if gk_inf.key_len = 16 525 then call ioa_ ("File: ^o, Descriptor: ^o Locked.", gk_key.file_id, gk_key.rec_id); 526 else begin; 527 declare date_time_string char (24); 528 call date_time_ ((gk_key.time), date_time_string); 529 call ioa_ ("File: ^o, Descriptor: ^o, Last modified: ^a, Locked.", 530 gk_key.file_id, gk_key.rec_id, date_time_string); 531 end; 532 end; 533 else if stacq (block_ptr -> stat_struct.record_lock, my_lock_id, my_lock_id) 534 /* be sure under own lock */ 535 then if ^block_ptr -> record_block.lock_flag & stat_struct.modifier = cur_tcode 536 then block_ptr -> record_block.lock_flag = "1"b; 537 else ; 538 else ; 539 else do; 540 541 /* Verify a passive reference. */ 542 543 if verify_only 544 then do; 545 if trc_status_ptr ^= null 546 then trc_status.passive_refs = trc_status.passive_refs + 1; 547 548 if trc_flag_s.list 549 then if gk_inf.key_len = 16 550 then call ioa_ ("File: ^o, Descriptor: ^o, Last modifier: ^d.", gk_key.file_id, 551 gk_key.rec_id, gk_inf.descrip); 552 else begin; 553 declare date_time_string char (24); 554 555 call date_time_ ((gk_key.time), date_time_string); 556 call ioa_ 557 ("File: ^o, Descriptor: ^o, Last modified: ^a, Image descriptor: ^o.", 558 gk_key.file_id, gk_key.rec_id, date_time_string, gk_inf.descrip); 559 end; 560 end; 561 562 if check_asynch_changes 563 then begin; 564 declare asynch_change bit (1) aligned; 565 566 current_descrip = gk_key.rec_id; 567 call set_current_image_info; 568 569 /* Long form verification uses the time_stamp and the indirect descriptor. */ 570 571 if cur_mod = 0 | cur_mod = -1 572 then if gk_inf.key_len = 16 573 then asynch_change = gk_inf.descrip ^= -3 | time_stamp ^= 0 | ind_desc ^= -1; 574 else if gk_inf.key_len > 16 575 /* A key_len of >16 occurs when: passive & ((cur_mod = 0) | (cur_mod = -1)) 576* or; not passive & (stat_struct.prev_mod = 0). 577*(This latter implies cur_mod = 0.) 578* and; this reference must be the first to this 579* record in the reflist by this 580* transaction. 581*If not passive then gk_inf.descrip = -1, and the converse. If gk_inf.descrip 582*is not = -1, then the old check for inequality with ind_desc is used. 583**/ 584 then if gk_inf.descrip ^= -1 585 then asynch_change = gk_key.time ^= time_stamp | gk_inf.descrip ^= ind_desc; 586 else asynch_change = gk_key.time ^= time_stamp; 587 else asynch_change = "0"b; 588 else asynch_change = gk_inf.key_len > 16 | cur_mod ^= gk_inf.descrip; 589 590 if asynch_change 591 then do; 592 code = error_table_$asynch_change; 593 goto return_from_transaction_call_; 594 end; 595 end; 596 end; 597 598 /* Move on to the next reference for this transaction. */ 599 600 call iox_$position (refp, 0, 1, code); 601 call check_code ("Can't position to next reference list entry."); 602 603 call iox_$control (refp, "get_key", addr (gk_inf), code); 604 if code ^= 0 605 then if code = error_table_$end_of_info 606 then end_of_reference_list = "1"b; 607 else call check_code ("Can't get next reference list entry for verification."); 608 end; 609 end verification; 610 611 /* Locate first item in reference list for this transaction. */ 612 613 find_first_ref: 614 procedure; 615 616 unspec (gk_inf.flags) = ""b; 617 gk_inf.input_key = "1"b; 618 gk_inf.head_size = 4; 619 gk_inf.key_len = 4; 620 gk_key.number = cur_tcode; 621 622 call iox_$control (refp, "get_key", addr (gk_inf), code); 623 if code ^= 0 624 then if code ^= error_table_$no_record & code ^= error_table_$no_key 625 then call check_code ("Can't find first reference list entry."); 626 627 gk_inf.input_key = "0"b; /* suppress seeking on next get_key */ 628 end find_first_ref; 629 630 /* Get the next locked item in the reference list. */ 631 632 get_next_non_passive_ref: 633 procedure (end_of_reference_list); 634 635 declare end_of_reference_list bit (1) aligned; /* (Output) on if no more items in reference list */ 636 637 /* Skip over the passive references. */ 638 639 end_of_reference_list = "0"b; 640 do while ((gk_inf.descrip >= 0 | gk_inf.descrip = -3) & ^end_of_reference_list); 641 call iox_$position (refp, 0, 1, code); 642 call check_code ("Can't position to next non-passive reference list entry."); 643 644 call iox_$control (refp, "get_key", addr (gk_inf), code); 645 if code ^= 0 646 then if code = error_table_$no_record | code = error_table_$end_of_info 647 then end_of_reference_list = "1"b; 648 else call check_code ("Can't get next non-passive reference list entry."); 649 end; 650 end get_next_non_passive_ref; 651 652 /* Create an entry in the TCF for a new transaction. */ 653 654 create_tcf_entry: 655 procedure (mod_arg); 656 657 declare mod_arg fixed binary (35); /* (Input) transaction to create a TCF entry for */ 658 659 unspec (gk_inf.flags) = "11"b; 660 gk_inf.descrip = -trc_INCOMPLETE; 661 gk_inf.key_len = 4; 662 gk_key.number = mod_arg; 663 664 call iox_$control (tcfp, "add_key", addr (gk_inf), code); 665 if code = 0 666 then tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code = mod_arg; 667 end create_tcf_entry; 668 669 /* Obtain a file's iocb pointer. */ 670 671 set_iocbp: 672 procedure (uid_arg); 673 674 declare uid_arg fixed binary (35); /* (Input) file_id of the iocb to find */ 675 676 declare 1 gk_inf, 677 2 header like gk_header, 678 2 key char (12); 679 680 declare gk_desc pointer unaligned based (addr (gk_inf.descrip)); 681 declare 1 gk_key aligned based (addr (gk_inf.key)), 682 2 zero fixed binary (35), 683 2 lock_id bit (36), 684 2 file_id fixed binary (35); 685 686 unspec (gk_inf.flags) = ""b; 687 gk_inf.input_key = "1"b; 688 gk_inf.reset_pos = "1"b; /* don't lose place in reference list */ 689 gk_inf.head_size = length (gk_inf.key); 690 gk_inf.key_len = length (gk_inf.key); 691 gk_key.zero = 0; 692 gk_key.lock_id = refp -> iocb.open_data_ptr -> indx_cb.saved_lock_copy; 693 gk_key.file_id = uid_arg; 694 695 call iox_$control (refp, "get_key", addr (gk_inf), code); 696 call check_code ("Can't get I/O switch reference list entry."); 697 698 iocbp = gk_desc; 699 end set_iocbp; 700 701 /* Error reporting routine. */ 702 703 check_code: 704 procedure (message); 705 706 declare message char (*); /* (Input) error message */ 707 708 declare sub_code fixed binary (35); 709 710 if code = 0 711 then return; 712 713 sub_code = 0; 714 call sub_err_ (code, "transaction_call_$" || entry_point, "c", null, sub_code, message); 715 goto return_from_transaction_call_; 716 end check_code; 717 718 /* The set_current_image_info procedure uses the following global variables as arguments: 719* (Who knows, it may also use some more.) 720* 721* block_ptr (Input/Output) pointer to stat record header 722* code (Output) standard status code 723* cur_mod (Output) The transaction number of the current modifier. Zero and negative numbers are special. 724* -1 means the current modifier is outside the transaction system. 725* current_descrip (Input) the current record's descriptor 726* ind_desc (Output) The indirect descriptor. Component and offset of where the record is. -1 is special. 727* mod (Output) Some kind of modifier's transaction number. 728* ref_cnt (Output) reference count 729* timeout (Output) when the information becomes invalid? 730* time_stamp (Output) when the record was last modified. 731* transaction (Input) whether or not this opening is in transaction mode 732**/ 1 1 set_current_image_info: 1 2 proc; /* passively determines the transaction code 1 3* and indirect descriptor which currently apply to this record */ 1 4 /* The validity of this algorithm while records are subject to asynch 1 5* changes is guaranteed by the strict observance of a standard modification 1 6* protocol */ 1 7 1 8 do while ("1"b); /* loops on detecting asynch changes */ 1 9 time_stamp = fixed (time_stamp_struct.time_last_modified); 1 10 /* to detect asynch change */ 1 11 cur_mod = stat_struct.prev_mod; 1 12 ref_cnt = block_ptr -> stat_struct.ref_count; 1 13 if cur_mod = -3 /* creation in progress */ 1 14 then ind_desc = -1; 1 15 else if block_ptr -> record_block.indirect 1 16 then ind_desc = ind_struct.prev_desc; 1 17 else if block_ptr -> record_block.after_applies 1 18 then do; 1 19 ind_des.comp = stat_struct.ind_comp; 1 20 ind_des.offset = time_stamp_struct.ind_offset; 1 21 mod = stat_struct.modifier; 1 22 cur_mod = mod; 1 23 ref_cnt = stat_struct.ref_count_after; 1 24 go to check_time; /* validate snapshot */ 1 25 end; 1 26 else ind_desc = current_descrip; /* compact case */ 1 27 mod = stat_struct.modifier; 1 28 if block_ptr -> record_block.lock_flag /* before image may not be valid */ 1 29 then if mod > 0 /* transaction may be in progress on this record */ 1 30 then if mod ^= cur_mod /* before and after are different */ 1 31 then do; 1 32 new_ind_des.comp = stat_struct.ind_comp; 1 33 new_ind_des.offset = time_stamp_struct.ind_offset; 1 34 if cur_mod = stat_struct.prev_mod 1 35 /* in case of asynch change */ 1 36 then do; /* must look in tcf to see which applies */ 1 37 if ^transaction/* no tcf available */ 1 38 then do; /* abort with non-zero code */ 1 39 code = error_table_$higher_inconsistency; 1 40 /* can't tell which image 1 41* is the one to use */ 1 42 return; 1 43 /* abort */ 1 44 end; 1 45 unspec (gk_inf.flags) = "0"b; 1 46 gk_inf.input_key = "1"b; 1 47 gk_inf.key_len = 4; 1 48 gk_inf.head_size = 4; 1 49 gk_key = mod; /* current transaction using this record */ 1 50 call iox_$control (tcfp, "get_key", addr (gk_inf), er_code); 1 51 if er_code = 0 1 52 then if gk_inf.descrip = -1 1 53 /* past checkpoint */ 1 54 then do; /* use after image info */ 1 55 cur_mod = mod; 1 56 ind_desc = new_ind_desc; 1 57 ref_cnt = stat_struct.ref_count_after; 1 58 return; 1 59 /* done */ 1 60 end; 1 61 else ; 1 62 else if er_code = error_table_$no_key 1 63 then code = error_table_$higher_inconsistency; 1 64 end; 1 65 end; 1 66 if cur_mod = stat_struct.prev_mod /* same as at previous reference */ 1 67 then if cur_mod > 0 /* modifier is unique for this record image */ 1 68 then return; 1 69 else do; 1 70 check_time: 1 71 if fixed (time_stamp_struct.time_last_modified) = time_stamp 1 72 then return; /* will use time_stamp for verification */ 1 73 end; 1 74 if clock () > timeout /* time limit is exhausted */ 1 75 then do; 1 76 code = error_table_$record_busy; 1 77 return; 1 78 end; 1 79 end; /* keep trying until reference succeeds */ 1 80 1 81 dcl er_code fixed (35); 1 82 dcl 1 new_ind_des based (addr (new_ind_desc)), 1 83 2 comp fixed (17) unal, 1 84 2 offset bit (18) unal; 1 85 dcl new_ind_desc fixed (35); 1 86 dcl gk_key fixed (35) based (addr (gk_inf.key)); 1 87 dcl 1 gk_inf, 1 88 2 header like gk_header, 1 89 2 key char (4); 1 90 end set_current_image_info; 1 91 1 92 dcl 1 ind_des like ind_des_structure based (addr (ind_desc)); 1 93 dcl 1 stat_struct like stat_structure based (block_ptr); 1 94 dcl 1 ind_struct like ind_structure based (block_ptr); 1 95 dcl 1 time_stamp_struct like time_stamp_structure based (addr (stat_struct.time_stamp_words)); 1 96 dcl 1 record_block like record_block_structure based (block_ptr); 733 734 2 1 /* BEGIN INCLUDE FILE ... transaction_call.incl.pl1 */ 2 2 2 3 /* Written 6-Mar-79 by M. N. Davidoff. */ 2 4 2 5 /* automatic */ 2 6 2 7 declare trc_flags bit (36) aligned; 2 8 declare trc_status_ptr pointer; 2 9 2 10 /* based */ 2 11 2 12 declare 1 trc_flag_s aligned based (addr (trc_flags)), 2 13 2 verify_refs bit (1) unaligned, /* on to check for asychronous changes */ 2 14 2 list bit (1) unaligned, /* on to print ref list on user_output until asynch change */ 2 15 2 pad bit (34) unaligned; /* Must be zero */ 2 16 2 17 declare 1 trc_status aligned based (trc_status_ptr), 2 18 2 version fixed binary (17), /* Must be 1 */ 2 19 2 transaction_no fixed binary (35), /* transaction information applies to */ 2 20 2 transaction_status fixed binary (17), /* transaction's status */ 2 21 2 passive_refs fixed binary (34), /* number of items referenced but not modified */ 2 22 2 non_passive_refs fixed binary (34); /* number of items modified */ 2 23 2 24 /* internal static */ 2 25 2 26 declare trc_VERIFY_REFS bit (36) aligned internal static options (constant) initial ("1"b); 2 27 declare trc_status_version_1 fixed binary internal static options (constant) initial (1); 2 28 2 29 /* transaction status codes */ 2 30 2 31 declare trc_INCOMPLETE fixed binary internal static options (constant) initial (0); 2 32 declare trc_COMMITTED fixed binary internal static options (constant) initial (1); 2 33 declare trc_ROLLED_BACK fixed binary internal static options (constant) initial (2); 2 34 declare trc_UNDEFINED fixed binary internal static options (constant) initial (3); 2 35 2 36 /* END INCLUDE FILE ... transaction_call.incl.pl1 */ 735 3 1 /* the control block */ 3 2 dcl indx_cb_ptr ptr; 3 3 dcl 1 indx_cb based (indx_cb_ptr), /* except as noted, init by create cb */ 3 4 2 fcb_ptr ptr, 3 5 2 file_base_ptr ptr, 3 6 2 node_length fixed, /* number of bytes in node, init by create_seg_ptrs */ 3 7 2 half_node_length fixed, /* init by create_seg_ptrs */ 3 8 2 max_record_size fixed (21), /* init by create_seg_ptrs */ 3 9 2 seg_ptr_array_ptr ptr, /* init by create seg_ptrs */ 3 10 2 seg_ptr_array_limit 3 11 fixed, /* init by create seg_ptrs */ 3 12 2 mode fixed, 3 13 2 is_sequential_open bit (1) aligned, 3 14 2 is_read_only bit (1) aligned, 3 15 2 is_ks_out bit (1) aligned, /* position info */ 3 16 2 position_stack_ptr ptr, /* init by create_position stack */ 3 17 2 position_stack_height 3 18 fixed, /* init by create position stack */ 3 19 2 root_position_ptr ptr, /* init by create_position_stack */ 3 20 2 file_position_ptr ptr, /* not init */ 3 21 2 change_position_ptr 3 22 ptr, /* not init */ 3 23 /* auxiliary variables */ 3 24 2 rover_seg_ptr ptr, /* init by create_seg_ptrs */ 3 25 2 index_state_ptr ptr, /* init by create_seg_ptrs */ 3 26 2 old_index_height fixed, 3 27 2 old_last_comp_num fixed, 3 28 2 last_change_count fixed (35), 3 29 2 wait_time fixed (35), 3 30 2 old_rover_comp_num fixed, 3 31 2 file_state_ptr ptr, 3 32 2 o_s_ptr ptr, 3 33 2 repeating bit (1) aligned, 3 34 2 next_substate fixed, 3 35 2 file_program_version 3 36 fixed, /* used for record_lock compatibility */ 3 37 2 leave_locked bit (1) aligned, /* indicates use of set_file_lock order */ 3 38 2 dup_ok bit (1) aligned, /* if set, duplicate keys may occur */ 3 39 2 read_exclu bit (1) aligned, /* set when lock excludes readers */ 3 40 2 pos_incorrect bit (1) aligned, /* indicates index position is not current */ 3 41 2 saved_lock_copy bit (36) aligned, /* copy of process lock_id */ 3 42 2 min_key_len fixed, /* non-zero only in old programs */ 3 43 2 stat bit (1) aligned, /* causes write_record to create stationary records */ 3 44 2 current_subset fixed (34), /* used with select order */ 3 45 2 last_subset fixed (34), 3 46 2 subset_count fixed (34), /* count of descriptors in current subset */ 3 47 2 temp_iocbp ptr, /* temporary file used to implement select order */ 3 48 2 trans bit (1) aligned, /* set if -transaction attachment */ 3 49 2 transaction_code fixed (35), /* set for control switch only */ 3 50 2 tcfp ptr, /* ptr to iocb for transaction control switch--if applicable */ 3 51 2 reflp ptr, /* ptr to ref list file, set only in transaction control file */ 3 52 2 uid bit (36) aligned, /* used under -transaction */ 3 53 2 collection_delay_time 3 54 fixed (35), /* microseconds to wait before garbage removal */ 3 55 2 min_res fixed (21), /* for min_block_size order */ 3 56 2 min_cap fixed (21), /* also for min_block_size order */ 3 57 2 subset_selected bit (2) aligned, /* first bit for select, second 3 58* bit is for exclude */ 3 59 2 error, /* for error_status order */ 3 60 3 type fixed, /* only one error type supported now */ 3 61 3 requested fixed (34), /* skip arg given to position entry */ 3 62 3 received fixed (34), /* actual successful skips */ 3 63 2 state_vars, 3 64 3 fixed_state_part, 3 65 4 shared bit (1) aligned, 3 66 4 next_record_position 3 67 fixed, /* 0, 1, or 2 */ 3 68 4 current_record_is_valid 3 69 bit (1) aligned, 3 70 4 ready_to_write bit (1) aligned, 3 71 4 at_eof_or_bof, 3 72 5 at_bof bit (1) unal, 3 73 5 at_eof bit (1) unal, 3 74 5 pad bit (36) unal, 3 75 4 outside_index bit (1) aligned, /* set after deleting current key or after use of record_status with locate switch */ 3 76 4 current_descrip 3 77 fixed (35), /* needed when outside index */ 3 78 4 saved_descrip fixed (35), /* for restoring index position */ 3 79 4 skip_state fixed, /* controls scanning of deleted entries */ 3 80 3 new_key char (256) var; 3 81 3 82 dcl current_t_code fixed (35) based (addr (indx_cb.tcfp -> iocb.open_data_ptr -> indx_cb.transaction_code)); 3 83 3 84 /* component locator structures */ 3 85 dcl seg_ptr_array (0:seg_ptr_array_limit) ptr based (seg_ptr_array_ptr); 3 86 dcl seg_ptr ptr; 3 87 dcl seg_array (0:262143) fixed (19) based (seg_ptr) aligned; 3 88 dcl designator fixed (35); 3 89 dcl 1 ind_des_structure based, 3 90 2 comp fixed (17) unal, 3 91 2 offset bit (18) unal; 3 92 dcl 1 stat_structure based, 3 93 2 pad bit (26) unal, 3 94 2 ref_count_after fixed (16) unsigned unal, 3 95 2 ind_comp fixed (13) unal, 3 96 2 ref_count fixed (16) unsigned unal, 3 97 2 record_lock bit (36) aligned, 3 98 2 modifier fixed (35), 3 99 2 time_stamp_words fixed (71) aligned, 3 100 2 prev_mod fixed (35), 3 101 2 record char (1000000) var; 3 102 dcl 1 ind_structure based, 3 103 2 pad bit (26) unal, 3 104 2 ref_count_after fixed (16) unsigned unal, 3 105 2 ind_comp fixed (13) unal, 3 106 2 ref_count fixed (16) unsigned unal, 3 107 2 record_lock bit (36) aligned, 3 108 2 modifier fixed (35), 3 109 2 time_stamp_words fixed (71) aligned, 3 110 2 prev_mod fixed (35), 3 111 2 prev_desc fixed (35); 3 112 dcl 1 time_stamp_structure based, 3 113 2 ind_offset bit (18) unal, 3 114 2 time_last_modified fixed (54) unsigned unal; 3 115 dcl 1 record_block_structure 3 116 based, 3 117 2 reserved aligned, /* data used by change_record_list */ 3 118 3 pad bit (2) unal, 3 119 3 block_size fixed (19) unal, 3 120 3 lock_flag bit (1) unal, /* record lock flag */ 3 121 3 stationary bit (1) unal, 3 122 3 indirect bit (1) unal, 3 123 3 after_applies bit (1) unal, 3 124 3 mbz bit (10) unal, 3 125 2 block_tail, /* structure varies with record type */ 3 126 3 record char (1000000) var; /* non-stat record location */ 3 127 dcl 1 designator_struct aligned based (addr (designator)), 3 128 2 comp_num fixed (17) unal, 3 129 2 offset bit (18) unal; 3 130 3 131 /* position and node templates */ 3 132 dcl 1 position_frame based (pos_ptr), /* ref8 */ 3 133 2 parent_position_ptr 3 134 ptr, 3 135 2 son_position_ptr ptr, 3 136 2 node_ptr ptr, 3 137 2 node fixed (35), 3 138 2 branch_num fixed; 3 139 dcl 1 node_block based (node_ptr), /* ref9) */ 3 140 2 last_branch_num fixed, 3 141 2 low_key_pos fixed, 3 142 2 scat_space fixed, 3 143 2 branch_and_descrip (1 refer (node_block.last_branch_num)), 3 144 /* in last element only branch is used */ 3 145 3 branch fixed (35), 3 146 3 descrip, 3 147 4 key_descrip, 3 148 5 key_pos fixed (17) unal, 3 149 5 key_length fixed (17) unal, 3 150 4 record_descrip, 3 151 5 record_designator 3 152 fixed (35); 3 153 dcl keys char (4096 /* 4*node_size */) based (node_ptr); 3 154 3 155 /* file base and states */ 3 156 dcl f_b_ptr ptr; 3 157 dcl 1 file_base based (f_b_ptr), /* ref10 */ 3 158 2 common_header, 3 159 3 file_code fixed (35), 3 160 3 lock_word bit (36) aligned, 3 161 3 words (2) fixed, 3 162 2 file_version fixed, 3 163 2 program_version fixed, 3 164 2 node_size fixed (19), 3 165 2 minimum_key_length fixed, 3 166 2 minimum_block_size fixed (19), 3 167 2 max_seg_limit fixed (19), 3 168 2 root_node_block, 3 169 3 last_branch_num_root 3 170 fixed, /* =1 */ 3 171 3 word fixed, 3 172 3 reserved fixed, 3 173 3 only_branch_in_root 3 174 fixed (35), 3 175 2 file_state fixed, 3 176 2 change_count fixed (34), /* record state info, ref12 */ 3 177 2 old_number_of_free_blocks 3 178 fixed (34), 3 179 2 prior_block_size fixed (19), 3 180 2 old_record_length fixed (21), 3 181 2 need_new_seg bit (1) aligned, 3 182 2 old_residue fixed, 3 183 2 new_last_comp_num fixed, 3 184 2 old_prev_free_block 3 185 fixed (18), 3 186 2 old_next_free_block 3 187 fixed (18), 3 188 2 new_record_length fixed (21), 3 189 2 old_record_designator 3 190 fixed (35), 3 191 2 prec_block_was_free 3 192 bit (1) aligned, 3 193 2 next_block_was_free 3 194 bit (1) aligned, 3 195 2 former_block_size fixed (19), 3 196 2 old_init_offset fixed (18), 3 197 2 old_block_size fixed (19), 3 198 2 prev_block_size fixed (19), 3 199 2 former_rover_comp_num 3 200 fixed, 3 201 2 former_rover_offset 3 202 fixed (18), 3 203 2 next_block_size fixed (19), 3 204 2 next_prev_free_block 3 205 fixed (18), 3 206 2 next_next_free_block 3 207 fixed (18), 3 208 2 saved_ks_out bit (1) aligned, 3 209 2 new_descriptor fixed (35), 3 210 2 old_last_branch_num 3 211 fixed, 3 212 2 old_low_key_pos fixed, 3 213 2 old_scat_space fixed, 3 214 2 old_key_pos fixed, 3 215 2 rover_comp_num fixed, 3 216 2 rover_offset fixed (18), 3 217 2 old_key_length fixed, 3 218 2 b_space fixed, 3 219 2 last_b_num fixed, 3 220 2 count fixed, 3 221 2 first_count fixed, 3 222 2 second_count fixed, 3 223 2 split_num fixed, 3 224 2 must_compact_dest bit (1) aligned, 3 225 2 first_branch fixed (35), 3 226 2 min_source_key_pos fixed, 3 227 2 min_dest_key_pos fixed, 3 228 2 new_low_key_pos fixed, 3 229 2 new_scat_space fixed, 3 230 2 old_seg_lim fixed (19), 3 231 2 old_number_of_free_nodes 3 232 fixed, 3 233 2 old_next_node_designator 3 234 fixed (35), 3 235 2 new_index_comp_num fixed, 3 236 2 out_of_index bit (1) aligned, 3 237 2 saved_min_res fixed (21), 3 238 2 saved_min_cap fixed (21), 3 239 2 was_stat bit (1) aligned, 3 240 2 was_ind bit (1) aligned, 3 241 2 old_ind_desc fixed (35), 3 242 2 after_desc fixed (35), 3 243 2 old_ref_count fixed (34), 3 244 2 new_ref_count fixed (34), 3 245 2 old_num_free fixed (34), 3 246 2 old_file_ch_count fixed (35), 3 247 2 y_count, /* for conversion of pre-MR6.9 files */ 3 248 2 old_modifier fixed (35), 3 249 2 was_transaction bit (1) aligned, /* state blocks */ 3 250 2 index_state fixed, 3 251 2 index_state_blocks (0:1), 3 252 3 words (104), 3 253 2 reserved (30), /* this free space might come in handy */ 3 254 2 old_prev_mod fixed (35), 3 255 2 needed_blksz fixed (35), 3 256 2 new_desc_val fixed (35), 3 257 2 is_partial_deletion 3 258 bit (1) aligned, 3 259 2 reserved2 (42), 3 260 2 file_state_blocks (0:1), 3 261 3 words (size (file_state_block)) fixed, 3 262 /* component info */ 3 263 2 max_comp_num fixed, 3 264 2 last_comp_num fixed, 3 265 2 first_free_comp_num, /* not yet supported */ 3 266 2 comp_table_start (size (comp_table)); /* start of comp_array */ 3 267 3 268 dcl 1 comp_table (0:true_max_comp_num) based (addr (file_base.comp_table_start)) aligned, 3 269 2 seg_limit fixed (19), /* abs value is offset of first free word in seg, max val=max 3 270* seg_limit and this indicates full seg */ 3 271 2 comp_link fixed (17) unal, 3 272 2 init_offset fixed (18) unsigned unal; 3 273 3 274 dcl 1 file_header based (f_b_ptr), 3 275 2 first_three_pages (3, 1024) fixed, 3 276 2 spare_node char (4096) aligned; 3 277 3 278 /* The File State */ 3 279 dcl fs_ptr ptr; 3 280 dcl 1 file_state_block based (fs_ptr), 3 281 2 file_action fixed, 3 282 2 file_substate fixed, 3 283 2 number_of_keys fixed (34), 3 284 2 duplicate_keys fixed (34), /* 0 if no duplications */ 3 285 2 dup_key_bytes fixed (34), 3 286 2 total_key_length fixed (34), 3 287 2 number_of_records fixed (34), 3 288 2 total_record_length 3 289 fixed (34), 3 290 2 number_of_allocated_records 3 291 fixed (34), 3 292 2 number_of_free_blocks 3 293 fixed (34), 3 294 2 words (2) fixed; 3 295 3 296 /* The Index State */ 3 297 dcl is_ptr ptr; 3 298 dcl 1 index_state_block based (is_ptr), /* if this declaration is changed, 3 299* index_state_blocks must be adjusted */ 3 300 2 number_of_nodes fixed (34), 3 301 2 free_node_designator 3 302 fixed (35), 3 303 2 index_tail_comp_num 3 304 fixed, 3 305 2 index_height fixed, 3 306 2 index_action fixed, 3 307 2 index_substate fixed, 3 308 2 current_node fixed (35), 3 309 2 change_node fixed (35), 3 310 2 fake_node, /* equivalent to a short node because of storage map. It holds 3 311* the new key, new record descrip, and new branch in a fashion 3 312* convenient for overflow-underflow in change_index. */ 3 313 3 fake_head_and_descrip, 3 314 4 word1 fixed, /* last_branch_num in real node */ 3 315 4 word2 fixed, /* low_key_pos in real node */ 3 316 4 word3 fixed, /* normally scat_space */ 3 317 4 word4 fixed, /* first branch in real node */ 3 318 4 new_key_pos fixed (17) unal, /* set by initializefile to denote first char 3 319* in new_key_string, never changed */ 3 320 4 new_key_length fixed (17) unal, 3 321 4 new_record_descrip, 3 322 5 new_record_designator 3 323 fixed (35), 3 324 4 new_branch fixed (35), 3 325 3 new_key_string char (256), 3 326 2 branch_num_adjust fixed, 3 327 2 pos_array (10), 3 328 3 saved_node fixed (35), 3 329 3 saved_branch_num fixed; 3 330 3 331 dcl 1 old_file_base based (f_b_ptr), 3 332 2 words1 (15) fixed, /* same in both file versions */ 3 333 2 old_file_state_blocks 3 334 (0:1), 3 335 3 words (5) fixed, 3 336 2 words2 (7) fixed, 3 337 2 record_state fixed, 3 338 2 record_state_blocks 3 339 (0:1), 3 340 3 words (4) fixed, 3 341 2 words3 (14) fixed, /* rover info same in both versions */ 3 342 2 old_version_index_height 3 343 fixed, 3 344 2 old_version_number_of_nodes 3 345 fixed (34), 3 346 2 words4 (157) fixed, 3 347 2 old_version_index_tail_comp_num 3 348 fixed, 3 349 2 old_version_free_node_designator 3 350 fixed (35), 3 351 2 words5 (10) fixed, 3 352 2 old_version_comp_info 3 353 fixed, 3 354 2 word, 3 355 2 x_count fixed; /* always zero in old version files */ 3 356 3 357 /* External Procedures */ 3 358 dcl clock_ entry returns (fixed (71)); 3 359 dcl alloc_cb_file entry (fixed, /* size of block in words */ 3 360 ptr); /* ptr to block */ 3 361 dcl free_cb_file entry (fixed, ptr); 3 362 dcl get_seg_ptr entry (ptr, fixed) returns (ptr); 3 363 dcl make_designator entry (fixed, fixed (18), fixed (35)); 3 364 dcl create_seg_ptrs entry (ptr); 3 365 dcl free_seg_ptrs entry (ptr); 3 366 dcl get_new_seg entry (ptr, fixed, ptr, fixed, label); 3 367 dcl free_seg entry (ptr, fixed, ptr); 3 368 dcl set_bitcounts entry (ptr); 3 369 dcl create_position_stack entry (ptr); 3 370 dcl extend_position_stack entry (ptr); 3 371 dcl free_position_stack entry (ptr); 3 372 dcl change_index entry (ptr, label); 3 373 dcl change_record_list entry (ptr, fixed, ptr, label); 3 374 3 375 /* State Constants */ 4 1 dcl bumping_count static internal options (constant) init (-14); 4 2 dcl rollback_action static options (constant) init (-13); 4 3 dcl adjust_action static options (constant) init (-12); 4 4 dcl unshared_opening static internal fixed options (constant) init (-11); 4 5 dcl non_eof_delete static internal fixed options (constant) init (-10); 4 6 dcl free_action static options (constant) init (-10); 4 7 dcl write_trunc static internal fixed options (constant) init (-9); 4 8 dcl allocate_action static options (constant) init (-9); 4 9 dcl reassigning_key static options (constant) init (-8); 4 10 dcl read_exclude static options (constant) init (-7); 4 11 dcl adding_record static options (constant) init (-6); 4 12 dcl deleting_key static options (constant) init (-5); 4 13 dcl adding_key static options (constant) init (-4); 4 14 dcl delete_action static options (constant) init (-3); 4 15 dcl eof_delete static internal fixed options (constant) init (-3); 4 16 dcl replace_action static options (constant) init (-2); 4 17 dcl rewrite_action static internal fixed options (constant) init (-2); 4 18 dcl insert_action static options (constant) init (-1); 4 19 dcl append_action static internal fixed options (constant) init (-1); 4 20 dcl truncate_action static internal fixed options (constant) init (1); 4 21 dcl must_adjust static internal fixed options (constant) init (2); 4 22 dcl must_rollback static internal fixed options (constant) init (3); 3 376 3 377 3 378 /* Other constants */ 3 379 dcl true_max_comp_num static options (constant) init (1250); 3 380 dcl stat_header_size static internal fixed options (constant) init (8); 3 381 3 382 /* builtins */ 3 383 dcl (verify, reverse) builtin; 3 384 dcl addr builtin; 3 385 dcl divide builtin; 3 386 dcl length builtin; 3 387 dcl null builtin; 3 388 dcl substr builtin; 3 389 dcl size builtin; 3 390 dcl abs builtin; 3 391 dcl unspec builtin; 3 392 dcl fixed builtin; 3 393 dcl bit builtin; 3 394 dcl max builtin; 3 395 dcl min builtin; 3 396 dcl rel builtin; 3 397 736 5 1 /* ak_info -- include file for info structures used by the following vfile_ 5 2* control orders: "add_key", "delete_key", "get_key", and "reassign_key". 5 3* Created by M. Asherman 3/23/76 5 4* Modified 5/13/77 to add separate gk_info structure */ 5 5 5 6 dcl 1 ak_info based (ak_info_ptr), 5 7 2 header like ak_header, 5 8 2 key char (ak_key_len refer (ak_info.header.key_len)); 5 9 5 10 dcl 1 ak_header based (ak_info_ptr), 5 11 2 flags aligned, 5 12 3 input_key bit (1) unal, /* set if key is input arg */ 5 13 3 input_desc bit (1) unal, /* set if descriptor is an input arg */ 5 14 3 mbz bit (34) unal, /* not used for the present */ 5 15 2 descrip fixed (35), /* record designator */ 5 16 2 key_len fixed; 5 17 5 18 dcl ak_info_ptr ptr; 5 19 dcl ak_key_len fixed; 5 20 5 21 5 22 dcl 1 rk_info based (rk_info_ptr), 5 23 2 header like rk_header, 5 24 2 key char (rk_key_len refer (rk_info.header.key_len)); 5 25 5 26 dcl 1 rk_header based (rk_info_ptr), 5 27 2 flags aligned, 5 28 3 input_key bit (1) unal, /* same as above */ 5 29 3 input_old_desc bit (1) unal, /* set if specified entry has initial descrip 5 30* given by old_descrip */ 5 31 3 input_new_desc bit (1) unal, /* set if new val for descrip is input in this struc */ 5 32 3 mbz bit (33) unal, 5 33 2 old_descrip fixed (35), /* used if first flag is set */ 5 34 2 new_descrip fixed (35), /* used only if second flag is set */ 5 35 2 key_len fixed; 5 36 5 37 dcl rk_info_ptr ptr; 5 38 dcl rk_key_len fixed; 5 39 5 40 5 41 dcl 1 gk_info based (gk_info_ptr), /* structure for get_key order */ 5 42 2 header like gk_header, 5 43 2 key char (gk_key_len refer (gk_info.header.key_len)); 5 44 /* may be Input as well as Output */ 5 45 5 46 dcl 1 gk_header based (gk_info_ptr), 5 47 2 flags aligned, 5 48 3 input_key bit (1) unal, /* if set, use key in this structure */ 5 49 3 input_desc bit (1) unal, /* if set, descriptor given in this structure */ 5 50 3 desc_code fixed (2) unal, /* 0=any, 1=current -- applies when input_desc="0"b */ 5 51 3 position_specification 5 52 unal, 5 53 4 current bit (1) unal, /* otherwise next */ 5 54 4 rel_type fixed (2) unal, /* as in seek_head, if input_key = "1"b */ 5 55 4 head_size fixed bin (9) unsigned unaligned, 5 56 /* size of head for initial seek */ 5 57 3 reset_pos bit (1) unal, /* if set, final position unchanged by this operation */ 5 58 3 pad bit (8) unal, 5 59 3 version fixed (8) unal, 5 60 2 descrip fixed (35), /* Output, except when input_desc="1"b */ 5 61 2 key_len fixed; /* Input when input_key="1"b, also Output in all cases */ 5 62 5 63 dcl gk_info_ptr ptr; 5 64 dcl gk_key_len fixed; 5 65 5 66 dcl gk_info_version_0 internal static fixed options (constant) init (0); 5 67 5 68 /* end ak_info.incl.pl1 */ 737 6 1 6 2 dcl 1 iocb aligned based (iocb_ptr), 6 3 /* I/O control block. */ 6 4 2 iocb_version fixed init (1), /* Version number of structure. */ 6 5 2 name char (32), /* I/O name of this block. */ 6 6 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 6 7 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 6 8 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 6 9 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 6 10 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 6 11 2 reserved bit (72), /* Reserved for future use. */ 6 12 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 6 13 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 6 14 /* open(p,mode,not_used,s) */ 6 15 2 close entry (ptr, fixed (35)),/* close(p,s) */ 6 16 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 17 /* get_line(p,bufptr,buflen,actlen,s) */ 6 18 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 19 /* get_chars(p,bufptr,buflen,actlen,s) */ 6 20 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 6 21 /* put_chars(p,bufptr,buflen,s) */ 6 22 2 modes entry (ptr, char (*), char (*), fixed (35)), 6 23 /* modes(p,newmode,oldmode,s) */ 6 24 2 position entry (ptr, fixed, fixed (21), fixed (35)), 6 25 /* position(p,u1,u2,s) */ 6 26 2 control entry (ptr, char (*), ptr, fixed (35)), 6 27 /* control(p,order,infptr,s) */ 6 28 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 29 /* read_record(p,bufptr,buflen,actlen,s) */ 6 30 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 6 31 /* write_record(p,bufptr,buflen,s) */ 6 32 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 6 33 /* rewrite_record(p,bufptr,buflen,s) */ 6 34 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 6 35 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 36 /* seek_key(p,key,len,s) */ 6 37 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 38 /* read_key(p,key,len,s) */ 6 39 2 read_length entry (ptr, fixed (21), fixed (35)); 6 40 /* read_length(p,len,s) */ 6 41 738 7 1 /* --------------- BEGIN include file iox_dcls.incl.pl1 --------------- */ 7 2 7 3 /* Written 05/04/78 by C. D. Tavares */ 7 4 /* Fixed declaration of iox_$find_iocb_n 05/07/80 by R. Holmstedt */ 7 5 7 6 dcl iox_$attach_name entry (char (*), pointer, char (*), pointer, fixed bin (35)), 7 7 iox_$attach_ptr entry (pointer, char (*), pointer, fixed bin (35)), 7 8 iox_$close entry (pointer, fixed bin (35)), 7 9 iox_$control entry (pointer, char (*), pointer, fixed bin (35)), 7 10 iox_$delete_record entry (pointer, fixed bin (35)), 7 11 iox_$destroy_iocb entry (pointer, fixed bin (35)), 7 12 iox_$detach_iocb entry (pointer, fixed bin (35)), 7 13 iox_$err_not_attached entry options (variable), 7 14 iox_$err_not_closed entry options (variable), 7 15 iox_$err_no_operation entry options (variable), 7 16 iox_$err_not_open entry options (variable), 7 17 iox_$find_iocb entry (char (*), pointer, fixed bin (35)), 7 18 iox_$find_iocb_n entry (fixed bin, ptr, fixed bin(35)), 7 19 iox_$get_chars entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 20 iox_$get_line entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 21 iox_$look_iocb entry (char (*), pointer, fixed bin (35)), 7 22 iox_$modes entry (pointer, char (*), char (*), fixed bin (35)), 7 23 iox_$move_attach entry (pointer, pointer, fixed bin (35)), 7 24 iox_$open entry (pointer, fixed bin, bit (1) aligned, fixed bin (35)), 7 25 iox_$position entry (pointer, fixed bin, fixed bin (21), fixed bin (35)), 7 26 iox_$propagate entry (pointer), 7 27 iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)), 7 28 iox_$read_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 7 29 iox_$read_length entry (pointer, fixed bin (21), fixed bin (35)), 7 30 iox_$read_record entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 7 31 iox_$rewrite_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 7 32 iox_$seek_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 7 33 iox_$write_record entry (pointer, pointer, fixed bin (21), fixed bin (35)) ; 7 34 7 35 dcl (iox_$user_output, 7 36 iox_$user_input, 7 37 iox_$user_io, 7 38 iox_$error_output) external static pointer; 7 39 7 40 /* ---------------- END include file iox_dcls.incl.pl1 ---------------- */ 739 8 1 /* Include File of error codes used by vfile_ and related programs */ 8 2 /* Created by M. Asherman 5/20/78 */ 8 3 dcl (error_table_$no_key, error_table_$file_busy, error_table_$segknown, error_table_$not_open, error_table_$noentry, 8 4 error_table_$no_file, error_table_$no_record, error_table_$not_detached, error_table_$not_closed, 8 5 error_table_$noarg, error_table_$too_many_args, error_table_$bad_file, error_table_$end_of_info, 8 6 error_table_$invalid_lock_reset, error_table_$lock_wait_time_exceeded, error_table_$last_reference, 8 7 error_table_$higher_inconsistency, error_table_$record_busy, error_table_$no_room_for_lock, 8 8 error_table_$lock_is_invalid, error_table_$unimplemented_version, error_table_$lock_not_locked, 8 9 error_table_$key_duplication, error_table_$bad_processid, error_table_$bad_arg, 8 10 error_table_$locked_by_this_process, error_table_$no_operation, error_table_$asynch_insertion, 8 11 error_table_$asynch_change, error_table_$too_many_refs, error_table_$asynch_deletion, error_table_$long_record, 8 12 error_table_$file_is_full, error_table_$key_order) 8 13 external fixed (35); 8 14 /* end of vfile_ error code include file */ 740 9 1 /* Begin include file ..... iox_modes.incl.pl1 */ 9 2 9 3 /* Written by C. D. Tavares, 03/17/75 */ 9 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 9 5 9 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 9 7 ("stream_input", "stream_output", "stream_input_output", 9 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 9 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 9 10 "direct_input", "direct_output", "direct_update"); 9 11 9 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 9 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 9 14 9 15 dcl (Stream_input initial (1), 9 16 Stream_output initial (2), 9 17 Stream_input_output initial (3), 9 18 Sequential_input initial (4), 9 19 Sequential_output initial (5), 9 20 Sequential_input_output initial (6), 9 21 Sequential_update initial (7), 9 22 Keyed_sequential_input initial (8), 9 23 Keyed_sequential_output initial (9), 9 24 Keyed_sequential_update initial (10), 9 25 Direct_input initial (11), 9 26 Direct_output initial (12), 9 27 Direct_update initial (13)) fixed bin int static options (constant); 9 28 9 29 /* End include file ..... iox_modes.incl.pl1 */ 741 742 end transaction_call_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/04/82 1621.0 transaction_call_.pl1 >dumps>old>recomp>transaction_call_.pl1 733 1 07/19/79 1547.0 set_current_image_info.incl.pl1 >ldd>include>set_current_image_info.incl.pl1 735 2 07/19/79 1547.0 transaction_call.incl.pl1 >ldd>include>transaction_call.incl.pl1 736 3 07/19/79 1547.0 vfile_indx.incl.pl1 >ldd>include>vfile_indx.incl.pl1 3-376 4 07/19/79 1547.0 vfile_action_codes.incl.pl1 >ldd>include>vfile_action_codes.incl.pl1 737 5 07/19/79 1547.0 ak_info.incl.pl1 >ldd>include>ak_info.incl.pl1 738 6 07/02/81 1905.0 iocbv.incl.pl1 >ldd>include>iocbv.incl.pl1 739 7 07/22/80 1335.1 iox_entries.incl.pl1 >ldd>include>iox_dcls.incl.pl1 740 8 07/19/79 1547.0 vfile_error_codes.incl.pl1 >ldd>include>vfile_error_codes.incl.pl1 741 9 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.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. Keyed_sequential_update 000000 constant fixed bin(17,0) initial dcl 9-15 set ref 465* P_command_line parameter char unaligned dcl 25 set ref 99 116 116 116 116 P_status parameter fixed bin(17,0) dcl 26 set ref 129 143* 162* 180 185 P_transaction_no parameter fixed bin(35,0) dcl 27 set ref 99 109* 113* 118* 122* 129 148 150 201 214 214 225* 232* 356 364* 401* 406 414* 419* 424 436 443 P_trc_flags parameter bit(36) dcl 28 ref 129 141 P_trc_status_ptr parameter pointer dcl 29 ref 129 142 addr builtin function dcl 3-384 ref 116 116 158 160 160 194 270 271 273 274 297 297 341 386 386 389 508 509 523 523 523 528 529 529 548 548 548 555 556 556 566 574 586 603 603 620 622 622 644 644 662 664 664 691 692 693 695 695 698 1-9 1-19 1-20 1-20 1-32 1-33 1-33 1-49 1-50 1-50 1-70 adjust_mod 000100 automatic fixed bin(35,0) dcl 35 set ref 250* 253* 341* after_applies 0(25) based bit(1) level 3 packed unaligned dcl 1-96 ref 1-17 ak_header based structure level 1 unaligned dcl 5-10 asynch_change 000242 automatic bit(1) dcl 564 set ref 571* 574* 586* 587* 588* 590 block_ptr 000102 automatic pointer dcl 36 set ref 509* 533 533 533 533 1-9 1-11 1-12 1-15 1-15 1-17 1-19 1-20 1-21 1-23 1-27 1-28 1-32 1-33 1-34 1-57 1-66 1-70 blockp 3 based pointer level 2 packed unaligned dcl 66 ref 509 change_tcf 000104 automatic bit(1) dcl 37 set ref 268* 279 338* check_asynch_changes parameter bit(1) unaligned dcl 489 ref 485 562 cleanup 000164 stack reference condition dcl 84 ref 113 clock builtin function dcl 77 ref 1-74 code parameter fixed bin(35,0) dcl 30 set ref 99 108* 113* 116* 118* 119 122* 124* 129 144* 160* 162 164 164 164* 175* 196* 201 214 214 227* 244* 260 262* 297* 298 298 301 304* 309* 317* 322* 328* 333* 341* 348* 356 370* 376* 377 378* 381* 382 386* 391 396 396 406 415* 424 432* 438* 448 455* 461* 465* 479* 495 499* 592* 600* 603* 604 604 622* 623 623 623 641* 644* 645 645 645 664* 665 695* 710 714* 1-39* 1-62* 1-76* codeptr builtin function dcl 76 ref 461 461 comp based fixed bin(17,0) level 2 in structure "new_ind_des" packed unaligned dcl 1-82 in procedure "set_current_image_info" set ref 1-32* comp based fixed bin(17,0) level 2 in structure "ind_des" packed unaligned dcl 1-92 in procedure "transaction_call_" set ref 1-19* cu_$cp 000010 constant entry external dcl 88 ref 116 cur_mod 000105 automatic fixed bin(35,0) dcl 38 set ref 571 571 588 1-11* 1-13 1-22* 1-28 1-34 1-55* 1-66 1-66 cur_tcode 000106 automatic fixed bin(35,0) dcl 39 set ref 148* 150* 152 158 179 231* 232 236 253 270 291 304* 389* 391* 395* 401 508 533 620 current_descrip 000107 automatic fixed bin(35,0) dcl 40 set ref 566* 1-26 date_time_ 000012 constant entry external dcl 89 ref 528 555 date_time_string 000226 automatic char(24) unaligned dcl 527 in begin block on line 526 set ref 528* 529* date_time_string 000234 automatic char(24) unaligned dcl 553 in begin block on line 552 set ref 555* 556* descrip 1 000322 automatic fixed bin(35,0) level 3 in structure "gk_inf" dcl 1-87 in procedure "set_current_image_info" set ref 1-51 descrip 1 000121 automatic fixed bin(35,0) level 3 in structure "gk_inf" dcl 43 in procedure "transaction_call_" set ref 162 344* 517 548* 556* 571 574 574 588 640 640 660* descrip 1 000274 automatic fixed bin(35,0) level 3 in structure "gk_inf" dcl 676 in procedure "set_iocbp" set ref 698 end_of_reference_list parameter bit(1) dcl 635 in procedure "get_next_non_passive_ref" set ref 632 639* 640 645* end_of_reference_list 000224 automatic bit(1) dcl 491 in procedure "verification" set ref 507* 508 604* end_of_reference_list 000110 automatic bit(1) dcl 41 in procedure "transaction_call_" set ref 266* 270 345* entry_point 000111 automatic char(32) unaligned dcl 42 set ref 107* 140* 208* 222* 363* 413* 431* 454* 714 er_code 000320 automatic fixed bin(35,0) dcl 1-81 set ref 1-50* 1-51 1-62 error_table_$asynch_change 000062 external static fixed bin(35,0) dcl 8-3 ref 119 124 592 error_table_$bad_arg 000056 external static fixed bin(35,0) dcl 8-3 ref 438 error_table_$end_of_info 000044 external static fixed bin(35,0) dcl 8-3 ref 391 604 645 error_table_$higher_inconsistency 000046 external static fixed bin(35,0) dcl 8-3 ref 1-39 1-62 error_table_$key_duplication 000054 external static fixed bin(35,0) dcl 8-3 ref 396 error_table_$no_key 000036 external static fixed bin(35,0) dcl 8-3 ref 164 298 623 1-62 error_table_$no_operation 000060 external static fixed bin(35,0) dcl 8-3 ref 244 262 309 317 322 328 333 370 499 error_table_$no_record 000042 external static fixed bin(35,0) dcl 8-3 ref 164 301 623 645 error_table_$not_open 000040 external static fixed bin(35,0) dcl 8-3 ref 479 error_table_$record_busy 000050 external static fixed bin(35,0) dcl 8-3 ref 1-76 error_table_$unimplemented_version 000052 external static fixed bin(35,0) dcl 8-3 ref 175 file_id 2 based fixed bin(35,0) level 2 in structure "gk_key" dcl 681 in procedure "set_iocbp" set ref 693* file_id 1 based fixed bin(35,0) level 2 in structure "gk_key" dcl 66 in procedure "transaction_call_" set ref 271 273* 274 523* 529* 548* 556* fixed builtin function dcl 3-392 ref 1-9 1-70 flags 000121 automatic structure level 3 in structure "gk_inf" dcl 43 in procedure "transaction_call_" set ref 154* 384* 616* 659* flags 000202 automatic structure level 3 in structure "rk_inf" dcl 281 in begin block on line 279 set ref 288* flags 000322 automatic structure level 3 in structure "gk_inf" dcl 1-87 in procedure "set_current_image_info" set ref 1-45* flags 000274 automatic structure level 3 in structure "gk_inf" dcl 676 in procedure "set_iocbp" set ref 686* get_pdir_ 000014 constant entry external dcl 90 ref 461 gk_desc based pointer unaligned dcl 680 ref 698 gk_header based structure level 1 unaligned dcl 5-46 gk_inf 000274 automatic structure level 1 unaligned dcl 676 in procedure "set_iocbp" set ref 695 695 gk_inf 000121 automatic structure level 1 unaligned dcl 43 in procedure "transaction_call_" set ref 160 160 386 386 603 603 622 622 644 644 664 664 gk_inf 000322 automatic structure level 1 unaligned dcl 1-87 in procedure "set_current_image_info" set ref 1-50 1-50 gk_key based structure level 1 dcl 66 in procedure "transaction_call_" gk_key based fixed bin(35,0) dcl 1-86 in procedure "set_current_image_info" set ref 1-49* gk_key based structure level 1 dcl 681 in procedure "set_iocbp" head_size 0(09) 000322 automatic fixed bin(9,0) level 5 in structure "gk_inf" packed unsigned unaligned dcl 1-87 in procedure "set_current_image_info" set ref 1-48* head_size 0(09) 000274 automatic fixed bin(9,0) level 5 in structure "gk_inf" packed unsigned unaligned dcl 676 in procedure "set_iocbp" set ref 689* head_size 0(09) 000121 automatic fixed bin(9,0) level 5 in structure "gk_inf" packed unsigned unaligned dcl 43 in procedure "transaction_call_" set ref 156* 618* header 000322 automatic structure level 2 in structure "gk_inf" unaligned dcl 1-87 in procedure "set_current_image_info" header 000121 automatic structure level 2 in structure "gk_inf" unaligned dcl 43 in procedure "transaction_call_" header 000274 automatic structure level 2 in structure "gk_inf" unaligned dcl 676 in procedure "set_iocbp" header 000202 automatic structure level 2 in structure "rk_inf" unaligned dcl 281 in begin block on line 279 ind_comp 1(06) based fixed bin(13,0) level 2 packed unaligned dcl 1-93 ref 1-19 1-32 ind_des based structure level 1 packed unaligned dcl 1-92 ind_des_structure based structure level 1 packed unaligned dcl 3-89 ind_desc 000132 automatic fixed bin(35,0) dcl 46 set ref 571 574 1-13* 1-15* 1-19 1-20 1-26* 1-56* ind_offset based bit(18) level 2 packed unaligned dcl 1-95 ref 1-20 1-33 ind_struct based structure level 1 unaligned dcl 1-94 ind_structure based structure level 1 unaligned dcl 3-102 indirect 0(24) based bit(1) level 3 packed unaligned dcl 1-96 ref 1-15 indx_cb based structure level 1 unaligned dcl 3-3 input_key 000322 automatic bit(1) level 4 in structure "gk_inf" packed unaligned dcl 1-87 in procedure "set_current_image_info" set ref 1-46* input_key 000274 automatic bit(1) level 4 in structure "gk_inf" packed unaligned dcl 676 in procedure "set_iocbp" set ref 687* input_key 000121 automatic bit(1) level 4 in structure "gk_inf" packed unaligned dcl 43 in procedure "transaction_call_" set ref 155* 617* 627* ioa_ 000016 constant entry external dcl 91 ref 523 529 548 556 iocb based structure level 1 dcl 6-2 iocbp 000134 automatic pointer dcl 48 set ref 341* 461* 465* 468 698* iox_$attach_name 000026 constant entry external dcl 7-6 ref 461 iox_$control 000030 constant entry external dcl 7-6 ref 160 297 386 603 622 644 664 695 1-50 iox_$open 000032 constant entry external dcl 7-6 ref 465 iox_$position 000034 constant entry external dcl 7-6 ref 378 381 600 641 key 3 000322 automatic char(4) level 2 in structure "gk_inf" packed unaligned dcl 1-87 in procedure "set_current_image_info" set ref 1-49 key 3 000121 automatic char(22) level 2 in structure "gk_inf" packed unaligned dcl 43 in procedure "transaction_call_" set ref 158 270 271 273 274 341 389 508 509 523 523 528 529 529 548 548 555 556 556 566 574 586 620 662 key 3 000274 automatic char(12) level 2 in structure "gk_inf" packed unaligned dcl 676 in procedure "set_iocbp" set ref 689 690 691 692 693 key 4 000202 automatic char(4) level 2 in structure "rk_inf" packed unaligned dcl 281 in begin block on line 279 set ref 290 291* key_len 2 000121 automatic fixed bin(17,0) level 3 in structure "gk_inf" dcl 43 in procedure "transaction_call_" set ref 157* 523 548 571 574 588 619* 661* key_len 3 000202 automatic fixed bin(17,0) level 3 in structure "rk_inf" dcl 281 in begin block on line 279 set ref 290* key_len 2 000274 automatic fixed bin(17,0) level 3 in structure "gk_inf" dcl 676 in procedure "set_iocbp" set ref 690* key_len 2 000322 automatic fixed bin(17,0) level 3 in structure "gk_inf" dcl 1-87 in procedure "set_current_image_info" set ref 1-47* last_file_id 000136 automatic fixed bin(35,0) dcl 49 set ref 269* 271 274* length builtin function dcl 3-386 ref 116 116 290 689 690 list 0(01) based bit(1) level 2 packed unaligned dcl 2-12 ref 523 548 lock_flag 0(22) based bit(1) level 3 packed unaligned dcl 1-96 set ref 533 533* 1-28 lock_id 1 based bit(36) level 2 dcl 681 set ref 692* message parameter char unaligned dcl 706 set ref 703 714* mod 000137 automatic fixed bin(17,0) dcl 50 set ref 1-21* 1-22 1-27* 1-28 1-28 1-49 1-55 mod_arg parameter fixed bin(35,0) dcl 657 ref 654 662 665 modifier 3 based fixed bin(35,0) level 2 dcl 1-93 ref 533 1-21 1-27 my_lock_id 000225 automatic bit(36) dcl 492 set ref 503* 533 533 new_descrip 2 000202 automatic fixed bin(35,0) level 3 dcl 281 set ref 293* 295* new_ind_des based structure level 1 packed unaligned dcl 1-82 new_ind_desc 000321 automatic fixed bin(35,0) dcl 1-85 set ref 1-32 1-33 1-56 non_passive_refs 4 based fixed bin(34,0) level 2 dcl 2-17 set ref 182* 520* 520 null builtin function dcl 3-387 ref 171 191 242 304 304 476 520 545 714 714 number based fixed bin(35,0) level 2 dcl 66 set ref 158* 270 389 508 620* 662* offset 0(18) based bit(18) level 2 in structure "ind_des" packed unaligned dcl 1-92 in procedure "transaction_call_" set ref 1-20* offset 0(18) based bit(18) level 2 in structure "new_ind_des" packed unaligned dcl 1-82 in procedure "set_current_image_info" set ref 1-33* old_descrip 1 000202 automatic fixed bin(35,0) level 3 dcl 281 set ref 289* open_data_ptr 22 based pointer level 2 dcl 6-2 ref 148 190 231 241 286 349 368 419 443 468 503 665 692 open_descrip_ptr 20 based pointer level 2 dcl 6-2 ref 476 open_indx_file$adjust_record 000020 constant entry external dcl 92 ref 341 passive_refs 3 based fixed bin(34,0) level 2 dcl 2-17 set ref 181* 545* 545 position_specification 0(05) 000322 automatic structure level 4 in structure "gk_inf" packed unaligned dcl 1-87 in procedure "set_current_image_info" position_specification 0(05) 000121 automatic structure level 4 in structure "gk_inf" packed unaligned dcl 43 in procedure "transaction_call_" position_specification 0(05) 000274 automatic structure level 4 in structure "gk_inf" packed unaligned dcl 676 in procedure "set_iocbp" prev_desc 7 based fixed bin(35,0) level 2 dcl 1-94 ref 1-15 prev_mod 6 based fixed bin(35,0) level 2 dcl 1-93 ref 1-11 1-34 1-66 rec_id 2 based fixed bin(35,0) level 2 dcl 66 set ref 341* 523* 529* 548* 556* 566 record_block based structure level 1 unaligned dcl 1-96 record_block_structure based structure level 1 unaligned dcl 3-115 record_lock 2 based bit(36) level 2 dcl 1-93 ref 533 ref_cnt 000140 automatic fixed bin(17,0) dcl 52 set ref 1-12* 1-23* 1-57* ref_count 1(20) based fixed bin(16,0) level 2 packed unsigned unaligned dcl 1-93 ref 1-12 ref_count_after 0(26) based fixed bin(16,0) level 2 packed unsigned unaligned dcl 1-93 ref 1-23 1-57 reflp 74 based pointer level 2 dcl 3-3 set ref 190 241 468* refp 000142 automatic pointer dcl 53 set ref 190* 191 241* 242 600* 603* 622* 641* 644* 692 695* reserved based structure level 2 dcl 1-96 reset_pos 0(18) 000274 automatic bit(1) level 4 packed unaligned dcl 676 set ref 688* rk_header based structure level 1 unaligned dcl 5-26 rk_inf 000202 automatic structure level 1 unaligned dcl 281 set ref 297 297 rollback_sw 000144 automatic bit(1) dcl 54 set ref 209* 223* 250 293 314 rtrim builtin function dcl 78 ref 461 saved_lock_copy 57 based bit(36) level 2 dcl 3-3 ref 503 692 stacq builtin function dcl 79 ref 533 stat_struct based structure level 1 unaligned dcl 1-93 stat_structure based structure level 1 unaligned dcl 3-92 string builtin function dcl 80 set ref 288* sub_code 000310 automatic fixed bin(35,0) dcl 708 set ref 713* 714* sub_err_ 000022 constant entry external dcl 94 ref 714 tcfp parameter pointer dcl 31 set ref 99 113* 118* 122* 129 148 160* 190 201 214 214 231 241 286 297* 304* 349 356 368 378* 381* 386* 406 419 424 443 448 468 476 503 664* 665 1-50* time 4 based fixed bin(53,0) level 2 packed unaligned dcl 66 ref 528 555 574 586 time_last_modified 0(18) based fixed bin(54,0) level 2 packed unsigned unaligned dcl 1-95 ref 1-9 1-70 time_stamp 000146 automatic fixed bin(71,0) dcl 55 set ref 571 574 586 1-9* 1-70 time_stamp_struct based structure level 1 packed unaligned dcl 1-95 time_stamp_structure based structure level 1 packed unaligned dcl 3-112 time_stamp_words 4 based fixed bin(71,0) level 2 dcl 1-93 set ref 1-9 1-20 1-33 1-70 timeout 000150 automatic fixed bin(71,0) dcl 56 set ref 505* 1-74 transaction 000152 automatic bit(1) dcl 57 set ref 504* 1-37 transaction_code 71 based fixed bin(35,0) level 2 dcl 3-3 set ref 148 231 286* 349* 368 419 443* 665* transaction_no 1 based fixed bin(35,0) level 2 dcl 2-17 set ref 179* transaction_status 000207 automatic fixed bin(17,0) dcl 284 in begin block on line 279 set ref 304* 307 314 320 326 331 transaction_status 2 based fixed bin(17,0) level 2 in structure "trc_status" dcl 2-17 in procedure "transaction_call_" set ref 180* trc_COMMITTED constant fixed bin(17,0) initial dcl 2-32 ref 295 314 331 trc_INCOMPLETE constant fixed bin(17,0) initial dcl 2-31 ref 289 660 trc_ROLLED_BACK constant fixed bin(17,0) initial dcl 2-33 ref 293 320 326 trc_UNDEFINED constant fixed bin(17,0) initial dcl 2-34 ref 143 185 307 trc_flag_s based structure level 1 dcl 2-12 trc_flags 000172 automatic bit(36) dcl 2-7 set ref 141* 194 523 548 trc_status based structure level 1 dcl 2-17 trc_status_ptr 000174 automatic pointer dcl 2-8 set ref 142* 171 173 179 180 181 182 520 520 520 545 545 545 trc_status_version_1 constant fixed bin(17,0) initial dcl 2-27 ref 173 uid_arg parameter fixed bin(35,0) dcl 674 ref 671 693 unique_chars_ 000024 constant entry external dcl 95 ref 459 unique_name 000153 automatic char(32) unaligned dcl 58 set ref 459* 461* 461 unspec builtin function dcl 3-391 set ref 154* 291* 291 384* 616* 659* 686* 1-45* verify_only parameter bit(1) dcl 488 ref 485 495 517 543 verify_refs based bit(1) level 2 packed unaligned dcl 2-12 set ref 194* version based fixed bin(17,0) level 2 dcl 2-17 ref 173 zero based fixed bin(35,0) level 2 dcl 681 set ref 691* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 9-15 Direct_output internal static fixed bin(17,0) initial dcl 9-15 Direct_update internal static fixed bin(17,0) initial dcl 9-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 9-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 9-15 Sequential_input internal static fixed bin(17,0) initial dcl 9-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 9-15 Sequential_output internal static fixed bin(17,0) initial dcl 9-15 Sequential_update internal static fixed bin(17,0) initial dcl 9-15 Stream_input internal static fixed bin(17,0) initial dcl 9-15 Stream_input_output internal static fixed bin(17,0) initial dcl 9-15 Stream_output internal static fixed bin(17,0) initial dcl 9-15 abs builtin function dcl 3-390 adding_key internal static fixed bin(17,0) initial dcl 4-13 adding_record internal static fixed bin(17,0) initial dcl 4-11 adjust_action internal static fixed bin(17,0) initial dcl 4-3 ak_info based structure level 1 unaligned dcl 5-6 ak_info_ptr automatic pointer dcl 5-18 ak_key_len automatic fixed bin(17,0) dcl 5-19 alloc_cb_file 000000 constant entry external dcl 3-359 allocate_action internal static fixed bin(17,0) initial dcl 4-8 append_action internal static fixed bin(17,0) initial dcl 4-19 binary builtin function dcl 75 bit builtin function dcl 3-393 bumping_count internal static fixed bin(17,0) initial dcl 4-1 change_index 000000 constant entry external dcl 3-372 change_record_list 000000 constant entry external dcl 3-373 clock_ 000000 constant entry external dcl 3-358 comp_table based structure array level 1 dcl 3-268 create_position_stack 000000 constant entry external dcl 3-369 create_seg_ptrs 000000 constant entry external dcl 3-364 current_t_code based fixed bin(35,0) dcl 3-82 delete_action internal static fixed bin(17,0) initial dcl 4-14 deleting_key internal static fixed bin(17,0) initial dcl 4-12 designator automatic fixed bin(35,0) dcl 3-88 designator_struct based structure level 1 dcl 3-127 divide builtin function dcl 3-385 eof_delete internal static fixed bin(17,0) initial dcl 4-15 error_table_$asynch_deletion external static fixed bin(35,0) dcl 8-3 error_table_$asynch_insertion external static fixed bin(35,0) dcl 8-3 error_table_$bad_file external static fixed bin(35,0) dcl 8-3 error_table_$bad_processid external static fixed bin(35,0) dcl 8-3 error_table_$file_busy external static fixed bin(35,0) dcl 8-3 error_table_$file_is_full external static fixed bin(35,0) dcl 8-3 error_table_$invalid_lock_reset external static fixed bin(35,0) dcl 8-3 error_table_$key_order external static fixed bin(35,0) dcl 8-3 error_table_$last_reference external static fixed bin(35,0) dcl 8-3 error_table_$lock_is_invalid external static fixed bin(35,0) dcl 8-3 error_table_$lock_not_locked external static fixed bin(35,0) dcl 8-3 error_table_$lock_wait_time_exceeded external static fixed bin(35,0) dcl 8-3 error_table_$locked_by_this_process external static fixed bin(35,0) dcl 8-3 error_table_$long_record external static fixed bin(35,0) dcl 8-3 error_table_$no_file external static fixed bin(35,0) dcl 8-3 error_table_$no_room_for_lock external static fixed bin(35,0) dcl 8-3 error_table_$noarg external static fixed bin(35,0) dcl 8-3 error_table_$noentry external static fixed bin(35,0) dcl 8-3 error_table_$not_closed external static fixed bin(35,0) dcl 8-3 error_table_$not_detached external static fixed bin(35,0) dcl 8-3 error_table_$segknown external static fixed bin(35,0) dcl 8-3 error_table_$too_many_args external static fixed bin(35,0) dcl 8-3 error_table_$too_many_refs external static fixed bin(35,0) dcl 8-3 extend_position_stack 000000 constant entry external dcl 3-370 f_b_ptr automatic pointer dcl 3-156 file_base based structure level 1 unaligned dcl 3-157 file_header based structure level 1 unaligned dcl 3-274 file_state_block based structure level 1 unaligned dcl 3-280 free_action internal static fixed bin(17,0) initial dcl 4-6 free_cb_file 000000 constant entry external dcl 3-361 free_position_stack 000000 constant entry external dcl 3-371 free_seg 000000 constant entry external dcl 3-367 free_seg_ptrs 000000 constant entry external dcl 3-365 fs_ptr automatic pointer dcl 3-279 get_new_seg 000000 constant entry external dcl 3-366 get_seg_ptr 000000 constant entry external dcl 3-362 gk_info based structure level 1 unaligned dcl 5-41 gk_info_ptr automatic pointer dcl 5-63 gk_info_version_0 internal static fixed bin(17,0) initial dcl 5-66 gk_key_len automatic fixed bin(17,0) dcl 5-64 index_state_block based structure level 1 unaligned dcl 3-298 indx_cb_ptr automatic pointer dcl 3-2 insert_action internal static fixed bin(17,0) initial dcl 4-18 iocb_ptr automatic pointer dcl 47 iox_$attach_ptr 000000 constant entry external dcl 7-6 iox_$close 000000 constant entry external dcl 7-6 iox_$delete_record 000000 constant entry external dcl 7-6 iox_$destroy_iocb 000000 constant entry external dcl 7-6 iox_$detach_iocb 000000 constant entry external dcl 7-6 iox_$err_no_operation 000000 constant entry external dcl 7-6 iox_$err_not_attached 000000 constant entry external dcl 7-6 iox_$err_not_closed 000000 constant entry external dcl 7-6 iox_$err_not_open 000000 constant entry external dcl 7-6 iox_$error_output external static pointer dcl 7-35 iox_$find_iocb 000000 constant entry external dcl 7-6 iox_$find_iocb_n 000000 constant entry external dcl 7-6 iox_$get_chars 000000 constant entry external dcl 7-6 iox_$get_line 000000 constant entry external dcl 7-6 iox_$look_iocb 000000 constant entry external dcl 7-6 iox_$modes 000000 constant entry external dcl 7-6 iox_$move_attach 000000 constant entry external dcl 7-6 iox_$propagate 000000 constant entry external dcl 7-6 iox_$put_chars 000000 constant entry external dcl 7-6 iox_$read_key 000000 constant entry external dcl 7-6 iox_$read_length 000000 constant entry external dcl 7-6 iox_$read_record 000000 constant entry external dcl 7-6 iox_$rewrite_record 000000 constant entry external dcl 7-6 iox_$seek_key 000000 constant entry external dcl 7-6 iox_$user_input external static pointer dcl 7-35 iox_$user_io external static pointer dcl 7-35 iox_$user_output external static pointer dcl 7-35 iox_$write_record 000000 constant entry external dcl 7-6 iox_modes internal static char(24) initial array dcl 9-6 is_ptr automatic pointer dcl 3-297 keys based char(4096) unaligned dcl 3-153 make_designator 000000 constant entry external dcl 3-363 max builtin function dcl 3-394 min builtin function dcl 3-395 must_adjust internal static fixed bin(17,0) initial dcl 4-21 must_rollback internal static fixed bin(17,0) initial dcl 4-22 node_block based structure level 1 unaligned dcl 3-139 non_eof_delete internal static fixed bin(17,0) initial dcl 4-5 old_file_base based structure level 1 unaligned dcl 3-331 pos_ptr automatic pointer dcl 51 position_frame based structure level 1 unaligned dcl 3-132 read_exclude internal static fixed bin(17,0) initial dcl 4-10 reassigning_key internal static fixed bin(17,0) initial dcl 4-9 rel builtin function dcl 3-396 replace_action internal static fixed bin(17,0) initial dcl 4-16 reverse builtin function dcl 3-383 rewrite_action internal static fixed bin(17,0) initial dcl 4-17 rk_info based structure level 1 unaligned dcl 5-22 rk_info_ptr automatic pointer dcl 5-37 rk_key_len automatic fixed bin(17,0) dcl 5-38 rollback_action internal static fixed bin(17,0) initial dcl 4-2 seg_array based fixed bin(19,0) array dcl 3-87 seg_ptr automatic pointer dcl 3-86 seg_ptr_array based pointer array dcl 3-85 set_bitcounts 000000 constant entry external dcl 3-368 short_iox_modes internal static char(4) initial array dcl 9-12 size builtin function dcl 3-389 stat_header_size internal static fixed bin(17,0) initial dcl 3-380 substr builtin function dcl 3-388 trc_VERIFY_REFS internal static bit(36) initial dcl 2-26 true_max_comp_num internal static fixed bin(17,0) initial dcl 3-379 truncate_action internal static fixed bin(17,0) initial dcl 4-20 unshared_opening internal static fixed bin(17,0) initial dcl 4-4 verify builtin function dcl 3-383 write_trunc internal static fixed bin(17,0) initial dcl 4-7 NAMES DECLARED BY EXPLICIT CONTEXT. assign 001651 constant entry external dcl 356 change_current_transaction_no 002115 constant entry external dcl 424 check_code 003476 constant entry internal dcl 703 ref 166 245 263 298 301 305 310 318 323 329 334 342 379 387 393 396 463 466 500 601 607 623 642 648 696 check_tcf_io_switch 002374 constant entry internal dcl 473 ref 111 146 229 366 417 434 457 check_time 003772 constant label dcl 1-70 ref 1-24 checkpoint 001221 constant entry external dcl 214 commit 001204 constant entry external dcl 214 ref 118 create_tcf_entry 003336 constant entry internal dcl 654 ref 395 find_first_ref 003140 constant entry internal dcl 613 ref 259 494 get_next_non_passive_ref 003222 constant entry internal dcl 632 ref 266 345 join 001237 constant label dcl 225 ref 210 number 002064 constant entry external dcl 406 return_from_transaction_call_ 001646 constant label dcl 351 ref 480 593 715 rollback 001162 constant entry external dcl 201 ref 113 122 set_current_image_info 003564 constant entry internal dcl 1-1 ref 567 set_iocbp 003413 constant entry internal dcl 671 ref 273 setup_ref_list 002154 constant entry external dcl 448 status 000750 constant entry external dcl 129 ref 304 transact 000605 constant entry external dcl 99 transaction_call_ 000572 constant entry external dcl 20 ref 461 461 verification 002411 constant entry internal dcl 485 ref 194 254 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4616 4702 4247 4626 Length 5350 4247 64 432 347 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME transaction_call_ 628 external procedure is an external procedure. on unit on line 113 72 on unit begin block on line 279 begin block shares stack frame of external procedure transaction_call_. check_tcf_io_switch internal procedure shares stack frame of external procedure transaction_call_. verification internal procedure shares stack frame of external procedure transaction_call_. begin block on line 526 begin block shares stack frame of external procedure transaction_call_. begin block on line 552 begin block shares stack frame of external procedure transaction_call_. begin block on line 562 begin block shares stack frame of external procedure transaction_call_. find_first_ref internal procedure shares stack frame of external procedure transaction_call_. get_next_non_passive_ref internal procedure shares stack frame of external procedure transaction_call_. create_tcf_entry internal procedure shares stack frame of external procedure transaction_call_. set_iocbp internal procedure shares stack frame of external procedure transaction_call_. check_code internal procedure shares stack frame of external procedure transaction_call_. set_current_image_info internal procedure shares stack frame of external procedure transaction_call_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME transaction_call_ 000100 adjust_mod transaction_call_ 000102 block_ptr transaction_call_ 000104 change_tcf transaction_call_ 000105 cur_mod transaction_call_ 000106 cur_tcode transaction_call_ 000107 current_descrip transaction_call_ 000110 end_of_reference_list transaction_call_ 000111 entry_point transaction_call_ 000121 gk_inf transaction_call_ 000132 ind_desc transaction_call_ 000134 iocbp transaction_call_ 000136 last_file_id transaction_call_ 000137 mod transaction_call_ 000140 ref_cnt transaction_call_ 000142 refp transaction_call_ 000144 rollback_sw transaction_call_ 000146 time_stamp transaction_call_ 000150 timeout transaction_call_ 000152 transaction transaction_call_ 000153 unique_name transaction_call_ 000172 trc_flags transaction_call_ 000174 trc_status_ptr transaction_call_ 000202 rk_inf begin block on line 279 000207 transaction_status begin block on line 279 000224 end_of_reference_list verification 000225 my_lock_id verification 000226 date_time_string begin block on line 526 000234 date_time_string begin block on line 552 000242 asynch_change begin block on line 562 000274 gk_inf set_iocbp 000310 sub_code check_code 000320 er_code set_current_image_info 000321 new_ind_desc set_current_image_info 000322 gk_inf set_current_image_info THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_ne_as alloc_cs cat_realloc_cs call_ext_in call_ext_out_desc call_ext_out return enable shorten_stack ext_entry ext_entry_desc int_entry stacq clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$cp date_time_ get_pdir_ ioa_ iox_$attach_name iox_$control iox_$open iox_$position open_indx_file$adjust_record sub_err_ unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$asynch_change error_table_$bad_arg error_table_$end_of_info error_table_$higher_inconsistency error_table_$key_duplication error_table_$no_key error_table_$no_operation error_table_$no_record error_table_$not_open error_table_$record_busy error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000571 99 000577 107 000625 108 000630 109 000631 111 000632 113 000633 116 000664 118 000704 119 000717 122 000723 124 000736 125 000741 129 000742 140 000762 141 000765 142 000770 143 000773 144 000775 146 000776 148 000777 150 001010 152 001011 154 001012 155 001013 156 001015 157 001017 158 001021 160 001023 162 001054 164 001062 166 001071 171 001102 173 001106 175 001111 176 001114 179 001115 180 001120 181 001123 182 001124 185 001125 190 001131 191 001136 194 001142 196 001154 197 001155 201 001156 208 001174 209 001177 210 001201 214 001202 222 001233 223 001236 225 001237 227 001240 229 001241 231 001242 232 001250 236 001251 241 001252 242 001254 244 001260 245 001263 250 001271 253 001275 254 001277 259 001305 260 001306 262 001310 263 001313 266 001321 268 001323 269 001325 270 001326 271 001336 273 001341 274 001347 279 001351 286 001353 288 001360 289 001362 290 001364 291 001366 293 001370 295 001375 297 001377 298 001431 301 001445 304 001456 305 001503 307 001511 309 001514 310 001517 314 001525 317 001532 318 001535 319 001543 320 001544 322 001546 323 001551 325 001557 326 001560 328 001563 329 001566 330 001574 331 001575 333 001577 334 001602 338 001610 341 001611 342 001626 344 001634 345 001635 346 001637 348 001640 349 001641 351 001646 356 001647 363 001663 364 001666 366 001667 368 001670 370 001676 371 001701 376 001702 377 001704 378 001706 379 001727 381 001735 382 001756 384 001760 386 001761 387 002012 389 002020 390 002024 391 002025 393 002033 395 002041 396 002043 399 002056 401 002057 402 002061 406 002062 413 002076 414 002101 415 002102 417 002103 419 002104 420 002112 424 002113 431 002127 432 002132 434 002133 436 002134 438 002136 439 002141 443 002142 444 002147 448 002150 454 002164 455 002167 457 002170 459 002171 461 002221 463 002331 465 002340 466 002357 468 002365 469 002373 473 002374 476 002375 479 002405 480 002410 485 002411 494 002413 495 002414 499 002423 500 002426 503 002434 504 002442 505 002444 507 002446 508 002447 509 002456 517 002460 520 002467 523 002475 528 002530 529 002550 532 002577 533 002600 538 002615 543 002616 545 002622 548 002630 555 002666 556 002706 562 002740 566 002746 567 002750 571 002751 574 002776 586 003014 587 003022 588 003024 590 003034 592 003036 593 003041 600 003042 601 003062 603 003070 604 003120 607 003130 608 003136 609 003137 613 003140 616 003141 617 003142 618 003144 619 003146 620 003150 622 003152 623 003202 627 003217 628 003221 632 003222 639 003224 640 003225 641 003235 642 003255 644 003263 645 003313 648 003326 649 003334 650 003335 654 003336 659 003340 660 003342 661 003344 662 003346 664 003350 665 003401 667 003412 671 003413 686 003415 687 003416 688 003420 689 003422 690 003424 691 003426 692 003427 693 003433 695 003435 696 003465 698 003473 699 003475 703 003476 710 003507 713 003512 714 003513 715 003563 1 1 003564 1 9 003565 1 11 003572 1 12 003574 1 13 003577 1 15 003607 1 17 003615 1 19 003620 1 20 003624 1 21 003627 1 22 003631 1 23 003632 1 24 003637 1 26 003640 1 27 003642 1 28 003644 1 32 003653 1 33 003657 1 34 003662 1 37 003665 1 39 003667 1 42 003672 1 45 003673 1 46 003674 1 47 003676 1 48 003700 1 49 003702 1 50 003704 1 51 003735 1 55 003742 1 56 003744 1 57 003746 1 58 003754 1 61 003755 1 62 003756 1 66 003763 1 70 003772 1 74 004000 1 76 004003 1 77 004006 1 79 004007 1 90 004010 ----------------------------------------------------------- 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