COMPILATION LISTING OF SEGMENT abs_io_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/11/87 0926.1 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 8 /* format: style3,idind30,ll122,ifthenstmt */ 9 10 abs_io_$abs_io_attach: 11 procedure (P_iocb_ptr, P_attach_args, P_report_switch, P_status); 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(86-03-01,Gilcrease), approve(86-03-27,MCR7370), 16* audit(86-06-23,Lippard), install(86-06-30,MR12.0-1082): 17* Dummy comment for hcom. 18* Initial coding: 25 June 1979 by J. Spencer Love 19* -no_set_bit_count implemented 07/29/81 S. Herbst 20* -login_channel November 1981 Benson I. Margulies 21* Added $allocate_abs_data & $initialize_abs_data to be called by absentee_listen_$execute_handler 01/07/83 S. Herbst 22* Added -trace, -no_trace, -trace_default to the exec_com command 03/20/84 S. Herbst 23* 2) change(86-03-27,Gilcrease), approve(86-03-27,MCR7370), 24* audit(86-06-23,Lippard), install(86-06-30,MR12.0-1082): 25* Add -truncate to absout files. SCP 6297. 26* 3) change(86-11-11,Gilcrease), approve(86-11-11,PBF7370), 27* audit(86-11-12,Fawcett), install(86-11-12,MR12.0-1214): 28* PBF: user_info_ should not be called if abs_io_ invoked as 29* exec_com. 30* END HISTORY COMMENTS */ 31 32 33 /* Parameters */ 34 35 declare P_iocb_ptr ptr parameter, 36 P_attach_args (*) char (*) varying parameter, 37 P_report_switch bit (1) aligned parameter, 38 P_opening_mode fixed bin parameter, 39 P_abs_data_ptr ptr parameter, 40 P_status fixed bin (35) parameter; 41 42 /* Builtins */ 43 44 declare (addr, addrel, divide, empty, hbound, index, length, ltrim, maxlength, min, null, reverse, rtrim, search, size, 45 stackbaseptr, string, substr, unspec, verify) 46 builtin; 47 48 declare (any_other, area, bad_area_format, bad_area_initialization, cleanup) 49 condition; 50 51 /* Automatic */ 52 53 declare abs_entry bit (1) aligned, 54 arg_count fixed bin, 55 arg_str char (100), 56 attach_description_ptr ptr, 57 first_arg fixed bin, 58 idx fixed bin, 59 initialized bit (1), 60 iocb_ptr ptr, 61 login_channel_sw bit (1), 62 mask bit (36), 63 masked_sw bit (1) init ("0"b), 64 no_set_bc_sw bit (1), 65 output_arg fixed bin, 66 path_arg fixed bin, 67 status fixed bin (35), 68 whoami char (32) varying; 69 70 declare 1 area_data aligned like area_info; 71 72 /* Constants */ 73 74 declare NL char (1) static options (constant) initial (" 75 "); 76 declare WHITE char (5) static options (constant) initial (" 77 "); /* FF VT NL TAB SPACE */ 78 79 /* Static */ 80 81 declare 1 unable_to_do_io aligned static, 82 2 version fixed bin initial (0), 83 2 status_code fixed bin (35); 84 85 /* Based */ 86 87 declare attach_descrip char (400) varying; 88 declare attach_description char (length (attach_descrip)) varying based (attach_description_ptr) 89 initial (attach_descrip); 90 declare allocated_chars char (abs_data.allocated_chars_len) based (abs_data.allocated_chars_ptr); 91 declare ec_path char (abs_data.ec_path_len) based (abs_data.ec_path_ptr); 92 declare input_file char (input_string.len) based (input_string.ptr); 93 declare sys_area area based (get_system_free_area_ ()); 94 95 /* External */ 96 97 declare abs_io_data_chain_ptr_ ptr external init (null ()); 98 99 declare ( 100 error_table_$noalloc, 101 error_table_$notalloc, 102 error_table_$bad_mode, 103 error_table_$badopt, 104 error_table_$badpath, 105 error_table_$entlong, 106 error_table_$inconsistent, 107 error_table_$noarg, 108 error_table_$not_detached, 109 error_table_$unable_to_do_io, 110 error_table_$unimplemented_version 111 ) fixed bin (35) external; 112 113 declare abs_io_control entry (ptr, char (*), ptr, fixed bin (35)); 114 declare abs_io_control$close entry (ptr); 115 declare abs_io_control$set_arguments entry (ptr, (*) char (*) varying, fixed bin, fixed bin (35)); 116 declare abs_io_put_chars entry (ptr, ptr, fixed bin (21), fixed bin (35)); 117 declare abs_io_put_chars$close entry (ptr, fixed bin (35)); 118 declare abs_io_put_chars$open entry (ptr, char (*), char (*), bit (1), bit (1), fixed bin (35)); 119 declare abs_io_v1_get_line entry (ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)); 120 declare abs_io_v2_get_line entry (ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)); 121 declare cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin (35)); 122 declare cu_$set_cl_intermediary entry (entry); 123 declare define_area_ entry (ptr, fixed bin (35)); 124 declare expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)); 125 declare get_system_free_area_ entry () returns (ptr); 126 declare hcs_$initiate_count entry options (variable); 127 declare hcs_$reset_ips_mask entry (bit (36), bit (36)); 128 declare hcs_$set_ips_mask entry (bit (36), bit (36)); 129 declare hcs_$set_max_length_seg entry (pointer, fixed bin (19), fixed bin (35)); 130 declare hcs_$terminate_noname entry (ptr, fixed bin (35)); 131 declare iox_$destroy_iocb entry (ptr, fixed bin (35)); 132 declare iox_$propagate entry (ptr); 133 declare pathname_ entry (char (*), char (*)) returns (char (168)); 134 declare release_area_ entry (ptr); 135 declare requote_string_ entry (char (*)) returns (char (*)); 136 declare user_info_$absout entry (char (*)); 137 declare user_info_$absin entry (char (*)); 138 declare user_info_$login_arg_count entry (fixed bin, fixed bin (21), fixed bin (21)); 139 declare user_info_$login_arg_ptr entry (fixed bin, pointer, fixed bin (21), fixed bin (35)); 140 141 /* abs_io_$abs_io_attach: 142* procedure (P_iocb_ptr, P_attach_args, P_report_switch, P_status) */ 143 144 abs_entry = "1"b; 145 whoami = "abs_io_"; 146 147 go to COMMON; 148 149 ec_input_$ec_input_attach: 150 entry (P_iocb_ptr, P_attach_args, P_report_switch, P_status); 151 152 abs_entry = "0"b; 153 whoami = "ec_input_"; 154 155 COMMON: 156 if unable_to_do_io.status_code = 0 then unable_to_do_io.status_code = error_table_$unable_to_do_io; 157 158 abs_data_ptr = null (); /* Preset automatic before installing cleanup handler */ 159 initialized = "0"b; 160 mask = ""b; 161 162 on cleanup call clean_up (); 163 164 call allocate_abs_data; 165 166 /* Fill in all pointers as null before enabling cleanup of things within abs_data */ 167 168 call initialize_abs_data; 169 170 abs_data.allocated_chars_ptr, abs_data.else_clause_ptr, abs_data.chars_ptr = null; 171 abs_data.instance_chain.prev_ptr, abs_data.instance_chain.next_ptr = null; 172 abs_data.expand_data_ptr, abs_data.ec_data_ptr, abs_data.variables_ptr = null; 173 abs_data.command_line.iocb, abs_data.comment_line.iocb, 174 abs_data.control_line.iocb, abs_data.input_line.iocb = null; 175 abs_data.output_file.fcb_ptr, abs_data.output_file.seg_ptr, abs_data.input_string.ptr = null; 176 177 arg_info.arg_ptr, arg_info.default_arg_ptr, arg_info.ec_name_ptr, arg_info.ec_path_ptr = null; 178 179 initialized = "1"b; 180 181 /* Get some of the arguments */ 182 183 arg_count = hbound (P_attach_args, 1); /* get size of option array */ 184 185 first_arg, output_arg, path_arg = 0; 186 login_channel_sw, no_set_bc_sw = "0"b; 187 188 do idx = 1 to arg_count while (first_arg = 0); 189 190 arg_str = P_attach_args (idx); 191 if index (arg_str, "-") = 1 then do; /* control arg */ 192 193 if arg_str = "-argument" | arg_str = "-ag" then first_arg = idx + 1; 194 195 else if arg_str = "-no_set_bit_count" | arg_str = "-nsbc" then no_set_bc_sw = "1"b; 196 else if arg_str = "-set_bit_count" | arg_str = "-sbc" then no_set_bc_sw = "0"b; 197 198 else if abs_entry & arg_str = "-login_channel" then login_channel_sw = "1"b; 199 else if arg_str = "-output_file" | arg_str = "-of" 200 then if output_arg ^= 0 then call error (0, whoami, "-output_file specified twice."); 201 else if idx = arg_count then call error (0, whoami, "No value specified for -output_file"); 202 else output_arg, idx = idx + 1; 203 204 else if arg_str = "-pathname" | arg_str = "-pn" 205 then if path_arg ^= 0 then call error (0, whoami, "More than one pathname specified."); 206 else if idx = arg_count then call error (0, whoami, "No value specified for -pathname"); 207 else path_arg, idx = idx + 1; 208 209 else if abs_entry & (arg_str = "-single_segment_file" | arg_str = "-ssf") then open_data.ssf = "1"b; 210 211 else if abs_entry & (arg_str = "-truncate" | arg_str = "-tc") then open_data.truncate = "1"b; 212 213 else call error (error_table_$badopt, whoami, "^a", arg_str); 214 end; 215 216 else if path_arg = 0 then path_arg = idx; 217 else first_arg = idx; 218 end; 219 220 if login_channel_sw 221 then if path_arg > 0 | first_arg > 0 | output_arg > 0 222 then call error (error_table_$inconsistent, whoami, "-login_channel and other arguments."); 223 else ; 224 else if path_arg = 0 then call error (error_table_$noarg, whoami, "Input file pathname."); 225 226 if first_arg = 0 then first_arg = arg_count + 1; 227 228 on area call error (error_table_$noalloc, whoami, "In per-invocation area."); 229 230 if abs_entry 231 then do; 232 if login_channel_sw 233 then call initiate_input_file_login_channel; 234 else do; 235 if first_arg > arg_count then call error (error_table_$noarg, whoami, "Input file."); 236 call initiate_input_path (first_arg); 237 first_arg = first_arg + 1; 238 end; 239 end; 240 else call initiate_input_path (path_arg); 241 242 /* Determine version of input file */ 243 244 if substr (input_file, 1, min (8, input_string.len)) ^= "&version" | search (input_file, WHITE) ^= 9 245 then do; 246 open_data.parser_version = 1 /* Default_version */; 247 input_string.start, input_string.limit = 0; 248 end; 249 else do; 250 idx = index (substr (input_file, 9), NL); 251 if idx = 0 252 then call error (error_table_$unimplemented_version, whoami, "Newline must end &version statement."); 253 if verify (substr (input_file, 9, idx - 1), WHITE) = 0 254 then call error (error_table_$unimplemented_version, whoami, 255 "No version given in &version statement."); 256 open_data.parser_version = 257 cv_dec_check_ (ltrim (rtrim (substr (input_file, 10, idx - 2), WHITE), WHITE), status); 258 if status ^= 0 | open_data.parser_version < 1 /* Lowest_version */ | open_data.parser_version > 2 259 /* Highest_version */ 260 then call error (error_table_$unimplemented_version, whoami, "&version ""^a""", 261 substr (input_file, 10, idx - 2)); 262 if open_data.parser_version = 1 then input_string.start, input_string.limit = idx + 8; 263 else input_string.start, input_string.limit = idx + 9; /* v2 likes to start at first char */ 264 end; 265 266 if ^login_channel_sw 267 then if first_arg > 0 & first_arg <= arg_count 268 then do; 269 call abs_io_control$set_arguments (abs_data_ptr, P_attach_args (*), first_arg, status); 270 if status ^= 0 271 then call error (status, whoami, "Setting arguments:^vs^(^/^a^)", first_arg - 1, 272 P_attach_args (*)); 273 end; 274 else ; 275 else call process_login_arguments; 276 277 /* Fill in defaults */ 278 279 abs_data.absentee = abs_entry; 280 abs_data.login_channel = login_channel_sw; 281 open_data.sio = abs_data.absentee; 282 open_data.si = ^abs_data.sio; 283 284 call set_trace_defaults (); 285 286 /* generate attach description */ 287 288 attach_descrip = whoami; 289 if ^login_channel_sw then attach_descrip = attach_descrip || " " || requote_string_ (ec_path); 290 if output_arg > 0 291 then do; 292 attach_descrip = attach_descrip || " -of "; 293 if abs_data.output_dir ^= ">" then attach_descrip = attach_descrip || rtrim (abs_data.output_dir); 294 attach_descrip = attach_descrip || ">"; 295 attach_descrip = attach_descrip || rtrim (abs_data.output_entry); 296 end; 297 if open_data.truncate then attach_descrip = attach_descrip || " -truncate"; 298 if open_data.ssf then attach_descrip = attach_descrip || " -ssf"; 299 if login_channel_sw then attach_descrip = attach_descrip || " -login_channel"; 300 301 allocate attach_description in (abs_data.work_area); 302 303 revert area; 304 305 /* Now mask down and diddle with IOCB... */ 306 307 on any_other call any_other_handler; 308 309 call hcs_$set_ips_mask (mask, mask); 310 masked_sw = "1"b; 311 312 revert cleanup; 313 314 iocb_ptr = P_iocb_ptr; 315 316 if iocb_ptr -> iocb.attach_descrip_ptr ^= null () 317 then call error (error_table_$not_detached, whoami, "IOCB ""^a"" at ^p already attached.", 318 iocb_ptr -> iocb.name, iocb_ptr); 319 320 iocb_ptr -> iocb.attach_data_ptr = abs_data_ptr; 321 iocb_ptr -> iocb.control = abs_io_control; 322 iocb_ptr -> iocb.attach_descrip_ptr = attach_description_ptr; 323 /* When this is done, we are attached, sort of */ 324 325 instance_chain.next_ptr = null (); 326 instance_chain.prev_ptr = abs_io_data_chain_ptr_; 327 abs_io_data_chain_ptr_ = abs_data_ptr; 328 if instance_chain.prev_ptr = null () 329 then instance_chain.level = 1; 330 else do; 331 instance_chain.prev_ptr -> instance_chain.next_ptr = abs_data_ptr; 332 instance_chain.level = instance_chain.prev_ptr -> instance_chain.level + 1; 333 end; 334 335 if no_set_bc_sw 336 then do; 337 status = 0; 338 call abs_io_control (iocb_ptr, "no_set_bc", null (), status); 339 if status ^= 0 then call error (status); 340 end; 341 342 iocb_ptr -> iocb.open = abs_io_$abs_io_open; 343 iocb_ptr -> iocb.detach_iocb = abs_io_$abs_io_detach; 344 345 call iox_$propagate (iocb_ptr); /* Tell the world we are attached */ 346 347 call hcs_$reset_ips_mask (mask, mask); 348 349 P_status = 0; 350 351 EGRESS: 352 return; 353 354 abs_io_$abs_io_open: 355 entry (P_iocb_ptr, P_opening_mode, P_report_switch, P_status); 356 357 mask = ""b; 358 359 on any_other call any_other_handler; 360 361 call hcs_$set_ips_mask (mask, mask); 362 363 iocb_ptr = P_iocb_ptr -> iocb.actual_iocb_ptr; 364 abs_data_ptr = iocb_ptr -> iocb.attach_data_ptr; 365 366 if ^((P_opening_mode = Stream_input & open_data.si) | (P_opening_mode = Stream_input_output & open_data.sio)) 367 then call error (error_table_$bad_mode); 368 369 if P_opening_mode = Stream_input_output 370 then do; 371 call abs_io_put_chars$open (abs_data_ptr, open_data.output_dir, open_data.output_entry, 372 (open_data.truncate), ^open_data.ssf, status); 373 if status ^= 0 then call error (status); 374 open_data.truncate = "0"b; /* Only truncate on first opening for stream_input_output */ 375 end; 376 377 if abs_data.allocated_chars_ptr ^= null () then free allocated_chars; 378 unspec (abs_data.if_info) = "0"b; 379 abs_data.chars_ptr, abs_data.else_clause_ptr, abs_data.prev_if_ptr = null (); 380 abs_data.allocated_chars_len, abs_data.chars_len, abs_data.else_clause_len = 0; 381 input_string.position = input_string.start; 382 abs_data.unique_name = ""; 383 384 iocb_ptr -> iocb.close = abs_io_$abs_io_close; 385 386 if open_data.parser_version = 1 387 then iocb_ptr -> iocb.get_line = abs_io_v1_get_line; 388 else iocb_ptr -> iocb.get_line = abs_io_v2_get_line; 389 390 if P_opening_mode = Stream_input_output then iocb_ptr -> iocb.put_chars = abs_io_put_chars; 391 392 abs_data.open_description = iox_modes (P_opening_mode); 393 iocb_ptr -> iocb.open_descrip_ptr = addr (abs_data.open_description); 394 /* When this is done, we are open */ 395 call iox_$propagate (iocb_ptr); /* So tell the world, already */ 396 397 call hcs_$reset_ips_mask (mask, mask); 398 399 P_status = 0; 400 401 if abs_data.absentee & abs_data.login_channel 402 then begin; /* do special absentee environment stuff */ 403 declare print_abs_msg_$login entry; 404 405 call print_abs_msg_$login; 406 407 call hcs_$set_max_length_seg (stackbaseptr (), (248 * 1024), (0)); 408 call cu_$set_cl_intermediary (reenter_environment); 409 end; 410 411 return; 412 413 abs_io_$abs_io_close: 414 entry (P_iocb_ptr, P_status); 415 416 mask = ""b; 417 418 on any_other call any_other_handler; 419 420 call hcs_$set_ips_mask (mask, mask); 421 422 iocb_ptr = P_iocb_ptr -> iocb.actual_iocb_ptr; 423 abs_data_ptr = iocb_ptr -> iocb.attach_data_ptr; 424 425 if output_file.seg_ptr ^= null () 426 then do; 427 call abs_io_put_chars$close (abs_data_ptr, status); 428 if status ^= 0 then call error (status); 429 end; 430 431 if abs_data.attach.target_ptr ^= null () then call abs_io_control$close (abs_data_ptr); 432 433 abs_data.active, abs_data.eof = "0"b; /* Reinit per opening variables in case new opening */ 434 abs_data.nest_level, abs_data.expected_nest_level = 0; 435 /* for Version 1 &if-&then-&else nesting */ 436 437 iocb_ptr -> iocb.open = abs_io_$abs_io_open; 438 iocb_ptr -> iocb.detach_iocb = abs_io_$abs_io_detach; 439 440 iocb_ptr -> iocb.open_descrip_ptr = null (); /* When this is done, we are closed */ 441 442 call iox_$propagate (iocb_ptr); /* So tell the world, already */ 443 444 call hcs_$reset_ips_mask (mask, mask); 445 446 P_status = 0; 447 448 return; 449 450 abs_io_$abs_io_detach: 451 entry (P_iocb_ptr, P_status); 452 453 mask = ""b; 454 455 on any_other call any_other_handler; 456 457 call hcs_$set_ips_mask (mask, mask); 458 459 iocb_ptr = P_iocb_ptr; 460 abs_data_ptr = iocb_ptr -> iocb.attach_data_ptr; 461 462 iocb_ptr -> iocb.attach_descrip_ptr = null (); /* When this is done, we are detached */ 463 464 call iox_$propagate (iocb_ptr); /* So tell the world, already */ 465 466 if instance_chain.prev_ptr ^= null () 467 then instance_chain.prev_ptr -> instance_chain.next_ptr = instance_chain.next_ptr; 468 if instance_chain.next_ptr ^= null () 469 then instance_chain.next_ptr -> instance_chain.prev_ptr = instance_chain.prev_ptr; 470 else abs_io_data_chain_ptr_ = instance_chain.prev_ptr; 471 472 initialized = "1"b; /* For clean_up */ 473 474 on cleanup call clean_up (); /* Do BEFORE unmasking to prevent race window */ 475 476 call hcs_$reset_ips_mask (mask, mask); 477 478 call clean_up (); 479 480 P_status = 0; 481 482 return; 483 484 abs_io_$allocate_abs_data: entry (P_abs_data_ptr); 485 486 call allocate_abs_data; 487 488 P_abs_data_ptr = abs_data_ptr; 489 490 return; 491 492 493 494 495 abs_io_$initialize_abs_data: entry (P_abs_data_ptr); 496 497 abs_data_ptr = P_abs_data_ptr; 498 whoami = "ec_input_"; 499 500 call initialize_abs_data; 501 502 return; 503 504 reenter_environment: entry; 505 506 call reenter (); 507 return; 508 509 allocate_abs_data: proc; 510 511 on area call error (error_table_$noalloc, whoami, "In system area."); 512 on bad_area_format call error (error_table_$notalloc, whoami, "In system area."); 513 on bad_area_initialization call error (error_table_$notalloc, whoami, "In system area."); 514 515 allocate abs_data in (sys_area); 516 517 revert area; 518 revert bad_area_format; 519 revert bad_area_initialization; 520 521 unspec (abs_data) = "0"b; 522 523 abs_data.version = abs_data_version_1; /* This is version of STRUCTURE */ 524 525 end allocate_abs_data; 526 527 any_other_handler: 528 procedure (); 529 530 declare continue_to_signal_ entry (fixed bin (35)); 531 declare terminate_process_ entry (char (*), ptr); 532 533 if substr (mask, 36, 1) 534 then call terminate_process_ ("fatal_error", addr (unable_to_do_io)); 535 else call continue_to_signal_ ((0)); 536 537 return; 538 539 end any_other_handler; 540 541 clean_up: 542 procedure (); 543 544 declare p ptr; 545 546 if abs_data_ptr ^= null () 547 then do; 548 if initialized 549 then do; 550 if abs_data.attach.save_ptr ^= null () 551 then call iox_$destroy_iocb (abs_data.attach.save_ptr, status); 552 p = input_string.ptr; /* TEMP: this can be removed when terminate_noname is fixed */ 553 input_string.ptr = null (); 554 if p ^= null () then call hcs_$terminate_noname (p, status); 555 call release_area_ (addr (abs_data.work_area)); 556 end; 557 free abs_data; 558 end; 559 560 return; 561 562 end clean_up; 563 564 error: 565 procedure () options (variable); 566 567 declare status_ptr ptr; 568 declare status_arg fixed bin (35) based (status_ptr); 569 declare arg_list_arg_count fixed bin; 570 declare message character (256); 571 572 declare com_err_ entry () options (variable); 573 declare sub_err_ entry () options (variable); 574 declare ioa_$general_rs entry (pointer, fixed binary, fixed binary, character (*), fixed binary, 575 bit (1) aligned, bit (1) aligned); 576 declare cu_$arg_count entry (fixed bin, fixed bin (35)); 577 declare cu_$arg_list_ptr entry () returns (ptr); 578 declare cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 579 declare cu_$generate_call entry (entry, ptr); 580 581 if masked_sw then call hcs_$reset_ips_mask (mask, mask); 582 /* prevent calling com_err_ while masked */ 583 584 call cu_$arg_ptr (1, status_ptr, (0), (0)); 585 call cu_$arg_count (arg_list_arg_count, (0)); 586 P_status = status_arg; 587 if arg_list_arg_count = 1 & P_report_switch then call com_err_ (P_status, whoami); 588 else if P_report_switch then call cu_$generate_call (com_err_, cu_$arg_list_ptr ()); 589 else do; 590 call ioa_$general_rs (cu_$arg_list_ptr (), 3, 4, message, (0), "1"b, "0"b); 591 call sub_err_ (P_status, (whoami), "s", null (), (0), "^a", message); 592 end; 593 call clean_up (); 594 595 go to EGRESS; 596 597 end error; 598 599 initialize_abs_data: proc; 600 601 dcl (user_info_$absentee_restarted, user_info_$absout_truncation) entry (bit (1) aligned); 602 dcl (restarted, truncate) bit (1) aligned; 603 604 /* Initializes just the things that need to be initialized for any ec execution, including the 605* execution of an &on unit by absentee_listen_$execute_handler. */ 606 607 abs_data.io_module_name = whoami; 608 609 abs_data.labels_ptr, abs_data.first_xlabel_ptr, abs_data.last_xlabel_ptr = null; 610 abs_data.current_lex_block_ptr, abs_data.current_proc_block_ptr = null; 611 abs_data.last_block_ptr, abs_data.current_loop_ptr, abs_data.last_loop_ptr, abs_data.saved_state_ptr = null; 612 abs_data.attach.target_ptr, abs_data.attach.victim_ptr, abs_data.attach.save_ptr = null; 613 abs_data.cleanup_handler_ptr, abs_data.first_handler_ptr = null; 614 if abs_entry then do; /* Only call user_info_ if not exec_com invocation */ 615 call user_info_$absentee_restarted (restarted); 616 call user_info_$absout_truncation (truncate); 617 if truncate then if ^restarted then abs_data.truncate = "1"b; 618 end; 619 620 /* Fill in structure for call to make abs_data.work_area extensible */ 621 622 area_data.version = area_info_version_1; 623 string (area_data.control) = ""b; 624 area_data.extend = "1"b; 625 area_data.zero_on_free = "1"b; 626 area_data.owner = whoami; 627 area_data.size = Work_area_size; 628 area_data.areap = addr (abs_data.work_area); 629 630 call define_area_ (addr (area_data), status); 631 if status ^= 0 then call error (status, whoami, "Initializing work area."); 632 633 end initialize_abs_data; 634 635 initiate_input_path: 636 procedure (path_idx); 637 638 declare path_idx fixed bin parameter; 639 640 declare absin_len fixed bin, 641 arg_len fixed bin (21), 642 arg_ptr ptr, 643 arg char (arg_len) based (arg_ptr), 644 bit_count fixed bin (24), 645 input_dir char (168), 646 input_dir_len fixed bin (21), 647 input_entry char (32), 648 input_entry_len fixed bin (21); 649 650 arg_ptr = addrel (addr (P_attach_args (path_idx)), 1); 651 arg_len = length (rtrim (P_attach_args (path_idx))); 652 if arg_len = 0 then call error (error_table_$badpath, whoami, "Input filename blank."); 653 call expand_pathname_ (arg, input_dir, input_entry, status); 654 if status ^= 0 then call error (status, whoami, "Input file: ^a", arg); 655 go to common; 656 657 initiate_input_file_login_channel: 658 entry; 659 660 declare absin_path character (168); 661 call user_info_$absin (absin_path); 662 663 call expand_pathname_ (absin_path, input_dir, input_entry, status); 664 if status ^= 0 then call error (status, whoami, "Input file: ^a", absin_path); 665 666 common: 667 call hcs_$initiate_count (input_dir, input_entry, "", bit_count, 0, input_string.ptr, status); 668 if input_string.ptr = null () 669 then call error (status, whoami, "Input file: ^a", pathname_ (input_dir, input_entry)); 670 671 input_string.len = divide (bit_count, 9, 21, 0); 672 673 /* Fill in &ec_path (&0), &ec_name */ 674 675 abs_data.ec_path_quotes, abs_data.ec_name_quotes = -1; 676 677 input_dir_len = length (rtrim (input_dir)); 678 input_entry_len = length (rtrim (input_entry)); 679 if input_dir_len = 1 680 then abs_data.ec_path_len = 1 + input_entry_len; 681 else abs_data.ec_path_len = input_dir_len + 1 + input_entry_len; 682 683 allocate ec_path in (abs_data.work_area); 684 685 substr (ec_path, 1, input_dir_len) = substr (input_dir, 1, input_dir_len); 686 if input_dir_len > 1 687 then do; 688 substr (ec_path, input_dir_len + 1, 1) = ">"; 689 input_dir_len = input_dir_len + 1; 690 end; 691 abs_data.ec_name_ptr = addr (substr (ec_path, input_dir_len + 1)); 692 substr (ec_path, input_dir_len + 1, input_entry_len) = substr (input_entry, 1, input_entry_len); 693 input_dir_len = input_dir_len + input_entry_len; 694 695 abs_data.ec_name_len = input_entry_len - index (reverse (substr (input_entry, 1, input_entry_len)), "."); 696 if abs_data.ec_name_len = 0 then call error (error_table_$badpath, whoami); 697 698 /* Fill in pathname of output file, in case needed. */ 699 700 if abs_entry 701 then if login_channel_sw | output_arg > 0 702 then do; 703 if output_arg > 0 704 then call expand_pathname_ ((P_attach_args (output_arg)), open_data.output_dir, 705 open_data.output_entry, status); 706 else do; 707 call user_info_$absout (absin_path); 708 call expand_pathname_ (absin_path, open_data.output_dir, open_data.output_entry, 709 status); 710 end; 711 if status ^= 0 712 then call error (status, whoami, "Output file ""^a""", P_attach_args (output_arg)); 713 end; 714 else do; 715 abs_data.output_dir = input_dir; 716 input_entry_len = 717 input_entry_len - index (reverse (substr (input_entry, 1, input_entry_len)), "."); 718 absin_len = length (".absin"); 719 if input_entry_len > absin_len 720 then /* prevent name.absin.absout */ 721 if substr (input_entry, input_entry_len - absin_len + 1, absin_len) = ".absin" 722 then input_entry_len = input_entry_len - absin_len; 723 if input_entry_len + length (".absout") > maxlength (input_entry) 724 then call error (error_table_$entlong, whoami); 725 substr (open_data.output_entry, 1, input_entry_len) = substr (input_entry, 1, input_entry_len); 726 substr (open_data.output_entry, input_entry_len + 1) = ".absout"; 727 end; 728 else open_data.output_dir, open_data.output_entry = ""; 729 730 return; 731 732 end initiate_input_path; 733 734 process_login_arguments: 735 procedure; 736 737 declare n_args fixed bin; 738 declare arg_len fixed bin (21); 739 declare max_arg_len fixed bin (21); 740 declare argx fixed bin; 741 742 call user_info_$login_arg_count (n_args, max_arg_len, (0)); 743 if n_args = 0 then return; /* Nuthin to do */ 744 745 begin; 746 declare args (n_args) char (max_arg_len) varying; 747 declare arg_ptr pointer; 748 declare arg character (arg_len) based (arg_ptr); 749 750 do argx = 1 to n_args; 751 call user_info_$login_arg_ptr (argx, arg_ptr, arg_len, (0)); 752 args (argx) = arg; 753 754 end; 755 call abs_io_control$set_arguments (abs_data_ptr, args, 1, status); 756 if status ^= 0 then call error (status, whoami, "Setting arguments:^(^/^a^)", args); 757 end; 758 759 end process_login_arguments; 760 761 reenter: 762 procedure; 763 764 /* this procedure intercepts all attempts to reenter the environment 765*in an absentee process, the process is logged out with a 766*special message */ 767 768 /* THERE IS CODE HERE COPIED FROM LOGOUT */ 769 /* so that the special error code can be put in the structures. */ 770 /* someday there should be logout_ */ 771 772 declare error_table_$abs_reenter fixed bin (35) ext; 773 declare convert_status_code_ entry (fixed binary (35), character (8) aligned, character (100) aligned); 774 declare execute_epilogue_ entry (bit (1) aligned); 775 declare print_abs_msg_$logout entry; 776 declare ioa_ entry () options (variable); 777 declare terminate_process_ entry (character (*), pointer); 778 declare signal_ entry options (variable); 779 780 declare try_message bit (1) aligned internal static init ("1"b); 781 declare long character (100) aligned; 782 declare 1 FINISH_INFO aligned like finish_info; 783 dcl 1 term_structure aligned, /* action for process termination */ 784 2 version fixed bin init (0), /* indicates version of structure */ 785 2 ec fixed bin (35); 786 787 if try_message 788 then do; 789 try_message = "0"b; 790 call convert_status_code_ (error_table_$abs_reenter, "", long); 791 call ioa_ ("^/^a", long); 792 call print_abs_msg_$logout; 793 end; 794 FINISH_INFO.length = size (FINISH_INFO); 795 FINISH_INFO.version = 1; 796 FINISH_INFO.info_string = ""; 797 unspec (FINISH_INFO.action_flags) = ""b; 798 FINISH_INFO.status_code = error_table_$abs_reenter; 799 call signal_ ("finish", null (), addr (FINISH_INFO)); 800 call execute_epilogue_ ("0"b); /* The "0"b says not just a run unit */ 801 term_structure.ec = error_table_$abs_reenter; 802 call terminate_process_ ("fatal_error", addr (term_structure)); 803 /* log the process out */ 804 end reenter; 805 806 set_trace_defaults: proc; 807 808 /* Fills in default tracing modes */ 809 810 dcl default_mode bit (1); 811 812 if abs_data.ec_data_ptr = null then default_mode = "1"b; 813 else if abs_data.ec_data_ptr -> ec_data.active_function then default_mode = "0"b; 814 else default_mode = "1"b; 815 816 call set_default (abs_data.command_line, default_mode, EXPANDED); 817 call set_default (abs_data.comment_line, "0"b, UNEXPANDED); 818 call set_default (abs_data.control_line, "0"b, UNEXPANDED); 819 call set_default (abs_data.input_line, default_mode, EXPANDED); 820 821 return; 822 823 824 set_default: proc (P_line, P_mode, P_expand); 825 826 dcl 1 P_line aligned like abs_data.command_line; 827 dcl P_mode bit (1); 828 dcl P_expand fixed bin; 829 830 P_line.on = P_mode; 831 P_line.expand = P_expand; 832 P_line.prefix = ""; 833 834 end set_default; 835 836 end set_trace_defaults; 837 1 1 /* START OF: abs_io_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(87-02-20,Parisek), approve(87-07-23,MCR7716), 1 6* audit(87-07-30,Fawcett), install(87-08-11,MR12.1-1080): 1 7* Added the noabort flag for determining whether or not to abort after 1 8* exec_com error occurs. 1 9* END HISTORY COMMENTS */ 1 10 1 11 1 12 /* Initial coding: 25 June 79 by J. Spencer Love */ 1 13 /* login_channel option flag BIM 11/81 */ 1 14 /* Added this_action and next_action 04/20/82 S. Herbst */ 1 15 /* Added on_info, goto_statement_(pos len) 01/06/83 S. Herbst */ 1 16 /* Added output_file.turn_off_ssw 05/16/83 S. Herbst */ 1 17 /* Added attach.trim_whitespace_sw 06/02/83 S. Herbst */ 1 18 /* Added listener_pl1_label and get_line_pl1_label 11/17/83 S. Herbst */ 1 19 /* Added (command comment control input)_line.by_control_arg 03/20/84 S. Herbst */ 1 20 1 21 declare abs_data_ptr ptr; 1 22 1 23 declare 1 abs_data aligned based (abs_data_ptr), 1 24 2 version fixed bin, /* Version = 1 */ 1 25 2 io_module_name char (32) varying, /* either "abs_io_" or "ec_input_" */ 1 26 2 open_description char (24) varying, /* either "stream_input" or "stream_input_output" */ 1 27 2 unique_name char (15) varying, /* &! -- either blank or 15 char unique string */ 1 28 /* */ 1 29 2 ec_data_ptr ptr, /* -> communication area for exec_com */ 1 30 2 expand_data_ptr ptr, /* -> structure for abs_io_expand_ */ 1 31 /* */ 1 32 2 instance_chain, /* two way linked chain of abs_data blocks for debugging */ 1 33 3 prev_ptr ptr, /* -> next older abs_data instance */ 1 34 3 next_ptr ptr, /* -> next newer abs_data instance */ 1 35 3 level fixed bin, /* level of ec invocation in chain for debugging */ 1 36 3 pad bit (36), /* */ 1 37 /* */ 1 38 2 arg_info, /* */ 1 39 3 ec_path_ptr ptr, /* Ptr to allocated &ec_path string */ 1 40 3 ec_path_len fixed bin (21), /* Length of allocated &ec_path (&0) string */ 1 41 3 ec_path_quotes fixed bin (21), /* Number of quote chars in &ec_path, -1 if not yet counted */ 1 42 3 ec_name_ptr ptr, /* Ptr to allocated &ec_name string */ 1 43 3 ec_name_len fixed bin (21), /* Length of allocated &ec_name string */ 1 44 3 ec_name_quotes fixed bin (21), /* Number of quote chars in &ec_name, -1 if not yet counted */ 1 45 3 arg_ptr ptr, /* pointer to allocated structure containing args */ 1 46 3 arg_count fixed bin, /* number of arguments passed */ 1 47 3 args_copied bit (1), /* 1 indicates arguments were copied into work_area */ 1 48 3 default_arg_ptr ptr, /* pointer to allocated &default args */ 1 49 3 default_arg_count fixed bin, /* number of &default args */ 1 50 3 pad bit (36), /* */ 1 51 /* */ 1 52 2 input_string, /* data about input segment or archive component */ 1 53 3 ptr ptr, /* pointer to input file */ 1 54 3 len fixed bin (21), /* number of characters in input file */ 1 55 3 start fixed bin (21), /* initial value for input_pos, set beyond &version, if any */ 1 56 3 position fixed bin (21), /* current index into input file */ 1 57 3 limit fixed bin (21), /* farthest point yet reached...begin &label search here */ 1 58 /* */ 1 59 2 open_data, /* data saved at attach time for open time */ 1 60 3 output_dir char (168) unal, /* directory pathname of output file (if specified) */ 1 61 3 output_entry char (32) unal, /* entryname of output file (if specified) */ 1 62 3 parser_version fixed bin, /* indicates version of parser (get_line) for open */ 1 63 3 si bit (1) unal, /* 1 indicates opening for stream_input permitted */ 1 64 3 sio bit (1) unal, /* 1 indicates opening for stream_input_output permitted */ 1 65 3 ssf bit (1) unal, /* 1 indicates output file cannot be MSF */ 1 66 3 truncate bit (1) unal, /* 1 indicates output file truncated at open */ 1 67 3 no_set_bc bit (1) unal, /* 1 to set absout bitcount only at close */ 1 68 3 login_channel bit (1) unal, /* 1 to fish arguments from PIT */ 1 69 3 pad bit (30) unal, /* */ 1 70 /* */ 1 71 2 output_file, /* data for abs_io_put_chars */ 1 72 3 fcb_ptr ptr, /* -> File Control Block for msf_manager_, null if SSF */ 1 73 3 seg_ptr ptr, /* -> base of current component of output file */ 1 74 3 current_len fixed bin (21), /* number of characters in current component */ 1 75 3 max_len fixed bin (21), /* max number of characters in a component */ 1 76 3 MSF_seg_idx fixed bin, /* index of current MSF component. Used to get new ones */ 1 77 3 switches aligned, 1 78 4 may_be_MSF bit (1) unaligned, /* 1 indicates absout can become an MSF */ 1 79 4 turn_off_ssw bit (1) unaligned, /* 1 means safety switch of absout was off originally */ 1 80 4 mbz bit (34) unaligned, 1 81 /* */ 1 82 2 command_line, /* substructure dealing with tracing command lines */ 1 83 3 by_control_arg bit (1) unaligned, /* 1 if trace modes specified by ec control arg */ 1 84 3 on bit (1) unaligned, /* 1 to print tracing information */ 1 85 3 expand fixed bin (3) unal, /* 1 to print unexpanded, 2 expanded, 3 all, 4 both */ 1 86 3 pad1 bit (66) unaligned, /* pad to double word */ 1 87 3 iocb ptr, /* I/O switch to put trace out on */ 1 88 3 prefix char (32) varying, /* prefix for &trace tracing, eg. "COMMAND: " */ 1 89 3 pad2 bit (36), /* */ 1 90 2 (comment_line, /* for tracing comments..always unexpanded */ 1 91 control_line, /* for tracing control lines */ 1 92 input_line) /* for tracing input lines in &attach mode */ 1 93 like abs_data.command_line, 1 94 /* */ 1 95 2 attach, /* */ 1 96 3 victim_ptr ptr, /* -> IOCB affected by &attach (usually iox_$user_input */ 1 97 3 target_ptr ptr, /* -> IOCB &attached to (created by exec_com command) */ 1 98 3 save_ptr ptr, /* -> IOCB used to save previous victim_ptr -> IOCB */ 1 99 3 switches, 1 100 4 trim_whitespace_sw bit (1) unaligned, /* OFF for &attach &trim off, ON by default */ 1 101 4 noabort bit (1) unaligned, /* ON if continue after severity 1 error */ 1 102 4 pad bit (34) unaligned, 1 103 /* */ 1 104 2 allocated_chars_ptr ptr, /* -> allocated buffer for freeing */ 1 105 2 chars_ptr ptr, /* -> characters in buffer waiting to be returned */ 1 106 2 else_clause_ptr ptr, /* -> characters in deferred else clause */ 1 107 2 allocated_chars_len fixed bin (21), /* total length of allocated buffer */ 1 108 2 chars_len fixed bin (21), /* characters left in buffer to be returned */ 1 109 2 else_clause_len fixed bin (21), /* length of deferred else clause */ 1 110 /* */ 1 111 2 absentee bit (1), /* 1 indicates logout on &quit */ 1 112 2 quit bit (1), /* 1 indicates orderly exit, quit or return */ 1 113 /* */ 1 114 2 active bit (1), /* 1 indicates get_line is busy, for recursion check */ 1 115 2 eof bit (1), /* 1 indicates &quit found or no more input */ 1 116 2 last_input_line_sw bit (1), /* previous line returned was an input line */ 1 117 2 label_search_sw bit (1), /* ON when searching for target of &goto */ 1 118 2 nest_level fixed bin, /* V1: depth of &if-&then-&else nesting */ 1 119 2 expected_nest_level fixed bin, /* V1: depth that must be reached to resume execution */ 1 120 /* */ 1 121 2 goto_statement_pos fixed bin (21), /* position of last &goto stmt, for error msgs */ 1 122 2 goto_statement_len fixed bin (21), /* length of the &goto stmt */ 1 123 1 124 2 if_info aligned, /* &if-&then-&else nesting info */ 1 125 3 if_sw bit (1), /* ON if inside an &if-&then-&else construct */ 1 126 3 true_sw bit (1), /* ON after "&if true" */ 1 127 3 got_then_sw bit (1), /* ON after the &then has been seen */ 1 128 3 got_else_sw bit (1), /* ON after the &else has been seen */ 1 129 3 clause_type fixed bin, /* previous &then or &else */ 1 130 3 skip_sw bit (1), /* ON if skipping a &then or &else clause */ 1 131 3 skip_block_level fixed bin, /* how many levels of &do we are inside while skipping */ 1 132 3 prev_if_ptr ptr, /* ptr to if_info (saved) of &if we are nested inside */ 1 133 3 this_action fixed bin, /* copy of expand_data.this_statement.action */ 1 134 3 next_action fixed bin, /* copy of expand_data.next_statement.action */ 1 135 1 136 2 on_info aligned, /* info pertaining to &on units in the ec */ 1 137 3 cleanup_handler_ptr ptr, /* -> node for cleanup handler if any */ 1 138 3 first_handler_ptr ptr, /* -> top of chain of nodes for other handlers */ 1 139 3 switches aligned, 1 140 4 was_attached_sw bit (1) unal, /* 1 indicates parent ec was &attach'ed */ 1 141 4 in_handler_sw bit (1) unal, /* 1 indicates we are now executing some handler text */ 1 142 4 exit_sw bit (1) unal, /* 1 indicates ready to exit the handler via &exit or &goto */ 1 143 4 goto_sw bit (1) unal, /* 1 means this exit is accomplished by a nonlocal &goto */ 1 144 4 continue_to_signal_sw bit (1) unal, /* 1 means &continue_to_signal was executed */ 1 145 4 pad bit (31) unal, 1 146 3 handler_node_ptr ptr, /* -> parent's handler_node for this condition */ 1 147 3 parent_abs_data_ptr ptr, /* -> abs_data structure of parent ec */ 1 148 3 condition_info aligned, /* selected condition info if in_handler_sw is ON */ 1 149 4 condition_name char (32), /* name of condition signalled */ 1 150 4 mc_ptr ptr, /* machine conditions ptr for signal_ */ 1 151 4 info_ptr ptr, /* ptr to specific condition info, for signal_ */ 1 152 4 wc_ptr ptr, /* machine conditions for lower ring fault, for signal_ */ 1 153 3 goto_label_ptr ptr, /* -> &goto label if goto_sw is on */ 1 154 3 goto_label_len fixed bin (21), /* length of the &goto label */ 1 155 3 listener_pl1_label label variable, /* for nonlocal goto to parent ec's listener's stack frame */ 1 156 3 get_line_pl1_label label variable, /* for nonlocal goto to parent ec's get_line's stack frame */ 1 157 /* */ 1 158 2 saved_state_ptr ptr, /* -> top of parser stack */ 1 159 2 current_lex_block_ptr ptr, /* -> lex_block for current block position */ 1 160 2 current_proc_block_ptr ptr, /* -> proc block for current procedure */ 1 161 2 last_block_ptr ptr, /* -> last lex or proc block that has been allocated */ 1 162 2 current_loop_ptr ptr, /* -> loop_block for current active loop */ 1 163 2 last_loop_ptr ptr, /* -> last loop block that has been allocated */ 1 164 /* */ 1 165 2 labels_ptr ptr, /* hash table ptr for label hash table */ 1 166 2 first_xlabel_ptr ptr, /* first expandable label */ 1 167 2 last_xlabel_ptr ptr, /* last expandable label */ 1 168 2 variables_ptr ptr, /* hash table ptr for variable hash table */ 1 169 /* */ 1 170 2 timed_input bit (1), /* 1 indicates input requests may be delayed */ 1 171 2 low_sleep_time fixed bin (35), /* low sleep time for timed input */ 1 172 2 sleep_time_range fixed bin (35), /* high sleep time for timed input */ 1 173 2 seed fixed bin (35), /* seed for timed input random numbers */ 1 174 /* */ 1 175 2 work_area area (800); /* extensible area for args, etc. */ 1 176 1 177 declare abs_data_version_1 fixed bin static options (constant) initial (1), 1 178 Work_area_size fixed bin static options (constant) initial (800); 1 179 1 180 dcl (UNEXPANDED init (1), EXPANDED init (2), ALL init (3), BOTH init (4)) 1 181 fixed bin int static options (constant); 1 182 1 183 /* END OF: abs_io_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 838 839 2 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 2 2 2 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 2 4 2 5 dcl area_infop ptr; 2 6 2 7 dcl 1 area_info aligned based (area_infop), 2 8 2 version fixed bin, /* version number for this structure is 1 */ 2 9 2 control aligned like area_control, /* control bits for the area */ 2 10 2 owner char (32) unal, /* creator of the area */ 2 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 2 12 2 size fixed bin (18), /* size of the area in words */ 2 13 2 version_of_area fixed bin, /* version of area (returned only) */ 2 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 2 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 2 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 2 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 2 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 2 19 2 20 dcl 1 area_control aligned based, 2 21 2 extend bit (1) unal, /* says area is extensible */ 2 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 2 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 2 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 2 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 2 26 2 system bit (1) unal, /* says area is managed by system */ 2 27 2 pad bit (30) unal; 2 28 2 29 /* END INCLUDE FILE area_info.incl.pl1 */ 840 841 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 */ 842 843 4 1 /* START OF: ec_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 4 2 4 3 declare ec_data_ptr ptr; 4 4 4 5 declare 1 ec_data aligned based (ec_data_ptr), 4 6 2 version_id char (4), /* " ec " */ 4 7 2 version fixed bin, /* 1 */ 4 8 2 active_function bit (1), /* This affects &is_af and &return */ 4 9 2 return_len fixed bin (21), /* maximum length and pointer to varying character string */ 4 10 2 return_ptr ptr, /* for active function return value */ 4 11 2 execute_line entry (ptr, fixed bin (21), fixed bin (35)), 4 12 2 eval_string entry (ptr, char (*), fixed bin, char (*) var, fixed bin (35)), 4 13 2 set_ready_mode entry (1 aligned, 2 bit (1) unal, 2 bit (35) unal), 4 14 2 error entry () options (variable), 4 15 2 switch_ptr ptr, /* switch affected by &attach */ 4 16 2 id_string char (19), /* name string for &attach save switch should contain this */ 4 17 2 input_line bit (1), /* this makes the command_line/input_line distinction */ 4 18 2 call_ready_proc bit (1), /* this implements the &ready_proc keyword */ 4 19 2 who_am_i char (72) varying; /* for error messages. It's 72 chars for subsystem requests */ 4 20 4 21 declare ec_data_version_id char (4) aligned static options (constant) initial (" ec "), 4 22 ec_data_version_1 fixed bin static options (constant) initial (1); 4 23 4 24 /* END OF: ec_data.incl.pl1 * * * * * * * * * * * * * * * * * * * */ 844 845 5 1 /* Begin include file finish_info.incl.pl1 3/82 BIM */ 5 2 /* format: style3 */ 5 3 /* condition_info_header.incl.pl1 must be included with this file */ 5 4 5 5 declare finish_info_ptr pointer; 5 6 declare 1 finish_info aligned based (finish_info_ptr), 5 7 2 header aligned like condition_info_header, 5 8 2 type character (8) aligned; 5 9 5 10 /* End include file finish_info.incl.pl1 */ 846 847 6 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 6 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 6 3* version number to IOX2. */ 6 4 /* format: style2 */ 6 5 6 6 dcl 1 iocb aligned based, /* I/O control block. */ 6 7 2 version character (4) aligned, /* IOX2 */ 6 8 2 name char (32), /* I/O name of this block. */ 6 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 6 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 6 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 6 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 6 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 6 14 2 reserved bit (72), /* Reserved for future use. */ 6 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 6 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 6 17 /* open(p,mode,not_used,s) */ 6 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 6 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 20 /* get_line(p,bufptr,buflen,actlen,s) */ 6 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 6 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 6 24 /* put_chars(p,bufptr,buflen,s) */ 6 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 6 26 /* modes(p,newmode,oldmode,s) */ 6 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 6 28 /* position(p,u1,u2,s) */ 6 29 2 control entry (ptr, char (*), ptr, fixed (35)), 6 30 /* control(p,order,infptr,s) */ 6 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 6 32 /* read_record(p,bufptr,buflen,actlen,s) */ 6 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 6 34 /* write_record(p,bufptr,buflen,s) */ 6 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 6 36 /* rewrite_record(p,bufptr,buflen,s) */ 6 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 6 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 39 /* seek_key(p,key,len,s) */ 6 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 6 41 /* read_key(p,key,len,s) */ 6 42 2 read_length entry (ptr, fixed (21), fixed (35)), 6 43 /* read_length(p,len,s) */ 6 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 6 45 /* open_file(p,mode,desc,not_used,s) */ 6 46 2 close_file entry (ptr, char (*), fixed bin (35)), 6 47 /* close_file(p,desc,s) */ 6 48 2 detach entry (ptr, char (*), fixed bin (35)); 6 49 /* detach(p,desc,s) */ 6 50 6 51 declare iox_$iocb_version_sentinel 6 52 character (4) aligned external static; 6 53 6 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 848 849 7 1 /* Begin include file ..... iox_modes.incl.pl1 */ 7 2 7 3 /* Written by C. D. Tavares, 03/17/75 */ 7 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 7 5 7 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 7 7 ("stream_input", "stream_output", "stream_input_output", 7 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 7 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 7 10 "direct_input", "direct_output", "direct_update"); 7 11 7 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 7 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 7 14 7 15 dcl (Stream_input initial (1), 7 16 Stream_output initial (2), 7 17 Stream_input_output initial (3), 7 18 Sequential_input initial (4), 7 19 Sequential_output initial (5), 7 20 Sequential_input_output initial (6), 7 21 Sequential_update initial (7), 7 22 Keyed_sequential_input initial (8), 7 23 Keyed_sequential_output initial (9), 7 24 Keyed_sequential_update initial (10), 7 25 Direct_input initial (11), 7 26 Direct_output initial (12), 7 27 Direct_update initial (13)) fixed bin int static options (constant); 7 28 7 29 /* End include file ..... iox_modes.incl.pl1 */ 850 851 852 853 end abs_io_$abs_io_attach; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/11/87 0926.1 abs_io_.pl1 >spec>install>MR12.1-1080>abs_io_.pl1 838 1 08/11/87 0925.5 abs_io_data.incl.pl1 >spec>install>MR12.1-1080>abs_io_data.incl.pl1 840 2 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 842 3 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>include>condition_info_header.incl.pl1 844 4 04/13/82 1620.2 ec_data.incl.pl1 >ldd>include>ec_data.incl.pl1 846 5 04/21/82 1211.8 finish_info.incl.pl1 >ldd>include>finish_info.incl.pl1 848 6 05/20/83 1846.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 850 7 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. EXPANDED 000176 constant fixed bin(17,0) initial dcl 1-180 set ref 816* 819* FINISH_INFO 000641 automatic structure level 1 dcl 782 set ref 794 799 799 NL constant char(1) initial unaligned dcl 74 ref 250 P_abs_data_ptr parameter pointer dcl 35 set ref 484 488* 495 497 P_attach_args parameter varying char array dcl 35 set ref 10 149 183 190 269* 270* 650 651 703 711* P_expand parameter fixed bin(17,0) dcl 828 ref 824 831 P_iocb_ptr parameter pointer dcl 35 ref 10 149 314 354 363 413 422 450 459 P_line parameter structure level 1 dcl 826 set ref 824 P_mode parameter bit(1) unaligned dcl 827 ref 824 830 P_opening_mode parameter fixed bin(17,0) dcl 35 ref 354 366 366 369 390 392 P_report_switch parameter bit(1) dcl 35 ref 10 149 354 587 588 P_status parameter fixed bin(35,0) dcl 35 set ref 10 149 349* 354 399* 413 446* 450 480* 586* 587* 591* Stream_input constant fixed bin(17,0) initial dcl 7-15 ref 366 Stream_input_output constant fixed bin(17,0) initial dcl 7-15 ref 366 369 390 UNEXPANDED 000200 constant fixed bin(17,0) initial dcl 1-180 set ref 817* 818* WHITE 000116 constant char(5) initial unaligned dcl 76 ref 244 253 256 256 256 256 Work_area_size constant fixed bin(17,0) initial dcl 1-177 ref 627 abs_data based structure level 1 dcl 1-23 set ref 515 521* 557 abs_data_ptr 000400 automatic pointer dcl 1-21 set ref 158* 170 170 170 171 171 172 172 172 173 173 173 173 175 175 175 177 177 177 177 209 211 244 244 244 244 244 246 247 247 250 250 253 253 256 256 256 256 256 258 258 258 258 258 258 262 262 262 263 263 269* 279 280 281 281 282 282 289 289 289 293 293 295 297 298 301 320 325 326 327 328 328 331 331 332 332 364* 366 366 371* 371 371 371 371 374 377 377 377 377 378 379 379 379 380 380 380 381 381 382 386 392 393 401 401 423* 425 427* 431 431* 433 433 434 434 460* 466 466 466 468 468 468 470 488 497* 515* 521 523 546 550 550 552 553 555 555 557 607 609 609 609 610 610 611 611 611 611 612 612 612 613 613 617 628 666 668 671 675 675 679 681 683 683 683 683 685 685 688 688 691 691 691 692 692 695 696 703 703 708 708 715 725 726 728 728 755* 812 813 816 817 818 819 abs_data_version_1 constant fixed bin(17,0) initial dcl 1-177 ref 523 abs_entry 000122 automatic bit(1) dcl 53 set ref 144* 152* 198 209 211 230 279 614 700 abs_io_control 000044 constant entry external dcl 113 ref 321 338 abs_io_control$close 000046 constant entry external dcl 114 ref 431 abs_io_control$set_arguments 000050 constant entry external dcl 115 ref 269 755 abs_io_data_chain_ptr_ 000014 external static pointer initial dcl 97 set ref 326 327* 470* abs_io_put_chars 000052 constant entry external dcl 116 ref 390 abs_io_put_chars$close 000054 constant entry external dcl 117 ref 427 abs_io_put_chars$open 000056 constant entry external dcl 118 ref 371 abs_io_v1_get_line 000060 constant entry external dcl 119 ref 386 abs_io_v2_get_line 000062 constant entry external dcl 120 ref 388 absentee 273 based bit(1) level 2 dcl 1-23 set ref 279* 281 401 absin_len 000424 automatic fixed bin(17,0) dcl 640 set ref 718* 719 719 719 719 absin_path 000515 automatic char(168) unaligned dcl 660 set ref 661* 663* 664* 707* 708* action_flags 2 000641 automatic structure level 3 dcl 782 set ref 797* active 275 based bit(1) level 2 dcl 1-23 set ref 433* active_function 2 based bit(1) level 2 dcl 4-5 ref 813 actual_iocb_ptr 12 based pointer level 2 dcl 6-6 ref 363 422 addr builtin function dcl 44 ref 393 533 533 555 555 628 630 630 650 691 799 799 802 802 addrel builtin function dcl 44 ref 650 allocated_chars based char unaligned dcl 90 ref 377 allocated_chars_len 270 based fixed bin(21,0) level 2 dcl 1-23 set ref 377 377 380* allocated_chars_ptr 262 based pointer level 2 dcl 1-23 set ref 170* 377 377 any_other 000100 stack reference condition dcl 48 ref 307 359 418 455 area 000106 stack reference condition dcl 48 ref 228 303 511 517 area_control based structure level 1 dcl 2-20 area_data 000206 automatic structure level 1 dcl 70 set ref 630 630 area_info based structure level 1 dcl 2-7 area_info_version_1 constant fixed bin(17,0) initial dcl 2-3 ref 622 areap 16 000206 automatic pointer level 2 dcl 70 set ref 628* arg based char unaligned dcl 748 in begin block on line 745 ref 752 arg based char unaligned dcl 640 in procedure "initiate_input_path" set ref 653* 654* arg_count 000123 automatic fixed bin(17,0) dcl 53 set ref 183* 188 201 206 226 235 266 arg_info 40 based structure level 2 dcl 1-23 arg_len 000577 automatic fixed bin(21,0) dcl 738 in procedure "process_login_arguments" set ref 751* 752 arg_len 000425 automatic fixed bin(21,0) dcl 640 in procedure "initiate_input_path" set ref 651* 652 653 653 654 654 arg_list_arg_count 000102 automatic fixed bin(17,0) dcl 569 set ref 585* 587 arg_ptr 000426 automatic pointer dcl 640 in procedure "initiate_input_path" set ref 650* 653 654 arg_ptr 000100 automatic pointer dcl 747 in begin block on line 745 set ref 751* 752 arg_ptr 50 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 177* arg_str 000124 automatic char(100) unaligned dcl 53 set ref 190* 191 193 193 195 195 196 196 198 199 199 204 204 209 209 211 211 213* args 000100 automatic varying char array dcl 746 set ref 752* 755* 756* argx 000601 automatic fixed bin(17,0) dcl 740 set ref 750* 751* 752* attach 252 based structure level 2 dcl 1-23 attach_data_ptr 16 based pointer level 2 dcl 6-6 set ref 320* 364 423 460 attach_descrip 000232 automatic varying char(400) dcl 87 set ref 288* 289* 289 292* 292 293* 293 294* 294 295* 295 297* 297 298* 298 299* 299 301 301 301 attach_descrip_ptr 14 based pointer level 2 dcl 6-6 set ref 316 322* 462* attach_description based varying char initial dcl 88 set ref 301 301* attach_description_ptr 000156 automatic pointer dcl 53 set ref 301* 322 bad_area_format 000000 stack reference condition dcl 48 ref 512 518 bad_area_initialization 000000 stack reference condition dcl 48 ref 513 519 bit_count 000430 automatic fixed bin(24,0) dcl 640 set ref 666* 671 chars_len 271 based fixed bin(21,0) level 2 dcl 1-23 set ref 380* chars_ptr 264 based pointer level 2 dcl 1-23 set ref 170* 379* cleanup 000114 stack reference condition dcl 48 ref 162 312 474 cleanup_handler_ptr 322 based pointer level 3 dcl 1-23 set ref 613* close 36 based entry variable level 2 dcl 6-6 set ref 384* com_err_ 000140 constant entry external dcl 572 ref 587 588 588 command_line 162 based structure level 2 dcl 1-23 set ref 816* comment_line 200 based structure level 2 dcl 1-23 set ref 817* condition_info_header based structure level 1 dcl 3-6 continue_to_signal_ 000134 constant entry external dcl 530 ref 535 control 1 000206 automatic structure level 2 in structure "area_data" dcl 70 in procedure "abs_io_$abs_io_attach" set ref 623* control 66 based entry variable level 2 in structure "iocb" dcl 6-6 in procedure "abs_io_$abs_io_attach" set ref 321* control_line 216 based structure level 2 dcl 1-23 set ref 818* convert_status_code_ 000164 constant entry external dcl 773 ref 790 cu_$arg_count 000146 constant entry external dcl 576 ref 585 cu_$arg_list_ptr 000150 constant entry external dcl 577 ref 588 588 590 590 cu_$arg_ptr 000152 constant entry external dcl 578 ref 584 cu_$generate_call 000154 constant entry external dcl 579 ref 588 cu_$set_cl_intermediary 000066 constant entry external dcl 122 ref 408 current_lex_block_ptr 370 based pointer level 2 dcl 1-23 set ref 610* current_loop_ptr 376 based pointer level 2 dcl 1-23 set ref 611* current_proc_block_ptr 372 based pointer level 2 dcl 1-23 set ref 610* cv_dec_check_ 000064 constant entry external dcl 121 ref 256 default_arg_ptr 54 based pointer level 3 dcl 1-23 set ref 177* default_mode 000760 automatic bit(1) unaligned dcl 810 set ref 812* 813* 814* 816* 819* define_area_ 000070 constant entry external dcl 123 ref 630 detach_iocb 26 based entry variable level 2 dcl 6-6 set ref 343* 438* divide builtin function dcl 44 ref 671 ec 1 000750 automatic fixed bin(35,0) level 2 dcl 783 set ref 801* ec_data based structure level 1 dcl 4-5 ec_data_ptr 26 based pointer level 2 dcl 1-23 set ref 172* 812 813 ec_name_len 46 based fixed bin(21,0) level 3 dcl 1-23 set ref 695* 696 ec_name_ptr 44 based pointer level 3 dcl 1-23 set ref 177* 691* ec_name_quotes 47 based fixed bin(21,0) level 3 dcl 1-23 set ref 675* ec_path based char unaligned dcl 91 set ref 289* 683 685* 688* 691 692* ec_path_len 42 based fixed bin(21,0) level 3 dcl 1-23 set ref 289 289 679* 681* 683 683 685 688 691 692 ec_path_ptr 40 based pointer level 3 dcl 1-23 set ref 177* 289 683* 685 688 691 692 ec_path_quotes 43 based fixed bin(21,0) level 3 dcl 1-23 set ref 675* else_clause_len 272 based fixed bin(21,0) level 2 dcl 1-23 set ref 380* else_clause_ptr 266 based pointer level 2 dcl 1-23 set ref 170* 379* empty builtin function dcl 44 ref 515 eof 276 based bit(1) level 2 dcl 1-23 set ref 433* error_table_$abs_reenter 000162 external static fixed bin(35,0) dcl 772 set ref 790* 798 801 error_table_$bad_mode 000022 external static fixed bin(35,0) dcl 99 set ref 366* error_table_$badopt 000024 external static fixed bin(35,0) dcl 99 set ref 213* error_table_$badpath 000026 external static fixed bin(35,0) dcl 99 set ref 652* 696* error_table_$entlong 000030 external static fixed bin(35,0) dcl 99 set ref 723* error_table_$inconsistent 000032 external static fixed bin(35,0) dcl 99 set ref 220* error_table_$noalloc 000016 external static fixed bin(35,0) dcl 99 set ref 228* 511* error_table_$noarg 000034 external static fixed bin(35,0) dcl 99 set ref 224* 235* error_table_$not_detached 000036 external static fixed bin(35,0) dcl 99 set ref 316* error_table_$notalloc 000020 external static fixed bin(35,0) dcl 99 set ref 512* 513* error_table_$unable_to_do_io 000040 external static fixed bin(35,0) dcl 99 ref 155 error_table_$unimplemented_version 000042 external static fixed bin(35,0) dcl 99 set ref 251* 253* 258* execute_epilogue_ 000166 constant entry external dcl 774 ref 800 expand 0(02) parameter fixed bin(3,0) level 2 packed unaligned dcl 826 set ref 831* expand_data_ptr 30 based pointer level 2 dcl 1-23 set ref 172* expand_pathname_ 000072 constant entry external dcl 124 ref 653 663 703 708 expected_nest_level 302 based fixed bin(17,0) level 2 dcl 1-23 set ref 434* extend 1 000206 automatic bit(1) level 3 packed unaligned dcl 70 set ref 624* fcb_ptr 152 based pointer level 3 dcl 1-23 set ref 175* finish_info based structure level 1 dcl 5-6 first_arg 000160 automatic fixed bin(17,0) dcl 53 set ref 185* 188 193* 217* 220 226 226* 235 236* 237* 237 266 266 269* 270 first_handler_ptr 324 based pointer level 3 dcl 1-23 set ref 613* first_xlabel_ptr 404 based pointer level 2 dcl 1-23 set ref 609* get_line 42 based entry variable level 2 dcl 6-6 set ref 386* 388* get_system_free_area_ 000074 constant entry external dcl 125 ref 515 hbound builtin function dcl 44 ref 183 hcs_$initiate_count 000076 constant entry external dcl 126 ref 666 hcs_$reset_ips_mask 000100 constant entry external dcl 127 ref 347 397 444 476 581 hcs_$set_ips_mask 000102 constant entry external dcl 128 ref 309 361 420 457 hcs_$set_max_length_seg 000104 constant entry external dcl 129 ref 407 hcs_$terminate_noname 000106 constant entry external dcl 130 ref 554 header 000641 automatic structure level 2 dcl 782 idx 000161 automatic fixed bin(17,0) dcl 53 set ref 188* 190 193 201 202 202* 206 207 207* 216 217* 250* 251 253 256 256 258 258 262 263 if_info 306 based structure level 2 dcl 1-23 set ref 378* index builtin function dcl 44 ref 191 250 695 716 info_string 3 000641 automatic varying char(256) level 3 dcl 782 set ref 796* initialized 000162 automatic bit(1) unaligned dcl 53 set ref 159* 179* 472* 548 input_dir 000431 automatic char(168) unaligned dcl 640 set ref 653* 663* 666* 668* 668* 677 685 715 input_dir_len 000503 automatic fixed bin(21,0) dcl 640 set ref 677* 679 681 685 685 686 688 689* 689 691 692 693* 693 input_entry 000504 automatic char(32) unaligned dcl 640 set ref 653* 663* 666* 668* 668* 678 692 695 716 719 723 725 input_entry_len 000514 automatic fixed bin(21,0) dcl 640 set ref 678* 679 681 692 692 693 695 695 716* 716 716 719 719 719* 719 723 725 725 726 input_file based char unaligned dcl 92 ref 244 244 250 253 256 256 258 258 input_line 234 based structure level 2 dcl 1-23 set ref 819* input_string 60 based structure level 2 dcl 1-23 instance_chain 32 based structure level 2 dcl 1-23 io_module_name 1 based varying char(32) level 2 dcl 1-23 set ref 607* ioa_ 000172 constant entry external dcl 776 ref 791 ioa_$general_rs 000144 constant entry external dcl 574 ref 590 iocb 236 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 173* iocb 202 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 173* iocb based structure level 1 dcl 6-6 in procedure "abs_io_$abs_io_attach" iocb 164 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 173* iocb 220 based pointer level 3 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 173* iocb_ptr 000164 automatic pointer dcl 53 set ref 314* 316 316 316* 320 321 322 338* 342 343 345* 363* 364 384 386 388 390 393 395* 422* 423 437 438 440 442* 459* 460 462 464* iox_$destroy_iocb 000110 constant entry external dcl 131 ref 550 iox_$propagate 000112 constant entry external dcl 132 ref 345 395 442 464 iox_modes 000000 constant char(24) initial array dcl 7-6 ref 392 labels_ptr 402 based pointer level 2 dcl 1-23 set ref 609* last_block_ptr 374 based pointer level 2 dcl 1-23 set ref 611* last_loop_ptr 400 based pointer level 2 dcl 1-23 set ref 611* last_xlabel_ptr 406 based pointer level 2 dcl 1-23 set ref 609* len 62 based fixed bin(21,0) level 3 dcl 1-23 set ref 244 244 244 250 253 256 256 258 258 671* length builtin function dcl 44 in procedure "abs_io_$abs_io_attach" ref 301 301 651 677 678 718 723 length 000641 automatic fixed bin(17,0) level 3 in structure "FINISH_INFO" dcl 782 in procedure "reenter" set ref 794* level 36 based fixed bin(17,0) level 3 dcl 1-23 set ref 328* 332* 332 limit 65 based fixed bin(21,0) level 3 dcl 1-23 set ref 247* 262* 263* login_channel 151(05) based bit(1) level 3 packed unaligned dcl 1-23 set ref 280* 401 login_channel_sw 000166 automatic bit(1) unaligned dcl 53 set ref 186* 198* 220 232 266 280 289 299 700 long 000610 automatic char(100) dcl 781 set ref 790* 791* ltrim builtin function dcl 44 ref 256 256 mask 000167 automatic bit(36) unaligned dcl 53 set ref 160* 309* 309* 347* 347* 357* 361* 361* 397* 397* 416* 420* 420* 444* 444* 453* 457* 457* 476* 476* 533 581* 581* masked_sw 000170 automatic bit(1) initial unaligned dcl 53 set ref 53* 310* 581 max_arg_len 000600 automatic fixed bin(21,0) dcl 739 set ref 742* 746 maxlength builtin function dcl 44 ref 723 message 000103 automatic char(256) unaligned dcl 570 set ref 590* 591* min builtin function dcl 44 ref 244 n_args 000576 automatic fixed bin(17,0) dcl 737 set ref 742* 743 746 750 name 1 based char(32) level 2 dcl 6-6 set ref 316* nest_level 301 based fixed bin(17,0) level 2 dcl 1-23 set ref 434* next_ptr 34 based pointer level 3 dcl 1-23 set ref 171* 325* 331* 466* 466 468 468 no_set_bc_sw 000171 automatic bit(1) unaligned dcl 53 set ref 186* 195* 196* 335 null builtin function dcl 44 ref 158 170 171 172 173 175 177 316 325 328 338 338 377 379 425 431 440 462 466 468 546 550 553 554 591 591 609 610 611 612 613 668 799 799 812 on 0(01) parameter bit(1) level 2 packed unaligned dcl 826 set ref 830* on_info 322 based structure level 2 dcl 1-23 open 32 based entry variable level 2 dcl 6-6 set ref 342* 437* open_data 66 based structure level 2 dcl 1-23 open_descrip_ptr 20 based pointer level 2 dcl 6-6 set ref 393* 440* open_description 12 based varying char(24) level 2 dcl 1-23 set ref 392* 393 output_arg 000172 automatic fixed bin(17,0) dcl 53 set ref 185* 199 202* 220 290 700 703 703 711 output_dir 66 based char(168) level 3 packed unaligned dcl 1-23 set ref 293 293 371* 703* 708* 715* 728* output_entry 140 based char(32) level 3 packed unaligned dcl 1-23 set ref 295 371* 703* 708* 725* 726* 728* output_file 152 based structure level 2 dcl 1-23 owner 2 000206 automatic char(32) level 2 packed unaligned dcl 70 set ref 626* p 000100 automatic pointer dcl 544 set ref 552* 554 554* parser_version 150 based fixed bin(17,0) level 3 dcl 1-23 set ref 246* 256* 258 258 262 386 path_arg 000173 automatic fixed bin(17,0) dcl 53 set ref 185* 204 207* 216 216* 220 224 240* path_idx parameter fixed bin(17,0) dcl 638 ref 635 650 651 pathname_ 000114 constant entry external dcl 133 ref 668 668 position 64 based fixed bin(21,0) level 3 dcl 1-23 set ref 381* prefix 4 parameter varying char(32) level 2 dcl 826 set ref 832* prev_if_ptr 316 based pointer level 3 dcl 1-23 set ref 379* prev_ptr 32 based pointer level 3 dcl 1-23 set ref 171* 326* 328 331 332 466 466 468* 468 470 print_abs_msg_$login 000132 constant entry external dcl 403 ref 405 print_abs_msg_$logout 000170 constant entry external dcl 775 ref 792 ptr 60 based pointer level 3 dcl 1-23 set ref 175* 244 244 250 253 256 256 258 258 552 553* 666* 668 put_chars 52 based entry variable level 2 dcl 6-6 set ref 390* release_area_ 000116 constant entry external dcl 134 ref 555 requote_string_ 000120 constant entry external dcl 135 ref 289 restarted 000414 automatic bit(1) dcl 602 set ref 615* 617 reverse builtin function dcl 44 ref 695 716 rtrim builtin function dcl 44 ref 256 256 293 295 651 677 678 save_ptr 256 based pointer level 3 dcl 1-23 set ref 550 550* 612* saved_state_ptr 366 based pointer level 2 dcl 1-23 set ref 611* search builtin function dcl 44 ref 244 seg_ptr 154 based pointer level 3 dcl 1-23 set ref 175* 425 si 151 based bit(1) level 3 packed unaligned dcl 1-23 set ref 282* 366 signal_ 000176 constant entry external dcl 778 ref 799 sio 151(01) based bit(1) level 3 packed unaligned dcl 1-23 set ref 281* 282 366 size builtin function dcl 44 in procedure "abs_io_$abs_io_attach" ref 794 size 13 000206 automatic fixed bin(18,0) level 2 in structure "area_data" dcl 70 in procedure "abs_io_$abs_io_attach" set ref 627* ssf 151(02) based bit(1) level 3 packed unaligned dcl 1-23 set ref 209* 298 371 stackbaseptr builtin function dcl 44 ref 407 407 start 63 based fixed bin(21,0) level 3 dcl 1-23 set ref 247* 262* 263* 381 status 000174 automatic fixed bin(35,0) dcl 53 set ref 256* 258 269* 270 270* 337* 338* 339 339* 371* 373 373* 427* 428 428* 550* 554* 630* 631 631* 653* 654 654* 663* 664 664* 666* 668* 703* 708* 711 711* 755* 756 756* status_arg based fixed bin(35,0) dcl 568 ref 586 status_code 1 000010 internal static fixed bin(35,0) level 2 in structure "unable_to_do_io" dcl 81 in procedure "abs_io_$abs_io_attach" set ref 155 155* status_code 104 000641 automatic fixed bin(35,0) level 3 in structure "FINISH_INFO" dcl 782 in procedure "reenter" set ref 798* status_ptr 000100 automatic pointer dcl 567 set ref 584* 586 string builtin function dcl 44 set ref 623* sub_err_ 000142 constant entry external dcl 573 ref 591 substr builtin function dcl 44 set ref 244 250 253 256 256 258 258 533 685* 685 688* 691 692* 692 695 716 719 725* 725 726* sys_area based area(1024) dcl 93 ref 515 target_ptr 254 based pointer level 3 dcl 1-23 set ref 431 612* term_structure 000750 automatic structure level 1 dcl 783 set ref 802 802 terminate_process_ 000136 constant entry external dcl 531 in procedure "any_other_handler" ref 533 terminate_process_ 000174 constant entry external dcl 777 in procedure "reenter" ref 802 truncate 000415 automatic bit(1) dcl 602 in procedure "initialize_abs_data" set ref 616* 617 truncate 151(03) based bit(1) level 3 in structure "abs_data" packed unaligned dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 211* 297 371 374* 617* try_message 000012 internal static bit(1) initial dcl 780 set ref 787 789* unable_to_do_io 000010 internal static structure level 1 dcl 81 set ref 533 533 unique_name 21 based varying char(15) level 2 dcl 1-23 set ref 382* unspec builtin function dcl 44 set ref 378* 521* 797* user_info_$absentee_restarted 000156 constant entry external dcl 601 ref 615 user_info_$absin 000124 constant entry external dcl 137 ref 661 user_info_$absout 000122 constant entry external dcl 136 ref 707 user_info_$absout_truncation 000160 constant entry external dcl 601 ref 616 user_info_$login_arg_count 000126 constant entry external dcl 138 ref 742 user_info_$login_arg_ptr 000130 constant entry external dcl 139 ref 751 variables_ptr 410 based pointer level 2 dcl 1-23 set ref 172* verify builtin function dcl 44 ref 253 version based fixed bin(17,0) level 2 in structure "abs_data" dcl 1-23 in procedure "abs_io_$abs_io_attach" set ref 523* version 1 000641 automatic fixed bin(17,0) level 3 in structure "FINISH_INFO" dcl 782 in procedure "reenter" set ref 795* version 000750 automatic fixed bin(17,0) initial level 2 in structure "term_structure" dcl 783 in procedure "reenter" set ref 783* version 000206 automatic fixed bin(17,0) level 2 in structure "area_data" dcl 70 in procedure "abs_io_$abs_io_attach" set ref 622* victim_ptr 252 based pointer level 3 dcl 1-23 set ref 612* whoami 000175 automatic varying char(32) dcl 53 set ref 145* 153* 199* 201* 204* 206* 213* 220* 224* 228* 235* 251* 253* 258* 270* 288 316* 498* 511* 512* 513* 587* 591 607 626 631* 652* 654* 664* 668* 696* 711* 723* 756* work_area 416 based area(800) level 2 dcl 1-23 set ref 301 515* 555 555 628 683 zero_on_free 1(02) 000206 automatic bit(1) level 3 packed unaligned dcl 70 set ref 625* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALL internal static fixed bin(17,0) initial dcl 1-180 BOTH internal static fixed bin(17,0) initial dcl 1-180 Direct_input internal static fixed bin(17,0) initial dcl 7-15 Direct_output internal static fixed bin(17,0) initial dcl 7-15 Direct_update internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 7-15 Sequential_input internal static fixed bin(17,0) initial dcl 7-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 7-15 Sequential_output internal static fixed bin(17,0) initial dcl 7-15 Sequential_update internal static fixed bin(17,0) initial dcl 7-15 Stream_output internal static fixed bin(17,0) initial dcl 7-15 area_infop automatic pointer dcl 2-5 condition_info_header_ptr automatic pointer dcl 3-4 ec_data_ptr automatic pointer dcl 4-3 ec_data_version_1 internal static fixed bin(17,0) initial dcl 4-21 ec_data_version_id internal static char(4) initial dcl 4-21 finish_info_ptr automatic pointer dcl 5-5 iox_$iocb_version_sentinel external static char(4) dcl 6-51 short_iox_modes internal static char(4) initial array dcl 7-12 NAMES DECLARED BY EXPLICIT CONTEXT. COMMON 000631 constant label dcl 155 ref 147 EGRESS 002715 constant label dcl 351 ref 595 abs_io_$abs_io_attach 000554 constant entry external dcl 10 abs_io_$abs_io_close 003301 constant entry external dcl 413 ref 384 abs_io_$abs_io_detach 003461 constant entry external dcl 450 ref 343 438 abs_io_$abs_io_open 002723 constant entry external dcl 354 ref 342 437 abs_io_$allocate_abs_data 003634 constant entry external dcl 484 abs_io_$initialize_abs_data 003654 constant entry external dcl 495 allocate_abs_data 003707 constant entry internal dcl 509 ref 164 486 any_other_handler 004125 constant entry internal dcl 527 ref 307 359 418 455 clean_up 004172 constant entry internal dcl 541 ref 162 474 478 593 common 005224 constant label dcl 666 ref 655 ec_input_$ec_input_attach 000604 constant entry external dcl 149 error 004266 constant entry internal dcl 564 ref 199 201 204 206 213 220 224 228 235 251 253 258 270 316 339 366 373 428 511 512 513 631 652 654 664 668 696 711 723 756 initialize_abs_data 004570 constant entry internal dcl 599 ref 168 500 initiate_input_file_login_channel 005134 constant entry internal dcl 657 ref 232 initiate_input_path 004751 constant entry internal dcl 635 ref 236 240 process_login_arguments 005773 constant entry internal dcl 734 ref 275 reenter 006220 constant entry internal dcl 761 ref 506 reenter_environment 003676 constant entry external dcl 504 ref 408 408 set_default 006464 constant entry internal dcl 824 ref 816 817 818 819 set_trace_defaults 006363 constant entry internal dcl 806 ref 284 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10304 10504 7120 10314 Length 11224 7120 200 503 1163 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME abs_io_$abs_io_attach 869 external procedure is an external procedure. on unit on line 162 64 on unit on unit on line 228 86 on unit on unit on line 307 64 on unit on unit on line 359 64 on unit begin block on line 401 begin block shares stack frame of external procedure abs_io_$abs_io_attach. on unit on line 418 64 on unit on unit on line 455 64 on unit on unit on line 474 64 on unit allocate_abs_data 88 internal procedure enables or reverts conditions. on unit on line 511 84 on unit on unit on line 512 84 on unit on unit on line 513 84 on unit any_other_handler 80 internal procedure is called by several nonquick procedures. clean_up 74 internal procedure is called by several nonquick procedures. error 186 internal procedure is called during a stack extension, and is declared options(variable). initialize_abs_data internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. initiate_input_path internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. process_login_arguments internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. begin block on line 745 130 begin block uses auto adjustable storage. reenter internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. set_trace_defaults internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. set_default internal procedure shares stack frame of external procedure abs_io_$abs_io_attach. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 unable_to_do_io abs_io_$abs_io_attach 000012 try_message reenter STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME abs_io_$abs_io_attach 000122 abs_entry abs_io_$abs_io_attach 000123 arg_count abs_io_$abs_io_attach 000124 arg_str abs_io_$abs_io_attach 000156 attach_description_ptr abs_io_$abs_io_attach 000160 first_arg abs_io_$abs_io_attach 000161 idx abs_io_$abs_io_attach 000162 initialized abs_io_$abs_io_attach 000164 iocb_ptr abs_io_$abs_io_attach 000166 login_channel_sw abs_io_$abs_io_attach 000167 mask abs_io_$abs_io_attach 000170 masked_sw abs_io_$abs_io_attach 000171 no_set_bc_sw abs_io_$abs_io_attach 000172 output_arg abs_io_$abs_io_attach 000173 path_arg abs_io_$abs_io_attach 000174 status abs_io_$abs_io_attach 000175 whoami abs_io_$abs_io_attach 000206 area_data abs_io_$abs_io_attach 000232 attach_descrip abs_io_$abs_io_attach 000400 abs_data_ptr abs_io_$abs_io_attach 000414 restarted initialize_abs_data 000415 truncate initialize_abs_data 000424 absin_len initiate_input_path 000425 arg_len initiate_input_path 000426 arg_ptr initiate_input_path 000430 bit_count initiate_input_path 000431 input_dir initiate_input_path 000503 input_dir_len initiate_input_path 000504 input_entry initiate_input_path 000514 input_entry_len initiate_input_path 000515 absin_path initiate_input_path 000576 n_args process_login_arguments 000577 arg_len process_login_arguments 000600 max_arg_len process_login_arguments 000601 argx process_login_arguments 000610 long reenter 000641 FINISH_INFO reenter 000750 term_structure reenter 000760 default_mode set_trace_defaults begin block on line 745 000100 args begin block on line 745 000100 arg_ptr begin block on line 745 clean_up 000100 p clean_up error 000100 status_ptr error 000102 arg_list_arg_count error 000103 message error THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars enter_begin_block leave_begin_block call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 alloc_auto_adj enable_op shorten_stack ext_entry ext_entry_desc int_entry op_alloc_ op_freen_ op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. abs_io_control abs_io_control$close abs_io_control$set_arguments abs_io_put_chars abs_io_put_chars$close abs_io_put_chars$open abs_io_v1_get_line abs_io_v2_get_line com_err_ continue_to_signal_ convert_status_code_ cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr cu_$generate_call cu_$set_cl_intermediary cv_dec_check_ define_area_ execute_epilogue_ expand_pathname_ get_system_free_area_ hcs_$initiate_count hcs_$reset_ips_mask hcs_$set_ips_mask hcs_$set_max_length_seg hcs_$terminate_noname ioa_ ioa_$general_rs iox_$destroy_iocb iox_$propagate pathname_ print_abs_msg_$login print_abs_msg_$logout release_area_ requote_string_ signal_ sub_err_ terminate_process_ terminate_process_ user_info_$absentee_restarted user_info_$absin user_info_$absout user_info_$absout_truncation user_info_$login_arg_count user_info_$login_arg_ptr THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. abs_io_data_chain_ptr_ error_table_$abs_reenter error_table_$bad_mode error_table_$badopt error_table_$badpath error_table_$entlong error_table_$inconsistent error_table_$noalloc error_table_$noarg error_table_$not_detached error_table_$notalloc error_table_$unable_to_do_io error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 53 000544 10 000547 144 000573 145 000575 147 000601 149 000602 152 000623 153 000624 155 000631 158 000636 159 000640 160 000641 162 000642 164 000664 168 000670 170 000671 171 000676 172 000701 173 000705 175 000712 177 000716 179 000723 183 000725 185 000731 186 000734 188 000736 190 000747 191 000765 193 000777 195 001013 196 001026 198 001040 199 001051 201 001110 202 001140 204 001144 206 001203 207 001233 209 001237 211 001255 213 001273 214 001322 216 001323 217 001330 218 001332 220 001334 223 001370 224 001371 226 001422 228 001427 230 001471 232 001473 235 001477 236 001530 237 001532 239 001533 240 001534 244 001536 246 001564 247 001566 248 001570 250 001571 251 001604 253 001631 256 001673 258 001756 262 002031 263 002043 266 002047 269 002055 270 002104 274 002146 275 002147 279 002150 280 002153 281 002160 282 002165 284 002174 288 002175 289 002202 290 002267 292 002272 293 002304 294 002335 295 002344 297 002370 298 002406 299 002423 301 002437 303 002460 307 002461 309 002503 310 002513 312 002515 314 002516 316 002522 320 002562 321 002565 322 002572 325 002574 326 002576 327 002601 328 002602 331 002610 332 002612 335 002616 337 002620 338 002621 339 002653 342 002665 343 002672 345 002675 347 002704 349 002714 351 002715 354 002716 357 002734 359 002735 361 002757 363 002767 364 002774 366 002776 369 003022 371 003026 373 003074 374 003106 377 003111 378 003123 379 003127 380 003133 381 003136 382 003140 384 003141 386 003146 388 003157 390 003164 392 003174 393 003205 395 003207 397 003215 399 003225 401 003226 405 003234 407 003241 408 003261 411 003274 413 003275 416 003312 418 003313 420 003335 422 003345 423 003352 425 003354 427 003360 428 003371 431 003403 433 003417 434 003422 437 003424 438 003431 440 003434 442 003436 444 003445 446 003455 448 003456 450 003457 453 003472 455 003473 457 003515 459 003525 460 003531 462 003533 464 003535 466 003544 468 003554 470 003564 472 003567 474 003571 476 003613 478 003623 480 003627 482 003630 484 003631 486 003642 488 003646 490 003651 495 003652 497 003662 498 003666 500 003673 502 003674 504 003675 506 003704 507 003705 509 003706 511 003714 512 003760 513 004024 515 004070 517 004110 518 004111 519 004112 521 004113 523 004121 525 004123 527 004124 533 004132 535 004161 537 004170 541 004171 546 004177 548 004204 550 004206 552 004223 553 004227 554 004231 555 004246 557 004261 560 004264 564 004265 581 004273 584 004305 585 004326 586 004340 587 004343 588 004371 590 004420 591 004476 592 004557 593 004560 595 004565 599 004570 607 004571 609 004577 610 004605 611 004612 612 004623 613 004632 614 004637 615 004641 616 004650 617 004657 622 004670 623 004672 624 004673 625 004675 626 004677 627 004703 628 004705 630 004710 631 004723 633 004750 635 004751 650 004753 651 004771 652 005020 653 005046 654 005076 655 005133 657 005134 661 005135 663 005146 664 005172 666 005224 668 005267 671 005344 675 005350 677 005353 678 005365 679 005377 681 005406 683 005411 685 005422 686 005426 688 005431 689 005434 691 005435 692 005440 693 005446 695 005447 696 005463 700 005501 703 005507 706 005564 707 005565 708 005576 711 005623 713 005671 715 005672 716 005676 718 005712 719 005714 723 005727 725 005750 726 005755 727 005762 728 005763 730 005772 734 005773 742 005774 743 006010 745 006013 746 006016 755 006035 756 006047 750 006061 751 006072 752 006110 754 006130 755 006132 756 006162 757 006216 759 006217 761 006220 783 006221 787 006222 789 006225 790 006226 791 006242 792 006261 794 006266 795 006270 796 006272 797 006273 798 006274 799 006277 800 006324 801 006335 802 006340 804 006362 806 006363 812 006364 813 006374 814 006402 816 006404 817 006416 818 006433 819 006450 821 006463 824 006464 830 006466 831 006473 832 006500 834 006501 ----------------------------------------------------------- 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