COMPILATION LISTING OF SEGMENT fm_put_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 04/02/87 1311.4 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION 8* 9* This module implements the control interval update operations of the 10* file manager. 11* 12* 13*NON-FAILING AUDIT COMMENTS NOT YET ADDRESSED: 14* 15* This module should be re-written. 16**/ 17 18 /* HISTORY: 19* 20*Written by Bensoussan-Ives, 06/22/82. 21* 01/28/82 by Andre Bensoussan: Specification and design. 22* 06/22/82 by Jeffery D. Ives: Design and coding. 23*Modified: 24*10/05/83 by Jeffrey D. Ives: Added initial implementation of lock advice. 25*01/25/84 by Jeffrey D. Ives: Fixed lock advice to make sure that, when the 26* advice is changed, the new advice is passed on to the lock manager. 27*05/23/84 by R. Michael Tague: Added simple_put and fm_put_. 28*06/07/84 by Lee Baldwin: Renamed a bunch of dm_error_ codes. 29*07/26/84 by Matthew Pierret: Changed to check extended ring brackets. 30* Also, as an aside, made extensive re-modularizations, name changes, 31* added RETURN procedure instead of all of those go to statements. 32*11/01/84 by Matthew Pierret: Answered audit comments: removed unnecessary 33* copy of p_file_oid after PUT_JOIN label; removed the un-used entry 34* internal_get_uid ; removed "signal error" - the cases in which 35* the signal was attempted were not possible ; changed to use 36* dm_error_$no_current_transaction instead of $fm_no_current_txn ; 37* moved external entry declarations two the main procedure ; liked 38* my_ci_parts.part and single_ci_part.part to ci_parts.part. 39* Removed the un-used undo entry. It is now in fm_do_$undo. 40* Removed declared but un-used variables. Removed dm_fm_file_oid 41* from GET_ACCESS_INFO, instead declaring gai_my_file_oid liked to 42* the file_oid in dm_fm_file_oid.incl.pl1 in the main procedure. 43* Made to use dm_ci_header.incl.pl1 and dm_ci_constants.incl.pl1. 44*12/06/84 by Matthew C. Pierret: Added must_be_zero component to my_ci_parts 45* and single_ci_part structures. Fixed to not inadvertently re-read 46* the p_file_oid parameter in the free entry. Changed local 47* flush_consec structure to fc_flush_consec, liked on flush_consec 48* in the include file flush_structures. Removed comment surrounding 49* form-feed. 50*12/17/84 by Matthew C. Pierret: Changed to use new file_access_info state 51* variables. 52*02/01/85 by Matthew C. Pierret: Changed to return dm_error_$file_was_deleted 53* instead of error_table_$invalidsegno if the latter is returned 54* from one the hcs_$flush_* entries. 55*02/06/85 by S. Cox: Added transaction_bj_full_ handler for the put entries. 56*03/08/85 by S. Cox: Added TRANSACTION_BJ_FULL_HANDLER invoked by nonlocal goto. 57*03/14/85 by R. Michael Tague: Added $postcommit_increment. 58*03/21/85 by S. Cox: TRANSACTION_BJ_FULL_HANDLER: Add revert of txn_bj_full_ 59*03/21/85 by R. Michael Tague: Added protected file check to 60* $postcommit_increment. 61*04/11/85 by Lindsey L. Spratt: Fixed to normally complete in FLUSH and 62* FLUSH_MOD_PAGES (when error_table_$invalidsegno is encountered) 63* before calling RETURN(dm_error_$file_was_deleted). 64*04/24/85 by Matthew Pierret: Changed FLUSH_MOD_PAGES to not return 65* dm_error_$file_was_deleted (or any error code) if the operation 66* is an unput operation and error_table_$invalid_segno is 67* encountered. 68*05/03/85 by Matthew Pierret: Changed the proc_txn_tbl version to char (8) from 69* bit(36)aligned with the value PROC_TXN_TBL_VERSION_2. Changed 70* proc_txn to maintain parallel arrays of modified pages and file 71* uids of the files to which the modified pages belong. Also changed 72* to insertion algorithm to do a binary search, changing 73* proc_txn.low_idx and proc_txn.high_idx to simply 74* proc_txn.last_entry. 75* Added fm_put_$discard_file_flush_list, which is to be called when 76* deleting a file to "forget" modified pages in the file. This 77* should eliminate error_table_$invalidsegno and $dirseg errors. 78**/ 79 80 81 /****^ HISTORY COMMENTS: 82* 1) change(87-01-15,Hergert), approve(87-04-01,MCR7632), 83* audit(87-02-02,Dupuis), install(87-04-02,MR12.1-1020): 84* For TR phx20754, arranged to pass along the element_id of the 85* key_count_array that we saved in cm_postcommit_increment so that we can 86* use it at post_commit time if necessary. We save it in my_postcommit_info. 87* END HISTORY COMMENTS */ 88 89 90 91 /* format: style2,ind3 */ 92 93 fm_put_$init_txn_tbl: 94 proc (p_code); 95 96 /* START OF DECLARATIONS */ 97 98 /* Parameters */ 99 100 dcl p_ci_num fixed bin (27) parm; 101 dcl p_ci_parts_ptr ptr parm; 102 dcl p_single_part_length fixed bin (17) parm; 103 dcl p_single_part_offset fixed bin (17) parm; 104 dcl p_single_part_ptr ptr parm; 105 dcl p_code fixed bin (35) parm; 106 dcl p_first_ci fixed bin (27) parm; 107 dcl p_lock_mode fixed bin parm; 108 dcl p_number_of_ci fixed bin (27) parm; 109 dcl p_file_oid bit (36) aligned parm; 110 dcl p_increment_info_ptr ptr parm; 111 dcl p_transaction_id bit (36) aligned parm; 112 dcl p_transaction_index fixed bin parm; 113 dcl p_file_uid bit (36) aligned parm; 114 115 116 /* Automatic */ 117 118 dcl ci_num fixed bin (27); 119 dcl code fixed bin (35); 120 dcl component_num fixed bin; 121 dcl first_ci fixed bin (27); 122 dcl last_ci fixed bin (28); 123 dcl lock_mode fixed bin; 124 dcl my_file_oid aligned bit (36); 125 dcl my_part_idx fixed bin; 126 dcl n_ci fixed bin (27); 127 dcl number_of_addressable_bytes 128 fixed bin; 129 dcl operation_is_unput bit aligned init ("0"b); 130 dcl page_num fixed bin (8); 131 dcl part_idx fixed bin; 132 dcl part_length fixed bin; 133 dcl part_offset fixed bin; 134 dcl some_ci_already_allocated 135 bit aligned; 136 dcl some_ci_already_free bit aligned; 137 dcl transaction_id bit (36) aligned; 138 dcl transaction_index fixed bin; 139 140 dcl dtcm fixed bin (71); 141 dcl my_ci_id fixed bin (71); 142 dcl my_ci_stamp fixed bin (71); 143 dcl part_ptr ptr; 144 145 146 dcl 1 seg aligned based, 147 2 pages (0:254), 148 3 double_words (512) fixed bin (71); 149 150 dcl part_buffer char (part_length) based (part_ptr); 151 152 dcl my_part_ptrs (8) ptr; 153 154 dcl 1 my_ci_parts aligned, 155 2 number_of_parts fixed bin init (0), 156 2 must_be_zero fixed bin init (0), 157 2 part (8) like ci_parts.part; 158 159 dcl 1 single_ci_part aligned, 160 2 number_of_parts fixed bin (17) init (1), 161 2 must_be_zero fixed bin init (0), 162 2 part (1) like ci_parts.part; 163 164 dcl 1 effective_integrity_switches 165 aligned like file_access_info.integrity_switches; 166 167 dcl 1 my_postcommit_info aligned like increment_postcommit_info; 168 dcl 1 my_file_access_info aligned like file_access_info; 169 dcl 1 my_signal_structure aligned like condition_info_header; 170 171 /* Based */ 172 /* Builtin */ 173 174 dcl (addr, baseno, baseptr, bin, clock, divide, hbound, lbound, max, min, multiply, null, string, substr, 175 unspec) builtin; 176 177 /* Conditions */ 178 179 dcl (cleanup, transaction_bj_full_) 180 condition; 181 182 /* Constants */ 183 184 dcl BYTES_PER_WORD init (4) fixed bin internal static options (constant); 185 dcl FOR_UNPUT init ("1"b) bit (1) aligned internal static options (constant); 186 dcl NOT_FOR_UNPUT init ("0"b) bit (1) aligned internal static options (constant); 187 dcl ERROR_FREE init (0) fixed bin (35) internal static options (constant); 188 dcl NO_TRANSACTION init (""b) bit (36) aligned internal static options (constant); 189 dcl ( 190 NULL_INTEGRITY_SWITCHES 191 init (1), 192 VANILLA_WRITE_INTEGRITY_SWITCHES 193 init (2), 194 UNPUT_INTEGRITY_SWITCHES 195 init (3), 196 UNPROTECTED_INTEGRITY_SWITCHES 197 init (4) 198 ) fixed bin internal static options (constant); 199 dcl LOCK_WAIT_TIME init (1e9) fixed bin (71) internal static options (constant); 200 201 /* External Variables */ 202 203 dcl dm_data_$current_txn_id 204 bit (36) aligned ext; 205 dcl dm_data_$current_txn_index 206 fixed bin ext; 207 dcl sys_info$data_management_ringno 208 fixed bin ext; 209 dcl error_table_$bad_subr_arg 210 fixed bin (35) ext; 211 dcl error_table_$invalidsegno 212 fixed bin (35) ext; 213 dcl error_table_$no_w_permission 214 fixed bin (35) ext; 215 dcl error_table_$noentry fixed bin (35) ext; 216 dcl error_table_$not_dm_ring 217 fixed bin (35) ext; 218 dcl dm_error_$bad_file_oid fixed bin (35) ext; 219 dcl dm_error_$bj_journal_full 220 fixed bin (35) ext; 221 dcl dm_error_$ci_already_allocated 222 fixed bin (35) ext; 223 dcl dm_error_$ci_already_free 224 fixed bin (35) ext; 225 dcl dm_error_$ci_bad_hdr_id_num 226 fixed bin (35) ext; 227 dcl dm_error_$ci_bad_hdr_size_code 228 fixed bin (35) ext; 229 dcl dm_error_$ci_bad_hdr_uid 230 fixed bin (35) ext; 231 dcl dm_error_$ci_bad_stamp_ver 232 fixed bin (35) ext; 233 dcl dm_error_$ci_num_oob fixed bin (35) ext; 234 dcl dm_error_$ci_num_parts_neg 235 fixed bin (35) ext; 236 dcl dm_error_$ci_parts_oob fixed bin (35) ext; 237 dcl dm_error_$file_doesnt_exist 238 fixed bin (35) ext; 239 dcl dm_error_$file_must_be_protected 240 fixed bin (35) ext; 241 dcl dm_error_$file_was_deleted 242 fixed bin (35) ext; 243 dcl dm_error_$fm_bad_inc_info_ver 244 fixed bin (35) ext; 245 dcl dm_error_$fm_bad_proc_txn_tbl_ver 246 fixed bin (35) ext; 247 dcl dm_error_$fm_cant_free_ci_0 248 fixed bin (35) ext; 249 dcl dm_error_$fm_first_ci_neg 250 fixed bin (35) ext; 251 dcl dm_error_$fm_num_ci_neg 252 fixed bin (35) ext; 253 dcl dm_error_$fm_old_txn_not_flushed 254 fixed bin (35) ext; 255 dcl dm_error_$lock_invalid_mode 256 fixed bin (35) ext; 257 dcl dm_error_$no_current_transaction 258 fixed bin (35) ext; 259 260 261 262 /* Entry */ 263 264 dcl continue_to_signal_ entry (fixed bin (35)); 265 dcl cu_$level_get entry (fixed bin); 266 dcl cu_$level_set entry (fixed bin); 267 dcl dm_hcs_$set_force_write_limit 268 entry (fixed bin, fixed bin (35)); 269 dcl get_ring_ entry () returns (fixed bin (3)); 270 dcl hcs_$flush_consecutive_pages 271 entry (ptr, fixed bin (35)); 272 dcl hcs_$flush_pages entry (ptr, fixed bin (35)); 273 274 dcl before_journal_manager_$flush_transaction 275 entry (bit (36) aligned, fixed bin, fixed bin (35)); 276 dcl before_journal_manager_$write_before_image 277 entry (bit (36) aligned, bit (36) aligned, fixed bin (27), ptr, fixed bin (71), 278 fixed bin (35)); 279 dcl before_journal_manager_$write_fm_postcommit_handler 280 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (21), fixed bin (35)); 281 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); 282 dcl hcs_$set_synchronized_sw 283 entry (char (*), char (*), bit aligned, fixed bin (35)); 284 dcl ioa_$rsnnl entry () options (variable); 285 dcl lock_manager_$lock entry (bit (36) aligned, fixed bin (27), fixed bin, fixed bin (71), fixed bin, 286 fixed bin (35)); 287 dcl msf_manager_$msf_get_ptr 288 entry (ptr, fixed bin, bit (1), ptr, fixed bin (24), fixed bin (35)); 289 dcl signal_ entry () options (variable); 290 dcl transaction_manager_$abort_txn 291 entry (bit (36) aligned, fixed bin (35)); 292 293 /* END OF DECLARATIONS */ 294 295 296 /* 297*init_txn_tbl: 298* entry (p_code); 299**/ 300 301 call INIT; 302 303 call TXN_INIT_PROC_DATA; 304 305 call RETURN (ERROR_FREE); 306 307 /* Effective end of fm_put_$init_txn_tbl */ 308 309 310 get_uid: 311 entry (p_file_oid, p_file_uid, p_code); 312 313 call INIT; 314 my_file_oid = p_file_oid; 315 file_access_info_ptr = addr (my_file_access_info); 316 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 317 318 if file_access_info.opens = 0 319 then call RETURN (dm_error_$bad_file_oid); 320 321 p_file_uid = file_access_info.uid; 322 323 call RETURN (ERROR_FREE); 324 325 /* Effective end of fm_put_$get_uid */ 326 327 allocate: 328 entry (p_file_oid, p_first_ci, p_number_of_ci, p_code); 329 330 call INIT; 331 my_file_oid = p_file_oid; 332 file_access_info_ptr = addr (my_file_access_info); 333 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 334 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 335 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 336 effective_integrity_switches); 337 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 338 339 if file_access_info.opens = 0 340 then call RETURN (dm_error_$bad_file_oid); 341 342 first_ci = p_first_ci; 343 n_ci = p_number_of_ci; 344 345 call CHECK_CI_RANGE (first_ci, n_ci, last_ci); 346 347 if effective_integrity_switches.lock 348 then 349 do; 350 do ci_num = first_ci to last_ci; 351 call LOCK_EXCLUSIVELY (ci_num, transaction_id, addr (my_file_oid) -> file_oid.file_access_table_idx); 352 end; 353 end; 354 355 some_ci_already_allocated = "0"b; 356 357 do ci_num = first_ci to last_ci; 358 component_num = divide (ci_num, file_access_info.blocking_factor, 27); 359 360 call MAKE_SEG_PTR (component_num, ci_ptr, addr (my_file_oid) -> file_oid.file_access_table_idx, 361 (effective_integrity_switches.bj)); 362 363 page_num = ci_num - multiply (component_num, file_access_info.blocking_factor, 27); 364 ci_ptr = addr (ci_ptr -> pages (page_num)); 365 366 if ci.trailer.stamp ^= 0 367 then some_ci_already_allocated = "1"b; 368 else 369 do; 370 call BASIC_ALLOCATE; 371 372 if effective_integrity_switches.transaction 373 then call TXN_REMEMBER_MOD_PAGE; 374 375 if effective_integrity_switches.aj 376 then 377 do; 378 end; 379 end; 380 end; 381 382 if some_ci_already_allocated 383 then call RETURN (dm_error_$ci_already_allocated); 384 385 call RETURN (ERROR_FREE); 386 387 388 /* Effective end of fm_put_$allocate */ 389 390 free: 391 entry (p_file_oid, p_first_ci, p_number_of_ci, p_code); 392 393 call INIT; 394 my_file_oid = p_file_oid; 395 file_access_info_ptr = addr (my_file_access_info); 396 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 397 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 398 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 399 effective_integrity_switches); 400 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 401 402 if file_access_info.opens = 0 403 then call RETURN (dm_error_$bad_file_oid); 404 405 first_ci = p_first_ci; 406 n_ci = p_number_of_ci; 407 408 if first_ci = 0 409 then call RETURN (dm_error_$fm_cant_free_ci_0); 410 411 call CHECK_CI_RANGE (first_ci, n_ci, last_ci); 412 413 if effective_integrity_switches.lock 414 then 415 do; 416 do ci_num = first_ci to last_ci; 417 call LOCK_EXCLUSIVELY (ci_num, transaction_id, addr (my_file_oid) -> file_oid.file_access_table_idx); 418 end; 419 end; 420 421 if effective_integrity_switches.bj 422 then 423 do; 424 single_ci_part.part (1).offset_in_bytes = 0; 425 single_ci_part.part (1).length_in_bytes = CI_ADDRESSABLE_LENGTH; 426 427 do ci_num = last_ci to first_ci by -1; 428 component_num = divide (ci_num, file_access_info.blocking_factor, 27); 429 430 call GET_SEG_PTR (component_num, ci_ptr, addr (my_file_oid) -> file_oid.file_access_table_idx); 431 432 if ci_ptr ^= null () 433 then 434 do; 435 page_num = ci_num - multiply (component_num, file_access_info.blocking_factor, 27); 436 ci_ptr = addr (ci_ptr -> seg.pages (page_num)); 437 438 if ci.trailer.stamp ^= 0 & unspec (ci.addressable_bytes) ^= ""b 439 then 440 do; 441 on transaction_bj_full_ goto TRANSACTION_BJ_FULL_HANDLER; 442 single_ci_part.part (1).local_ptr = addr (ci.addressable_bytes); 443 call before_journal_manager_$write_before_image (file_access_info.uid, my_file_oid, ci_num, 444 addr (single_ci_part), dtcm, code); 445 if code ^= 0 446 then call RETURN (code); 447 end; 448 end; 449 end; 450 451 call before_journal_manager_$flush_transaction (transaction_id, transaction_index, code); 452 if code ^= 0 453 then call RETURN (code); 454 end; 455 456 some_ci_already_free = "0"b; 457 458 do ci_num = last_ci to first_ci by -1; 459 component_num = divide (ci_num, file_access_info.blocking_factor, 27); 460 461 call GET_SEG_PTR (component_num, ci_ptr, addr (my_file_oid) -> file_oid.file_access_table_idx); 462 463 if ci_ptr = null () 464 then some_ci_already_free = "1"b; 465 else 466 do; 467 page_num = ci_num - multiply (component_num, file_access_info.blocking_factor, 27); 468 ci_ptr = addr (ci_ptr -> seg.pages (page_num)); 469 470 if ci.trailer.stamp = 0 471 then some_ci_already_free = "1"b; 472 473 if unspec (ci) ^= ""b 474 then 475 do; 476 ci.trailer.stamp = 0; 477 unspec (ci) = ""b; 478 479 if effective_integrity_switches.transaction 480 then call TXN_REMEMBER_MOD_PAGE; 481 482 if effective_integrity_switches.aj 483 then 484 do; 485 end; 486 end; 487 end; 488 end; 489 490 if some_ci_already_free 491 then call RETURN (dm_error_$ci_already_free); 492 else call RETURN (ERROR_FREE); 493 494 495 /* Effective end of fm_put_$free */ 496 497 internal_put: 498 entry (p_file_oid, p_ci_num, p_ci_parts_ptr, p_code); 499 500 call INIT; 501 my_file_oid = p_file_oid; 502 file_access_info_ptr = addr (my_file_access_info); 503 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 504 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 505 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 506 effective_integrity_switches); 507 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 508 509 ci_parts_ptr = p_ci_parts_ptr; 510 ci_num = p_ci_num; 511 512 number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 513 514 go to PUT_JOIN; 515 516 517 518 unput: 519 entry (p_file_oid, p_ci_num, p_ci_parts_ptr, p_code); 520 521 operation_is_unput = "1"b; 522 523 call INIT; 524 my_file_oid = p_file_oid; 525 file_access_info_ptr = addr (my_file_access_info); 526 call GET_ACCESS_INFO (my_file_oid, FOR_UNPUT, file_access_info_ptr); 527 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 528 call GET_INTEGRITY_SWITCHES (UNPUT_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 529 effective_integrity_switches); 530 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 531 532 call TXN_DONT_FLUSH_BJ; 533 534 ci_parts_ptr = p_ci_parts_ptr; 535 ci_num = p_ci_num; 536 537 number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 538 539 go to PUT_JOIN; 540 541 542 543 put_journal: 544 entry (p_file_oid, p_ci_num, p_ci_parts_ptr, p_code); 545 546 call INIT; 547 my_file_oid = p_file_oid; 548 file_access_info_ptr = addr (my_file_access_info); 549 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 550 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 551 call GET_INTEGRITY_SWITCHES (UNPROTECTED_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 552 effective_integrity_switches); 553 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 554 555 if file_access_info.opens = 0 556 then call RETURN (dm_error_$bad_file_oid); 557 558 ci_parts_ptr = p_ci_parts_ptr; 559 ci_num = p_ci_num; 560 561 if ci_num = 0 562 then number_of_addressable_bytes = CI_0_ADDRESSABLE_LENGTH; 563 else number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 564 565 go to PUT_JOIN; 566 567 568 raw_put: 569 entry (p_file_oid, p_ci_num, p_ci_parts_ptr, p_code); 570 571 call INIT; 572 my_file_oid = p_file_oid; 573 file_access_info_ptr = addr (my_file_access_info); 574 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 575 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 576 call GET_INTEGRITY_SWITCHES (NULL_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 577 effective_integrity_switches); 578 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 579 580 if file_access_info.opens = 0 581 then call RETURN (dm_error_$bad_file_oid); 582 583 ci_parts_ptr = p_ci_parts_ptr; 584 ci_num = p_ci_num; 585 586 if ci_num = 0 587 then number_of_addressable_bytes = CI_0_ADDRESSABLE_LENGTH; 588 else number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 589 590 go to PUT_JOIN; 591 592 593 594 595 put: 596 entry (p_file_oid, p_ci_num, p_ci_parts_ptr, p_code); 597 598 call INIT; 599 my_file_oid = p_file_oid; 600 file_access_info_ptr = addr (my_file_access_info); 601 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 602 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 603 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 604 effective_integrity_switches); 605 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 606 607 if file_access_info.opens = 0 608 then call RETURN (dm_error_$bad_file_oid); 609 610 ci_parts_ptr = p_ci_parts_ptr; 611 ci_num = p_ci_num; 612 613 if ci_num = 0 614 then number_of_addressable_bytes = CI_0_ADDRESSABLE_LENGTH; 615 else number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 616 617 go to PUT_JOIN; 618 619 simple_put: 620 entry (p_file_oid, p_ci_num, p_single_part_offset, p_single_part_ptr, p_single_part_length, p_code); 621 622 call INIT; 623 my_file_oid = p_file_oid; 624 file_access_info_ptr = addr (my_file_access_info); 625 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 626 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 627 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 628 effective_integrity_switches); 629 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 630 631 if file_access_info.opens = 0 632 then call RETURN (dm_error_$bad_file_oid); 633 ci_parts_ptr = addr (single_ci_part); 634 ci_parts.part (1).offset_in_bytes = p_single_part_offset; 635 ci_parts.part (1).length_in_bytes = p_single_part_length; 636 ci_parts.part (1).local_ptr = p_single_part_ptr; 637 ci_num = p_ci_num; 638 if ci_num = 0 639 then number_of_addressable_bytes = CI_0_ADDRESSABLE_LENGTH; 640 else number_of_addressable_bytes = CI_ADDRESSABLE_LENGTH; 641 go to PUT_JOIN; 642 643 644 PUT_JOIN: 645 if ci_parts.number_of_parts < 0 646 then call RETURN (dm_error_$ci_num_parts_neg); 647 648 if ci_num < 0 | ci_num > MAX_CI_NUM 649 then call RETURN (dm_error_$ci_num_oob); 650 651 if effective_integrity_switches.lock 652 then call LOCK_EXCLUSIVELY (ci_num, transaction_id, addr (my_file_oid) -> file_oid.file_access_table_idx); 653 654 component_num = divide (ci_num, file_access_info.blocking_factor, 27); 655 656 call MAKE_SEG_PTR (component_num, ci_ptr, addr (my_file_oid) -> file_oid.file_access_table_idx, 657 (effective_integrity_switches.bj)); 658 659 page_num = ci_num - multiply (component_num, file_access_info.blocking_factor, 27); 660 ci_ptr = addr (ci_ptr -> seg.pages (page_num)); 661 662 my_ci_stamp = ci.trailer.stamp; 663 my_ci_id = ci.header.id; 664 665 if my_ci_stamp = 0 666 then call BASIC_ALLOCATE; 667 else 668 do; 669 if addr (my_ci_stamp) -> ci_stamp.version ^= CI_STAMP_VERSION_1 670 then call RETURN (dm_error_$ci_bad_stamp_ver); 671 672 if addr (my_ci_id) -> ci_id.size_code ^= SIZE_CODE_1024_WORDS 673 then call RETURN (dm_error_$ci_bad_hdr_size_code); 674 675 if addr (my_ci_id) -> ci_id.uid ^= file_access_info.uid 676 then call RETURN (dm_error_$ci_bad_hdr_uid); 677 678 if addr (my_ci_id) -> ci_id.num ^= ci_num 679 then call RETURN (dm_error_$ci_bad_hdr_id_num); 680 end; 681 682 unspec (my_ci_parts) = ""b; 683 my_part_ptrs (*) = null (); 684 my_part_idx = 0; 685 686 do part_idx = lbound (ci_parts.part, 1) to ci_parts.number_of_parts; 687 part_length = ci_parts.part (part_idx).length_in_bytes; 688 689 if part_length < 0 690 then call RETURN (dm_error_$ci_parts_oob); 691 692 if part_length > 0 693 then 694 do; 695 part_offset = ci_parts.part (part_idx).offset_in_bytes; 696 697 if part_offset < 0 | part_offset + part_length > number_of_addressable_bytes 698 then call RETURN (dm_error_$ci_parts_oob); 699 700 my_part_idx = my_part_idx + 1; 701 702 my_ci_parts.part (my_part_idx).offset_in_bytes = part_offset; 703 my_ci_parts.part (my_part_idx).length_in_bytes = part_length; 704 my_ci_parts.part (my_part_idx).local_ptr = addr (substr (ci.addressable_bytes, part_offset + 1)); 705 706 my_part_ptrs (my_part_idx) = ci_parts.part (part_idx).local_ptr; 707 708 if my_part_idx = hbound (my_ci_parts.part, 1) 709 then call PUT_MY_PARTS; 710 end; 711 end; 712 713 if my_part_idx > 0 714 then call PUT_MY_PARTS; 715 716 call RETURN (ERROR_FREE); 717 718 719 /* Effective end of all put entries */ 720 721 722 MAIN_RETURN: 723 return; 724 725 RETURN: 726 proc (r_p_code); 727 728 dcl r_p_code fixed bin (35); 729 730 p_code = r_p_code; 731 go to MAIN_RETURN; 732 733 end RETURN; 734 735 TRANSACTION_BJ_FULL_HANDLER: 736 /**** Cannot call bj_report_err_ to do this since BJ cannot be called recursively. */ 737 /**** See also fm_(create_open delete_close), which need to handle this condition. */ 738 revert transaction_bj_full_; 739 my_signal_structure.length = size (my_signal_structure); 740 my_signal_structure.version = 1; 741 string (my_signal_structure.action_flags) = "0"b; 742 call ioa_$rsnnl ("Writing a before image for UID ^w OID ^w CI ^d", my_signal_structure.info_string, (0), 743 file_access_info.uid, my_file_oid, ci_num); 744 my_signal_structure.status_code = dm_error_$bj_journal_full; 745 746 call transaction_manager_$abort_txn (dm_data_$current_txn_id, code); 747 call signal_ ("transaction_bj_full_", null (), addr (my_signal_structure)); 748 call RETURN (dm_error_$bj_journal_full); /* should never get here */ 749 750 PUT_MY_PARTS: 751 proc; 752 my_ci_parts.number_of_parts = my_part_idx; 753 754 if effective_integrity_switches.bj 755 then 756 do; 757 on transaction_bj_full_ goto TRANSACTION_BJ_FULL_HANDLER; 758 call before_journal_manager_$write_before_image (file_access_info.uid, my_file_oid, ci_num, 759 addr (my_ci_parts), dtcm, code); 760 if code ^= 0 761 then call RETURN (code); 762 763 my_ci_stamp = TEMPLATE_CI_STAMP_1 + dtcm; 764 end; 765 else my_ci_stamp = TEMPLATE_CI_STAMP_1 + clock (); 766 767 if effective_integrity_switches.record_time_modified 768 then ci.header.stamp = my_ci_stamp; 769 770 do my_part_idx = 1 to my_ci_parts.number_of_parts; 771 part_length = my_ci_parts.part (my_part_idx).length_in_bytes; 772 part_offset = my_ci_parts.part (my_part_idx).offset_in_bytes; 773 part_ptr = my_part_ptrs (my_part_idx); 774 775 substr (ci.addressable_bytes, part_offset + 1, part_length) = part_buffer; 776 end; 777 778 if effective_integrity_switches.record_time_modified 779 then ci.trailer.stamp = my_ci_stamp; 780 781 if effective_integrity_switches.transaction 782 then call TXN_REMEMBER_MOD_PAGE; 783 784 if effective_integrity_switches.aj 785 then 786 do; 787 end; 788 789 unspec (my_ci_parts) = ""b; 790 my_part_ptrs (*) = null (); 791 my_part_idx = 0; 792 end PUT_MY_PARTS; 793 794 postcommit_increment: 795 entry (p_file_oid, p_ci_num, p_increment_info_ptr, p_code); 796 797 call INIT; 798 my_file_oid = p_file_oid; 799 ci_num = p_ci_num; 800 file_access_info_ptr = addr (my_file_access_info); 801 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 802 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 803 call GET_INTEGRITY_SWITCHES (VANILLA_WRITE_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 804 effective_integrity_switches); 805 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 806 807 if file_access_info.opens = 0 808 then call RETURN (dm_error_$bad_file_oid); 809 810 if ci_num < 0 | ci_num > MAX_CI_NUM 811 then call RETURN (dm_error_$ci_num_oob); 812 813 if effective_integrity_switches.bj 814 then 815 do; 816 on transaction_bj_full_ goto TRANSACTION_BJ_FULL_HANDLER; 817 fm_increment_info_ptr = p_increment_info_ptr; 818 if fm_increment_info.version ^= FM_INCREMENT_INFO_VERSION_1 819 then call RETURN (dm_error_$fm_bad_inc_info_ver); 820 my_postcommit_info.header.version = POSTCOMMIT_INFO_VERSION_1; 821 my_postcommit_info.header.operation = INCREMENT_POSTCOMMIT_OPERATION; 822 my_postcommit_info.increments_ptr = fm_increment_info.increments_ptr; 823 my_postcommit_info.number_of_words = fm_increment_info.number_of_words; 824 my_postcommit_info.ci_number = p_ci_num; 825 my_postcommit_info.offset_in_bytes = fm_increment_info.offset_in_bytes; 826 my_postcommit_info.element_id = fm_increment_info.element_id; 827 828 code = 0; 829 call before_journal_manager_$write_fm_postcommit_handler (file_access_info.uid, my_file_oid, 830 addr (my_postcommit_info), size (my_postcommit_info) * BYTES_PER_WORD, code); 831 if code ^= 0 832 then call RETURN (code); 833 end; 834 else call RETURN (dm_error_$file_must_be_protected); 835 836 call RETURN (ERROR_FREE); 837 838 /* Effective end of fm_put_$postcommit_increment */ 839 840 lock_advice: 841 entry (p_file_oid, p_lock_mode, p_code); 842 843 call INIT; 844 my_file_oid = p_file_oid; 845 file_access_info_ptr = addr (my_file_access_info); 846 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 847 call GET_INTEGRITY_SWITCHES (NULL_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 848 effective_integrity_switches); 849 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 850 851 if file_access_info.opens = 0 852 then call RETURN (dm_error_$bad_file_oid); 853 854 lock_mode = p_lock_mode; 855 856 if ^(lock_mode = 0 | lock_mode = LOCK_MODE_S | lock_mode = LOCK_MODE_X | lock_mode = LOCK_MODE_IS 857 | lock_mode = LOCK_MODE_IX | lock_mode = LOCK_MODE_SIX) 858 then call RETURN (dm_error_$lock_invalid_mode); 859 860 861 file_access_info.lock_advice = lock_mode; 862 file_access_info.last_transaction_id = ""b; 863 file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx) = file_access_info; 864 865 call RETURN (ERROR_FREE); 866 867 868 /* Effective end of fm_put_$lock_advice */ 869 870 flush_consecutive_ci: 871 entry (p_file_oid, p_first_ci, p_number_of_ci, p_code); 872 873 call INIT; 874 my_file_oid = p_file_oid; 875 file_access_info_ptr = addr (my_file_access_info); 876 call GET_ACCESS_INFO (my_file_oid, NOT_FOR_UNPUT, file_access_info_ptr); 877 call CHECK_RING_ACCESS ((file_access_info.ring_brackets.write)); 878 call GET_INTEGRITY_SWITCHES (NULL_INTEGRITY_SWITCHES, (file_access_info.integrity_switches), 879 effective_integrity_switches); 880 call GET_TRANSACTION_INFO (effective_integrity_switches.transaction, transaction_id, transaction_index); 881 882 if file_access_info.opens = 0 883 then call RETURN (dm_error_$bad_file_oid); 884 885 first_ci = p_first_ci; 886 n_ci = p_number_of_ci; 887 888 call CHECK_CI_RANGE (first_ci, n_ci, last_ci); 889 890 FLUSH_CONSECUTIVE: 891 begin; 892 893 dcl 1 fc_flush_consec aligned, 894 2 version fixed bin, 895 2 n_segs fixed bin, 896 2 seg (8) like flush_consec.seg; 897 898 unspec (fc_flush_consec) = ""b; 899 fc_flush_consec.version = 1; 900 901 do ci_num = first_ci to last_ci by file_access_info.blocking_factor; 902 component_num = divide (ci_num, file_access_info.blocking_factor, 27); 903 904 call GET_SEG_PTR (component_num, ci_ptr, addr (my_file_oid) -> file_oid.file_access_table_idx); 905 906 if ci_ptr ^= null () 907 then 908 do; 909 fc_flush_consec.n_segs = fc_flush_consec.n_segs + 1; 910 911 fc_flush_consec.seg (fc_flush_consec.n_segs).segno = bin (baseno (ci_ptr), 18); 912 913 fc_flush_consec.seg (fc_flush_consec.n_segs).first_page = 914 max (0, first_ci - multiply (component_num, file_access_info.blocking_factor, 27)); 915 916 fc_flush_consec.seg (fc_flush_consec.n_segs).n_pages = 917 min (file_access_info.blocking_factor - 1, 918 last_ci - multiply (component_num, file_access_info.blocking_factor, 27)) 919 - fc_flush_consec.seg (fc_flush_consec.n_segs).first_page + 1; 920 921 if fc_flush_consec.n_segs = hbound (fc_flush_consec.seg, 1) 922 then call FLUSH; 923 end; 924 end; 925 926 if fc_flush_consec.n_segs > 0 927 then call FLUSH; 928 929 930 931 FLUSH: 932 proc; 933 934 dcl f_callers_validation_level 935 fixed bin; 936 937 call cu_$level_get (f_callers_validation_level); 938 on cleanup call cu_$level_set (f_callers_validation_level); 939 call cu_$level_set (get_ring_ ()); 940 941 call hcs_$flush_consecutive_pages (addr (fc_flush_consec), code); 942 if code ^= 0 943 then if code = error_table_$invalidsegno 944 then code = dm_error_$file_was_deleted; 945 else call RETURN (code); 946 947 call cu_$level_set (f_callers_validation_level); 948 949 unspec (fc_flush_consec) = ""b; 950 fc_flush_consec.version = 1; 951 952 if code = dm_error_$file_was_deleted 953 then call RETURN (code); 954 955 return; 956 957 end FLUSH; 958 959 960 end FLUSH_CONSECUTIVE; 961 962 call RETURN (ERROR_FREE); 963 964 965 /* Effective end of fm_put_$flush_consective_ci */ 966 967 flush_modified_ci: 968 entry (p_transaction_id, p_transaction_index, p_code); 969 970 call INIT; 971 972 transaction_id = p_transaction_id; 973 transaction_index = p_transaction_index; 974 975 call TXN_FLUSH_MOD_PAGES; 976 977 call RETURN (ERROR_FREE); 978 979 /* Effective end of fm_put_$flush_modified_ci */ 980 981 982 adopt: 983 entry (p_transaction_id, p_transaction_index, p_code); 984 985 call INIT; 986 987 transaction_id = p_transaction_id; 988 transaction_index = p_transaction_index; 989 990 call TXN_DISCARD_FLUSH_LIST; 991 992 call RETURN (ERROR_FREE); 993 994 /* Effective end of fm_put_$adopt */ 995 996 997 clear_flush_list: 998 entry (p_code); 999 1000 call INIT; 1001 1002 transaction_id = dm_data_$current_txn_id; 1003 transaction_index = dm_data_$current_txn_index; 1004 1005 call TXN_CLEAR_FLUSH_LIST; 1006 1007 call RETURN (ERROR_FREE); 1008 1009 /* Effective end of fm_put_$clear_flush_list */ 1010 1011 discard_file_flush_list: 1012 entry (p_file_uid, p_code); 1013 1014 call INIT; 1015 1016 transaction_id = dm_data_$current_txn_id; 1017 transaction_index = dm_data_$current_txn_index; 1018 1019 call TXN_DISCARD_FILE_FLUSH_LIST (p_file_uid); 1020 1021 call RETURN (ERROR_FREE); 1022 1023 /* Effective end of fm_put_$discard_file_flush_list */ 1024 1025 /* THIS IS THE END OF THE MAIN LINE CODE */ 1026 1027 /* SUBROUTINES */ 1028 1029 1030 INIT: 1031 proc; 1032 1033 /* THE LOGIC OF fm_put_ DOES NOT DEPEND ON THE INITIALIZATIONS BELOW */ 1034 1035 ci_parts_ptr = null (); 1036 ci_ptr = null (); 1037 part_ptr = null (); 1038 1039 ci_num = -1; 1040 code = -1; 1041 component_num = -1; 1042 first_ci = -1; 1043 my_ci_id = -1; 1044 my_ci_stamp = -1; 1045 n_ci = -1; 1046 number_of_addressable_bytes = -1; 1047 page_num = -1; 1048 part_idx = -1; 1049 part_length = -1; 1050 part_offset = -1; 1051 transaction_id = ""b; 1052 transaction_index = -1; 1053 1054 /* THE LOGIC OF fm_put_ DOES NOT DEPEND ON THE INITIALIZATIONS ABOVE */ 1055 1056 end INIT; 1057 1058 CHECK_CI_RANGE: 1059 proc (ccr_p_first_ci, ccr_p_n_ci, ccr_p_last_ci); 1060 1061 dcl ccr_p_first_ci fixed bin (27) parameter; 1062 dcl ccr_p_n_ci fixed bin (27) parameter; 1063 dcl ccr_p_last_ci fixed bin (28) parameter; 1064 1065 if ccr_p_first_ci < 0 1066 then call RETURN (dm_error_$fm_first_ci_neg); 1067 1068 if ccr_p_n_ci < 0 1069 then call RETURN (dm_error_$fm_num_ci_neg); 1070 1071 ccr_p_last_ci = ccr_p_first_ci + ccr_p_n_ci - 1; 1072 1073 if ccr_p_last_ci > MAX_CI_NUM 1074 then call RETURN (dm_error_$ci_num_oob); 1075 else return; 1076 1077 end CHECK_CI_RANGE; 1078 1079 1080 BASIC_ALLOCATE: 1081 proc; 1082 my_ci_stamp = TEMPLATE_CI_STAMP_1 + clock (); 1083 1084 addr (my_ci_id) -> ci_id.uid = file_access_info.uid; 1085 addr (my_ci_id) -> ci_id.size_code = SIZE_CODE_1024_WORDS; 1086 addr (my_ci_id) -> ci_id.num = ci_num; 1087 1088 ci.header.stamp = my_ci_stamp; 1089 ci.header.id = my_ci_id; 1090 ci.trailer.stamp = my_ci_stamp; 1091 end BASIC_ALLOCATE; 1092 1093 GET_ACCESS_INFO: 1094 proc (gai_p_file_oid, gai_p_for_unput_operation, gai_p_file_access_info_ptr); 1095 1096 dcl gai_p_file_oid bit (36) aligned; 1097 dcl gai_p_for_unput_operation 1098 bit (1) aligned; 1099 dcl gai_p_file_access_info_ptr 1100 ptr; 1101 1102 dcl 1 gai_my_file_oid aligned like file_oid; 1103 1104 unspec (gai_my_file_oid) = gai_p_file_oid; 1105 1106 if gai_my_file_oid.file_access_table_idx < lbound (file_access_table.e, 1) 1107 | gai_my_file_oid.file_access_table_idx > file_access_table.h.last_entry 1108 then call RETURN (dm_error_$bad_file_oid); 1109 1110 file_access_info_ptr = gai_p_file_access_info_ptr; 1111 file_access_info = file_access_table.e (gai_my_file_oid.file_access_table_idx); 1112 1113 if file_access_info.state.entry_state = FILE_ACCESS_INFO_NOT_IN_USE 1114 then call RETURN (dm_error_$bad_file_oid); 1115 1116 if file_access_info.state.file_state ^= FILE_EXISTS 1117 then 1118 do; 1119 if file_access_info.state.file_state = FILE_LOGICALLY_DELETED 1120 then if gai_p_for_unput_operation 1121 then /* okay */ 1122 ; 1123 else call RETURN (dm_error_$file_doesnt_exist); 1124 else call RETURN (dm_error_$file_doesnt_exist); 1125 end; 1126 1127 if gai_my_file_oid.uid_tail ^= substr (file_access_info.uid, 19, 18) 1128 then call RETURN (dm_error_$bad_file_oid); 1129 1130 if file_access_info.seg_0_num = ""b 1131 then if gai_p_for_unput_operation 1132 then call RETURN (ERROR_FREE); 1133 else call RETURN (dm_error_$file_doesnt_exist); 1134 1135 return; 1136 1137 1138 end GET_ACCESS_INFO; 1139 1140 GET_INTEGRITY_SWITCHES: 1141 proc (gis_p_type, gis_p_file_integrity_switches, gis_p_effective_integrity_switches); 1142 1143 /* This subroutine determines the effective integrity switches to be 1144* used by this operation. Three sets of integrity switches are taken 1145* into account while determing the effective switches: the switches 1146* in the file's attributes, the switches that are to be forced 1147* (currently no switches are forced), and the switches permitted by 1148* the current operation. 1149**/ 1150 1151 dcl gis_p_type fixed bin parameter; /* Type of operation */ 1152 dcl 1 gis_p_file_integrity_switches 1153 aligned like file_access_info.integrity_switches parameter; 1154 /* the switches in the file attributes */ 1155 dcl 1 gis_p_effective_integrity_switches 1156 aligned like file_access_info.integrity_switches parameter; 1157 /* the resulting effective integrity switches */ 1158 1159 dcl 1 gis_permit_integrity_switches 1160 aligned like file_access_info.integrity_switches; 1161 /* the switches permitted by this operation */ 1162 dcl 1 gis_force_integrity_switches 1163 aligned like file_access_info.integrity_switches; 1164 /* the switches that are to be forced regardless of */ 1165 /* attributes and operation */ 1166 string (gis_permit_integrity_switches) = "0"b; 1167 string (gis_force_integrity_switches) = "0"b; 1168 1169 go to GIS_TYPE (gis_p_type); 1170 1171 GIS_TYPE (1): /* Null */ 1172 go to GIS_RETURN; 1173 GIS_TYPE (2): /* Vanilla write */ 1174 gis_permit_integrity_switches.record_time_modified = "1"b; 1175 gis_permit_integrity_switches.transaction = "1"b; 1176 gis_permit_integrity_switches.lock = "1"b; 1177 gis_permit_integrity_switches.bj = "1"b; 1178 gis_permit_integrity_switches.aj = "1"b; 1179 go to GIS_RETURN; 1180 GIS_TYPE (3): /* Unput */ 1181 gis_permit_integrity_switches.transaction = "1"b; 1182 gis_permit_integrity_switches.aj = "1"b; 1183 go to GIS_RETURN; 1184 GIS_TYPE (4): /* Unprotected */ 1185 gis_permit_integrity_switches.record_time_modified = "1"b; 1186 go to GIS_RETURN; 1187 1188 GIS_RETURN: 1189 gis_p_effective_integrity_switches = 1190 (gis_p_file_integrity_switches & gis_permit_integrity_switches) | gis_force_integrity_switches; 1191 return; 1192 1193 1194 end GET_INTEGRITY_SWITCHES; 1195 1196 GET_TRANSACTION_INFO: 1197 proc (gti_p_requires_transaction, gti_p_transaction_id, gti_p_transaction_index); 1198 1199 dcl gti_p_requires_transaction 1200 bit (1) parameter; 1201 dcl gti_p_transaction_id bit (36) aligned parameter; 1202 dcl gti_p_transaction_index 1203 fixed bin (17) parameter; 1204 1205 if gti_p_requires_transaction 1206 then 1207 do; 1208 gti_p_transaction_index = dm_data_$current_txn_index; 1209 gti_p_transaction_id = dm_data_$current_txn_id; 1210 if gti_p_transaction_id = ""b 1211 then call RETURN (dm_error_$no_current_transaction); 1212 end; 1213 else 1214 do; 1215 gti_p_transaction_index = -1; 1216 gti_p_transaction_id = ""b; 1217 end; 1218 1219 return; 1220 1221 end GET_TRANSACTION_INFO; 1222 1223 1224 1225 CHECK_RING_ACCESS: 1226 proc (cra_p_write_bracket); 1227 1228 dcl cra_p_write_bracket fixed bin (3) uns unal parameter; 1229 1230 dcl cra_caller_validation_level 1231 fixed bin; 1232 1233 call cu_$level_get (cra_caller_validation_level); 1234 1235 if cra_caller_validation_level > cra_p_write_bracket 1236 then call RETURN (error_table_$no_w_permission); 1237 else return; 1238 1239 end CHECK_RING_ACCESS; 1240 1241 LOCK_EXCLUSIVELY: 1242 proc (le_p_ci_num, le_p_transaction_id, le_p_file_access_table_idx); 1243 1244 dcl le_p_ci_num fixed bin (27) parameter; 1245 dcl le_p_transaction_id bit (36) aligned parameter; 1246 dcl le_p_file_access_table_idx 1247 fixed bin (17) unal; 1248 dcl le_code fixed bin (35) init (0); 1249 1250 if file_access_info.lock_advice ^= 0 1251 then 1252 do; 1253 if file_access_info.last_transaction_id ^= le_p_transaction_id 1254 then 1255 do; 1256 file_access_info.last_transaction_id = le_p_transaction_id; 1257 file_access_table.e (le_p_file_access_table_idx) = file_access_info; 1258 1259 call lock_manager_$lock (file_access_info.uid, LOCK_ENTIRE_FILE, (file_access_info.lock_advice), 1260 LOCK_WAIT_TIME, (0), le_code); 1261 if le_code ^= 0 1262 then call RETURN (le_code); 1263 end; 1264 end; 1265 1266 if ^(file_access_info.lock_advice = LOCK_MODE_X) 1267 then 1268 do; 1269 call lock_manager_$lock (file_access_info.uid, le_p_ci_num, LOCK_MODE_X, LOCK_WAIT_TIME, (0), le_code); 1270 if le_code ^= 0 1271 then call RETURN (le_code); 1272 end; 1273 1274 return; 1275 1276 end LOCK_EXCLUSIVELY; 1277 1278 TXN_FLUSH_MOD_PAGES: 1279 proc; 1280 1281 if proc_txn_tbl.h.version ^= PROC_TXN_TBL_VERSION_2 1282 then call RETURN (dm_error_$fm_bad_proc_txn_tbl_ver); 1283 1284 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1285 1286 if proc_txn.tid = ""b 1287 then return; 1288 1289 if transaction_id ^= proc_txn.tid 1290 then call RETURN (dm_error_$fm_old_txn_not_flushed); 1291 1292 proc_txn.flush_bj_first = "0"b; 1293 1294 call FLUSH_MOD_PAGES; 1295 1296 return; 1297 1298 1299 TXN_CLEAR_FLUSH_LIST: 1300 entry; 1301 if proc_txn_tbl.h.version ^= PROC_TXN_TBL_VERSION_2 1302 then call RETURN (dm_error_$fm_bad_proc_txn_tbl_ver); 1303 1304 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1305 1306 if proc_txn.tid = ""b 1307 then return; 1308 1309 if transaction_id ^= proc_txn.tid 1310 then call RETURN (dm_error_$fm_old_txn_not_flushed); 1311 1312 call FLUSH_MOD_PAGES; 1313 1314 return; 1315 1316 1317 TXN_DISCARD_FLUSH_LIST: 1318 entry; 1319 if proc_txn_tbl.h.version ^= PROC_TXN_TBL_VERSION_2 1320 then call RETURN (dm_error_$fm_bad_proc_txn_tbl_ver); 1321 1322 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1323 1324 unspec (proc_txn) = ""b; 1325 1326 return; 1327 1328 TXN_DISCARD_FILE_FLUSH_LIST: 1329 entry (txn_discard_file_uid); 1330 if proc_txn_tbl.h.version ^= PROC_TXN_TBL_VERSION_2 1331 then call RETURN (dm_error_$fm_bad_proc_txn_tbl_ver); 1332 1333 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1334 1335 do txn_discard_idx = lbound (proc_txn.mod_pages, 1) to proc_txn.last_entry 1336 while (proc_txn.file_uids (txn_discard_idx) ^= txn_discard_file_uid); 1337 end; 1338 txn_discard_delta = 0; 1339 do txn_discard_idx = txn_discard_idx to proc_txn.last_entry; 1340 if proc_txn.file_uids (txn_discard_idx) = txn_discard_file_uid 1341 then txn_discard_delta = txn_discard_delta + 1; 1342 else 1343 do; 1344 proc_txn.file_uids (txn_discard_idx - txn_discard_delta) = proc_txn.file_uids (txn_discard_idx); 1345 proc_txn.mod_pages (txn_discard_idx - txn_discard_delta) = proc_txn.mod_pages (txn_discard_idx); 1346 end; 1347 end; 1348 do txn_discard_idx = proc_txn.last_entry by -1 to proc_txn.last_entry - txn_discard_delta + 1; 1349 proc_txn.mod_pages (txn_discard_idx) = 0; 1350 proc_txn.file_uids (txn_discard_idx) = ""b; 1351 end; 1352 proc_txn.last_entry = proc_txn.last_entry - txn_discard_delta; 1353 1354 return; 1355 1356 TXN_DONT_FLUSH_BJ: 1357 entry; 1358 1359 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1360 1361 if proc_txn.tid = ""b 1362 then return; 1363 1364 if transaction_id ^= proc_txn.tid 1365 then call RETURN (dm_error_$fm_old_txn_not_flushed); 1366 1367 proc_txn.flush_bj_first = "0"b; 1368 1369 return; 1370 1371 1372 1373 TXN_REMEMBER_MOD_PAGE: 1374 entry; 1375 1376 /* DESCRIPTION of TXN_FLUSH_MOD_PAGES$TXN_REMEMBER_MOD_PAGE 1377* 1378* This entry in TXN_FLUSH_MOD_PAGES manages the insertion of a 1379* modified page in proc_txn.mod_pages, the list of pages modified by a 1380* transaction. Before the transaction can commit or abort, these pages 1381* must be flushed to disk. As a process can have only one transaction in 1382* progress, there is only one entry in proc_txn_tbl (per-process 1383* transaction table). 1384* 1385* Each entry in proc_txn.mod_pages is a segment number and page 1386* number, and has a corresponding file uid in proc_txn.file_uids. mod_pages 1387* is kept as a sorted list and is searched via a binary search. */ 1388 1389 1390 proc_txn_ptr = addr (proc_txn_tbl.e (1)); 1391 1392 if proc_txn.tid = NO_TRANSACTION 1393 then 1394 do; 1395 proc_txn.version = 1; 1396 proc_txn.tid = transaction_id; 1397 end; 1398 else if transaction_id ^= proc_txn.tid 1399 then call RETURN (dm_error_$fm_old_txn_not_flushed); 1400 1401 txn_remember_mod_page_breakout.segment_number = baseno (ci_ptr); 1402 txn_remember_mod_page_breakout.page_number = page_num; 1403 unspec (txn_remember_mod_page) = unspec (txn_remember_mod_page_breakout); 1404 1405 txn_remember_low_idx = 0; 1406 txn_remember_high_idx = proc_txn.last_entry + 1; 1407 txn_remember_delta = txn_remember_high_idx - txn_remember_low_idx; 1408 if txn_remember_delta = 1 1409 then txn_remember_current_idx = txn_remember_high_idx; 1410 else 1411 do; 1412 do while (txn_remember_delta > 1); 1413 txn_remember_current_idx = divide (txn_remember_delta, 2, 17, 0) + txn_remember_low_idx; 1414 if txn_remember_mod_page = proc_txn.mod_pages (txn_remember_current_idx) 1415 then return /* already here, nothing to do */; 1416 if txn_remember_mod_page < proc_txn.mod_pages (txn_remember_current_idx) 1417 then txn_remember_high_idx = txn_remember_current_idx; 1418 else txn_remember_low_idx = txn_remember_current_idx; 1419 txn_remember_delta = txn_remember_high_idx - txn_remember_low_idx; 1420 end; 1421 txn_remember_current_idx = txn_remember_high_idx; 1422 if proc_txn.last_entry >= hbound (proc_txn.mod_pages, 1) 1423 then 1424 do; 1425 call FLUSH_MOD_PAGES (); /* Resets proc_txn to ""b */ 1426 proc_txn.version = 1; 1427 proc_txn.tid = transaction_id; 1428 txn_remember_current_idx = 1; 1429 end; 1430 end; 1431 do txn_remember_shift_idx = proc_txn.last_entry by -1 to txn_remember_current_idx; 1432 proc_txn.mod_pages (txn_remember_shift_idx + 1) = proc_txn.mod_pages (txn_remember_shift_idx); 1433 proc_txn.file_uids (txn_remember_shift_idx + 1) = proc_txn.file_uids (txn_remember_shift_idx); 1434 end; 1435 proc_txn.last_entry = proc_txn.last_entry + 1; 1436 proc_txn.mod_pages (txn_remember_current_idx) = txn_remember_mod_page; 1437 proc_txn.file_uids (txn_remember_current_idx) = file_access_info.uid; 1438 if effective_integrity_switches.bj 1439 then proc_txn.flush_bj_first = "1"b; 1440 1441 return; 1442 1443 TXN_INIT_PROC_DATA: 1444 entry; 1445 1446 allocate proc_txn_tbl; 1447 1448 unspec (proc_txn_tbl) = ""b; 1449 proc_txn_tbl.h.version = PROC_TXN_TBL_VERSION_2; 1450 1451 begin; 1452 call cu_$level_get (callers_validation_level); 1453 on cleanup call cu_$level_set (callers_validation_level); 1454 call cu_$level_set (get_ring_ ()); 1455 1456 code = 0; 1457 call dm_hcs_$set_force_write_limit (10, code); 1458 if code ^= 0 1459 then call RETURN (code); 1460 1461 call cu_$level_set (callers_validation_level); 1462 1463 dcl callers_validation_level 1464 fixed bin; 1465 1466 end; 1467 1468 return; 1469 1470 1471 FLUSH_MOD_PAGES: 1472 proc; 1473 1474 proc_txn.n_pages = proc_txn.last_entry; 1475 1476 if proc_txn.n_pages > 0 1477 then 1478 do; 1479 if proc_txn.flush_bj_first 1480 then 1481 do; 1482 call before_journal_manager_$flush_transaction (transaction_id, transaction_index, code); 1483 if code ^= 0 1484 then call RETURN (code); 1485 end; 1486 1487 call cu_$level_get (callers_validation_level); 1488 on cleanup call cu_$level_set (callers_validation_level); 1489 call cu_$level_set (get_ring_ ()); 1490 1491 call hcs_$flush_pages (addr (proc_txn.version), code); 1492 if code ^= 0 1493 then if code = error_table_$invalidsegno 1494 then code = dm_error_$file_was_deleted; 1495 else call RETURN (code); 1496 1497 call cu_$level_set (callers_validation_level); 1498 end; 1499 1500 unspec (proc_txn) = ""b; 1501 1502 if code = dm_error_$file_was_deleted 1503 then if operation_is_unput 1504 then code = 0 /* For unput - deleted file is not unexpected */; 1505 else call RETURN (code); 1506 1507 return; 1508 1509 dcl callers_validation_level 1510 fixed bin; 1511 1512 end FLUSH_MOD_PAGES; 1513 1514 /* Declarations for TXN_FLUSH_MOD_PAGES entries */ 1515 1516 dcl ( 1517 txn_discard_file_uid bit (36) aligned, 1518 txn_discard_delta fixed bin, 1519 txn_discard_idx fixed bin 1520 ); 1521 dcl ( 1522 txn_remember_low_idx fixed bin, 1523 txn_remember_high_idx fixed bin, 1524 txn_remember_current_idx 1525 fixed bin, 1526 txn_remember_delta fixed bin, 1527 txn_remember_shift_idx fixed bin, 1528 txn_remember_mod_page fixed bin (33) 1529 ); 1530 dcl 1 txn_remember_mod_page_breakout 1531 aligned, 1532 2 segment_number bit (18) unal, 1533 2 page_number fixed bin unal; 1534 1535 dcl proc_txn_ptr ptr; 1536 dcl 1 proc_txn aligned based (proc_txn_ptr), 1537 2 tid bit (36), 1538 2 flush_bj_first bit, 1539 2 last_entry fixed bin, 1540 2 mbz fixed bin, 1541 2 version fixed bin, 1542 2 n_pages fixed bin, 1543 2 mod_pages (250) fixed bin (33), 1544 2 file_uids (250) bit (36) aligned; 1545 1546 dcl fm_data_$proc_txn_tbl_ptr 1547 ptr ext; 1548 dcl 1 proc_txn_tbl aligned based (fm_data_$proc_txn_tbl_ptr), 1549 2 h, 1550 3 version char (8) aligned, 1551 3 mbz fixed bin (71), 1552 2 e (1) like proc_txn; 1553 1554 dcl PROC_TXN_TBL_VERSION_2 char (8) aligned static options (constant) init ("FM-PTT 2"); 1555 1556 1557 end TXN_FLUSH_MOD_PAGES; 1558 1559 /* Make_seg means if you can't get a pointer, don't come back. */ 1560 1561 MAKE_SEG_PTR: 1562 proc (msp_p_component_num, msp_p_ci_ptr, msp_p_file_access_table_idx, msp_p_bj_on); 1563 1564 1565 1566 dcl msp_p_component_num fixed bin parameter; 1567 dcl msp_p_ci_ptr ptr parameter; 1568 dcl msp_p_file_access_table_idx 1569 fixed bin (17) unal parameter; 1570 dcl msp_p_bj_on bit (1) parameter; 1571 1572 dcl msp_make_seg bit (1) aligned; 1573 dcl msp_code init (0) fixed bin (35); 1574 1575 msp_make_seg = "1"b; 1576 go to MSP_JOIN; 1577 1578 GET_SEG_PTR: 1579 entry (msp_p_component_num, msp_p_ci_ptr, msp_p_file_access_table_idx); 1580 1581 msp_make_seg = "0"b; 1582 go to MSP_JOIN; 1583 1584 MSP_JOIN: 1585 if msp_p_component_num = 0 1586 then 1587 do; 1588 msp_p_ci_ptr = baseptr (file_access_info.seg_0_num); 1589 return; 1590 end; 1591 else if msp_p_component_num <= hbound (file_access_info.seg_nums, 1) 1592 then 1593 do; 1594 if file_access_info.seg_nums (msp_p_component_num) ^= 0 1595 then 1596 do; 1597 msp_p_ci_ptr = baseptr (file_access_info.seg_nums (msp_p_component_num)); 1598 return; 1599 end; 1600 end; 1601 1602 CALL_RING_0: 1603 begin; 1604 1605 dcl msp_dir_name char (168); 1606 dcl msp_entry_name char (32); 1607 dcl msp_callers_validation_level 1608 fixed bin; 1609 1610 call cu_$level_get (msp_callers_validation_level); 1611 on cleanup call cu_$level_set (msp_callers_validation_level); 1612 call cu_$level_set (get_ring_ ()); 1613 1614 call msf_manager_$msf_get_ptr ((file_access_info.msf_ptr), msp_p_component_num, "0"b, msp_p_ci_ptr, (0), 1615 msp_code); 1616 1617 if msp_p_ci_ptr = null () 1618 then 1619 do; 1620 if msp_code ^= error_table_$noentry 1621 then call RETURN (msp_code); 1622 1623 if msp_make_seg 1624 then 1625 do; 1626 call msf_manager_$msf_get_ptr ((file_access_info.msf_ptr), msp_p_component_num, "1"b, msp_p_ci_ptr, 1627 (0), msp_code); 1628 if msp_p_ci_ptr = null () 1629 then call RETURN (msp_code); 1630 1631 if msp_p_bj_on 1632 then 1633 do; 1634 call hcs_$fs_get_path_name (msp_p_ci_ptr, msp_dir_name, (0), msp_entry_name, msp_code); 1635 if msp_code ^= 0 1636 then call RETURN (msp_code); 1637 1638 call hcs_$set_synchronized_sw (msp_dir_name, msp_entry_name, "1"b, msp_code); 1639 if msp_code ^= 0 1640 then 1641 do; 1642 if msp_code = error_table_$not_dm_ring & sys_info$data_management_ringno ^= get_ring_ () 1643 then msp_code = 0; 1644 else call RETURN (msp_code); 1645 end; 1646 end; 1647 end; 1648 end; 1649 1650 call cu_$level_set (msp_callers_validation_level); 1651 1652 1653 end CALL_RING_0; 1654 1655 if msp_p_ci_ptr ^= null () & msp_p_component_num <= hbound (file_access_info.seg_nums, 1) 1656 then 1657 do; 1658 file_access_info.seg_nums (msp_p_component_num) = bin (baseno (msp_p_ci_ptr), 18); 1659 file_access_table.e (msp_p_file_access_table_idx) = file_access_info; 1660 end; 1661 1662 return; 1663 1664 end MAKE_SEG_PTR; 1665 1 1 /* BEGIN INCLUDE FILE: dm_ci.incl.pl1 */ 1 2 1 3 /* DESCRIPTION: 1 4* 1 5* This include file contains the structure which defines the 1 6* format of a control interval. 1 7* 1 8* **** NOTE: This include file depends on the dm_ci_header.incl.pl1 **** 1 9* **** Any program which includes dm_ci.incl.pl1 must also include **** 1 10* **** dm_ci_header.incl.pl1. **** 1 11**/ 1 12 1 13 /* HISTORY: 1 14*Written by Jeffrey D. Ives, 09/07/82. 1 15* (design by Andre Bensoussan and Jeffrey Ives.) 1 16*Modified: 1 17*11/07/84 by Matthew Pierret: To remove declarations which are also in 1 18* dm_ci_header.incl.pl1. 1 19**/ 1 20 1 21 /* format: style2,ind3 */ 1 22 1 23 dcl ci_ptr ptr; 1 24 dcl 1 ci aligned based (ci_ptr), 1 25 2 header like ci_header_chunks, 1 26 2 addressable_bytes char (4072), 1 27 2 trailer like ci_trailer_chunk; 1 28 1 29 1 30 /* END INCLUDE FILE: dm_ci.incl.pl1 */ 1666 1667 2 1 /* BEGIN INCLUDE FILE: dm_ci_header.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* 2 5* This include file contains various structures which make up the 2 6* header and trailer of a control interval. 2 7* 2 8* **** NOTE: The include file dm_ci.incl.pl1 is heavily dependent **** 2 9* **** on this include file. When changing this include file, **** 2 10* **** check dm_ci.incl.pl1 to see if it is affected. **** 2 11**/ 2 12 2 13 /* HISTORY: 2 14*Written by Jeffrey D. Ives, 03/02/82. 2 15* (Design by Andre Bensoussan and Jeffrey D. Ives) 2 16*Modified: 2 17*11/02/84 by Matthew Pierret: Re-organized so that dm_ci.incl.pl1 and 2 18* dm_ci_header.incl.pl1 do not duplicate structures or constants. 2 19**/ 2 20 2 21 /* format: style2,ind3 */ 2 22 2 23 /* ci_header is the first four words of a control interval. Its contents 2 24* are used to verify that a control interval is in an expected format, 2 25* to identify the control interval and the file to which the control 2 26* interval belongs, and to maintain information for the synchronization 2 27* of disk I/O between DM file control intervals and associated before 2 28* journal control intervals. The first two words are the time stamp for 2 29* synchronization; the latter two identify the control interval. */ 2 30 2 31 dcl ci_header_ptr ptr; 2 32 dcl 1 ci_header aligned based (ci_header_ptr), 2 33 2 stamp like ci_stamp, 2 34 2 id like ci_id; 2 35 2 36 /* ci_trailer is the last two words of a control interval and must match 2 37* the first two words (ci_header.stamp). */ 2 38 2 39 dcl ci_trailer_ptr ptr; 2 40 dcl 1 ci_trailer like ci_header.stamp aligned based (ci_trailer_ptr); 2 41 2 42 2 43 /* ci_stamp is a two-word date/time modified stamp, consisting of: 2 44* version: a 9-bit version string for the structure 2 45* bj_idx: before journal index for I/O synchronization 2 46* time_modified: Multics clock time of last modification */ 2 47 2 48 dcl 1 ci_stamp aligned based, 2 49 3 version bit (9) unal, 2 50 3 bj_idx fixed bin (9) uns unal, 2 51 3 time_modified fixed bin (53) unal; 2 52 2 53 dcl CI_HEADER_STAMP_VERSION_1 2 54 bit (9) aligned static options (constant) init ("641"b3); 2 55 2 56 /* ci_id is a two-word identification of the control interval, which 2 57* rarely changes and consists of: 2 58* uid: DM file unique identifier 2 59* size_code: the control interval size in bytes, in an encoded 2 60* form (see ci_size_code below). 2 61* num: the control interval number. 0 is the number of the first 2 62* control interval of a file. */ 2 63 2 64 dcl 1 ci_id aligned based, 2 65 3 uid bit (36), 2 66 3 size_code bit (9) unal, 2 67 3 num fixed bin (27) uns unal; 2 68 2 69 /* ci_size_code is the structure which defines the content of ci_id.size_code. 2 70* The size in bytes of a control interval is equal to 2 71* (2 ** ci_size_code.exponent * (64 + 8 * ci_size_code.addon)). */ 2 72 2 73 dcl 1 ci_size_code aligned based, 2 74 2 exponent fixed bin (6) uns unal, 2 75 2 addon fixed bin (3) uns unal; 2 76 2 77 /* ci_header_chunks is a structure which can be used to update the 2 78* ci_stamp or ci_id in one memory cycle. */ 2 79 2 80 dcl 1 ci_header_chunks aligned based (ci_header_ptr), 2 81 2 stamp fixed bin (71), 2 82 2 id fixed bin (71); 2 83 2 84 /* ci_trailer_chunk is a structure which can e used to update the 2 85* ci_trailer in one memory cycle. */ 2 86 2 87 dcl 1 ci_trailer_chunk aligned based, 2 88 2 stamp fixed bin (71); 2 89 2 90 2 91 /* END INCLUDE FILE: dm_ci_header.incl.pl1 */ 1668 1669 3 1 /* BEGIN INCLUDE FILE dm_ci_lengths.incl.pl1 */ 3 2 3 3 /* DESCRIPTION: 3 4* This include file contains constants which are the length in bytes 3 5* of the addressable portion of a control interval. The addressable portion 3 6* is that part of the control interval which callers of file_manager_ 3 7* may access, specifically, everything between the end of the control 3 8* interval header (ci_header) and the control interval trailer (ci_trailer). 3 9* Control interval 0 is slightly different, as it also contains an 3 10* unaddressable portion in which it maintains the file attributes. For 3 11* control interval 0 the addressable portion is everything between the end 3 12* of the control interval header and the beginning of the file attributes. 3 13**/ 3 14 3 15 /* HISTORY: 3 16*Written by Matthew Pierret, 11/02/84. 3 17*Modified: 3 18**/ 3 19 3 20 /* format: style2,ind3 */ 3 21 3 22 dcl CONTROL_INTERVAL_ADDRESSABLE_LENGTH_IN_BYTES 3 23 fixed bin (17) init (4072) int static options (constant); 3 24 3 25 dcl CONTROL_INTERVAL_ZERO_ADDRESSABLE_LENGTH_IN_BYTES 3 26 fixed bin (17) init (3176) int static options (constant); 3 27 3 28 3 29 dcl CI_ADDRESSABLE_LENGTH fixed bin (17) init (4072) int static options (constant); 3 30 3 31 dcl CI_0_ADDRESSABLE_LENGTH 3 32 fixed bin (17) init (3176) int static options (constant); 3 33 3 34 /* END INCLUDE FILE dm_ci_lengths.incl.pl1 */ 1670 1671 4 1 /* BEGIN INCLUDE FILE dm_ci_constants.incl.pl1 */ 4 2 4 3 /* DESCRIPTION: 4 4* 4 5* This include file contains constants used with the ci and 4 6* ci_header structures. 4 7**/ 4 8 4 9 /* HISTORY: 4 10*Written by Matthew Pierret, 11/07/84. 4 11*Modified: 4 12**/ 4 13 4 14 /* format: style2,ind3 */ 4 15 4 16 4 17 dcl MAX_CI_NUM fixed bin (27) static options (constant) init (134217727); 4 18 dcl CI_STAMP_VERSION_1 bit (9) aligned static options (constant) init ("641"b3); 4 19 dcl TEMPLATE_CI_STAMP_1 fixed bin (71) static options (constant) init (-876220343501203701760); 4 20 dcl (SIZE_CODE_1024_WORDS, CI_SIZE_CODE_1024_WORDS) 4 21 bit (9) aligned static options (constant) init ("060"b3); 4 22 4 23 /* END INCLUDE FILE dm_ci_constants.incl.pl1 */ 1672 1673 5 1 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 5 2 5 3 /* DESCRIPTION: 5 4* 5 5* This include file contains the ci_parts structure. This structure 5 6* is used across the file_manager_ interface to specify the parts of a 5 7* control interval to get or put. If the number_of parts is equal to 0, 5 8* modules which take ci_parts interpret this case to mean to do everything 5 9* except the actual requested operation, i.e., lock the control interval 5 10* but don't get anything. offset_in_bytes is the 0-originned offset in 5 11* bytes from the beginning of the addressable portion of the control interval. 5 12* An offset_in_bytes which is in the addressable portion is in error. 5 13* Likewise, if offset_in_bytes + length_in_bytes is outside of the addressable 5 14* portion, it is in error. 5 15**/ 5 16 5 17 /* HISTORY: 5 18*Written by Matthew Pierret, 01/28/82. 5 19* (01/28/82 Andre Bensoussan, Design.) 5 20*Modified: 5 21*11/07/84 by Matthew Pierret: To add must_be_zero, initial attributes on 5 22* automatic storge. 5 23**/ 5 24 5 25 /* format: style2,ind3 */ 5 26 5 27 dcl 1 ci_parts aligned based (ci_parts_ptr), 5 28 2 number_of_parts fixed bin (17), 5 29 2 must_be_zero fixed bin, 5 30 2 part (cip_number_of_parts refer (ci_parts.number_of_parts)), 5 31 3 offset_in_bytes fixed bin (17), 5 32 3 length_in_bytes fixed bin (17), 5 33 3 local_ptr ptr; 5 34 5 35 dcl ci_parts_ptr ptr init (null ()); 5 36 dcl cip_number_of_parts fixed bin (17) init (0); 5 37 5 38 5 39 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 1674 1675 6 1 /* START OF: dm_lock_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 6 2 6 3 /* DESCRIPTION: 6 4* 6 5* Hierarchical lock modes for Data Management control interval locking. In 6 6*addition to conventional read and write locks, intention locks are provided 6 7*for finer locking granularity. 6 8**/ 6 9 6 10 /* HISTORY: 6 11*Written by Jeffrey D. Ives, 04/30/82. 6 12*Modified: 6 13*12/05/84 by Stanford S. Cox: Added Description. 6 14**/ 6 15 /* format: style3,idind25 */ 6 16 6 17 dcl LOCK_MODE_S fixed bin static options (constant) init (2); 6 18 dcl LOCK_MODE_X fixed bin static options (constant) init (3); 6 19 dcl LOCK_MODE_IS fixed bin static options (constant) init (4); 6 20 dcl LOCK_MODE_IX fixed bin static options (constant) init (5); 6 21 dcl LOCK_MODE_SIX fixed bin static options (constant) init (6); 6 22 6 23 dcl LOCK_ENTIRE_FILE fixed bin (27) static options (constant) init (-1); 6 24 6 25 dcl LOCK_MODE_NAMES (2:6) char (3) int static options (constant) 6 26 init (" S", " X", " IS", " IX", "SIX"); 6 27 6 28 /* 6 29* S Share Let others read it but not modify it. 6 30* X Exclusive Let nobody else read or modify it. 6 31* IS Intention Share I am only using S locks, because I am only reading CIs. 6 32* IX Intention Exclusive I am using S and X locks, because I am reading and modifying CIs. 6 33* SIX Share with Intention Exclusive I am reading control intervals, but only locking the ones I modify. 6 34**/ 6 35 6 36 /* END OF: dm_lock_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 1676 1677 7 1 /* BEGIN INCLUDE FILE: dm_fm_file_oid.incl.pl1 */ 7 2 7 3 /* DESCRIPTION: 7 4* This include file contains the file_oid (file opening identifier) 7 5* structure. File opening ids are passed across the file_manager_ 7 6* interface as bit(36)aligned strings. The file_oid structure defines 7 7* the contents of the string. Two components make up a file opening id: 7 8* the index of the file opening in the file_access_table structure, which 7 9* contains per-process information on each file which is open, and the 7 10* last 18 bits of the file's unique id, used for verification of the entry 7 11* in the file_access_table. 7 12**/ 7 13 7 14 /* 7 15*HISTORY: 7 16*Written by Matthew Pierret, 07/16/84. 7 17*Modified: 7 18*11/02/84 by Matthew Pierret: Made file_oid based. 7 19**/ 7 20 7 21 /* format: style2,ind3 */ 7 22 7 23 dcl 1 file_oid aligned based, 7 24 2 file_access_table_idx 7 25 fixed bin (17) unal, /* index into file_access_table */ 7 26 2 uid_tail bit (18) unal; /* Last 18 bits of file unique id */ 7 27 7 28 7 29 /* END INCLUDE FILE: dm_fm_file_oid.incl.pl1 */ 1678 1679 8 1 /* BEGIN INCLUDE FILE: dm_fm_file_access_info.incl.pl1 */ 8 2 8 3 /* DESCRIPTION: 8 4* The file_access_info structure contains per-process information 8 5* about a DM file. Each file_access_info structure is one entry in 8 6* the file_access_table.e array. The entry can be in one of three states: 8 7* not-in-use (file_access_info.entry_state is 0), in-use (entry_state is 8 8* -1) or still in-use, but to be discarded at the end of the transaction 8 9* (any number > 0). An entry needs to be discarded when the file is 8 10* completely closed by the user. This last state is useful because it is 8 11* better not to discard the entry when it is completely closed until the 8 12* end of the current transaction, so that if the transaction is aborted, the 8 13* file need not be re-opened to apply the before images. A list of entries 8 14* to be discarded is maintained using the entry_state variable. 8 15* The file can be in one of three states: exists (file_state = 1), 8 16* does not exist (file_state = 0), and logically_deleted (file_state = 3). 8 17**/ 8 18 8 19 /* HISTORY: 8 20*Written by Jeffrey D. Ives, 10/11/82. 8 21* (Original design by Andre Bensoussan, 01/28/82.) 8 22*Modified: 8 23*10/05/83 Jeffrey D. Ives: Added fields for lock advice and expanded seg_nums. 8 24*07/12/84 by Matthew Pierret: Re-named proc_ad to file_access_info. 8 25*12/17/84 by Matthew Pierret: Changed post_transaction_actions sub-structure 8 26* to state, with entry_state (replacing thread) and the new 8 27* file_state. Added a DESCRIPTION section. Added constants for 8 28* possible file_state values. 8 29**/ 8 30 8 31 /* format: style2,^inddcls,dclind5 */ 8 32 8 33 dcl 1 file_access_info aligned based (file_access_info_ptr), 8 34 2 state aligned, 8 35 3 entry_state fixed bin (17) unal, 8 36 3 file_state fixed bin (17) unal, 8 37 2 uid bit (36), 8 38 2 blocking_factor fixed bin (17) unal, 8 39 2 ring_brackets unal, 8 40 3 write fixed bin (3) unsigned unal, 8 41 3 read fixed bin (3) unsigned unal, 8 42 3 mbz_rb fixed bin (3) unsigned unal, 8 43 2 integrity_switches unal, 8 44 3 record_time_modified 8 45 bit (1) unal, /* record time modified in ci_header and trailer */ 8 46 3 transaction bit (1) unal, /* permit access only during a transaction */ 8 47 3 lock bit (1) unal, /* lock control intervals before accessing them */ 8 48 3 bj bit (1) unal, /* put undo records in the before journal */ 8 49 3 aj bit (1) unal, /* put redo records in the after journal */ 8 50 3 mbz_is bit (4) unal, 8 51 2 last_transaction_id 8 52 bit (36), 8 53 2 msf_ptr ptr unal, 8 54 2 pn_tbl_idx fixed bin (17) unal, 8 55 2 lock_advice fixed bin (17) unal, 8 56 2 opens fixed bin (17) unal, 8 57 2 seg_0_num bit (18) unal, 8 58 2 seg_nums (27) fixed bin (12) uns unal; 8 59 8 60 8 61 dcl file_access_info_ptr ptr init (null ()); 8 62 8 63 dcl ( 8 64 FILE_ACCESS_INFO_IN_USE 8 65 init (-1), 8 66 FILE_ACCESS_INFO_NOT_IN_USE 8 67 init (0), 8 68 FILE_DOES_NOT_EXIST init (0), 8 69 FILE_EXISTS init (1), 8 70 FILE_LOGICALLY_DELETED init (3) 8 71 ) fixed bin internal static options (constant); 8 72 8 73 8 74 /* END INCLUDE FILE: dm_fm_file_access_info.incl.pl1 */ 1680 1681 9 1 /* BEGIN INCLUDE FILE: dm_fm_file_access_tbl.incl.pl1 */ 9 2 9 3 /* DESCRIPTION: 9 4* 9 5* This include file contains the file_access_table structure. This 9 6* is a per-process table which contains one entry for each file which the 9 7* process has open. The table is set up during per-process initialization 9 8* and is pointed to by fm_data_$file_access_table_ptr. The bounds limit 9 9* on the array of entries is abritrary and can be changed. 9 10**/ 9 11 9 12 /* HISTORY: 9 13*Written by Jeffrey D. Ives, 10/11/82. 9 14* (01/28/82 Andre Bensoussan, Design.) 9 15*Modified: 9 16*07/11/84 by Matthew Pierret: Changed name of structure from proc_ad_tbl to 9 17* file_access_table. 9 18*11/07/84 by Matthew Pierret: Removed the un-used post_commit_actions element. 9 19* Removed the now-obsolete oid structure. It has been replaced by 9 20* file_oid in dm_fm_file_oid.incl.pl1. 9 21**/ 9 22 9 23 /* format: style2,ind3 */ 9 24 9 25 9 26 dcl fm_data_$file_access_table_ptr 9 27 ptr ext; 9 28 9 29 dcl 1 file_access_table aligned based (fm_data_$file_access_table_ptr), 9 30 2 h, 9 31 3 version char (8) aligned, 9 32 3 last_entry fixed bin, 9 33 3 post_transaction_actions 9 34 fixed bin, 9 35 3 mbz_1 (6) fixed bin (71), 9 36 2 e (1024) like file_access_info; 9 37 9 38 9 39 dcl FILE_ACCESS_TABLE_VERSION_1 9 40 init ("FileAT 1") char (8) aligned static options (constant); 9 41 9 42 /* END INCLUDE FILE: dm_fm_file_access_tbl.incl.pl1 */ 1682 1683 10 1 /* BEGIN INCLUDE FILE dm_fm_increment_info.incl.pl1 */ 10 2 10 3 /* DESCRIPTION: 10 4*This structure is passed to the file_manager to describe increment words 10 5*to be used in a postcommit handler. The structure elements have the 10 6*following meaning: 10 7*increments_ptr - pointer to the first word of one or more words in the 10 8* caller's address space that is to be used by a postcommit 10 9* handler to increment values in a DM file. 10 10*number_of_words - The number of increment words pointed to by increments_ptr. 10 11*offset_in_bytes - offset from the begining of the control interval to the 10 12* location in the control interval of the first word to be 10 13* incremented at postcommit time. 10 14**/ 10 15 10 16 /* HISTORY: 10 17*Written by R. Michael Tague, 03/06/85. 10 18*Modified: 10 19**/ 10 20 10 21 /****^ HISTORY COMMENTS: 10 22* 1) change(87-01-15,Hergert), approve(87-04-01,MCR7632), 10 23* audit(87-01-30,Dupuis), install(87-04-02,MR12.1-1020): 10 24* For TR phx20754. Added element_id so that we can save the id of the 10 25* key_count_array and use it at post commit time, if necessary. 10 26* END HISTORY COMMENTS */ 10 27 10 28 10 29 /* format: style5,^indcomtxt */ 10 30 10 31 dcl fm_increment_info_ptr ptr; 10 32 dcl 1 fm_increment_info aligned based (fm_increment_info_ptr), 10 33 2 version char (8), 10 34 2 increments_ptr ptr, 10 35 2 element_id bit (36), 10 36 2 number_of_words fixed bin (35), 10 37 2 offset_in_bytes fixed bin (35); 10 38 10 39 dcl FM_INCREMENT_INFO_VERSION_1 10 40 char (8) aligned internal static 10 41 options (constant) init ("fmword01"); 10 42 10 43 /* END INCLUDE FILE dm_fm_increment_info.incl.pl1 */ 1684 1685 11 1 /* BEGIN INCLUDE FILE dm_fm_postcommit_info.incl.pl1 */ 11 2 11 3 /* DESCRIPTION: 11 4* 11 5* This include file contains the structures which define the postcommit 11 6* handlers for the creation and deletion of files. They are used by 11 7* file_manager_$postcommit_do. 11 8* 11 9* All structure elements are unaligned because we don't trust 11 10* before_journal_manager_ to align the buffer in which it places 11 11* the structure. 11 12**/ 11 13 11 14 /* HISTORY: 11 15*Written by Matthew Pierret, 10/16/84. 11 16*Modified: 11 17*03/07/85 by R. Michael Tague: Added increment_postcommit_info. 11 18**/ 11 19 11 20 /****^ HISTORY COMMENTS: 11 21* 1) change(87-01-15,Hergert), approve(87-04-01,MCR7632), 11 22* audit(87-01-30,Dupuis), install(87-04-02,MR12.1-1020): 11 23* For TR phx20754. Added element_id so that we can save the id of the 11 24* key_count_array and use it at post commit time, if necessary. 11 25* END HISTORY COMMENTS */ 11 26 11 27 11 28 /* format: style2,ind3 */ 11 29 11 30 dcl 1 postcommit_info_header 11 31 based (postcommit_info_ptr), 11 32 2 version char (8) unal, 11 33 2 operation char (8) unal; 11 34 11 35 dcl 1 delete_postcommit_info 11 36 based (postcommit_info_ptr), 11 37 2 header like postcommit_info_header, 11 38 2 sys_pn_tbl_index fixed bin unal, 11 39 2 dir_path char (168) unal, 11 40 2 file_name char (32) unal; 11 41 11 42 dcl 1 increment_postcommit_info 11 43 based (postcommit_info_ptr), 11 44 2 header like postcommit_info_header, 11 45 2 increments_ptr ptr, 11 46 2 element_id bit (36), 11 47 2 number_of_words fixed bin (35), 11 48 2 ci_number fixed bin (27), 11 49 2 offset_in_bytes fixed bin (35); 11 50 11 51 dcl postcommit_info_ptr ptr init (null ()); 11 52 dcl ( 11 53 POSTCOMMIT_INFO_VERSION_1 11 54 init ("PCInfo 1"), 11 55 DELETE_POSTCOMMIT_OPERATION 11 56 init ("deletion"), 11 57 CREATE_POSTCOMMIT_OPERATION 11 58 init ("creation"), 11 59 INCREMENT_POSTCOMMIT_OPERATION 11 60 init ("incremen") 11 61 ) char (8) internal static options (constant); 11 62 11 63 11 64 /* END INCLUDE FILE dm_fm_postcommit_info.incl.pl1 */ 1686 1687 12 1 /* START OF: flush_structures.incl.pl1 October 1982 * * * * * * * * * * * * * * * * */ 12 2 12 3 dcl flush_consecp ptr; 12 4 dcl flushp ptr; 12 5 12 6 dcl 1 flush_consec aligned based (flush_consecp), /* Structure for flushing consecutive pages */ 12 7 2 version fixed bin, /* Version of this structure */ 12 8 2 n_segs fixed bin, /* Number of segments */ 12 9 2 seg (0 refer (flush_consec.n_segs)) aligned, /* One per segment */ 12 10 3 segno fixed bin (15), /* Segment number */ 12 11 3 first_page fixed bin, /* First page (zero-based) */ 12 12 3 n_pages fixed bin; /* Number of pages */ 12 13 12 14 dcl 1 flush aligned based (flushp), /* Structure for flushing arbitrary pages */ 12 15 2 version fixed bin, /* Version of this structure */ 12 16 2 n_pages fixed bin, /* Number of pages to flush */ 12 17 2 seg_page (0 refer (flush.n_pages)), /* One per page - for efficiency group by segment */ 12 18 3 seg_no fixed bin (17) unaligned, /* Segment number */ 12 19 3 page_no fixed bin (17) unaligned; /* Page number (zero-based */ 12 20 12 21 dcl (FLUSH_CONSEC_VERSION_1 init (1), 12 22 FLUSH_VERSION_1 init (1)) fixed bin internal static options (constant); 12 23 12 24 /* END OF: flush_structures.incl.pl1 * * * * * * * * * * * * * * * * */ 1688 1689 13 1 /* BEGIN INCLUDE FILE condition_info_header.incl.pl1 BIM 1981 */ 13 2 /* format: style2 */ 13 3 13 4 declare condition_info_header_ptr 13 5 pointer; 13 6 declare 1 condition_info_header 13 7 aligned based (condition_info_header_ptr), 13 8 2 length fixed bin, /* length in words of this structure */ 13 9 2 version fixed bin, /* version number of this structure */ 13 10 2 action_flags aligned, /* tell handler how to proceed */ 13 11 3 cant_restart bit (1) unaligned, /* caller doesn't ever want to be returned to */ 13 12 3 default_restart bit (1) unaligned, /* caller can be returned to with no further action */ 13 13 3 quiet_restart bit (1) unaligned, /* return, and print no message */ 13 14 3 support_signal bit (1) unaligned, /* treat this signal as if the signalling procedure had the support bit set */ 13 15 /* if the signalling procedure had the support bit set, do the same for its caller */ 13 16 3 pad bit (32) unaligned, 13 17 2 info_string char (256) varying, /* may contain printable message */ 13 18 2 status_code fixed bin (35); /* if^=0, code interpretable by com_err_ */ 13 19 13 20 /* END INCLUDE FILE condition_info_header.incl.pl1 */ 1690 1691 1692 end fm_put_$init_txn_tbl; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/02/87 1258.7 fm_put_.pl1 >spec>install>MR12.1-1020>fm_put_.pl1 1666 1 01/07/85 0900.4 dm_ci.incl.pl1 >ldd>include>dm_ci.incl.pl1 1668 2 01/07/85 0900.5 dm_ci_header.incl.pl1 >ldd>include>dm_ci_header.incl.pl1 1670 3 01/07/85 0900.7 dm_ci_lengths.incl.pl1 >ldd>include>dm_ci_lengths.incl.pl1 1672 4 01/07/85 0900.3 dm_ci_constants.incl.pl1 >ldd>include>dm_ci_constants.incl.pl1 1674 5 01/07/85 0900.8 dm_ci_parts.incl.pl1 >ldd>include>dm_ci_parts.incl.pl1 1676 6 01/07/85 0901.4 dm_lock_modes.incl.pl1 >ldd>include>dm_lock_modes.incl.pl1 1678 7 01/07/85 0900.9 dm_fm_file_oid.incl.pl1 >ldd>include>dm_fm_file_oid.incl.pl1 1680 8 03/06/85 1031.2 dm_fm_file_access_info.incl.pl1 >ldd>include>dm_fm_file_access_info.incl.pl1 1682 9 01/07/85 0901.1 dm_fm_file_access_tbl.incl.pl1 >ldd>include>dm_fm_file_access_tbl.incl.pl1 1684 10 04/02/87 1300.6 dm_fm_increment_info.incl.pl1 >spec>install>MR12.1-1020>dm_fm_increment_info.incl.pl1 1686 11 04/02/87 1300.6 dm_fm_postcommit_info.incl.pl1 >spec>install>MR12.1-1020>dm_fm_postcommit_info.incl.pl1 1688 12 11/23/82 0953.8 flush_structures.incl.pl1 >ldd>include>flush_structures.incl.pl1 1690 13 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>include>condition_info_header.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. BYTES_PER_WORD constant fixed bin(17,0) initial dcl 184 ref 829 CI_0_ADDRESSABLE_LENGTH constant fixed bin(17,0) initial dcl 3-31 ref 561 586 613 638 CI_ADDRESSABLE_LENGTH constant fixed bin(17,0) initial dcl 3-29 ref 425 512 537 563 588 615 640 CI_STAMP_VERSION_1 constant bit(9) initial dcl 4-18 ref 669 ERROR_FREE 000036 constant fixed bin(35,0) initial dcl 187 set ref 305* 323* 385* 492* 716* 836* 865* 962* 977* 992* 1007* 1021* 1130* FILE_ACCESS_INFO_NOT_IN_USE constant fixed bin(17,0) initial dcl 8-63 ref 1113 FILE_EXISTS constant fixed bin(17,0) initial dcl 8-63 ref 1116 FILE_LOGICALLY_DELETED constant fixed bin(17,0) initial dcl 8-63 ref 1119 FM_INCREMENT_INFO_VERSION_1 000012 constant char(8) initial dcl 10-39 ref 818 FOR_UNPUT constant bit(1) initial dcl 185 set ref 526* INCREMENT_POSTCOMMIT_OPERATION 000006 constant char(8) initial unaligned dcl 11-52 ref 821 LOCK_ENTIRE_FILE 000052 constant fixed bin(27,0) initial dcl 6-23 set ref 1259* LOCK_MODE_IS constant fixed bin(17,0) initial dcl 6-19 ref 856 LOCK_MODE_IX constant fixed bin(17,0) initial dcl 6-20 ref 856 LOCK_MODE_S constant fixed bin(17,0) initial dcl 6-17 ref 856 LOCK_MODE_SIX constant fixed bin(17,0) initial dcl 6-21 ref 856 LOCK_MODE_X 000045 constant fixed bin(17,0) initial dcl 6-18 set ref 856 1266 1269* LOCK_WAIT_TIME 000020 constant fixed bin(71,0) initial dcl 199 set ref 1259* 1269* MAX_CI_NUM 000016 constant fixed bin(27,0) initial dcl 4-17 ref 648 810 1073 NOT_FOR_UNPUT constant bit(1) initial dcl 186 set ref 316* 333* 396* 503* 549* 574* 601* 625* 801* 846* 876* NO_TRANSACTION constant bit(36) initial dcl 188 ref 1392 NULL_INTEGRITY_SWITCHES constant fixed bin(17,0) initial dcl 189 set ref 576* 847* 878* POSTCOMMIT_INFO_VERSION_1 000010 constant char(8) initial unaligned dcl 11-52 ref 820 PROC_TXN_TBL_VERSION_2 000004 constant char(8) initial dcl 1554 ref 1281 1301 1319 1330 1449 SIZE_CODE_1024_WORDS constant bit(9) initial dcl 4-20 ref 672 1085 TEMPLATE_CI_STAMP_1 000014 constant fixed bin(71,0) initial dcl 4-19 ref 763 765 1082 UNPROTECTED_INTEGRITY_SWITCHES constant fixed bin(17,0) initial dcl 189 set ref 551* UNPUT_INTEGRITY_SWITCHES constant fixed bin(17,0) initial dcl 189 set ref 528* VANILLA_WRITE_INTEGRITY_SWITCHES constant fixed bin(17,0) initial dcl 189 set ref 335* 398* 505* 603* 627* 803* action_flags 2 000260 automatic structure level 2 dcl 169 set ref 741* addr builtin function dcl 174 ref 315 332 351 360 364 395 417 430 436 442 443 443 461 468 502 525 548 573 600 624 633 651 656 660 669 672 675 678 704 747 747 758 758 800 829 829 845 863 875 904 941 941 1084 1085 1086 1284 1304 1322 1333 1359 1390 1491 1491 addressable_bytes 4 based char(4072) level 2 dcl 1-24 set ref 438 442 704 775* aj 0(04) 000224 automatic bit(1) level 2 in structure "effective_integrity_switches" packed unaligned dcl 164 in procedure "fm_put_$init_txn_tbl" set ref 375 482 784 aj 0(04) 000540 automatic bit(1) level 2 in structure "gis_permit_integrity_switches" packed unaligned dcl 1159 in procedure "GET_INTEGRITY_SWITCHES" set ref 1178* 1182* baseno builtin function dcl 174 ref 911 1401 1658 baseptr builtin function dcl 174 ref 1588 1597 before_journal_manager_$flush_transaction 000116 constant entry external dcl 274 ref 451 1482 before_journal_manager_$write_before_image 000120 constant entry external dcl 276 ref 443 758 before_journal_manager_$write_fm_postcommit_handler 000122 constant entry external dcl 279 ref 829 bin builtin function dcl 174 ref 911 1658 bj 0(03) 000540 automatic bit(1) level 2 in structure "gis_permit_integrity_switches" packed unaligned dcl 1159 in procedure "GET_INTEGRITY_SWITCHES" set ref 1177* bj 0(03) 000224 automatic bit(1) level 2 in structure "effective_integrity_switches" packed unaligned dcl 164 in procedure "fm_put_$init_txn_tbl" set ref 360 421 656 754 813 1438 blocking_factor 2 based fixed bin(17,0) level 2 packed unaligned dcl 8-33 set ref 358 363 428 435 459 467 654 659 901 902 913 916 916 callers_validation_level 000100 automatic fixed bin(17,0) dcl 1509 in procedure "FLUSH_MOD_PAGES" set ref 1487* 1488* 1497* callers_validation_level 000100 automatic fixed bin(17,0) dcl 1463 in begin block on line 1451 set ref 1452* 1453* 1461* ccr_p_first_ci parameter fixed bin(27,0) dcl 1061 ref 1058 1065 1071 ccr_p_last_ci parameter fixed bin(28,0) dcl 1063 set ref 1058 1071* 1073 ccr_p_n_ci parameter fixed bin(27,0) dcl 1062 ref 1058 1068 1071 ci based structure level 1 dcl 1-24 set ref 473 477* ci_header based structure level 1 dcl 2-32 ci_header_chunks based structure level 1 dcl 2-80 ci_id based structure level 1 dcl 2-64 ci_num 000100 automatic fixed bin(27,0) dcl 118 set ref 350* 351* 357* 358 363* 416* 417* 427* 428 435 443* 458* 459 467* 510* 535* 559* 561 584* 586 611* 613 637* 638 648 648 651* 654 659 678 742* 758* 799* 810 810 901* 902* 1039* 1086 ci_number 10 000226 automatic fixed bin(27,0) level 2 dcl 167 set ref 824* ci_parts based structure level 1 dcl 5-27 ci_parts_ptr 000376 automatic pointer initial dcl 5-35 set ref 509* 534* 558* 583* 610* 633* 634 635 636 644 686 686 687 695 706 5-35* 1035* ci_ptr 000374 automatic pointer dcl 1-23 set ref 360* 364* 364 366 430* 432 436* 436 438 438 442 461* 463 468* 468 470 473 476 477 656* 660* 660 662 663 704 767 775 778 904* 906 911 1036* 1088 1089 1090 1401 ci_stamp based structure level 1 dcl 2-48 ci_trailer_chunk based structure level 1 dcl 2-87 cip_number_of_parts 000400 automatic fixed bin(17,0) initial dcl 5-36 set ref 5-36* cleanup 000000 stack reference condition dcl 179 ref 938 1453 1488 1611 clock builtin function dcl 174 ref 765 1082 code 000101 automatic fixed bin(35,0) dcl 119 set ref 443* 445 445* 451* 452 452* 746* 758* 760 760* 828* 829* 831 831* 941* 942 942 942* 945* 952 952* 1040* 1456* 1457* 1458 1458* 1482* 1483 1483* 1491* 1492 1492 1492* 1495* 1502 1502* 1505* component_num 000102 automatic fixed bin(17,0) dcl 120 set ref 358* 360* 363 428* 430* 435 459* 461* 467 654* 656* 659 902* 904* 913 916 1041* condition_info_header based structure level 1 dcl 13-6 cra_caller_validation_level 000556 automatic fixed bin(17,0) dcl 1230 set ref 1233* 1235 cra_p_write_bracket parameter fixed bin(3,0) unsigned unaligned dcl 1228 ref 1225 1235 cu_$level_get 000102 constant entry external dcl 265 ref 937 1233 1452 1487 1610 cu_$level_set 000104 constant entry external dcl 266 ref 938 939 947 1453 1454 1461 1488 1489 1497 1611 1612 1650 divide builtin function dcl 174 ref 358 428 459 654 902 1413 dm_data_$current_txn_id 000010 external static bit(36) dcl 203 set ref 746* 1002 1016 1209 dm_data_$current_txn_index 000012 external static fixed bin(17,0) dcl 205 ref 1003 1017 1208 dm_error_$bad_file_oid 000026 external static fixed bin(35,0) dcl 218 set ref 318* 339* 402* 555* 580* 607* 631* 807* 851* 882* 1106* 1113* 1127* dm_error_$bj_journal_full 000030 external static fixed bin(35,0) dcl 219 set ref 744 748* dm_error_$ci_already_allocated 000032 external static fixed bin(35,0) dcl 221 set ref 382* dm_error_$ci_already_free 000034 external static fixed bin(35,0) dcl 223 set ref 490* dm_error_$ci_bad_hdr_id_num 000036 external static fixed bin(35,0) dcl 225 set ref 678* dm_error_$ci_bad_hdr_size_code 000040 external static fixed bin(35,0) dcl 227 set ref 672* dm_error_$ci_bad_hdr_uid 000042 external static fixed bin(35,0) dcl 229 set ref 675* dm_error_$ci_bad_stamp_ver 000044 external static fixed bin(35,0) dcl 231 set ref 669* dm_error_$ci_num_oob 000046 external static fixed bin(35,0) dcl 233 set ref 648* 810* 1073* dm_error_$ci_num_parts_neg 000050 external static fixed bin(35,0) dcl 234 set ref 644* dm_error_$ci_parts_oob 000052 external static fixed bin(35,0) dcl 236 set ref 689* 697* dm_error_$file_doesnt_exist 000054 external static fixed bin(35,0) dcl 237 set ref 1123* 1124* 1133* dm_error_$file_must_be_protected 000056 external static fixed bin(35,0) dcl 239 set ref 834* dm_error_$file_was_deleted 000060 external static fixed bin(35,0) dcl 241 ref 942 952 1492 1502 dm_error_$fm_bad_inc_info_ver 000062 external static fixed bin(35,0) dcl 243 set ref 818* dm_error_$fm_bad_proc_txn_tbl_ver 000064 external static fixed bin(35,0) dcl 245 set ref 1281* 1301* 1319* 1330* dm_error_$fm_cant_free_ci_0 000066 external static fixed bin(35,0) dcl 247 set ref 408* dm_error_$fm_first_ci_neg 000070 external static fixed bin(35,0) dcl 249 set ref 1065* dm_error_$fm_num_ci_neg 000072 external static fixed bin(35,0) dcl 251 set ref 1068* dm_error_$fm_old_txn_not_flushed 000074 external static fixed bin(35,0) dcl 253 set ref 1289* 1309* 1364* 1398* dm_error_$lock_invalid_mode 000076 external static fixed bin(35,0) dcl 255 set ref 856* dm_error_$no_current_transaction 000100 external static fixed bin(35,0) dcl 257 set ref 1210* dm_hcs_$set_force_write_limit 000106 constant entry external dcl 267 ref 1457 dtcm 000124 automatic fixed bin(71,0) dcl 140 set ref 443* 758* 763 e 4 based structure array level 2 in structure "proc_txn_tbl" dcl 1548 in procedure "TXN_FLUSH_MOD_PAGES" set ref 1284 1304 1322 1333 1359 1390 e 20 based structure array level 2 in structure "file_access_table" dcl 9-29 in procedure "fm_put_$init_txn_tbl" set ref 863* 1106 1111 1257* 1659* effective_integrity_switches 000224 automatic structure level 1 dcl 164 set ref 335* 398* 505* 528* 551* 576* 603* 627* 803* 847* 878* element_id 6 000226 automatic bit(36) level 2 in structure "my_postcommit_info" dcl 167 in procedure "fm_put_$init_txn_tbl" set ref 826* element_id 4 based bit(36) level 2 in structure "fm_increment_info" dcl 10-32 in procedure "fm_put_$init_txn_tbl" ref 826 entry_state based fixed bin(17,0) level 3 packed unaligned dcl 8-33 set ref 1113 error_table_$invalidsegno 000016 external static fixed bin(35,0) dcl 211 ref 942 1492 error_table_$no_w_permission 000020 external static fixed bin(35,0) dcl 213 set ref 1235* error_table_$noentry 000022 external static fixed bin(35,0) dcl 215 ref 1620 error_table_$not_dm_ring 000024 external static fixed bin(35,0) dcl 216 ref 1642 f_callers_validation_level 000100 automatic fixed bin(17,0) dcl 934 set ref 937* 938* 947* fc_flush_consec 000423 automatic structure level 1 dcl 893 set ref 898* 941 941 949* file_access_info based structure level 1 dcl 8-33 set ref 863 1111* 1257 1659 file_access_info_ptr 000402 automatic pointer initial dcl 8-61 set ref 315* 316* 318 321 332* 333* 334 335 339 358 363 395* 396* 397 398 402 428 435 443 459 467 502* 503* 504 505 525* 526* 527 528 548* 549* 550 551 555 573* 574* 575 576 580 600* 601* 602 603 607 624* 625* 626 627 631 654 659 675 742 800* 801* 802 803 807 829 845* 846* 847 851 861 862 863 875* 876* 877 878 882 8-61* 758 901 902 913 916 916 1084 1110* 1111 1113 1116 1119 1127 1130 1250 1253 1256 1257 1259 1259 1266 1269 1437 1588 1591 1594 1597 1614 1626 1655 1658 1659 file_access_table based structure level 1 dcl 9-29 file_access_table_idx based fixed bin(17,0) level 2 in structure "file_oid" packed unaligned dcl 7-23 in procedure "fm_put_$init_txn_tbl" set ref 351* 360* 417* 430* 461* 651* 656* 863 904* file_access_table_idx 000530 automatic fixed bin(17,0) level 2 in structure "gai_my_file_oid" packed unaligned dcl 1102 in procedure "GET_ACCESS_INFO" set ref 1106 1106 1111 file_oid based structure level 1 dcl 7-23 file_state 0(18) based fixed bin(17,0) level 3 packed unaligned dcl 8-33 set ref 1116 1119 file_uids 400 based bit(36) array level 2 dcl 1536 set ref 1335 1340 1344* 1344 1350* 1433* 1433 1437* first_ci 000103 automatic fixed bin(27,0) dcl 121 set ref 342* 345* 350 357 405* 408 411* 416 427 458 885* 888* 901 913 1042* first_page 3 000423 automatic fixed bin(17,0) array level 3 dcl 893 set ref 913* 916 flush_bj_first 1 based bit(1) level 2 dcl 1536 set ref 1292* 1367* 1438* 1479 flush_consec based structure level 1 dcl 12-6 fm_data_$file_access_table_ptr 000142 external static pointer dcl 9-26 ref 863 1106 1106 1111 1257 1659 fm_data_$proc_txn_tbl_ptr 000144 external static pointer dcl 1546 set ref 1281 1284 1301 1304 1319 1322 1330 1333 1359 1390 1446* 1448 1449 fm_increment_info based structure level 1 dcl 10-32 fm_increment_info_ptr 000404 automatic pointer dcl 10-31 set ref 817* 818 822 823 825 826 gai_my_file_oid 000530 automatic structure level 1 dcl 1102 set ref 1104* gai_p_file_access_info_ptr parameter pointer dcl 1099 ref 1093 1110 gai_p_file_oid parameter bit(36) dcl 1096 ref 1093 1104 gai_p_for_unput_operation parameter bit(1) dcl 1097 ref 1093 1119 1130 get_ring_ 000110 constant entry external dcl 269 ref 939 939 1454 1454 1489 1489 1612 1612 1642 gis_force_integrity_switches 000541 automatic structure level 1 dcl 1162 set ref 1167* 1188 gis_p_effective_integrity_switches parameter structure level 1 dcl 1155 set ref 1140 1188* gis_p_file_integrity_switches parameter structure level 1 dcl 1152 ref 1140 1188 gis_p_type parameter fixed bin(17,0) dcl 1151 ref 1140 1169 gis_permit_integrity_switches 000540 automatic structure level 1 dcl 1159 set ref 1166* 1188 gti_p_requires_transaction parameter bit(1) unaligned dcl 1199 ref 1196 1205 gti_p_transaction_id parameter bit(36) dcl 1201 set ref 1196 1209* 1210 1216* gti_p_transaction_index parameter fixed bin(17,0) dcl 1202 set ref 1196 1208* 1215* h based structure level 2 in structure "file_access_table" dcl 9-29 in procedure "fm_put_$init_txn_tbl" h based structure level 2 in structure "proc_txn_tbl" dcl 1548 in procedure "TXN_FLUSH_MOD_PAGES" hbound builtin function dcl 174 ref 708 921 1422 1591 1655 hcs_$flush_consecutive_pages 000112 constant entry external dcl 270 ref 941 hcs_$flush_pages 000114 constant entry external dcl 272 ref 1491 hcs_$fs_get_path_name 000124 constant entry external dcl 281 ref 1634 hcs_$set_synchronized_sw 000126 constant entry external dcl 282 ref 1638 header based structure level 2 in structure "ci" dcl 1-24 in procedure "fm_put_$init_txn_tbl" header 000226 automatic structure level 2 in structure "my_postcommit_info" dcl 167 in procedure "fm_put_$init_txn_tbl" id 2 based fixed bin(71,0) level 3 dcl 1-24 set ref 663 1089* increment_postcommit_info based structure level 1 unaligned dcl 11-42 increments_ptr 2 based pointer level 2 in structure "fm_increment_info" dcl 10-32 in procedure "fm_put_$init_txn_tbl" ref 822 increments_ptr 4 000226 automatic pointer level 2 in structure "my_postcommit_info" dcl 167 in procedure "fm_put_$init_txn_tbl" set ref 822* info_string 3 000260 automatic varying char(256) level 2 dcl 169 set ref 742* integrity_switches 2(27) based structure level 2 in structure "file_access_info" packed unaligned dcl 8-33 in procedure "fm_put_$init_txn_tbl" set ref 335 398 505 528 551 576 603 627 803 847 878 integrity_switches 22(27) based structure array level 3 in structure "file_access_table" packed unaligned dcl 9-29 in procedure "fm_put_$init_txn_tbl" integrity_switches 2(27) 000240 automatic structure level 2 in structure "my_file_access_info" packed unaligned dcl 168 in procedure "fm_put_$init_txn_tbl" ioa_$rsnnl 000130 constant entry external dcl 284 ref 742 last_ci 000104 automatic fixed bin(28,0) dcl 122 set ref 345* 350 357 411* 416 427 458 888* 901 916 last_entry 2 based fixed bin(17,0) level 3 in structure "file_access_table" dcl 9-29 in procedure "fm_put_$init_txn_tbl" ref 1106 last_entry 2 based fixed bin(17,0) level 2 in structure "proc_txn" dcl 1536 in procedure "TXN_FLUSH_MOD_PAGES" set ref 1335 1339 1348 1348 1352* 1352 1406 1422 1431 1435* 1435 1474 last_transaction_id 3 based bit(36) level 2 dcl 8-33 set ref 862* 1253 1256* lbound builtin function dcl 174 ref 686 1106 1335 le_code 000566 automatic fixed bin(35,0) initial dcl 1248 set ref 1248* 1259* 1261 1261* 1269* 1270 1270* le_p_ci_num parameter fixed bin(27,0) dcl 1244 set ref 1241 1269* le_p_file_access_table_idx parameter fixed bin(17,0) unaligned dcl 1246 ref 1241 1257 le_p_transaction_id parameter bit(36) dcl 1245 ref 1241 1253 1256 length 000260 automatic fixed bin(17,0) level 2 dcl 169 set ref 739* length_in_bytes 3 000154 automatic fixed bin(17,0) array level 3 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 703* 771 length_in_bytes 3 000216 automatic fixed bin(17,0) array level 3 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" set ref 425* length_in_bytes 3 based fixed bin(17,0) array level 3 in structure "ci_parts" dcl 5-27 in procedure "fm_put_$init_txn_tbl" set ref 635* 687 local_ptr 4 000216 automatic pointer array level 3 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" set ref 442* local_ptr 4 based pointer array level 3 in structure "ci_parts" dcl 5-27 in procedure "fm_put_$init_txn_tbl" set ref 636* 706 local_ptr 4 000154 automatic pointer array level 3 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 704* lock 0(02) 000224 automatic bit(1) level 2 in structure "effective_integrity_switches" packed unaligned dcl 164 in procedure "fm_put_$init_txn_tbl" set ref 347 413 651 lock 0(02) 000540 automatic bit(1) level 2 in structure "gis_permit_integrity_switches" packed unaligned dcl 1159 in procedure "GET_INTEGRITY_SWITCHES" set ref 1176* lock_advice 5(18) based fixed bin(17,0) level 2 packed unaligned dcl 8-33 set ref 861* 1250 1259 1266 lock_manager_$lock 000132 constant entry external dcl 285 ref 1259 1269 lock_mode 000105 automatic fixed bin(17,0) dcl 123 set ref 854* 856 856 856 856 856 856 861 max builtin function dcl 174 ref 913 min builtin function dcl 174 ref 916 mod_pages 6 based fixed bin(33,0) array level 2 dcl 1536 set ref 1335 1345* 1345 1349* 1414 1416 1422 1432* 1432 1436* msf_manager_$msf_get_ptr 000134 constant entry external dcl 287 ref 1614 1626 msf_ptr 4 based pointer level 2 packed unaligned dcl 8-33 set ref 1614 1626 msp_callers_validation_level 000162 automatic fixed bin(17,0) dcl 1607 set ref 1610* 1611* 1650* msp_code 000577 automatic fixed bin(35,0) initial dcl 1573 set ref 1573* 1614* 1620 1620* 1626* 1628* 1634* 1635 1635* 1638* 1639 1642 1642* 1644* msp_dir_name 000100 automatic char(168) unaligned dcl 1605 set ref 1634* 1638* msp_entry_name 000152 automatic char(32) unaligned dcl 1606 set ref 1634* 1638* msp_make_seg 000576 automatic bit(1) dcl 1572 set ref 1575* 1581* 1623 msp_p_bj_on parameter bit(1) unaligned dcl 1570 ref 1561 1631 msp_p_ci_ptr parameter pointer dcl 1567 set ref 1561 1578 1588* 1597* 1614* 1617 1626* 1628 1634* 1655 1658 msp_p_component_num parameter fixed bin(17,0) dcl 1566 set ref 1561 1578 1584 1591 1594 1597 1614* 1626* 1655 1658 msp_p_file_access_table_idx parameter fixed bin(17,0) unaligned dcl 1568 ref 1561 1578 1659 multiply builtin function dcl 174 ref 363 435 467 659 913 916 must_be_zero 1 000154 automatic fixed bin(17,0) initial level 2 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 154* must_be_zero 1 000216 automatic fixed bin(17,0) initial level 2 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" set ref 159* my_ci_id 000126 automatic fixed bin(71,0) dcl 141 set ref 663* 672 675 678 1043* 1084 1085 1086 1089 my_ci_parts 000154 automatic structure level 1 dcl 154 set ref 682* 758 758 789* my_ci_stamp 000130 automatic fixed bin(71,0) dcl 142 set ref 662* 665 669 763* 765* 767 778 1044* 1082* 1088 1090 my_file_access_info 000240 automatic structure level 1 dcl 168 set ref 315 332 395 502 525 548 573 600 624 800 845 875 my_file_oid 000106 automatic bit(36) dcl 124 set ref 314* 316* 331* 333* 351 360 394* 396* 417 430 443* 461 501* 503* 524* 526* 547* 549* 572* 574* 599* 601* 623* 625* 651 656 742* 758* 798* 801* 829* 844* 846* 863 874* 876* 904 my_part_idx 000107 automatic fixed bin(17,0) dcl 125 set ref 684* 700* 700 702 703 704 706 708 713 752 770* 771 772 773* 791* my_part_ptrs 000134 automatic pointer array dcl 152 set ref 683* 706* 773 790* my_postcommit_info 000226 automatic structure level 1 dcl 167 set ref 829 829 829 my_signal_structure 000260 automatic structure level 1 dcl 169 set ref 739 747 747 n_ci 000110 automatic fixed bin(27,0) dcl 126 set ref 343* 345* 406* 411* 886* 888* 1045* n_pages 5 based fixed bin(17,0) level 2 in structure "proc_txn" dcl 1536 in procedure "TXN_FLUSH_MOD_PAGES" set ref 1474* 1476 n_pages 4 000423 automatic fixed bin(17,0) array level 3 in structure "fc_flush_consec" dcl 893 in begin block on line 890 set ref 916* n_segs 1 000423 automatic fixed bin(17,0) level 2 dcl 893 set ref 909* 909 911 913 916 916 921 926 null builtin function dcl 174 ref 432 463 683 747 747 5-35 8-61 11-51 790 906 1035 1036 1037 1617 1628 1655 num 1(09) based fixed bin(27,0) level 2 packed unsigned unaligned dcl 2-64 set ref 678 1086* number_of_addressable_bytes 000111 automatic fixed bin(17,0) dcl 127 set ref 512* 537* 561* 563* 586* 588* 613* 615* 638* 640* 697 1046* number_of_parts 000154 automatic fixed bin(17,0) initial level 2 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 154* 752* 770 number_of_parts 000216 automatic fixed bin(17,0) initial level 2 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" set ref 159* number_of_parts based fixed bin(17,0) level 2 in structure "ci_parts" dcl 5-27 in procedure "fm_put_$init_txn_tbl" ref 644 686 number_of_words 7 000226 automatic fixed bin(35,0) level 2 in structure "my_postcommit_info" dcl 167 in procedure "fm_put_$init_txn_tbl" set ref 823* number_of_words 5 based fixed bin(35,0) level 2 in structure "fm_increment_info" dcl 10-32 in procedure "fm_put_$init_txn_tbl" ref 823 offset_in_bytes 2 based fixed bin(17,0) array level 3 in structure "ci_parts" dcl 5-27 in procedure "fm_put_$init_txn_tbl" set ref 634* 695 offset_in_bytes 2 000154 automatic fixed bin(17,0) array level 3 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 702* 772 offset_in_bytes 6 based fixed bin(35,0) level 2 in structure "fm_increment_info" dcl 10-32 in procedure "fm_put_$init_txn_tbl" ref 825 offset_in_bytes 11 000226 automatic fixed bin(35,0) level 2 in structure "my_postcommit_info" dcl 167 in procedure "fm_put_$init_txn_tbl" set ref 825* offset_in_bytes 2 000216 automatic fixed bin(17,0) array level 3 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" set ref 424* opens 6 based fixed bin(17,0) level 2 packed unaligned dcl 8-33 set ref 318 339 402 555 580 607 631 807 851 882 operation 2 000226 automatic char(8) level 3 packed unaligned dcl 167 set ref 821* operation_is_unput 000112 automatic bit(1) initial dcl 129 set ref 129* 521* 1502 p_ci_num parameter fixed bin(27,0) dcl 100 ref 497 510 518 535 543 559 568 584 595 611 619 637 794 799 824 p_ci_parts_ptr parameter pointer dcl 101 ref 497 509 518 534 543 558 568 583 595 610 p_code parameter fixed bin(35,0) dcl 105 set ref 93 310 327 390 497 518 543 568 595 619 730* 794 840 870 967 982 997 1011 p_file_oid parameter bit(36) dcl 109 ref 310 314 327 331 390 394 497 501 518 524 543 547 568 572 595 599 619 623 794 798 840 844 870 874 p_file_uid parameter bit(36) dcl 113 set ref 310 321* 1011 1019* p_first_ci parameter fixed bin(27,0) dcl 106 ref 327 342 390 405 870 885 p_increment_info_ptr parameter pointer dcl 110 ref 794 817 p_lock_mode parameter fixed bin(17,0) dcl 107 ref 840 854 p_number_of_ci parameter fixed bin(27,0) dcl 108 ref 327 343 390 406 870 886 p_single_part_length parameter fixed bin(17,0) dcl 102 ref 619 635 p_single_part_offset parameter fixed bin(17,0) dcl 103 ref 619 634 p_single_part_ptr parameter pointer dcl 104 ref 619 636 p_transaction_id parameter bit(36) dcl 111 ref 967 972 982 987 p_transaction_index parameter fixed bin(17,0) dcl 112 ref 967 973 982 988 page_num 000113 automatic fixed bin(8,0) dcl 130 set ref 363* 364 435* 436 467* 468 659* 660 1047* 1402 page_number 0(18) 000110 automatic fixed bin(17,0) level 2 packed unaligned dcl 1530 set ref 1402* pages based structure array level 2 dcl 146 set ref 364 436 468 660 part 2 000154 automatic structure array level 2 in structure "my_ci_parts" dcl 154 in procedure "fm_put_$init_txn_tbl" set ref 708 part 2 000216 automatic structure array level 2 in structure "single_ci_part" dcl 159 in procedure "fm_put_$init_txn_tbl" part 2 based structure array level 2 in structure "ci_parts" dcl 5-27 in procedure "fm_put_$init_txn_tbl" set ref 686 part_buffer based char unaligned dcl 150 ref 775 part_idx 000114 automatic fixed bin(17,0) dcl 131 set ref 686* 687 695 706* 1048* part_length 000115 automatic fixed bin(17,0) dcl 132 set ref 687* 689 692 697 703 771* 775 775 1049* part_offset 000116 automatic fixed bin(17,0) dcl 133 set ref 695* 697 697 702 704 772* 775 1050* part_ptr 000132 automatic pointer dcl 143 set ref 773* 775 1037* postcommit_info_header based structure level 1 packed unaligned dcl 11-30 postcommit_info_ptr 000406 automatic pointer initial dcl 11-51 set ref 11-51* proc_txn based structure level 1 dcl 1536 set ref 1324* 1500* proc_txn_ptr 000112 automatic pointer dcl 1535 set ref 1284* 1286 1289 1292 1304* 1306 1309 1322* 1324 1333* 1335 1335 1335 1339 1340 1344 1344 1345 1345 1348 1348 1349 1350 1352 1352 1359* 1361 1364 1367 1390* 1392 1395 1396 1398 1406 1414 1416 1422 1422 1426 1427 1431 1432 1432 1433 1433 1435 1435 1436 1437 1438 1474 1474 1476 1479 1491 1491 1500 proc_txn_tbl based structure level 1 dcl 1548 set ref 1446 1448* r_p_code parameter fixed bin(35,0) dcl 728 ref 725 730 record_time_modified 000540 automatic bit(1) level 2 in structure "gis_permit_integrity_switches" packed unaligned dcl 1159 in procedure "GET_INTEGRITY_SWITCHES" set ref 1173* 1184* record_time_modified 000224 automatic bit(1) level 2 in structure "effective_integrity_switches" packed unaligned dcl 164 in procedure "fm_put_$init_txn_tbl" set ref 767 778 ring_brackets 2(18) based structure level 2 packed unaligned dcl 8-33 seg based structure level 1 dcl 146 in procedure "fm_put_$init_txn_tbl" seg 2 based structure array level 2 in structure "flush_consec" dcl 12-6 in procedure "fm_put_$init_txn_tbl" seg 2 000423 automatic structure array level 2 in structure "fc_flush_consec" dcl 893 in begin block on line 890 set ref 921 seg_0_num 6(18) based bit(18) level 2 packed unaligned dcl 8-33 set ref 1130 1588 seg_nums 7 based fixed bin(12,0) array level 2 packed unsigned unaligned dcl 8-33 set ref 1591 1594 1597 1655 1658* segment_number 000110 automatic bit(18) level 2 packed unaligned dcl 1530 set ref 1401* segno 2 000423 automatic fixed bin(15,0) array level 3 dcl 893 set ref 911* signal_ 000136 constant entry external dcl 289 ref 747 single_ci_part 000216 automatic structure level 1 dcl 159 set ref 443 443 633 size_code 1 based bit(9) level 2 packed unaligned dcl 2-64 set ref 672 1085* some_ci_already_allocated 000117 automatic bit(1) dcl 134 set ref 355* 366* 382 some_ci_already_free 000120 automatic bit(1) dcl 136 set ref 456* 463* 470* 490 stamp based structure level 2 in structure "ci_header" dcl 2-32 in procedure "fm_put_$init_txn_tbl" stamp 1776 based fixed bin(71,0) level 3 in structure "ci" dcl 1-24 in procedure "fm_put_$init_txn_tbl" set ref 366 438 470 476* 662 778* 1090* stamp based fixed bin(71,0) level 3 in structure "ci" dcl 1-24 in procedure "fm_put_$init_txn_tbl" set ref 767* 1088* state based structure level 2 dcl 8-33 status_code 104 000260 automatic fixed bin(35,0) level 2 dcl 169 set ref 744* string builtin function dcl 174 set ref 741* 1166* 1167* substr builtin function dcl 174 set ref 704 775* 1127 sys_info$data_management_ringno 000014 external static fixed bin(17,0) dcl 207 ref 1642 tid based bit(36) level 2 dcl 1536 set ref 1286 1289 1306 1309 1361 1364 1392 1396* 1398 1427* trailer 1776 based structure level 2 dcl 1-24 transaction 0(01) 000540 automatic bit(1) level 2 in structure "gis_permit_integrity_switches" packed unaligned dcl 1159 in procedure "GET_INTEGRITY_SWITCHES" set ref 1175* 1180* transaction 0(01) 000224 automatic bit(1) level 2 in structure "effective_integrity_switches" packed unaligned dcl 164 in procedure "fm_put_$init_txn_tbl" set ref 337* 372 400* 479 507* 530* 553* 578* 605* 629* 781 805* 849* 880* transaction_bj_full_ 000366 stack reference condition dcl 179 ref 441 735 757 816 transaction_id 000121 automatic bit(36) dcl 137 set ref 337* 351* 400* 417* 451* 507* 530* 553* 578* 605* 629* 651* 805* 849* 880* 972* 987* 1002* 1016* 1051* 1289 1309 1364 1396 1398 1427 1482* transaction_index 000122 automatic fixed bin(17,0) dcl 138 set ref 337* 400* 451* 507* 530* 553* 578* 605* 629* 805* 849* 880* 973* 988* 1003* 1017* 1052* 1482* transaction_manager_$abort_txn 000140 constant entry external dcl 290 ref 746 txn_discard_delta 000100 automatic fixed bin(17,0) dcl 1516 set ref 1338* 1340* 1340 1344 1345 1348 1352 txn_discard_file_uid parameter bit(36) dcl 1516 ref 1328 1335 1340 txn_discard_idx 000101 automatic fixed bin(17,0) dcl 1516 set ref 1335* 1335* 1339* 1339* 1340 1344 1344 1345 1345* 1348* 1349 1350* txn_remember_current_idx 000104 automatic fixed bin(17,0) dcl 1521 set ref 1408* 1413* 1414 1416 1416 1418 1421* 1428* 1431 1436 1437 txn_remember_delta 000105 automatic fixed bin(17,0) dcl 1521 set ref 1407* 1408 1412 1413 1419* txn_remember_high_idx 000103 automatic fixed bin(17,0) dcl 1521 set ref 1406* 1407 1408 1416* 1419 1421 txn_remember_low_idx 000102 automatic fixed bin(17,0) dcl 1521 set ref 1405* 1407 1413 1418* 1419 txn_remember_mod_page 000107 automatic fixed bin(33,0) dcl 1521 set ref 1403* 1414 1416 1436 txn_remember_mod_page_breakout 000110 automatic structure level 1 dcl 1530 set ref 1403 txn_remember_shift_idx 000106 automatic fixed bin(17,0) dcl 1521 set ref 1431* 1432 1432 1433 1433* uid based bit(36) level 2 in structure "ci_id" dcl 2-64 in procedure "fm_put_$init_txn_tbl" set ref 675 1084* uid 1 based bit(36) level 2 in structure "file_access_info" dcl 8-33 in procedure "fm_put_$init_txn_tbl" set ref 321 443* 675 742* 758* 829* 1084 1127 1259* 1269* 1437 uid_tail 0(18) 000530 automatic bit(18) level 2 packed unaligned dcl 1102 set ref 1127 unspec builtin function dcl 174 set ref 438 473 477* 682* 789* 898* 949* 1104* 1324* 1403* 1403 1448* 1500* version based char(8) level 3 in structure "proc_txn_tbl" dcl 1548 in procedure "TXN_FLUSH_MOD_PAGES" set ref 1281 1301 1319 1330 1449* version based char(8) level 2 in structure "fm_increment_info" dcl 10-32 in procedure "fm_put_$init_txn_tbl" ref 818 version 000423 automatic fixed bin(17,0) level 2 in structure "fc_flush_consec" dcl 893 in begin block on line 890 set ref 899* 950* version 1 000260 automatic fixed bin(17,0) level 2 in structure "my_signal_structure" dcl 169 in procedure "fm_put_$init_txn_tbl" set ref 740* version based bit(9) level 2 in structure "ci_stamp" packed unaligned dcl 2-48 in procedure "fm_put_$init_txn_tbl" ref 669 version 000226 automatic char(8) level 3 in structure "my_postcommit_info" packed unaligned dcl 167 in procedure "fm_put_$init_txn_tbl" set ref 820* version 4 based fixed bin(17,0) level 2 in structure "proc_txn" dcl 1536 in procedure "TXN_FLUSH_MOD_PAGES" set ref 1395* 1426* 1491 1491 write 2(18) based fixed bin(3,0) level 3 packed unsigned unaligned dcl 8-33 set ref 334 397 504 527 550 575 602 626 802 877 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CI_HEADER_STAMP_VERSION_1 internal static bit(9) initial dcl 2-53 CI_SIZE_CODE_1024_WORDS internal static bit(9) initial dcl 4-20 CONTROL_INTERVAL_ADDRESSABLE_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 3-22 CONTROL_INTERVAL_ZERO_ADDRESSABLE_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 3-25 CREATE_POSTCOMMIT_OPERATION internal static char(8) initial unaligned dcl 11-52 DELETE_POSTCOMMIT_OPERATION internal static char(8) initial unaligned dcl 11-52 FILE_ACCESS_INFO_IN_USE internal static fixed bin(17,0) initial dcl 8-63 FILE_ACCESS_TABLE_VERSION_1 internal static char(8) initial dcl 9-39 FILE_DOES_NOT_EXIST internal static fixed bin(17,0) initial dcl 8-63 FLUSH_CONSEC_VERSION_1 internal static fixed bin(17,0) initial dcl 12-21 FLUSH_VERSION_1 internal static fixed bin(17,0) initial dcl 12-21 LOCK_MODE_NAMES internal static char(3) initial array unaligned dcl 6-25 ci_header_ptr automatic pointer dcl 2-31 ci_size_code based structure level 1 dcl 2-73 ci_trailer based structure level 1 dcl 2-40 ci_trailer_ptr automatic pointer dcl 2-39 condition_info_header_ptr automatic pointer dcl 13-4 continue_to_signal_ 000000 constant entry external dcl 264 delete_postcommit_info based structure level 1 packed unaligned dcl 11-35 error_table_$bad_subr_arg external static fixed bin(35,0) dcl 209 flush based structure level 1 dcl 12-14 flush_consecp automatic pointer dcl 12-3 flushp automatic pointer dcl 12-4 NAMES DECLARED BY EXPLICIT CONTEXT. BASIC_ALLOCATE 004505 constant entry internal dcl 1080 ref 370 665 CALL_RING_0 006472 constant label dcl 1602 CHECK_CI_RANGE 004437 constant entry internal dcl 1058 ref 345 411 888 CHECK_RING_ACCESS 005131 constant entry internal dcl 1225 ref 334 397 504 527 550 575 602 626 802 877 FLUSH 003614 constant entry internal dcl 931 ref 921 926 FLUSH_CONSECUTIVE 003450 constant label dcl 890 FLUSH_MOD_PAGES 006207 constant entry internal dcl 1471 ref 1294 1312 1425 GET_ACCESS_INFO 004530 constant entry internal dcl 1093 ref 316 333 396 503 526 549 574 601 625 801 846 876 GET_INTEGRITY_SWITCHES 004704 constant entry internal dcl 1140 ref 335 398 505 528 551 576 603 627 803 847 878 GET_SEG_PTR 006433 constant entry internal dcl 1578 ref 430 461 904 GET_TRANSACTION_INFO 005101 constant entry internal dcl 1196 ref 337 400 507 530 553 578 605 629 805 849 880 GIS_RETURN 004736 constant label dcl 1188 set ref 1171 1179 1183 1186 GIS_TYPE 000000 constant label array(4) dcl 1171 set ref 1169 INIT 004402 constant entry internal dcl 1030 ref 301 313 330 393 500 523 546 571 598 622 797 843 873 970 985 1000 1014 LOCK_EXCLUSIVELY 005165 constant entry internal dcl 1241 ref 351 417 651 MAIN_RETURN 002542 constant label dcl 722 ref 731 MAKE_SEG_PTR 006425 constant entry internal dcl 1561 ref 360 656 MSP_JOIN 006440 constant label dcl 1584 ref 1576 1582 PUT_JOIN 002214 constant label dcl 644 ref 514 539 565 590 617 641 PUT_MY_PARTS 004174 constant entry internal dcl 750 ref 708 713 RETURN 004157 constant entry internal dcl 725 ref 305 318 323 339 382 385 402 408 445 452 490 492 555 580 607 631 644 648 669 672 675 678 689 697 716 748 760 807 810 818 831 834 836 851 856 865 882 945 952 962 977 992 1007 1021 1065 1068 1073 1106 1113 1123 1124 1127 1130 1133 1210 1235 1261 1270 1281 1289 1301 1309 1319 1330 1364 1398 1458 1483 1495 1505 1620 1628 1635 1644 TRANSACTION_BJ_FULL_HANDLER 002543 constant label dcl 735 set ref 441 757 816 TXN_CLEAR_FLUSH_LIST 005371 constant entry internal dcl 1299 ref 1005 TXN_DISCARD_FILE_FLUSH_LIST 005500 constant entry internal dcl 1328 ref 1019 TXN_DISCARD_FLUSH_LIST 005443 constant entry internal dcl 1317 ref 990 TXN_DONT_FLUSH_BJ 005624 constant entry internal dcl 1356 ref 532 TXN_FLUSH_MOD_PAGES 005316 constant entry internal dcl 1278 ref 975 TXN_INIT_PROC_DATA 006046 constant entry internal dcl 1443 ref 303 TXN_REMEMBER_MOD_PAGE 005656 constant entry internal dcl 1373 ref 372 479 781 adopt 004026 constant entry external dcl 982 allocate 000241 constant entry external dcl 327 clear_flush_list 004062 constant entry external dcl 997 discard_file_flush_list 004120 constant entry external dcl 1011 flush_consecutive_ci 003332 constant entry external dcl 870 flush_modified_ci 003772 constant entry external dcl 967 fm_put_$init_txn_tbl 000133 constant entry external dcl 93 free 000523 constant entry external dcl 390 get_uid 000164 constant entry external dcl 310 internal_put 001230 constant entry external dcl 497 lock_advice 003160 constant entry external dcl 840 postcommit_increment 002671 constant entry external dcl 794 put 001730 constant entry external dcl 595 put_journal 001454 constant entry external dcl 543 raw_put 001602 constant entry external dcl 568 simple_put 002062 constant entry external dcl 619 unput 001337 constant entry external dcl 518 NAME DECLARED BY CONTEXT OR IMPLICATION. size builtin function ref 739 829 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10470 10636 7240 10500 Length 11546 7240 146 673 1230 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fm_put_$init_txn_tbl 524 external procedure is an external procedure. on unit on line 441 64 on unit RETURN 64 internal procedure is called by several nonquick procedures. PUT_MY_PARTS 89 internal procedure enables or reverts conditions. on unit on line 757 64 on unit on unit on line 816 64 on unit begin block on line 890 begin block shares stack frame of external procedure fm_put_$init_txn_tbl. FLUSH 86 internal procedure enables or reverts conditions. on unit on line 938 68 on unit INIT internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. CHECK_CI_RANGE internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. BASIC_ALLOCATE internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. GET_ACCESS_INFO internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. GET_INTEGRITY_SWITCHES internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. GET_TRANSACTION_INFO internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. CHECK_RING_ACCESS internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. LOCK_EXCLUSIVELY internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. TXN_FLUSH_MOD_PAGES 87 internal procedure is called by several nonquick procedures. begin block on line 1451 84 begin block enables or reverts conditions. on unit on line 1453 68 on unit FLUSH_MOD_PAGES 84 internal procedure enables or reverts conditions. on unit on line 1488 68 on unit MAKE_SEG_PTR internal procedure shares stack frame of external procedure fm_put_$init_txn_tbl. begin block on line 1602 166 begin block enables or reverts conditions. on unit on line 1611 68 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME FLUSH 000100 f_callers_validation_level FLUSH FLUSH_MOD_PAGES 000100 callers_validation_level FLUSH_MOD_PAGES TXN_FLUSH_MOD_PAGES 000100 txn_discard_delta TXN_FLUSH_MOD_PAGES 000101 txn_discard_idx TXN_FLUSH_MOD_PAGES 000102 txn_remember_low_idx TXN_FLUSH_MOD_PAGES 000103 txn_remember_high_idx TXN_FLUSH_MOD_PAGES 000104 txn_remember_current_idx TXN_FLUSH_MOD_PAGES 000105 txn_remember_delta TXN_FLUSH_MOD_PAGES 000106 txn_remember_shift_idx TXN_FLUSH_MOD_PAGES 000107 txn_remember_mod_page TXN_FLUSH_MOD_PAGES 000110 txn_remember_mod_page_breakout TXN_FLUSH_MOD_PAGES 000112 proc_txn_ptr TXN_FLUSH_MOD_PAGES begin block on line 1451 000100 callers_validation_level begin block on line 1451 begin block on line 1602 000100 msp_dir_name begin block on line 1602 000152 msp_entry_name begin block on line 1602 000162 msp_callers_validation_level begin block on line 1602 fm_put_$init_txn_tbl 000100 ci_num fm_put_$init_txn_tbl 000101 code fm_put_$init_txn_tbl 000102 component_num fm_put_$init_txn_tbl 000103 first_ci fm_put_$init_txn_tbl 000104 last_ci fm_put_$init_txn_tbl 000105 lock_mode fm_put_$init_txn_tbl 000106 my_file_oid fm_put_$init_txn_tbl 000107 my_part_idx fm_put_$init_txn_tbl 000110 n_ci fm_put_$init_txn_tbl 000111 number_of_addressable_bytes fm_put_$init_txn_tbl 000112 operation_is_unput fm_put_$init_txn_tbl 000113 page_num fm_put_$init_txn_tbl 000114 part_idx fm_put_$init_txn_tbl 000115 part_length fm_put_$init_txn_tbl 000116 part_offset fm_put_$init_txn_tbl 000117 some_ci_already_allocated fm_put_$init_txn_tbl 000120 some_ci_already_free fm_put_$init_txn_tbl 000121 transaction_id fm_put_$init_txn_tbl 000122 transaction_index fm_put_$init_txn_tbl 000124 dtcm fm_put_$init_txn_tbl 000126 my_ci_id fm_put_$init_txn_tbl 000130 my_ci_stamp fm_put_$init_txn_tbl 000132 part_ptr fm_put_$init_txn_tbl 000134 my_part_ptrs fm_put_$init_txn_tbl 000154 my_ci_parts fm_put_$init_txn_tbl 000216 single_ci_part fm_put_$init_txn_tbl 000224 effective_integrity_switches fm_put_$init_txn_tbl 000226 my_postcommit_info fm_put_$init_txn_tbl 000240 my_file_access_info fm_put_$init_txn_tbl 000260 my_signal_structure fm_put_$init_txn_tbl 000374 ci_ptr fm_put_$init_txn_tbl 000376 ci_parts_ptr fm_put_$init_txn_tbl 000400 cip_number_of_parts fm_put_$init_txn_tbl 000402 file_access_info_ptr fm_put_$init_txn_tbl 000404 fm_increment_info_ptr fm_put_$init_txn_tbl 000406 postcommit_info_ptr fm_put_$init_txn_tbl 000423 fc_flush_consec begin block on line 890 000530 gai_my_file_oid GET_ACCESS_INFO 000540 gis_permit_integrity_switches GET_INTEGRITY_SWITCHES 000541 gis_force_integrity_switches GET_INTEGRITY_SWITCHES 000556 cra_caller_validation_level CHECK_RING_ACCESS 000566 le_code LOCK_EXCLUSIVELY 000576 msp_make_seg MAKE_SEG_PTR 000577 msp_code MAKE_SEG_PTR THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as enter_begin_block leave_begin_block call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 enable_op ext_entry int_entry alloc_storage clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. before_journal_manager_$flush_transaction before_journal_manager_$write_before_image before_journal_manager_$write_fm_postcommit_handler cu_$level_get cu_$level_set dm_hcs_$set_force_write_limit get_ring_ hcs_$flush_consecutive_pages hcs_$flush_pages hcs_$fs_get_path_name hcs_$set_synchronized_sw ioa_$rsnnl lock_manager_$lock msf_manager_$msf_get_ptr signal_ transaction_manager_$abort_txn THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_data_$current_txn_id dm_data_$current_txn_index dm_error_$bad_file_oid dm_error_$bj_journal_full dm_error_$ci_already_allocated dm_error_$ci_already_free dm_error_$ci_bad_hdr_id_num dm_error_$ci_bad_hdr_size_code dm_error_$ci_bad_hdr_uid dm_error_$ci_bad_stamp_ver dm_error_$ci_num_oob dm_error_$ci_num_parts_neg dm_error_$ci_parts_oob dm_error_$file_doesnt_exist dm_error_$file_must_be_protected dm_error_$file_was_deleted dm_error_$fm_bad_inc_info_ver dm_error_$fm_bad_proc_txn_tbl_ver dm_error_$fm_cant_free_ci_0 dm_error_$fm_first_ci_neg dm_error_$fm_num_ci_neg dm_error_$fm_old_txn_not_flushed dm_error_$lock_invalid_mode dm_error_$no_current_transaction error_table_$invalidsegno error_table_$no_w_permission error_table_$noentry error_table_$not_dm_ring fm_data_$file_access_table_ptr fm_data_$proc_txn_tbl_ptr sys_info$data_management_ringno LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 129 000113 154 000114 159 000116 5 35 000121 5 36 000123 8 61 000124 11 51 000125 93 000130 301 000144 303 000145 305 000151 310 000157 313 000177 314 000200 315 000203 316 000205 318 000207 321 000222 323 000225 327 000233 330 000252 331 000253 332 000256 333 000260 334 000262 335 000272 337 000333 339 000335 342 000350 343 000353 345 000355 347 000357 350 000362 351 000371 352 000403 355 000405 357 000406 358 000415 360 000424 363 000444 364 000454 366 000457 370 000464 372 000465 375 000474 380 000477 382 000501 385 000512 390 000520 393 000534 394 000535 395 000540 396 000542 397 000544 398 000554 400 000615 402 000617 405 000632 406 000635 408 000637 411 000650 413 000652 416 000655 417 000665 418 000677 421 000701 424 000704 425 000705 427 000707 428 000717 430 000726 432 000740 435 000744 436 000754 438 000757 441 000766 442 001005 443 001010 445 001034 449 001044 451 001047 452 001062 456 001072 458 001073 459 001103 461 001112 463 001124 467 001133 468 001143 470 001146 473 001152 476 001157 477 001161 479 001165 482 001174 488 001177 490 001202 492 001214 497 001222 500 001241 501 001242 502 001245 503 001247 504 001251 505 001261 507 001322 509 001324 510 001330 512 001332 514 001334 518 001335 521 001350 523 001352 524 001353 525 001356 526 001360 527 001362 528 001372 530 001433 532 001435 534 001441 535 001445 537 001447 539 001451 543 001452 546 001465 547 001466 548 001471 549 001473 550 001475 551 001505 553 001546 555 001550 558 001563 559 001567 561 001571 563 001575 565 001577 568 001600 571 001613 572 001614 573 001617 574 001621 575 001623 576 001633 578 001674 580 001676 583 001711 584 001715 586 001717 588 001723 590 001725 595 001726 598 001741 599 001742 600 001745 601 001747 602 001751 603 001761 605 002022 607 002024 610 002037 611 002043 613 002045 615 002051 617 002053 619 002054 622 002073 623 002074 624 002077 625 002101 626 002103 627 002113 629 002154 631 002156 633 002171 634 002173 635 002176 636 002200 637 002203 638 002205 640 002211 641 002213 644 002214 648 002225 651 002240 654 002255 656 002264 659 002304 660 002314 662 002317 663 002321 665 002323 669 002327 672 002342 675 002355 678 002370 682 002403 683 002406 684 002421 686 002422 687 002431 689 002435 692 002445 695 002447 697 002454 700 002467 702 002470 703 002475 704 002477 706 002504 708 002514 711 002524 713 002526 716 002534 722 002542 735 002543 739 002544 740 002546 741 002550 742 002551 744 002612 746 002615 747 002625 748 002657 794 002666 797 002702 798 002703 799 002706 800 002710 801 002712 802 002714 803 002724 805 002765 807 002767 810 003002 813 003015 816 003020 817 003037 818 003043 820 003056 821 003060 822 003062 823 003065 824 003070 825 003073 826 003075 828 003077 829 003100 831 003125 833 003135 834 003136 836 003145 840 003153 843 003171 844 003172 845 003175 846 003177 847 003201 849 003242 851 003244 854 003257 856 003262 861 003304 862 003307 863 003310 865 003321 870 003327 873 003343 874 003344 875 003347 876 003351 877 003353 878 003363 880 003424 882 003426 885 003441 886 003444 888 003446 898 003450 899 003453 901 003455 902 003500 904 003507 906 003521 909 003525 911 003526 913 003535 916 003551 921 003572 924 003601 926 003604 960 003612 931 003613 937 003621 938 003627 939 003653 941 003673 942 003710 945 003721 947 003730 949 003737 950 003743 952 003745 955 003760 962 003761 967 003767 970 004003 972 004004 973 004007 975 004011 977 004015 982 004023 985 004037 987 004040 988 004043 990 004045 992 004051 997 004057 1000 004073 1002 004074 1003 004077 1005 004101 1007 004105 1011 004113 1014 004133 1016 004134 1017 004137 1019 004141 1021 004147 1692 004155 725 004156 730 004164 731 004170 750 004173 752 004201 754 004204 757 004207 758 004226 760 004254 763 004266 764 004272 765 004273 767 004277 770 004304 771 004314 772 004320 773 004322 775 004326 776 004334 778 004336 781 004344 784 004354 789 004360 790 004363 791 004400 792 004401 1030 004402 1035 004403 1036 004405 1037 004406 1039 004407 1040 004411 1041 004413 1042 004415 1043 004417 1044 004421 1045 004422 1046 004424 1047 004426 1048 004430 1049 004432 1050 004433 1051 004434 1052 004435 1056 004436 1058 004437 1065 004441 1068 004452 1071 004464 1073 004471 1075 004503 1077 004504 1080 004505 1082 004506 1084 004511 1085 004514 1086 004516 1088 004520 1089 004522 1090 004525 1091 004527 1093 004530 1104 004532 1106 004534 1110 004555 1111 004561 1113 004572 1116 004603 1119 004610 1123 004617 1124 004627 1127 004636 1130 004655 1133 004674 1135 004703 1140 004704 1166 004706 1167 004707 1169 004710 1171 004712 1173 004713 1175 004715 1176 004717 1177 004721 1178 004723 1179 004725 1180 004726 1182 004730 1183 004732 1184 004733 1186 004735 1188 004736 1191 005100 1196 005101 1205 005103 1208 005110 1209 005113 1210 005115 1212 005124 1215 005125 1216 005127 1219 005130 1225 005131 1233 005133 1235 005142 1237 005163 1239 005164 1241 005165 1248 005167 1250 005170 1253 005175 1256 005200 1257 005202 1259 005220 1261 005243 1266 005253 1269 005261 1270 005304 1274 005314 1278 005315 1281 005323 1284 005340 1286 005345 1289 005347 1292 005361 1294 005363 1296 005367 1299 005370 1301 005376 1304 005414 1306 005421 1309 005423 1312 005435 1314 005441 1317 005442 1319 005450 1322 005466 1324 005473 1326 005476 1328 005477 1330 005505 1333 005523 1335 005530 1337 005544 1338 005546 1339 005547 1340 005557 1344 005566 1345 005570 1347 005574 1348 005576 1349 005611 1350 005613 1351 005614 1352 005617 1354 005622 1356 005623 1359 005631 1361 005636 1364 005640 1367 005652 1369 005654 1373 005655 1390 005663 1392 005670 1395 005672 1396 005674 1397 005677 1398 005700 1401 005712 1402 005716 1403 005720 1405 005722 1406 005723 1407 005727 1408 005731 1412 005736 1413 005741 1414 005744 1416 005751 1418 005755 1419 005757 1420 005762 1421 005763 1422 005765 1425 005771 1426 005775 1427 006000 1428 006003 1431 006004 1432 006015 1433 006021 1434 006023 1435 006026 1436 006030 1437 006033 1438 006037 1441 006044 1443 006045 1446 006053 1448 006060 1449 006063 1451 006066 1452 006071 1453 006100 1454 006124 1456 006144 1457 006147 1458 006162 1461 006175 1466 006204 1468 006205 1471 006206 1474 006214 1476 006220 1479 006221 1482 006223 1483 006236 1487 006251 1488 006260 1489 006304 1491 006324 1492 006343 1495 006355 1497 006364 1500 006373 1502 006400 1505 006411 1507 006420 1573 006422 1561 006425 1575 006430 1576 006432 1578 006433 1581 006436 1582 006437 1584 006440 1588 006443 1589 006451 1591 006452 1594 006454 1597 006466 1598 006471 1602 006472 1610 006475 1611 006504 1612 006530 1614 006550 1617 006602 1620 006610 1623 006623 1626 006626 1628 006656 1631 006673 1634 006702 1635 006734 1638 006746 1639 006776 1642 007001 1644 007025 1650 007034 1653 007043 1655 007044 1658 007054 1659 007071 1662 007106 ----------------------------------------------------------- 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