COMPILATION LISTING OF SEGMENT cref_filegen_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/01/85 0807.5 mst Mon 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: style1,^inddcls,ifthenstmt,ifthendo,ifthen,indcomtxt,dclind5,ind3 */ 12 cref_filegen_: proc (output_seg_ptr_arg, msf_fcb_ptr_arg); 13 14 /* This module simply converts all the data in the cross-referencer's 15* database into a printable file. 16* 17* Completely rewritten 02/03/76 by C. D. Tavares 18* Modified 11/19/76 by CDT to allow output to be an MSF. 19* Last modified 12/06/80 by CDT to fix bug where random entrypoints of 20* non-located modules were being printed without "(?)" after them. 21* Modified: 25 March 1985 by G. Palter to fix the bug which causes cref 22* to generate a component full of nulls under very rare circumstances. 23**/ 24 25 26 dcl output_seg_ptr_arg pointer parameter, 27 msf_fcb_ptr_arg pointer parameter; 28 29 dcl output_seg_ptr pointer, 30 msf_fcb_ptr pointer; 31 32 dcl output_seg char (max_char_count) based (output_seg_ptr), 33 max_char_count fixed bin (21) initial (sys_info$max_seg_size * 4), 34 sys_info$max_seg_size ext fixed bin (35); 35 36 dcl (char_position, 37 line_position, 38 last_blackspace) fixed bin (21), 39 cur_component fixed bin, 40 node pointer, 41 is_synonym bit (1) aligned, 42 bucket fixed bin; 43 44 dcl (adde, divide, index, 45 length, max, mod, null, 46 string, substr, unspec) builtin; 47 48 dcl cref_listman_$get_consecutive_segnames 49 entry (pointer, fixed bin) returns (pointer), 50 cref_listman_$get_primary_block_long 51 entry (pointer, char (32) varying dimension (*), 52 fixed bin, bit (1) aligned, char (*) varying, 53 char (*) varying), 54 cref_listman_$get_defs entry (pointer, pointer dimension (*), fixed bin), 55 cref_listman_$get_implicit_defs 56 entry (pointer, pointer dimension (*), fixed bin), 57 cref_listman_$get_name entry (pointer) returns (char (32) varying), 58 cref_listman_$get_name_with_suffix 59 entry (pointer) returns (char (32) varying), 60 cref_listman_$get_crossrefs 61 entry (pointer, pointer dimension (*), fixed bin), 62 cref_listman_$get_consecutive_include_files 63 entry (pointer, fixed bin, char (*) varying, 64 bit (72)) returns (pointer), 65 cref_listman_$get_include_file_crossrefs 66 entry (pointer, pointer dimension (*), fixed bin); 67 68 dcl include_file_name char (32) varying, 69 date_time_modified bit (72); 70 71 dcl msf_manager_$get_ptr entry (pointer, fixed bin, bit (1) aligned, 72 pointer, fixed bin (24), fixed bin (35)), 73 msf_manager_$adjust entry (pointer, fixed bin, fixed bin (24), 74 bit (3) aligned, fixed bin (35)), 75 hcs_$truncate_seg entry (pointer, fixed bin (19), fixed bin (35)); 76 77 dcl char_dtm char (24); 78 79 dcl date_time_ entry (bit (72), char (*)); 80 81 dcl cref_filegen_$report_error 82 entry options (variable); 83 84 85 dcl error_table_$no_ext_sym 86 fixed bin (35) static external; 87 88 dcl dir_name char (168) varying, 89 bound_seg_name char (32) varying, 90 environment_description 91 char (200) varying; 92 93 dcl (i, j, k) fixed bin; 94 95 dcl form_feed char (1); 96 97 dcl default_max_line_position 98 fixed bin static options (constant) init (132), 99 max_line_position fixed bin static; 100 101 dcl name_list (100) char (32) varying, 102 explanation char (32) varying, 103 n_names fixed bin; 104 105 106 dcl def_array_len fixed bin, 107 crossref_array_len fixed bin; 108 109 dcl large_strucp pointer static initial (null); 110 111 dcl 1 large_struc based (large_strucp) aligned, 112 2 ndefs fixed bin, 113 2 def_array (NDEFS refer (ndefs)) pointer, 114 2 def_ok (NDEFS refer (ndefs)) bit (1) unaligned, 115 2 crossref_array (NDEFS refer (ndefs)) pointer, 116 2 names (NDEFS refer (ndefs)) char (32) varying, 117 2 sort_structure aligned, 118 3 n_elements fixed bin (24), 119 3 name_ptrs (NDEFS refer (ndefs)) ptr unaligned, 120 2 index_structure aligned, 121 3 n_elements fixed bin (24), 122 3 indices (NDEFS refer (ndefs)) fixed bin (24); 123 124 dcl NDEFS fixed bin static initial (2000) options (constant); 125 126 dcl (seg_was_found, 127 should_complain) bit (1) aligned, 128 defname char (32) varying; 129 130 dcl moby_bar char (20) varying static initial ((20)"-"); 131 132 dcl (left_margin initial (0), 133 any_margin initial (1000), 134 def_margin initial (1), 135 syn_margin initial (30), 136 title_margin initial (20), 137 crossref_margin initial (20)) fixed bin static; 138 139 dcl bar_margin fixed bin, 140 interstice fixed bin; 141 142 dcl com_err_ entry options (variable), 143 cref_abort_ condition; 144 145 dcl code fixed bin (35); 146 147 output_seg_ptr = output_seg_ptr_arg; 148 msf_fcb_ptr = msf_fcb_ptr_arg; 149 150 char_position = 1; 151 cur_component = 0; 152 last_blackspace = 1; 153 line_position = 1; 154 155 bar_margin = max_line_position - length (moby_bar); 156 interstice = max_line_position - 2 * length (moby_bar); 157 158 unspec (form_feed) = "014"b3; 159 160 node = null; 161 bucket = 0; 162 163 node = cref_listman_$get_consecutive_segnames (node, bucket); 164 165 do while (node ^= null); 166 167 seg_was_found = ""b; 168 169 /* Get all the good dirt about this entry */ 170 171 call cref_listman_$get_primary_block_long 172 (node, name_list, n_names, is_synonym, dir_name, bound_seg_name); 173 174 if n_names < 0 then do; 175 explanation = "synonyms"; 176 goto out_of_room; 177 end; 178 179 environment_description = ""; 180 181 if bound_seg_name = "" then if dir_name = "" then 182 environment_description = "***** NOT FOUND *****"; 183 184 if is_synonym then seg_was_found = "1"b; 185 186 if environment_description = "" then do; 187 seg_was_found = "1"b; 188 environment_description = "***** " || bound_seg_name 189 || " in " || dir_name || " *****"; 190 end; 191 192 193 if (^short_switch | seg_was_found) then do; 194 195 call print_token 196 ((moby_bar), left_margin, left_margin, 197 max_line_position); /* header */ 198 199 200 if ^is_synonym then 201 call print_token 202 ((environment_description), any_margin, 203 length (moby_bar) + max (1, 204 divide (interstice - 205 length (environment_description), 2, 17)), 206 max_line_position); 207 208 call print_token 209 ((moby_bar), bar_margin, bar_margin, max_line_position); 210 211 /* Put out the name of the segment */ 212 213 call print_token 214 ((name_list (1)), left_margin, left_margin, 215 max_line_position); 216 217 if ^seg_was_found then 218 call print_token (" (?)", max_line_position, 219 left_margin, max_line_position); 220 221 call print_space; 222 call print_space; 223 224 if is_synonym then 225 call print_token 226 ("SEE: " || name_list (2), title_margin, 227 title_margin, max_line_position); 228 229 else do; 230 231 if n_names > 1 then do; /* it has syns */ 232 233 call print_token ("SYNONYM: ", 234 title_margin, title_margin, 235 max_line_position); 236 237 do i = 2 to n_names; 238 if i > 2 then 239 call print_token (", ", any_margin, 240 syn_margin, max_line_position); 241 call print_token ((name_list (i)), any_margin, 242 syn_margin, max_line_position - 2); 243 244 /* We don't want a line starting with a comma */ 245 end; 246 end; 247 248 /* Get the entrypoins of this module */ 249 250 call cref_listman_$get_defs 251 (node, def_array, def_array_len); 252 253 if def_array_len < 0 then do; 254 explanation = "definitions"; 255 goto out_of_room; 256 end; 257 258 call loop_thru_defs (""b); 259 260 /* Now get the defs that should have been there, but weren't */ 261 262 call cref_listman_$get_implicit_defs 263 (node, def_array, def_array_len); 264 265 if def_array_len < 0 then do; 266 explanation = "implicit definitions"; 267 goto out_of_room; 268 end; 269 270 if def_array_len > 0 then do; 271 string (def_ok) = ""b; 272 if seg_was_found then do; 273 274 /* Report that implicit defs were generated for it */ 275 276 should_complain = ""b; 277 278 do i = 1 to def_array_len; 279 280 defname = cref_listman_$get_name 281 (def_array (i)); 282 283 if index (defname, "$") = 284 length (defname) then do; 285 286 /* links of the form "myself$" are ok; trim the "$" */ 287 288 defname = substr (defname, 1, 289 length (defname) - 1); 290 291 do j = 1 to n_names while 292 (name_list (j) ^= defname); 293 end; 294 295 /* If none of the names matched, complain */ 296 297 if j > n_names then 298 should_complain = "1"b; 299 300 else def_ok (i) = "1"b; 301 end; 302 303 else if defname = "symbol_table" then 304 def_ok (i) = "1"b; 305 306 else should_complain = "1"b; 307 end; 308 309 if should_complain then 310 311 /* Significant error */ 312 call cref_filegen_$report_error 313 (error_table_$no_ext_sym, 314 "cref_filegen_", 315 "^a were generated for ^a.", 316 "Implicit definitions", 317 cref_listman_$get_name (node)); 318 end; 319 end; 320 321 call loop_thru_defs ("1"b); 322 323 end; 324 325 call print_lineskip; 326 end; 327 328 node = cref_listman_$get_consecutive_segnames (node, bucket); 329 end; 330 331 332 /* Now list the include files */ 333 334 node = null; 335 bucket = 0; 336 337 node = cref_listman_$get_consecutive_include_files 338 (node, bucket, include_file_name, date_time_modified); 339 340 if node ^= null then do; 341 342 call print_formfeed; 343 344 do while (node ^= null); 345 346 call print_token 347 ((moby_bar), left_margin, left_margin, max_line_position); 348 349 call print_token 350 ((include_file_name), left_margin, left_margin, 351 max_line_position); 352 353 call print_space; 354 call print_space; 355 356 call date_time_ (date_time_modified, char_dtm); 357 358 call print_token 359 ("***** ", syn_margin, syn_margin, max_line_position); 360 call print_token 361 ((char_dtm), any_margin, syn_margin, max_line_position); 362 call print_token 363 (" *****", any_margin, syn_margin, max_line_position); 364 365 366 call cref_listman_$get_include_file_crossrefs 367 (node, crossref_array, crossref_array_len); 368 if crossref_array_len < 0 then do; 369 explanation = "include file crossrefs"; 370 goto out_of_room; 371 end; 372 373 do i = 1 to crossref_array_len; 374 if i = 1 then call print_token 375 ("", crossref_margin, crossref_margin, 376 max_line_position); 377 call print_token 378 ((cref_listman_$get_name_with_suffix 379 (crossref_array (i))), 380 any_margin, crossref_margin, max_line_position); 381 call print_tab; 382 end; 383 384 node = cref_listman_$get_consecutive_include_files 385 (node, bucket, include_file_name, date_time_modified); 386 387 call print_lineskip; 388 end; 389 390 call print_lineskip; 391 end; 392 393 394 /* Now append any waiting error messages to the end of the listing */ 395 396 if err_index > 0 then do; 397 398 call print_formfeed; 399 400 call put_out_fixedstring 401 (substr (err_messages, 1, err_index)); 402 end; 403 404 405 call msf_manager_$adjust 406 (msf_fcb_ptr, cur_component, (char_position - 1) * 9, "111"b, code); 407 if code ^= 0 then 408 call com_err_ 409 (code, "cref_filegen_", "Setting bit count on output file."); 410 411 return; 412 413 out_of_room: 414 call com_err_ (0, "cref_filegen_", 415 "Internal table has overflowed. Too many ^a for ""^a""", 416 explanation, name_list (1)); 417 signal cref_abort_; 418 goto out_of_room; 419 420 loop_thru_defs: proc (defs_are_implicit); 421 422 /* This internal subroutine prints the references for each definition, as well 423* as printing the definition itself. */ 424 425 dcl defs_are_implicit bit (1) aligned; 426 427 dcl (i, j) fixed bin; 428 429 dcl sort_items_indirect_$varying_char 430 entry (pointer, pointer); 431 432 433 if def_array_len < 1 then return; 434 435 sort_structure.n_elements, index_structure.n_elements = def_array_len; 436 437 do i = 1 to def_array_len; 438 names (i) = cref_listman_$get_name (def_array (i)); 439 name_ptrs (i) = addr (names (i)); 440 end; 441 442 if def_array_len > 1 then 443 call sort_items_indirect_$varying_char 444 (addr (sort_structure), addr (index_structure)); 445 446 else indices (1) = 1; 447 448 /* Now print the info about each item */ 449 450 do k = 1 to def_array_len; 451 452 i = index_structure.indices (k); 453 454 call print_token 455 ((cref_listman_$get_name (def_array (i))), def_margin, 456 def_margin, max_line_position); 457 458 if defs_are_implicit then 459 if ^def_ok (i) then 460 call print_token 461 (" (?)", max_line_position, left_margin, 462 max_line_position); 463 call print_tab; 464 465 call cref_listman_$get_crossrefs 466 (def_array (i), crossref_array, crossref_array_len); 467 468 /* The crossrefs will always be in alphabetical order, because they were 469* created via a scan of the database which was performed in alphabetical 470* order. */ 471 472 if crossref_array_len < 0 then do; 473 explanation = "cross-references"; 474 goto out_of_room; 475 end; 476 477 /* Put out the names of all the referencers */ 478 479 do j = 1 to crossref_array_len; 480 if j = 1 then call print_token 481 ("", crossref_margin, crossref_margin, max_line_position); 482 else call print_tab; 483 484 call print_token 485 (cref_listman_$get_name_with_suffix (crossref_array (j)), 486 any_margin, crossref_margin, max_line_position); 487 end; 488 end; 489 end loop_thru_defs; 490 491 print_token: proc (token, force_column, fold_column, max_column); 492 493 /* This internal subroutine places some token into the output file. The token 494* is constrained to appear in a place defined by the other arguments. Its 495* leftmost char cannot appear at any column greater than force_column; if it 496* would, it is put on a new line. The leftmost char of the token cannot 497* appear at any column less than fold_column, which is a left-margin 498* indicator. Its rightmost character cannot exceed max_column; if it does, 499* it is put on a new line instead. */ 500 501 dcl token char (168) varying, 502 503 /* If I use (*) I get a non-quick block */ 504 505 (force_column, fold_column, max_column) fixed bin; 506 507 dcl token_len fixed bin; 508 509 dcl substr builtin; 510 511 dcl (tab initial (" "), 512 space initial (" "), 513 nl initial (" 514 ") ) char (1) varying static; 515 516 dcl (ten_spaces char (10) initial ((10)" "), 517 thirteen_tabs char (13) initial ((13)" "), 518 two_nls char (2) varying initial ((2)" 519 ") ) static; 520 521 dcl temp fixed bin; 522 523 token_len = length (token); 524 525 if line_position > force_column then do; /* must fold */ 526 call backup_to_position (last_blackspace); 527 call put_out ((nl)); 528 line_position = 0; 529 end; 530 531 if line_position < fold_column then do; 532 temp = divide (fold_column, 10, 17) 533 - divide (line_position, 10, 17); 534 535 if temp > 0 then do; /* can use tabs? */ 536 call put_out (substr (thirteen_tabs, 1, temp)); 537 line_position = 10 * divide (fold_column, 10, 17); 538 end; 539 540 call put_out (substr (ten_spaces, 1, fold_column - line_position)); 541 line_position = fold_column; 542 end; 543 544 if token_len + line_position > max_column then do; /* must fold */ 545 call backup_to_position (last_blackspace); 546 call put_out ((nl)); 547 548 if token_len + fold_column > max_column then 549 550 /* Too big for line as is, don't fold */ 551 line_position = 0; 552 553 else do; 554 call put_out 555 (substr (thirteen_tabs, 1, 556 divide (fold_column, 10, 17))); 557 call put_out 558 (substr (ten_spaces, 1, mod (fold_column, 10))); 559 line_position = fold_column; 560 end; 561 end; 562 563 call put_out (token); 564 line_position = line_position + token_len; 565 last_blackspace = char_position; 566 return; 567 568 print_space: entry; 569 570 line_position = line_position + 1; 571 if line_position + 1 ^> max_line_position then call put_out ((space)); 572 return; 573 574 print_formfeed: entry; 575 call put_out ((form_feed)); 576 return; 577 578 print_lineskip: entry; 579 580 call put_out ((two_nls)); 581 line_position = 0; 582 last_blackspace = char_position; /* NL's count */ 583 return; 584 585 print_tab: entry; 586 587 dcl new_line_position fixed bin; 588 589 if line_position > max_line_position then return; 590 591 new_line_position = 10 * (divide (line_position, 10, 17) + 1); 592 if new_line_position ^> max_line_position then call put_out ((tab)); 593 line_position = new_line_position; 594 595 return; 596 end print_token; 597 598 put_out: proc (token); 599 600 dcl token char (168) varying; 601 602 /* If I use (*) I get a non-quick block */ 603 604 dcl token_len fixed bin; 605 606 dcl chars_left fixed bin (21); 607 608 token_len = length (token); 609 if token_len = 0 then return; 610 611 chars_left = max_char_count - char_position + 1; 612 613 if token_len >= chars_left then 614 call split_across_components ((token), (token_len), chars_left); 615 616 else do; /* simple case */ 617 substr (output_seg, char_position, token_len) = token; 618 char_position = char_position + token_len; 619 end; 620 621 return; 622 end put_out; 623 624 put_out_fixedstring: proc (fixedstring); 625 626 dcl fixedstring char (*), 627 string_len fixed bin (21), 628 chars_left fixed bin (21); 629 630 string_len = length (fixedstring); 631 chars_left = max_char_count - char_position + 1; 632 633 if string_len >= chars_left then 634 call split_across_components (fixedstring, string_len, chars_left); 635 636 else do; 637 substr (output_seg, char_position, string_len) = fixedstring; 638 char_position = char_position + string_len; 639 end; 640 641 return; 642 end put_out_fixedstring; 643 644 split_across_components: proc (string, len, chars_left); 645 646 dcl string char (*), 647 (len, chars_left) fixed bin (21); 648 649 dcl chars_to_go fixed bin (21); 650 651 substr (output_seg, char_position, chars_left) = 652 substr (string, 1, chars_left); /* all that fits */ 653 654 cur_component = cur_component + 1; 655 656 call msf_manager_$get_ptr 657 (msf_fcb_ptr, cur_component, "1"b, output_seg_ptr, 0, code); 658 if code ^= 0 then signal cref_abort_; 659 660 char_position = 1; 661 662 chars_to_go = len - chars_left; 663 664 if chars_to_go > 0 then 665 substr (output_seg, char_position, chars_to_go) = 666 substr (string, len - chars_to_go + 1, chars_to_go); 667 668 char_position = char_position + chars_to_go; 669 return; 670 671 end split_across_components; 672 673 backup_to_position: 674 procedure (p_new_position); 675 676 dcl p_new_position fixed binary (21) parameter; 677 678 if p_new_position > char_position then do; /* must backup to previous component */ 679 if cur_component = 0 then signal cref_abort_; 680 call hcs_$truncate_seg (output_seg_ptr, 0, (0)); 681 cur_component = cur_component - 1; 682 call msf_manager_$get_ptr 683 (msf_fcb_ptr, cur_component, "1"b, output_seg_ptr, 0, code); 684 if code ^= 0 then signal cref_abort_; 685 end; 686 687 char_position = p_new_position; 688 689 return; 690 691 end backup_to_position; 692 693 init: entry (err_seg_ptr_arg, brief_arg, short_arg, areap, given_ll); 694 695 /* This entry just initializes the error message repository and a few command 696* options and allocates some arrays that are too large to keep in automatic 697* storage */ 698 699 dcl err_seg_ptr_arg pointer parameter, 700 (brief_arg, short_arg) bit (1) aligned parameter, 701 areap pointer parameter, 702 given_ll fixed bin parameter; 703 704 dcl cref_area area (sys_info$max_seg_size) based (areap); 705 706 dcl (brief_switch, 707 short_switch) bit (1) aligned static, 708 err_seg_ptr pointer static; 709 710 dcl 1 err_seg aligned based (err_seg_ptr), 711 2 err_index fixed bin (35), 712 2 err_messages char (max_chars) aligned; 713 714 dcl max_chars fixed bin (35) static; 715 716 err_seg_ptr = err_seg_ptr_arg; 717 short_switch = short_arg; 718 brief_switch = brief_arg; 719 max_chars = (sys_info$max_seg_size - 1) * 4; 720 721 if given_ll = -1 then max_line_position = default_max_line_position; 722 else max_line_position = given_ll; 723 724 err_index = 0; 725 726 allocate large_struc in (cref_area); 727 return; 728 729 report_error: entry (errcode, reporter); /* really is options (variable) */ 730 731 dcl errcode fixed bin (35) parameter, 732 reporter char (*) parameter; 733 734 dcl cu_$arg_list_ptr entry (ptr), 735 ioa_$general_rs entry options (variable), 736 ioa_$rs entry options (variable), 737 cu_$gen_call entry (entry, pointer); 738 739 dcl convert_status_code_ entry (fixed bin (35), char (8), char (100)), 740 ap pointer; 741 742 dcl err_message char (100), 743 temp_string char (168), 744 temp_len fixed bin; 745 746 747 if errcode ^= 0 then 748 call convert_status_code_ (errcode, "", err_message); 749 else err_message = ""; 750 751 call cu_$arg_list_ptr (ap); 752 753 /* Format the 3rd thru Nth args */ 754 755 call ioa_$general_rs (ap, 3, 4, temp_string, 0, "1"b, ""b); 756 757 call ioa_$rs ("^a: ^a ^a", 758 temp_string, temp_len, reporter, err_message, (temp_string)); 759 760 substr (err_messages, err_index + 1, temp_len) = 761 substr (temp_string, 1, temp_len); 762 763 err_index = err_index + temp_len; 764 765 if ^brief_switch then call cu_$gen_call (com_err_, ap); 766 return; 767 768 end cref_filegen_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/28/85 0711.7 cref_filegen_.pl1 >spec>on>7229>cref_filegen_.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. NDEFS constant fixed bin(17,0) initial dcl 124 ref 726 726 726 726 726 726 726 any_margin 000015 internal static fixed bin(17,0) initial dcl 132 set ref 200* 238* 241* 360* 362* 377* 484* ap 002160 automatic pointer dcl 739 set ref 751* 755* 765* areap parameter pointer dcl 699 ref 693 726 bar_margin 002146 automatic fixed bin(17,0) dcl 139 set ref 155* 208* 208* bound_seg_name 000213 automatic varying char(32) dcl 88 set ref 171* 181 188 brief_arg parameter bit(1) dcl 699 ref 693 718 brief_switch 000022 internal static bit(1) dcl 706 set ref 718* 765 bucket 000115 automatic fixed bin(17,0) dcl 36 set ref 161* 163* 328* 335* 337* 384* char_dtm 000132 automatic char(24) unaligned dcl 77 set ref 356* 360 char_position 000105 automatic fixed bin(21,0) dcl 36 set ref 150* 405 565 582 611 617 618* 618 631 637 638* 638 651 660* 664 668* 668 678 687* chars_left 000101 automatic fixed bin(21,0) dcl 626 in procedure "put_out_fixedstring" set ref 631* 633 633* chars_left parameter fixed bin(21,0) dcl 646 in procedure "split_across_components" ref 644 651 651 662 chars_left 002327 automatic fixed bin(21,0) dcl 606 in procedure "put_out" set ref 611* 613 613* chars_to_go 000100 automatic fixed bin(21,0) dcl 649 set ref 662* 664 664 664 664 668 code 002156 automatic fixed bin(35,0) dcl 145 set ref 405* 407 407* 656* 658 682* 684 com_err_ 000070 constant entry external dcl 142 ref 407 413 765 765 convert_status_code_ 000102 constant entry external dcl 739 ref 747 cref_abort_ 002150 stack reference condition dcl 142 ref 417 658 679 684 cref_area based area dcl 704 ref 726 cref_filegen_$report_error 000064 constant entry external dcl 81 ref 309 cref_listman_$get_consecutive_include_files 000050 constant entry external dcl 48 ref 337 384 cref_listman_$get_consecutive_segnames 000032 constant entry external dcl 48 ref 163 328 cref_listman_$get_crossrefs 000046 constant entry external dcl 48 ref 465 cref_listman_$get_defs 000036 constant entry external dcl 48 ref 250 cref_listman_$get_implicit_defs 000040 constant entry external dcl 48 ref 262 cref_listman_$get_include_file_crossrefs 000052 constant entry external dcl 48 ref 366 cref_listman_$get_name 000042 constant entry external dcl 48 ref 280 309 438 454 cref_listman_$get_name_with_suffix 000044 constant entry external dcl 48 ref 377 484 cref_listman_$get_primary_block_long 000034 constant entry external dcl 48 ref 171 crossref_array based pointer array level 2 dcl 111 set ref 366* 377* 465* 484* crossref_array_len 002132 automatic fixed bin(17,0) dcl 106 set ref 366* 368 373 465* 472 479 crossref_margin 000021 internal static fixed bin(17,0) initial dcl 132 set ref 374* 374* 377* 480* 480* 484* cu_$arg_list_ptr 000072 constant entry external dcl 734 ref 751 cu_$gen_call 000100 constant entry external dcl 734 ref 765 cur_component 000110 automatic fixed bin(17,0) dcl 36 set ref 151* 405* 654* 654 656* 679 681* 681 682* date_time_ 000062 constant entry external dcl 79 ref 356 date_time_modified 000130 automatic bit(72) unaligned dcl 68 set ref 337* 356* 384* def_array 2 based pointer array level 2 dcl 111 set ref 250* 262* 280* 438* 454* 465* def_array_len 002131 automatic fixed bin(17,0) dcl 106 set ref 250* 253 262* 265 270 278 433 435 437 442 450 def_margin 000016 internal static fixed bin(17,0) initial dcl 132 set ref 454* 454* def_ok based bit(1) array level 2 packed unaligned dcl 111 set ref 271* 300* 303* 458 default_max_line_position constant fixed bin(17,0) initial dcl 97 ref 721 defname 002135 automatic varying char(32) dcl 126 set ref 280* 283 283 288* 288 288 291 303 defs_are_implicit parameter bit(1) dcl 425 ref 420 458 dir_name 000140 automatic varying char(168) dcl 88 set ref 171* 181 188 divide builtin function dcl 44 ref 200 532 532 537 554 554 591 environment_description 000224 automatic varying char(200) dcl 88 set ref 179* 181* 186 188* 200 200 err_index based fixed bin(35,0) level 2 dcl 710 set ref 396 400 400 724* 760 763* 763 err_message 002162 automatic char(100) unaligned dcl 742 set ref 747* 749* 757* err_messages 1 based char level 2 dcl 710 set ref 400 400 760* err_seg based structure level 1 dcl 710 err_seg_ptr 000024 internal static pointer dcl 706 set ref 396 400 400 400 400 716* 724 760 760 763 763 err_seg_ptr_arg parameter pointer dcl 699 ref 693 716 errcode parameter fixed bin(35,0) dcl 731 set ref 729 747 747* error_table_$no_ext_sym 000066 external static fixed bin(35,0) dcl 85 set ref 309* explanation 002117 automatic varying char(32) dcl 101 set ref 175* 254* 266* 369* 413* 473* fixedstring parameter char unaligned dcl 626 set ref 624 630 633* 637 fold_column parameter fixed bin(17,0) dcl 501 ref 491 531 532 537 540 540 541 548 554 554 557 557 559 force_column parameter fixed bin(17,0) dcl 501 ref 491 525 form_feed 000312 automatic char(1) unaligned dcl 95 set ref 158* 575 given_ll parameter fixed bin(17,0) dcl 699 ref 693 721 722 hcs_$truncate_seg 000060 constant entry external dcl 71 ref 680 i 000307 automatic fixed bin(17,0) dcl 93 in procedure "cref_filegen_" set ref 237* 238 241* 278* 280 300 303* 373* 374 377* i 002300 automatic fixed bin(17,0) dcl 427 in procedure "loop_thru_defs" set ref 437* 438 438 439 439* 452* 454 458 465 include_file_name 000116 automatic varying char(32) dcl 68 set ref 337* 349 384* index builtin function dcl 44 ref 283 index_structure based structure level 2 dcl 111 set ref 442 442 indices based fixed bin(24,0) array level 3 dcl 111 set ref 446* 452 interstice 002147 automatic fixed bin(17,0) dcl 139 set ref 156* 200 ioa_$general_rs 000074 constant entry external dcl 734 ref 755 ioa_$rs 000076 constant entry external dcl 734 ref 757 is_synonym 000114 automatic bit(1) dcl 36 set ref 171* 184 200 224 j 002301 automatic fixed bin(17,0) dcl 427 in procedure "loop_thru_defs" set ref 479* 480 484* j 000310 automatic fixed bin(17,0) dcl 93 in procedure "cref_filegen_" set ref 291* 291* 297 k 000311 automatic fixed bin(17,0) dcl 93 set ref 450* 452* large_struc based structure level 1 dcl 111 set ref 726 large_strucp 000012 internal static pointer initial dcl 109 set ref 250 262 271 280 300 303 366 377 435 435 438 438 439 439 442 442 442 442 446 452 454 458 465 465 484 726* last_blackspace 000107 automatic fixed bin(21,0) dcl 36 set ref 152* 526* 545* 565* 582* left_margin 000014 internal static fixed bin(17,0) initial dcl 132 set ref 195* 195* 213* 213* 217* 346* 346* 349* 349* 458* len parameter fixed bin(21,0) dcl 646 ref 644 662 664 length builtin function dcl 44 ref 155 156 200 200 283 288 523 608 630 line_position 000106 automatic fixed bin(21,0) dcl 36 set ref 153* 525 528* 531 532 537* 540 540 541* 544 548* 559* 564* 564 570* 570 571 581* 589 591 593* max builtin function dcl 44 ref 200 max_char_count 000104 automatic fixed bin(21,0) initial dcl 32 set ref 32* 611 617 631 637 651 664 max_chars 000026 internal static fixed bin(35,0) dcl 714 set ref 400 400 719* 760 max_column parameter fixed bin(17,0) dcl 501 ref 491 544 548 max_line_position 000010 internal static fixed bin(17,0) dcl 97 set ref 155 156 195* 200* 208* 213* 217* 217* 224* 233* 238* 241 346* 349* 358* 360* 362* 374* 377* 454* 458* 458* 480* 484* 571 589 592 721* 722* moby_bar 000010 constant varying char(20) initial dcl 130 ref 155 156 195 200 208 346 mod builtin function dcl 44 ref 557 557 msf_fcb_ptr 000102 automatic pointer dcl 29 set ref 148* 405* 656* 682* msf_fcb_ptr_arg parameter pointer dcl 26 ref 12 148 msf_manager_$adjust 000056 constant entry external dcl 71 ref 405 msf_manager_$get_ptr 000054 constant entry external dcl 71 ref 656 682 n_elements based fixed bin(24,0) level 3 in structure "large_struc" dcl 111 in procedure "cref_filegen_" set ref 435* n_elements based fixed bin(24,0) level 3 in structure "large_struc" dcl 111 in procedure "cref_filegen_" set ref 435* n_names 002130 automatic fixed bin(17,0) dcl 101 set ref 171* 174 231 237 291 297 name_list 000313 automatic varying char(32) array dcl 101 set ref 171* 213 224 241 291 413* name_ptrs based pointer array level 3 packed unaligned dcl 111 set ref 439* names based varying char(32) array level 2 dcl 111 set ref 438* 439 ndefs based fixed bin(17,0) level 2 dcl 111 set ref 250 262 271 271 300 303 366 366 366 377 377 435 435 435 435 435 435 435 435 435 438 438 438 439 439 439 439 439 439 439 442 442 442 442 442 442 442 442 442 442 442 442 442 442 442 442 442 442 446 446 446 446 446 452 452 452 452 452 458 465 465 465 484 484 726* new_line_position 002316 automatic fixed bin(17,0) dcl 587 set ref 591* 592 593 nl 000002 constant varying char(1) initial dcl 511 ref 527 546 node 000112 automatic pointer dcl 36 set ref 160* 163* 163* 165 171* 250* 262* 309* 328* 328* 334* 337* 337* 340 344 366* 384* 384* null builtin function dcl 44 ref 160 165 334 340 344 output_seg based char unaligned dcl 32 set ref 617* 637* 651* 664* output_seg_ptr 000100 automatic pointer dcl 29 set ref 147* 617 637 651 656* 664 680* 682* output_seg_ptr_arg parameter pointer dcl 26 ref 12 147 p_new_position parameter fixed bin(21,0) dcl 676 ref 673 678 687 reporter parameter char unaligned dcl 731 set ref 729 757* seg_was_found 002133 automatic bit(1) dcl 126 set ref 167* 184* 187* 193 217 272 short_arg parameter bit(1) dcl 699 ref 693 717 short_switch 000023 internal static bit(1) dcl 706 set ref 193 717* should_complain 002134 automatic bit(1) dcl 126 set ref 276* 297* 306* 309 sort_items_indirect_$varying_char 000104 constant entry external dcl 429 ref 442 sort_structure based structure level 2 dcl 111 set ref 442 442 space 000004 constant varying char(1) initial dcl 511 ref 571 string builtin function dcl 44 in procedure "cref_filegen_" set ref 271* string parameter char unaligned dcl 646 in procedure "split_across_components" ref 644 651 664 string_len 000100 automatic fixed bin(21,0) dcl 626 set ref 630* 633 633* 637 638 substr builtin function dcl 509 in procedure "print_token" ref 536 536 540 540 554 554 557 557 substr builtin function dcl 44 in procedure "cref_filegen_" set ref 288 400 400 617* 637* 651* 651 664* 664 760* 760 syn_margin 000017 internal static fixed bin(17,0) initial dcl 132 set ref 238* 241* 358* 358* 360* 362* sys_info$max_seg_size 000030 external static fixed bin(35,0) dcl 32 ref 32 719 tab 000006 constant varying char(1) initial dcl 511 ref 592 temp 002315 automatic fixed bin(17,0) dcl 521 set ref 532* 535 536 536 temp_len 002265 automatic fixed bin(17,0) dcl 742 set ref 757* 760 760 763 temp_string 002213 automatic char(168) unaligned dcl 742 set ref 755* 757* 757 760 ten_spaces 004120 constant char(10) initial unaligned dcl 516 ref 540 540 557 557 thirteen_tabs 004114 constant char(13) initial unaligned dcl 516 ref 536 536 554 554 title_margin 000020 internal static fixed bin(17,0) initial dcl 132 set ref 224* 224* 233* 233* token parameter varying char(168) dcl 501 in procedure "print_token" set ref 491 523 563* token parameter varying char(168) dcl 600 in procedure "put_out" ref 598 608 613 617 token_len 002314 automatic fixed bin(17,0) dcl 507 in procedure "print_token" set ref 523* 544 548 564 token_len 002326 automatic fixed bin(17,0) dcl 604 in procedure "put_out" set ref 608* 609 613 613 617 618 two_nls 000000 constant varying char(2) initial dcl 516 ref 580 unspec builtin function dcl 44 set ref 158* NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. adde builtin function dcl 44 NAMES DECLARED BY EXPLICIT CONTEXT. backup_to_position 004004 constant entry internal dcl 673 ref 526 545 cref_filegen_ 000215 constant entry external dcl 12 init 002164 constant entry external dcl 693 loop_thru_defs 002503 constant entry internal dcl 420 ref 258 321 out_of_room 002111 constant label dcl 413 set ref 176 255 267 370 418 474 print_formfeed 003455 constant entry internal dcl 574 ref 342 398 print_lineskip 003466 constant entry internal dcl 578 ref 325 387 390 print_space 003436 constant entry internal dcl 568 ref 221 222 353 354 print_tab 003502 constant entry internal dcl 585 ref 381 463 482 print_token 003254 constant entry internal dcl 491 ref 195 200 208 213 217 224 233 238 241 346 349 358 360 362 374 377 454 458 480 484 put_out 003530 constant entry internal dcl 598 ref 527 536 540 546 554 557 563 571 575 580 592 put_out_fixedstring 003613 constant entry internal dcl 624 ref 400 report_error 002266 constant entry external dcl 729 split_across_components 003677 constant entry internal dcl 644 ref 613 633 NAME DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 439 442 442 442 442 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4502 4610 4125 4512 Length 5114 4125 106 270 354 20 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME cref_filegen_ 1542 external procedure is an external procedure. loop_thru_defs internal procedure shares stack frame of external procedure cref_filegen_. print_token internal procedure shares stack frame of external procedure cref_filegen_. put_out internal procedure shares stack frame of external procedure cref_filegen_. put_out_fixedstring 84 internal procedure is called during a stack extension. split_across_components 90 internal procedure is called during a stack extension. backup_to_position internal procedure shares stack frame of external procedure cref_filegen_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 max_line_position cref_filegen_ 000012 large_strucp cref_filegen_ 000014 left_margin cref_filegen_ 000015 any_margin cref_filegen_ 000016 def_margin cref_filegen_ 000017 syn_margin cref_filegen_ 000020 title_margin cref_filegen_ 000021 crossref_margin cref_filegen_ 000022 brief_switch cref_filegen_ 000023 short_switch cref_filegen_ 000024 err_seg_ptr cref_filegen_ 000026 max_chars cref_filegen_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cref_filegen_ 000100 output_seg_ptr cref_filegen_ 000102 msf_fcb_ptr cref_filegen_ 000104 max_char_count cref_filegen_ 000105 char_position cref_filegen_ 000106 line_position cref_filegen_ 000107 last_blackspace cref_filegen_ 000110 cur_component cref_filegen_ 000112 node cref_filegen_ 000114 is_synonym cref_filegen_ 000115 bucket cref_filegen_ 000116 include_file_name cref_filegen_ 000130 date_time_modified cref_filegen_ 000132 char_dtm cref_filegen_ 000140 dir_name cref_filegen_ 000213 bound_seg_name cref_filegen_ 000224 environment_description cref_filegen_ 000307 i cref_filegen_ 000310 j cref_filegen_ 000311 k cref_filegen_ 000312 form_feed cref_filegen_ 000313 name_list cref_filegen_ 002117 explanation cref_filegen_ 002130 n_names cref_filegen_ 002131 def_array_len cref_filegen_ 002132 crossref_array_len cref_filegen_ 002133 seg_was_found cref_filegen_ 002134 should_complain cref_filegen_ 002135 defname cref_filegen_ 002146 bar_margin cref_filegen_ 002147 interstice cref_filegen_ 002156 code cref_filegen_ 002160 ap cref_filegen_ 002162 err_message cref_filegen_ 002213 temp_string cref_filegen_ 002265 temp_len cref_filegen_ 002300 i loop_thru_defs 002301 j loop_thru_defs 002314 token_len print_token 002315 temp print_token 002316 new_line_position print_token 002326 token_len put_out 002327 chars_left put_out put_out_fixedstring 000100 string_len put_out_fixedstring 000101 chars_left put_out_fixedstring split_across_components 000100 chars_to_go split_across_components THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc call_int_other_desc return mpfx2 mod_fx1 signal shorten_stack ext_entry ext_entry_desc int_entry_desc alloc_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ convert_status_code_ cref_filegen_$report_error cref_listman_$get_consecutive_include_files cref_listman_$get_consecutive_segnames cref_listman_$get_crossrefs cref_listman_$get_defs cref_listman_$get_implicit_defs cref_listman_$get_include_file_crossrefs cref_listman_$get_name cref_listman_$get_name_with_suffix cref_listman_$get_primary_block_long cu_$arg_list_ptr cu_$gen_call date_time_ hcs_$truncate_seg ioa_$general_rs ioa_$rs msf_manager_$adjust msf_manager_$get_ptr sort_items_indirect_$varying_char THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$no_ext_sym sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 32 000203 12 000211 147 000223 148 000227 150 000232 151 000234 152 000235 153 000236 155 000237 156 000243 158 000250 160 000252 161 000254 163 000255 165 000267 167 000274 171 000275 174 000332 175 000334 176 000340 179 000341 181 000342 184 000361 186 000366 187 000373 188 000375 190 000450 193 000451 195 000456 200 000476 208 000536 213 000557 217 000600 221 000623 222 000624 224 000625 229 000666 231 000667 233 000672 237 000713 238 000723 241 000746 245 000777 250 001001 253 001033 254 001035 255 001042 258 001043 262 001047 265 001101 266 001103 267 001110 270 001111 271 001112 272 001123 276 001125 278 001126 280 001135 283 001147 288 001162 291 001170 293 001207 297 001211 300 001217 301 001231 303 001232 306 001252 307 001254 309 001256 321 001336 325 001342 328 001343 329 001356 334 001357 335 001361 337 001362 340 001412 342 001416 344 001417 346 001424 349 001445 353 001466 354 001467 356 001470 358 001505 360 001526 362 001550 366 001572 368 001634 369 001636 370 001643 373 001644 374 001653 377 001672 381 001743 382 001744 384 001746 387 001776 388 001777 390 002000 396 002001 398 002004 400 002005 402 002026 405 002027 407 002054 411 002110 413 002111 417 002153 418 002156 693 002157 716 002172 717 002177 718 002202 719 002205 721 002217 722 002225 724 002226 726 002227 727 002261 729 002262 747 002302 749 002323 751 002326 755 002335 757 002403 760 002451 763 002460 765 002464 766 002502 420 002503 433 002505 435 002511 437 002547 438 002557 439 002616 440 002631 442 002633 446 002701 450 002733 452 002743 454 002776 458 003030 463 003067 465 003070 472 003137 473 003141 474 003146 479 003147 480 003155 482 003175 484 003176 487 003247 488 003251 489 003253 491 003254 523 003256 525 003261 526 003264 527 003266 528 003275 531 003276 532 003302 535 003310 536 003311 537 003322 540 003327 541 003342 544 003345 545 003350 546 003352 548 003361 554 003370 557 003403 559 003420 563 003423 564 003431 565 003433 566 003435 568 003436 570 003437 571 003440 572 003454 574 003455 575 003456 576 003465 578 003466 580 003467 581 003476 582 003477 583 003501 585 003502 589 003503 591 003510 592 003514 593 003525 595 003527 598 003530 608 003532 609 003535 611 003537 613 003543 616 003577 617 003600 618 003607 621 003611 624 003612 630 003626 631 003627 633 003634 637 003660 638 003674 641 003675 644 003676 651 003712 654 003723 656 003724 658 003747 660 003755 662 003760 664 003764 668 004001 669 004003 673 004004 678 004006 679 004011 680 004016 681 004033 682 004035 684 004061 687 004066 689 004071 ----------------------------------------------------------- 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