COMPILATION LISTING OF SEGMENT audit_editor Compiled by: Multics PL/I Compiler, Release 28b, of April 11, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 06/03/83 0943.4 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* format: style2 */ 12 audit_editor: 13 proc (p_buff_ptr, p_buff_len, p_actual_len, p_audited_iocb, p_code); 14 15 /* The audit_editor procedure is bound in with audit_, and is not 16* an externally available entry. INput is in param_buffer (defined by p_buff_ptr, 17* p_buff_len, and p_actual_len). param_buffer is also used for output from the 18* editor. If the string to be output is too large for the param_buffer as 19* defined on entry, i.e. if p_buff_len is too small, param_buffer is 20* redefined on the audit_ temp_seg pointed to by blk.temp_seg_ptr. To preserve 21* "recursiveness" of audit_editor and audit_get_line(in audit_), the audit_editor 22* uses a temp_seg in calls to iox_$get_line as its input buffer. Also, to avoid 23* edit buffer size problems, edit_buffer is based on a temp_seg. 24* The requests supported by audit_editor are in the parse_request internal 25* procedure, the addressing syntax is enforced by decode_address. 26* 27* 12/08/78 Written by Lindsey L. Spratt 28* Modified: 29* 11/26/79 by Lindsey L. Spratt to add prompting. 30*12/11/79 by Lindsey L. Spratt to modify prompting, add "=" request, add short 31*names for requests (remove "." prefix). 32*03/20/81 by Lindsey L. Spratt: Remove blk.editor_prompt_terminator, use 33* blk.editor_prompt_string as an ioa_ control string. 34**/ 35 36 37 /* Parameter */ 38 39 dcl p_buff_ptr ptr; 40 dcl p_buff_len fixed bin (21); 41 dcl p_actual_len fixed bin (21); 42 dcl p_audited_iocb ptr; 43 dcl p_code fixed bin (35); 44 45 /* Automatic */ 46 47 dcl 1 position_info like position_info_template; 48 dcl 1 saved_audit_file_header 49 like audit_file_header; 50 dcl 1 aut_last_return_line, 51 2 not_in_string bit (1), 52 2 string char (512) varying, 53 2 position like position_template; 54 dcl 1 current_position like position_template; 55 dcl 1 begin_position like position_template; 56 dcl 1 end_position like position_template; 57 dcl idx_of_first_non_white_space_char 58 fixed bin (35); 59 dcl level fixed bin; 60 dcl request_index fixed bin; 61 dcl code fixed bin (35); 62 dcl areap ptr; 63 dcl new_edit_buffer_ptr ptr; 64 dcl default_iocb ptr; 65 dcl request_line_length fixed bin; 66 dcl request_line_ptr ptr; 67 dcl no_last_return_line bit (1); 68 dcl edit_buffer_ptr ptr; 69 dcl string_delimiter char (1); 70 dcl auditing_iocb ptr; 71 dcl blkptr ptr; 72 dcl warn_user_on_bad_request 73 bit (1); 74 dcl (edit_buffer_length, new_edit_buffer_length) 75 fixed bin; 76 dcl (max_edit_buffer_length, max_request_line_length) 77 fixed bin; 78 dcl temp_seg_ptr (3) ptr; 79 80 /* Based */ 81 dcl area area (2048) based (areap); 82 dcl request_line char (request_line_length) based (request_line_ptr); 83 dcl edit_buffer char (edit_buffer_length) based (edit_buffer_ptr); 84 dcl param_buffer char (p_actual_len) based (p_buff_ptr); 85 dcl new_edit_buffer char (new_edit_buffer_length) based (new_edit_buffer_ptr); 86 87 /* Builtin */ 88 89 dcl null builtin; 90 dcl (addr, addrel, allocation, bin, hbound, index, length, ltrim, rtrim, search, substr, verify) 91 builtin; 92 93 /* Condition */ 94 95 dcl cleanup condition; 96 97 98 99 /* Controlled */ 100 101 dcl 1 con_last_return_line controlled, 102 2 not_in_string bit (1), 103 2 string char (512) varying, 104 2 position like position_template; 105 106 /* Entry */ 107 108 dcl audit_file_position_$move_number 109 entry (ptr, bit (1), bit (1), bit (1), fixed bin, ptr, fixed bin (35)); 110 dcl audit_file_position_$forward_search 111 entry (ptr, char (*) varying, ptr, fixed bin (35)); 112 dcl audit_file_position_$backward_search 113 entry (ptr, char (*) varying, ptr, fixed bin (35)); 114 dcl audit_file_position_$next 115 entry (ptr, ptr, fixed bin (35)); 116 dcl audit_file_position_$previous 117 entry (ptr, ptr, fixed bin (35)); 118 dcl audit_file_position_$last 119 entry (ptr, ptr, fixed bin (35)); 120 dcl audit_file_position_$set_count 121 entry (ptr, ptr, fixed bin (35)); 122 123 dcl get_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 124 dcl release_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)); 125 dcl get_system_free_area_ entry () returns (ptr); 126 dcl iox_$get_line entry (ptr, ptr, fixed bin, fixed bin, fixed bin (35)); 127 dcl ioa_$ioa_switch entry options (variable); 128 dcl ioa_$ioa_switch_nnl entry options (variable); 129 dcl cu_$cp entry (ptr, fixed bin, fixed bin (35)); 130 dcl abbrev_$expanded_line entry (ptr, fixed bin, ptr, fixed bin, ptr, fixed bin); 131 dcl search_file_ entry (ptr, fixed bin, fixed bin, ptr, fixed bin, fixed bin, fixed bin, 132 fixed bin, fixed bin (35)); 133 134 /* External */ 135 136 dcl sys_info$max_seg_size fixed bin (35) ext; 137 dcl error_table_$empty_file 138 fixed bin (35) ext; 139 dcl error_table_$no_stmt_delim 140 fixed bin (35) ext; 141 dcl error_table_$end_of_info 142 fixed bin (35) ext; 143 144 /* Static */ 145 146 dcl static_level fixed bin internal static init (0); 147 dcl NL char (1) internal static options (constant) init (" 148 "); 149 150 151 /* Increment the count of the recursive invocations of the editor. */ 152 153 static_level = static_level + 1; 154 level = static_level; 155 156 /* Push the last_return_line stack if its depth is less than 157* the current level of recursion. The no_last_return_line switch is 158* "1"b if there was no last_return_line at this level of recursion. */ 159 160 if allocation (con_last_return_line) < level 161 then do; 162 no_last_return_line = "1"b; 163 allocate con_last_return_line; 164 end; 165 else no_last_return_line = "0"b; 166 on condition (cleanup) 167 begin; 168 do while (allocation (con_last_return_line) >= level); 169 free con_last_return_line; 170 end; 171 static_level = level - 1; 172 end; 173 174 /* Put the contents of the last_return_line of this level in 175* automatic storage, to insure reference to the correct value, 176* regardless of additional recursion. */ 177 178 aut_last_return_line = con_last_return_line; 179 warn_user_on_bad_request = "0"b; 180 max_request_line_length = sys_info$max_seg_size * 4; 181 max_edit_buffer_length = sys_info$max_seg_size * 4; 182 position_info.any_tag = "0"b; 183 current_position.component_number = -1; 184 current_position.component_max_char_index = -1; 185 current_position.component_ptr = null; 186 current_position.char_index = -1; 187 current_position.aep = null; 188 189 areap = get_system_free_area_ (); 190 call get_temp_segments_ ("audit_editor", temp_seg_ptr, code); 191 if code ^= 0 192 then do; 193 p_code = code; 194 return; 195 end; 196 edit_buffer_ptr = temp_seg_ptr (1); 197 new_edit_buffer_ptr = temp_seg_ptr (2); 198 request_line_ptr = temp_seg_ptr (3); 199 200 /* Get the attached data, in blk, which describes various things about 201* the audit file. Make a snapshot of this data to protect against the result 202* of further auditing while in the editor. */ 203 204 blkptr = p_audited_iocb -> iocb.attach_data_ptr; 205 audit_file_header_ptr = blk.audit_file_header_ptr; 206 saved_audit_file_header = audit_file_header; 207 position_info.max_index = audit_file_header.max_index; 208 position_info.begin_component = audit_file_header.begin_component; 209 position_info.begin_index = audit_file_header.begin_index; 210 position_info.file_limit = audit_file_header.filled; 211 position_info.default_search_tag = "I"; 212 position_info.max_component = audit_file_header.max_component; 213 position_info.current_component = audit_file_header.current_component; 214 position_info.audit_fcb = blk.audit_fcb; 215 position_info.dirname = blk.dirname; 216 position_info.ename = blk.ename; 217 position_info.audit_index = audit_file_header.audit_index; 218 position_info.audit_ptr = blk.audit_ptr; 219 position_info.last_entry_length = audit_file_header.last_entry_length; 220 auditing_iocb = blk.auditing_iocb; 221 default_iocb = blk.default_iocb; 222 223 /* Set up request_line, edit_buffer, current_position, begin_position, 224* and end_position. */ 225 226 if p_actual_len = 3 227 then do; /* Editor triggered with line containing only editor request */ 228 /* sequence. Set edit_line to the input line preceding the */ 229 /* trigger sequence, get request_line from default_iocb. */ 230 call audit_file_position_$last (addr (current_position), addr (position_info), code); 231 if code ^= 0 232 then if code = error_table_$empty_file 233 then do; 234 call ioa_$ioa_switch (default_iocb, "Empty audit file."); 235 param_buffer = ""; 236 p_actual_len = 0; 237 p_code = 0; 238 call finish; 239 return; 240 end; 241 else do; 242 p_code = code; 243 call finish; 244 return; 245 end; 246 if default_iocb ^= auditing_iocb 247 then do; 248 call audit_file_position_$previous (addr (current_position), addr (position_info), code); 249 if code ^= 0 250 then do; 251 p_code = code; 252 call finish; 253 return; 254 end; 255 end; 256 begin_position, end_position = current_position; 257 call replace_buffer_with_entry (current_position); 258 if blk.current_flags.use_editor_prompt 259 then call put_prompt; 260 call iox_$get_line (default_iocb, request_line_ptr, 512, request_line_length, code); 261 if code ^= 0 262 then do; 263 p_code = code; 264 call finish; 265 return; 266 end; 267 end; 268 else if substr (param_buffer, p_actual_len - 1, 1) = "E" 269 then do; /* Editor triggered with line containing requests. Prepare to */ 270 /* warn user if part of the supplied request_line */ 271 /* fails. Set edit_line to most recent input line. */ 272 warn_user_on_bad_request = "1"b; 273 request_line_length = p_actual_len - 2; 274 request_line = substr (param_buffer, 1, p_actual_len - 3) || NL; 275 call audit_file_position_$last (addr (current_position), addr (position_info), code); 276 if code ^= 0 277 then if code = error_table_$empty_file 278 then do; 279 call ioa_$ioa_switch (default_iocb, "Empty audit file."); 280 p_code = 1; 281 call finish; 282 p_code = 0; 283 return; 284 end; 285 else do; 286 p_code = code; 287 call finish; 288 return; 289 end; 290 if default_iocb ^= auditing_iocb 291 then do; 292 call audit_file_position_$previous (addr (current_position), addr (position_info), code); 293 if code ^= 0 294 then do; 295 p_code = code; 296 call finish; 297 return; 298 end; 299 end; 300 call replace_buffer_with_entry (current_position); 301 begin_position, end_position = current_position; 302 end; 303 else do; /* Set edit_line to the characters preceding the trigger */ 304 /* sequence. Get the request_line from default_iocb. */ 305 edit_buffer_length = p_actual_len - 2; 306 edit_buffer = substr (param_buffer, 1, p_actual_len - 3) || NL; 307 call audit_file_position_$last (addr (current_position), addr (position_info), code); 308 begin_position, end_position = current_position; 309 if blk.current_flags.use_editor_prompt 310 then call put_prompt; 311 call iox_$get_line (default_iocb, request_line_ptr, 512, request_line_length, code); 312 if code ^= 0 313 then do; 314 p_code = code; 315 call finish; 316 return; 317 end; 318 end; 319 320 /* Loop through the requests, getting new request_line's as necessary. */ 321 322 do while ("1"b); 323 begin_position, end_position = current_position; 324 code = 0; 325 call parse_request (request_index); /* Get the label index of first request on request_line */ 326 if request_index > 0 /* All non-zero indexes are valid requests. */ 327 then goto LAB (request_index); 328 else if warn_user_on_bad_request 329 then do; /* Print a station id since an error has occurred in processing. */ 330 warn_user_on_bad_request = "0"b; 331 goto LAB (1); 332 end; 333 else goto NEXT_REQUEST; /* Zero index indicates no valid request found. */ 334 335 /* Each label is an editor request call followed by a transfer to NEXT_REQUEST 336* or a return. */ 337 338 LAB (1): 339 call whoami; 340 goto NEXT_REQUEST; 341 342 LAB (2): 343 call colon; /* Turns on the no_default_tag switch. */ 344 goto NEXT_REQUEST; 345 346 LAB (3): 347 call print; /* Print the lines between begin_index and end_index. */ 348 goto NEXT_REQUEST; 349 350 LAB (4): 351 call substitute (code); /* Substitute rep_str for reg_exp in edit_line. */ 352 goto NEXT_REQUEST; /* rep_str and reg_exp are parsed from 353* request_line by substitute. */ 354 355 LAB (5): 356 p_code = 1; /* Quit from the editor. */ 357 call finish; 358 p_code = 0; 359 return; 360 361 LAB (6): 362 call command_processor_escape; 363 goto NEXT_REQUEST; 364 365 LAB (7): 366 LAB (18): 367 call return_edit_line (code); /* Return edit_line to audit_. */ 368 if code = 0 369 then do; 370 p_code = 0; 371 call finish; 372 return; 373 end; 374 else goto NEXT_REQUEST; 375 376 LAB (8): 377 LAB (19): 378 call get_last_line_returned; /* Put the last line returned by */ 379 goto NEXT_REQUEST; /* the audit_editor in edit_line, and set position to its 380* location in the audit file. */ 381 382 LAB (9): 383 LAB (20): 384 call return_newline; /* Return a newline to audit_. */ 385 p_code = 1; 386 call finish; 387 p_code = 0; 388 return; 389 390 LAB (10): 391 LAB (21): 392 call set_default_search_tag (position_info.default_search_tag, code); 393 /* Set the default tag used in searching */ 394 goto NEXT_REQUEST; /* to tag_str, which is gotten from request_line. */ 395 396 LAB (11): 397 LAB (22): 398 call audit_on; /* Turn on auditting of the editor. */ 399 goto NEXT_REQUEST; 400 401 LAB (12): 402 LAB (23): 403 call audit_off; /* Turn off auditting of the editor. */ 404 goto NEXT_REQUEST; 405 406 LAB (13): 407 LAB (24): 408 call print_type; /* Print the type(tag) of the current entry */ 409 goto NEXT_REQUEST; /* (in edit_line). */ 410 411 LAB (14): 412 LAB (25): 413 call execute_edit_line; /* Execute (pass to the comand processor) edit_line */ 414 goto NEXT_REQUEST; /* and continue processing editor requests. */ 415 416 LAB (15): 417 LAB (26): 418 call abbrev_expand_edit_line; /* Expand, using the abbrev processor, the */ 419 goto NEXT_REQUEST; /* contents of edit_line, and replace edit_line with 420* the expanded version. */ 421 422 LAB (16): 423 LAB (27): 424 call list_requests; 425 goto NEXT_REQUEST; 426 427 LAB (17): 428 call print_entry_number; 429 goto NEXT_REQUEST; /* If the request line length is 0, a new line is gotten from the user. 430* In any case, the beginning of the loop is returned to. */ 431 432 NEXT_REQUEST: 433 if code ^= 0 434 then do; 435 code = 0; 436 request_line_length = 0; 437 request_line = ""; 438 if warn_user_on_bad_request 439 then do; 440 warn_user_on_bad_request = "0"b; 441 goto LAB (1); 442 end; 443 end; 444 if request_line_length < 2 445 then do; 446 position_info.any_tag = "0"b; 447 if blk.current_flags.use_editor_prompt 448 then call put_prompt; 449 call iox_$get_line (default_iocb, request_line_ptr, max_request_line_length, request_line_length, 450 code); 451 if code ^= 0 452 then do; 453 p_code = code; 454 call finish; 455 return; 456 end; 457 else warn_user_on_bad_request = "0"b; 458 end; 459 end; 460 return; /* End the main procedure, audit_editor. */ 461 462 set_last_return_line_position: 463 entry (p_position_ptr); 464 dcl 1 p_position like position_template based (p_position_ptr); 465 dcl p_position_ptr ptr; 466 con_last_return_line.position = p_position; 467 return; /* End set_last_return_line_position. */ 468 469 /* The 14 following procedures are the various editor requests. 470* After them are the procedures for parsing the request line, 471* then the procedures for position control. */ 472 473 474 whoami: 475 proc; /* Station identification. */ 476 call ioa_$ioa_switch (default_iocb, "audit editor ^v(at level ^d ^)", level - 1, level); 477 end; 478 479 colon: 480 proc; /* Defeat entry type specificity in address searches. */ 481 position_info.any_tag = "1"b; 482 end; 483 484 print: 485 proc; /* Print entries in the audit file from */ 486 dcl code fixed bin (35); 487 488 code = 0; /* begin position to end position. */ 489 if begin_position.aep = end_position.aep 490 then call ioa_$ioa_switch_nnl (default_iocb, "^a", edit_buffer); 491 else do; 492 current_position = begin_position; 493 begin_position = end_position; 494 do while (current_position.aep ^= end_position.aep); 495 call replace_buffer_with_entry (current_position); 496 call ioa_$ioa_switch_nnl (default_iocb, "^a", edit_buffer); 497 call audit_file_position_$next (addr (current_position), addr (position_info), code); 498 if code = error_table_$end_of_info 499 then do; 500 call ioa_$ioa_switch (default_iocb, "EOF"); 501 /* There is no next entry. */ 502 return; 503 end; 504 end; 505 if code = 0 506 then do; 507 call replace_buffer_with_entry (current_position); 508 /* The entry at end_position has yet to be printed. */ 509 call ioa_$ioa_switch_nnl (default_iocb, "^a", edit_buffer); 510 end; 511 end; 512 end; 513 514 substitute: 515 proc (p_code); 516 dcl (code, p_code) fixed bin (35); 517 dcl reg_exp char (512) varying based (reg_exp_ptr); 518 dcl rep_str char (512) varying; 519 dcl char_after_last_match fixed bin; 520 dcl match_index fixed bin; 521 dcl match_begin fixed bin; 522 dcl match_end fixed bin; 523 dcl start_next_search fixed bin; 524 dcl slash_amp_index fixed bin; 525 dcl reg_exp_ptr ptr; 526 527 alloc reg_exp in (area); 528 529 call get_string (reg_exp, "1"b, code); /* Get the string to be replaced, a qedx 530* regular expression, from the request line. */ 531 if code ^= 0 532 then do; 533 p_code = code; 534 free reg_exp in (area); 535 return; 536 end; 537 538 call get_string (rep_str, "0"b, code); /* Get the replacement string from the request line. */ 539 if code ^= 0 540 then do; 541 p_code = code; 542 free reg_exp in (area); 543 return; 544 end; 545 546 new_edit_buffer_length = 0; 547 char_after_last_match = 1; 548 549 do match_index = 1 by 1 while (char_after_last_match <= edit_buffer_length); 550 /* Search edit_line for reg_exp. */ 551 call search_file_ (addrel (reg_exp_ptr, 1), 1, length (reg_exp), edit_buffer_ptr, char_after_last_match, 552 edit_buffer_length, match_begin, match_end, code); 553 if code ^= 0 554 then do; /* No match for reg_exp was found, starting at */ 555 /* char_after_last_match. */ 556 if match_index > 1 557 then do; /* At least one match has been found, so update */ 558 /* the edit_line and return. */ 559 if new_edit_buffer_length + 1 >= char_after_last_match 560 then do; 561 edit_buffer_length = 562 new_edit_buffer_length + edit_buffer_length - char_after_last_match + 1; 563 edit_buffer = 564 new_edit_buffer 565 || 566 substr (edit_buffer, char_after_last_match, 567 edit_buffer_length - new_edit_buffer_length); 568 end; 569 else do; 570 substr (edit_buffer, 1, 571 edit_buffer_length + new_edit_buffer_length - char_after_last_match + 1) 572 = new_edit_buffer || substr (edit_buffer, char_after_last_match); 573 edit_buffer_length = 574 new_edit_buffer_length + edit_buffer_length - char_after_last_match + 1; 575 end; 576 p_code = 0; 577 free reg_exp in (area); 578 return; 579 end; 580 if code = 1 581 then call ioa_$ioa_switch (default_iocb, "Substitution failed."); 582 free reg_exp in (area); 583 p_code = code; 584 return; 585 end; 586 587 /* If the match starts after char_after_last_match, then append the part 588* of the edit_line between char_after_last_match and match_begin to the new_edit_line. */ 589 590 if match_begin > char_after_last_match 591 then do; 592 new_edit_buffer_length = new_edit_buffer_length + match_begin - char_after_last_match; 593 new_edit_buffer = 594 substr (new_edit_buffer, 1, new_edit_buffer_length - match_begin + char_after_last_match) 595 || substr (edit_buffer, char_after_last_match, match_begin - char_after_last_match); 596 end; 597 598 /* Having found a match, rep_str indicates what characters are to be 599* appended to the growing new_edit_line, instead of the characters in edit_line 600* between match_begin and match_end. Any unescaped ampersand (&) in 601* rep_str is replaced by the matched string in edit_line. An escape is 602* the two character sequence "\c". The following loop searches for escapes 603* and unescaped ampersands in rep_str. */ 604 605 606 start_next_search = 1; 607 608 if rep_str = "" 609 then do; 610 new_edit_buffer_length = new_edit_buffer_length + length (rep_str) - start_next_search + 1; 611 new_edit_buffer = 612 substr (new_edit_buffer, 1, 613 new_edit_buffer_length - (length (rep_str) - start_next_search + 1)) 614 || substr (rep_str, start_next_search); 615 end; 616 else do while (start_next_search <= length (rep_str)); 617 slash_amp_index = search (substr (rep_str, start_next_search), "\&"); 618 if slash_amp_index = 0 619 then do; 620 new_edit_buffer_length = 621 new_edit_buffer_length + length (rep_str) - start_next_search + 1; 622 new_edit_buffer = 623 substr (new_edit_buffer, 1, 624 new_edit_buffer_length - (length (rep_str) - start_next_search + 1)) 625 || substr (rep_str, start_next_search); 626 start_next_search = length (rep_str) + 1; 627 end; 628 else if substr (rep_str, start_next_search + slash_amp_index - 1, 1) = "&" 629 then do; 630 new_edit_buffer_length = new_edit_buffer_length + slash_amp_index - 1; 631 new_edit_buffer = 632 substr (new_edit_buffer, 1, new_edit_buffer_length - slash_amp_index + 1) 633 || substr (rep_str, start_next_search, slash_amp_index - 1); 634 start_next_search = start_next_search + slash_amp_index; 635 if match_end >= match_begin 636 then do; 637 new_edit_buffer_length = 638 new_edit_buffer_length + match_end - match_begin + 1; 639 new_edit_buffer = 640 substr (new_edit_buffer, 1, 641 new_edit_buffer_length - match_end + match_begin - 1) 642 || substr (edit_buffer, match_begin, match_end - match_begin + 1); 643 end; 644 end; 645 else if start_next_search + slash_amp_index > length (rep_str) 646 then do; 647 new_edit_buffer_length = 648 new_edit_buffer_length + length (rep_str) - start_next_search + 1; 649 new_edit_buffer = 650 substr (new_edit_buffer, 1, 651 new_edit_buffer_length - length (rep_str) + start_next_search - 1) 652 || substr (rep_str, start_next_search); 653 start_next_search = length (rep_str) + 1; 654 end; 655 else if substr (rep_str, start_next_search + slash_amp_index, 1) ^= "c" 656 then do; 657 new_edit_buffer_length = new_edit_buffer_length + slash_amp_index; 658 new_edit_buffer = 659 substr (new_edit_buffer, 1, new_edit_buffer_length - slash_amp_index) 660 || substr (rep_str, start_next_search, slash_amp_index); 661 start_next_search = start_next_search + slash_amp_index; 662 end; 663 else if start_next_search + slash_amp_index = length (rep_str) 664 then do; 665 new_edit_buffer_length = 666 new_edit_buffer_length + length (rep_str) - start_next_search + 1; 667 new_edit_buffer = substr (rep_str, start_next_search); 668 start_next_search = length (rep_str) + 1; 669 end; 670 else do; 671 new_edit_buffer_length = new_edit_buffer_length + slash_amp_index; 672 new_edit_buffer = 673 substr (new_edit_buffer, 1, new_edit_buffer_length - slash_amp_index) 674 || substr (rep_str, start_next_search, slash_amp_index - 1) 675 || substr (rep_str, start_next_search + slash_amp_index + 1, 1); 676 start_next_search = start_next_search + slash_amp_index + 2; 677 end; 678 end; 679 680 if match_end < match_begin 681 then do; 682 new_edit_buffer_length = new_edit_buffer_length + 1; 683 new_edit_buffer = 684 substr (new_edit_buffer, 1, new_edit_buffer_length - 1) 685 || substr (edit_buffer, match_begin, 1); 686 char_after_last_match = match_begin + 1; 687 end; 688 else char_after_last_match = match_end + 1; 689 reg_exp = ""; /* A null reg_exp will cause search_file_ to use 690* the last non_null value of reg_exp. */ 691 end; 692 693 free reg_exp in (area); 694 edit_buffer_length = new_edit_buffer_length; 695 edit_buffer = new_edit_buffer; 696 end; 697 698 699 command_processor_escape: 700 proc; 701 call cu_$cp (request_line_ptr, request_line_length, code); 702 request_line = ""; 703 request_line_length = 0; 704 end; 705 706 707 return_edit_line: 708 proc (p_code); 709 dcl p_code fixed bin (35); 710 711 if request_line_length > 1 712 then do; 713 if substr (request_line, 1, request_line_length - 1) ^= "" 714 then do; 715 edit_buffer_length = request_line_length; 716 edit_buffer = request_line; 717 request_line_length = 0; 718 request_line = ""; 719 end; 720 end; 721 722 723 if edit_buffer_length <= 512 724 then do; 725 aut_last_return_line.string = edit_buffer; 726 aut_last_return_line.not_in_string = "0"b; 727 end; 728 else do; 729 aut_last_return_line.string = ""; 730 aut_last_return_line.not_in_string = "1"b; 731 end; 732 p_code = 0; 733 end; 734 735 736 get_last_line_returned: 737 proc; 738 if no_last_return_line 739 then call ioa_$ioa_switch (default_iocb, "No previously returned line known."); 740 else do; 741 current_position = aut_last_return_line.position; 742 begin_position = current_position; 743 end_position = current_position; 744 if aut_last_return_line.not_in_string 745 then call replace_buffer_with_entry (current_position); 746 else do; 747 edit_buffer_length = length (aut_last_return_line.string); 748 edit_buffer = aut_last_return_line.string; 749 end; 750 end; 751 end; 752 753 754 return_newline: 755 proc; 756 p_actual_len = 1; 757 param_buffer = NL; 758 end; 759 760 761 set_default_search_tag: 762 proc (p_default_search_tag, p_code); 763 dcl default_search_tag char (32) varying; 764 dcl p_default_search_tag char (*) varying; 765 dcl (p_code, code) fixed bin (35); 766 767 call get_string (default_search_tag, "1"b, code); 768 if code ^= 0 769 then do; 770 p_code = code; 771 return; 772 end; 773 if length (default_search_tag) > 2 774 then do; 775 call ioa_$ioa_switch (default_iocb, "Tag too long. ^a", default_search_tag); 776 p_code = 1; 777 return; 778 end; 779 p_default_search_tag = default_search_tag; 780 return; 781 end; 782 783 784 audit_on: 785 proc; 786 default_iocb = p_audited_iocb; 787 end; 788 789 audit_off: 790 proc; 791 default_iocb = auditing_iocb; 792 end; 793 794 print_type: 795 proc; 796 call ioa_$ioa_switch (default_iocb, "^a", current_position.aep -> audit_entry.tag); 797 end; 798 799 execute_edit_line: 800 proc; 801 call cu_$cp (addr (edit_buffer), length (rtrim (edit_buffer)), code); 802 end; 803 804 abbrev_expand_edit_line: 805 proc; 806 dcl out char (abline_len) based (outp); 807 dcl outp ptr, 808 abline_len fixed bin; 809 dcl abline char (512); 810 811 call abbrev_$expanded_line (edit_buffer_ptr, edit_buffer_length, addr (abline), max_edit_buffer_length, outp, 812 abline_len); 813 if abline_len > max_edit_buffer_length 814 then do; 815 call ioa_$ioa_switch (default_iocb, "Expanded line too long. ^/^a", out); 816 request_line = ""; 817 request_line_length = 0; 818 return; 819 end; 820 edit_buffer_length = abline_len; 821 edit_buffer = out; 822 end; 823 824 list_requests: 825 proc; 826 call ioa_$ioa_switch (default_iocb, "^5x. -> who am I?"); 827 call ioa_$ioa_switch (default_iocb, "^5x: -> defeat default search tag"); 828 call ioa_$ioa_switch (default_iocb, "^5xp -> print"); 829 call ioa_$ioa_switch (default_iocb, "^5xs -> substitute"); 830 call ioa_$ioa_switch (default_iocb, "^5xq -> quit"); 831 call ioa_$ioa_switch (default_iocb, "^5x.. -> command escape"); 832 call ioa_$ioa_switch (default_iocb, "^5x.r -> return edit buffer"); 833 call ioa_$ioa_switch (default_iocb, "^5x.l -> get last returned line"); 834 call ioa_$ioa_switch (default_iocb, "^5x.n -> return newline"); 835 call ioa_$ioa_switch (default_iocb, "^5x.d -> set default tag"); 836 call ioa_$ioa_switch (default_iocb, "^5x.on -> audit editting"); 837 call ioa_$ioa_switch (default_iocb, "^5x.off -> don't audit editting"); 838 call ioa_$ioa_switch (default_iocb, "^5x.type -> print tag of entry in buffer"); 839 call ioa_$ioa_switch (default_iocb, "^5x.exec -> execute edit buffer with call to command processor"); 840 call ioa_$ioa_switch (default_iocb, "^5x.expand -> expand abbrevs in edit buffer"); 841 call ioa_$ioa_switch (default_iocb, "^5x.? -> print this list"); 842 end; 843 print_entry_number: 844 proc; 845 if current_position.entry_number = 0 | (current_position.search_tag ^= position_info.default_search_tag) 846 | position_info.any_tag 847 then call audit_file_position_$set_count (addr (current_position), addr (position_info), code); 848 call ioa_$ioa_switch (default_iocb, "^d", current_position.entry_number); 849 end; /* End of print_entry_number.*/ 850 851 put_prompt: 852 proc; 853 call ioa_$ioa_switch_nnl (default_iocb, blk.editor_prompt_string, (level > 1), level); 854 end; /* End of put_prompt.*/ 855 856 857 /* The next group of procedures are concerned primarily with parsing the 858* request line. */ 859 860 parse_request: 861 proc (p_index) recursive; 862 dcl (p_index, index) fixed bin; 863 dcl request_name_length fixed bin; 864 dcl request (27) char (12) varying static options (constant) 865 init (".", ":", "p", "s", "q", "..", ".r", ".l", ".n", ".d", ".on", ".off", 866 ".type", ".exec", ".expand", ".?", "=", "r", "l", "n", "d", "on", "off", "type", 867 "exec", "expand", "?"); 868 869 p_index = 0; 870 if request_line_length < 2 871 then do; /* The request line is too short to contain any requests */ 872 p_index = 0; 873 return; 874 end; 875 else if (request_line_length = 2) & substr (request_line, 1, 1) = "." 876 then do; /* the "." (station id) request is only recognized when */ 877 /* immediately followed by a newline. */ 878 request_line_length = 0; 879 request_line = ""; 880 p_index = 1; 881 return; 882 end; 883 else do; /* This sets p_index to an appropriate request label */ 884 /* index if the request line begins with a recognizable */ 885 /* If no recognizable request begins the line, */ 886 /* p_index is set to 0. */ 887 call request_check; 888 889 if p_index = 0 890 then do; /* The beginning of the request line is assumed */ 891 /* to be an address and is interpreted accordingly */ 892 call decode_address (code); 893 if code ^= 0 894 then do; 895 if code = 1 896 then call unrecognized_request; 897 return; 898 end; 899 else if request_line_length < 2 900 then do; 901 p_index = 3; /* The request line contained only an address */ 902 begin_position = end_position; 903 /* so the default is to print the current position. */ 904 return; 905 end; 906 else do; /* An address was gotten from the request line, */ 907 /* now the trailing request is gotten. */ 908 call request_check; 909 if index > hbound (request, 1) 910 /* No matching request found for beginning of request */ 911 /* line, so complain and return. */ 912 then call unrecognized_request; 913 else p_index = index; 914 return; 915 end; 916 end; 917 end; 918 919 request_check: 920 proc; 921 922 /* The array request is looped through to find a match for the beginning 923* of the request line. The loop starts at 2 because request(1), ".", 924* is handled as a special case above. */ 925 926 do index = 2 to hbound (request, 1); 927 request_name_length = length (request (index)); 928 if request_line_length >= request_name_length + 1 929 then if substr (request_line, 1, request_name_length) = request (index) 930 then do; 931 substr (request_line, 1, request_line_length - request_name_length) = 932 substr (request_line, request_name_length + 1); 933 request_line_length = request_line_length - request_name_length; 934 idx_of_first_non_white_space_char = verify (request_line, " "); 935 if idx_of_first_non_white_space_char > 1 936 /* Leading white space exists and needs to be stripped off. */ 937 then do; 938 substr (request_line, 1, 939 request_line_length - idx_of_first_non_white_space_char + 1) = 940 substr (request_line, idx_of_first_non_white_space_char, 941 request_line_length - idx_of_first_non_white_space_char + 1); 942 request_line_length = request_line_length - idx_of_first_non_white_space_char + 1; 943 end; 944 p_index = index; 945 return; 946 end; 947 end; 948 end; 949 950 unrecognized_request: 951 proc; 952 call ioa_$ioa_switch (default_iocb, "audit editor: Unrecognized request. ^a", 953 substr (request_line, 1, request_line_length)); 954 request_line_length = 0; 955 request_line = ""; 956 p_index = 0; 957 end; 958 end; 959 960 961 962 decode_address: 963 proc (p_code); 964 dcl (code, p_code) fixed bin (35); 965 dcl (number, non_number_index) 966 fixed bin; 967 dcl forward bit (1); 968 dcl ch char (1); 969 dcl have_begin_position bit (1); 970 dcl match_string char (256) varying; 971 dcl continue bit (1); 972 dcl (abs_addr, add_addr, subtract_addr) 973 bit (1); 974 dcl 1 new_current_position like position_template; 975 dcl 1 new_begin_position like position_template; 976 dcl 1 new_end_position like position_template; 977 978 if index ("0123456789/<$,+-", substr (request_line, 1, 1)) = 0 979 then do; 980 p_code = 1; 981 return; 982 end; 983 forward = "1"b; 984 abs_addr = "1"b; 985 add_addr = "0"b; 986 subtract_addr = "0"b; 987 have_begin_position = "0"b; 988 continue = "1"b; 989 new_current_position = current_position; 990 991 do while (request_line_length > 0 & continue); 992 substr (request_line, 1, length (ltrim (request_line))) = ltrim (request_line); 993 request_line_length = length (ltrim (request_line)); 994 /* Find position in request_line of leftmost non-numeric character. */ 995 non_number_index = verify (request_line, "0123456789"); 996 if non_number_index > 1 997 then do; /* Convert the character representation of the number tofixed bin. */ 998 number = bin (substr (request_line, 1, non_number_index - 1)); 999 substr (request_line, 1, request_line_length - non_number_index + 1) = 1000 substr (request_line, non_number_index); 1001 request_line_length = request_line_length - non_number_index + 1; 1002 code = 0; 1003 call audit_file_position_$move_number (addr (new_current_position), abs_addr, add_addr, 1004 subtract_addr, number, addr (position_info), code); 1005 if code ^= 0 1006 then if code = error_table_$end_of_info 1007 then code = 0; 1008 else do; 1009 request_line_length = 0; 1010 request_line = ""; 1011 p_code = code; 1012 return; 1013 end; 1014 end; 1015 ch = substr (request_line, 1, 1); 1016 1017 /* Process the next, and necessarily non-numeric, item 1018* on the request_line. */ 1019 1020 if ch = "/" 1021 then do; /* Beginning of regular expression. */ 1022 1023 1024 call get_string (match_string, "1"b, code); 1025 if code ^= 0 1026 then do; 1027 p_code = code; 1028 return; 1029 end; 1030 1031 if forward 1032 then call audit_file_position_$forward_search (addr (new_current_position), match_string, 1033 addr (position_info), code); 1034 else call audit_file_position_$backward_search (addr (new_current_position), match_string, 1035 addr (position_info), code); 1036 if code ^= 0 1037 then do; 1038 p_code = code; 1039 call ioa_$ioa_switch (default_iocb, "Search failed. ^a", match_string); 1040 request_line_length = 0; 1041 request_line = ""; 1042 return; 1043 end; 1044 forward = "1"b; 1045 abs_addr = "0"b; 1046 end; 1047 else if ch = "<" 1048 then do; 1049 forward = "0"b; 1050 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1051 request_line_length = request_line_length - 1; 1052 end; 1053 else if ch = "$" 1054 then if ^abs_addr 1055 then do; 1056 call ioa_$ioa_switch (default_iocb, "Syntax error in address."); 1057 request_line_length = 0; 1058 request_line = ""; 1059 p_code = 1; 1060 return; 1061 end; 1062 else do; 1063 call audit_file_position_$last (addr (new_current_position), addr (position_info), code); 1064 abs_addr = "0"b; 1065 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1066 request_line_length = request_line_length - 1; 1067 end; 1068 else if ch = "," | ch = ";" 1069 then if have_begin_position 1070 then do; 1071 call ioa_$ioa_switch (default_iocb, "Syntax error in address."); 1072 request_line_length = 0; 1073 request_line = ""; 1074 p_code = 1; 1075 return; 1076 end; 1077 else do; 1078 new_begin_position = new_current_position; 1079 if ch = "," 1080 then new_current_position = current_position; 1081 have_begin_position = "1"b; 1082 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1083 request_line_length = request_line_length - 1; 1084 abs_addr = "1"b; 1085 end; 1086 else if ch = "+" 1087 then do; 1088 abs_addr = "0"b; 1089 subtract_addr = "0"b; 1090 add_addr = "1"b; 1091 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1092 request_line_length = request_line_length - 1; 1093 end; 1094 else if ch = "-" 1095 then do; 1096 abs_addr = "0"b; 1097 add_addr = "0"b; 1098 subtract_addr = "1"b; 1099 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1100 request_line_length = request_line_length - 1; 1101 end; 1102 else do; 1103 continue = "0"b; 1104 end; 1105 1106 end; 1107 new_end_position = new_current_position; 1108 if ^have_begin_position 1109 then new_begin_position = new_current_position; 1110 begin_position = new_begin_position; 1111 current_position = new_current_position; 1112 end_position = new_end_position; 1113 call replace_buffer_with_entry (current_position); 1114 p_code = 0; 1115 end; 1116 1117 get_string: 1118 proc (p_string, p_beginning_delim, p_code); 1119 dcl (code, p_code) fixed bin (35); 1120 dcl p_string char (*) varying; 1121 dcl str char (512) varying; 1122 dcl p_beginning_delim bit (1); 1123 dcl search_string char (2); 1124 dcl search_index fixed bin; 1125 1126 if p_beginning_delim 1127 then do; /* The string is supposed to begin with a delimiter, 1128* so get it. */ 1129 string_delimiter = substr (request_line, 1, 1); 1130 substr (request_line, 1, request_line_length - 1) = substr (request_line, 2); 1131 request_line_length = request_line_length - 1; 1132 end; 1133 1134 code = 2; 1135 str = ""; 1136 search_string = "\" || string_delimiter; 1137 1138 do while (request_line_length > 0 & code = 2); 1139 search_index = search (request_line, search_string); 1140 if search_index = 0 1141 then call missing_delim; 1142 else if substr (request_line, search_index, 1) = string_delimiter 1143 then call add_rest_of_str; 1144 else if search_index = request_line_length 1145 then call missing_delim; 1146 else if substr (request_line, search_index + 1, 1) ^= "c" 1147 then call add_char_to_str; 1148 else if search_index + 2 = request_line_length 1149 then do; 1150 str = str || substr (request_line, 1, search_index - 1) 1151 || substr (request_line, search_index + 2, 1); 1152 if blk.current_flags.use_editor_prompt 1153 then call put_prompt; 1154 1155 call iox_$get_line (default_iocb, request_line_ptr, max_request_line_length, request_line_length, 1156 code); 1157 if code = 0 1158 then code = 2; 1159 end; 1160 else if substr (request_line, search_index + 2, 1) = string_delimiter 1161 then do; 1162 str = str || substr (request_line, 1, search_index - 1) || string_delimiter; 1163 substr (request_line, 1, request_line_length - (search_index + 2)) = 1164 substr (request_line, search_index + 3); 1165 request_line_length = request_line_length - (search_index + 2); 1166 end; 1167 else call add_char_to_str; 1168 end; 1169 1170 if code = 2 1171 then call missing_delim; 1172 p_code = code; 1173 p_string = str; 1174 return; 1175 1176 missing_delim: 1177 proc; 1178 call ioa_$ioa_switch (default_iocb, "Missing delimiter. ^a", string_delimiter); 1179 request_line_length = 0; 1180 request_line = ""; 1181 code = error_table_$no_stmt_delim; 1182 str = ""; 1183 end; 1184 1185 add_rest_of_str: 1186 proc; 1187 str = str || substr (request_line, 1, search_index - 1); 1188 substr (request_line, 1, request_line_length - search_index) = substr (request_line, search_index + 1); 1189 request_line_length = request_line_length - search_index; 1190 code = 0; 1191 end; 1192 1193 add_char_to_str: 1194 proc; 1195 str = str || substr (request_line, 1, search_index); 1196 substr (request_line, 1, request_line_length - search_index) = substr (request_line, search_index + 1); 1197 request_line_length = request_line_length - search_index; 1198 end; 1199 end; 1200 1201 1202 1203 replace_buffer_with_entry: 1204 proc (position); 1205 dcl 1 position like position_template; 1206 1207 edit_buffer_length = position.aep -> audit_entry.entry_length; 1208 edit_buffer = substr (position.aep -> audit_entry.string, 1, position.aep -> audit_entry.entry_length); 1209 end; 1210 1211 finish: 1212 proc; 1213 if p_code ^= 0 1214 then do; 1215 p_actual_len = 0; 1216 param_buffer = ""; 1217 end; 1218 else if edit_buffer_length > p_buff_len 1219 then do; 1220 p_buff_ptr = blk.temp_seg_ptr; 1221 blk.work_space = p_buff_ptr; 1222 blk.work_space_len = edit_buffer_length; 1223 p_buff_len = sys_info$max_seg_size * 4; 1224 p_actual_len = edit_buffer_length; 1225 param_buffer = edit_buffer; 1226 end; 1227 1228 else do; 1229 p_actual_len = edit_buffer_length; 1230 param_buffer = edit_buffer; 1231 end; 1232 1233 if allocation (con_last_return_line) > level 1234 then free con_last_return_line; 1235 static_level = level - 1; 1236 con_last_return_line.string = aut_last_return_line.string; 1237 con_last_return_line.not_in_string = aut_last_return_line.not_in_string; 1238 1239 call release_temp_segments_ ("audit_editor", temp_seg_ptr, code); 1240 if code ^= 0 1241 then p_code = code; 1242 end; /* Include */ 1243 1 1 /* BEGIN INCLUDE FILE iocbx.incl.pl1 */ 1 2 /* written 27 Dec 1973, M. G. Smith */ 1 3 /* returns attributes removed, hashing support BIM Spring 1981 */ 1 4 /* version made character string June 1981 BIM */ 1 5 /* Modified 11/29/82 by S. Krupp to add new entries and to change 1 6* version number to IOX2. */ 1 7 /* format: style2 */ 1 8 1 9 dcl 1 iocb aligned based, /* I/O control block. */ 1 10 2 version character (4) aligned, /* IOX2 */ 1 11 2 name char (32), /* I/O name of this block. */ 1 12 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 1 13 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 1 14 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 1 15 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 1 16 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 1 17 2 event_channel bit (72), /* Event channel for asynchronous I/O. */ 1 18 2 detach_iocb entry (ptr, fixed bin (35)), 1 19 /* detach_iocb(p) */ 1 20 2 open entry (ptr, fixed, bit (1) aligned, fixed bin (35)), 1 21 /* open(p,mode,not_used) */ 1 22 2 close entry (ptr, fixed bin (35)), 1 23 /* close(p) */ 1 24 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed bin (35)), 1 25 /* get_line(p,bufptr,buflen,actlen) */ 1 26 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed bin (35)), 1 27 /* get_chars(p,bufptr,buflen,actlen) */ 1 28 2 put_chars entry (ptr, ptr, fixed (21), fixed bin (35)), 1 29 /* put_chars(p,bufptr,buflen) */ 1 30 2 modes entry (ptr, char (*), char (*), fixed bin (35)), 1 31 /* modes(p,newmode,oldmode) */ 1 32 2 position entry (ptr, fixed, fixed (21), fixed bin (35)), 1 33 /* position(p,u1,u2) */ 1 34 2 control entry (ptr, char (*), ptr, fixed bin (35)), 1 35 /* control(p,order,infptr) */ 1 36 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed bin (35)), 1 37 /* read_record(p,bufptr,buflen,actlen) */ 1 38 2 write_record entry (ptr, ptr, fixed (21), fixed bin (35)), 1 39 /* write_record(p,bufptr,buflen) */ 1 40 2 rewrite_record entry (ptr, ptr, fixed (21), fixed bin (35)), 1 41 /* rewrite_record(p,bufptr,buflen) */ 1 42 2 delete_record entry (ptr, fixed bin (35)), 1 43 /* delete_record(p) */ 1 44 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed bin (35)), 1 45 /* seek_key(p,key,len) */ 1 46 2 read_key entry (ptr, char (256) varying, fixed (21), fixed bin (35)), 1 47 /* read_key(p,key,len) */ 1 48 2 read_length entry (ptr, fixed (21), fixed bin (35)), 1 49 /* read_length(p,len) */ 1 50 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 1 51 /* open_file(p,mode,desc,not_used,s) */ 1 52 2 close_file entry (ptr, char (*), fixed bin (35)), 1 53 /* close_file(p,desc,s) */ 1 54 2 detach entry (ptr, char (*), fixed bin (35)), 1 55 /* detach(p,desc,s) */ 1 56 /* Hidden information, to support SYN attachments. */ 1 57 2 ios_compatibility ptr, /* Ptr to old DIM's IOS transfer vector. */ 1 58 2 syn_inhibits bit (36), /* Operations inhibited by SYN. */ 1 59 2 syn_father ptr, /* IOCB immediately SYNed to. */ 1 60 2 syn_brother ptr, /* Next IOCB SYNed as this one is. */ 1 61 2 syn_son ptr, /* First IOCB SYNed to this one. */ 1 62 2 hash_chain_ptr ptr; /* Next IOCB in hash bucket */ 1 63 1 64 declare iox_$iocb_version_sentinel 1 65 character (4) aligned external static; 1 66 1 67 /* END INCLUDE FILE iocbx.incl.pl1 */ 1244 2 1 /* BEGIN INCLUDE FILE audit_position.incl.pl1 */ 2 2 2 3 2 4 2 5 /* 2 6* 12/08/78 Written by Lindsey L. Spratt 2 7**/ 2 8 2 9 /* format: style2 */ 2 10 dcl 1 position_template, 2 11 2 aep ptr, /* points to an entry. Base of audit_entry struc. */ 2 12 2 char_index fixed bin (24), /* Offset in bytes in audit_file of aep. */ 2 13 2 entry_number fixed bin (35), /* Count of entry from beginning of file. */ 2 14 2 search_tag char (32) varying, /* Search tag in effect when this entry found. */ 2 15 2 component_ptr ptr, /* Points to component of audit_file containing entry. */ 2 16 2 component_number fixed bin, /* NUmber of component containing entry. */ 2 17 2 component_max_char_index 2 18 fixed bin (24); /* Max allowed byte offset in current component. */ 2 19 2 20 2 21 dcl 1 position_info_template, 2 22 2 max_component fixed bin (17), /* Max allowed component number of audit_file. */ 2 23 2 max_index fixed bin (24), /* Max possible byte offset in max component. */ 2 24 2 current_component fixed bin (17), /* Component currently in use by audit_. */ 2 25 2 audit_fcb ptr, /* File control block pointer for audit_file. */ 2 26 2 audit_ptr ptr, /* Points to audit_file component currently in use by audit. */ 2 27 2 audit_index fixed bin (24), /* Byte offset in current component of next entry by audit_. */ 2 28 2 last_entry_length fixed bin (24), /* Length of last entry made by audit_. */ 2 29 2 begin_index fixed bin (24), /* Byte offset in begin component of begining of file. */ 2 30 2 begin_component fixed bin (17), /* Component containing beginning of file. */ 2 31 2 dirname char (168), /* Directory name of audit file. */ 2 32 2 ename char (32), /* Entry name of audit file. */ 2 33 2 file_limit bit (1), /* Indicates the audit_file is of limited size. */ 2 34 2 default_search_tag char (32) varying, /* Is the search_tag to use in looking at entries. */ 2 35 2 any_tag bit (1); /* Says to ignore the tags of the entries. */ 2 36 2 37 2 38 /* END INCLUDE FILE audit_position.incl.pl1 */ 1245 3 1 /* ****************************************************** 3 2* * * 3 3* * * 3 4* * Copyright (c) 1972 by Massachusetts Institute of * 3 5* * Technology and Honeywell Information Systems, Inc. * 3 6* * * 3 7* * * 3 8* ****************************************************** */ 3 9 3 10 /* BEGIN INCLUDE FILE audit_entry.incl.pl1 */ 3 11 3 12 /* 3 13* This structure is the format of an entry in the audit file. It is not intended to be 3 14* allocated, but overlayed (note the 0 refer for string). 3 15* 3 16* 12/08/78 Written by Lindsey L. Spratt 3 17* 3 18**/ 3 19 3 20 dcl impossible_audit_entry_length fixed bin (24) aligned static init (9999999) options (constant), 3 21 audit_entry_header_length fixed bin aligned static init (32) options (constant); 3 22 3 23 dcl aep ptr; 3 24 dcl 1 audit_entry aligned based (aep), 3 25 2 time fixed bin (71), /* Value is either time of day of entry, or -1. */ 3 26 2 virtual_time fixed bin (71), /* Virtual cpu time from this entry to the next. */ 3 27 2 paging fixed bin (24), /* Paging from this entry to the next. */ 3 28 2 last_entry_length fixed bin (24), /* Length of last entry's string. */ 3 29 2 entry_length fixed bin (24), /* Length of this entry's string. */ 3 30 2 tag char (2), /* Denotes class of entry (e.g., "IL"). */ 3 31 2 string char (0 refer (audit_entry.entry_length)); /* Text of this entry. */ 3 32 3 33 /* END INCLUDE FILE audit_entry.incl.pl1 */ 1246 4 1 /* BEGIN INCLUDE FILE audit_block.incl.pl1 */ 4 2 4 3 /* 4 4* 12/08/78 Written by Lindsey L. Spratt 4 5* Modified: 4 6* 11/26/79 by Lindsey L. Spratt to add editor prompting info, 4 7* use_editor_prompt, 4 8* editor_prompt_string, and 4 9* editor_prompt_terminator. 4 10* 03/20/81 by Lindsey L. Spratt to remove editor_prompt_terminator. 4 11**/ 4 12 4 13 4 14 /* format: style2 */ 4 15 dcl 1 blk based (blkptr) aligned, 4 16 2 auditing_iocb ptr, /* Points to iocb of dummy switch. */ 4 17 2 attach char (128) var, /* For the attach description. */ 4 18 2 suspend bit (1), /* Indicates suspension of auditing. */ 4 19 2 current_flags, /* These switches indicate the modes for audit_. */ 4 20 3 read_audit bit (1) unaligned, /* Set by audit_input. */ 4 21 3 file_limit bit (1) unaligned, /* Set by audit_file_size=n. */ 4 22 3 write_audit bit (1) unaligned, /* Set by write_audit. */ 4 23 3 edit bit (1) unaligned, /* Set by audit_edit. */ 4 24 3 trace bit (1) unaligned, /* Set by audit_trace. */ 4 25 3 meter bit (1) unaligned, /* Set by audit_meter. */ 4 26 3 use_editor_prompt 4 27 bit (1) unaligned, /* Indicates whether to prompt in the audit editor. */ 4 28 3 unused bit (29) unaligned, 4 29 2 saved_flags like blk.current_flags, /* Copy of old current_flags, prior to suspension. */ 4 30 2 dirname char (168) unal, /* Directory of audit_file. */ 4 31 2 ename char (32) unal, /* Entryname of audit_file. */ 4 32 2 paging fixed bin (35), /* Total page faults in process since attachment. */ 4 33 2 pad bit (36), 4 34 2 virtual_time fixed bin (71), /* Total virtual cpu time since attachment. */ 4 35 2 audit_fcb ptr, /* File control block pointer for the audit_file. */ 4 36 2 audit_ptr ptr, /* Points to current segment in audit_file. */ 4 37 2 begin_ptr ptr, 4 38 2 audit_file_header_ptr 4 39 ptr, /* Points to audit_file_header (in audit_file) */ 4 40 2 trigger char (1), /* Character used to indicate an audit_ request. */ 4 41 2 editor_prompt_string 4 42 char (32) varying, /* This an ioa_ control string taking 4 43* two arguments, 1) bit(1) indicating level > 1; 4 44* 2) level. 4 45* */ 4 46 2 default_iocb ptr, /* Points to the iocb to be used for input and output. */ 4 47 2 temp_seg_ptr ptr, /* Points to the temp seg used as a buffer for input. */ 4 48 2 work_space ptr, /* Points to the beginning of buffer for get_line. */ 4 49 2 work_space_len fixed bin (24); /* Length of string in work_space buffer. */ 4 50 4 51 4 52 /* END INCLUDE FILE audit_block.incl.pl1 */ 1247 5 1 /* ****************************************************** 5 2* * * 5 3* * * 5 4* * Copyright (c) 1972 by Massachusetts Institute of * 5 5* * Technology and Honeywell Information Systems, Inc. * 5 6* * * 5 7* * * 5 8* ****************************************************** */ 5 9 5 10 /* BEGIN INCLUDE FILE audit_file_header.incl.pl1 */ 5 11 5 12 /* 5 13* This structure is recorded in the audit_file starting at byte 0. It describes 5 14* the length of the file, the length of the last entry string and where the 5 15* beginning of the file is. 5 16* 5 17* Written 09/12/78 by Lindsey Spratt 5 18* Modified: 5 19* 01/15/79 by Lindsey L. Spratt to align structure, increase size 5 20* of byte offset variables to fixed bin(24), and add 5 21* pad1 and pad2. 5 22**/ 5 23 5 24 dcl audit_file_header_length fixed bin init (64) options (constant) int static; 5 25 dcl audit_file_header_version_1 fixed bin init (1) options (constant) int static; 5 26 dcl audit_file_header_ptr ptr; 5 27 dcl 1 audit_file_header based (audit_file_header_ptr) aligned, 5 28 2 version fixed bin (17), 5 29 2 audit_index fixed bin (24), /* The offset in bytes of where the next entry would start. */ 5 30 2 current_component fixed bin (17), /* The largest component number used. */ 5 31 2 begin_index fixed bin (24), /* The byte offset of the beginning of the file. */ 5 32 2 begin_component fixed bin (17), /* Component containing beginning of file. */ 5 33 2 max_index fixed bin (24), /* Byte offset of the largest possible position. */ 5 34 2 max_component fixed bin (17), /* Component containing largest possible position. */ 5 35 2 last_entry_length fixed bin (24), /* The length of the last entry string. */ 5 36 2 filled bit (1) unal, 5 37 2 unused1 bit (35) unal, 5 38 2 pad2 (7) fixed bin (35); 5 39 5 40 5 41 /* END INCLUDE FILE audit_file_header.incl.pl1 */ 1248 1249 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 06/03/83 0829.0 audit_editor.pl1 >special_ldd>on>06/03/83>audit_editor.pl1 1244 1 06/03/83 0942.5 iocbx.incl.pl1 >special_ldd>on>06/03/83>iocbx.incl.pl1 1245 2 05/18/81 1556.5 audit_position.incl.pl1 >ldd>include>audit_position.incl.pl1 1246 3 05/03/79 1513.2 audit_entry.incl.pl1 >ldd>include>audit_entry.incl.pl1 1247 4 05/18/81 1556.5 audit_block.incl.pl1 >ldd>include>audit_block.incl.pl1 1248 5 05/03/79 1513.2 audit_file_header.incl.pl1 >ldd>include>audit_file_header.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. NL 007273 constant char(1) initial unaligned dcl 147 ref 274 306 757 abbrev_$expanded_line 000054 constant entry external dcl 130 ref 811 abline 001333 automatic char(512) unaligned dcl 809 set ref 811 811 abline_len 001332 automatic fixed bin(17,0) dcl 807 set ref 811* 813 815 815 820 821 abs_addr 001720 automatic bit(1) unaligned dcl 972 set ref 984* 1003* 1045* 1053 1064* 1084* 1088* 1096* add_addr 001721 automatic bit(1) unaligned dcl 972 set ref 985* 1003* 1090* 1097* addr builtin function dcl 90 ref 230 230 230 230 248 248 248 248 275 275 275 275 292 292 292 292 307 307 307 307 497 497 497 497 801 801 811 811 845 845 845 845 1003 1003 1003 1003 1031 1031 1031 1031 1034 1034 1034 1034 1063 1063 1063 1063 addrel builtin function dcl 90 ref 551 551 aep 000500 automatic pointer level 2 in structure "begin_position" dcl 55 in procedure "audit_editor" set ref 489 aep parameter pointer level 2 in structure "position" dcl 1205 in procedure "replace_buffer_with_entry" ref 1207 1208 1208 aep 000456 automatic pointer level 2 in structure "current_position" dcl 54 in procedure "audit_editor" set ref 187* 494 796 aep 000522 automatic pointer level 2 in structure "end_position" dcl 56 in procedure "audit_editor" set ref 489 494 allocation builtin function dcl 90 ref 160 168 1233 any_tag 110 000100 automatic bit(1) level 2 packed unaligned dcl 47 set ref 182* 446* 481* 845 area based area(2048) dcl 81 ref 527 534 542 577 582 693 areap 000550 automatic pointer dcl 62 set ref 189* 527 534 542 577 582 693 attach_data_ptr 16 based pointer level 2 dcl 1-9 ref 204 audit_entry based structure level 1 dcl 3-24 audit_fcb 4 000100 automatic pointer level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 214* audit_fcb 134 based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 214 audit_file_header based structure level 1 dcl 5-27 ref 206 audit_file_header_ptr 000752 automatic pointer dcl 5-26 in procedure "audit_editor" set ref 205* 206 207 208 209 210 212 213 217 219 audit_file_header_ptr 142 based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 205 audit_file_position_$backward_search 000024 constant entry external dcl 112 ref 1034 audit_file_position_$forward_search 000022 constant entry external dcl 110 ref 1031 audit_file_position_$last 000032 constant entry external dcl 118 ref 230 275 307 1063 audit_file_position_$move_number 000020 constant entry external dcl 108 ref 1003 audit_file_position_$next 000026 constant entry external dcl 114 ref 497 audit_file_position_$previous 000030 constant entry external dcl 116 ref 248 292 audit_file_position_$set_count 000034 constant entry external dcl 120 ref 845 audit_index 10 000100 automatic fixed bin(24,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 217* audit_index 1 based fixed bin(24,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 217 audit_ptr 6 000100 automatic pointer level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 218* audit_ptr 136 based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 218 auditing_iocb 000570 automatic pointer dcl 70 in procedure "audit_editor" set ref 220* 246 290 791 auditing_iocb based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 220 aut_last_return_line 000232 automatic structure level 1 unaligned dcl 50 set ref 178* begin_component 4 based fixed bin(17,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 208 begin_component 13 000100 automatic fixed bin(17,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 208* begin_index 12 000100 automatic fixed bin(24,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 209* begin_index 3 based fixed bin(24,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 209 begin_position 000500 automatic structure level 1 unaligned dcl 55 set ref 256* 301* 308* 323* 492 493* 742* 902* 1110* bin builtin function dcl 90 ref 998 blk based structure level 1 dcl 4-15 blkptr 000572 automatic pointer dcl 71 set ref 204* 205 214 215 216 218 220 221 258 309 447 853 1152 1220 1221 1222 ch 001614 automatic char(1) unaligned dcl 968 set ref 1015* 1020 1047 1053 1068 1068 1079 1086 1094 char_after_last_match 001212 automatic fixed bin(17,0) dcl 519 set ref 547* 549 551* 559 561 563 570 570 573 590 592 593 593 593 686* 688* char_index 2 000456 automatic fixed bin(24,0) level 2 dcl 54 set ref 186* cleanup 000610 stack reference condition dcl 95 ref 166 code 001271 automatic fixed bin(35,0) dcl 765 in procedure "set_default_search_tag" set ref 767* 768 770 code 002020 automatic fixed bin(35,0) dcl 1119 in procedure "get_string" set ref 1134* 1138 1155* 1157 1157* 1170 1172 1181* 1190* code 000547 automatic fixed bin(35,0) dcl 61 in procedure "audit_editor" set ref 190* 191 193 230* 231 231 242 248* 249 251 260* 261 263 275* 276 276 286 292* 293 295 307* 311* 312 314 324* 350* 365* 368 390* 432 435* 449* 451 453 701* 801* 845* 892* 893 895 1239* 1240 1240 code 001610 automatic fixed bin(35,0) dcl 964 in procedure "decode_address" set ref 1002* 1003* 1005 1005 1005* 1011 1024* 1025 1027 1031* 1034* 1036 1038 1063* code 001010 automatic fixed bin(35,0) dcl 516 in procedure "substitute" set ref 529* 531 533 538* 539 541 551* 553 580 583 code 001000 automatic fixed bin(35,0) dcl 486 in procedure "print" set ref 488* 497* 498 505 component_max_char_index 21 000456 automatic fixed bin(24,0) level 2 dcl 54 set ref 184* component_number 20 000456 automatic fixed bin(17,0) level 2 dcl 54 set ref 183* component_ptr 16 000456 automatic pointer level 2 dcl 54 set ref 185* con_last_return_line internal ctl structure level 1 unaligned dcl 101 set ref 160 163 168 169 178 1233 1233 continue 001717 automatic bit(1) unaligned dcl 971 set ref 988* 991 1103* cu_$cp 000052 constant entry external dcl 129 ref 701 801 current_component 2 based fixed bin(17,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 213 current_component 2 000100 automatic fixed bin(17,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 213* current_flags 44 based structure level 2 dcl 4-15 current_position 000456 automatic structure level 1 unaligned dcl 54 set ref 230 230 248 248 256 257* 275 275 292 292 300* 301 307 307 308 323 492* 495* 497 497 507* 741* 742 743 744* 845 845 989 1079 1111* 1113* default_iocb 156 based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 221 default_iocb 000554 automatic pointer dcl 64 in procedure "audit_editor" set ref 221* 234* 246 260* 279* 290 311* 449* 476* 489* 496* 500* 509* 580* 738* 775* 786* 791* 796* 815* 826* 827* 828* 829* 830* 831* 832* 833* 834* 835* 836* 837* 838* 839* 840* 841* 848* 853* 952* 1039* 1056* 1071* 1155* 1178* default_search_tag 77 000100 automatic varying char(32) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 211* 390* 845 default_search_tag 001260 automatic varying char(32) dcl 763 in procedure "set_default_search_tag" set ref 767* 773 775* 779 dirname 14 000100 automatic char(168) level 2 in structure "position_info" packed unaligned dcl 47 in procedure "audit_editor" set ref 215* dirname 46 based char(168) level 2 in structure "blk" packed unaligned dcl 4-15 in procedure "audit_editor" ref 215 edit_buffer based char unaligned dcl 83 set ref 306* 489* 496* 509* 563* 563 570* 570 593 639 683 695* 716* 725 748* 801 801 801 801 821* 1208* 1225 1230 edit_buffer_length 000575 automatic fixed bin(17,0) dcl 74 set ref 305* 306 489 489 496 496 509 509 549 551* 561* 561 563 563 563 570 570 570 573* 573 593 639 683 694* 695 715* 716 723 725 747* 748 801 801 801 801 811* 820* 821 1207* 1208 1218 1222 1224 1225 1229 1230 edit_buffer_ptr 000564 automatic pointer dcl 68 set ref 196* 306 489 496 509 551* 563 563 570 570 593 639 683 695 716 725 748 801 801 801 801 811* 821 1208 1225 1230 editor_prompt_string 145 based varying char(32) level 2 dcl 4-15 set ref 853* ename 66 000100 automatic char(32) level 2 in structure "position_info" packed unaligned dcl 47 in procedure "audit_editor" set ref 216* ename 120 based char(32) level 2 in structure "blk" packed unaligned dcl 4-15 in procedure "audit_editor" ref 216 end_position 000522 automatic structure level 1 unaligned dcl 56 set ref 256* 301* 308* 323* 493 743* 902 1112* entry_length 6 based fixed bin(24,0) level 2 dcl 3-24 ref 1207 1208 1208 entry_number 3 000456 automatic fixed bin(35,0) level 2 dcl 54 set ref 845 848* error_table_$empty_file 000062 external static fixed bin(35,0) dcl 137 ref 231 276 error_table_$end_of_info 000066 external static fixed bin(35,0) dcl 141 ref 498 1005 error_table_$no_stmt_delim 000064 external static fixed bin(35,0) dcl 139 ref 1181 file_limit 76 000100 automatic bit(1) level 2 packed unaligned dcl 47 set ref 210* filled 10 based bit(1) level 2 packed unaligned dcl 5-27 ref 210 forward 001613 automatic bit(1) unaligned dcl 967 set ref 983* 1031 1044* 1049* get_system_free_area_ 000042 constant entry external dcl 125 ref 189 get_temp_segments_ 000036 constant entry external dcl 123 ref 190 have_begin_position 001615 automatic bit(1) unaligned dcl 969 set ref 987* 1068 1081* 1108 hbound builtin function dcl 90 ref 909 926 idx_of_first_non_white_space_char 000544 automatic fixed bin(35,0) dcl 57 set ref 934* 935 938 938 938 942 index builtin function dcl 90 in procedure "audit_editor" ref 978 index 001564 automatic fixed bin(17,0) dcl 862 in procedure "parse_request" set ref 909 913 926* 927 928 944* ioa_$ioa_switch 000046 constant entry external dcl 127 ref 234 279 476 500 580 738 775 796 815 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 848 952 1039 1056 1071 1178 ioa_$ioa_switch_nnl 000050 constant entry external dcl 128 ref 489 496 509 853 iocb based structure level 1 dcl 1-9 iox_$get_line 000044 constant entry external dcl 126 ref 260 311 449 1155 last_entry_length 7 based fixed bin(24,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 219 last_entry_length 11 000100 automatic fixed bin(24,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 219* length builtin function dcl 90 ref 551 551 610 611 616 620 622 626 645 647 649 653 663 665 668 747 773 801 801 927 992 993 level 000545 automatic fixed bin(17,0) dcl 59 set ref 154* 160 168 171 476 476* 853 853* 1233 1235 ltrim builtin function dcl 90 ref 992 992 993 match_begin 001214 automatic fixed bin(17,0) dcl 521 set ref 551* 590 592 593 593 635 637 639 639 639 680 683 686 match_end 001215 automatic fixed bin(17,0) dcl 522 set ref 551* 635 637 639 639 680 688 match_index 001213 automatic fixed bin(17,0) dcl 520 set ref 549* 556* match_string 001616 automatic varying char(256) dcl 970 set ref 1024* 1031* 1034* 1039* max_component 6 based fixed bin(17,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 212 max_component 000100 automatic fixed bin(17,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 212* max_edit_buffer_length 000577 automatic fixed bin(17,0) dcl 76 set ref 181* 811* 813 max_index 1 000100 automatic fixed bin(24,0) level 2 in structure "position_info" dcl 47 in procedure "audit_editor" set ref 207* max_index 5 based fixed bin(24,0) level 2 in structure "audit_file_header" dcl 5-27 in procedure "audit_editor" ref 207 max_request_line_length 000600 automatic fixed bin(17,0) dcl 76 set ref 180* 449* 1155* new_begin_position 001746 automatic structure level 1 unaligned dcl 975 set ref 1078* 1108* 1110 new_current_position 001724 automatic structure level 1 unaligned dcl 974 set ref 989* 1003 1003 1031 1031 1034 1034 1063 1063 1078 1079* 1107 1108 1111 new_edit_buffer based char unaligned dcl 85 set ref 563 570 593* 593 611* 611 622* 622 631* 631 639* 639 649* 649 658* 658 667* 672* 672 683* 683 695 new_edit_buffer_length 000576 automatic fixed bin(17,0) dcl 74 set ref 546* 559 561 563 563 570 570 573 592* 592 593 593 593 610* 610 611 611 611 620* 620 622 622 622 630* 630 631 631 631 637* 637 639 639 639 647* 647 649 649 649 657* 657 658 658 658 665* 665 667 671* 671 672 672 672 682* 682 683 683 683 694 695 new_edit_buffer_ptr 000552 automatic pointer dcl 63 set ref 197* 563 570 593 593 611 611 622 622 631 631 639 639 649 649 658 658 667 672 672 683 683 695 new_end_position 001770 automatic structure level 1 unaligned dcl 976 set ref 1107* 1112 no_last_return_line 000562 automatic bit(1) unaligned dcl 67 set ref 162* 165* 738 non_number_index 001612 automatic fixed bin(17,0) dcl 965 set ref 995* 996 998 999 999 1001 not_in_string internal ctl bit(1) level 2 in structure "con_last_return_line" packed unaligned dcl 101 in procedure "audit_editor" set ref 1237* not_in_string 000232 automatic bit(1) level 2 in structure "aut_last_return_line" packed unaligned dcl 50 in procedure "audit_editor" set ref 726* 730* 744 1237 null builtin function dcl 89 ref 185 187 number 001611 automatic fixed bin(17,0) dcl 965 set ref 998* 1003* out based char unaligned dcl 806 set ref 815* 821 outp 001330 automatic pointer dcl 807 set ref 811* 815 821 p_actual_len parameter fixed bin(21,0) dcl 41 set ref 12 226 235 236* 268 268 273 274 274 305 306 306 756* 757 1215* 1216 1224* 1225 1229* 1230 p_audited_iocb parameter pointer dcl 42 ref 12 204 786 p_beginning_delim parameter bit(1) unaligned dcl 1122 ref 1117 1126 p_buff_len parameter fixed bin(21,0) dcl 40 set ref 12 1218 1223* p_buff_ptr parameter pointer dcl 39 set ref 12 235 268 274 306 757 1216 1220* 1221 1225 1230 p_code parameter fixed bin(35,0) dcl 709 in procedure "return_edit_line" set ref 707 732* p_code parameter fixed bin(35,0) dcl 516 in procedure "substitute" set ref 514 533* 541* 576* 583* p_code parameter fixed bin(35,0) dcl 765 in procedure "set_default_search_tag" set ref 761 770* 776* p_code parameter fixed bin(35,0) dcl 1119 in procedure "get_string" set ref 1117 1172* p_code parameter fixed bin(35,0) dcl 43 in procedure "audit_editor" set ref 12 193* 237* 242* 251* 263* 280* 282* 286* 295* 314* 355* 358* 370* 385* 387* 453* 1213 1240* p_code parameter fixed bin(35,0) dcl 964 in procedure "decode_address" set ref 962 980* 1011* 1027* 1038* 1059* 1074* 1114* p_default_search_tag parameter varying char dcl 764 set ref 761 779* p_index parameter fixed bin(17,0) dcl 862 set ref 860 869* 872* 880* 889 901* 913* 944* 956* p_position based structure level 1 unaligned dcl 464 ref 466 p_position_ptr parameter pointer dcl 465 ref 462 466 p_string parameter varying char dcl 1120 set ref 1117 1173* param_buffer based char unaligned dcl 84 set ref 235* 268 274 306 757* 1216* 1225* 1230* position 202 000232 automatic structure level 2 in structure "aut_last_return_line" unaligned dcl 50 in procedure "audit_editor" set ref 741 position 202 internal ctl structure level 2 in structure "con_last_return_line" unaligned dcl 101 in procedure "audit_editor" set ref 466* position parameter structure level 1 unaligned dcl 1205 in procedure "replace_buffer_with_entry" ref 1203 position_info 000100 automatic structure level 1 unaligned dcl 47 set ref 230 230 248 248 275 275 292 292 307 307 497 497 845 845 1003 1003 1031 1031 1034 1034 1063 1063 position_info_template 000640 automatic structure level 1 unaligned dcl 2-21 position_template 000616 automatic structure level 1 unaligned dcl 2-10 reg_exp based varying char(512) dcl 517 set ref 527 529* 534 542 551 551 577 582 689* 693 reg_exp_ptr 001220 automatic pointer dcl 525 set ref 527* 529 534 542 551 551 551 551 577 582 689 693 release_temp_segments_ 000040 constant entry external dcl 124 ref 1239 rep_str 001011 automatic varying char(512) dcl 518 set ref 538* 608 610 611 611 616 617 620 622 622 626 628 631 645 647 649 649 653 655 658 663 665 667 668 672 672 request 000033 constant varying char(12) initial array dcl 864 ref 909 926 927 928 request_index 000546 automatic fixed bin(17,0) dcl 60 set ref 325* 326 326 request_line based char unaligned dcl 82 set ref 274* 437* 702* 713 716 718* 816* 875 879* 928 931* 931 934 938* 938 952 952 955* 978 992 992* 992 993 995 998 999* 999 1010* 1015 1041* 1050* 1050 1058* 1065* 1065 1073* 1082* 1082 1091* 1091 1099* 1099 1129 1130* 1130 1139 1142 1146 1150 1150 1160 1162 1163* 1163 1180* 1187 1188* 1188 1195 1196* 1196 request_line_length 000556 automatic fixed bin(17,0) dcl 65 set ref 260* 273* 274 311* 436* 437 444 449* 701* 702 703* 711 713 713 715 716 717* 718 816 817* 870 875 875 878* 879 899 928 928 931 931 931 933* 933 934 938 938 938 938 942* 942 952 952 952 952 954* 955 978 991 992 992 992 993* 993 995 998 999 999 999 1001* 1001 1009* 1010 1015 1040* 1041 1050 1050 1050 1051* 1051 1057* 1058 1065 1065 1065 1066* 1066 1072* 1073 1082 1082 1082 1083* 1083 1091 1091 1091 1092* 1092 1099 1099 1099 1100* 1100 1129 1130 1130 1130 1131* 1131 1138 1139 1142 1144 1146 1148 1150 1150 1155* 1160 1162 1163 1163 1163 1165* 1165 1179* 1180 1187 1188 1188 1188 1189* 1189 1195 1196 1196 1196 1197* 1197 request_line_ptr 000560 automatic pointer dcl 66 set ref 198* 260* 274 311* 437 449* 701* 702 713 716 718 816 875 879 928 931 931 934 938 938 952 952 955 978 992 992 992 993 995 998 999 999 1010 1015 1041 1050 1050 1058 1065 1065 1073 1082 1082 1091 1091 1099 1099 1129 1130 1130 1139 1142 1146 1150 1150 1155* 1160 1162 1163 1163 1180 1187 1188 1188 1195 1196 1196 request_name_length 001565 automatic fixed bin(17,0) dcl 863 set ref 927* 928 928 931 931 933 rtrim builtin function dcl 90 ref 801 801 saved_audit_file_header 000211 automatic structure level 1 unaligned dcl 48 set ref 206* search builtin function dcl 90 ref 617 1139 search_file_ 000056 constant entry external dcl 131 ref 551 search_index 002223 automatic fixed bin(17,0) dcl 1124 set ref 1139* 1140 1142 1144 1146 1148 1150 1150 1160 1162 1163 1163 1165 1187 1188 1188 1189 1195 1196 1196 1197 search_string 002222 automatic char(2) unaligned dcl 1123 set ref 1136* 1139 search_tag 4 000456 automatic varying char(32) level 2 dcl 54 set ref 845 slash_amp_index 001217 automatic fixed bin(17,0) dcl 524 set ref 617* 618 628 630 631 631 634 645 655 657 658 658 661 663 671 672 672 672 676 start_next_search 001216 automatic fixed bin(17,0) dcl 523 set ref 606* 610 611 611 616 617 620 622 622 626* 628 631 634* 634 645 647 649 649 653* 655 658 661* 661 663 665 667 668* 672 672 676* 676 static_level 000016 internal static fixed bin(17,0) initial dcl 146 set ref 153* 153 154 171* 1235* str 002021 automatic varying char(512) dcl 1121 set ref 1135* 1150* 1150 1162* 1162 1173 1182* 1187* 1187 1195* 1195 string 10 based char level 2 in structure "audit_entry" dcl 3-24 in procedure "audit_editor" ref 1208 string 1 internal ctl varying char(512) level 2 in structure "con_last_return_line" dcl 101 in procedure "audit_editor" set ref 1236* string 1 000232 automatic varying char(512) level 2 in structure "aut_last_return_line" dcl 50 in procedure "audit_editor" set ref 725* 729* 747 748 1236 string_delimiter 000566 automatic char(1) unaligned dcl 69 set ref 1129* 1136 1142 1160 1162 1178* substr builtin function dcl 90 set ref 268 274 306 563 570* 570 593 593 611 611 617 622 622 628 631 631 639 639 649 649 655 658 658 667 672 672 672 683 683 713 875 928 931* 931 938* 938 952 952 978 992* 998 999* 999 1015 1050* 1050 1065* 1065 1082* 1082 1091* 1091 1099* 1099 1129 1130* 1130 1142 1146 1150 1150 1160 1162 1163* 1163 1187 1188* 1188 1195 1196* 1196 1208 subtract_addr 001722 automatic bit(1) unaligned dcl 972 set ref 986* 1003* 1089* 1098* sys_info$max_seg_size 000060 external static fixed bin(35,0) dcl 136 ref 180 181 1223 tag 7 based char(2) level 2 dcl 3-24 set ref 796* temp_seg_ptr 160 based pointer level 2 in structure "blk" dcl 4-15 in procedure "audit_editor" ref 1220 temp_seg_ptr 000602 automatic pointer array dcl 78 in procedure "audit_editor" set ref 190* 196 197 198 1239* use_editor_prompt 44(06) based bit(1) level 3 packed unaligned dcl 4-15 ref 258 309 447 1152 verify builtin function dcl 90 ref 934 995 warn_user_on_bad_request 000574 automatic bit(1) unaligned dcl 72 set ref 179* 272* 328 330* 438 440* 457* work_space 162 based pointer level 2 dcl 4-15 set ref 1221* work_space_len 164 based fixed bin(24,0) level 2 dcl 4-15 set ref 1222* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. aep automatic pointer dcl 3-23 audit_entry_header_length internal static fixed bin(17,0) initial dcl 3-20 audit_file_header_length internal static fixed bin(17,0) initial dcl 5-24 audit_file_header_version_1 internal static fixed bin(17,0) initial dcl 5-25 impossible_audit_entry_length internal static fixed bin(24,0) initial dcl 3-20 iox_$iocb_version_sentinel external static char(4) dcl 1-64 NAMES DECLARED BY EXPLICIT CONTEXT. LAB 000000 constant label array(27) dcl 338 set ref 326 331 441 NEXT_REQUEST 001723 constant label dcl 432 ref 328 340 344 348 352 363 368 379 394 399 404 409 414 419 425 429 abbrev_expand_edit_line 003657 constant entry internal dcl 804 ref 416 add_char_to_str 006204 constant entry internal dcl 1193 ref 1146 1167 add_rest_of_str 006153 constant entry internal dcl 1185 ref 1142 audit_editor 000645 constant entry external dcl 12 audit_off 003573 constant entry internal dcl 789 ref 401 audit_on 003565 constant entry internal dcl 784 ref 396 colon 002057 constant entry internal dcl 479 ref 342 command_processor_escape 003313 constant entry internal dcl 699 ref 361 decode_address 004725 constant entry internal dcl 962 ref 892 execute_edit_line 003624 constant entry internal dcl 799 ref 411 finish 006244 constant entry internal dcl 1211 ref 238 243 252 264 281 287 296 315 357 371 386 454 get_last_line_returned 003407 constant entry internal dcl 736 ref 376 get_string 005574 constant entry internal dcl 1117 ref 529 538 767 1024 list_requests 003752 constant entry internal dcl 824 ref 422 missing_delim 006110 constant entry internal dcl 1176 ref 1140 1144 1170 parse_request 004471 constant entry internal dcl 860 ref 325 print 002063 constant entry internal dcl 484 ref 346 print_entry_number 004357 constant entry internal dcl 843 ref 427 print_type 003577 constant entry internal dcl 794 ref 406 put_prompt 004435 constant entry internal dcl 851 ref 258 309 447 1152 replace_buffer_with_entry 006231 constant entry internal dcl 1203 ref 257 300 495 507 744 1113 request_check 004557 constant entry internal dcl 919 ref 887 908 return_edit_line 003336 constant entry internal dcl 707 ref 365 return_newline 003461 constant entry internal dcl 754 ref 382 set_default_search_tag 003473 constant entry internal dcl 761 ref 390 set_last_return_line_position 002004 constant entry external dcl 462 substitute 002260 constant entry internal dcl 514 ref 350 unrecognized_request 004656 constant entry internal dcl 950 ref 895 909 whoami 002022 constant entry internal dcl 474 ref 338 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7576 7666 7300 7606 Length 10242 7300 70 337 275 10 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME audit_editor 1814 external procedure is an external procedure. on unit on line 166 64 on unit whoami internal procedure shares stack frame of external procedure audit_editor. colon internal procedure shares stack frame of external procedure audit_editor. print internal procedure shares stack frame of external procedure audit_editor. substitute internal procedure shares stack frame of external procedure audit_editor. command_processor_escape internal procedure shares stack frame of external procedure audit_editor. return_edit_line internal procedure shares stack frame of external procedure audit_editor. get_last_line_returned internal procedure shares stack frame of external procedure audit_editor. return_newline internal procedure shares stack frame of external procedure audit_editor. set_default_search_tag internal procedure shares stack frame of external procedure audit_editor. audit_on internal procedure shares stack frame of external procedure audit_editor. audit_off internal procedure shares stack frame of external procedure audit_editor. print_type internal procedure shares stack frame of external procedure audit_editor. execute_edit_line internal procedure shares stack frame of external procedure audit_editor. abbrev_expand_edit_line internal procedure shares stack frame of external procedure audit_editor. list_requests internal procedure shares stack frame of external procedure audit_editor. print_entry_number internal procedure shares stack frame of external procedure audit_editor. put_prompt internal procedure shares stack frame of external procedure audit_editor. parse_request internal procedure shares stack frame of external procedure audit_editor. request_check internal procedure shares stack frame of external procedure audit_editor. unrecognized_request internal procedure shares stack frame of external procedure audit_editor. decode_address internal procedure shares stack frame of external procedure audit_editor. get_string internal procedure shares stack frame of external procedure audit_editor. missing_delim internal procedure shares stack frame of external procedure audit_editor. add_rest_of_str internal procedure shares stack frame of external procedure audit_editor. add_char_to_str internal procedure shares stack frame of external procedure audit_editor. replace_buffer_with_entry internal procedure shares stack frame of external procedure audit_editor. finish internal procedure shares stack frame of external procedure audit_editor. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000016 static_level audit_editor STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME audit_editor 000100 position_info audit_editor 000211 saved_audit_file_header audit_editor 000232 aut_last_return_line audit_editor 000456 current_position audit_editor 000500 begin_position audit_editor 000522 end_position audit_editor 000544 idx_of_first_non_white_space_char audit_editor 000545 level audit_editor 000546 request_index audit_editor 000547 code audit_editor 000550 areap audit_editor 000552 new_edit_buffer_ptr audit_editor 000554 default_iocb audit_editor 000556 request_line_length audit_editor 000560 request_line_ptr audit_editor 000562 no_last_return_line audit_editor 000564 edit_buffer_ptr audit_editor 000566 string_delimiter audit_editor 000570 auditing_iocb audit_editor 000572 blkptr audit_editor 000574 warn_user_on_bad_request audit_editor 000575 edit_buffer_length audit_editor 000576 new_edit_buffer_length audit_editor 000577 max_edit_buffer_length audit_editor 000600 max_request_line_length audit_editor 000602 temp_seg_ptr audit_editor 000616 position_template audit_editor 000640 position_info_template audit_editor 000752 audit_file_header_ptr audit_editor 001000 code print 001010 code substitute 001011 rep_str substitute 001212 char_after_last_match substitute 001213 match_index substitute 001214 match_begin substitute 001215 match_end substitute 001216 start_next_search substitute 001217 slash_amp_index substitute 001220 reg_exp_ptr substitute 001260 default_search_tag set_default_search_tag 001271 code set_default_search_tag 001330 outp abbrev_expand_edit_line 001332 abline_len abbrev_expand_edit_line 001333 abline abbrev_expand_edit_line 001564 index parse_request 001565 request_name_length parse_request 001610 code decode_address 001611 number decode_address 001612 non_number_index decode_address 001613 forward decode_address 001614 ch decode_address 001615 have_begin_position decode_address 001616 match_string decode_address 001717 continue decode_address 001720 abs_addr decode_address 001721 add_addr decode_address 001722 subtract_addr decode_address 001724 new_current_position decode_address 001746 new_begin_position decode_address 001770 new_end_position decode_address 002020 code get_string 002021 str get_string 002222 search_string get_string 002223 search_index get_string THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return enable shorten_stack ext_entry int_entry push_ctl_data pop_ctl_data allocation search_eis any_to_any_tr alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. abbrev_$expanded_line audit_file_position_$backward_search audit_file_position_$forward_search audit_file_position_$last audit_file_position_$move_number audit_file_position_$next audit_file_position_$previous audit_file_position_$set_count cu_$cp get_system_free_area_ get_temp_segments_ ioa_$ioa_switch ioa_$ioa_switch_nnl iox_$get_line release_temp_segments_ search_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$empty_file error_table_$end_of_info error_table_$no_stmt_delim sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 12 000640 153 000652 154 000653 160 000655 162 000661 163 000663 164 000666 165 000667 166 000670 168 000704 169 000712 170 000714 171 000715 172 000720 178 000721 179 000726 180 000727 181 000732 182 000733 183 000734 184 000736 185 000740 186 000742 187 000744 189 000746 190 000754 191 001002 193 001004 194 001006 196 001007 197 001011 198 001013 204 001015 205 001022 206 001024 207 001070 208 001072 209 001074 210 001076 211 001100 212 001104 213 001106 214 001110 215 001113 216 001117 217 001122 218 001124 219 001126 220 001130 221 001132 226 001134 230 001140 231 001157 234 001164 235 001203 236 001212 237 001213 238 001214 239 001215 242 001216 243 001220 244 001221 246 001222 248 001226 249 001245 251 001247 252 001251 253 001252 256 001253 257 001264 258 001266 260 001273 261 001314 263 001316 264 001320 265 001321 267 001322 268 001323 272 001331 273 001333 274 001335 275 001356 276 001376 279 001403 280 001422 281 001425 282 001426 283 001430 286 001431 287 001433 288 001434 290 001435 292 001441 293 001460 295 001462 296 001464 297 001465 300 001466 301 001470 302 001501 305 001502 306 001504 307 001525 308 001545 309 001556 311 001563 312 001604 314 001606 315 001610 316 001611 323 001612 324 001623 325 001624 326 001626 328 001631 330 001633 331 001634 338 001635 340 001636 342 001637 344 001640 346 001641 348 001642 350 001643 352 001645 355 001646 357 001651 358 001652 359 001654 361 001655 363 001656 365 001657 368 001661 370 001663 371 001665 372 001666 376 001667 379 001670 382 001671 385 001672 386 001675 387 001676 388 001700 390 001701 394 001704 396 001705 399 001706 401 001707 404 001710 406 001711 409 001712 411 001713 414 001714 416 001715 419 001716 422 001717 425 001720 427 001721 429 001722 432 001723 435 001725 436 001726 437 001727 438 001734 440 001736 441 001737 444 001740 446 001743 447 001744 449 001751 451 001770 453 001772 454 001774 455 001775 457 001776 459 001777 460 002000 462 002001 466 002011 467 002021 474 002022 476 002023 477 002056 479 002057 481 002060 482 002062 484 002063 488 002064 489 002065 492 002120 493 002123 494 002126 495 002132 496 002134 497 002162 498 002201 500 002205 502 002223 504 002224 505 002225 507 002227 509 002231 512 002257 514 002260 527 002262 529 002267 531 002311 533 002313 534 002315 535 002317 538 002320 539 002325 541 002327 542 002331 543 002333 546 002334 547 002335 549 002337 551 002343 553 002401 556 002403 559 002406 561 002412 563 002417 568 002442 570 002444 573 002500 576 002506 577 002510 578 002512 580 002513 582 002541 583 002543 584 002546 590 002547 592 002552 593 002555 596 002605 606 002606 608 002610 610 002615 611 002622 615 002657 616 002661 617 002665 618 002705 620 002706 622 002713 626 002741 627 002745 628 002746 630 002754 631 002760 634 003006 635 003011 637 003014 639 003020 643 003053 644 003054 645 003055 647 003062 649 003067 653 003112 654 003116 655 003117 657 003124 658 003126 661 003150 662 003153 663 003154 665 003156 667 003163 668 003170 669 003173 671 003174 672 003176 676 003233 678 003237 680 003240 682 003243 683 003244 686 003267 687 003273 688 003274 689 003276 691 003277 693 003301 694 003303 695 003305 696 003312 699 003313 701 003314 702 003327 703 003334 704 003335 707 003336 711 003340 713 003343 715 003351 716 003353 717 003360 718 003361 723 003365 725 003370 726 003400 727 003401 729 003402 730 003403 732 003405 733 003406 736 003407 738 003410 741 003433 742 003436 743 003441 744 003444 747 003451 748 003453 751 003460 754 003461 756 003462 757 003465 758 003472 761 003473 767 003504 768 003511 770 003513 771 003515 773 003516 775 003521 776 003546 777 003551 779 003552 780 003564 784 003565 786 003566 787 003572 789 003573 791 003574 792 003576 794 003577 796 003600 797 003623 799 003624 801 003625 802 003656 804 003657 811 003660 813 003703 815 003706 816 003734 817 003741 818 003742 820 003743 821 003744 822 003751 824 003752 826 003753 827 003773 828 004013 829 004036 830 004056 831 004076 832 004116 833 004136 834 004156 835 004176 836 004216 837 004236 838 004256 839 004276 840 004316 841 004336 842 004356 843 004357 845 004360 848 004411 849 004434 851 004435 853 004436 854 004470 860 004471 869 004473 870 004474 872 004477 873 004500 875 004501 878 004507 879 004510 880 004514 881 004516 887 004517 889 004520 892 004523 893 004525 895 004527 897 004532 899 004533 901 004536 902 004541 904 004544 908 004545 909 004546 913 004553 914 004555 958 004556 919 004557 926 004560 927 004565 928 004571 931 004605 933 004612 934 004614 935 004627 938 004631 942 004640 944 004647 945 004652 947 004653 948 004655 950 004656 952 004657 954 004713 955 004715 956 004722 957 004724 962 004725 978 004727 980 004741 981 004743 983 004744 984 004746 985 004747 986 004750 987 004751 988 004752 989 004753 991 004756 992 004762 993 005000 995 005012 996 005025 998 005027 999 005042 1001 005057 1002 005062 1003 005063 1005 005112 1009 005121 1010 005122 1011 005127 1012 005131 1015 005132 1020 005137 1024 005142 1025 005147 1027 005151 1028 005153 1031 005154 1034 005207 1036 005237 1038 005241 1039 005243 1040 005272 1041 005273 1042 005300 1044 005301 1045 005303 1046 005305 1047 005306 1049 005310 1050 005311 1051 005316 1052 005320 1053 005321 1056 005326 1057 005351 1058 005352 1059 005357 1060 005362 1063 005363 1064 005402 1065 005404 1066 005412 1067 005414 1068 005415 1071 005423 1072 005446 1073 005447 1074 005454 1075 005457 1078 005460 1079 005463 1081 005471 1082 005473 1083 005501 1084 005503 1085 005505 1086 005506 1088 005510 1089 005512 1090 005513 1091 005515 1092 005522 1093 005524 1094 005525 1096 005527 1097 005531 1098 005532 1099 005534 1100 005541 1101 005543 1103 005544 1106 005545 1107 005546 1108 005551 1110 005556 1111 005561 1112 005564 1113 005567 1114 005571 1115 005573 1117 005574 1126 005605 1129 005613 1130 005620 1131 005625 1134 005627 1135 005631 1136 005632 1138 005637 1139 005645 1140 005653 1142 005656 1144 005665 1146 005671 1148 005677 1150 005703 1152 005742 1155 005750 1157 005767 1159 005773 1160 005774 1162 006001 1163 006037 1165 006062 1166 006064 1167 006065 1168 006066 1170 006067 1172 006073 1173 006076 1174 006107 1176 006110 1178 006111 1179 006140 1180 006141 1181 006146 1182 006151 1183 006152 1185 006153 1187 006154 1188 006172 1189 006200 1190 006202 1191 006203 1193 006204 1195 006205 1196 006220 1197 006226 1198 006230 1203 006231 1207 006233 1208 006237 1209 006243 1211 006244 1213 006245 1215 006250 1216 006251 1217 006257 1218 006260 1220 006263 1221 006266 1222 006270 1223 006271 1224 006275 1225 006277 1226 006305 1229 006306 1230 006307 1233 006315 1235 006324 1236 006330 1237 006336 1239 006340 1240 006365 1242 006371 ----------------------------------------------------------- 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