COMPILATION LISTING OF SEGMENT transaction Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/10/86 0849.7 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 7 8 /****^ HISTORY COMMENTS: 9* 1) change(86-04-15,Pierret), approve(86-04-15,MCR7279), 10* audit(86-07-30,Gilcrease), install(86-08-01,MR12.0-1113): 11* DM error 29: Changed to not look at all tm_tdt entries unless absolutely 12* necessary so that non-priviledged uses can use transaction status. 13* 2) change(86-04-15,Pierret), approve(86-04-15,MCR7279), 14* audit(86-07-30,Gilcrease), install(86-08-01,MR12.0-1113): 15* DM error 30: Changed to reset handler_invoked_sw to off after the 16* return from transaction_manager_$handle_conditions in the processing 17* of the SUSPEND_ACTION. 18* 3) change(86-04-15,Pierret), approve(86-04-15,MCR7279), 19* audit(86-07-30,Gilcrease), install(86-08-01,MR12.0-1113): 20* DM error 31: Changed loop which calls PRINT_ENTRY to use tix_index 21* instead of tix_count, thereby printing all entries instead of the last 22* one repeatedly. 23* 4) change(86-09-30,Blair), approve(86-10-22,MCR7567), audit(86-11-06,Dupuis), 24* install(86-11-10,MR12.0-1207): 25* Reset the handler_invoked_sw after signalling the condition so that we can 26* detect when a condition occurs more than once. TR 19757. 27* END HISTORY COMMENTS */ 28 29 30 /* format: style4,ifthenstmt,^indproc,^indcomtxt */ 31 /* --------------- */ 32 33 transaction: txn: proc; 34 35 /* DESCRIPTION: 36* 37* Command interface to the Data Management System. 38**/ 39 40 /* HISTORY: 41* 42*Written by Steve Herbst, 02/20/84. 43*Modified: 44*03/08/84 by Steve Herbst: Fixed general usage message. 45*03/21/84 by Steve Herbst: Fixed bug in "txn execute" condition handling. 46*03/21/84 by Steve Herbst: Changed "txn abandon" and "txn abort" to resume 47* suspended txn. 48*11/08/84 by Steve Herbst: Changed in response to audit comments. 49*04/02/84 by Lee A. Newcomb: Fixed dcl of tm_$get_state_description to be 50* char(*) as in called entry instead of char (64); called was reading 51* stack garbage when trying to decode descriptor. 52*04/03/84 by Lee A. Newcomb: Fixed status' using the wrong buffer when 53* outputing a txn's state. 54*04/19/84 by Lindsey L. Spratt: Corrected the calling sequence of the 55* transaction_manager_$rollback_txn entry to include the checkpoint id. 56*04/23/84 by Lindsey L. Spratt: Fixed to only handle the 57* dm_error_$system_not_initialized sub_error_ in the sub_error_ 58* handler. 59*04/26/84 by Lindsey L. Spratt: Changed to always abort on the cleanup 60* condition, and to do a non-local goto RETURN when aborting or 61* abandoning any condition other than a cleanup. 62*04/27/84 by Lindsey L. Spratt: Made all settings of severities use declared 63* constants. Fixed to always set the severity in the execute 64* operation, regardless of the path of execution, if txn is invoked 65* as an active function. 66*05/10/84 by S. Herbst: Fixed to get BJ path from oid if possible, without 67* (as for from_uid) requiring special gate access. 68*05/16/84 by S. Herbst: Fixed "txn execute" to prompt for command_line if 69* given neither a command_line nor -command_level. 70*05/21/84 by S. Herbst: Fixed "txn begin" error msg for bad control arg. 71*11/08/84 by Steve Herbst: Changed in response to audit comments. 72*11/27/84 by Steve Herbst: Changed further in response to audit comments. 73*01/02/85 by Steve Herbst: Fixed "txn execute" to set transaction_severity_ 74* external variable for use by severity command. 75*01/22/85 by Steve Herbst: Fixed CURRENT_ID proc to set af value to "false" 76* rather than issue an error. 77*01/29/85 by Steve Herbst: Fixed CURRENT_ID to return txn_id even if txn is 78* in an error state; changed to accept txn_id's as decimal integers. 79*02/20/85 by Steve Herbst: Fixed to handle dm_not_available_. 80**/ 81 82 /* DECLARATIONS */ 83 84 /* Constants */ 85 86 dcl KEY_NAMES (8) char (32) int static options (constant) 87 init ("abandon", "abort", "begin", "commit", "execute", "kill", "rollback", "status"); 88 dcl ( 89 EXISTING_TXN_NOT_ALLOWED init (1), 90 EXISTING_TXN_ALLOWED init (2), 91 EXISTING_TXN_REQUIRED init (3) 92 ) fixed bin int static options (constant); 93 dcl ( 94 ABANDON_ACTION init (1), 95 ABORT_ACTION init (2), 96 NO_ACTION init (3), 97 RETRY_ACTION init (4), 98 SUSPEND_ACTION init (5) 99 ) fixed bin int static options (constant); 100 101 dcl ( 102 NO_ERROR_SEVERITY init (0), 103 RETRY_SEVERITY init (1), 104 ABORT_OR_ABANDON_SEVERITY init (2), 105 FAILED_ABORT_OR_ABANDON_SEVERITY init (3), 106 FATAL_SEVERITY init (4) 107 ) fixed bin (35) internal static options (constant); 108 109 dcl ( 110 ENTRY_ITEM init (1), 111 TXN_ITEM init (2) 112 ) fixed bin int static options (constant); 113 dcl INITIAL_CHECKPOINT init (0) fixed bin internal static options (constant); 114 dcl PRINT_ALL_INFO bit (36) int static options (constant) init ((36)"1"b); 115 dcl RELATIVE_TIME_OPTION bit (2) int static options (constant) init ("11"b); 116 dcl ( 117 TEN_SECONDS init (10), 118 USEC_PER_SECOND init (1000000), 119 LONG_TIME_USEC init (1000000000000) 120 ) fixed bin (71) int static options (constant); 121 122 /* Based */ 123 124 dcl 1 handler_node aligned based, 125 2 next_ptr ptr, 126 2 condition_name char (32), 127 2 action fixed bin, 128 2 retry_limit fixed bin; 129 130 dcl 1 tm_info (tdt_max_count) aligned like txn_info based (tm_info_ptr); 131 132 dcl tix (tix_bound) fixed bin based (tix_ptr); 133 134 dcl area area based (area_ptr); 135 136 dcl arg char (arg_len) based (arg_ptr); 137 dcl key char (key_len) based (key_ptr); 138 dcl return_arg char (return_len) varying based (return_ptr); 139 140 /* Automatic */ 141 142 dcl 1 print_switches aligned, 143 2 (bj_path, dtm, errors, owner, pid, rollback_count, state, switches, tid, tix) bit (1) unaligned, 144 2 pad bit (26) unaligned; 145 146 dcl 1 select_switches aligned, 147 2 (abandoned, all, dead, tid, tix) bit (1) unaligned, 148 2 pad bit (31) unaligned; 149 150 dcl 1 cond_info aligned like condition_info; 151 152 dcl (key_buffer, my_name, on_action_name) char (32); 153 dcl (begun_time_str, ctl_args_str, requested_time_str) char (32); 154 155 dcl (af_sw, cl_sw, had_to_wait_sw, handler_invoked_sw, multiple_info_sw, on_action_specified_sw) bit (1); 156 dcl (print_no_txn_warning_sw, printed_something_sw, succeeded_sw, total_sw) bit (1); 157 dcl (txn_exists_sw, txn_existed_sw, wait_sw) bit (1); 158 dcl bj_opening_id bit (36); 159 dcl txn_id bit (36) aligned; 160 161 dcl (alp, area_ptr, arg_ptr, first_handler_ptr, key_ptr, return_ptr, tix_ptr, tm_info_ptr) ptr; 162 163 dcl (arg_count, arg_index, command_line_start, existing_txn_policy) fixed bin; 164 dcl (fixed_txn_id, key_index, tix_index, tdt_index, txn_index) fixed bin; 165 dcl (retry_count, retry_limit, tdt_max_count, tix_bound, tix_count, wait_seconds) fixed bin; 166 dcl (abandoned_count, dead_count, error_count, txn_count, used_count) fixed bin; 167 dcl (arg_len, key_len, return_len) fixed bin (21); 168 dcl code fixed bin (35); 169 dcl (start_usec, wait_usec) fixed bin (71); 170 171 dcl (complain, complain_suppress_name) entry variable options (variable); 172 173 /* External */ 174 175 dcl dm_error_$system_not_initialized fixed bin (35) ext; 176 dcl dm_error_$transaction_suspended fixed bin (35) ext; 177 dcl error_table_$badopt fixed bin (35) ext; 178 dcl error_table_$noarg fixed bin (35) ext; 179 dcl error_table_$not_act_fnc fixed bin (35) ext; 180 dcl error_table_$too_many_args fixed bin (35) ext; 181 dcl transaction_severity_ fixed bin ext; 182 183 /* Entries */ 184 185 dcl ( 186 active_fnc_err_, 187 active_fnc_err_$suppress_name 188 ) entry options (variable); 189 dcl before_journal_manager_$get_bj_path_from_oid entry (bit (36) aligned, char (*), char (*), fixed bin (35)); 190 dcl before_journal_manager_$get_bj_path_from_uid entry (bit (36) aligned, char (*), char (*), fixed bin (35)); 191 dcl ( 192 com_err_, 193 com_err_$suppress_name 194 ) entry options (variable); 195 dcl command_query_ entry options (variable); 196 dcl continue_to_signal_ entry (fixed bin (35)); 197 dcl convert_status_code_ entry (fixed bin (35), char (8), char (100)); 198 dcl cu_$af_return_arg entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 199 dcl cu_$arg_list_ptr entry (ptr); 200 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 201 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 202 dcl cu_$cp entry (ptr, fixed bin (21), fixed bin (35)); 203 dcl cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin (35)); 204 dcl date_time_ entry (fixed bin (71), char (*)); 205 dcl find_condition_info_ entry (ptr, ptr, fixed bin (35)); 206 dcl get_process_id_ entry returns (bit (36)); 207 dcl get_system_free_area_ entry returns (ptr); 208 dcl hcs_$validate_processid entry (bit (36) aligned, fixed bin (35)); 209 dcl ( 210 ioa_, 211 ioa_$rsnnl 212 ) entry options (variable); 213 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 214 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 215 dcl transaction_manager_$abandon_txn entry (bit (36) aligned, fixed bin (35)); 216 dcl transaction_manager_$abort_txn entry (bit (36) aligned, fixed bin (35)); 217 dcl transaction_manager_$begin_txn entry (fixed bin, bit (36), bit (36) aligned, fixed bin (35)); 218 dcl transaction_manager_$commit_txn entry (bit (36) aligned, fixed bin (35)); 219 dcl transaction_manager_$get_current_txn_id entry (bit (36) aligned, fixed bin (35)); 220 dcl transaction_manager_$get_state_description entry (fixed bin) returns (char (*)); 221 dcl transaction_manager_$get_tdt_size entry (fixed bin); 222 dcl transaction_manager_$get_txn_index entry (bit (36) aligned, fixed bin (35)) returns (fixed bin); 223 dcl transaction_manager_$get_txn_info_index entry (fixed bin, ptr, fixed bin (35)); 224 dcl transaction_manager_$handle_conditions entry (); 225 dcl transaction_manager_$kill_txn entry (bit (36) aligned, fixed bin (35)); 226 dcl transaction_manager_$resume_txn entry (fixed bin (35)); 227 dcl transaction_manager_$rollback_txn entry (bit (36) aligned, fixed bin, fixed bin (35)); 228 229 /* Builtins */ 230 231 dcl (addr, addrel, character, clock, fixed, hbound, index, length, ltrim, null, rtrim, substr, unspec, verify) builtin; 232 233 /* Conditions */ 234 235 dcl (any_other, cleanup, dm_not_available_, sub_error_) condition; 236 237 call cu_$af_return_arg (arg_count, return_ptr, return_len, code); 238 if code = 0 then do; 239 af_sw = "1"b; 240 complain = active_fnc_err_; 241 complain_suppress_name = active_fnc_err_$suppress_name; 242 end; 243 else if code = error_table_$not_act_fnc then do; 244 af_sw = "0"b; 245 complain = com_err_; 246 complain_suppress_name = com_err_$suppress_name; 247 end; 248 else do; 249 call com_err_ (code, "transaction"); 250 call ERROR_RETURN (); 251 end; 252 253 if arg_count = 0 then do; 254 my_name = "txn key"; 255 call complain_suppress_name (error_table_$noarg, "transaction", "^a", USAGE_STRING ("{other_args}")); 256 call ERROR_RETURN (); 257 end; 258 259 call cu_$arg_ptr (1, arg_ptr, arg_len, code); 260 if code ^= 0 then do; 261 call complain (code, "transaction", "Argument 1."); 262 call ERROR_RETURN (); 263 end; 264 265 if arg = "e" | arg = "st" then do; 266 key_ptr = addr (key_buffer); 267 key_len = length (key_buffer); 268 if arg = "e" 269 then key = "execute"; 270 else key = "status"; 271 end; 272 else do; 273 key_ptr = arg_ptr; 274 key_len = arg_len; 275 end; 276 277 do key_index = hbound (KEY_NAMES, 1) by -1 to 1 while (KEY_NAMES (key_index) ^= key); 278 end; 279 if key_index = 0 then do; 280 call complain (0, "transaction", "Invalid key argument ^a", arg); 281 call ERROR_RETURN (); 282 end; 283 284 my_name = "txn " || rtrim (KEY_NAMES (key_index)); 285 286 on dm_not_available_ begin; 287 call complain (dm_error_$system_not_initialized, my_name); 288 call ERROR_RETURN (); 289 end; 290 291 go to KEY (key_index); 292 RETURN: 293 return; 294 295 /* "txn abandon" */ 296 KEY (1): 297 if arg_count > 1 then do; 298 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("")); 299 call ERROR_RETURN (); 300 end; 301 302 on sub_error_ begin; 303 code = SUB_ERROR_CODE (); 304 if code ^= 0 then go to ABANDON_ATTEMPTED; 305 end; 306 307 call transaction_manager_$abandon_txn (CURRENT_ID (), code); 308 ABANDON_ATTEMPTED: 309 if code ^= 0 then do; 310 if af_sw 311 then return_arg = "false"; 312 else call complain (code, my_name); 313 end; 314 else do; 315 if af_sw then return_arg = "true"; 316 end; 317 318 return; 319 320 /* txn abort */ 321 KEY (2): 322 if arg_count > 1 then do; 323 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("")); 324 call ERROR_RETURN (); 325 end; 326 327 on sub_error_ begin; 328 code = SUB_ERROR_CODE (); 329 if code ^= 0 then go to ABORT_ATTEMPTED; 330 end; 331 332 call transaction_manager_$abort_txn (CURRENT_ID (), code); 333 ABORT_ATTEMPTED: 334 if code ^= 0 then do; 335 if af_sw 336 then return_arg = "false"; 337 else call complain (code, my_name); 338 end; 339 else do; 340 if af_sw then return_arg = "true"; 341 end; 342 343 return; 344 345 /* txn begin */ 346 KEY (3): 347 wait_sw = "0"b; 348 wait_usec = LONG_TIME_USEC; 349 350 do arg_index = 2 to arg_count; 351 352 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 353 354 if index (arg, "-") ^= 1 then do; 355 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("{-control_args}")); 356 call ERROR_RETURN (); 357 end; 358 359 else if arg = "-no_wait" | arg = "-nwt" then wait_sw = "0"b; 360 361 else if arg = "-wait" | arg = "-wt" then do; 362 arg_index = arg_index + 1; 363 if arg_index > arg_count then do; 364 call complain (0, my_name, "No value specified for -wait"); 365 call ERROR_RETURN (); 366 end; 367 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 368 wait_seconds = cv_dec_check_ (arg, code); 369 if code ^= 0 then do; 370 call complain (code, my_name, "Invalid -wait number of seconds ^a", arg); 371 call ERROR_RETURN (); 372 end; 373 wait_sw = "1"b; 374 wait_usec = (wait_seconds + TEN_SECONDS) * USEC_PER_SECOND; 375 /* extra 10 because that's how often we try */ 376 end; 377 378 else if arg = "-wait_indefinitely" | arg = "-wti" then do; 379 wait_sw = "1"b; 380 wait_usec = LONG_TIME_USEC; 381 end; 382 383 else do; 384 call complain (error_table_$badopt, my_name, "^a", arg); 385 call ERROR_RETURN (); 386 end; 387 end; 388 389 on sub_error_ begin; 390 code = SUB_ERROR_CODE (); 391 if code ^= 0 then go to BEGIN_ATTEMPTED; 392 end; 393 394 bj_opening_id = "0"b; /* use default BJ */ 395 396 start_usec = clock (); 397 had_to_wait_sw = "0"b; 398 399 do while (^had_to_wait_sw | clock () - start_usec < wait_usec); 400 401 call transaction_manager_$begin_txn (TM_NORMAL_MODE, bj_opening_id, txn_id, code); 402 BEGIN_ATTEMPTED: 403 if code = 0 then do; 404 if had_to_wait_sw then do; 405 call date_time_ (start_usec, requested_time_str); 406 call date_time_ (clock (), begun_time_str); 407 call ioa_ ("Transaction requested at ^a begun ^a", requested_time_str, begun_time_str); 408 end; 409 if af_sw then return_arg = "true"; 410 return; 411 end; 412 else if ^wait_sw | code ^= dm_error_$system_not_initialized then do; 413 if af_sw then return_arg = "false"; 414 else call complain (code, my_name); 415 call ERROR_RETURN (); 416 end; 417 418 /* Wait 10 seconds */ 419 420 call timer_manager_$sleep (TEN_SECONDS, RELATIVE_TIME_OPTION); 421 had_to_wait_sw = "1"b; 422 end; 423 424 if af_sw then return_arg = "false"; 425 else call complain (0, my_name, "Data Management not available within ^a seconds.", wait_seconds); 426 427 call ERROR_RETURN (); 428 429 /* txn commit */ 430 KEY (4): 431 if arg_count > 1 then do; 432 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("")); 433 call ERROR_RETURN (); 434 end; 435 436 on sub_error_ begin; 437 code = SUB_ERROR_CODE (); 438 if code ^= 0 then go to COMMIT_ATTEMPTED; 439 end; 440 441 call transaction_manager_$commit_txn (CURRENT_ID (), code); 442 COMMIT_ATTEMPTED: 443 if code ^= 0 then do; 444 if af_sw then return_arg = "false"; 445 else call complain (code, my_name); 446 end; 447 else if af_sw then return_arg = "true"; 448 449 return; 450 451 /* txn execute */ 452 KEY (5): 453 cl_sw, on_action_specified_sw, wait_sw = "0"b; 454 existing_txn_policy = EXISTING_TXN_NOT_ALLOWED; 455 wait_usec = LONG_TIME_USEC; 456 retry_count = 0; 457 transaction_severity_ = FATAL_SEVERITY; 458 459 /* Test for existing transaction */ 460 461 call transaction_manager_$get_current_txn_id (txn_id, code); 462 txn_existed_sw = (code = 0); 463 464 area_ptr = get_system_free_area_ (); 465 first_handler_ptr = null; 466 if ^txn_existed_sw then do; /* set up default handlers */ 467 call SAVE_HANDLER ("cleanup", ABORT_ACTION, 0); 468 call SAVE_HANDLER ("any_other", SUSPEND_ACTION, 0); 469 end; 470 471 call cu_$arg_list_ptr (alp); 472 473 command_line_start = 0; 474 do arg_index = 2 to arg_count while (command_line_start = 0); 475 476 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 477 478 if index (arg, "-") ^= 1 then command_line_start = arg_index; 479 480 else if arg = "-abandon_on" then do; 481 call GET_CONDITION_LIST ("-abandon_on", arg_index, ABANDON_ACTION, 0); 482 if ^on_action_specified_sw then do; 483 on_action_specified_sw = "1"b; 484 on_action_name = "-abandon_on"; 485 end; 486 end; 487 488 else if arg = "-abort_on" then do; 489 call GET_CONDITION_LIST ("-abort_on", arg_index, ABORT_ACTION, 0); 490 if ^on_action_specified_sw then do; 491 on_action_specified_sw = "1"b; 492 on_action_name = "-abort_on"; 493 end; 494 end; 495 496 else if arg = "-command_level" | arg = "-cl" then cl_sw = "1"b; 497 498 else if arg = "-existing_transaction_allowed" | arg = "-eta" 499 then existing_txn_policy = EXISTING_TXN_ALLOWED; 500 501 else if arg = "-existing_transaction_required" | arg = "-etr" 502 then existing_txn_policy = EXISTING_TXN_REQUIRED; 503 504 else if arg = "-no_action_on" then do; 505 call GET_CONDITION_LIST ("-no_action_on", arg_index, NO_ACTION, 0); 506 if ^on_action_specified_sw then do; 507 on_action_specified_sw = "1"b; 508 on_action_name = "-no_action_on"; 509 end; 510 end; 511 512 else if arg = "-no_existing_transaction_allowed" | arg = "-neta" 513 then existing_txn_policy = EXISTING_TXN_NOT_ALLOWED; 514 515 else if arg = "-no_wait" | arg = "-nwt" then wait_sw = "0"b; 516 517 else if arg = "-retry_on" then do; 518 arg_index = arg_index + 1; 519 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 520 if arg_index > arg_count then do; 521 call complain (0, my_name, "No number or condition list specified for -retry_on"); 522 call ERROR_RETURN (); 523 end; 524 retry_limit = cv_dec_check_ (arg, code); 525 if code ^= 0 then do; 526 call complain (code, my_name, "Invalid count ^a for -retry_on", arg); 527 call ERROR_RETURN (); 528 end; 529 call GET_CONDITION_LIST ("-retry_on", arg_index, RETRY_ACTION, retry_limit); 530 if ^on_action_specified_sw then do; 531 on_action_specified_sw = "1"b; 532 on_action_name = "-retry_on"; 533 end; 534 end; 535 536 else if arg = "-suspend_on" then do; 537 call GET_CONDITION_LIST ("-suspend_on", arg_index, SUSPEND_ACTION, 0); 538 if ^on_action_specified_sw then do; 539 on_action_specified_sw = "1"b; 540 on_action_name = "-suspend_on"; 541 end; 542 end; 543 544 else if arg = "-wait" | arg = "-wt" then do; 545 arg_index = arg_index + 1; 546 if arg_index > arg_count then do; 547 call complain (0, my_name, "No value specified for -wait"); 548 call ERROR_RETURN (); 549 end; 550 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 551 wait_seconds = cv_dec_check_ (arg, code); 552 if code ^= 0 then do; 553 call complain (code, my_name, "^a", arg); 554 call ERROR_RETURN (); 555 end; 556 wait_sw = "1"b; 557 wait_usec = (wait_seconds + TEN_SECONDS) * USEC_PER_SECOND; 558 /* extra 10 because that's how often we try */ 559 end; 560 561 else if arg = "-wait_indefinitely" | arg = "-wti" then do; 562 wait_sw = "1"b; 563 wait_usec = LONG_TIME_USEC; 564 end; 565 566 else do; 567 call complain (error_table_$badopt, my_name, "^a", arg); 568 call ERROR_RETURN (); 569 end; 570 end; 571 572 if command_line_start > 0 & cl_sw then do; 573 call complain (0, my_name, "Command line is incompatible with -command_level."); 574 call ERROR_RETURN (); 575 end; 576 577 if on_action_specified_sw & existing_txn_policy ^= EXISTING_TXN_NOT_ALLOWED then do; 578 call complain (0, my_name, "-existing_transaction_^[allowed^;required^] is incompatible with ^a", 579 existing_txn_policy = EXISTING_TXN_ALLOWED, on_action_name); 580 call ERROR_RETURN (); 581 end; 582 583 if txn_existed_sw & existing_txn_policy = EXISTING_TXN_NOT_ALLOWED then do; 584 call complain (0, my_name, "Current transaction already in effect, id = ^w", txn_id); 585 call ERROR_RETURN (); 586 end; 587 if ^txn_existed_sw & existing_txn_policy = EXISTING_TXN_REQUIRED then do; 588 call complain (0, my_name, "No current transaction, -existing_transaction_required."); 589 call ERROR_RETURN (); 590 end; 591 592 /* Try to begin a transaction if necessary */ 593 594 on sub_error_ begin; 595 code = SUB_ERROR_CODE (); 596 if code = dm_error_$system_not_initialized 597 then go to EXECUTE_BEGIN_ATTEMPTED; 598 else call continue_to_signal_ (0); 599 end; 600 601 if ^txn_existed_sw then 602 on cleanup begin; 603 call ABORT_OR_ABANDON (txn_id, succeeded_sw); 604 end; 605 606 bj_opening_id = "0"b; 607 608 start_usec = clock (); 609 had_to_wait_sw = "0"b; 610 611 do while (^had_to_wait_sw | clock () - start_usec < wait_usec); 612 613 if txn_existed_sw then code = 0; 614 else call transaction_manager_$begin_txn (TM_NORMAL_MODE, bj_opening_id, txn_id, code); 615 EXECUTE_BEGIN_ATTEMPTED: 616 if code = 0 then do; 617 if had_to_wait_sw then do; 618 call date_time_ (start_usec, requested_time_str); 619 call date_time_ (clock (), begun_time_str); 620 call ioa_ ("Transaction requested at ^a begun ^a", requested_time_str, begun_time_str); 621 end; 622 RETRY: 623 call EXECUTE_COMMAND_LINE (); 624 625 if ^txn_existed_sw then do; 626 call transaction_manager_$commit_txn (txn_id, code); 627 if code ^= 0 then do; 628 call ABORT_OR_ABANDON (txn_id, succeeded_sw); 629 if succeeded_sw then transaction_severity_ = ABORT_OR_ABANDON_SEVERITY; 630 else transaction_severity_ = FAILED_ABORT_OR_ABANDON_SEVERITY; 631 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 632 else call complain (code, my_name, "Unable to commit transaction."); 633 call ERROR_RETURN (); 634 end; 635 end; 636 if retry_count > 0 then do; 637 transaction_severity_ = RETRY_SEVERITY; 638 if ^af_sw then call complain (0, my_name, 639 "^d retries were required to successfully execute the command line.", retry_count); 640 end; 641 else transaction_severity_ = NO_ERROR_SEVERITY; 642 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 643 return; 644 end; 645 else if ^wait_sw | code ^= dm_error_$system_not_initialized then do; 646 transaction_severity_ = FATAL_SEVERITY; 647 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 648 else call complain (code, my_name, "Could not begin transaction."); 649 call ERROR_RETURN (); 650 end; 651 652 /* Wait 10 seconds */ 653 654 call timer_manager_$sleep (TEN_SECONDS, RELATIVE_TIME_OPTION); 655 had_to_wait_sw = "1"b; 656 end; 657 658 transaction_severity_ = FATAL_SEVERITY; 659 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 660 else call complain (0, my_name, "Data Management not available within ^d seconds.", wait_seconds); 661 662 return; 663 664 /* txn kill */ 665 KEY (6): 666 if arg_count > 2 then do; 667 KILL_USAGE: 668 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("{transaction_id}")); 669 call ERROR_RETURN (); 670 end; 671 672 if arg_count = 2 then do; 673 call cu_$arg_ptr (2, arg_ptr, arg_len, code); 674 if index (arg, "-") = 1 then go to KILL_USAGE; 675 fixed_txn_id = cv_dec_check_ (arg, code); 676 if code ^= 0 then do; 677 call complain (code, my_name, "Invalid transaction id ^a", arg); 678 call ERROR_RETURN (); 679 end; 680 unspec (txn_id) = unspec (fixed_txn_id); 681 end; 682 else txn_id = CURRENT_ID (); 683 684 on sub_error_ begin; 685 code = SUB_ERROR_CODE (); 686 if code ^= 0 then go to KILL_ATTEMPTED; 687 end; 688 689 call transaction_manager_$kill_txn (txn_id, code); 690 KILL_ATTEMPTED: 691 if code ^= 0 then do; 692 if af_sw then return_arg = "false"; 693 else call complain (code, my_name); 694 end; 695 else do; 696 if af_sw then return_arg = "true"; 697 end; 698 699 return; 700 701 /* txn rollback */ 702 KEY (7): 703 if arg_count > 1 then do; 704 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING ("")); 705 call ERROR_RETURN (); 706 end; 707 708 on sub_error_ begin; 709 code = SUB_ERROR_CODE (); 710 if code ^= 0 then go to ROLLBACK_ATTEMPTED; 711 end; 712 713 call transaction_manager_$rollback_txn (CURRENT_ID (), INITIAL_CHECKPOINT, code); 714 ROLLBACK_ATTEMPTED: 715 if code ^= 0 then do; 716 if af_sw then return_arg = "false"; 717 else call complain (code, my_name); 718 end; 719 else do; 720 if af_sw then return_arg = "true"; 721 end; 722 723 return; 724 725 /* txn status */ 726 KEY (8): 727 area_ptr = get_system_free_area_ (); 728 tix_ptr, tm_info_ptr, txn_info_ptr = null; 729 730 on cleanup call CLEAN_UP_STATUS (); 731 732 tix_bound = arg_count - 1; 733 allocate tix in (area) set (tix_ptr); 734 tix_count = 0; 735 736 unspec (print_switches), unspec (select_switches) = "0"b; 737 multiple_info_sw, total_sw = "0"b; 738 739 do arg_index = 2 to arg_count; 740 741 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, code); 742 743 if index (arg, "-") ^= 1 then do; 744 if af_sw then ctl_args_str = "-control_arg"; 745 else ctl_args_str = "-control_args"; 746 call complain_suppress_name (error_table_$too_many_args, my_name, USAGE_STRING (ctl_args_str)); 747 go to STATUS_RETURN; 748 end; 749 750 /* Control args for selecting transactions */ 751 752 if arg = "-abandoned" then 753 if af_sw then go to BAD_STATUS_AF_ARG; 754 else select_switches.abandoned = "1"b; 755 else if arg = "-all" | arg = "-a" then 756 if af_sw then go to BAD_STATUS_AF_ARG; 757 else select_switches.all, total_sw = "1"b; 758 else if arg = "-dead" then 759 if af_sw then go to BAD_STATUS_AF_ARG; 760 else select_switches.dead, select_switches.all = "1"b; 761 else if arg = "-total" | arg = "-tt" then 762 if af_sw then go to BAD_STATUS_AF_ARG; 763 else total_sw = "1"b; 764 765 else if arg = "-transaction_id" | arg = "-tid" | arg = "-id" then do; 766 if arg_index = arg_count then print_switches.tid = "1"b; 767 else do; 768 call cu_$arg_ptr (arg_index + 1, arg_ptr, arg_len, code); 769 if index (arg, "-") = 1 then print_switches.tid = "1"b; 770 else do; /* -tid N */ 771 arg_index = arg_index + 1; 772 fixed_txn_id = cv_dec_check_ (arg, code); 773 if code ^= 0 then do; 774 call complain (code, my_name, "Invalid transaction id ^a", arg); 775 go to STATUS_RETURN; 776 end; 777 unspec (txn_id) = unspec (fixed_txn_id); 778 txn_index = transaction_manager_$get_txn_index (txn_id, code); 779 if code ^= 0 then call complain (code, my_name, "transaction id = ^a", arg); 780 else do; 781 select_switches.tid = "1"b; 782 tix_count = tix_count + 1; 783 tix (tix_count) = txn_index; 784 end; 785 end; 786 end; 787 end; 788 789 else if arg = "-transaction_index" | arg = "-tix" | arg = "-index" then do; 790 if arg_index = arg_count then print_switches.tix = "1"b; 791 else do; 792 call cu_$arg_ptr (arg_index + 1, arg_ptr, arg_len, code); 793 if index (arg, "-") = 1 794 then print_switches.tix = "1"b; 795 else do; 796 arg_index = arg_index + 1; 797 txn_index = cv_dec_check_ (arg, code); 798 if code ^= 0 then do; 799 call complain (code, my_name, "Invalid transaction index ^a", arg); 800 go to STATUS_RETURN; 801 end; 802 select_switches.tix = "1"b; 803 tix_count = tix_count + 1; 804 tix (tix_count) = txn_index; 805 end; 806 end; 807 end; 808 809 /* Control args for selecting fields to print */ 810 811 else if arg = "-before_journal_path" | arg = "-bj_path" then call REQUEST_INFO (print_switches.bj_path); 812 else if arg = "-begun" | arg = "-date_time_begun" | arg = "-dtbg" then 813 call REQUEST_INFO (print_switches.dtm); 814 else if arg = "-error_info" | arg = "-error" then call REQUEST_INFO (print_switches.errors); 815 else if arg = "-owner" then call REQUEST_INFO (print_switches.owner); 816 else if arg = "-process_id" | arg = "-pid" then call REQUEST_INFO (print_switches.pid); 817 else if arg = "-rollback_count" | arg = "-rbc" then call REQUEST_INFO (print_switches.rollback_count); 818 else if arg = "-state" then call REQUEST_INFO (print_switches.state); 819 else if arg = "-switches" | arg = "-switch" | arg = "-sw" then call REQUEST_INFO (print_switches.switches); 820 821 else do; 822 BAD_STATUS_AF_ARG: 823 call complain (error_table_$badopt, my_name, "^a", arg); 824 go to STATUS_RETURN; 825 end; 826 end; 827 828 if af_sw & tix_count > 1 then do; 829 call complain (0, my_name, "Can return info for only one transaction."); 830 go to STATUS_RETURN; 831 end; 832 833 on sub_error_ begin; /* eg., DM initialization error */ 834 code = SUB_ERROR_CODE (); 835 if code ^= 0 then do; 836 call complain (code, my_name); 837 go to RETURN; 838 end; 839 end; 840 841 if tix_count = 0 & ^select_switches.all & ^total_sw then do; 842 tix_count = tix_count + 1; 843 txn_id = CURRENT_ID (); 844 tix (tix_count) = transaction_manager_$get_txn_index (txn_id, code); 845 if code ^= 0 then do; 846 call complain (code, my_name, "transaction id = ^o", fixed (txn_id)); 847 go to STATUS_RETURN; 848 end; 849 end; 850 851 if unspec (print_switches) = "0"b 852 then if af_sw then do; 853 call complain_suppress_name (error_table_$noarg, my_name, "Usage: [txn status -control_arg]"); 854 go to STATUS_RETURN; 855 end; 856 else do; 857 unspec (print_switches) = unspec (PRINT_ALL_INFO); 858 multiple_info_sw = "1"b; 859 end; 860 861 if select_switches.all | total_sw then 862 EXAMINE_WHOLE_TDT: do; 863 864 call transaction_manager_$get_tdt_size (tdt_max_count); 865 if tdt_max_count = 0 then do; 866 if af_sw then call complain (0, my_name, "No transactions defined."); 867 /* should never happen */ 868 else call ioa_ ("No transactions defined."); 869 go to STATUS_RETURN; 870 end; 871 872 allocate tm_info in (area) set (tm_info_ptr); 873 allocate txn_info in (area) set (txn_info_ptr); 874 txn_info.version = TXN_INFO_VERSION_5; 875 876 do tdt_index = 1 to tdt_max_count; 877 call transaction_manager_$get_txn_info_index (tdt_index, txn_info_ptr, code); 878 if code ^= 0 then do; 879 call complain (code, my_name, "TDT entry #^d", tdt_index); 880 go to STATUS_RETURN; 881 end; 882 883 tm_info (tdt_index) = txn_info; 884 end; 885 886 /* Print totals if requested */ 887 888 if total_sw then do; 889 890 abandoned_count, dead_count, error_count, txn_count, used_count = 0; 891 do tdt_index = 1 to tdt_max_count; 892 if tm_info.owner_process_id (tdt_index) ^= "0"b then used_count = used_count + 1; 893 if DEAD_PROCESS (tm_info.owner_process_id (tdt_index)) then dead_count = dead_count + 1; 894 if tm_info.abandoned_sw (tdt_index) then abandoned_count = abandoned_count + 1; 895 if tm_info.txn_id (tdt_index) ^= "0"b then txn_count = txn_count + 1; 896 if tm_info.error_sw (tdt_index) then error_count = error_count + 1; 897 end; 898 899 call ioa_ ("TDT size: ^d entries", tdt_max_count); 900 call ioa_ ("In use: ^d", used_count); 901 call ioa_ ("Dead processes: ^d", dead_count); 902 call ioa_ ("Abandoned entries: ^d", abandoned_count); 903 call ioa_ ("Transactions: ^d", txn_count); 904 call ioa_ ("Error transactions: ^d", error_count); 905 call ioa_ (""); 906 end; 907 908 /* Print or return individual transaction information */ 909 910 printed_something_sw = "0"b; 911 if af_sw then return_arg = """"""; /* default value is "" (eg., no txn) */ 912 913 if select_switches.all 914 then do tdt_index = 1 to tdt_max_count; 915 916 if tm_info.owner_process_id (tdt_index) ^= "0"b then do; 917 txn_info = tm_info (tdt_index); 918 call PRINT_ENTRY (); 919 end; 920 end; 921 922 else do tix_index = 1 to tix_count; 923 txn_info = tm_info (tix (tix_index)); 924 call PRINT_ENTRY (); 925 end; 926 927 if ^printed_something_sw & ^af_sw & 928 (select_switches.abandoned | select_switches.dead | select_switches.tid | select_switches.tix) then 929 call complain (0, my_name, "No entries with specified attributes."); 930 end EXAMINE_WHOLE_TDT; 931 932 else EXAMINE_SPECIFIED_ENTRIES: do; 933 allocate txn_info in (area) set (txn_info_ptr); 934 txn_info.version = TXN_INFO_VERSION_5; 935 936 do tix_index = 1 to tix_count; 937 call transaction_manager_$get_txn_info_index (tix (tix_index), txn_info_ptr, code); 938 if code = 0 then call PRINT_ENTRY (); 939 else call complain (code, my_name, "TDT entry #^d.", tix (tix_index)); 940 end; 941 end EXAMINE_SPECIFIED_ENTRIES; 942 STATUS_RETURN: 943 call CLEAN_UP_STATUS (); 944 945 return; 946 947 ABORT_OR_ABANDON: proc (P_txn_id, P_succeeded_sw); 948 949 dcl P_txn_id bit (36) aligned; 950 dcl P_succeeded_sw bit (1); 951 dcl code fixed bin (35); 952 953 call transaction_manager_$abort_txn (P_txn_id, code); 954 if code ^= 0 then do; 955 call transaction_manager_$abandon_txn (P_txn_id, code); 956 if code ^= 0 then do; 957 P_succeeded_sw = "0"b; 958 call ERROR_RETURN (); 959 end; 960 end; 961 P_succeeded_sw = "1"b; 962 return; 963 964 end ABORT_OR_ABANDON; 965 966 AF_SEVERITY_VALUE: proc (P_severity) returns (char (*)); 967 968 dcl P_severity fixed bin; 969 970 if P_severity < 2 then return ("true"); 971 else return ("false"); 972 973 end AF_SEVERITY_VALUE; 974 975 CLEAN_UP_STATUS: proc; 976 977 if tix_ptr ^= null then free tix in (area); 978 if tm_info_ptr ^= null then free tm_info in (area); 979 if txn_info_ptr ^= null then free txn_info in (area); 980 981 end CLEAN_UP_STATUS; 982 983 CODE_DESCRIPTION: proc (P_code) returns (char (100)); 984 985 dcl P_code fixed bin (35); 986 dcl message char (100); 987 dcl dm_error_$ external bit (36) aligned; 988 dcl better_message char (100); 989 dcl better_code fixed bin (35); 990 dcl pp_as_word bit (36) aligned; 991 dcl segno builtin; 992 1 1 /* Begin include file packed_pointer.incl.pl1 BIM 830510 */ 1 2 1 3 declare packed_pointer_ptr pointer; 1 4 declare 1 packed_pointer aligned based (packed_pointer_ptr), 1 5 2 bitno fixed bin (6) unsigned unaligned, 1 6 2 segno fixed bin (12) unsigned unaligned, 1 7 2 wordno fixed bin (18) unsigned unaligned; 1 8 1 9 /* End include file packed_pointer.incl.pl1 */ 993 994 995 call convert_status_code_ (P_code, "", message); 996 if substr (message, 1, 4) = "Code" then do; /* Perhaps dm_error_ in another process */ 997 pp_as_word = unspec (P_code); 998 packed_pointer_ptr = addr (pp_as_word); 999 packed_pointer.segno = segno (addr (dm_error_$)); 1000 unspec (better_code) = pp_as_word; 1001 call convert_status_code_ (better_code, "", better_message); 1002 if substr (better_message, 1, 4) ^= "Code" then message = better_message; 1003 end; 1004 return (message); 1005 1006 end CODE_DESCRIPTION; 1007 1008 CONDITION_HANDLER: proc (P_txn_id, P_retry_count, P_retry_label); 1009 1010 dcl P_txn_id bit (36) aligned; 1011 dcl P_retry_count fixed bin; 1012 dcl P_retry_label label variable; 1013 dcl p ptr; 1014 dcl condition_name char (32); 1015 1016 if handler_invoked_sw then do; 1017 call continue_to_signal_ (0); 1018 handler_invoked_sw = "0"b; 1019 return; 1020 end; 1021 handler_invoked_sw = "1"b; 1022 1023 if first_handler_ptr = null then return; /* no handler for any condition */ 1024 1025 call find_condition_info_ (null, addr (cond_info), code); 1026 if code ^= 0 then condition_name = "any_other"; /* can't get name, trigger the any_other handler */ 1027 else condition_name = cond_info.condition_name; 1028 1029 /* Try the specific condition name */ 1030 1031 do p = first_handler_ptr repeat (p -> handler_node.next_ptr) while (p ^= null); 1032 if p -> handler_node.condition_name = condition_name then do; 1033 call do_action (p, P_txn_id, P_retry_count, P_retry_label); 1034 return; 1035 end; 1036 end; 1037 1038 /* That having failed, look for an any_other handler */ 1039 1040 do p = first_handler_ptr repeat (p -> handler_node.next_ptr) while (p ^= null); 1041 if p -> handler_node.condition_name = "any_other" then do; 1042 call do_action (p, P_txn_id, P_retry_count, P_retry_label); 1043 return; 1044 end; 1045 end; 1046 1047 handler_invoked_sw = "0"b; 1048 1049 return; 1050 1051 1052 do_action: proc (P_ptr, P_txn_id, P_retry_count, P_retry_label); 1053 1054 dcl P_ptr ptr; 1055 dcl P_txn_id bit (36) aligned; 1056 dcl (P_retry_count, action) fixed bin; 1057 dcl code fixed bin (35); 1058 dcl P_retry_label label variable; 1059 1060 action = P_ptr -> handler_node.action; 1061 if action = ABANDON_ACTION then do; 1062 call transaction_manager_$abandon_txn (P_txn_id, code); 1063 if code ^= 0 then transaction_severity_ = FAILED_ABORT_OR_ABANDON_SEVERITY; 1064 else transaction_severity_ = ABORT_OR_ABANDON_SEVERITY; 1065 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 1066 else call complain (0, my_name, 1067 "Abandoning the command line and its transaction because the ^a condition was signaled.", 1068 P_ptr -> handler_node.condition_name); 1069 goto RETURN; 1070 end; 1071 else if action = ABORT_ACTION then do; 1072 call transaction_manager_$abort_txn (P_txn_id, code); 1073 if code ^= 0 then transaction_severity_ = FAILED_ABORT_OR_ABANDON_SEVERITY; 1074 else transaction_severity_ = ABORT_OR_ABANDON_SEVERITY; 1075 if af_sw then return_arg = AF_SEVERITY_VALUE (transaction_severity_); 1076 else call complain (0, my_name, 1077 "Aborting the command line and its transaction because the ^a condition was signaled.", 1078 P_ptr -> handler_node.condition_name); 1079 goto RETURN; 1080 end; 1081 else if action = NO_ACTION then ; 1082 else if action = RETRY_ACTION then do; 1083 P_retry_count = P_retry_count + 1; 1084 if P_retry_count > p -> handler_node.retry_limit then return; 1085 else go to P_retry_label; 1086 end; 1087 else if action = SUSPEND_ACTION then do; 1088 call transaction_manager_$handle_conditions (); 1089 handler_invoked_sw = "0"b; 1090 end; 1091 1092 end do_action; 1093 1094 end CONDITION_HANDLER; 1095 1096 CURRENT_ID: proc returns (bit (36) aligned); 1097 1098 dcl txn_id bit (36) aligned; 1099 dcl tried_resume_sw bit (1); 1100 dcl code fixed bin (35); 1101 1102 tried_resume_sw = "0"b; 1103 GET_ID: 1104 call transaction_manager_$get_current_txn_id (txn_id, code); 1105 if code ^= 0 then do; 1106 if code = dm_error_$transaction_suspended & ^tried_resume_sw then 1107 if my_name = "txn status" then return (txn_id); 1108 else if my_name = "txn abandon" | my_name = "txn abort" then do; 1109 tried_resume_sw = "1"b; 1110 code = 0; 1111 call transaction_manager_$resume_txn (code); 1112 if code ^= 0 then do; 1113 if af_sw then return_arg = "false"; 1114 else call complain (code, my_name, "Could not resume transaction."); 1115 go to RETURN; 1116 end; 1117 else go to GET_ID; 1118 end; 1119 if txn_id = "0"b then do; 1120 if af_sw then return_arg = "false"; 1121 else call complain (code, my_name); 1122 go to RETURN; 1123 end; 1124 end; 1125 return (txn_id); 1126 1127 end CURRENT_ID; 1128 1129 DEAD_PROCESS: proc (P_process_id) returns (bit (1)); 1130 1131 dcl P_process_id bit (36) aligned; 1132 dcl code fixed bin (35); 1133 1134 if P_process_id = "0"b then return ("0"b); 1135 1136 call hcs_$validate_processid (P_process_id, code); 1137 return (code ^= 0); 1138 1139 end DEAD_PROCESS; 1140 1141 ERROR_RETURN: proc; 1142 1143 go to RETURN; 1144 1145 end ERROR_RETURN; 1146 1147 EXECUTE_COMMAND_LINE: proc; 1148 1149 dcl line_len fixed bin (21); 1150 dcl arg_index fixed bin; 1151 1152 if command_line_start > 0 then do; 1153 line_len = -1; 1154 do arg_index 1155 = command_line_start to arg_count; 1156 call cu_$arg_ptr_rel (arg_index, arg_ptr, arg_len, 0, alp); 1157 line_len = line_len + arg_len + 1; 1158 end; 1159 begin; 1160 dcl line char (line_len); 1161 1162 line = ""; 1163 line_len = -1; 1164 do arg_index = command_line_start to arg_count; 1165 call cu_$arg_ptr_rel (arg_index, arg_ptr, arg_len, 0, alp); 1166 substr (line, line_len + 2, arg_len) = arg; 1167 line_len = line_len + arg_len + 1; 1168 end; 1169 1170 handler_invoked_sw = "0"b; 1171 on any_other begin; 1172 call CONDITION_HANDLER (txn_id, retry_count, RETRY); 1173 end; 1174 1175 call cu_$cp (addr (line), line_len, code); 1176 if code ^= 0 then transaction_severity_ = ABORT_OR_ABANDON_SEVERITY; /* Is this right? */ 1177 end; 1178 end; 1179 1180 else do; 1181 begin; 1182 dcl var_line char (3000) varying; 1183 dcl 1 qi aligned like query_info; 1184 1185 unspec (qi) = "0"b; 1186 qi.version = query_info_version_5; 1187 qi.question_iocbp, qi.answer_iocbp, qi.explanation_ptr = null; 1188 qi.suppress_name_sw = "1"b; 1189 1190 call command_query_ (addr (qi), var_line, "transaction execute", "Command line:"); 1191 1192 handler_invoked_sw = "0"b; 1193 on any_other begin; 1194 call CONDITION_HANDLER (txn_id, retry_count, RETRY); 1195 end; 1196 1197 call cu_$cp (addrel (addr (var_line), 1), length (var_line), code); 1198 if code ^= 0 then transaction_severity_ = ABORT_OR_ABANDON_SEVERITY; 1199 end; 1200 end; 1201 1202 end EXECUTE_COMMAND_LINE; 1203 1204 GET_CONDITION_LIST: proc (P_name, P_index, P_action, P_retry_limit); 1205 1206 dcl P_name char (*); 1207 dcl (P_index, P_action, P_retry_limit, comma_pos, list_pos) fixed bin; 1208 dcl condition_name char (32); 1209 dcl COMMA char (1) int static options (constant) init (","); 1210 1211 P_index = P_index + 1; 1212 if P_index > arg_count then do; 1213 call complain (0, my_name, "No condition list specified for ^a", P_name); 1214 go to RETURN; 1215 end; 1216 call cu_$arg_ptr_rel (P_index, arg_ptr, arg_len, code, alp); 1217 1218 list_pos = 1; 1219 do while (list_pos <= arg_len); 1220 1221 comma_pos = verify (substr (arg, list_pos), COMMA); 1222 if comma_pos = 0 then return; 1223 1224 list_pos = list_pos + comma_pos - 1; 1225 comma_pos = index (substr (arg, list_pos), COMMA); 1226 if comma_pos = 0 then do; 1227 condition_name = substr (arg, list_pos); 1228 list_pos = arg_len + 1; 1229 end; 1230 else do; 1231 condition_name = substr (arg, list_pos, comma_pos - 1); 1232 list_pos = list_pos + comma_pos; 1233 end; 1234 1235 call SAVE_HANDLER (condition_name, P_action, P_retry_limit); 1236 end; 1237 1238 return; 1239 1240 end GET_CONDITION_LIST; 1241 1242 PRINT_ENTRY: proc (); 1243 1244 dcl (buffer, dn) char (168); 1245 dcl state_description_buffer char (68); 1246 dcl (en, time_string) char (32); 1247 1248 if txn_info.owner_process_id = "0"b then do; 1249 if af_sw & print_switches.pid then return_arg = "0"; 1250 return; 1251 end; 1252 1253 if select_switches.abandoned & ^txn_info.abandoned_sw then do; 1254 if ^select_switches.dead | ^DEAD_PROCESS (txn_info.owner_process_id) then return; 1255 end; 1256 else if select_switches.dead & ^DEAD_PROCESS (txn_info.owner_process_id) then return; 1257 1258 printed_something_sw = "1"b; 1259 1260 txn_exists_sw = (txn_info.txn_id ^= "0"b); 1261 print_no_txn_warning_sw = "0"b; 1262 1263 if print_switches.tix then call PRINT_ITEM ("Transaction index", character (txn_info.txn_index), ENTRY_ITEM); 1264 if print_switches.tid then 1265 call PRINT_ITEM ("Transaction id", character (fixed (txn_info.txn_id)), TXN_ITEM); 1266 if print_switches.pid then do; 1267 call ioa_$rsnnl ("^w^[ (dead)^]", buffer, length (buffer), txn_info.owner_process_id, 1268 DEAD_PROCESS (txn_info.owner_process_id) & ^af_sw); 1269 call PRINT_ITEM ("Process id", buffer, ENTRY_ITEM); 1270 end; 1271 if print_switches.owner then call PRINT_ITEM ("Owner", (txn_info.owner_name), ENTRY_ITEM); 1272 if print_switches.dtm then do; 1273 if txn_info.date_time_created = 0 1274 then time_string = "(undefined)"; 1275 else call date_time_ (txn_info.date_time_created, time_string); 1276 call PRINT_ITEM ("Begun at", time_string, TXN_ITEM); 1277 end; 1278 if print_switches.state then do; 1279 state_description_buffer = transaction_manager_$get_state_description (txn_info.state); 1280 call PRINT_ITEM ("State", state_description_buffer, TXN_ITEM); 1281 end; 1282 if print_switches.errors then 1283 if ^txn_info.error_sw then call PRINT_ITEM ("Error", "none", TXN_ITEM); 1284 else call PRINT_ITEM ("Error", CODE_DESCRIPTION (txn_info.error_code), TXN_ITEM); 1285 if print_switches.rollback_count then 1286 call PRINT_ITEM ("Rollback count", character (txn_info.rollback_count), TXN_ITEM); 1287 if print_switches.bj_path then do; 1288 if txn_info.bj_uid = "0"b then 1289 if af_sw then return_arg = ""; 1290 else call ioa_ ("No before journal."); 1291 else do; 1292 if txn_info.owner_process_id = get_process_id_ () then 1293 call before_journal_manager_$get_bj_path_from_oid (txn_info.bj_oid, dn, en, code); 1294 else call before_journal_manager_$get_bj_path_from_uid (txn_info.bj_uid, dn, en, code); 1295 if code ^= 0 then 1296 call complain (code, my_name, "Before journal uid = ^w", txn_info.bj_uid); 1297 else call PRINT_ITEM ("Before journal path", pathname_ (dn, en), TXN_ITEM); 1298 end; 1299 end; 1300 if print_switches.switches then do; 1301 if unspec (txn_info.flags) = "0"b then buffer = "none"; 1302 else do; 1303 buffer = ""; 1304 if txn_info.abandoned_sw then buffer = "ABANDONED"; 1305 if txn_info.kill_sw then call append ("KILL"); 1306 if txn_info.suspended_sw then call append ("SUSPENDED"); 1307 if txn_info.dead_process_sw then call append ("DEAD_PROCESS"); 1308 end; 1309 call PRINT_ITEM ("Switches", buffer, TXN_ITEM); 1310 end; 1311 1312 if print_no_txn_warning_sw then call ioa_ ("No transaction."); 1313 1314 if multiple_info_sw & ^af_sw then call ioa_ (""); /* separate blocks of info */ 1315 1316 append: proc (P_str); 1317 1318 dcl P_str char (*); 1319 1320 if buffer ^= "" then buffer = rtrim (buffer) || ","; 1321 buffer = rtrim (buffer) || P_str; 1322 1323 end append; 1324 1325 end PRINT_ENTRY; 1326 1327 PRINT_ITEM: proc (P_name, P_value, P_item_type); 1328 1329 dcl (P_name, P_value) char (*); 1330 dcl P_item_type fixed bin; 1331 1332 if af_sw then do; 1333 if txn_exists_sw | P_item_type = ENTRY_ITEM then return_arg = ltrim (rtrim (P_value)); 1334 end; 1335 1336 else if ^txn_exists_sw & P_item_type = TXN_ITEM then print_no_txn_warning_sw = "1"b; 1337 1338 else if multiple_info_sw then call ioa_ ("^a: ^a", P_name, ltrim (rtrim (P_value))); 1339 else call ioa_ ("^a", ltrim (rtrim (P_value))); 1340 1341 end PRINT_ITEM; 1342 1343 REQUEST_INFO: proc (P_sw); 1344 1345 dcl P_sw bit (1) unaligned; 1346 1347 P_sw = "0"b; /* to test if others on */ 1348 if unspec (print_switches) ^= "0"b then do; 1349 if af_sw then do; 1350 call complain (0, my_name, "Can only return one item of information."); 1351 go to RETURN; 1352 end; 1353 multiple_info_sw = "1"b; 1354 end; 1355 1356 P_sw = "1"b; 1357 1358 return; 1359 1360 end REQUEST_INFO; 1361 1362 SAVE_HANDLER: proc (P_condition_name, P_action, P_retry_limit); 1363 1364 dcl P_condition_name char (*); 1365 dcl (P_action, P_retry_limit) fixed bin; 1366 dcl (p, last_p) ptr; 1367 1368 if first_handler_ptr = null then do; 1369 allocate handler_node in (area) set (p); 1370 first_handler_ptr = p; 1371 FILL_NEW_NODE: 1372 p -> handler_node.next_ptr = null; 1373 p -> handler_node.condition_name = P_condition_name; 1374 FILL_NODE: 1375 p -> handler_node.action = P_action; 1376 p -> handler_node.retry_limit = P_retry_limit; 1377 return; 1378 end; 1379 do p = first_handler_ptr repeat (p -> handler_node.next_ptr) while (p ^= null); 1380 if p -> handler_node.condition_name = P_condition_name then go to FILL_NODE; 1381 last_p = p; 1382 end; 1383 allocate handler_node in (area) set (p); 1384 last_p -> handler_node.next_ptr = p; 1385 go to FILL_NEW_NODE; 1386 1387 end SAVE_HANDLER; 1388 1389 SUB_ERROR_CODE: proc returns (fixed bin (35)); 1390 1391 call find_condition_info_ (null, addr (cond_info), code); 1392 if code ^= 0 then return (dm_error_$system_not_initialized); 1393 1394 if cond_info.info_ptr -> sub_error_info.default_restart then do; 1395 /* a warning */ 1396 call continue_to_signal_ (0); 1397 return (0); 1398 end; 1399 1400 else return (cond_info.info_ptr -> sub_error_info.retval); 1401 1402 end SUB_ERROR_CODE; 1403 1404 USAGE_STRING: proc (P_str) returns (char (128)); 1405 1406 dcl P_str char (*); 1407 dcl buffer char (128) varying; 1408 1409 buffer = "Usage: " || rtrim (my_name); 1410 if P_str ^= "" then buffer = buffer || " " || P_str; 1411 if af_sw 1412 then return ("[" || buffer || "]"); 1413 else return (buffer); 1414 1415 end USAGE_STRING; 1416 2 1 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 2 2 2 3 /* Structure for find_condition_info_. 2 4* 2 5* Written 1-Mar-79 by M. N. Davidoff. 2 6**/ 2 7 2 8 /* automatic */ 2 9 2 10 declare condition_info_ptr pointer; 2 11 2 12 /* based */ 2 13 2 14 declare 1 condition_info aligned based (condition_info_ptr), 2 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 2 16 2 version fixed binary, /* Must be 1 */ 2 17 2 condition_name char (32) varying, /* name of condition */ 2 18 2 info_ptr pointer, /* pointer to the condition data structure */ 2 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 2 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 2 21 2 flags unaligned, 2 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 2 23 3 pad1 bit (35), 2 24 2 pad2 bit (36), 2 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 2 26 2 pad3 (4) bit (36); 2 27 2 28 /* internal static */ 2 29 2 30 declare condition_info_version_1 2 31 fixed binary internal static options (constant) initial (1); 2 32 2 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 1417 1418 3 1 /* BEGIN INCLUDE FILE condition_info_header.incl.pl1 BIM 1981 */ 3 2 /* format: style2 */ 3 3 3 4 declare condition_info_header_ptr 3 5 pointer; 3 6 declare 1 condition_info_header 3 7 aligned based (condition_info_header_ptr), 3 8 2 length fixed bin, /* length in words of this structure */ 3 9 2 version fixed bin, /* version number of this structure */ 3 10 2 action_flags aligned, /* tell handler how to proceed */ 3 11 3 cant_restart bit (1) unaligned, /* caller doesn't ever want to be returned to */ 3 12 3 default_restart bit (1) unaligned, /* caller can be returned to with no further action */ 3 13 3 quiet_restart bit (1) unaligned, /* return, and print no message */ 3 14 3 support_signal bit (1) unaligned, /* treat this signal as if the signalling procedure had the support bit set */ 3 15 /* if the signalling procedure had the support bit set, do the same for its caller */ 3 16 3 pad bit (32) unaligned, 3 17 2 info_string char (256) varying, /* may contain printable message */ 3 18 2 status_code fixed bin (35); /* if^=0, code interpretable by com_err_ */ 3 19 3 20 /* END INCLUDE FILE condition_info_header.incl.pl1 */ 1419 1420 4 1 /* START OF: dm_tm_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 4 2 4 3 /* HISTORY: 4 4* 4 5*Designed by Matthew C. Pierret, 01/26/82. 4 6*Coded by Jeffrey D. Ives, 04/30/82. 4 7*Modified: 4 8*10/18/82 by Steve Herbst: Names changed. 4 9*01/19/83 by Steve Herbst: Added (LOWEST HIGHEST)_MODE. 4 10**/ 4 11 4 12 dcl (LOWEST_MODE init (1), 4 13 HIGHEST_MODE init (8)) fixed bin int static options (constant); 4 14 4 15 dcl TM_NORMAL_MODE fixed bin static options (constant) init (1); 4 16 dcl TM_STATISTICAL_MODE fixed bin static options (constant) init (2); 4 17 dcl TM_READ_ONLY_MODE fixed bin static options (constant) init (3); 4 18 dcl TM_NEVER_WRITE_MODE fixed bin static options (constant) init (4); 4 19 dcl TM_TEST_NORMAL_MODE fixed bin static options (constant) init (5); 4 20 dcl TM_TEST_STATISTICAL_MODE fixed bin static options (constant) init (6); 4 21 dcl TM_TEST_READ_ONLY_MODE fixed bin static options (constant) init (7); 4 22 dcl TM_TEST_NEVER_WRITE_MODE fixed bin static options (constant) init (8); 4 23 4 24 /* END OF: dm_tm_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 1421 1422 5 1 /* START OF: dm_tm_txn_info.incl.pl1 */ 5 2 5 3 /* HISTORY: 5 4* 5 5*Designed by Matt Pierret, 01/26/82. 5 6*Coded by Steve Herbst, 08/06/82. 5 7*Modified: 5 8*01/18/83 by Steve Herbst: Version 2, added new TDT info. 5 9*05/06/83 by Steve Herbst: Version 3, added journal_info. 5 10*05/27/83 by Steve Herbst: Version 4, added checkpoint_id & rollback_count. 5 11*05/10/84 by Steve Herbst: Version 5, added bj_oid. 5 12**/ 5 13 5 14 dcl 1 txn_info aligned based (txn_info_ptr), 5 15 2 version char (8), /* = "TXNINF05" */ 5 16 2 txn_id bit (36) aligned, /* unique id of transaction */ 5 17 2 txn_index fixed bin, /* index of TDT entry */ 5 18 2 mode fixed bin, /* mode in which transaction was begun */ 5 19 2 state fixed bin, /* current state of transaction */ 5 20 2 error_code fixed bin (35), /* nonzero if error_sw is ON */ 5 21 2 checkpoint_id fixed bin, /* number of current checkpoint (0 = begin) */ 5 22 2 rollback_count fixed bin, /* number of times bjm_$rollback has been called */ 5 23 2 owner_process_id bit (36), /* id of process that began and owns the txn */ 5 24 2 owner_name char (32), /* Person.Project of owner process */ 5 25 2 date_time_created fixed bin (71), 5 26 2 flags, 5 27 3 dead_process_sw bit (1) unaligned, 5 28 3 suspended_sw bit (1) unaligned, 5 29 3 error_sw bit (1) unaligned, 5 30 3 abandoned_sw bit (1) unaligned, 5 31 3 kill_sw bit (1) unaligned, 5 32 3 mbz bit (31) unaligned, 5 33 2 journal_info aligned, /* NEW in Version 3 */ 5 34 3 bj_uid bit (36), /* UID of before journal chosen at begin time */ 5 35 3 bj_oid bit (36), /* perprocess opening id of before journal */ 5 36 3 last_completed_operation 5 37 char (4), 5 38 3 first_bj_rec_id bit (36), /* id of first mark for this transaction */ 5 39 3 last_bj_rec_id bit (36), /* id of last mark for this transaction */ 5 40 3 n_rec_written fixed bin (35), /* number of marks written for this transaction */ 5 41 3 n_bytes_written fixed bin (35); /* total number of bytes written to the journal */ 5 42 5 43 5 44 dcl txn_info_ptr ptr; 5 45 5 46 dcl TXN_INFO_VERSION_5 char (8) int static options (constant) init ("TXNINF05"); 5 47 5 48 5 49 /* END OF: dm_tm_txn_info.incl.pl1 */ 1423 1424 6 1 /* BEGIN INCLUDE FILE query_info.incl.pl1 TAC June 1, 1973 */ 6 2 /* Renamed to query_info.incl.pl1 and cp_escape_control added, 08/10/78 WOS */ 6 3 /* version number changed to 4, 08/10/78 WOS */ 6 4 /* Version 5 adds explanation_(ptr len) 05/08/81 S. Herbst */ 6 5 /* Version 6 adds literal_sw, prompt_after_explanation switch 12/15/82 S. Herbst */ 6 6 6 7 dcl 1 query_info aligned, /* argument structure for command_query_ call */ 6 8 2 version fixed bin, /* version of this structure - must be set, see below */ 6 9 2 switches aligned, /* various bit switch values */ 6 10 3 yes_or_no_sw bit (1) unaligned init ("0"b), /* not a yes-or-no question, by default */ 6 11 3 suppress_name_sw bit (1) unaligned init ("0"b), /* do not suppress command name */ 6 12 3 cp_escape_control bit (2) unaligned init ("00"b), /* obey static default value */ 6 13 /* "01" -> invalid, "10" -> don't allow, "11" -> allow */ 6 14 3 suppress_spacing bit (1) unaligned init ("0"b), /* whether to print extra spacing */ 6 15 3 literal_sw bit (1) unaligned init ("0"b), /* ON => do not strip leading/trailing white space */ 6 16 3 prompt_after_explanation bit (1) unaligned init ("0"b), /* ON => repeat question after explanation */ 6 17 3 padding bit (29) unaligned init (""b), /* pads it out to t word */ 6 18 2 status_code fixed bin (35) init (0), /* query not prompted by any error, by default */ 6 19 2 query_code fixed bin (35) init (0), /* currently has no meaning */ 6 20 6 21 /* Limit of data defined for version 2 */ 6 22 6 23 2 question_iocbp ptr init (null ()), /* IO switch to write question */ 6 24 2 answer_iocbp ptr init (null ()), /* IO switch to read answer */ 6 25 2 repeat_time fixed bin (71) init (0), /* repeat question every N seconds if no answer */ 6 26 /* minimum of 30 seconds required for repeat */ 6 27 /* otherwise, no repeat will occur */ 6 28 /* Limit of data defined for version 4 */ 6 29 6 30 2 explanation_ptr ptr init (null ()), /* explanation of question to be printed if */ 6 31 2 explanation_len fixed bin (21) init (0); /* user answers "?" (disabled if ptr=null or len=0) */ 6 32 6 33 dcl query_info_version_3 fixed bin int static options (constant) init (3); 6 34 dcl query_info_version_4 fixed bin int static options (constant) init (4); 6 35 dcl query_info_version_5 fixed bin int static options (constant) init (5); 6 36 dcl query_info_version_6 fixed bin int static options (constant) init (6); /* the current version number */ 6 37 6 38 /* END INCLUDE FILE query_info.incl.pl1 */ 1425 1426 7 1 /* BEGIN INCLUDE FILE sub_error_info.incl.pl1 */ 7 2 /* format: style2 */ 7 3 7 4 /* The include file condition_info_header must be used with this file */ 7 5 7 6 declare sub_error_info_ptr pointer; 7 7 declare 1 sub_error_info aligned based (sub_error_info_ptr), 7 8 2 header aligned like condition_info_header, 7 9 2 retval fixed bin (35), /* return value */ 7 10 2 name char (32), /* module name */ 7 11 2 info_ptr ptr; 7 12 7 13 declare sub_error_info_version_1 7 14 internal static options (constant) fixed bin init (1); 7 15 7 16 /* END INCLUDE FILE sub_error_info.incl.pl1 */ 1427 1428 1429 1430 end transaction; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/10/86 0849.7 transaction.pl1 >spec>install>1207>transaction.pl1 993 1 01/07/85 0900.2 packed_pointer.incl.pl1 >ldd>include>packed_pointer.incl.pl1 1417 2 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 1419 3 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>include>condition_info_header.incl.pl1 1421 4 01/07/85 0900.0 dm_tm_modes.incl.pl1 >ldd>include>dm_tm_modes.incl.pl1 1423 5 01/07/85 0900.2 dm_tm_txn_info.incl.pl1 >ldd>include>dm_tm_txn_info.incl.pl1 1425 6 03/11/83 1204.3 query_info.incl.pl1 >ldd>include>query_info.incl.pl1 1427 7 07/18/81 1100.0 sub_error_info.incl.pl1 >ldd>include>sub_error_info.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. ABANDON_ACTION constant fixed bin(17,0) initial dcl 93 set ref 481* 1061 ABORT_ACTION constant fixed bin(17,0) initial dcl 93 set ref 467* 489* 1071 ABORT_OR_ABANDON_SEVERITY constant fixed bin(35,0) initial dcl 101 ref 629 1064 1074 1176 1198 COMMA constant char(1) initial unaligned dcl 1209 ref 1221 1225 ENTRY_ITEM constant fixed bin(17,0) initial dcl 109 set ref 1263* 1269* 1271* 1333 EXISTING_TXN_ALLOWED constant fixed bin(17,0) initial dcl 88 ref 498 578 EXISTING_TXN_NOT_ALLOWED constant fixed bin(17,0) initial dcl 88 ref 454 512 577 583 EXISTING_TXN_REQUIRED constant fixed bin(17,0) initial dcl 88 ref 501 587 FAILED_ABORT_OR_ABANDON_SEVERITY constant fixed bin(35,0) initial dcl 101 ref 630 1063 1073 FATAL_SEVERITY constant fixed bin(35,0) initial dcl 101 ref 457 646 658 INITIAL_CHECKPOINT 000240 constant fixed bin(17,0) initial dcl 113 set ref 713* KEY_NAMES 000021 constant char(32) initial array unaligned dcl 86 ref 277 277 284 LONG_TIME_USEC 000012 constant fixed bin(71,0) initial dcl 116 ref 348 380 455 563 NO_ACTION constant fixed bin(17,0) initial dcl 93 set ref 505* 1081 NO_ERROR_SEVERITY constant fixed bin(35,0) initial dcl 101 ref 641 PRINT_ALL_INFO 015040 constant bit(36) initial unaligned dcl 114 ref 857 P_action parameter fixed bin(17,0) dcl 1207 in procedure "GET_CONDITION_LIST" set ref 1204 1235* P_action parameter fixed bin(17,0) dcl 1365 in procedure "SAVE_HANDLER" ref 1362 1374 P_code parameter fixed bin(35,0) dcl 985 set ref 983 995* 997 P_condition_name parameter char unaligned dcl 1364 ref 1362 1373 1380 P_index parameter fixed bin(17,0) dcl 1207 set ref 1204 1211* 1211 1212 1216* P_item_type parameter fixed bin(17,0) dcl 1330 ref 1327 1333 1336 P_name parameter char unaligned dcl 1206 in procedure "GET_CONDITION_LIST" set ref 1204 1213* P_name parameter char unaligned dcl 1329 in procedure "PRINT_ITEM" set ref 1327 1338* P_process_id parameter bit(36) dcl 1131 set ref 1129 1134 1136* P_ptr parameter pointer dcl 1054 ref 1052 1060 1066 1076 P_retry_count parameter fixed bin(17,0) dcl 1011 in procedure "CONDITION_HANDLER" set ref 1008 1033* 1042* P_retry_count parameter fixed bin(17,0) dcl 1056 in procedure "do_action" set ref 1052 1083* 1083 1084 P_retry_label parameter label variable dcl 1012 in procedure "CONDITION_HANDLER" set ref 1008 1033* 1042* P_retry_label parameter label variable dcl 1058 in procedure "do_action" ref 1052 1084 P_retry_limit parameter fixed bin(17,0) dcl 1207 in procedure "GET_CONDITION_LIST" set ref 1204 1235* P_retry_limit parameter fixed bin(17,0) dcl 1365 in procedure "SAVE_HANDLER" ref 1362 1376 P_severity parameter fixed bin(17,0) dcl 968 ref 966 970 P_str parameter char unaligned dcl 1406 in procedure "USAGE_STRING" ref 1404 1410 1410 P_str parameter char unaligned dcl 1318 in procedure "append" ref 1316 1321 P_succeeded_sw parameter bit(1) unaligned dcl 950 set ref 947 957* 961* P_sw parameter bit(1) unaligned dcl 1345 set ref 1343 1347* 1356* P_txn_id parameter bit(36) dcl 949 in procedure "ABORT_OR_ABANDON" set ref 947 953* 955* P_txn_id parameter bit(36) dcl 1010 in procedure "CONDITION_HANDLER" set ref 1008 1033* 1042* P_txn_id parameter bit(36) dcl 1055 in procedure "do_action" set ref 1052 1062* 1072* P_value parameter char unaligned dcl 1329 ref 1327 1333 1338 1338 1339 1339 RELATIVE_TIME_OPTION 000020 constant bit(2) initial unaligned dcl 115 set ref 420* 654* RETRY_ACTION constant fixed bin(17,0) initial dcl 93 set ref 529* 1082 RETRY_SEVERITY constant fixed bin(35,0) initial dcl 101 ref 637 SUSPEND_ACTION constant fixed bin(17,0) initial dcl 93 set ref 468* 537* 1087 TEN_SECONDS 000016 constant fixed bin(71,0) initial dcl 116 set ref 374 420* 557 654* TM_NORMAL_MODE 000252 constant fixed bin(17,0) initial dcl 4-15 set ref 401* 614* TXN_INFO_VERSION_5 000010 constant char(8) initial unaligned dcl 5-46 ref 874 934 TXN_ITEM constant fixed bin(17,0) initial dcl 109 set ref 1264* 1276* 1280* 1282* 1284* 1285* 1297* 1309* 1336 USEC_PER_SECOND 000014 constant fixed bin(71,0) initial dcl 116 ref 374 557 abandoned 000101 automatic bit(1) level 2 packed unaligned dcl 146 set ref 754* 927 1253 abandoned_count 000273 automatic fixed bin(17,0) dcl 166 set ref 890* 894* 894 902* abandoned_sw 24(03) based bit(1) array level 3 in structure "tm_info" packed unaligned dcl 130 in procedure "txn" set ref 894 abandoned_sw 24(03) based bit(1) level 3 in structure "txn_info" packed unaligned dcl 5-14 in procedure "txn" set ref 1253 1304 action 12 based fixed bin(17,0) level 2 in structure "handler_node" dcl 124 in procedure "txn" set ref 1060 1374* action 000120 automatic fixed bin(17,0) dcl 1056 in procedure "do_action" set ref 1060* 1061 1071 1081 1082 1087 action_flags 2 based structure level 3 dcl 7-7 active_fnc_err_ 000026 constant entry external dcl 185 ref 240 active_fnc_err_$suppress_name 000030 constant entry external dcl 185 ref 241 addr builtin function dcl 231 ref 266 998 999 1025 1025 1175 1175 1190 1190 1197 1197 1391 1391 addrel builtin function dcl 231 ref 1197 1197 af_sw 000214 automatic bit(1) unaligned dcl 155 set ref 239* 244* 310 315 335 340 409 413 424 444 447 631 638 642 647 659 692 696 716 720 744 752 755 758 761 828 851 866 911 927 1065 1075 1113 1120 1249 1267 1288 1314 1332 1349 1411 all 0(01) 000101 automatic bit(1) level 2 packed unaligned dcl 146 set ref 757* 760* 841 861 913 alp 000234 automatic pointer dcl 161 set ref 471* 1156* 1165* 1216* answer_iocbp 6 001460 automatic pointer initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* 1187* answer_iocbp 6 000344 automatic pointer initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* any_other 000000 stack reference condition dcl 235 ref 1171 1193 area based area(1024) dcl 134 ref 733 872 873 933 977 978 979 1369 1383 area_ptr 000236 automatic pointer dcl 161 set ref 464* 726* 733 872 873 933 977 978 979 1369 1383 arg based char unaligned dcl 136 set ref 265 265 268 280* 354 359 359 361 361 368* 370* 378 378 384* 478 480 488 496 496 498 498 501 501 504 512 512 515 515 517 524* 526* 536 544 544 551* 553* 561 561 567* 674 675* 677* 743 752 755 755 758 761 761 765 765 765 769 772* 774* 779* 789 789 789 793 797* 799* 811 811 812 812 812 814 814 815 816 816 817 817 818 819 819 819 822* 1166 1221 1225 1227 1231 arg_count 000254 automatic fixed bin(17,0) dcl 163 set ref 237* 253 296 321 350 363 430 474 520 546 665 672 702 732 739 766 790 1154 1164 1212 arg_index 000255 automatic fixed bin(17,0) dcl 163 in procedure "txn" set ref 350* 352* 362* 362 363 367* 474* 476* 478 481* 489* 505* 518* 518 519* 520 529* 537* 545* 545 546 550* 739* 741* 766 768 771* 771 790 792 796* 796* arg_index 000517 automatic fixed bin(17,0) dcl 1150 in procedure "EXECUTE_COMMAND_LINE" set ref 1154* 1156* 1164* 1165* arg_len 000300 automatic fixed bin(21,0) dcl 167 set ref 259* 265 265 268 274 280 280 352* 354 359 359 361 361 367* 368 368 370 370 378 378 384 384 476* 478 480 488 496 496 498 498 501 501 504 512 512 515 515 517 519* 524 524 526 526 536 544 544 550* 551 551 553 553 561 561 567 567 673* 674 675 675 677 677 741* 743 752 755 755 758 761 761 765 765 765 768* 769 772 772 774 774 779 779 789 789 789 792* 793 797 797 799 799 811 811 812 812 812 814 814 815 816 816 817 817 818 819 819 819 822 822 1156* 1157 1165* 1166 1166 1167 1216* 1219 1221 1225 1227 1228 1231 arg_ptr 000240 automatic pointer dcl 161 set ref 259* 265 265 268 273 280 352* 354 359 359 361 361 367* 368 370 378 378 384 476* 478 480 488 496 496 498 498 501 501 504 512 512 515 515 517 519* 524 526 536 544 544 550* 551 553 561 561 567 673* 674 675 677 741* 743 752 755 755 758 761 761 765 765 765 768* 769 772 774 779 789 789 789 792* 793 797 799 811 811 812 812 812 814 814 815 816 816 817 817 818 819 819 819 822 1156* 1165* 1166 1216* 1221 1225 1227 1231 before_journal_manager_$get_bj_path_from_oid 000032 constant entry external dcl 189 ref 1292 before_journal_manager_$get_bj_path_from_uid 000034 constant entry external dcl 190 ref 1294 begun_time_str 000164 automatic char(32) unaligned dcl 153 set ref 406* 407* 619* 620* better_code 000462 automatic fixed bin(35,0) dcl 989 set ref 1000* 1001* better_message 000431 automatic char(100) unaligned dcl 988 set ref 1001* 1002 1002 bj_oid 26 based bit(36) level 3 dcl 5-14 set ref 1292* bj_opening_id 000231 automatic bit(36) unaligned dcl 158 set ref 394* 401* 606* 614* bj_path 000100 automatic bit(1) level 2 packed unaligned dcl 142 set ref 811* 1287 bj_uid 25 based bit(36) level 3 dcl 5-14 set ref 1288 1294* 1295* buffer 001000 automatic varying char(128) dcl 1407 in procedure "USAGE_STRING" set ref 1409* 1410* 1410 1411 1413 buffer 000550 automatic char(168) unaligned dcl 1244 in procedure "PRINT_ENTRY" set ref 1267* 1267 1267 1269* 1301* 1303* 1304* 1309* 1320 1320* 1320 1321* 1321 character builtin function dcl 231 ref 1263 1263 1264 1264 1285 1285 cl_sw 000215 automatic bit(1) unaligned dcl 155 set ref 452* 496* 572 cleanup 000320 stack reference condition dcl 235 ref 601 730 clock builtin function dcl 231 ref 396 399 406 406 608 611 619 619 code 000476 automatic fixed bin(35,0) dcl 1100 in procedure "CURRENT_ID" set ref 1103* 1105 1106 1110* 1111* 1112 1114* 1121* code 000506 automatic fixed bin(35,0) dcl 1132 in procedure "DEAD_PROCESS" set ref 1136* 1137 code 000121 automatic fixed bin(35,0) dcl 1057 in procedure "do_action" set ref 1062* 1063 1072* 1073 code 000100 automatic fixed bin(35,0) dcl 951 in procedure "ABORT_OR_ABANDON" set ref 953* 954 955* 956 code 000303 automatic fixed bin(35,0) dcl 168 in procedure "txn" set ref 237* 238 243 249* 259* 260 261* 303* 304 307* 308 312* 328* 329 332* 333 337* 352* 367* 368* 369 370* 390* 391 401* 402 412 414* 437* 438 441* 442 445* 461* 462 476* 519* 524* 525 526* 550* 551* 552 553* 595* 596 613* 614* 615 626* 627 632* 645 648* 673* 675* 676 677* 685* 686 689* 690 693* 709* 710 713* 714 717* 741* 768* 772* 773 774* 778* 779 779* 792* 797* 798 799* 834* 835 836* 844* 845 846* 877* 878 879* 937* 938 939* 1025* 1026 1175* 1176 1197* 1198 1216* 1292* 1294* 1295 1295* 1391* 1392 com_err_ 000036 constant entry external dcl 191 ref 245 249 com_err_$suppress_name 000040 constant entry external dcl 191 ref 246 comma_pos 000530 automatic fixed bin(17,0) dcl 1207 set ref 1221* 1222 1224 1225* 1226 1231 1232 command_line_start 000256 automatic fixed bin(17,0) dcl 163 set ref 473* 474 478* 572 1152 1154 1164 command_query_ 000042 constant entry external dcl 195 ref 1190 complain 000310 automatic entry variable dcl 171 set ref 240* 245* 261 280 287 312 337 364 370 384 414 425 445 521 526 547 553 567 573 578 584 588 632 638 648 660 677 693 717 774 779 799 822 829 836 846 866 879 927 939 1066 1076 1114 1121 1213 1295 1350 complain_suppress_name 000314 automatic entry variable dcl 171 set ref 241* 246* 255 298 323 355 432 667 704 746 853 cond_info 000102 automatic structure level 1 dcl 150 set ref 1025 1025 1391 1391 condition_info based structure level 1 dcl 2-14 condition_info_header based structure level 1 dcl 3-6 condition_name 2 based char(32) level 2 in structure "handler_node" dcl 124 in procedure "txn" set ref 1032 1041 1066* 1076* 1373* 1380 condition_name 000102 automatic char(32) unaligned dcl 1014 in procedure "CONDITION_HANDLER" set ref 1026* 1027* 1032 condition_name 000532 automatic char(32) unaligned dcl 1208 in procedure "GET_CONDITION_LIST" set ref 1227* 1231* 1235* condition_name 3 000102 automatic varying char(32) level 2 in structure "cond_info" dcl 150 in procedure "txn" set ref 1027 continue_to_signal_ 000044 constant entry external dcl 196 ref 598 1017 1396 convert_status_code_ 000046 constant entry external dcl 197 ref 995 1001 cp_escape_control 1(02) 000344 automatic bit(2) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* cp_escape_control 1(02) 001460 automatic bit(2) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* ctl_args_str 000174 automatic char(32) unaligned dcl 153 set ref 744* 745* 746* 746* cu_$af_return_arg 000050 constant entry external dcl 198 ref 237 cu_$arg_list_ptr 000052 constant entry external dcl 199 ref 471 cu_$arg_ptr 000054 constant entry external dcl 200 ref 259 352 367 476 519 550 673 741 768 792 cu_$arg_ptr_rel 000056 constant entry external dcl 201 ref 1156 1165 1216 cu_$cp 000060 constant entry external dcl 202 ref 1175 1197 cv_dec_check_ 000062 constant entry external dcl 203 ref 368 524 551 675 772 797 date_time_ 000064 constant entry external dcl 204 ref 405 406 618 619 1275 date_time_created 22 based fixed bin(71,0) level 2 dcl 5-14 set ref 1273 1275* dead 0(02) 000101 automatic bit(1) level 2 packed unaligned dcl 146 set ref 760* 927 1254 1256 dead_count 000274 automatic fixed bin(17,0) dcl 166 set ref 890* 893* 893 901* dead_process_sw 24 based bit(1) level 3 packed unaligned dcl 5-14 set ref 1307 default_restart 2(01) based bit(1) level 4 packed unaligned dcl 7-7 ref 1394 dm_error_$ 000140 external static bit(36) dcl 987 set ref 999 dm_error_$system_not_initialized 000010 external static fixed bin(35,0) dcl 175 set ref 287* 412 596 645 1392 dm_error_$transaction_suspended 000012 external static fixed bin(35,0) dcl 176 ref 1106 dm_not_available_ 000326 stack reference condition dcl 235 ref 286 dn 000622 automatic char(168) unaligned dcl 1244 set ref 1292* 1294* 1297* 1297* dtm 0(01) 000100 automatic bit(1) level 2 packed unaligned dcl 142 set ref 812* 1272 en 000715 automatic char(32) unaligned dcl 1246 set ref 1292* 1294* 1297* 1297* error_code 6 based fixed bin(35,0) level 2 dcl 5-14 set ref 1284* 1284* error_count 000275 automatic fixed bin(17,0) dcl 166 set ref 890* 896* 896 904* error_sw 24(02) based bit(1) level 3 in structure "txn_info" packed unaligned dcl 5-14 in procedure "txn" set ref 1282 error_sw 24(02) based bit(1) array level 3 in structure "tm_info" packed unaligned dcl 130 in procedure "txn" set ref 896 error_table_$badopt 000014 external static fixed bin(35,0) dcl 177 set ref 384* 567* 822* error_table_$noarg 000016 external static fixed bin(35,0) dcl 178 set ref 255* 853* error_table_$not_act_fnc 000020 external static fixed bin(35,0) dcl 179 ref 243 error_table_$too_many_args 000022 external static fixed bin(35,0) dcl 180 set ref 298* 323* 355* 432* 667* 704* 746* errors 0(02) 000100 automatic bit(1) level 2 packed unaligned dcl 142 set ref 814* 1282 existing_txn_policy 000257 automatic fixed bin(17,0) dcl 163 set ref 454* 498* 501* 512* 577 578 583 587 explanation_len 14 001460 automatic fixed bin(21,0) initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* explanation_len 14 000344 automatic fixed bin(21,0) initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* explanation_ptr 12 000344 automatic pointer initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* explanation_ptr 12 001460 automatic pointer initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* 1187* find_condition_info_ 000066 constant entry external dcl 205 ref 1025 1391 first_handler_ptr 000242 automatic pointer dcl 161 set ref 465* 1023 1031 1040 1368 1370* 1379 fixed builtin function dcl 231 ref 846 846 1264 1264 fixed_txn_id 000260 automatic fixed bin(17,0) dcl 164 set ref 675* 680 772* 777 flags 24 based structure array level 2 in structure "tm_info" dcl 130 in procedure "txn" flags 24 based structure level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1301 get_process_id_ 000070 constant entry external dcl 206 ref 1292 get_system_free_area_ 000072 constant entry external dcl 207 ref 464 726 had_to_wait_sw 000216 automatic bit(1) unaligned dcl 155 set ref 397* 399 404 421* 609* 611 617 655* handler_invoked_sw 000217 automatic bit(1) unaligned dcl 155 set ref 1016 1018* 1021* 1047* 1089* 1170* 1192* handler_node based structure level 1 dcl 124 set ref 1369 1383 hbound builtin function dcl 231 ref 277 hcs_$validate_processid 000074 constant entry external dcl 208 ref 1136 header based structure level 2 dcl 7-7 index builtin function dcl 231 ref 354 478 674 743 769 793 1225 info_ptr 14 000102 automatic pointer level 2 dcl 150 set ref 1394 1400 ioa_ 000076 constant entry external dcl 209 ref 407 620 868 899 900 901 902 903 904 905 1290 1312 1314 1338 1339 ioa_$rsnnl 000100 constant entry external dcl 209 ref 1267 journal_info 25 based structure level 2 dcl 5-14 key based char unaligned dcl 137 set ref 268* 270* 277 key_buffer 000134 automatic char(32) unaligned dcl 152 set ref 266 267 key_index 000261 automatic fixed bin(17,0) dcl 164 set ref 277* 277* 279 284 291 key_len 000301 automatic fixed bin(21,0) dcl 167 set ref 267* 268 270 274* 277 key_ptr 000244 automatic pointer dcl 161 set ref 266* 268 270 273* 277 kill_sw 24(04) based bit(1) level 3 packed unaligned dcl 5-14 set ref 1305 last_p 000770 automatic pointer dcl 1366 set ref 1381* 1384 length builtin function dcl 231 ref 267 1197 1197 1267 1267 line 000100 automatic char unaligned dcl 1160 set ref 1162* 1166* 1175 1175 line_len 000516 automatic fixed bin(21,0) dcl 1149 set ref 1153* 1157* 1157 1160 1163* 1166 1167* 1167 1175* list_pos 000531 automatic fixed bin(17,0) dcl 1207 set ref 1218* 1219 1221 1224* 1224 1225 1227 1228* 1231 1232* 1232 literal_sw 1(05) 000344 automatic bit(1) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* literal_sw 1(05) 001460 automatic bit(1) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* ltrim builtin function dcl 231 ref 1333 1338 1338 1339 1339 message 000400 automatic char(100) unaligned dcl 986 set ref 995* 996 1002* 1004 multiple_info_sw 000220 automatic bit(1) unaligned dcl 155 set ref 737* 858* 1314 1338 1353* my_name 000144 automatic char(32) unaligned dcl 152 set ref 254* 284* 287* 298* 312* 323* 337* 355* 364* 370* 384* 414* 425* 432* 445* 521* 526* 547* 553* 567* 573* 578* 584* 588* 632* 638* 648* 660* 667* 677* 693* 704* 717* 746* 774* 779* 799* 822* 829* 836* 846* 853* 866* 879* 927* 939* 1066* 1076* 1106 1108 1108 1114* 1121* 1213* 1295* 1350* 1409 next_ptr based pointer level 2 dcl 124 set ref 1036 1045 1371* 1382 1384* null builtin function dcl 231 ref 465 728 6-7 6-7 6-7 977 978 979 1023 1025 1025 1031 1040 1183 1183 1183 1187 1368 1371 1379 1391 1391 on_action_name 000154 automatic char(32) unaligned dcl 152 set ref 484* 492* 508* 532* 540* 578* on_action_specified_sw 000221 automatic bit(1) unaligned dcl 155 set ref 452* 482 483* 490 491* 506 507* 530 531* 538 539* 577 owner 0(03) 000100 automatic bit(1) level 2 packed unaligned dcl 142 set ref 815* 1271 owner_name 12 based char(32) level 2 dcl 5-14 set ref 1271 owner_process_id 11 based bit(36) array level 2 in structure "tm_info" dcl 130 in procedure "txn" set ref 892 893* 916 owner_process_id 11 based bit(36) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1248 1254* 1256* 1267* 1267* 1292 p 000766 automatic pointer dcl 1366 in procedure "SAVE_HANDLER" set ref 1369* 1370 1371 1373 1374 1376 1379* 1379* 1380 1381* 1382 1383* 1384 p 000100 automatic pointer dcl 1013 in procedure "CONDITION_HANDLER" set ref 1031* 1031* 1032 1033* 1036 1040* 1040* 1041 1042* 1045 1084 packed_pointer based structure level 1 dcl 1-4 packed_pointer_ptr 000464 automatic pointer dcl 1-3 set ref 998* 999 padding 1(07) 001460 automatic bit(29) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* padding 1(07) 000344 automatic bit(29) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* pathname_ 000102 constant entry external dcl 213 ref 1297 1297 pid 0(04) 000100 automatic bit(1) level 2 packed unaligned dcl 142 set ref 816* 1249 1266 pp_as_word 000463 automatic bit(36) dcl 990 set ref 997* 998 1000 print_no_txn_warning_sw 000222 automatic bit(1) unaligned dcl 156 set ref 1261* 1312 1336* print_switches 000100 automatic structure level 1 dcl 142 set ref 736* 851 857* 1348 printed_something_sw 000223 automatic bit(1) unaligned dcl 156 set ref 910* 927 1258* prompt_after_explanation 1(06) 000344 automatic bit(1) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* prompt_after_explanation 1(06) 001460 automatic bit(1) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* qi 001460 automatic structure level 1 dcl 1183 set ref 1185* 1190 1190 query_code 3 000344 automatic fixed bin(35,0) initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* query_code 3 001460 automatic fixed bin(35,0) initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* query_info 000344 automatic structure level 1 dcl 6-7 query_info_version_5 constant fixed bin(17,0) initial dcl 6-35 ref 1186 question_iocbp 4 001460 automatic pointer initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* 1187* question_iocbp 4 000344 automatic pointer initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* repeat_time 10 000344 automatic fixed bin(71,0) initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* repeat_time 10 001460 automatic fixed bin(71,0) initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* requested_time_str 000204 automatic char(32) unaligned dcl 153 set ref 405* 407* 618* 620* retry_count 000265 automatic fixed bin(17,0) dcl 165 set ref 456* 636 638* 1172* 1194* retry_limit 000266 automatic fixed bin(17,0) dcl 165 in procedure "txn" set ref 524* 529* retry_limit 13 based fixed bin(17,0) level 2 in structure "handler_node" dcl 124 in procedure "txn" set ref 1084 1376* return_arg based varying char dcl 138 set ref 310* 315* 335* 340* 409* 413* 424* 444* 447* 631* 642* 647* 659* 692* 696* 716* 720* 911* 1065* 1075* 1113* 1120* 1249* 1288* 1333* return_len 000302 automatic fixed bin(21,0) dcl 167 set ref 237* 310 315 335 340 409 413 424 444 447 631 642 647 659 692 696 716 720 911 1065 1075 1113 1120 1249 1288 1333 return_ptr 000246 automatic pointer dcl 161 set ref 237* 310 315 335 340 409 413 424 444 447 631 642 647 659 692 696 716 720 911 1065 1075 1113 1120 1249 1288 1333 retval 105 based fixed bin(35,0) level 2 dcl 7-7 ref 1400 rollback_count 0(05) 000100 automatic bit(1) level 2 in structure "print_switches" packed unaligned dcl 142 in procedure "txn" set ref 817* 1285 rollback_count 10 based fixed bin(17,0) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1285 1285 rtrim builtin function dcl 231 ref 284 1320 1321 1333 1338 1338 1339 1339 1409 segno 0(06) based fixed bin(12,0) level 2 in structure "packed_pointer" packed unsigned unaligned dcl 1-4 in procedure "CODE_DESCRIPTION" set ref 999* segno builtin function dcl 991 in procedure "CODE_DESCRIPTION" ref 999 select_switches 000101 automatic structure level 1 dcl 146 set ref 736* start_usec 000304 automatic fixed bin(71,0) dcl 169 set ref 396* 399 405* 608* 611 618* state 5 based fixed bin(17,0) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1279* state 0(06) 000100 automatic bit(1) level 2 in structure "print_switches" packed unaligned dcl 142 in procedure "txn" set ref 818* 1278 state_description_buffer 000674 automatic char(68) unaligned dcl 1245 set ref 1279* 1280* status_code 2 000344 automatic fixed bin(35,0) initial level 2 in structure "query_info" dcl 6-7 in procedure "txn" set ref 6-7* status_code 2 001460 automatic fixed bin(35,0) initial level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1183* sub_error_ 000334 stack reference condition dcl 235 ref 302 327 389 436 594 684 708 833 sub_error_info based structure level 1 dcl 7-7 substr builtin function dcl 231 set ref 996 1002 1166* 1221 1225 1227 1231 succeeded_sw 000224 automatic bit(1) unaligned dcl 156 set ref 603* 628* 629 suppress_name_sw 1(01) 000344 automatic bit(1) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* suppress_name_sw 1(01) 001460 automatic bit(1) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* 1188* suppress_spacing 1(04) 000344 automatic bit(1) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* suppress_spacing 1(04) 001460 automatic bit(1) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* suspended_sw 24(01) based bit(1) level 3 packed unaligned dcl 5-14 set ref 1306 switches 1 001460 automatic structure level 2 in structure "qi" dcl 1183 in begin block on line 1181 switches 0(07) 000100 automatic bit(1) level 2 in structure "print_switches" packed unaligned dcl 142 in procedure "txn" set ref 819* 1300 switches 1 000344 automatic structure level 2 in structure "query_info" dcl 6-7 in procedure "txn" tdt_index 000263 automatic fixed bin(17,0) dcl 164 set ref 876* 877* 879* 883* 891* 892 893 894 895 896* 913* 916 917* tdt_max_count 000267 automatic fixed bin(17,0) dcl 165 set ref 864* 865 872 876 891 899* 913 978 tid 0(08) 000100 automatic bit(1) level 2 in structure "print_switches" packed unaligned dcl 142 in procedure "txn" set ref 766* 769* 1264 tid 0(03) 000101 automatic bit(1) level 2 in structure "select_switches" packed unaligned dcl 146 in procedure "txn" set ref 781* 927 time_string 000725 automatic char(32) unaligned dcl 1246 set ref 1273* 1275* 1276* timer_manager_$sleep 000104 constant entry external dcl 214 ref 420 654 tix based fixed bin(17,0) array dcl 132 in procedure "txn" set ref 733 783* 804* 844* 923 937* 939* 977 tix 0(09) 000100 automatic bit(1) level 2 in structure "print_switches" packed unaligned dcl 142 in procedure "txn" set ref 790* 793* 1263 tix 0(04) 000101 automatic bit(1) level 2 in structure "select_switches" packed unaligned dcl 146 in procedure "txn" set ref 802* 927 tix_bound 000270 automatic fixed bin(17,0) dcl 165 set ref 732* 733 977 tix_count 000271 automatic fixed bin(17,0) dcl 165 set ref 734* 782* 782 783 803* 803 804 828 841 842* 842 844 922 936 tix_index 000262 automatic fixed bin(17,0) dcl 164 set ref 922* 923* 936* 937 939* tix_ptr 000250 automatic pointer dcl 161 set ref 728* 733* 783 804 844 923 937 939 977 977 tm_info based structure array level 1 dcl 130 set ref 872 883* 917 923 978 tm_info_ptr 000252 automatic pointer dcl 161 set ref 728* 872* 883 892 893 894 895 896 916 917 923 978 978 total_sw 000225 automatic bit(1) unaligned dcl 156 set ref 737* 757* 763* 841 861 888 transaction_manager_$abandon_txn 000106 constant entry external dcl 215 ref 307 955 1062 transaction_manager_$abort_txn 000110 constant entry external dcl 216 ref 332 953 1072 transaction_manager_$begin_txn 000112 constant entry external dcl 217 ref 401 614 transaction_manager_$commit_txn 000114 constant entry external dcl 218 ref 441 626 transaction_manager_$get_current_txn_id 000116 constant entry external dcl 219 ref 461 1103 transaction_manager_$get_state_description 000120 constant entry external dcl 220 ref 1279 transaction_manager_$get_tdt_size 000122 constant entry external dcl 221 ref 864 transaction_manager_$get_txn_index 000124 constant entry external dcl 222 ref 778 844 transaction_manager_$get_txn_info_index 000126 constant entry external dcl 223 ref 877 937 transaction_manager_$handle_conditions 000130 constant entry external dcl 224 ref 1088 transaction_manager_$kill_txn 000132 constant entry external dcl 225 ref 689 transaction_manager_$resume_txn 000134 constant entry external dcl 226 ref 1111 transaction_manager_$rollback_txn 000136 constant entry external dcl 227 ref 713 transaction_severity_ 000024 external static fixed bin(17,0) dcl 181 set ref 457* 629* 630* 631* 637* 641* 642* 646* 647* 658* 659* 1063* 1064* 1065* 1073* 1074* 1075* 1176* 1198* tried_resume_sw 000475 automatic bit(1) unaligned dcl 1099 set ref 1102* 1106 1109* txn_count 000276 automatic fixed bin(17,0) dcl 166 set ref 890* 895* 895 903* txn_existed_sw 000227 automatic bit(1) unaligned dcl 157 set ref 462* 466 583 587 601 613 625 txn_exists_sw 000226 automatic bit(1) unaligned dcl 157 set ref 1260* 1333 1336 txn_id 2 based bit(36) array level 2 in structure "tm_info" dcl 130 in procedure "txn" set ref 895 txn_id 000232 automatic bit(36) dcl 159 in procedure "txn" set ref 401* 461* 584* 603* 614* 626* 628* 680* 682* 689* 777* 778* 843* 844* 846 846 1172* 1194* txn_id 2 based bit(36) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1260 1264 1264 txn_id 000474 automatic bit(36) dcl 1098 in procedure "CURRENT_ID" set ref 1103* 1106 1119 1125 txn_index 3 based fixed bin(17,0) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 1263 1263 txn_index 000264 automatic fixed bin(17,0) dcl 164 in procedure "txn" set ref 778* 783 797* 804 txn_info based structure level 1 dcl 5-14 set ref 873 883 917* 923* 933 979 txn_info_ptr 000342 automatic pointer dcl 5-44 set ref 728* 873* 874 877* 883 917 923 933* 934 937* 979 979 1248 1253 1254 1256 1260 1263 1263 1264 1264 1267 1267 1271 1273 1275 1279 1282 1284 1284 1285 1285 1288 1292 1292 1294 1295 1301 1304 1305 1306 1307 unspec builtin function dcl 231 set ref 680* 680 736* 736* 777* 777 851 857* 857 997 1000* 1185* 1301 1348 used_count 000277 automatic fixed bin(17,0) dcl 166 set ref 890* 892* 892 900* var_line 000100 automatic varying char(3000) dcl 1182 set ref 1190* 1197 1197 1197 1197 verify builtin function dcl 231 ref 1221 version based char(8) level 2 in structure "txn_info" dcl 5-14 in procedure "txn" set ref 874* 934* version 001460 automatic fixed bin(17,0) level 2 in structure "qi" dcl 1183 in begin block on line 1181 set ref 1186* wait_seconds 000272 automatic fixed bin(17,0) dcl 165 set ref 368* 374 425* 551* 557 660* wait_sw 000230 automatic bit(1) unaligned dcl 157 set ref 346* 359* 373* 379* 412 452* 515* 556* 562* 645 wait_usec 000306 automatic fixed bin(71,0) dcl 169 set ref 348* 374* 380* 399 455* 557* 563* 611 yes_or_no_sw 1 001460 automatic bit(1) initial level 3 in structure "qi" packed unaligned dcl 1183 in begin block on line 1181 set ref 1183* yes_or_no_sw 1 000344 automatic bit(1) initial level 3 in structure "query_info" packed unaligned dcl 6-7 in procedure "txn" set ref 6-7* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. HIGHEST_MODE internal static fixed bin(17,0) initial dcl 4-12 LOWEST_MODE internal static fixed bin(17,0) initial dcl 4-12 TM_NEVER_WRITE_MODE internal static fixed bin(17,0) initial dcl 4-18 TM_READ_ONLY_MODE internal static fixed bin(17,0) initial dcl 4-17 TM_STATISTICAL_MODE internal static fixed bin(17,0) initial dcl 4-16 TM_TEST_NEVER_WRITE_MODE internal static fixed bin(17,0) initial dcl 4-22 TM_TEST_NORMAL_MODE internal static fixed bin(17,0) initial dcl 4-19 TM_TEST_READ_ONLY_MODE internal static fixed bin(17,0) initial dcl 4-21 TM_TEST_STATISTICAL_MODE internal static fixed bin(17,0) initial dcl 4-20 condition_info_header_ptr automatic pointer dcl 3-4 condition_info_ptr automatic pointer dcl 2-10 condition_info_version_1 internal static fixed bin(17,0) initial dcl 2-30 query_info_version_3 internal static fixed bin(17,0) initial dcl 6-33 query_info_version_4 internal static fixed bin(17,0) initial dcl 6-34 query_info_version_6 internal static fixed bin(17,0) initial dcl 6-36 sub_error_info_ptr automatic pointer dcl 7-6 sub_error_info_version_1 internal static fixed bin(17,0) initial dcl 7-13 NAMES DECLARED BY EXPLICIT CONTEXT. ABANDON_ATTEMPTED 002171 constant label dcl 308 ref 304 ABORT_ATTEMPTED 002341 constant label dcl 333 ref 329 ABORT_OR_ABANDON 010277 constant entry internal dcl 947 ref 603 628 AF_SEVERITY_VALUE 010354 constant entry internal dcl 966 ref 631 642 647 659 1065 1075 BAD_STATUS_AF_ARG 007135 constant label dcl 822 ref 752 755 758 761 BEGIN_ATTEMPTED 003046 constant label dcl 402 ref 391 CLEAN_UP_STATUS 010406 constant entry internal dcl 975 ref 730 942 CODE_DESCRIPTION 010443 constant entry internal dcl 983 ref 1284 1284 COMMIT_ATTEMPTED 003373 constant label dcl 442 ref 438 CONDITION_HANDLER 010535 constant entry internal dcl 1008 ref 1172 1194 CURRENT_ID 011214 constant entry internal dcl 1096 ref 307 307 332 332 441 441 682 713 713 843 DEAD_PROCESS 011371 constant entry internal dcl 1129 ref 893 1254 1256 1267 ERROR_RETURN 011425 constant entry internal dcl 1141 ref 250 256 262 281 288 299 324 356 365 371 385 415 427 433 522 527 548 554 568 574 580 585 589 633 649 669 678 705 958 EXAMINE_SPECIFIED_ENTRIES 010171 constant label dcl 932 EXAMINE_WHOLE_TDT 007421 constant label dcl 861 EXECUTE_BEGIN_ATTEMPTED 004762 constant label dcl 615 ref 596 EXECUTE_COMMAND_LINE 011435 constant entry internal dcl 1147 ref 622 FILL_NEW_NODE 013706 constant label dcl 1371 ref 1385 FILL_NODE 013717 constant label dcl 1374 ref 1380 GET_CONDITION_LIST 012060 constant entry internal dcl 1204 ref 481 489 505 529 537 GET_ID 011217 constant label dcl 1103 ref 1112 KEY 000000 constant label array(8) dcl 296 ref 291 KILL_ATTEMPTED 005730 constant label dcl 690 ref 686 KILL_USAGE 005476 constant label dcl 667 ref 674 PRINT_ENTRY 012262 constant entry internal dcl 1242 ref 918 924 938 PRINT_ITEM 013352 constant entry internal dcl 1327 ref 1263 1264 1269 1271 1276 1280 1282 1284 1285 1297 1309 REQUEST_INFO 013616 constant entry internal dcl 1343 ref 811 812 814 815 816 817 818 819 RETRY 005045 constant label dcl 622 ref 1172 1172 1194 1194 RETURN 002067 constant label dcl 292 ref 837 1069 1079 1115 1122 1143 1214 1351 ROLLBACK_ATTEMPTED 006102 constant label dcl 714 ref 710 SAVE_HANDLER 013663 constant entry internal dcl 1362 ref 467 468 1235 STATUS_RETURN 010271 constant label dcl 942 ref 747 775 800 824 830 847 854 869 880 SUB_ERROR_CODE 013760 constant entry internal dcl 1389 ref 303 328 390 437 595 685 709 834 USAGE_STRING 014040 constant entry internal dcl 1404 ref 255 255 298 298 323 323 355 355 432 432 667 667 704 704 746 746 append 013251 constant entry internal dcl 1316 ref 1305 1306 1307 do_action 010713 constant entry internal dcl 1052 ref 1033 1042 transaction 001415 constant entry external dcl 33 txn 001405 constant entry external dcl 33 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 16026 16170 15052 16036 Length 16744 15052 142 537 753 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME txn 894 external procedure is an external procedure. on unit on line 286 76 on unit on unit on line 302 70 on unit on unit on line 327 70 on unit on unit on line 389 70 on unit on unit on line 436 70 on unit on unit on line 594 71 on unit on unit on line 601 72 on unit on unit on line 684 70 on unit on unit on line 708 70 on unit on unit on line 730 64 on unit on unit on line 833 82 on unit ABORT_OR_ABANDON 72 internal procedure is called by several nonquick procedures. AF_SEVERITY_VALUE 64 internal procedure uses returns(char(*)) or returns(bit(*)). CLEAN_UP_STATUS 64 internal procedure is called by several nonquick procedures. CODE_DESCRIPTION internal procedure shares stack frame of external procedure txn. CONDITION_HANDLER 176 internal procedure is called by several nonquick procedures. do_action internal procedure shares stack frame of internal procedure CONDITION_HANDLER. CURRENT_ID internal procedure shares stack frame of external procedure txn. DEAD_PROCESS internal procedure shares stack frame of external procedure txn. ERROR_RETURN 64 internal procedure is called by several nonquick procedures. EXECUTE_COMMAND_LINE internal procedure shares stack frame of external procedure txn. begin block on line 1159 90 begin block uses auto adjustable storage, and enables or reverts conditions. on unit on line 1171 78 on unit begin block on line 1181 868 begin block enables or reverts conditions. on unit on line 1193 78 on unit GET_CONDITION_LIST internal procedure shares stack frame of external procedure txn. PRINT_ENTRY internal procedure shares stack frame of external procedure txn. append internal procedure shares stack frame of external procedure txn. PRINT_ITEM internal procedure shares stack frame of external procedure txn. REQUEST_INFO internal procedure shares stack frame of external procedure txn. SAVE_HANDLER internal procedure shares stack frame of external procedure txn. SUB_ERROR_CODE 77 internal procedure is called by several nonquick procedures. USAGE_STRING internal procedure shares stack frame of external procedure txn. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ABORT_OR_ABANDON 000100 code ABORT_OR_ABANDON CONDITION_HANDLER 000100 p CONDITION_HANDLER 000102 condition_name CONDITION_HANDLER 000120 action do_action 000121 code do_action begin block on line 1159 000100 line begin block on line 1159 begin block on line 1181 000100 var_line begin block on line 1181 001460 qi begin block on line 1181 txn 000100 print_switches txn 000101 select_switches txn 000102 cond_info txn 000134 key_buffer txn 000144 my_name txn 000154 on_action_name txn 000164 begun_time_str txn 000174 ctl_args_str txn 000204 requested_time_str txn 000214 af_sw txn 000215 cl_sw txn 000216 had_to_wait_sw txn 000217 handler_invoked_sw txn 000220 multiple_info_sw txn 000221 on_action_specified_sw txn 000222 print_no_txn_warning_sw txn 000223 printed_something_sw txn 000224 succeeded_sw txn 000225 total_sw txn 000226 txn_exists_sw txn 000227 txn_existed_sw txn 000230 wait_sw txn 000231 bj_opening_id txn 000232 txn_id txn 000234 alp txn 000236 area_ptr txn 000240 arg_ptr txn 000242 first_handler_ptr txn 000244 key_ptr txn 000246 return_ptr txn 000250 tix_ptr txn 000252 tm_info_ptr txn 000254 arg_count txn 000255 arg_index txn 000256 command_line_start txn 000257 existing_txn_policy txn 000260 fixed_txn_id txn 000261 key_index txn 000262 tix_index txn 000263 tdt_index txn 000264 txn_index txn 000265 retry_count txn 000266 retry_limit txn 000267 tdt_max_count txn 000270 tix_bound txn 000271 tix_count txn 000272 wait_seconds txn 000273 abandoned_count txn 000274 dead_count txn 000275 error_count txn 000276 txn_count txn 000277 used_count txn 000300 arg_len txn 000301 key_len txn 000302 return_len txn 000303 code txn 000304 start_usec txn 000306 wait_usec txn 000310 complain txn 000314 complain_suppress_name txn 000342 txn_info_ptr txn 000344 query_info txn 000400 message CODE_DESCRIPTION 000431 better_message CODE_DESCRIPTION 000462 better_code CODE_DESCRIPTION 000463 pp_as_word CODE_DESCRIPTION 000464 packed_pointer_ptr CODE_DESCRIPTION 000474 txn_id CURRENT_ID 000475 tried_resume_sw CURRENT_ID 000476 code CURRENT_ID 000506 code DEAD_PROCESS 000516 line_len EXECUTE_COMMAND_LINE 000517 arg_index EXECUTE_COMMAND_LINE 000530 comma_pos GET_CONDITION_LIST 000531 list_pos GET_CONDITION_LIST 000532 condition_name GET_CONDITION_LIST 000550 buffer PRINT_ENTRY 000622 dn PRINT_ENTRY 000674 state_description_buffer PRINT_ENTRY 000715 en PRINT_ENTRY 000725 time_string PRINT_ENTRY 000766 p SAVE_HANDLER 000770 last_p SAVE_HANDLER 001000 buffer USAGE_STRING THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_e_as r_ne_as alloc_char_temp cat_realloc_chars enter_begin_block leave_begin_block call_ent_var_desc call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac move_label_var make_label_var tra_ext_1 tra_ext_2 alloc_auto_adj mpfx3 enable_op shorten_stack ext_entry int_entry int_entry_desc return_chars_eis op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. active_fnc_err_ active_fnc_err_$suppress_name before_journal_manager_$get_bj_path_from_oid before_journal_manager_$get_bj_path_from_uid com_err_ com_err_$suppress_name command_query_ continue_to_signal_ convert_status_code_ cu_$af_return_arg cu_$arg_list_ptr cu_$arg_ptr cu_$arg_ptr_rel cu_$cp cv_dec_check_ date_time_ find_condition_info_ get_process_id_ get_system_free_area_ hcs_$validate_processid ioa_ ioa_$rsnnl pathname_ timer_manager_$sleep transaction_manager_$abandon_txn transaction_manager_$abort_txn transaction_manager_$begin_txn transaction_manager_$commit_txn transaction_manager_$get_current_txn_id transaction_manager_$get_state_description transaction_manager_$get_tdt_size transaction_manager_$get_txn_index transaction_manager_$get_txn_info_index transaction_manager_$handle_conditions transaction_manager_$kill_txn transaction_manager_$resume_txn transaction_manager_$rollback_txn THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$ dm_error_$system_not_initialized dm_error_$transaction_suspended error_table_$badopt error_table_$noarg error_table_$not_act_fnc error_table_$too_many_args transaction_severity_ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 6 7 001352 33 001404 237 001423 238 001440 239 001442 240 001444 241 001451 242 001454 243 001455 244 001460 245 001461 246 001465 247 001470 249 001471 250 001511 253 001515 254 001517 255 001522 256 001565 259 001571 260 001610 261 001612 262 001641 265 001645 266 001657 267 001661 268 001663 270 001673 271 001676 273 001677 274 001700 277 001702 278 001717 279 001722 280 001724 281 001763 284 001767 286 002025 287 002042 288 002057 289 002064 291 002065 292 002067 296 002070 298 002073 299 002117 302 002123 303 002137 304 002147 305 002155 307 002156 308 002171 310 002173 312 002207 313 002223 315 002224 318 002237 321 002240 323 002243 324 002267 327 002273 328 002307 329 002317 330 002325 332 002326 333 002341 335 002343 337 002357 338 002373 340 002374 343 002407 346 002410 348 002411 350 002413 352 002423 354 002440 355 002454 356 002506 357 002512 359 002513 361 002525 362 002535 363 002536 364 002541 365 002565 367 002571 368 002606 369 002633 370 002635 371 002667 373 002673 374 002675 376 002702 378 002703 379 002713 380 002715 381 002717 384 002720 385 002752 387 002756 389 002760 390 002774 391 003004 392 003012 394 003013 396 003014 397 003016 399 003017 401 003031 402 003046 404 003050 405 003052 406 003067 407 003106 409 003131 410 003144 412 003145 413 003152 414 003166 415 003202 420 003206 421 003217 422 003221 424 003222 425 003236 427 003266 430 003272 432 003275 433 003321 436 003325 437 003341 438 003351 439 003357 441 003360 442 003373 444 003375 445 003411 446 003425 447 003426 449 003441 452 003442 454 003445 455 003447 456 003451 457 003452 461 003455 462 003465 464 003470 465 003477 466 003501 467 003503 468 003511 471 003521 473 003530 474 003531 476 003543 478 003560 480 003577 481 003603 482 003614 483 003616 484 003620 486 003623 488 003624 489 003630 490 003640 491 003642 492 003644 494 003647 496 003650 498 003663 501 003676 504 003711 505 003715 506 003727 507 003731 508 003733 510 003736 512 003737 515 003752 517 003764 518 003770 519 003771 520 004006 521 004011 522 004035 524 004041 525 004066 526 004070 527 004122 529 004126 530 004136 531 004140 532 004142 534 004145 536 004146 537 004152 538 004162 539 004164 540 004166 542 004171 544 004172 545 004202 546 004203 547 004206 548 004232 550 004236 551 004253 552 004300 553 004302 554 004333 556 004337 557 004341 559 004346 561 004347 562 004357 563 004361 564 004363 567 004364 568 004416 570 004422 572 004424 573 004430 574 004454 577 004460 578 004465 580 004523 583 004527 584 004534 585 004564 587 004570 588 004575 589 004621 594 004625 595 004641 596 004651 598 004661 599 004671 601 004672 603 004710 604 004722 606 004723 608 004724 609 004726 611 004727 613 004741 614 004745 615 004762 617 004764 618 004766 619 005003 620 005022 622 005045 625 005046 626 005050 627 005061 628 005063 629 005073 630 005102 631 005105 632 005141 633 005165 636 005171 637 005173 638 005176 640 005230 641 005231 642 005234 643 005270 645 005272 646 005277 647 005302 648 005336 649 005362 654 005366 655 005377 656 005401 658 005402 659 005405 660 005441 662 005472 665 005473 667 005476 669 005530 672 005534 673 005537 674 005556 675 005572 676 005617 677 005621 678 005653 680 005657 681 005661 682 005662 684 005664 685 005700 686 005710 687 005716 689 005717 690 005730 692 005732 693 005746 694 005762 696 005763 699 005776 702 005777 704 006002 705 006026 708 006032 709 006046 710 006056 711 006064 713 006065 714 006102 716 006104 717 006120 718 006134 720 006135 723 006150 726 006151 728 006160 730 006164 732 006206 733 006211 734 006216 736 006217 737 006221 739 006223 741 006233 743 006250 744 006264 745 006272 746 006275 747 006321 752 006322 754 006330 755 006333 757 006345 758 006352 760 006360 761 006365 763 006377 765 006402 766 006416 768 006424 769 006443 771 006462 772 006463 773 006510 774 006512 775 006544 777 006545 778 006547 779 006562 781 006622 782 006624 783 006625 787 006631 789 006632 790 006646 792 006654 793 006673 796 006712 797 006713 798 006740 799 006742 800 006774 802 006775 803 006777 804 007000 807 007004 811 007005 812 007020 814 007037 815 007052 816 007061 817 007074 818 007107 819 007116 822 007135 824 007167 826 007170 828 007172 829 007177 830 007223 833 007224 834 007240 835 007250 836 007253 837 007267 839 007272 841 007273 842 007302 843 007303 844 007305 845 007322 846 007324 847 007356 851 007357 853 007363 854 007407 857 007410 858 007412 861 007414 864 007421 865 007430 866 007432 868 007461 869 007475 872 007476 873 007504 874 007511 876 007514 877 007523 878 007536 879 007540 880 007572 883 007573 884 007603 888 007605 890 007607 891 007614 892 007623 893 007631 894 007645 895 007655 896 007660 897 007664 899 007666 900 007711 901 007732 902 007752 903 007772 904 010015 905 010035 910 010046 911 010047 913 010062 916 010075 917 010101 918 010106 920 010107 922 010112 923 010121 924 010132 925 010133 927 010135 930 010170 933 010171 934 010176 936 010201 937 010211 938 010225 939 010231 940 010267 942 010271 945 010275 947 010276 953 010304 954 010315 955 010317 956 010331 957 010333 958 010340 961 010345 962 010352 966 010353 970 010361 971 010375 975 010405 977 010413 978 010422 979 010433 981 010442 983 010443 995 010445 996 010462 997 010465 998 010470 999 010472 1000 010501 1001 010503 1002 010520 1004 010526 1008 010534 1016 010542 1017 010545 1018 010554 1019 010556 1021 010557 1023 010561 1025 010565 1026 010603 1027 010612 1031 010616 1032 010624 1033 010631 1034 010646 1036 010647 1040 010652 1041 010662 1042 010667 1043 010704 1045 010705 1047 010710 1049 010712 1052 010713 1060 010715 1061 010721 1062 010723 1063 010734 1064 010742 1065 010745 1066 011004 1069 011040 1071 011043 1072 011045 1073 011056 1074 011064 1075 011067 1076 011126 1079 011162 1081 011165 1082 011170 1083 011172 1084 011173 1087 011202 1088 011204 1089 011211 1092 011213 1096 011214 1102 011216 1103 011217 1105 011230 1106 011232 1108 011247 1109 011257 1110 011261 1111 011262 1112 011270 1113 011272 1114 011306 1115 011331 1119 011332 1120 011334 1121 011350 1122 011364 1125 011365 1129 011371 1134 011373 1136 011402 1137 011413 1141 011424 1143 011432 1147 011435 1152 011436 1153 011440 1154 011442 1156 011451 1157 011471 1158 011475 1159 011477 1160 011502 1162 011512 1163 011516 1164 011520 1165 011530 1166 011550 1167 011560 1168 011563 1170 011565 1171 011566 1172 011602 1173 011624 1175 011625 1176 011643 1177 011651 1178 011652 1181 011653 1183 011656 1185 011706 1186 011711 1187 011713 1188 011717 1190 011721 1192 011764 1193 011766 1194 012002 1195 012024 1197 012025 1198 012050 1199 012056 1202 012057 1204 012060 1211 012071 1212 012073 1213 012076 1214 012127 1216 012130 1218 012147 1219 012151 1221 012155 1222 012175 1224 012177 1225 012202 1226 012221 1227 012222 1228 012226 1229 012231 1231 012232 1232 012236 1235 012240 1236 012260 1238 012261 1242 012262 1248 012263 1249 012266 1250 012304 1253 012305 1254 012313 1255 012336 1256 012337 1258 012361 1260 012363 1261 012367 1263 012370 1264 012410 1266 012437 1267 012442 1269 012524 1271 012533 1272 012547 1273 012552 1275 012561 1276 012576 1278 012603 1279 012606 1280 012634 1282 012642 1284 012661 1285 012676 1287 012722 1288 012725 1290 012734 1292 012754 1294 013015 1295 013042 1297 013075 1300 013123 1301 013126 1303 013135 1304 013140 1305 013146 1306 013156 1307 013172 1309 013205 1312 013212 1314 013233 1325 013250 1316 013251 1320 013262 1321 013314 1323 013350 1327 013352 1332 013370 1333 013372 1334 013437 1336 013440 1338 013451 1339 013536 1341 013614 1343 013616 1347 013620 1348 013624 1349 013626 1350 013630 1351 013654 1353 013655 1356 013657 1358 013662 1362 013663 1368 013674 1369 013700 1370 013705 1371 013706 1373 013710 1374 013717 1376 013723 1377 013725 1379 013726 1380 013734 1381 013744 1382 013745 1383 013750 1384 013755 1385 013756 1389 013757 1391 013765 1392 014005 1394 014015 1396 014021 1397 014031 1400 014034 1404 014040 1409 014051 1410 014103 1411 014147 1413 014203 ----------------------------------------------------------- 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