COMPILATION LISTING OF SEGMENT validate_info_seg Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 01/23/89 1228.9 mst Mon Options: optimize map 1 /****^ ****************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1989 * 4* * * 5* * Copyright (c) 1986 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* * Copyright (c) 1972 by Massachusetts Institute of * 9* * Technology and Honeywell Information Systems, Inc. * 10* * * 11* ****************************************************** */ 12 13 /**** format: ind3,ll80,initcol6,indattr,^inddcls,dclind4,idind16 */ 14 /**** format: struclvlind2,^ifthenstmt,^ifthendo,^ifthen,^indnoniterdo */ 15 /**** format: ^inditerdo,^indnoniterend,^indthenelse,case,^indproc,^indend */ 16 /**** format: ^delnl,^insnl,comcol41,^indcom,^indblkcom,linecom,^indcomtxt */ 17 18 validate_info_seg: vis: proc; 19 20 /* This command validates the syntax of an info segment. 21* 22* Syntax: 23* vis paths {-control_args} 24* [vis path {-control_args}] 25* Arguments: 26* 27* path 28* the pathname of an info seg. The .info suffix is added if necessary. 29* The star convention is allowed. 30* 31* Control arguments: 32* -names, -nm 33* -no_names, -nnm (default) 34* -severity N, -sv N 35* Suppresses error messages of severity less than N. 36* -total, -tt 37* Prints only the total number of errors or nothing. 38* 39* The vis active function must be invoked on a single info segment and 40* returns the severity number of the highest severity error encountered. 41* 42* Error messages are shown in the first DCL of the program. The first 43* character of each one is its severity. */ 44 45 46 /****^ HISTORY COMMENTS: 47* 1) change(78-12-01,Herbst), approve(), audit(), install(): 48* Written by S. Herbst. 49* 2) change(79-10-15,Herbst), approve(), audit(), install(): 50* Fixed to accept/convert extra paragraphs of standard sections. 51* 3) change(80-02-25,Herbst), approve(), audit(), install(): 52* Fixed to diagnose missing :Info: entry lines. 53* 4) change(80-03-26,Herbst), approve(), audit(), install(): 54* Max line length changed from 79+NL to 71+NL. 55* 5) change(80-07-17,Herbst), approve(), audit(), install(): 56* Changed to print text of nonstandard section titles. 57* 6) change(81-06-29,Herbst), approve(), audit(), install(): 58* Changed to convert in place if -of PATH = path, accept any cdtb_ date, 59* bugs fixed. 60* 7) change(82-12-10,Herbst), approve(), audit(), install(): 61* Fixed long lines bug and -fill on simple header line. 62* 8) change(83-12-02,Falksenj), approve(85-11-04,MCR7289), 63* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 64* Removed all output capabilities, completely changed message style. 65* 9) change(85-08-15,Falksenj), approve(85-11-04,MCR7289), 66* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 67* Add CHECK_INFO_TYPE and associate routines + segname checking. 68* 10) change(85-09-24,Lippard), approve(85-11-04,MCR7289), 69* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 70* Modified by Jim Lippard to not complain about ":Entry:" or ":Info:" 71* lines over 71 characters long. 72* 11) change(86-01-07,Lippard), approve(85-11-04,MCR7289), 73* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 74* Modified to not try to handle addnames on general infos, not consider 75* names ending in "_status.info" to be general infos. 76* 12) change(86-02-13,Lippard), approve(85-11-04,MCR7289), 77* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 78* Modified to count number of infos correctly. 79* 13) change(86-04-03,Lippard), approve(85-11-04,MCR7289), 80* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 81* Modified to allow multiple short names in header. 82* 14) change(86-05-13,Lippard), approve(85-11-04,MCR7289), 83* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 84* Modified to require "Syntax" instead of "Usage" for subroutine info 85* segs. 86* 15) change(86-05-16,Lippard), approve(85-11-04,MCR7289), 87* audit(86-06-17,Hartogs), install(86-06-17,MR12.0-1076): 88* Modified to allow subroutine "Syntax" section to have a blank line 89* between the declaration and the call descriptions. 90* 16) change(86-10-08,Lippard), approve(86-12-01,MCR7581), 91* audit(87-03-31,Dickson), install(87-04-01,MR12.1-1019): 92* Modified to not put commas at the beginnings of continuation lines. 93* 17) change(87-01-07,Lippard), approve(87-01-26,MCR7604), 94* audit(87-03-31,Dickson), install(87-04-01,MR12.1-1019): 95* Modified to complain about more than two blank lines preceding a 96* section. 97* 18) change(88-09-28,Lee), approve(88-11-14,MCR8019), audit(88-11-28,Flegel), 98* install(89-01-23,MR12.3-1010): 99* phx18806 (Commands 294) - Modified to complain about multiple 100* paragraphs separated by single blank lines whose total exceeds 15 101* lines. 102* END HISTORY COMMENTS */ 103 104 105 /* format: off */ 106 dcl ( 107 /**** SEVERITY 1 messages ****/ 108 this_form_preferred init ("1This form is preferred:^s^/^13t^a"), 109 /**** SEVERITY 2 messages ****/ 110 non_std_title init ("2Nonstandard section title^[: ^a^]"), 111 112 paragraph_size init ("2Paragraph ^[size (^s^i lines)^;^2s^] exceeds limit of ^i."), 113 114 no_syntax_name init ("2Short name ^[""^a"" ^]not used."), 115 116 no_usage_name init ("2Name ^[""^a"" ^]not present in Syntax line."), 117 118 end_white_space init ("2Th^[ese lines end^;is line ends^] in white space"), 119 120 blank_white_space init ("2Th^[ese blank lines contain^;is blank line contains^] white space"), 121 122 backspace init ("2Th^[ese lines contain^;is line contains^] backspace"), 123 missing_name init ("2Name missing from the segment: ^s^a"), 124 125 extra_name init ("2Extra name on segment: ^s^a"), 126 127 order_name init ("2Names out of order on segment."), 128 /**** SEVERITY 3 messages ****/ 129 non_printable init ("3Th^[ese lines contain^;is line contains^] non-printable characters"), 130 131 lines_too_long init ("3These lines of section exceed 71 chars"), 132 133 need_usage init ("3This section must be ""Syntax""."), 134 135 need_function init ("3This section must be ""Function""."), 136 137 need_command init ("3This section must be ""Syntax as a command""."), 138 139 not_belong init ("3This section does not belong here."), 140 141 out_of_sequence init ("3This section is out of sequence."), 142 143 missing_section init ("3Missing ^[""^a"" ^]section."), 144 145 too_many init ("3Only ^[^s^i^] of these sections allowed."), 146 147 bad_date init ("3Unrecognizable date string^[: ^a^]"), 148 149 entry_too_late init ("3Entry date is later than the info date."), 150 /**** SEVERITY 4 messages ****/ 151 missing_info init ("4Missing :Info: or :Internal: at beginning of segment.^/"), 152 153 no_entries init ("4Missing :Entry:."), 154 155 bad_entry init ("4:Entry: not in a subroutine info."), 156 157 no_hdr_name init ("4No name in header line."), 158 159 no_sections init ("4No sections in component."), 160 161 need_2_blank_lines init ("4^[^a^;Section^] not preceded by 2 blank lines."), 162 163 need_ending_NL init ("4Segment does not end with a NL."), 164 165 ends_in_NUL init ("4Segment ends in^[ ^s^i^] NUL characters."), 166 167 big_header init ("4Too many lines^[ (^s^i)^] in header."), 168 /**** SEVERITY 5 messages ****/ 169 no_entry init ("5Entry not found."), 170 171 nothing_done init ("5No processing done."), 172 173 null_segment init ("5Segment consists only of ^2s^i NUL characters."), 174 zero_segment init ("5Zero length segment.")) 175 176 char (80) var; /* format: on */ 177 /* --------------------------------------------------------------------------- 178* 179* (START) 180* | [S] represents "Scan a section title" 181* ___v___ 182* / .gi/ \ GENERAL 183* / .error/ \ Y +-----------------+ 184*< status/ >------->| section | 185* \ changes / |{section ...} | 186* \_______/ +-----------------+ 187* |N ("Error") 188* [S] | 189* | |N 190* ____v____ _________ ____|____ 191* / \ Y / Entry- \ Y / \ 192*< untitled >--[S]----------------------------------->< points in >------->< :Entry: > 193* \_________/ \_________/ \_________/ 194* |N |N |Y 195* | An info is prescanned enough to determine | | 196* | it's type, then a real scan begins. | | 197* | | SUBROUTINE v 198* ____v____ | +---------------------+ 199* / \ Y v | Function | 200*< Function >-------------------------------------------------------->| Syntax | 201* \_________/ COMMAND |{Arguments} *| 202* |N +---------------------+ |{Access required} *| 203* | | Syntax as commamd | |{Examples} | 204* ____v____ _________ | | +---------------------+ 205* /Syntax as\ Y /Syntax as\ N | Function | | 206*< a command >--[S]-->------->|{Arguments} *| If came from :Entry: 207* \_________/ \_________/ #|{Control args} *| go look for another 208* |N |Y #|{CA as a command} *| 209* | | #|{CA COMMAND...} *| COMMAND/ACTIVE FUNCTION 210* | | |{Access required} *| +---------------------+ 211* | | |{Examples} | | Syntax as command | 212* | | +---------------------+ | Syntax as act.fun. | 213* | +----------------------------------------->| | 214* | |Y ACTIVE FUNCTION | Function | 215* ____v____ ____|____ +---------------------+ |{Arguments} *| 216* /Syntax as\ Y /Syntax as\ N | Syntax as act.fun. | #|{Control Args} *| 217*--[S]-->< a command >------->| | #|{CA as a command} *| 218* \_________/ \_________/ | Function | #|{CA as an act.func} *| 219* |N |{Arguments} *| #|{CA for...} *| 220* | #|{Control args} *| |{Access required} *| 221* | #|{CA as an act.func} *| |{Examples} | 222* | #|{CA for...} *| +---------------------+ 223* | |{Access required} *| 224* | |{Examples} | 225* | +---------------------+ (*) These sections can occur 226* | next in any order: 227* | REQUEST List of... 228* | +---------------------+ Notes 229* | | Syntax | Notes on... 230* ____v____ _________ | | 231* / \ Y /Syntax as\ N | Function | (#) Sections can occur as 232*< Syntax >--[S]-->------->|{Arguments} *| a group in any order. 233* \_________/ \_________/ #|{Control args} *| 234* |N |Y #|{CA as a request} *| 235* | | #|{CA for...} *| REQUEST/ACTIVE REQUEST 236* | | |{Access required} *| +---------------------+ 237* | | |{Examples} | | Syntax | 238* | | +---------------------+ | Syntax as act.req. | 239* | +----------------------------------------->| | 240* | |Y ACTIVE REQUEST | Function | 241* ____v____ ____|____ +---------------------+ |{Arguments} *| 242* /Syntax as\ Y / \ N | Syntax as act.req. | #|{Control args} *| 243*--[S]-->< Syntax >------->| | #|{CA as a request} *| 244* \_________/ \_________/ | Function | #|{CA as an act.req} *| 245* |N |{Arguments} *| #|{CA for...} *| 246* ("Not a defined type") #|{Control args} *| |{Access required} *| 247* | #|{CA as an act.req} *| |{Examples} | 248* v #|{CA for...} *| +---------------------+ 249*+-----------+ |{Access required} *| 250*| sections | |{Examples} | 251*+-----------+ +---------------------+ 252* 253* 254*--------------------------------------------------------------------------- */ 255 /* In this list, all names which are the full 41 chars long must be an exact */ 256 /* match to a section name, while the shorter ones only need to match their */ 257 /* length's worth at the beginning. */ 258 dcl std_section (45) char (41) var int static options (constant) init ( 259 " 1Access required ", 260 " 2Arguments ", 261 " 3Control arguments ", 262 " 4Control arguments as a command ", 263 " 5Control arguments as a request ", 264 " 6Control arguments as an active function", 265 " 7Control arguments as an active request ", 266 " 8Control arguments for ", 267 " 9Entry points in ", 268 "10Examples ", 269 "11Function ", 270 "12List of ", 271 "13Notes ", 272 "14Notes on ", 273 "15Syntax ", 274 "16Syntax as a command ", 275 "17Syntax as an active function ", 276 "18Syntax as an active request ", 277 "19Syntax ", 278 "20 ", 279 /**** improper forms follow, they reference proper ones above. */ 280 "17Syntax as active function ", 281 "16Syntax as command ", 282 "11Purpose ", 283 " 2Argument ", 284 " 2Where ", 285 " 3Control argument ", 286 "10Example ", 287 " 1Access requirement ", 288 " 1Access requirements ", 289 "13Note ", 290 "17Active function syntax ", 291 "17Active function usage ", 292 " 2Active function arguments ", 293 " 2Active function argument ", 294 " 2Arguments as active function ", 295 " 6Active function control arguments ", 296 " 6Active function control argument ", 297 " 6Control arguments as active function ", 298 "16Command syntax ", 299 "16Command usage ", 300 " 2Command arguments ", 301 " 2Command argument ", 302 " 4Command control arguments ", 303 " 4Command control argument ", 304 " 4Control argument as command "); 305 306 307 dcl ( 308 UNKNOWN_TITLE init (0), 309 ACCESS_REQUIRED init (1), 310 ARGUMENTS init (2), 311 CONTROL_ARGUMENTS init (3), 312 CONTROL_ARGUMENTS_AS_A_COMMAND init (4), 313 CONTROL_ARGUMENTS_AS_A_REQUEST init (5), 314 CONTROL_ARGUMENTS_AS_AN_ACTIVE_FUNCTION init (6), 315 CONTROL_ARGUMENTS_AS_AN_ACTIVE_REQUEST init (7), 316 CONTROL_ARGUMENTS_FOR init (8), 317 ENTRY_POINTS_IN init (9), 318 EXAMPLES init (10), 319 FUNCTION init (11), 320 LIST_OF init (12), 321 NOTES init (13), 322 NOTES_ON init (14), 323 SYNTAX init (15), 324 SYNTAX_AS_A_COMMAND init (16), 325 SYNTAX_AS_AN_ACTIVE_FUNCTION init (17), 326 SYNTAX_AS_AN_ACTIVE_REQUEST init (18), 327 USAGE init (19), 328 UNTITLED init (20), 329 EOF init (99) 330 ) fixed bin int static options (constant); 331 332 dcl 1 global, 2 ( 333 backspace, bad_date, bad_entry, blank_white_space, 334 end_white_space, ends_in_NUL, entry_too_late, extra_name, 335 lines_too_long, missing_info, missing_name, missing_section, 336 need_2_blank_lines, need_command, need_ending_NL, need_function, 337 need_usage, no_entries, no_entry, no_hdr_name, no_sections, 338 no_syntax_name, no_usage_name, non_printable, non_std_title, 339 not_belong, nothing_done, null_segment, order_name, out_of_sequence, 340 paragraph_size, this_form_preferred, too_many 341 ) fixed bin (18); 342 /**** This "funny" size of (18) was chosen so the compiler could help */ 343 /**** catch improperly called subroutines. */ 344 345 dcl 1 local like global; 346 347 dcl first_section_head char (80) var; 348 349 350 /* additional paragraphs of standard sections */ 351 352 dcl 1 map aligned, /* error map for each type of error */ 353 2 count fixed bin, /* up to hbound (number) */ 354 2 actual_count fixed bin, 355 2 number (40) fixed bin; /* line number of each occurrence */ 356 357 dcl 1 errors aligned, /* global for a whole :Info: block or info seg */ 358 2 backspaces like map, 359 2 badchars like map, /* lines with non-printable chars */ 360 2 endblanks like map, /* lines end in white space */ 361 2 nonblanks like map, /* blank lines having white space */ 362 2 long_lines like map; /* lines longer than line_char_limit */ 363 364 /* CONSTANTS */ 365 366 dcl ME char (32) int static options (constant) init ("validate_info_seg"); 367 368 dcl ((T init ("1"b), 369 F init (""b)) bit (1), 370 /**** printable includes BS HT NL and SP */ 371 PRINTABLE char (98) init (" 372 !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" 373 || "`abcdefghijklmnopqrstuvwxyz{|}~"), 374 LOWER_CASE char (26) init ("abcdefghijklmnopqrstuvwxyz"), 375 UPPER_CASE char (26) init ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 376 /* DIGITS char (10) init ("0123456789"),*/ 377 HDR_NAME_BREAK char (4) init (", ) "), /* , HT ) SP */ 378 /* IGNORE_CHARS char (10) init (" 379*{[(,)]}"), /* HT SP NL {... */ 380 WHITE_SPACE char (2) init (" "), /* HT SP */ 381 HT char (1) init (" "), 382 /* OH_OH_SIX char (1) init (""),/* \006 */ 383 NUL char (1) init (""),/* NUL */ 384 BS char (1) init (""), /* backspace */ 385 SP char (1) init (" "), 386 NL char (1) init (" 387 ") 388 ) int static options (constant); 389 390 /**** LIMIT VALUES */ 391 392 dcl ( 393 line_char_limit init (72), /* including newline at end */ 394 heading_char_limit init (72), /* for a section heading */ 395 par_line_limit init (15) 396 ) fixed bin int static options (constant); 397 398 /* error info */ 399 400 dcl (highest_severity, severity_count, severity_limit) fixed bin; 401 dcl seg_count fixed bin; 402 dcl info_count fixed bin; 403 dcl 1 error_count, /* error tabulation by severity */ 404 2 (total, /* # of occurances */ 405 segs, /* # of segments containing.. */ 406 infos, /* # of infos containing... */ 407 seg, /* 1- occurred in current segment */ 408 info /* 1- occurred in currend info */ 409 ) (5) fixed bin; 410 dcl err_count fixed bin; 411 412 413 /* star info */ 414 415 dcl area area based (area_ptr); 416 417 418 dcl area_ptr ptr; 419 dcl star_index fixed bin; 420 421 422 /* status info */ 423 424 dcl 1 status_br aligned like status_branch; 425 426 dcl af_sw bit (1) aligned; 427 dcl arg char (arg_len) based (arg_ptr); 428 dcl arg_count fixed bin; 429 dcl arg_index fixed bin; 430 dcl arg_len fixed bin; 431 dcl arg_ptr ptr; 432 dcl bf_format char (4); 433 dcl current_names (status_branch.nnames) char (32) based (current_names_ptr); 434 dcl current_names_ptr ptr; 435 dcl format char (24); 436 dcl internal_sw bit (1) aligned; 437 dcl path_count fixed bin; /* # of paths on command line */ 438 dcl return_arg char (return_len) varying based (return_ptr); 439 dcl return_len fixed bin; 440 dcl return_ptr ptr; 441 dcl src_arg char (168); 442 dcl src_seg char (src_len) unaligned based (src_ptr); 443 dcl src_ptr ptr; 444 dcl src_len fixed bin (24); 445 dcl src_index fixed bin (24); 446 dcl src_bc fixed bin (24); 447 dcl src_path char (201); 448 dcl src_dname char (168); 449 dcl saved_dn char (168); 450 dcl src_ename char (32); 451 dcl star_en char (32); 452 dcl temp_ptr ptr; 453 dcl two_paragraph_syntax_sw bit (1) aligned; 454 dcl div_names_ct fixed bin; 455 dcl div_names_ptr ptr; 456 dcl div_names_x1 fixed bin; 457 dcl div_names_x2 fixed bin; 458 dcl 1 temp based (temp_ptr), 459 2 sort aligned, /* array to use with sort_items_ */ 460 3 n fixed bin (18), 461 3 vector (1023) ptr unaligned, /* -> a name set */ 462 2 list_ct fixed bin, /* # of list elements in use */ 463 2 list (1023) like div_names; 464 dcl 1 div_names (div_names_ct) based (div_names_ptr), 465 2 name char (32), /* addname, including ".info" */ 466 2 flag fixed bin; 467 468 dcl 1 current, /* data about info being checked */ 469 2 count fixed bin, /* # of sections in use */ 470 2 pass fixed bin, 471 2 e (12), 472 3 used fixed bin, /* # of uses of this title */ 473 3 minuse fixed bin, /* minimum # required */ 474 3 maxuse fixed bin (24), /* maximum # allowed */ 475 3 title fixed bin; /* text of the title */ 476 477 /* header info */ 478 479 dcl header_date char (32); 480 dcl header_clock fixed bin (71); 481 dcl header char (72) var; /* text after the date */ 482 dcl header_short_name char (256) var; 483 dcl header_short_name_temp char (256) var; 484 dcl names_left_to_add bit (1) aligned; 485 dcl info_name char (32) var; 486 dcl entry_date char (32); 487 dcl entry_clock fixed bin (71); 488 489 490 /* section info */ 491 492 dcl 1 section_ptr_len aligned, 493 2 section_ptr ptr, 494 2 section_len fixed bin; 495 /**** values set by the HEAD routine */ 496 dcl section_head char (40) var; /* section heading returned */ 497 dcl section_id fixed bin; /* section head ID */ 498 dcl last_section_head char (40) var; 499 dcl normal_head char (40) var; /* normalized section heading */ 500 dcl section_head_len fixed bin; /* number of chars in section head */ 501 dcl section_line_number fixed bin; /* number of first line in section */ 502 dcl section_line_count fixed bin; /* number of lines in section */ 503 dcl section_skip fixed bin; /* chars occupied by section heading as given */ 504 dcl section_index fixed bin; 505 dcl last_seq fixed bin; 506 507 dcl (blank_char_count, blank_line_count) fixed bin; 508 509 510 /* paragraph info */ 511 512 dcl par char (par_len) based (par_ptr); 513 dcl 1 par_ptr_len aligned, 514 2 par_ptr ptr, 515 2 par_len fixed bin (24); 516 dcl par_offset fixed bin (24); 517 518 dcl par_1st_line_len fixed bin; /* length of 1st line of paragraph */ 519 dcl par_line_number fixed bin; /* number of first line in paragraph */ 520 dcl par_line_count fixed bin (24); /* number of lines in paragraph */ 521 dcl par_unit_line_number fixed bin; /* number of first line in paragraph unit */ 522 dcl par_unit_line_count fixed bin (24); /* number of lines in paragraph unit */ 523 524 /* line info */ 525 526 dcl line char (line_len) based (line_ptr); 527 dcl 1 line_ptr_len aligned, 528 2 line_ptr ptr, 529 2 line_len fixed bin; 530 531 dcl line_number fixed bin; /* line number in segment */ 532 dcl n_cols fixed bin; /* number of character positions in line */ 533 dcl (line_index, special_index) fixed bin (21); /* for counting character positions */ 534 535 536 /* switches */ 537 538 dcl ( 539 begin_info_sw, /* starting a new Info */ 540 blank_line_sw, /* blank line returned by get_line */ 541 colon_info_seen_sw, /* :Info: has been seen */ 542 colon_entry_seen_sw, /* otherwise, :Entry: has been seen */ 543 subroutine_info, /* This is a subroutine block */ 544 end_info_sw, /* get_section hit :Info:/:Entry: */ 545 entry_info, /* in a :Entry: block */ 546 general_info, /* "general info" component */ 547 got_par_sw, /* a paragraph has been read */ 548 header_shown_sw, /* header has been displayed */ 549 link_sw, /* current path is to a link. */ 550 name_sw, /* -names specified */ 551 non_standard, /* non-standard section title */ 552 new_segment_sw, /* starting a new segment */ 553 scanning, /* 1- just looking, suppress msgs */ 554 total_sw) bit (1) aligned; /* -total specified */ 555 556 dcl temp_sw bit (1); 557 558 dcl dtem_string char (32); 559 560 dcl (i, j) fixed bin; 561 562 dcl code fixed bin (35); 563 564 dcl error_table_$bad_conversion fixed bin(35) ext static; 565 dcl error_table_$badopt fixed bin (35) ext; 566 dcl error_table_$badstar fixed bin (35) ext; 567 dcl error_table_$noentry fixed bin (35) ext; 568 dcl error_table_$not_act_fnc fixed bin (35) ext; 569 570 dcl complain automatic entry options (variable); 571 dcl get_an_info automatic entry; 572 573 dcl active_fnc_err_ entry options (variable); 574 dcl active_fnc_err_$suppress_name entry options (variable); 575 dcl check_star_name_$entry entry (char (*), fixed bin (35)); 576 dcl com_err_ entry () options (variable); 577 dcl com_err_$suppress_name entry options (variable); 578 dcl convert_date_to_binary_$relative entry (char (*), fixed bin (71), fixed bin (71), fixed bin (35)); 579 dcl cu_$af_return_arg entry (fixed bin, ptr, fixed bin, fixed bin (35)); 580 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 581 dcl cv_fstime_ entry (bit (36) aligned) returns (fixed bin (71)); 582 dcl date_time_$format entry (char (*), fixed bin (71), char (*), char (*)) returns (char (250) var); 583 dcl expand_pathname_$add_suffix entry (char (*), char (*), char (*), char (*), fixed bin (35)); 584 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 585 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 586 dcl get_system_free_area_ entry returns (ptr); 587 dcl hcs_$star_dir_list_ entry (char (*), char (*), fixed bin (3), ptr, fixed bin, fixed bin, 588 ptr, ptr, fixed bin (35)); 589 dcl hcs_$status_ entry (char (*), char (*), fixed bin (1), ptr, ptr, fixed bin (35)); 590 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 591 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 592 dcl sort_items_$char entry (ptr, fixed bin (24)); 593 dcl terminate_file_ entry (ptr, fixed bin(24), bit(*), fixed bin(35)); 594 dcl (ioa_, ioa_$nnl) entry options (variable); 595 596 dcl (addcharno, addr, before, binary, char, charno, convert, divide, fixed, 597 hbound, index, lbound, length, ltrim, max, min, mod, null, pointer, 598 reverse, rtrim, search, setcharno, string, substr, translate, unspec, 599 verify 600 ) builtin; 601 602 dcl (cleanup, conversion, program_interrupt, size) condition; 603 /* ------------------------------------------------------------------------- */ 604 /* MAINLINE -- all is controlled from here */ 605 /* ------------------------------------------------------------------------- */ 606 607 /**** Establish the proper command or AF environment */ 608 call cu_$af_return_arg (arg_count, return_ptr, return_len, code); 609 if code = error_table_$not_act_fnc 610 then do; 611 if arg_count = 0 612 then do; 613 usage: call com_err_$suppress_name (0, ME, "Usage: vis paths {-control_args}"); 614 return; 615 end; 616 af_sw = F; 617 complain = com_err_; 618 end; 619 else do; 620 if arg_count = 0 621 then do; 622 af_usage: call active_fnc_err_$suppress_name (0, ME, "Usage: [vis paths {-control_args}]"); 623 return; 624 end; 625 af_sw = T; 626 complain = active_fnc_err_; 627 end; 628 /**** Begin initialization, Process control args */ 629 name_sw, total_sw = F; 630 path_count, highest_severity, severity_limit = 0; 631 do arg_index = 1 to arg_count; 632 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, (0)); 633 if substr (arg, 1, length ("-")) = "-" 634 then if arg = "-severity" | arg = "-sv" 635 then do; 636 arg_index = arg_index + 1; 637 if arg_index > arg_count 638 then do; 639 call complain (0, ME, "No value specified for ^a", arg); 640 return; 641 end; 642 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, (0)); 643 on conversion,size goto BAD_CONVERSION; 644 severity_limit = convert (severity_limit, arg); 645 revert conversion,size; 646 if severity_limit > hbound (error_count.total, 1) 647 | severity_limit < lbound (error_count.total, 1) 648 then do; 649 call complain (0, ME, "^d outside severity range ^d to ^d", 650 severity_limit, lbound (error_count.total, 1), 651 hbound (error_count.total, 1)); 652 return; 653 end; 654 end; 655 else if arg = "-total" | arg = "-tt" 656 then total_sw = T; 657 else if arg = "-names" | arg = "-nm" 658 then name_sw = T; 659 else if arg = "-no_names" | arg = "-nnm" 660 then name_sw = F; 661 else do; 662 call complain (error_table_$badopt, ME, "^a", arg); 663 return; 664 end; 665 666 else path_count = path_count + 1; 667 end; 668 /**** Check argument consistency */ 669 if (path_count = 0) 670 then if af_sw 671 then goto af_usage; 672 else goto usage; 673 if af_sw 674 then do; 675 total_sw = T; 676 if (path_count > 1) 677 then do; 678 AF_TOO_MANY: 679 call active_fnc_err_ (0, ME, "Active function does not accept multiple segments."); 680 return; 681 end; 682 end; 683 /**** Finish initializing. */ 684 backspaces.actual_count = hbound (backspaces.number, 1); 685 badchars.actual_count = hbound (badchars.number, 1); 686 endblanks.actual_count = hbound (endblanks.number, 1); 687 nonblanks.actual_count = hbound (nonblanks.number, 1); 688 long_lines.actual_count = hbound (long_lines.number, 1); 689 get_an_info = VALIDATE; /* make sure it points SOMEWHERE */ 690 star_list_branch_ptr, star_list_names_ptr, status_ptr, src_ptr, 691 temp_ptr = null; 692 on condition (cleanup) call CLEAN_UP; 693 unspec (error_count) = ""b; 694 seg_count, info_count = 0; 695 info_name = ""; 696 unspec (global) = ""b; 697 call get_temp_segment_ (ME, temp_ptr, code); 698 if (code ^= 0) 699 then do; 700 call complain (code, ME, "Getting temp segment."); 701 return; 702 end; 703 src_ename = star_en; 704 if ^db_sw 705 then on condition (program_interrupt) goto PI; 706 if total_sw & ^af_sw 707 then do; 708 call ioa_ ("Info types:"); 709 call ioa_ ("^-"" ? "" means UNKNOWN format info"); 710 call ioa_ ("^- ""GEN "" means GENERAL info"); 711 call ioa_ ("^- ""COM "" means COMMAND info"); 712 call ioa_ ("^- ""AFUN"" means ACTIVE FUNTION info"); 713 call ioa_ ("^- ""C/AF"" means COMMAND/ACTIVE FUNCTION info"); 714 call ioa_ ("^- ""REQ "" means REQUEST info"); 715 call ioa_ ("^- ""AREQ"" means ACTIVE REQUEST info"); 716 call ioa_ ("^- ""R/AR"" means REQUEST/ACTIVE REQUEST info"); 717 call ioa_ ("^- ""SUB+"" means SUBROUTINE w/entries info"); 718 call ioa_ ("^- ""SUBe"" means SUBROUTINE entry info"); 719 call ioa_ ("^- ""SUBR"" means SUBROUTINE (no entries) info"); 720 call ioa_ ("^-"":Info:"" means the segment contains multiple infos."); 721 call ioa_ (" 722 HIGH #LONG #LONG info 723 SEV pghs lines type INFO/Entry/SEGMENT NAME"); 724 end; 725 726 /**** Process pathnames */ 727 do arg_index = 1 to arg_count; 728 call cu_$arg_ptr (arg_index, arg_ptr, arg_len, (0)); 729 if substr (arg, 1, length ("-")) ^= "-" 730 then do; 731 src_arg = arg; 732 call expand_pathname_$add_suffix (src_arg, "info", src_dname, star_en, code); 733 if code ^= 0 734 then do; 735 BAD_PATH: call complain (code, ME, "^a", src_arg); 736 return; 737 end; 738 call PROCESS_STARNAME; 739 end; 740 else if arg = "-severity" | arg = "-sv" 741 then arg_index = arg_index + 1;/* gobble up the associated arg */ 742 end; 743 PI: if total_sw & ^af_sw 744 then do; 745 /**** Show totals */ 746 call ioa_ ("^/^d Segments, ^d Infos", seg_count, info_count); 747 do i = hbound (error_count.total, 1) by -1 to 1; 748 temp_sw = (error_count.total (i) = 0); 749 call ioa_ ( 750 "^[ NO^s^;^4d^] severity ^d errors^[ in ^4d segment^[ ^;s^] (^4d info^[s^])", 751 temp_sw, error_count.total (i), i, ^temp_sw, 752 error_count.segs (i), (error_count.segs (i) = 1), 753 error_count.infos (i), (error_count.infos (i) > 1)); 754 end; 755 call ioa_ (""); 756 end; 757 758 if af_sw then return_arg = ltrim (char (highest_severity)); 759 760 RETURN: call CLEAN_UP; 761 return; 762 763 BAD_CONVERSION: 764 call complain (error_table_$bad_conversion, ME, "^a", arg); 765 return; 766 /* ------------------------------------------------------------------------- */ 767 /* Apply the star conventions to the source pathnames, */ 768 /* then call VALIDATE for each info seg. */ 769 /* ------------------------------------------------------------------------- */ 770 771 PROCESS_STARNAME: proc; 772 773 status_ptr, star_list_branch_ptr, star_list_names_ptr = null (); 774 call check_star_name_$entry (star_en, code); 775 if code = error_table_$badstar 776 then do; 777 call complain (code, ME, "^a", src_arg); 778 goto RETURN; 779 end; 780 if code = 0 781 then do; 782 src_ename = star_en; 783 call VALIDATE; 784 end; 785 else do; 786 area_ptr = get_system_free_area_ (); 787 star_select_sw = star_ALL_ENTRIES; 788 call hcs_$star_dir_list_ (src_dname, star_en, star_select_sw, 789 area_ptr, star_branch_count, star_link_count, star_list_branch_ptr, 790 star_list_names_ptr, code); 791 if code ^= 0 792 then do; 793 call complain (code, ME, "^a^[>^]^a", src_dname, src_dname ^= ">", star_en); 794 return; 795 end; 796 if (star_branch_count > 1) & af_sw 797 then goto AF_TOO_MANY; 798 saved_dn = src_dname; 799 do star_index = 1 to star_branch_count + star_link_count; 800 src_ename = star_list_names (star_dir_list_branch (star_index).nindex); 801 src_dname = saved_dn; 802 call VALIDATE; 803 end; 804 end; 805 call CLEAN_UP$some; 806 807 end PROCESS_STARNAME; 808 /* ------------------------------------------------------------------------- */ 809 /* Validate a single info segment, printing non-brief information, */ 810 /* then printing error messages */ 811 /* ------------------------------------------------------------------------- */ 812 813 VALIDATE: proc; 814 815 src_path = pathname_ (src_dname, src_ename); 816 status_area_ptr = get_system_free_area_ (); 817 status_ptr = addr (status_br); 818 unspec (status_branch) = ""b; 819 status_branch.type = Directory; 820 call hcs_$status_ (src_dname, src_ename, 1, status_ptr, status_area_ptr, code); 821 822 if code = 0 823 then dtem_string = date_time_$format ("date", cv_fstime_ ((status_branch.dtem)), "", ""); 824 else dtem_string = ""; 825 link_sw = (status_link.type = Link); 826 current_names_ptr = addr (status_entry_names); 827 if ^total_sw 828 then call ioa_ ("^/^a^[ (LINK)^]", src_path, link_sw); 829 call initiate_file_ (src_dname, src_ename, "100"b, src_ptr, src_bc, code); /* Read mode */ 830 if (code ^= 0) 831 then do; 832 if code = error_table_$noentry 833 then call ERR_MSG3 (local.no_entry, 0, no_entry); 834 else do; 835 call complain (code, ME, "^a", src_path); 836 call ERR_MSG3 (local.nothing_done, 0, nothing_done); 837 end; 838 goto null_file; 839 end; 840 841 if ep_sw 842 then call ioa_ ("FIL:^( ^a: ^a: ^a:^/^)", current_names); 843 seg_count = seg_count + 1; 844 new_segment_sw = T; 845 colon_info_seen_sw, colon_entry_seen_sw, general_info, entry_info = F; 846 847 nest = 1; 848 temp.sort.n, temp.list_ct, line_number = 0; 849 src_index = 1; 850 src_len = divide (src_bc, 9, 24, 0); 851 if (src_len = 0) 852 then do; 853 call ERR_MSG3 (local.null_segment, 0, zero_segment); 854 goto null_file; 855 end; 856 /**** See if there are any trailing NULs (complain if so), strip them off */ 857 /**** and see if anything left (complain if not). */ 858 nest = verify (reverse (src_seg), NUL) - 1; 859 if (nest = -1) 860 then do; 861 call ERR_MSG (local.null_segment, 0, null_segment, "", src_len, 0); 862 goto null_file; 863 end; 864 if (nest > 0) 865 then do; 866 call ERR_MSG (local.ends_in_NUL, 0, ends_in_NUL, "", nest, 0); 867 src_len = src_len - nest; 868 end; 869 /**** Check for NL at end of segment (complain if none). */ 870 if (substr (src_seg, src_len, 1) ^= NL) 871 then call ERR_MSG3 (local.need_ending_NL, 0, need_ending_NL); 872 highest_severity, par_line_count = 0; 873 par_unit_line_count = 0; 874 unspec (errors) = "0"b; 875 nest = 1; 876 877 got_par_sw = F; 878 header_shown_sw = F; 879 if (index (src_seg, " 880 :Info:") ^= 0) | (index (src_seg, " 881 :Internal:") ^= 0) 882 then do; /* this is multi-info format */ 883 colon_info_seen_sw = T; 884 if (substr (src_seg, 1, 6) ^= ":Info:") 885 & (substr (src_seg, 1, 10) ^= ":Internal:") 886 then call ERR_MSG3 (local.missing_info, 0, missing_info); 887 end; 888 else if (index (src_seg, " 889 :Entry:") ^= 0) 890 then do; 891 colon_entry_seen_sw = T; 892 end; 893 line_number = 0; 894 src_index = 1; 895 do while (src_index < src_len); /* go as long as any data is left */ 896 call GET_INFO; 897 end; 898 if ^general_info then call check_addnames(); 899 900 null_file: 901 do sev = 1 to 5; 902 error_count.segs (sev) = error_count.segs (sev) + error_count.seg (sev); 903 error_count.seg (sev) = 0; 904 end; 905 906 if ^total_sw 907 then call ioa_ ("^/"); 908 if src_ptr ^= null 909 then call terminate_file_ (src_ptr, (0), TERM_FILE_TERM, (0)); 910 return; 911 /* ------------------------------------------------------------------------- */ 912 /* Compare the list of names on the segment with the list of names derived */ 913 /* from the dividers in the segment. If they are not the same (including */ 914 /* order), either change the segment's names (-names) or tell what is wrong */ 915 /* (-no_names). The names are sorted by longname. Any short names follow a */ 916 /* longname in the order they occurred in the divider. If no divider exists, */ 917 /* the names are gotten from the header. */ 918 /* ------------------------------------------------------------------------- */ 919 920 check_addnames: proc; 921 922 dcl t_ptr ptr; 923 dcl t_ct fixed bin; 924 dcl a_name char(32); 925 dcl done bit (1) aligned; 926 dcl error_table_$segnamedup fixed bin(35) ext static; 927 dcl hcs_$chname_seg entry (ptr, char(*), char(*), fixed bin(35)); 928 dcl order_sw bit (1) aligned; 929 dcl used_sw (status_branch.nnames) bit (1) aligned; 930 931 if (temp.sort.n = 1) 932 then do; 933 div_names_ptr = temp.sort.vector (1); 934 do div_names_ct = 1 to 1000 while (div_names.flag (div_names_ct) ^= 0); 935 end; 936 end; 937 else do; 938 /**** There's plenty of room in temp, make a sorted array there */ 939 call sort_items_$char (addr (temp.sort), length (temp.list.name (1))); 940 div_names_ptr = addr (temp.list (temp.list_ct + 1)); 941 t_ct = 0; 942 div_names_x1, div_names_x2 = 1; 943 do while (div_names_x1 <= temp.sort.n); 944 t_ptr = temp.sort.vector (div_names_x1); 945 t_ct = t_ct + 1; 946 div_names.name (t_ct) = t_ptr -> div_names.name (div_names_x2); 947 if (t_ptr -> div_names.flag (div_names_x2) = 0) 948 then do; 949 div_names_x1 = div_names_x1 + 1; 950 div_names_x2 = 1; 951 end; 952 else div_names_x2 = div_names_x2 + 1; 953 end; 954 div_names_ct = t_ct; 955 end; 956 957 unspec (used_sw) = "0"b; 958 /**** If derived list is the same size as addname list, check equality */ 959 if (div_names_ct = status_branch.nnames) 960 then do; 961 do i = 1 to div_names_ct; 962 if (div_names.name (i) ^= current_names (i)) 963 then goto does_not_match; 964 end; 965 return; /* AOK */ 966 967 does_not_match: 968 end; 969 if name_sw 970 then do; 971 /**** Change the set of names to what we want. Since we are not working */ 972 /**** ..with extended objects, we are using hcs_$chname_file */ 973 a_name = div_names.name (1); 974 /**** First make sure the new primary name is there. */ 975 do j = 1 to status_branch.nnames; 976 if (current_names (j) = a_name) 977 then goto already_there; 978 end; 979 /**** Since the needed name is not there, add it */ 980 call hcs_$chname_seg (src_ptr, "", a_name, code); 981 if (code ^= 0) 982 then if (code ^= error_table_$segnamedup) 983 then do; 984 call complain (code, ME, "Trying to add ^a to ^a", a_name, src_path); 985 return; 986 end; 987 already_there: 988 /**** Next, delete all names except the new primary one. */ 989 do j = 1 to status_branch.nnames; 990 if (current_names (j) ^= a_name) 991 then do; 992 call hcs_$chname_seg (src_ptr, (current_names (j)), "", code); 993 if (code ^= 0) 994 then do; 995 call complain (code, ME, "Trying to delete ^a from ^a", 996 current_names (j), src_path); 997 return; 998 end; 999 end; 1000 end; 1001 /**** Lastly, add all the needed extra names. */ 1002 do i = 2 to div_names_ct; 1003 call hcs_$chname_seg (src_ptr, "", div_names.name (i), code); 1004 if (code ^= 0) 1005 then do; 1006 call complain (code, ME, "Trying to add ^a to ^a", 1007 div_names.name (i), src_path); 1008 return; 1009 end; 1010 end; 1011 return; 1012 end; 1013 /**** Tell what is wrong with the addnames. */ 1014 /**** (No attempt was made here to optimize this searching procedure.) */ 1015 order_sw = T; 1016 /**** Each name in the divider list should be in the addname list. */ 1017 do i = 1 to div_names_ct; 1018 a_name = div_names.name (i); 1019 done = ""b; 1020 do j = 1 to status_branch.nnames while (^done); 1021 if (current_names (j) = a_name) 1022 then do; 1023 used_sw (j) = "1"b; 1024 done = "1"b; 1025 end; 1026 end; 1027 if ^done 1028 then do; 1029 order_sw = F; 1030 call ERR_MSG (local.missing_name, 00, missing_name, 1031 a_name, 0, 0); 1032 end; 1033 end; 1034 /**** Each name in the addname list should be in the divider list. */ 1035 do j = 1 to status_branch.nnames; 1036 if ^used_sw (j) 1037 then do; 1038 order_sw = F; 1039 call ERR_MSG (local.extra_name, 00, extra_name, 1040 (current_names (j)), 0, 0); 1041 end; 1042 end; 1043 /**** If all names were accounted for, then the problem is ORDER. */ 1044 if order_sw 1045 then call ERR_MSG3 (local.order_name, 0, order_name); 1046 return; 1047 1048 end check_addnames; 1049 1050 1051 dcl sev fixed bin; 1052 /* ------------------------------------------------------------------------- */ 1053 /* tracing utilities */ 1054 /* ------------------------------------------------------------------------- */ 1055 dcl nest fixed bin (24) init (1); 1056 1057 PUSH: proc (name); 1058 dcl name char (24); 1059 call ioa_ ("^v(: ^)>^a ^i:^i^[ eof^]^[ par^]^[ SCAN^]", 1060 nest, name, src_index, src_len, end_info_sw, got_par_sw, scanning); 1061 nest = nest + 1; 1062 end PUSH; 1063 1064 POP: proc (name); 1065 dcl name char (24); 1066 nest = nest - 1; 1067 call ioa_ ("^v(: ^)<^a ^i:^i^[ eof^]^[ par^]^[ SCAN^]", 1068 nest, name, src_index, src_len, end_info_sw, got_par_sw, scanning); 1069 end POP; 1070 /* ------------------------------------------------------------------------- */ 1071 /* GET_INFO considers an "Info" to be a whole segment, or a portion of a */ 1072 /* segment beginning with either ":Info:" or ":Entry:" and including every- */ 1073 /* thing up to either ":Info:", ":Entry:", or end-of-segment. */ 1074 /* ------------------------------------------------------------------------- */ 1075 1076 GET_INFO: proc; 1077 dcl hold_type entry automatic; 1078 if tr_sw then call PUSH ("GET_INFO"); 1079 unspec (local) = ""b; 1080 hold_type = get_an_info; 1081 get_an_info = CHECK_INFO_TYPE (); 1082 if (hold_type = MULTSUB_INFO) 1083 & (get_an_info ^= ENTRY___INFO) 1084 then call ERR_MSG3 (local.no_entries, 0, no_entries); 1085 else if (get_an_info = ENTRY___INFO) 1086 & (hold_type ^= ENTRY___INFO) 1087 & (hold_type ^= MULTSUB_INFO) 1088 then call ERR_MSG3 (local.bad_entry, 0, bad_entry); 1089 div_names_ct = 0; 1090 div_names_ptr = null (); 1091 unspec (local) = ""b; 1092 call get_an_info; /* process an info block */ 1093 if (first_section_head = "") 1094 then call ERR_MSG3 (local.no_sections, 0, no_sections); 1095 call PRINT_ERR_SUMMARY; 1096 do sev = 1 to 5; 1097 error_count.infos (sev) = error_count.infos (sev) + error_count.info (sev); 1098 error_count.info (sev) = 0; 1099 end; 1100 info_name = ""; 1101 /**** if there is still more segment to process, back up to the beginning */ 1102 /**** ..of the info divider. */ 1103 if (src_index < src_len) 1104 then do; 1105 src_index = par_offset; 1106 line_number = par_line_number - 1; 1107 end; 1108 if tr_sw then call POP ("GET_INFO"); 1109 1110 end GET_INFO; 1111 CHECK_INFO_TYPE: proc returns (entry); 1112 1113 dcl hold_src_index fixed bin; 1114 dcl hold_line_number fixed bin; 1115 dcl result entry automatic; 1116 1117 scanning = T; 1118 subroutine_info = F; 1119 hold_src_index = src_index; 1120 hold_line_number = line_number; 1121 got_par_sw = F; 1122 call GET_HEADER; /* scanning */ 1123 if general_info 1124 then result = GENERAL_INFO; 1125 else if entry_info 1126 then result = ENTRY___INFO; 1127 else if colon_entry_seen_sw 1128 then result = MULTSUB_INFO; 1129 else do; 1130 call GET_SECTION; 1131 if (section_id = UNTITLED) 1132 then do; 1133 call GET_SECTION; 1134 if (section_id = ENTRY_POINTS_IN) 1135 then result = MULTSUB_INFO; 1136 else do; 1137 result = SINGSUB_INFO; 1138 subroutine_info = T; 1139 end; 1140 end; 1141 else if (section_id = FUNCTION) 1142 then do; 1143 result = SINGSUB_INFO; 1144 subroutine_info = T; 1145 end; 1146 else if (section_id = SYNTAX_AS_A_COMMAND) 1147 then do; 1148 call GET_SECTION; 1149 if (section_id = SYNTAX_AS_AN_ACTIVE_FUNCTION) 1150 then result = COMM_AF_INFO; 1151 else result = COMMAND_INFO; 1152 end; 1153 else if (section_id = SYNTAX_AS_AN_ACTIVE_FUNCTION) 1154 then do; 1155 call GET_SECTION; 1156 if (section_id = SYNTAX_AS_A_COMMAND) | (section_id = SYNTAX) 1157 then result = COMM_AF_INFO; 1158 else result = ACT_FUN_INFO; 1159 end; 1160 else if (section_id = SYNTAX) 1161 then do; 1162 call GET_SECTION; 1163 if (section_id = SYNTAX_AS_AN_ACTIVE_REQUEST) 1164 then result = REQU_AR_INFO; 1165 else if (section_id = SYNTAX_AS_AN_ACTIVE_FUNCTION) 1166 then result = COMM_AF_INFO; 1167 else result = REQUEST_INFO; 1168 end; 1169 else if (section_id = SYNTAX_AS_AN_ACTIVE_REQUEST) 1170 then do; 1171 call GET_SECTION; 1172 if (section_id = SYNTAX) 1173 then result = REQU_AR_INFO; 1174 else result = ACT_REQ_INFO; 1175 end; 1176 else result = UNKNOWN_INFO; 1177 end; 1178 src_index = hold_src_index; 1179 line_number = hold_line_number; 1180 scanning = F; 1181 got_par_sw = F; 1182 if db_sw then call ioa_ ("|----------"); 1183 return (result); 1184 1185 end CHECK_INFO_TYPE; 1186 /* ------------------------------------------------------------------------- */ 1187 /* These routines (*_INFO) are designed to make it obvious for each of the */ 1188 /* Info Types what the allowed sections are, whether optional or required, */ 1189 /* and what order they must occur in. */ 1190 /* ------------------------------------------------------------------------- */ 1191 1192 /* ------------------------------------------------------------------------- */ 1193 /* COMMAND-only info */ 1194 /* ------------------------------------------------------------------------- */ 1195 1196 COMMAND_INFO: proc; 1197 1198 /**** set the identification for total and complete cases */ 1199 bf_format = "COM "; format = "COMMAND"; 1200 if tr_sw then call PUSH ("COMMAND_INFO"); 1201 /* format: off */ 1202 call GET_HEADER; /* process first line of info block */ 1203 call SEC$init (8); 1204 /**** seq min max next "title" */ 1205 L(0): 1206 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX_AS_A_COMMAND)); 1207 L(2): goto L(SEC ( 2, 1, 1, 2, FUNCTION)); 1208 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1209 L(4): goto L(SECx ( 4, 0, 1, 4, CONTROL_ARGUMENTS)); 1210 L(5): goto L(SECx ( 5, 0, 1, 4, CONTROL_ARGUMENTS_AS_A_COMMAND)); 1211 L(6): goto L(SECx ( 6, 0, 99, 4, CONTROL_ARGUMENTS_FOR)); 1212 L(7): goto L(SECx ( 7, 0, 1, 7, ACCESS_REQUIRED)); 1213 L(8): goto L(SECx ( 8, 0, 1, 8, EXAMPLES)); 1214 L(9): ; /* end-of-info */ 1215 /* format: on */ 1216 1217 if tr_sw then call POP ("COMMAND_INFO"); 1218 1219 end COMMAND_INFO; 1220 /* ------------------------------------------------------------------------- */ 1221 /* ACTIVE FUNCTION only info */ 1222 /* ------------------------------------------------------------------------- */ 1223 1224 ACT_FUN_INFO: proc; 1225 1226 bf_format = "AFUN"; format = "ACTIVE FUNTION"; 1227 if tr_sw then call PUSH ("ACT_FUN_INFO"); 1228 /* format: off */ 1229 call GET_HEADER; /* process first line of info block */ 1230 call SEC$init (8); 1231 /**** seq min max next "title" */ 1232 L(0): 1233 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX_AS_AN_ACTIVE_FUNCTION)); 1234 L(2): goto L(SEC ( 2, 1, 1, 2, FUNCTION)); 1235 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1236 L(4): goto L(SECx ( 4, 0, 1, 4, CONTROL_ARGUMENTS)); 1237 L(5): goto L(SECx ( 5, 0, 1, 4, CONTROL_ARGUMENTS_AS_AN_ACTIVE_FUNCTION)); 1238 L(6): goto L(SECx ( 6, 0, 99, 4, CONTROL_ARGUMENTS_FOR)); 1239 L(7): goto L(SECx ( 7, 0, 1, 7, ACCESS_REQUIRED)); 1240 L(8): goto L(SECx ( 8, 0, 1, 8, EXAMPLES)); 1241 L(9): ; /* end-of-info */ 1242 /* format: on */ 1243 if tr_sw then call POP ("ACT_FUN_INFO"); 1244 1245 end ACT_FUN_INFO; 1246 /* ------------------------------------------------------------------------- */ 1247 /* COMMAND & ACTIVE FUNCTION info */ 1248 /* ------------------------------------------------------------------------- */ 1249 1250 COMM_AF_INFO: proc; 1251 bf_format = "C/AF"; format = "COMMAND/ACTIVE FUNCTION"; 1252 if tr_sw then call PUSH ("COMM_AF_INFO"); 1253 /* format: off */ 1254 call GET_HEADER; /* process first line of info block */ 1255 call SEC$init (10); 1256 /**** seq min max next "title" */ 1257 L(0): 1258 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX_AS_A_COMMAND)); 1259 L(2): goto L(SEC ( 2, 1, 1, 1, SYNTAX_AS_AN_ACTIVE_FUNCTION)); 1260 L(3): goto L(SEC ( 3, 1, 1, 3, FUNCTION)); 1261 L(4): goto L(SEC ( 4, 0, 1, 4, ARGUMENTS)); 1262 L(5): goto L(SECx ( 5, 0, 1, 5, CONTROL_ARGUMENTS)); 1263 L(6): goto L(SECx ( 6, 0, 1, 5, CONTROL_ARGUMENTS_AS_A_COMMAND)); 1264 L(7): goto L(SECx ( 7, 0, 1, 5, CONTROL_ARGUMENTS_AS_AN_ACTIVE_FUNCTION)); 1265 L(8): goto L(SECx ( 8, 0, 99, 5, CONTROL_ARGUMENTS_FOR)); 1266 L(9): goto L(SECx ( 9, 0, 1, 9, ACCESS_REQUIRED)); 1267 L(10):goto L(SECx (10, 0, 1, 10, EXAMPLES)); 1268 L(11): ; /* end-of-info */ 1269 /* format: on */ 1270 if tr_sw then call POP ("COMM_AF_INFO"); 1271 1272 end COMM_AF_INFO; 1273 /* ------------------------------------------------------------------------- */ 1274 /* REQUEST only info */ 1275 /* ------------------------------------------------------------------------- */ 1276 1277 REQUEST_INFO: proc; 1278 bf_format = "REQ "; format = "REQUEST"; 1279 if tr_sw then call PUSH ("REQUEST_INFO"); 1280 /* format: off */ 1281 call GET_HEADER; /* process first line of info block */ 1282 call SEC$init (8); 1283 /**** seq min max next "title" */ 1284 L(0): 1285 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX)); 1286 L(2): goto L(SEC ( 2, 1, 1, 2, FUNCTION)); 1287 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1288 L(4): goto L(SECx ( 4, 0, 1, 4, CONTROL_ARGUMENTS)); 1289 L(5): goto L(SECx ( 5, 0, 1, 4, CONTROL_ARGUMENTS_AS_A_REQUEST)); 1290 L(6): goto L(SECx ( 6, 0, 99, 4, CONTROL_ARGUMENTS_FOR)); 1291 L(7): goto L(SECx ( 7, 0, 1, 7, ACCESS_REQUIRED)); 1292 L(8): goto L(SECx ( 8, 0, 1, 8, EXAMPLES)); 1293 L(9): ; /* end-of-info */ 1294 /* format: on */ 1295 if tr_sw then call POP ("REQUEST_INFO"); 1296 1297 end REQUEST_INFO; 1298 /* ------------------------------------------------------------------------- */ 1299 /* ACTIVE REQUEST only info */ 1300 /* ------------------------------------------------------------------------- */ 1301 1302 ACT_REQ_INFO: proc; 1303 bf_format = "AREQ"; format = "ACTIVE REQUEST"; 1304 if tr_sw then call PUSH ("ACT_REQ_INFO"); 1305 /* format: off */ 1306 call GET_HEADER; /* process first line of info block */ 1307 call SEC$init (8); 1308 /**** seq min max next "title" */ 1309 L(0): 1310 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX_AS_AN_ACTIVE_REQUEST)); 1311 L(2): goto L(SEC ( 2, 1, 1, 2, FUNCTION)); 1312 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1313 L(4): goto L(SECx ( 4, 0, 1, 4, CONTROL_ARGUMENTS)); 1314 L(5): goto L(SECx ( 5, 0, 1, 4, CONTROL_ARGUMENTS_AS_AN_ACTIVE_REQUEST)); 1315 L(6): goto L(SECx ( 6, 0, 99, 4, CONTROL_ARGUMENTS_FOR)); 1316 L(7): goto L(SECx ( 7, 0, 1, 7, ACCESS_REQUIRED)); 1317 L(8): goto L(SECx ( 8, 0, 1, 8, EXAMPLES)); 1318 L(9): ; /* end-of-info */ 1319 /* format: on */ 1320 if tr_sw then call POP ("ACT_REQ_INFO"); 1321 1322 end ACT_REQ_INFO; 1323 /* ------------------------------------------------------------------------- */ 1324 /* REQUEST & ACTIVE REQUEST info */ 1325 /* ------------------------------------------------------------------------- */ 1326 1327 REQU_AR_INFO: proc; 1328 bf_format = "R/AR"; format = "REQUEST/ACTIVE REQUEST"; 1329 if tr_sw then call PUSH ("REQU_AR_INFO"); 1330 /* format: off */ 1331 call GET_HEADER; /* process first line of info block */ 1332 call SEC$init (10); 1333 /**** seq min max next "title" */ 1334 L(0): 1335 L(1): goto L(SEC ( 1, 1, 1, 1, SYNTAX)); 1336 L(2): goto L(SEC ( 2, 1, 1, 1, SYNTAX_AS_AN_ACTIVE_REQUEST)); 1337 L(3): goto L(SEC ( 3, 1, 1, 3, FUNCTION)); 1338 L(4): goto L(SEC ( 4, 0, 1, 4, ARGUMENTS)); 1339 L(5): goto L(SECx ( 5, 0, 1, 5, CONTROL_ARGUMENTS)); 1340 L(6): goto L(SECx ( 6, 0, 1, 5, CONTROL_ARGUMENTS_AS_A_REQUEST)); 1341 L(7): goto L(SECx ( 7, 0, 1, 5, CONTROL_ARGUMENTS_AS_AN_ACTIVE_REQUEST)); 1342 L(8): goto L(SECx ( 8, 0, 99, 5, CONTROL_ARGUMENTS_FOR)); 1343 L(9): goto L(SECx ( 9, 0, 1, 9, ACCESS_REQUIRED)); 1344 L(10):goto L(SECx (10, 0, 1, 10, EXAMPLES)); 1345 L(11): ; /* end-of-info */ 1346 /* format: on */ 1347 if tr_sw then call POP ("REQU_AR_INFO"); 1348 1349 end REQU_AR_INFO; 1350 /* ------------------------------------------------------------------------- */ 1351 /* SUBROUTINE w/multiple entries */ 1352 /* ------------------------------------------------------------------------- */ 1353 1354 MULTSUB_INFO: proc; 1355 bf_format = "SUB+"; format = "SUBROUTINE w/entries"; 1356 if tr_sw then call PUSH ("MULTSUB_INFO"); 1357 /* format: off */ 1358 call GET_HEADER; /* process first line of info block */ 1359 call SEC$init (2); 1360 /**** seq min max next "title" */ 1361 P(0): 1362 P(1): goto P(SEC ( 1, 1, 1, 1, UNTITLED)); 1363 P(2): goto P(SEC ( 2, 1, 1, 2, ENTRY_POINTS_IN)); 1364 P(3): ; /* end-of-info */ 1365 if tr_sw then call POP ("MULTSUB_INFO"); 1366 return; 1367 1368 ENTRY___INFO: entry; 1369 bf_format = "SUBe"; format = "SUBROUTINE entry"; 1370 if tr_sw then call PUSH ("ENTRY___INFO"); 1371 subroutine_info = T; 1372 header_shown_sw = F; 1373 call GET_HEADER; /* process first line of info block */ 1374 call SEC$init (5); 1375 /**** seq min max next "title" */ 1376 L(0): 1377 L(1): goto L(SEC ( 1, 1, 1, 1, FUNCTION)); 1378 L(2): goto L(SEC ( 2, 1, 1, 2, USAGE)); 1379 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1380 L(4): goto L(SECx ( 4, 0, 1, 4, ACCESS_REQUIRED)); 1381 L(5): goto L(SECx ( 5, 0, 1, 5, EXAMPLES)); 1382 L(6): ; /* end-of-info */ 1383 /* format: on */ 1384 if tr_sw then call POP ("ENTRY___INFO"); 1385 1386 end MULTSUB_INFO; 1387 /* ------------------------------------------------------------------------- */ 1388 /* SUBROUTINE w/one entry */ 1389 /* ------------------------------------------------------------------------- */ 1390 1391 SINGSUB_INFO: proc; 1392 bf_format = "SUBR"; format = "SUBROUTINE (no entries)"; 1393 if tr_sw then call PUSH ("SINGSUB_INFO"); 1394 /* format: off */ 1395 call GET_HEADER; /* process first line of info block */ 1396 call SEC$init (5); 1397 /**** seq min max next "title" */ 1398 L(0): 1399 L(1): goto L(SEC ( 1, 1, 1, 1, FUNCTION)); 1400 L(2): goto L(SEC ( 2, 1, 1, 2, USAGE)); 1401 L(3): goto L(SEC ( 3, 0, 1, 3, ARGUMENTS)); 1402 L(4): goto L(SECx ( 4, 0, 1, 4, ACCESS_REQUIRED)); 1403 L(5): goto L(SECx ( 5, 0, 1, 5, EXAMPLES)); 1404 L(6): ; /* end-of-info */ 1405 /* format: on */ 1406 if tr_sw then call POP ("SINGSUB_INFO"); 1407 1408 end SINGSUB_INFO; 1409 /* ------------------------------------------------------------------------- */ 1410 /* could not figure out what kind this was */ 1411 /* ------------------------------------------------------------------------- */ 1412 UNKNOWN_INFO: proc; 1413 bf_format = " ? "; format = "UNKNOWN format"; 1414 goto common; 1415 1416 /* ------------------------------------------------------------------------- */ 1417 /* GENERAL info - any kind of section */ 1418 /* ------------------------------------------------------------------------- */ 1419 1420 GENERAL_INFO: entry; 1421 bf_format = "GEN "; format = "GENERAL"; 1422 common: 1423 if tr_sw then call PUSH (format); 1424 call GET_HEADER; /* process first line of info block */ 1425 do while (^end_info_sw); 1426 call GET_SECTION; 1427 end; 1428 if tr_sw then call POP (format); 1429 1430 end UNKNOWN_INFO; 1431 /* ------------------------------------------------------------------------- */ 1432 /* Test for the current section being what is needed. Returns the number of */ 1433 /* the next test to run. SEC just tests for the presence of P_title, while */ 1434 /* SECx also accepts LIST_OF, NOTES, and NOTES_ON. */ 1435 /* ------------------------------------------------------------------------- */ 1436 1437 SEC: proc (P_seq_no, P_min, P_max, P_group_no, P_title) returns (fixed bin); 1438 extra_sw = ""b; 1439 goto common; 1440 1441 SECx: entry (P_seq_no, P_min, P_max, P_group_no, P_title) returns (fixed bin); 1442 extra_sw = "1"b; 1443 goto common; 1444 1445 dcl ( 1446 P_seq_no fixed bin, /* sequence # of this title */ 1447 P_min fixed bin, /* Minimum # of these allowed */ 1448 P_max fixed bin, /* Maximum # of these allowed */ 1449 P_group_no fixed bin, /* group # of this title, when some */ 1450 /* ..titles occur in any order, they */ 1451 /* ..all have the same group # */ 1452 P_title fixed bin /* title identifier */ 1453 ) parameter; 1454 1455 dcl extra_sw bit (1) aligned; 1456 dcl i fixed bin; 1457 1458 common: 1459 if tr_sw then call ioa_ (" SEC ^4(^3i^) ^i::^a", P_seq_no, P_min, P_max, 1460 P_group_no, section_id, std_section (P_title)); 1461 /**** fill in item data for later use */ 1462 current.title (P_seq_no) = P_title; 1463 current.minuse (P_seq_no) = P_min; 1464 current.maxuse (P_seq_no) = P_max; 1465 /**** If no data left, still walk down the list */ 1466 if (section_id = EOF) 1467 then do; 1468 if (P_seq_no = current.count) 1469 then do i = 1 to current.count; 1470 if (current.used (i) < current.minuse (i)) 1471 then do; 1472 call ERR_MSG (local.missing_section, 00, missing_section, 1473 substr (std_section (current.title (i)), 3), 0, 0); 1474 end; 1475 end; 1476 return (P_seq_no + 1); /* MATCH EOF- keep moving down the */ 1477 /* ..list and eventually exit it. It */ 1478 /* ..is done this way to make sure */ 1479 /* ..that current gets all filled in */ 1480 end; 1481 if (P_title = section_id) 1482 then do; 1483 if (P_seq_no < last_seq) 1484 then call ERR_MSG3 (local.out_of_sequence, 0, out_of_sequence); 1485 last_seq = P_seq_no; 1486 current.used (last_seq) = current.used (last_seq) + 1; 1487 if (current.used (last_seq) > current.maxuse (last_seq)) 1488 then call ERR_MSG (local.too_many, 0, too_many, "", current.maxuse (last_seq), 0); 1489 if ^end_info_sw 1490 then call GET_SECTION; 1491 else section_id = EOF; 1492 current.pass = 1; 1493 return (P_group_no); /* MATCH- continue in same group */ 1494 end; 1495 /**** no match */ 1496 if extra_sw 1497 then if (section_id = LIST_OF) | (section_id = NOTES) | (section_id = NOTES_ON) 1498 then do; 1499 if tr_sw then call ioa_ (" SEC ^4(^3x^) ^i::^a", section_id, 1500 std_section (P_title)); 1501 next: 1502 if ^end_info_sw 1503 then call GET_SECTION; 1504 else section_id = EOF; 1505 current.pass = 1; 1506 return (last_seq); /* MATCH extra- continue in the list */ 1507 /* where the last match was */ 1508 end; 1509 /**** when we hit the end of the first pass, try again from the top */ 1510 if (P_seq_no = current.count) 1511 then do; 1512 if (current.pass = 1) 1513 then do; 1514 current.pass = 2; 1515 return (1); /* FAIL- go back to the top */ 1516 end; 1517 if ^non_standard 1518 then call ERR_MSG3 (local.not_belong, 00, not_belong); 1519 goto next; 1520 end; 1521 return (P_seq_no + 1); /* FAIL- go on to next test */ 1522 1523 /* ------------------------------------------------------------------------- */ 1524 1525 SEC$init: entry (ct); 1526 1527 dcl ct fixed bin parameter; 1528 1529 unspec (current) = ""b; 1530 current.count = ct; 1531 current.pass = 1; 1532 last_seq = 0; 1533 begin_info_sw = T; 1534 call GET_SECTION; /* get first section */ 1535 return; 1536 1537 end SEC; 1538 /* ------------------------------------------------------------------------- */ 1539 /* Validate and save the info segment header. Its syntax is: */ 1540 /* {divider} date long_name{, short_name}... */ 1541 /* ------------------------------------------------------------------------- */ 1542 1543 GET_HEADER: proc; 1544 1545 if tr_sw then call PUSH ("GET_HEADER"); 1546 call GET_PARAGRAPH (1301,(F)); /* up to first paragraph break (blank line) */ 1547 1548 header_shown_sw, end_info_sw, end_info_sw, internal_sw = F; 1549 if ^colon_info_seen_sw 1550 then do; 1551 /**** This is a single-info segment, check its names */ 1552 if (index (string (current_names), "changes.info") ^= 0) 1553 | (index (string (current_names), ".error.info") ^= 0) 1554 | (index (string (current_names), ".gi.info") ^= 0) 1555 | (index (string (current_names), "diffs.info") ^= 0) 1556 | (index (string (current_names), "differences.info") ^= 0) 1557 | (index (string (current_names), "new_features.info") ^= 0) 1558 then general_info = T; 1559 call SHOW_HEADER; 1560 end; 1561 else do; 1562 /**** This is a multi-info segment. Check out the divider. */ 1563 if substr (par, 1, 6) = ":Info:" 1564 then do; /* this info seg has entry points */ 1565 internal_sw, entry_info = F; 1566 call PROCESS_DIVIDER (6); 1567 end; 1568 else if substr (par, 1, 10) = ":Internal:" 1569 then do; /* this info seg has entry points */ 1570 entry_info = F; 1571 internal_sw = T; 1572 call PROCESS_DIVIDER (10); 1573 end; 1574 end; 1575 if substr (par, 1, 7) = ":Entry:" 1576 then do; /* this info seg has entry points */ 1577 internal_sw, entry_info = T; 1578 call PROCESS_DIVIDER (7); 1579 end; 1580 long_lines.count, backspaces.count, 1581 endblanks.count, badchars.count, nonblanks.count = 0; 1582 last_section_head, section_head = ""; 1583 begin_info_sw = T; 1584 first_section_head = ""; 1585 i = verify (par, WHITE_SPACE); 1586 j = search (substr (par, i), WHITE_SPACE); 1587 if j = 0 1588 then j = par_len - i + 1; 1589 if entry_info 1590 then entry_date = substr (par, i, j - 1); 1591 else header_date = substr (par, i, j - 1); 1592 i = i + j - 1; 1593 if substr (par, i, 1) = NL 1594 then header = ""; 1595 else do; 1596 i = i + verify (substr (par, i), WHITE_SPACE) - 1; 1597 j = index (substr (par, i), NL) - 1; 1598 header = substr (par, i, j); 1599 i = i + j; 1600 i = search (header, " ,"); 1601 if i = 0 1602 then header_short_name = header; 1603 else do; 1604 j = verify (substr (header, i), HDR_NAME_BREAK); 1605 header_short_name = substr (header, i + j - 1); 1606 header = substr (header, 1, i - 1); 1607 end; 1608 if ^scanning & ^internal_sw & ^colon_info_seen_sw & ^general_info 1609 then do; 1610 div_names_ct = div_names_ct + 1; 1611 temp.list_ct = temp.list_ct + 1; 1612 div_names_ptr = addr (temp.list (temp.list_ct)); 1613 temp.sort.n = temp.sort.n + 1; 1614 temp.sort.vector (temp.sort.n) = div_names_ptr; 1615 temp.list.name (temp.list_ct) = header || ".info"; 1616 temp.list.flag (temp.list_ct) = 1; 1617 if ep_sw then call ioa_ ("^3i HDR: <^a> **", temp.list_ct, header); 1618 1619 /* In most cases there will only be one header name and one header short name. 1620* In the case of some subsystem requests, though, there will be multiple 1621* short names. The first of these will be kept in header_short_name and 1622* considered to be *the* short name for the purpose of checking the Syntax 1623* line. The rest will just be additional names. */ 1624 if (header_short_name ^= header) 1625 then do; 1626 header_short_name_temp = header_short_name; 1627 1628 i = search (header_short_name, " ,"); 1629 if i ^= 0 then do; 1630 j = verify (substr (header_short_name, i), HDR_NAME_BREAK); 1631 header_short_name = substr (header_short_name, 1, i - 1); 1632 end; 1633 1634 names_left_to_add = T; 1635 do while (names_left_to_add); 1636 i = search (header_short_name_temp, " ,"); 1637 if i ^= 0 then j = verify (substr (header_short_name_temp, i), HDR_NAME_BREAK); 1638 else names_left_to_add = F; 1639 div_names_ct = div_names_ct + 1; 1640 temp.list_ct = temp.list_ct + 1; 1641 if names_left_to_add then temp.list.name (temp.list_ct) = substr (header_short_name_temp, 1, i - 1) || ".info"; 1642 else temp.list.name (temp.list_ct) = header_short_name_temp || ".info"; 1643 temp.list.flag (temp.list_ct) = 1; 1644 if ep_sw then call ioa_ ("^3i HDR: <^a>", temp.list_ct, temp.list.name (temp.list_ct)); 1645 header_short_name_temp = substr (header_short_name_temp, i + j - 1); 1646 end; 1647 end; 1648 temp.list.flag (temp.list_ct) = 0; 1649 end; 1650 end; 1651 par_line_count = par_line_count - 1; 1652 par_unit_line_count = par_unit_line_count - 1; 1653 if (par_line_count < 1) 1654 then got_par_sw = F; 1655 else do; 1656 got_par_sw = T; 1657 par_line_number = par_line_number + 1; 1658 par_ptr = addcharno (par_ptr, i); 1659 par_len = par_len - i; 1660 end; 1661 1662 /**** test syntax and semantics of header/entry date fields. */ 1663 /**** 1) all must be valid */ 1664 /**** 2) all entry<=header */ 1665 if entry_info 1666 then do; 1667 call convert_date_to_binary_$relative (entry_date, entry_clock, 0, code); 1668 if db_sw & (code = 0) 1669 then call ioa_ ("-Entry: ^a", date_time_$format ("date_time", entry_clock, "", "")); 1670 if code ^= 0 1671 then call ERR_MSG (local.bad_date, 0, bad_date, entry_date, 0, 0); 1672 else if header_date_sw 1673 then if (header_clock < entry_clock) 1674 then call ERR_MSG3 (local.entry_too_late, 0, entry_too_late); 1675 end; 1676 else do; 1677 header_date_sw = "1"b; 1678 call convert_date_to_binary_$relative (header_date, header_clock, 0, code); 1679 if db_sw & (code = 0) 1680 then call ioa_ ("-Header: ^a", date_time_$format ("date_time", header_clock, "", "")); 1681 if code ^= 0 1682 then do; 1683 call ERR_MSG (local.bad_date, 0, bad_date, header_date, 0, 0); 1684 header_date_sw = ""b; /* don't compare against bad date */ 1685 end; 1686 end; 1687 if header = "" 1688 then call ERR_MSG3 (local.no_hdr_name, 0, no_hdr_name); 1689 1690 if entry_info /* turn "foo" or "bar$foo" into */ 1691 then do; /* .."$foo" */ 1692 info_name = "$" || substr (info_name, index (info_name, "$") + 1); 1693 end; 1694 if tr_sw then call POP ("GET_HEADER"); 1695 1696 dcl header_date_sw bit (1); /* 1-header_date is valid */ 1697 1698 end GET_HEADER; 1699 /* ------------------------------------------------------------------------- */ 1700 /* Check out a divider. It's format is: */ 1701 /* | :Info: | */ 1702 /* | :Internal: | name: {name:} ... {NL} */ 1703 /* | :Entry: | */ 1704 /* ------------------------------------------------------------------------- */ 1705 1706 PROCESS_DIVIDER: proc (P_id_len); 1707 1708 dcl P_id_len fixed bin parm; 1709 1710 dcl id_len fixed bin; 1711 dcl t_ptr ptr; 1712 dcl do_names bit (1); 1713 dcl ch1 char (1); 1714 1715 do_names = ^scanning & ^internal_sw; 1716 call SHOW_HEADER; 1717 if ^scanning then info_count = info_count + 1; 1718 if (charno (par_ptr) > 2) 1719 then do; 1720 t_ptr = addcharno (par_ptr, -3); 1721 if (substr (t_ptr -> par, 1, 3) ^= " 1722 1723 1724 ") | blank_line_count > 2 1725 then call ERR_MSG (local.need_2_blank_lines, 0, need_2_blank_lines, 1726 substr (par, 1, P_id_len), 0, 0); 1727 end; 1728 info_name = ""; 1729 general_info = F; 1730 par_ptr = addcharno (par_ptr, P_id_len); 1731 par_len = par_len - P_id_len; 1732 if do_names 1733 then do; 1734 end; 1735 NEXT_COLON: 1736 id_len = index (par, ":"); 1737 if id_len ^= 0 1738 then do; 1739 header = ltrim (substr (par, 1, id_len - 1)); 1740 header = rtrim (header); 1741 if do_names 1742 then do; 1743 div_names_ct = div_names_ct + 1; 1744 temp.list_ct = temp.list_ct + 1; 1745 if (div_names_ct = 1) 1746 then do; 1747 div_names_ptr = addr (temp.list (temp.list_ct)); 1748 temp.sort.n = temp.sort.n + 1; 1749 temp.sort.vector (temp.sort.n) = div_names_ptr; 1750 end; 1751 temp.list.name (temp.list_ct) = header || ".info"; 1752 temp.list.flag (temp.list_ct) = 1; 1753 if ep_sw then call ioa_ ("^3i DIV: <^a>^[ **^]", temp.list_ct, header, (div_names_ct = 1)); 1754 end; 1755 if (info_name = "") 1756 then info_name = header; 1757 header = header || "#"; 1758 if (index (header, ".gi#") ^= 0) 1759 | (index (header, ".error#") ^= 0) 1760 | (index (header, "status#") ^= 0) 1761 | (index (header, "changes#") ^= 0) 1762 | (index (header, "diffs#") ^= 0) 1763 | (index (header, "differences#") ^= 0) 1764 | (index (header, "new_features#") ^= 0) 1765 then general_info = T; 1766 ch1 = substr (par, id_len + 1, 1); 1767 if (ch1 = NL) 1768 then do; 1769 id_len = id_len + 1; 1770 par_line_count = par_line_count - 1; 1771 par_unit_line_count = par_unit_line_count - 1; 1772 par_line_number = par_line_number + 1; 1773 par_unit_line_number = par_unit_line_number + 1; 1774 end; 1775 par_ptr = addcharno (par_ptr, id_len); 1776 par_len = par_len - id_len; 1777 if (ch1 ^= NL) 1778 then goto NEXT_COLON; 1779 end; 1780 if do_names 1781 then temp.list.flag (temp.list_ct) = 0; 1782 end PROCESS_DIVIDER; 1783 SHOW_HEADER: proc; 1784 1785 if ^total_sw & ^header_shown_sw & ^scanning 1786 then do; 1787 header_shown_sw = T; 1788 call ioa_ ("^/-----------^a info^/LINE: ^i^13t^a", format, 1789 par_line_number, substr (par, 1, par_1st_line_len - 1)); 1790 if par_line_count > 1 1791 then call ioa_ ("^13t^a", before (substr (par, par_1st_line_len + 1), NL)); 1792 end; 1793 end SHOW_HEADER; 1794 /* ------------------------------------------------------------------------- */ 1795 /* Validate the next section, up to a double blank line or section heading. */ 1796 /* ------------------------------------------------------------------------- */ 1797 1798 GET_SECTION: proc; 1799 1800 dcl t_ptr ptr; 1801 dcl done bit (1); 1802 1803 if tr_sw then call PUSH ("GET_SECTION"); 1804 1805 call GET_PARAGRAPH (1584,(T)); 1806 1807 section_id = EOF; /* setup in case nothing else here */ 1808 if end_info_sw 1809 then do; 1810 got_par_sw = T; 1811 goto exit; /* do this one first */ 1812 end; 1813 1814 end_info_sw = F; 1815 1816 if section_head ^= "" 1817 then last_section_head = section_head; 1818 section_head = HEAD (par); 1819 section_skip = section_head_len; 1820 section_line_number = par_line_number; 1821 section_ptr_len = par_ptr_len; 1822 section_line_count = par_line_count; 1823 1824 par_unit_line_count = par_line_count; 1825 par_unit_line_number = par_line_number; 1826 1827 if (section_head ^= "") 1828 then do; 1829 if ^total_sw & (^scanning | db_sw) 1830 then call ioa_ ("LINE: ^i^13t^a", section_line_number, section_head); 1831 1832 if (charno (par_ptr) > 2) & ^begin_info_sw 1833 then do; 1834 t_ptr = addcharno (par_ptr, -3); 1835 if (substr (t_ptr -> par, 1, 3) ^= " 1836 1837 1838 ") | blank_line_count > 2 1839 then call ERR_MSG (local.need_2_blank_lines, 0, need_2_blank_lines, "Section", 0, 0); 1840 end; 1841 end; 1842 begin_info_sw = F; 1843 1844 call NORMALIZE_SECTION_HEAD; 1845 1846 if (SYNTAX <= section_id) & (section_id <= USAGE) 1847 then do; 1848 two_paragraph_syntax_sw = F; 1849 if ^scanning & ^general_info 1850 then call PARSE_SYNTAX_SECTION; 1851 if ^two_paragraph_syntax_sw 1852 then goto exit; /* just get 1 paragraph for Syntax: */ 1853 end; 1854 1855 done = F; 1856 do while ((src_index < src_len) & ^done); 1857 call GET_PARAGRAPH (1635,(T)); 1858 if ((search (par, WHITE_SPACE) = 1) 1859 | (index (substr (par, 1, par_1st_line_len), ":") = 0) 1860 ) & ^end_info_sw 1861 then do; 1862 section_len = section_len + par_len + blank_char_count; 1863 section_line_count = section_line_count + par_line_count + blank_line_count; 1864 end; 1865 else done, got_par_sw = T; 1866 end; 1867 1868 if general_info 1869 then goto exit; 1870 goto rtn (section_id); 1871 1872 rtn (2) /* ARGUMENTS */ : 1873 1874 call CHECK_ARGS_FORMAT; 1875 goto exit; 1876 rtn (3) /* CONTROL_ARGUMENTS */ : 1877 rtn (4) /* CONTROL_ARGUMENTS_AS_A_COMMAND */ : 1878 rtn (5) /* CONTROL_ARGUMENTS_AS_A_REQUEST */ : 1879 rtn (6) /* CONTROL_ARGUMENTS_AS_AN_ACTIVE_FUNCTION */ : 1880 rtn (7) /* CONTROL_ARGUMENTS_AS_AN_ACTIVE_REQUEST */ : 1881 rtn (8) /* CONTROL_ARGUMENTS_FOR */ : 1882 call CHECK_CTL_ARGS_FORMAT; 1883 goto exit; 1884 rtn (9) /* ENTRY_POINTS_IN */ : 1885 goto exit; 1886 rtn (12) /* LIST_OF */ : 1887 call CHECK_LIST_OF; 1888 goto exit; 1889 rtn (19) /* USAGE */ : 1890 call CHECK_USAGE; 1891 goto exit; 1892 1893 rtn (0) /* UNKNOWN_TITLE */ : 1894 call ERR_MSG (local.non_std_title, 0, non_std_title, (section_head), 0, 0); 1895 non_standard = T; 1896 1897 rtn (1) /* ACCESS_REQUIRED */ : 1898 rtn (10) /* EXAMPLES */ : 1899 rtn (11) /* FUNCTION */ : 1900 rtn (13) /* NOTES */ : 1901 rtn (14) /* NOTES_ON */ : 1902 rtn (15) /* SYNTAX */ : 1903 rtn (16) /* SYNTAX_AS_A_COMMAND */ : 1904 rtn (17) /* SYNTAX_AS_AN_ACTIVE_FUNCTION */ : 1905 rtn (18) /* SYNTAX_AS_AN_ACTIVE_REQUEST */ : 1906 rtn (20) /* UNTITLED */ : 1907 exit: 1908 if (first_section_head = "") 1909 then first_section_head = section_head; 1910 if tr_sw then call POP ("GET_SECTION"); 1911 1912 1913 CHECK_CTL_ARGS_FORMAT: CHECK_LIST_OF: CHECK_USAGE: 1914 CHECK_ARGS_FORMAT: proc; 1915 1916 /* For Arguments:, Control arguments:, and List of...: sections, checks format of list: 1917* name1, name2, 1918* name3, etc. 1919* description 1920**/ 1921 1922 end CHECK_ARGS_FORMAT; 1923 1924 1925 end GET_SECTION; 1926 /* ------------------------------------------------------------------------- */ 1927 /* Verify the syntax of the Syntax: paragraph, including whether */ 1928 /* the short name is used in the syntax line. */ 1929 /* ------------------------------------------------------------------------- */ 1930 1931 PARSE_SYNTAX_SECTION: proc; 1932 1933 dcl i fixed bin; 1934 1935 1936 if tr_sw then call PUSH ("PARSE_SYNTAX_SECTION"); 1937 i = index (par, header_short_name); 1938 if (i = 0) 1939 then if subroutine_info 1940 then call ERR_MSG (local.no_usage_name, 0, no_usage_name, (header_short_name), 0, 0); 1941 else call ERR_MSG (local.no_syntax_name, 0, no_syntax_name, (header_short_name), 0, 0); 1942 1943 /* Since it is highly likely that a subroutine info will have a blank line 1944* between the declaration and call descriptions of its syntax section, we 1945* want to allow a second paragraph if "call" does not appear in the first. */ 1946 if subroutine_info 1947 then if index (par, "call") = 0 1948 then two_paragraph_syntax_sw = T; 1949 if tr_sw then call POP ("PARSE_SYNTAX_SECTION"); 1950 end PARSE_SYNTAX_SECTION; 1951 /* ------------------------------------------------------------------------- */ 1952 /* Validate the next paragraph, up to a blank line. */ 1953 /* (There may already be an unused paragraph waiting.) */ 1954 /* ------------------------------------------------------------------------- */ 1955 1956 GET_PARAGRAPH: proc (ln,par_unit_sw); 1957 dcl ln fixed bin; /* this parameter is for debugging */ 1958 /* only, to indicate which call is */ 1959 /* being executed */ 1960 dcl par_unit_sw bit(1) aligned; /* handle multiple paragraphs */ 1961 /* delimited by single blank as unit */ 1962 if tr_sw & ^scanning 1963 then call PUSH ("GET_PARAGRAPH"); 1964 if ^got_par_sw /* already read-ahead? */ 1965 then do; /* ..No */ 1966 if (^par_unit_sw & par_unit_line_count > par_line_limit) 1967 then do; 1968 call ERR_MSG (local.paragraph_size, par_unit_line_number, paragraph_size, "", par_unit_line_count, (par_line_limit)); 1969 end; 1970 if (src_index >= src_len) 1971 then do; 1972 1973 if par_unit_sw & par_unit_line_count > par_line_limit 1974 then do; 1975 call ERR_MSG (local.paragraph_size, par_unit_line_number, paragraph_size, "", par_unit_line_count, (par_line_limit)); 1976 end; 1977 1978 end_info_sw = T; 1979 goto exit; 1980 end; 1981 par_1st_line_len = 0; 1982 blank_line_count, blank_char_count = 0; 1983 blank_line_sw = (src_index < src_len); 1984 do while (src_index < src_len & blank_line_sw); /* skip leading blank lines */ 1985 par_offset = src_index; 1986 call GET_LINE; 1987 end; 1988 1989 if src_index >= src_len & blank_line_sw 1990 then do; 1991 /* errors.trailing_blank_lines = ^scanning;*/ 1992 goto exit; 1993 end; 1994 1995 if par_unit_sw then do; 1996 if blank_line_count > 0 1997 then do; 1998 1999 if (par_unit_line_count > par_line_limit) 2000 then do; 2001 call ERR_MSG (local.paragraph_size, par_unit_line_number, paragraph_size, "", par_unit_line_count, (par_line_limit)); 2002 end; 2003 2004 par_unit_line_count = 1; 2005 par_unit_line_number = line_number; 2006 2007 end; 2008 2009 else 2010 par_unit_line_count = par_unit_line_count + 2; 2011 end; 2012 2013 par_1st_line_len = line_len; 2014 par_line_number = line_number; 2015 par_ptr_len = line_ptr_len; 2016 par_line_count = 1; 2017 do while (src_index < src_len & ^blank_line_sw); 2018 call GET_LINE; 2019 if ^blank_line_sw 2020 then do; 2021 par_len = par_len + line_len; 2022 par_line_count = par_line_count + 1; 2023 par_unit_line_count = par_unit_line_count + 1; 2024 end; 2025 end; 2026 end; 2027 2028 if substr (par, 1, 6) = ":Info:" /* beginning of next :Info: block */ 2029 | substr (par, 1, 7) = ":Entry:" 2030 | substr (par, 1, 10) = ":Internal:" 2031 then end_info_sw = T; 2032 else end_info_sw = F; 2033 exit: 2034 if db_sw & ^scanning 2035 then call ioa_ ("^4i)^4i ""^a""(^i)^[ got^]^[ EOF^]", ln, par_line_number, 2036 before (substr (par, 1, 15), NL), par_line_count, got_par_sw, end_info_sw); 2037 got_par_sw = F; 2038 2039 if tr_sw & ^scanning 2040 then call POP ("GET_PARAGRAPH"); 2041 end GET_PARAGRAPH; 2042 /* ------------------------------------------------------------------------- */ 2043 /* Validate next line, advancing src_index and checking various attributes. */ 2044 /* ------------------------------------------------------------------------- */ 2045 2046 GET_LINE: proc; 2047 2048 /**** Set pointer/length of next line. */ 2049 line_number = line_number + 1; 2050 line_ptr = setcharno (src_ptr, src_index - 1); 2051 line_len = src_len - src_index + 1; 2052 i = index (line, NL); /* remove trailing newline */ 2053 if i ^= 0 2054 then line_len = i; 2055 src_index = src_index + line_len; /* advance offset into string */ 2056 n_cols = 0; 2057 if line = NL 2058 then goto BLANK; 2059 /**** Count character positions in printed line */ 2060 line_index, special_index = 1; 2061 do while (special_index ^= 0); 2062 special_index = index (substr (line, line_index), HT) - 1; 2063 if special_index = -1 2064 then special_index = length (line) - line_index + 1; 2065 line_index = line_index + special_index; 2066 n_cols = n_cols + special_index; 2067 if line_index <= length (line) 2068 then do; 2069 n_cols = n_cols + 10 - mod (n_cols, 10); 2070 line_index = line_index + 1; 2071 end; 2072 end; 2073 if (n_cols > line_char_limit) 2074 then do; 2075 if (par_line_count > 1) & (substr (line, 1, 6) ^= ":Info:") & (substr (line, 1, 7) ^= ":Entry:") 2076 then call ERR_LOG (errors.long_lines, line_number); 2077 end; 2078 if verify (substr (line, 1, line_len - 1), WHITE_SPACE) = 0 2079 then do; /* all blanks? */ 2080 call ERR_LOG (errors.nonblanks, line_number); 2081 BLANK: 2082 blank_line_sw = T; 2083 blank_line_count = blank_line_count + 1; 2084 blank_char_count = blank_char_count + length (line); 2085 line_ptr = setcharno (src_ptr, src_index - 2); 2086 line_len = 1; 2087 end; 2088 else do; 2089 if (substr (line, line_len - 1, 1) = HT) | (substr (line, line_len - 1, 1) = SP) 2090 then call ERR_LOG (errors.endblanks, line_number); 2091 blank_line_sw = F; 2092 if index (line, BS) ^= 0 2093 then call ERR_LOG (errors.backspaces, line_number); 2094 if verify (line, PRINTABLE) ^= 0 2095 then call ERR_LOG (errors.badchars, line_number); 2096 end; 2097 if db_sw & ^scanning 2098 then call ioa_ ("^2-**^i-^i^[BL^;^-^a^]", line_number, n_cols, 2099 (line_len = 1), substr (line, 1, min (40, max (1, line_len - 1)))); 2100 2101 end GET_LINE; 2102 /* ------------------------------------------------------------------------- */ 2103 /* Return the section heading of P_string. This is any string */ 2104 /* (<= heading_char_limit chars long) before a colon. Set section_head_len */ 2105 /* to be the number of chars occupied by heading and colon. */ 2106 /* ------------------------------------------------------------------------- */ 2107 2108 HEAD: proc (P_string) returns (char (40)); 2109 2110 dcl P_string char (*); 2111 dcl i fixed bin; 2112 dcl j fixed bin; 2113 2114 if substr (P_string, 1, 1) = NL | search (P_string, WHITE_SPACE) = 1 2115 then goto NULL; 2116 if substr (P_string, 1, 1) = ":" 2117 then i = 2; /* to allow for ":Info:" as the heading */ 2118 else i = 1; 2119 j = search (substr (P_string, i), ": 2120 "); 2121 if j = 0 | j > heading_char_limit + 1 | substr (P_string, i + j - 1, 1) = NL 2122 then do; 2123 NULL: section_head_len = 0; 2124 return (""); 2125 end; 2126 else do; 2127 section_head_len = j + i - 1; 2128 return (ltrim (substr (P_string, i, j - 1))); 2129 end; 2130 2131 end HEAD; 2132 /* ------------------------------------------------------------------------- */ 2133 /* Reduce a section heading to a standard form, if possible. */ 2134 /* ------------------------------------------------------------------------- */ 2135 2136 NORMALIZE_SECTION_HEAD: proc; 2137 2138 dcl old_len fixed bin; 2139 dcl section_temp char (40) var; 2140 2141 normal_head = section_head; 2142 section_id = UNKNOWN_TITLE; 2143 non_standard = F; 2144 2145 if index (normal_head, BS) ^= 0 2146 then do; /* remove underlining */ 2147 do i = 1 to length (normal_head) - 1 while (substr (normal_head, i, 1) ^= " "); 2148 if substr (normal_head, i, 2) = BS || "_" 2149 then do; 2150 normal_head = substr (normal_head, 1, i - 1) || substr (normal_head, i + 1); 2151 i = i - 1; 2152 end; 2153 end; 2154 bsp_sw = T; 2155 end; 2156 else bsp_sw = F; 2157 2158 normal_head = translate (substr (normal_head, 1, 1), UPPER_CASE, LOWER_CASE) 2159 || translate (substr (normal_head, 2), LOWER_CASE, UPPER_CASE); 2160 do section_index = hbound (std_section, 1) by -1 to 1 while 2161 (substr (std_section (section_index), 3) ^= substr (normal_head, 1, length (std_section (section_index)) - 2)); 2162 end; 2163 if (section_index > 0) 2164 then do; 2165 section_id = fixed (substr (std_section (section_index), 1, 2)); 2166 old_len = length (std_section (section_index)) - 2; 2167 section_temp = substr (std_section (section_id), 3); 2168 if (length (section_temp) < 40) 2169 then section_temp = section_temp || substr (normal_head, old_len + 1); 2170 normal_head = section_temp; 2171 if section_head ^= normal_head 2172 then do; 2173 call ERR_MSG (local.this_form_preferred, 0, this_form_preferred, (normal_head), 0, 0); 2174 section_head = normal_head; 2175 end; 2176 if (bf_format = "C/AF") & (section_id = SYNTAX) 2177 then do; 2178 call ERR_MSG3 (local.need_command, 0, need_command); 2179 section_id = SYNTAX_AS_A_COMMAND; 2180 end; 2181 if subroutine_info 2182 then do; 2183 if (SYNTAX <= section_id) & (section_id <= SYNTAX_AS_AN_ACTIVE_REQUEST) 2184 then do; 2185 call ERR_MSG3 (local.need_usage, 0, need_usage); 2186 section_id = USAGE; 2187 end; 2188 if (section_id = UNTITLED) 2189 then do; 2190 call ERR_MSG3 (local.need_function, 0, need_function); 2191 section_id = FUNCTION; 2192 end; 2193 end; 2194 end; 2195 2196 dcl bsp_sw bit (1); 2197 2198 end NORMALIZE_SECTION_HEAD; 2199 /* ------------------------------------------------------------------------- */ 2200 /* ------------------------------------------------------------------------- */ 2201 2202 PRINT_ERR_SUMMARY: proc; 2203 2204 call ERR_PRINT (long_lines, local.lines_too_long, lines_too_long); 2205 call ERR_PRINT (badchars, local.non_printable, non_printable); 2206 call ERR_PRINT (nonblanks, local.blank_white_space, blank_white_space); 2207 call ERR_PRINT (endblanks, local.end_white_space, end_white_space); 2208 call ERR_PRINT (backspaces, local.backspace, backspace); 2209 2210 if af_sw then return; 2211 2212 if total_sw & (highest_severity >= severity_limit) 2213 then do; 2214 if (info_name ^= "") & new_segment_sw 2215 then do; 2216 call ioa_ ("^19x:Info: ^a^[ (LINK)^]", src_path, link_sw); 2217 new_segment_sw = F; 2218 end; 2219 call ioa_ ("^3(^5d ^) ^4a ^[^a^[ (LINK)^]^;^2s ^a^]", 2220 highest_severity, local.paragraph_size, local.lines_too_long, 2221 bf_format, 2222 new_segment_sw, src_path, link_sw, info_name); 2223 new_segment_sw = F; 2224 end; 2225 global = global + local; 2226 highest_severity = 0; 2227 2228 end PRINT_ERR_SUMMARY; 2229 /* ------------------------------------------------------------------------- */ 2230 /* ------------------------------------------------------------------------- */ 2231 2232 ERR_MSG: proc (err_ct, lino, msg, ch_arg, fb_arg1, fb_arg2); 2233 argct = 6; 2234 goto common; 2235 ERR_MSG3: entry (err_ct, lino, msg); 2236 argct = 3; 2237 2238 dcl (err_ct fixed bin (18), /* error accumulator */ 2239 lino fixed bin, /* where it occurred */ 2240 msg char (80) var, /* text of message */ 2241 ch_arg char (*), /* character value */ 2242 fb_arg1 fixed bin (24), /* binary value */ 2243 fb_arg2 fixed bin (24) /* another binary value */ 2244 ) parm; 2245 2246 dcl argct fixed bin; 2247 dcl sev fixed bin; 2248 dcl ch1 char (1); 2249 2250 common: 2251 if scanning then return; 2252 err_ct = err_ct + 1; 2253 ch1 = substr (msg, 1, 1); 2254 sev = index ("012345", ch1) - 1; 2255 highest_severity = max (highest_severity, sev); 2256 error_count.total (sev) = error_count.total (sev) + 1; 2257 error_count.seg (sev) = 1; 2258 error_count.info (sev) = 1; 2259 if total_sw | (sev < severity_limit) 2260 then return; 2261 2262 call ioa_$nnl ("Severity ^a", ch1); 2263 if (lino ^= 0) 2264 then call ioa_$nnl (", line ^i", lino); 2265 call ioa_$nnl (". "); 2266 if (argct = 3) 2267 then call ioa_ (substr (msg, 2), T); 2268 else call ioa_ (substr (msg, 2), T, ch_arg, fb_arg1, fb_arg2); 2269 2270 end ERR_MSG; 2271 /* ------------------------------------------------------------------------- */ 2272 /* ------------------------------------------------------------------------- */ 2273 2274 ERR_LOG: proc (P_map, P_line_number); 2275 2276 /* This internal procedure adds a line number to the appropriate error array. */ 2277 2278 dcl 1 P_map aligned like map; 2279 dcl P_line_number fixed bin; 2280 2281 if (P_map.count = 0) 2282 then P_map.actual_count = 0; 2283 P_map.actual_count = P_map.actual_count + 1; 2284 if P_map.actual_count > hbound (P_map.number, 1) 2285 then return; 2286 P_map.count = P_map.count + 1; 2287 P_map.number (P_map.count) = P_line_number; 2288 2289 end ERR_LOG; 2290 /* ------------------------------------------------------------------------- */ 2291 /* ------------------------------------------------------------------------- */ 2292 2293 ERR_PRINT: proc (P_map, P_accum, P_msg); 2294 2295 /* This internal procedure lists the line numbers for a particular error. */ 2296 2297 dcl 1 P_map aligned like map, 2298 P_accum fixed bin (18), 2299 P_msg char (80) var; 2300 2301 dcl i fixed bin; 2302 dcl sev fixed bin; 2303 dcl ch1 char (1); 2304 2305 if P_map.count = 0 2306 then return; 2307 ch1 = substr (P_msg, 1, 1); 2308 sev = index ("012345", ch1) - 1; 2309 highest_severity = max (highest_severity, sev); 2310 error_count.total (sev) = error_count.total (sev) + P_map.actual_count; 2311 error_count.seg (sev) = 1; 2312 error_count.info (sev) = 1; 2313 P_accum = P_accum + P_map.actual_count; 2314 2315 if total_sw | (sev < severity_limit) 2316 then return; 2317 2318 call ioa_$nnl ("Severity ^a. ", ch1); 2319 severity_count = sev; 2320 2321 call ioa_$nnl (substr (P_msg, 2), (P_map.count ^= 1)); 2322 call ioa_$nnl (": "); 2323 2324 err_count = 2; 2325 do i = 1 to P_map.count; 2326 if err_count = 10 2327 then do; 2328 call ioa_$nnl (",^/^10x"); 2329 err_count = 1; 2330 end; 2331 else err_count = err_count + 1; 2332 if i = 1 | err_count = 1 2333 then call ioa_$nnl ("^d", P_map.number (i)); 2334 else call ioa_$nnl (", ^d", P_map.number (i)); 2335 end; 2336 if P_map.actual_count > P_map.count 2337 then call ioa_ (", etc. (^d in all)", P_map.actual_count); 2338 else call ioa_ (""); 2339 2340 end ERR_PRINT; 2341 2342 end VALIDATE; 2343 CLEAN_UP: proc; 2344 2345 /* ------------------------------------------------------------------------- */ 2346 /* This is the cleanup handler. */ 2347 /* ------------------------------------------------------------------------- */ 2348 2349 if src_ptr ^= null () 2350 then call terminate_file_ (src_ptr, (0), TERM_FILE_TERM, (0)); 2351 if temp_ptr ^= null () 2352 then call release_temp_segment_ (ME, temp_ptr, (0)); 2353 2354 CLEAN_UP$some: entry; 2355 2356 /**** allocations from hcs_$status_ */ 2357 if (status_ptr ^= null ()) 2358 then do; 2359 if (status_link.type = Link) 2360 then if (status_link.pathname_relp ^= ""b) 2361 then do; 2362 free status_pathname in (area); 2363 status_link.pathname_relp = ""b; 2364 end; 2365 if (status_branch.names_relp ^= ""b) 2366 then do; 2367 free status_entry_names in (area); 2368 status_branch.names_relp = ""b; 2369 end; 2370 status_ptr = null (); 2371 end; 2372 /**** allocations from hcs_$star_dir_list_ */ 2373 if star_list_names_ptr ^= null /* this is done first because it */ 2374 then free star_list_names in (area); /* ...uses the next one. */ 2375 if star_list_branch_ptr ^= null 2376 then free star_dir_list_branch in (area); 2377 2378 end CLEAN_UP; 2379 2380 dcl db_sw bit (1) int static init (""b); 2381 dbn: entry; db_sw = "1"b; return; 2382 dbf: entry; db_sw = "0"b; return; 2383 2384 dcl tr_sw bit (1) int static init (""b); 2385 trn: entry; tr_sw = "1"b; return; 2386 trf: entry; tr_sw = "0"b; return; 2387 2388 dcl ep_sw bit (1) int static init (""b); 2389 epn: entry; ep_sw = "1"b; return; 2390 epf: entry; ep_sw = "0"b; return; 2391 2392 1 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 1 2 1 3 /* This include file contains structures for the hcs_$star_, 1 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 1 5* 1 6* Written 23 October 1978 by Monte Davidoff. 1 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 1 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 1 9**/ 1 10 1 11 /* automatic */ 1 12 1 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 1 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 1 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 1 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 1 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 1 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 1 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 1 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 1 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 1 22 1 23 /* based */ 1 24 1 25 /* hcs_$star_ entry structure */ 1 26 1 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 1 28 2 type fixed binary (2) unsigned unaligned, 1 29 /* storage system type */ 1 30 2 nnames fixed binary (16) unsigned unaligned, 1 31 /* number of names of entry that match star_name */ 1 32 2 nindex fixed binary (18) unsigned unaligned; 1 33 /* index of first name in star_names */ 1 34 1 35 /* hcs_$star_ name structure */ 1 36 1 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 1 38 1 39 /* hcs_$star_list_ branch structure */ 1 40 1 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 1 42 2 type fixed binary (2) unsigned unaligned, 1 43 /* storage system type */ 1 44 2 nnames fixed binary (16) unsigned unaligned, 1 45 /* number of names of entry that match star_name */ 1 46 2 nindex fixed binary (18) unsigned unaligned, 1 47 /* index of first name in star_list_names */ 1 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 1 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 1 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 1 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 1 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 1 53 2 pad bit (7) unaligned, 1 54 2 records fixed binary (18) unsigned unaligned; 1 55 /* records used by branch */ 1 56 1 57 /* hcs_$star_dir_list_ branch structure */ 1 58 1 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 1 60 2 type fixed binary (2) unsigned unaligned, 1 61 /* storage system type */ 1 62 2 nnames fixed binary (16) unsigned unaligned, 1 63 /* number of names of entry that match star_name */ 1 64 2 nindex fixed binary (18) unsigned unaligned, 1 65 /* index of first name in star_list_names */ 1 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 1 67 2 pad bit (36) unaligned, 1 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 1 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 1 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 1 71 2 bit_count fixed binary (24) unaligned; 1 72 /* bit count of the branch */ 1 73 1 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 1 75 1 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 1 77 2 type fixed binary (2) unsigned unaligned, 1 78 /* storage system type */ 1 79 2 nnames fixed binary (16) unsigned unaligned, 1 80 /* number of names of entry that match star_name */ 1 81 2 nindex fixed binary (18) unsigned unaligned, 1 82 /* index of first name in star_list_names */ 1 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 1 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 1 85 2 pathname_len fixed binary (18) unsigned unaligned, 1 86 /* length of the pathname of the link */ 1 87 2 pathname_index fixed binary (18) unsigned unaligned; 1 88 /* index of start of pathname in star_list_names */ 1 89 1 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 1 91 1 92 declare star_list_names char (32) based (star_list_names_ptr) 1 93 dimension (star_links (star_branch_count + star_link_count).nindex 1 94 + star_links (star_branch_count + star_link_count).nnames 1 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 1 96 * binary ( 1 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 1 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 1 99 1 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 1 101 1 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 1 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 1 104 1 105 /* internal static */ 1 106 1 107 /* star_select_sw values */ 1 108 1 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 1 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 1 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 1 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 1 113 fixed binary (3) internal static options (constant) initial (5); 1 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 1 115 fixed binary (3) internal static options (constant) initial (7); 1 116 1 117 /* storage system types */ 1 118 1 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 1 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 1 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 1 122 1 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 2393 2394 2 1 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 2 2 2 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 2 4 2 5 /* This include file contains branch and link structures returned by 2 6* hcs_$status_ and hcs_$status_long. */ 2 7 2 8 dcl 1 status_branch aligned based (status_ptr), 2 9 2 short aligned, 2 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 2 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 2 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 2 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 2 14 3 dtu bit (36) unaligned, /* date/time last used */ 2 15 3 mode bit (5) unaligned, /* caller's effective access */ 2 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 2 17 3 pad1 bit (8) unaligned, 2 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 2 19 2 20 /* Limit of information returned by hcs_$status_ */ 2 21 2 22 2 long aligned, 2 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 2 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 2 25 3 lvid bit (36) unaligned, /* logical volume ID */ 2 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 2 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 2 28 3 pad2 bit (8) unaligned, 2 29 3 copy_switch bit (1) unaligned, /* copy switch */ 2 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 2 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 2 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 2 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 2 34 3 pad3 bit (5) unaligned, 2 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 2 36 3 uid bit (36) unaligned; /* unique ID */ 2 37 2 38 dcl 1 status_link aligned based (status_ptr), 2 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 2 40 2 nnames fixed bin (16) unaligned unsigned, 2 41 2 names_relp bit (18) unaligned, 2 42 2 dtem bit (36) unaligned, 2 43 2 dtd bit (36) unaligned, 2 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 2 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 2 46 2 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 2 48 based (pointer (status_area_ptr, status_branch.names_relp)), 2 49 /* array of names returned */ 2 50 status_pathname character (status_link.pathname_length) aligned 2 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 2 52 /* link target path */ 2 53 status_area_ptr pointer, 2 54 status_ptr pointer; 2 55 2 56 dcl (Link initial (0), 2 57 Segment initial (1), 2 58 Directory initial (2)) fixed bin internal static options (constant); 2 59 /* values for type fields declared above */ 2 60 2 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 2395 2396 3 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 3 2 /* format: style2,^inddcls,idind32 */ 3 3 3 4 declare 1 terminate_file_switches based, 3 5 2 truncate bit (1) unaligned, 3 6 2 set_bc bit (1) unaligned, 3 7 2 terminate bit (1) unaligned, 3 8 2 force_write bit (1) unaligned, 3 9 2 delete bit (1) unaligned; 3 10 3 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 3 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 3 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 3 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 3 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 3 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 3 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 3 18 3 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 2397 2398 2399 end validate_info_seg; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 01/23/89 1228.9 validate_info_seg.pl1 >spec>install>1010>validate_info_seg.pl1 2393 1 06/10/82 1045.5 star_structures.incl.pl1 >ldd>include>star_structures.incl.pl1 2395 2 11/22/82 0955.7 status_structures.incl.pl1 >ldd>include>status_structures.incl.pl1 2397 3 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.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. ACCESS_REQUIRED 001434 constant fixed bin(17,0) initial dcl 307 set ref 1212* 1239* 1266* 1291* 1316* 1343* 1380* 1402* ARGUMENTS 001336 constant fixed bin(17,0) initial dcl 307 set ref 1208* 1235* 1261* 1287* 1312* 1338* 1379* 1401* BS constant char(1) initial packed unaligned dcl 368 ref 2092 2145 2148 CONTROL_ARGUMENTS 001331 constant fixed bin(17,0) initial dcl 307 set ref 1209* 1236* 1262* 1288* 1313* 1339* CONTROL_ARGUMENTS_AS_AN_ACTIVE_FUNCTION 001433 constant fixed bin(17,0) initial dcl 307 set ref 1237* 1264* CONTROL_ARGUMENTS_AS_AN_ACTIVE_REQUEST 001330 constant fixed bin(17,0) initial dcl 307 set ref 1314* 1341* CONTROL_ARGUMENTS_AS_A_COMMAND 001430 constant fixed bin(17,0) initial dcl 307 set ref 1210* 1263* CONTROL_ARGUMENTS_AS_A_REQUEST 001413 constant fixed bin(17,0) initial dcl 307 set ref 1289* 1340* CONTROL_ARGUMENTS_FOR 001431 constant fixed bin(17,0) initial dcl 307 set ref 1211* 1238* 1265* 1290* 1315* 1342* Directory constant fixed bin(17,0) initial dcl 2-56 ref 819 ENTRY_POINTS_IN 001432 constant fixed bin(17,0) initial dcl 307 set ref 1134 1363* EOF constant fixed bin(17,0) initial dcl 307 ref 1466 1491 1504 1807 EXAMPLES 001360 constant fixed bin(17,0) initial dcl 307 set ref 1213* 1240* 1267* 1292* 1317* 1344* 1381* 1403* F constant bit(1) initial packed unaligned dcl 368 ref 616 629 659 845 877 878 1029 1038 1118 1121 1180 1181 1372 1546 1548 1565 1570 1638 1653 1729 1814 1842 1848 1855 2032 2037 2091 2143 2156 2217 2223 FUNCTION 000233 constant fixed bin(17,0) initial dcl 307 set ref 1141 1207* 1234* 1260* 1286* 1311* 1337* 1376* 1398* 2191 HDR_NAME_BREAK 000150 constant char(4) initial packed unaligned dcl 368 ref 1604 1630 1637 HT constant char(1) initial packed unaligned dcl 368 ref 2062 2089 LIST_OF constant fixed bin(17,0) initial dcl 307 ref 1496 LOWER_CASE 000160 constant char(26) initial packed unaligned dcl 368 ref 2158 2158 Link constant fixed bin(17,0) initial dcl 2-56 ref 825 2359 ME 000220 constant char(32) initial packed unaligned dcl 366 set ref 613* 622* 639* 649* 662* 678* 697* 700* 735* 763* 777* 793* 835* 984* 995* 1006* 2351* NL 026432 constant char(1) initial packed unaligned dcl 368 ref 870 1593 1597 1767 1777 1790 1790 2033 2033 2052 2057 2114 2121 NOTES constant fixed bin(17,0) initial dcl 307 ref 1496 NOTES_ON constant fixed bin(17,0) initial dcl 307 ref 1496 NUL constant char(1) initial packed unaligned dcl 368 ref 858 PRINTABLE 000167 constant char(98) initial packed unaligned dcl 368 ref 2094 P_accum parameter fixed bin(18,0) dcl 2297 set ref 2293 2313* 2313 P_group_no parameter fixed bin(17,0) dcl 1445 set ref 1437 1441 1458* 1493 P_id_len parameter fixed bin(17,0) dcl 1708 ref 1706 1721 1721 1730 1731 P_line_number parameter fixed bin(17,0) dcl 2279 ref 2274 2287 P_map parameter structure level 1 dcl 2297 in procedure "ERR_PRINT" set ref 2293 P_map parameter structure level 1 dcl 2278 in procedure "ERR_LOG" set ref 2274 P_max parameter fixed bin(17,0) dcl 1445 set ref 1437 1441 1458* 1464 P_min parameter fixed bin(17,0) dcl 1445 set ref 1437 1441 1458* 1463 P_msg parameter varying char(80) dcl 2297 ref 2293 2307 2321 2321 P_seq_no parameter fixed bin(17,0) dcl 1445 set ref 1437 1441 1458* 1462 1463 1464 1468 1476 1483 1485 1510 1521 P_string parameter char packed unaligned dcl 2110 ref 2108 2114 2114 2116 2119 2121 2128 P_title parameter fixed bin(17,0) dcl 1445 ref 1437 1441 1458 1462 1481 1499 SP constant char(1) initial packed unaligned dcl 368 ref 2089 SYNTAX 001301 constant fixed bin(17,0) initial dcl 307 set ref 1156 1160 1172 1284* 1334* 1846 2176 2183 SYNTAX_AS_AN_ACTIVE_FUNCTION 001270 constant fixed bin(17,0) initial dcl 307 set ref 1149 1153 1165 1232* 1259* SYNTAX_AS_AN_ACTIVE_REQUEST 000231 constant fixed bin(17,0) initial dcl 307 set ref 1163 1169 1309* 1336* 2183 SYNTAX_AS_A_COMMAND 000232 constant fixed bin(17,0) initial dcl 307 set ref 1146 1156 1205* 1257* 2179 T 001357 constant bit(1) initial packed unaligned dcl 368 set ref 625 655 657 675 844 883 891 1015 1117 1138 1144 1371 1533 1552 1571 1577 1583 1634 1656 1758 1787 1805 1810 1857 1865 1895 1946 1978 2028 2081 2154 2266* 2268* TERM_FILE_TERM 000147 constant bit(3) initial packed unaligned dcl 3-14 set ref 908* 2349* UNKNOWN_TITLE constant fixed bin(17,0) initial dcl 307 ref 2142 UNTITLED 000230 constant fixed bin(17,0) initial dcl 307 set ref 1131 1361* 2188 UPPER_CASE 000151 constant char(26) initial packed unaligned dcl 368 ref 2158 2158 USAGE 001333 constant fixed bin(17,0) initial dcl 307 set ref 1378* 1400* 1846 2186 WHITE_SPACE constant char(2) initial packed unaligned dcl 368 ref 1585 1586 1596 1858 2078 2114 a_name 000103 automatic char(32) packed unaligned dcl 924 set ref 973* 976 980* 984* 990 1018* 1021 1030* active_fnc_err_ 000026 constant entry external dcl 573 ref 626 678 active_fnc_err_$suppress_name 000030 constant entry external dcl 574 ref 622 actual_count 1 parameter fixed bin(17,0) level 2 in structure "P_map" dcl 2297 in procedure "ERR_PRINT" set ref 2310 2313 2336 2336* actual_count 1 parameter fixed bin(17,0) level 2 in structure "P_map" dcl 2278 in procedure "ERR_LOG" set ref 2281* 2283* 2283 2284 actual_count 53 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 685* actual_count 125 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 686* actual_count 251 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 688* actual_count 1 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 684* actual_count 177 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 687* addcharno builtin function dcl 596 ref 1658 1720 1730 1775 1834 addr builtin function dcl 596 ref 817 826 939 939 940 1612 1747 af_sw 002237 automatic bit(1) dcl 426 set ref 616* 625* 669 673 706 743 758 796 2210 area based area(1024) dcl 415 ref 2362 2367 2373 2375 area_ptr 002222 automatic pointer dcl 418 set ref 786* 788* 2362 2367 2373 2375 arg based char packed unaligned dcl 427 set ref 633 633 633 639* 644 655 655 657 657 659 659 662* 729 731 740 740 763* arg_count 002240 automatic fixed bin(17,0) dcl 428 set ref 608* 611 620 631 637 727 arg_index 002241 automatic fixed bin(17,0) dcl 429 set ref 631* 632* 636* 636 637 642* 727* 728* 740* 740* arg_len 002242 automatic fixed bin(17,0) dcl 430 set ref 632* 633 633 633 639 639 642* 644 655 655 657 657 659 659 662 662 728* 729 731 740 740 763 763 arg_ptr 002244 automatic pointer dcl 431 set ref 632* 633 633 633 639 642* 644 655 655 657 657 659 659 662 728* 729 731 740 740 763 argct 000100 automatic fixed bin(17,0) dcl 2246 set ref 2233* 2236* 2266 backspace 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2208* backspace 000323 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2208* backspaces 001640 automatic structure level 2 dcl 357 set ref 2092* 2208* bad_date 000744 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1670* 1683* bad_date 1 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1670* 1683* bad_entry 2 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1085* bad_entry 001070 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1085* badchars 52 001640 automatic structure level 2 dcl 357 set ref 2094* 2205* before builtin function dcl 596 ref 1790 1790 2033 2033 begin_info_sw 003251 automatic bit(1) dcl 538 set ref 1533* 1583* 1832 1842* bf_format 002246 automatic char(4) packed unaligned dcl 432 set ref 1199* 1226* 1251* 1278* 1303* 1328* 1355* 1369* 1392* 1413* 1421* 2176 2219* big_header 001266 automatic varying char(80) initial dcl 106 set ref 106* binary builtin function dcl 596 ref 2373 blank_char_count 003225 automatic fixed bin(17,0) dcl 507 set ref 1862 1982* 2084* 2084 blank_line_count 003226 automatic fixed bin(17,0) dcl 507 set ref 1721 1835 1863 1982* 1996 2083* 2083 blank_line_sw 003252 automatic bit(1) dcl 538 set ref 1983* 1984 1989 2017 2019 2081* 2091* blank_white_space 000276 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2206* blank_white_space 3 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2206* bsp_sw 000154 automatic bit(1) packed unaligned dcl 2196 set ref 2154* 2156* ch1 000102 automatic char(1) packed unaligned dcl 2248 in procedure "ERR_MSG" set ref 2253* 2254 2262* ch1 000115 automatic char(1) packed unaligned dcl 1713 in procedure "PROCESS_DIVIDER" set ref 1766* 1767 1777 ch1 000146 automatic char(1) packed unaligned dcl 2303 in procedure "ERR_PRINT" set ref 2307* 2308 2318* ch_arg parameter char packed unaligned dcl 2238 set ref 2232 2268* char builtin function dcl 596 ref 758 charno builtin function dcl 596 ref 1718 1832 check_star_name_$entry 000032 constant entry external dcl 575 ref 774 cleanup 003316 stack reference condition dcl 602 ref 692 code 003304 automatic fixed bin(35,0) dcl 562 set ref 608* 609 697* 698 700* 732* 733 735* 774* 775 777* 780 788* 791 793* 820* 822 829* 830 832 835* 980* 981 981 984* 992* 993 995* 1003* 1004 1006* 1667* 1668 1670 1678* 1679 1681 colon_entry_seen_sw 003254 automatic bit(1) dcl 538 set ref 845* 891* 1127 colon_info_seen_sw 003253 automatic bit(1) dcl 538 set ref 845* 883* 1549 1608 com_err_ 000034 constant entry external dcl 576 ref 617 com_err_$suppress_name 000036 constant entry external dcl 577 ref 613 complain 003306 automatic entry variable dcl 570 set ref 617* 626* 639 649 662 700 735 763 777 793 835 984 995 1006 conversion 003324 stack reference condition dcl 602 ref 643 645 convert builtin function dcl 596 ref 644 convert_date_to_binary_$relative 000040 constant entry external dcl 578 ref 1667 1678 count 52 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 1580* count 124 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 1580* count parameter fixed bin(17,0) level 2 in structure "P_map" dcl 2297 in procedure "ERR_PRINT" ref 2305 2321 2325 2336 count 176 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 1580* count 250 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 1580* count parameter fixed bin(17,0) level 2 in structure "P_map" dcl 2278 in procedure "ERR_LOG" set ref 2281 2286* 2286 2287 count 002604 automatic fixed bin(17,0) level 2 in structure "current" dcl 468 in procedure "vis" set ref 1468 1468 1510 1530* count 001640 automatic fixed bin(17,0) level 3 in structure "errors" dcl 357 in procedure "vis" set ref 1580* ct parameter fixed bin(17,0) dcl 1527 ref 1525 1530 cu_$af_return_arg 000042 constant entry external dcl 579 ref 608 cu_$arg_ptr 000044 constant entry external dcl 580 ref 632 642 728 current 002604 automatic structure level 1 unaligned dcl 468 set ref 1529* current_names based char(32) array packed unaligned dcl 433 set ref 841* 962 976 990 992 995* 1021 1039 1552 1552 1552 1552 1552 1552 current_names_ptr 002250 automatic pointer dcl 434 set ref 826* 841 962 976 990 992 995 1021 1039 1552 1552 1552 1552 1552 1552 cv_fstime_ 000046 constant entry external dcl 581 ref 822 822 date_time_$format 000050 constant entry external dcl 582 ref 822 1668 1679 db_sw 000010 internal static bit(1) initial packed unaligned dcl 2380 set ref 704 1182 1668 1679 1829 2033 2097 2381* 2382* div_names based structure array level 1 unaligned dcl 464 div_names_ct 002577 automatic fixed bin(17,0) dcl 454 set ref 934* 934* 954* 959 961 1002 1017 1089* 1610* 1610 1639* 1639 1743* 1743 1745 1753 div_names_ptr 002600 automatic pointer dcl 455 set ref 933* 934 940* 946 962 973 1003 1006 1018 1090* 1612* 1614 1747* 1749 div_names_x1 002602 automatic fixed bin(17,0) dcl 456 set ref 942* 943 944 949* 949 div_names_x2 002603 automatic fixed bin(17,0) dcl 457 set ref 942* 946 947 950* 952* 952 divide builtin function dcl 596 ref 850 2373 do_names 000114 automatic bit(1) packed unaligned dcl 1712 set ref 1715* 1732 1741 1780 done 000102 automatic bit(1) packed unaligned dcl 1801 in procedure "GET_SECTION" set ref 1855* 1856 1865* done 000113 automatic bit(1) dcl 925 in procedure "check_addnames" set ref 1019* 1020 1024* 1027 dtem 5 based bit(36) level 3 packed packed unaligned dcl 2-8 set ref 822 822 dtem_string 003272 automatic char(32) packed unaligned dcl 558 set ref 822* 824* e 2 002604 automatic structure array level 2 unaligned dcl 468 end_info_sw 003256 automatic bit(1) dcl 538 set ref 1059* 1067* 1425 1489 1501 1548* 1548* 1808 1814* 1858 1978* 2028* 2032* 2033* end_white_space 4 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2207* end_white_space 000251 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2207* endblanks 124 001640 automatic structure level 2 dcl 357 set ref 2089* 2207* ends_in_NUL 5 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 866* ends_in_NUL 001241 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 866* entry_clock 003150 automatic fixed bin(71,0) dcl 487 set ref 1667* 1668* 1672 entry_date 003137 automatic char(32) packed unaligned dcl 486 set ref 1589* 1667* 1670* entry_info 003257 automatic bit(1) dcl 538 set ref 845* 1125 1565* 1570* 1577* 1589 1665 1690 entry_too_late 6 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1672* entry_too_late 000771 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1672* ep_sw 000012 internal static bit(1) initial packed unaligned dcl 2388 set ref 841 1617 1644 1753 2389* 2390* err_count 002220 automatic fixed bin(17,0) dcl 410 set ref 2324* 2326 2329* 2331* 2331 2332 err_ct parameter fixed bin(18,0) dcl 2238 set ref 2232 2235 2252* 2252 error_count 002167 automatic structure level 1 unaligned dcl 403 set ref 693* error_table_$bad_conversion 000014 external static fixed bin(35,0) dcl 564 set ref 763* error_table_$badopt 000016 external static fixed bin(35,0) dcl 565 set ref 662* error_table_$badstar 000020 external static fixed bin(35,0) dcl 566 ref 775 error_table_$noentry 000022 external static fixed bin(35,0) dcl 567 ref 832 error_table_$not_act_fnc 000024 external static fixed bin(35,0) dcl 568 ref 609 error_table_$segnamedup 000102 external static fixed bin(35,0) dcl 926 ref 981 errors 001640 automatic structure level 1 dcl 357 set ref 874* expand_pathname_$add_suffix 000052 constant entry external dcl 583 ref 732 extra_name 7 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1039* extra_name 000375 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1039* extra_sw 000100 automatic bit(1) dcl 1455 set ref 1438* 1442* 1496 fb_arg1 parameter fixed bin(24,0) dcl 2238 set ref 2232 2268* fb_arg2 parameter fixed bin(24,0) dcl 2238 set ref 2232 2268* first_section_head 001541 automatic varying char(80) dcl 347 set ref 1093 1584* 1897 1897* fixed builtin function dcl 596 ref 2165 flag 10 based fixed bin(17,0) array level 2 in structure "div_names" dcl 464 in procedure "vis" ref 934 947 flag 2011 based fixed bin(17,0) array level 3 in structure "temp" dcl 458 in procedure "vis" set ref 1616* 1643* 1648* 1752* 1780* format 002252 automatic char(24) packed unaligned dcl 435 set ref 1199* 1226* 1251* 1278* 1303* 1328* 1355* 1369* 1392* 1413* 1421* 1422* 1428* 1788* general_info 003260 automatic bit(1) dcl 538 set ref 845* 898 1123 1552* 1608 1729* 1758* 1849 1868 get_an_info 003312 automatic entry variable dcl 571 set ref 689* 1080 1081* 1082 1085 1092 get_system_free_area_ 000060 constant entry external dcl 586 ref 786 816 get_temp_segment_ 000056 constant entry external dcl 585 ref 697 global 001437 automatic structure level 1 unaligned dcl 332 set ref 696* 2225* 2225 got_par_sw 003261 automatic bit(1) dcl 538 set ref 877* 1059* 1067* 1121* 1181* 1653* 1656* 1810* 1865* 1964 2033* 2037* hbound builtin function dcl 596 ref 646 649 649 684 685 686 687 688 747 2160 2284 hcs_$chname_seg 000104 constant entry external dcl 927 ref 980 992 1003 hcs_$star_dir_list_ 000062 constant entry external dcl 587 ref 788 hcs_$status_ 000064 constant entry external dcl 589 ref 820 header 002700 automatic varying char(72) dcl 481 set ref 1593* 1598* 1600 1601 1604 1605 1606* 1606 1615 1617* 1624 1687 1739* 1740* 1740 1751 1753* 1755 1757* 1757 1758 1758 1758 1758 1758 1758 1758 header_clock 002676 automatic fixed bin(71,0) dcl 480 set ref 1672 1678* 1679* header_date 002666 automatic char(32) packed unaligned dcl 479 set ref 1591* 1678* 1683* header_date_sw 000100 automatic bit(1) packed unaligned dcl 1696 set ref 1672 1677* 1684* header_short_name 002723 automatic varying char(256) dcl 482 set ref 1601* 1605* 1624 1626 1628 1630 1631* 1631 1937 1938 1941 header_short_name_temp 003024 automatic varying char(256) dcl 483 set ref 1626* 1636 1637 1641 1642 1645* 1645 header_shown_sw 003262 automatic bit(1) dcl 538 set ref 878* 1372* 1548* 1785 1787* heading_char_limit constant fixed bin(17,0) initial dcl 392 ref 2121 highest_severity 002162 automatic fixed bin(17,0) dcl 400 set ref 630* 758 872* 2212 2219* 2226* 2255* 2255 2309* 2309 hold_line_number 000123 automatic fixed bin(17,0) dcl 1114 set ref 1120* 1179 hold_src_index 000122 automatic fixed bin(17,0) dcl 1113 set ref 1119* 1178 hold_type 000110 automatic entry variable dcl 1077 set ref 1080* 1082 1085 1085 i 000144 automatic fixed bin(17,0) dcl 2301 in procedure "ERR_PRINT" set ref 2325* 2332 2332 2334* i 003302 automatic fixed bin(17,0) dcl 560 in procedure "vis" set ref 747* 748 749 749* 749 749 749 749* 961* 962 962* 1002* 1003 1006* 1017* 1018* 1585* 1586 1587 1589 1591 1592* 1592 1593 1596* 1596 1596 1597 1598 1599* 1599 1600* 1601 1604 1605 1606 1628* 1629 1630 1631 1636* 1637 1637 1641 1645 1658 1659 2052* 2053 2053 2147* 2147* 2148 2150 2150 2151* 2151* i 000120 automatic fixed bin(17,0) dcl 1933 in procedure "PARSE_SYNTAX_SECTION" set ref 1937* 1938 i 000130 automatic fixed bin(17,0) dcl 2111 in procedure "HEAD" set ref 2116* 2118* 2119 2121 2127 2128 i 000101 automatic fixed bin(17,0) dcl 1456 in procedure "SEC" set ref 1468* 1470 1470 1472 1472* id_len 000110 automatic fixed bin(17,0) dcl 1710 set ref 1735* 1737 1739 1766 1769* 1769 1775 1776 index builtin function dcl 596 ref 879 879 888 1552 1552 1552 1552 1552 1552 1597 1692 1735 1758 1758 1758 1758 1758 1758 1758 1858 1937 1946 2052 2062 2092 2145 2254 2308 info 24 002167 automatic fixed bin(17,0) array level 2 dcl 403 set ref 1097 1098* 2258* 2312* info_count 002166 automatic fixed bin(17,0) dcl 402 set ref 694* 746* 1717* 1717 info_name 003126 automatic varying char(32) dcl 485 set ref 695* 1100* 1692* 1692 1692 1728* 1755 1755* 2214 2219* infos 12 002167 automatic fixed bin(17,0) array level 2 dcl 403 set ref 749* 749 1097* 1097 initiate_file_ 000066 constant entry external dcl 590 ref 829 internal_sw 002260 automatic bit(1) dcl 436 set ref 1548* 1565* 1571* 1577* 1608 1715 ioa_ 000076 constant entry external dcl 594 ref 708 709 710 711 712 713 714 715 716 717 718 719 720 721 746 749 755 827 841 906 1059 1067 1182 1458 1499 1617 1644 1668 1679 1753 1788 1790 1829 2033 2097 2216 2219 2266 2268 2336 2338 ioa_$nnl 000100 constant entry external dcl 594 ref 2262 2263 2265 2318 2321 2322 2328 2332 2334 j 000131 automatic fixed bin(17,0) dcl 2112 in procedure "HEAD" set ref 2119* 2121 2121 2121 2127 2128 j 003303 automatic fixed bin(17,0) dcl 560 in procedure "vis" set ref 975* 976* 987* 990 992 995* 1020* 1021 1023* 1035* 1036 1039* 1586* 1587 1587* 1589 1591 1592 1597* 1598 1599 1604* 1605 1630* 1637* 1645 last_section_head 003171 automatic varying char(40) dcl 498 set ref 1582* 1816* last_seq 003224 automatic fixed bin(17,0) dcl 505 set ref 1483 1485* 1486 1486 1487 1487 1487 1506 1532* lbound builtin function dcl 596 ref 646 649 649 length builtin function dcl 596 ref 633 729 939 939 2063 2067 2084 2147 2160 2166 2168 line based char packed unaligned dcl 526 ref 2052 2057 2062 2063 2067 2075 2075 2078 2084 2089 2089 2092 2094 2097 2097 line_char_limit constant fixed bin(17,0) initial dcl 392 ref 2073 line_index 003247 automatic fixed bin(21,0) dcl 533 set ref 2060* 2062 2063 2065* 2065 2067 2070* 2070 line_len 2 003242 automatic fixed bin(17,0) level 2 dcl 527 set ref 2013 2021 2051* 2052 2053* 2055 2057 2062 2063 2067 2075 2075 2078 2078 2084 2086* 2089 2089 2089 2089 2092 2094 2097 2097 2097 2097 2097 line_number 003245 automatic fixed bin(17,0) dcl 531 set ref 848* 893* 1106* 1120 1179* 2005 2014 2049* 2049 2075* 2080* 2089* 2092* 2094* 2097* line_ptr 003242 automatic pointer level 2 dcl 527 set ref 2050* 2052 2057 2062 2063 2067 2075 2075 2078 2084 2085* 2089 2089 2092 2094 2097 2097 line_ptr_len 003242 automatic structure level 1 dcl 527 set ref 2015 lines_too_long 10 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2204* 2219* lines_too_long 000474 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2204* link_sw 003263 automatic bit(1) dcl 538 set ref 825* 827* 2216* 2219* lino parameter fixed bin(17,0) dcl 2238 set ref 2232 2235 2263 2263* list 2001 based structure array level 2 unaligned dcl 458 set ref 940 1612 1747 list_ct 2000 based fixed bin(17,0) level 2 dcl 458 set ref 848* 940 1611* 1611 1612 1615 1616 1617* 1640* 1640 1641 1642 1643 1644* 1644 1648 1744* 1744 1747 1751 1752 1753* 1780 ln parameter fixed bin(17,0) dcl 1957 set ref 1956 2033* local 001500 automatic structure level 1 unaligned dcl 345 set ref 1079* 1091* 2225 long 4 based structure level 2 dcl 2-8 long_lines 250 001640 automatic structure level 2 dcl 357 set ref 2075* 2204* ltrim builtin function dcl 596 ref 758 1739 2128 map 001566 automatic structure level 1 dcl 352 max builtin function dcl 596 ref 2097 2097 2255 2309 maxuse 4 002604 automatic fixed bin(24,0) array level 3 dcl 468 set ref 1464* 1487 1487* min builtin function dcl 596 ref 2097 2097 minuse 3 002604 automatic fixed bin(17,0) array level 3 dcl 468 set ref 1463* 1470 missing_info 11 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 884* missing_info 001016 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 884* missing_name 000350 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1030* missing_name 12 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1030* missing_section 13 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1472* missing_section 000672 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1472* mod builtin function dcl 596 ref 2069 msg parameter varying char(80) dcl 2238 ref 2232 2235 2253 2266 2266 2268 2268 n based fixed bin(18,0) level 3 dcl 458 set ref 848* 931 943 1613* 1613 1614 1748* 1748 1749 n_cols 003246 automatic fixed bin(17,0) dcl 532 set ref 2056* 2066* 2066 2069* 2069 2069 2073 2097* name parameter char(24) packed unaligned dcl 1058 in procedure "PUSH" set ref 1057 1059* name based char(32) array level 2 in structure "div_names" packed packed unaligned dcl 464 in procedure "vis" set ref 946* 946 962 973 1003* 1006* 1018 name parameter char(24) packed unaligned dcl 1065 in procedure "POP" set ref 1064 1067* name 2001 based char(32) array level 3 in structure "temp" packed packed unaligned dcl 458 in procedure "vis" set ref 939 939 1615* 1641* 1642* 1644* 1751* name_sw 003264 automatic bit(1) dcl 538 set ref 629* 657* 659* 969 names_left_to_add 003125 automatic bit(1) dcl 484 set ref 1634* 1635 1638* 1641 names_relp 0(18) based bit(18) level 3 packed packed unaligned dcl 2-8 set ref 826 2365 2367 2368* need_2_blank_lines 001167 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1721* 1835* need_2_blank_lines 14 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1721* 1835* need_command 000573 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2178* need_command 15 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2178* need_ending_NL 001214 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 870* need_ending_NL 16 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 870* need_function 17 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2190* need_function 000546 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2190* need_usage 20 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2185* need_usage 000521 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2185* nest 000101 automatic fixed bin(24,0) initial dcl 1055 set ref 847* 858* 859 864 866* 867 875* 1055* 1059* 1061* 1061 1066* 1066 1067* new_segment_sw 003266 automatic bit(1) dcl 538 set ref 844* 2214 2217* 2219* 2223* nindex 0(18) based fixed bin(18,0) array level 2 in structure "star_links" packed packed unsigned unaligned dcl 1-76 in procedure "vis" ref 2373 nindex 0(18) based fixed bin(18,0) array level 2 in structure "star_dir_list_branch" packed packed unsigned unaligned dcl 1-59 in procedure "vis" ref 800 nnames 0(02) based fixed bin(16,0) level 3 in structure "status_branch" packed packed unsigned unaligned dcl 2-8 in procedure "vis" set ref 841 929 959 975 987 1020 1035 1552 1552 1552 1552 1552 1552 2367 nnames 0(02) based fixed bin(16,0) array level 2 in structure "star_links" packed packed unsigned unaligned dcl 1-76 in procedure "vis" ref 2373 no_entries 21 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1082* no_entries 001043 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1082* no_entry 001313 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 832* no_entry 22 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 832* no_hdr_name 001115 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1687* no_hdr_name 23 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1687* no_sections 001142 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1093* no_sections 24 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1093* no_syntax_name 000177 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1941* no_syntax_name 25 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1941* no_usage_name 000224 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1938* no_usage_name 26 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1938* non_printable 000447 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2205* non_printable 27 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2205* non_standard 003265 automatic bit(1) dcl 538 set ref 1517 1895* 2143* non_std_title 000125 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1893* non_std_title 30 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1893* nonblanks 176 001640 automatic structure level 2 dcl 357 set ref 2080* 2206* normal_head 003204 automatic varying char(40) dcl 499 set ref 2141* 2145 2147 2147 2148 2150* 2150 2150 2158* 2158 2158 2160 2168 2170* 2171 2173 2174 not_belong 000620 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1517* not_belong 31 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1517* nothing_done 001340 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 836* nothing_done 32 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 836* null builtin function dcl 596 ref 690 773 908 1090 2349 2351 2357 2370 2373 2375 null_segment 001365 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 861* null_segment 33 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 853* 861* number 54 001640 automatic fixed bin(17,0) array level 3 in structure "errors" dcl 357 in procedure "vis" set ref 685 number 2 parameter fixed bin(17,0) array level 2 in structure "P_map" dcl 2278 in procedure "ERR_LOG" set ref 2284 2287* number 252 001640 automatic fixed bin(17,0) array level 3 in structure "errors" dcl 357 in procedure "vis" set ref 688 number 126 001640 automatic fixed bin(17,0) array level 3 in structure "errors" dcl 357 in procedure "vis" set ref 686 number 2 parameter fixed bin(17,0) array level 2 in structure "P_map" dcl 2297 in procedure "ERR_PRINT" set ref 2332* 2334* number 200 001640 automatic fixed bin(17,0) array level 3 in structure "errors" dcl 357 in procedure "vis" set ref 687 number 2 001640 automatic fixed bin(17,0) array level 3 in structure "errors" dcl 357 in procedure "vis" set ref 684 old_len 000140 automatic fixed bin(17,0) dcl 2138 set ref 2166* 2168 order_name 34 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1044* order_name 000422 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1044* order_sw 000114 automatic bit(1) dcl 928 set ref 1015* 1029* 1038* 1044 out_of_sequence 35 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1483* out_of_sequence 000645 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1483* par based char packed unaligned dcl 512 set ref 1563 1568 1575 1585 1586 1589 1591 1593 1596 1597 1598 1721 1721 1721 1735 1739 1766 1788 1788 1790 1790 1818* 1835 1858 1858 1937 1946 2028 2028 2028 2033 2033 par_1st_line_len 003234 automatic fixed bin(17,0) dcl 518 set ref 1788 1788 1790 1790 1858 1981* 2013* par_len 2 003230 automatic fixed bin(24,0) level 2 dcl 513 set ref 1563 1568 1575 1585 1586 1587 1589 1591 1593 1596 1597 1598 1659* 1659 1721 1721 1721 1731* 1731 1735 1739 1766 1776* 1776 1788 1788 1790 1790 1818 1818 1835 1858 1858 1862 1937 1946 2021* 2021 2028 2028 2028 2033 2033 par_line_count 003236 automatic fixed bin(24,0) dcl 520 set ref 872* 1651* 1651 1653 1770* 1770 1790 1822 1824 1863 2016* 2022* 2022 2033* 2075 par_line_limit constant fixed bin(17,0) initial dcl 392 ref 1966 1968 1973 1975 1999 2001 par_line_number 003235 automatic fixed bin(17,0) dcl 519 set ref 1106 1657* 1657 1772* 1772 1788* 1820 1825 2014* 2033* par_offset 003233 automatic fixed bin(24,0) dcl 516 set ref 1105 1985* par_ptr 003230 automatic pointer level 2 dcl 513 set ref 1563 1568 1575 1585 1586 1589 1591 1593 1596 1597 1598 1658* 1658 1718 1720 1721 1721 1730* 1730 1735 1739 1766 1775* 1775 1788 1788 1790 1790 1818 1832 1834 1858 1858 1937 1946 2028 2028 2028 2033 2033 par_ptr_len 003230 automatic structure level 1 dcl 513 set ref 1821 2015* par_unit_line_count 003240 automatic fixed bin(24,0) dcl 522 set ref 873* 1652* 1652 1771* 1771 1824* 1966 1968* 1973 1975* 1999 2001* 2004* 2009* 2009 2023* 2023 par_unit_line_number 003237 automatic fixed bin(17,0) dcl 521 set ref 1773* 1773 1825* 1968* 1975* 2001* 2005* par_unit_sw parameter bit(1) dcl 1960 ref 1956 1966 1973 1995 paragraph_size 36 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1968* 1975* 2001* 2219* paragraph_size 000152 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1968* 1975* 2001* pass 1 002604 automatic fixed bin(17,0) level 2 dcl 468 set ref 1492* 1505* 1512 1514* 1531* path_count 002261 automatic fixed bin(17,0) dcl 437 set ref 630* 666* 666 669 676 pathname_ 000070 constant entry external dcl 591 ref 815 pathname_len 3 based fixed bin(18,0) array level 2 packed packed unsigned unaligned dcl 1-76 ref 2373 pathname_length 3 based fixed bin(17,0) level 2 packed packed unaligned dcl 2-38 ref 2362 2362 pathname_relp 3(18) based bit(18) level 2 packed packed unaligned dcl 2-38 set ref 2359 2362 2363* pointer builtin function dcl 596 ref 826 2362 2367 program_interrupt 003332 stack reference condition dcl 602 ref 704 release_temp_segment_ 000054 constant entry external dcl 584 ref 2351 result 000124 automatic entry variable dcl 1115 set ref 1123* 1125* 1127* 1134* 1137* 1143* 1149* 1151* 1156* 1158* 1163* 1165* 1167* 1172* 1174* 1176* 1183 return_arg based varying char dcl 438 set ref 758* return_len 002262 automatic fixed bin(17,0) dcl 439 set ref 608* 758 return_ptr 002264 automatic pointer dcl 440 set ref 608* 758 reverse builtin function dcl 596 ref 858 rtrim builtin function dcl 596 ref 1740 saved_dn 002502 automatic char(168) packed unaligned dcl 449 set ref 798* 801 scanning 003267 automatic bit(1) dcl 538 set ref 1059* 1067* 1117* 1180* 1608 1715 1717 1785 1829 1849 1962 2033 2039 2097 2250 search builtin function dcl 596 ref 1586 1600 1628 1636 1858 2114 2119 section_head 003155 automatic varying char(40) dcl 496 set ref 1582* 1816 1816 1818* 1827 1829* 1893 1897 2141 2171 2174* section_head_len 003217 automatic fixed bin(17,0) dcl 500 set ref 1819 2123* 2127* section_id 003170 automatic fixed bin(17,0) dcl 497 set ref 1131 1134 1141 1146 1149 1153 1156 1156 1160 1163 1165 1169 1172 1458* 1466 1481 1491* 1496 1496 1496 1499* 1504* 1807* 1846 1846 1870 2142* 2165* 2167 2176 2179* 2183 2183 2186* 2188 2191* section_index 003223 automatic fixed bin(17,0) dcl 504 set ref 2160* 2160 2160* 2163 2165 2166 section_len 2 003152 automatic fixed bin(17,0) level 2 dcl 492 set ref 1862* 1862 section_line_count 003221 automatic fixed bin(17,0) dcl 502 set ref 1822* 1863* 1863 section_line_number 003220 automatic fixed bin(17,0) dcl 501 set ref 1820* 1829* section_ptr_len 003152 automatic structure level 1 dcl 492 set ref 1821* section_skip 003222 automatic fixed bin(17,0) dcl 503 set ref 1819* section_temp 000141 automatic varying char(40) dcl 2139 set ref 2167* 2168 2168* 2168 2170 seg 17 002167 automatic fixed bin(17,0) array level 2 dcl 403 set ref 902 903* 2257* 2311* seg_count 002165 automatic fixed bin(17,0) dcl 401 set ref 694* 746* 843* 843 segs 5 002167 automatic fixed bin(17,0) array level 2 dcl 403 set ref 749* 749 902* 902 setcharno builtin function dcl 596 ref 2050 2085 sev 000100 automatic fixed bin(17,0) dcl 1051 in procedure "VALIDATE" set ref 900* 902 902 902 903* 1096* 1097 1097 1097 1098* sev 000145 automatic fixed bin(17,0) dcl 2302 in procedure "ERR_PRINT" set ref 2308* 2309 2310 2310 2311 2312 2315 2319 sev 000101 automatic fixed bin(17,0) dcl 2247 in procedure "ERR_MSG" set ref 2254* 2255 2256 2256 2257 2258 2259 severity_count 002163 automatic fixed bin(17,0) dcl 400 set ref 2319* severity_limit 002164 automatic fixed bin(17,0) dcl 400 set ref 630* 644* 644 646 646 649* 2212 2259 2315 short based structure level 2 dcl 2-8 size 003340 stack reference condition dcl 602 ref 643 645 sort based structure level 2 dcl 458 set ref 939 939 sort_items_$char 000072 constant entry external dcl 592 ref 939 special_index 003250 automatic fixed bin(21,0) dcl 533 set ref 2060* 2061 2062* 2063 2063* 2065 2066 src_arg 002266 automatic char(168) packed unaligned dcl 441 set ref 731* 732* 735* 777* src_bc 002344 automatic fixed bin(24,0) dcl 446 set ref 829* 850 src_dname 002430 automatic char(168) packed unaligned dcl 448 set ref 732* 788* 793* 793 798 801* 815* 820* 829* src_ename 002554 automatic char(32) packed unaligned dcl 450 set ref 703* 782* 800* 815* 820* 829* src_index 002343 automatic fixed bin(24,0) dcl 445 set ref 849* 894* 895 1059* 1067* 1103 1105* 1119 1178* 1856 1970 1983 1984 1985 1989 2017 2050 2051 2055* 2055 2085 src_len 002342 automatic fixed bin(24,0) dcl 444 set ref 850* 851 858 861* 867* 867 870 870 879 879 884 884 888 895 1059* 1067* 1103 1856 1970 1983 1984 1989 2017 2051 src_path 002345 automatic char(201) packed unaligned dcl 447 set ref 815* 827* 835* 984* 995* 1006* 2216* 2219* src_ptr 002340 automatic pointer dcl 443 set ref 690* 829* 858 870 879 879 884 884 888 908 908* 980* 992* 1003* 2050 2085 2349 2349* src_seg based char packed unaligned dcl 442 ref 858 870 879 879 884 884 888 star_ALL_ENTRIES constant fixed bin(2,0) initial dcl 1-111 ref 787 star_LINK constant fixed bin(2,0) initial unsigned dcl 1-119 ref 2373 star_LINKS_ONLY_WITH_LINK_PATHS constant fixed bin(3,0) initial dcl 1-112 ref 2373 star_branch_count 003346 automatic fixed bin(17,0) dcl 1-13 set ref 788* 796 799 2373 2373 2373 2373 2375 star_dir_list_branch based structure array level 1 dcl 1-59 ref 2375 star_en 002564 automatic char(32) packed unaligned dcl 451 set ref 703 732* 774* 782 788* 793* star_index 002224 automatic fixed bin(17,0) dcl 419 set ref 799* 800* star_link_count 003352 automatic fixed bin(17,0) dcl 1-17 set ref 788* 799 2373 2373 2373 2373 2375 star_links based structure array level 1 dcl 1-76 star_list_branch_ptr 003350 automatic pointer dcl 1-16 set ref 690* 773* 788* 800 2373 2373 2373 2373 2375 2375 star_list_names based char(32) array packed unaligned dcl 1-92 ref 800 2373 star_list_names_ptr 003354 automatic pointer dcl 1-20 set ref 690* 773* 788* 800 2373 2373 star_select_sw 003356 automatic fixed bin(3,0) dcl 1-21 set ref 787* 788* 2373 status_area_ptr 003360 automatic pointer dcl 2-47 set ref 816* 820* 826 2362 2367 status_br 002225 automatic structure level 1 dcl 424 set ref 817 status_branch based structure level 1 dcl 2-8 set ref 818* status_entry_names based char(32) array dcl 2-47 set ref 826 2367 status_link based structure level 1 dcl 2-38 status_pathname based char dcl 2-47 ref 2362 status_ptr 003362 automatic pointer dcl 2-47 set ref 690* 773* 817* 818 819 820* 822 822 825 826 841 929 959 975 987 1020 1035 1552 1552 1552 1552 1552 1552 2357 2359 2359 2362 2362 2362 2363 2365 2367 2367 2368 2370* std_section 000234 constant varying char(41) initial array dcl 258 set ref 1458* 1472 1472 1499* 2160 2160 2160 2165 2166 2167 string builtin function dcl 596 ref 1552 1552 1552 1552 1552 1552 subroutine_info 003255 automatic bit(1) dcl 538 set ref 1118* 1138* 1144* 1371* 1938 1946 2181 substr builtin function dcl 596 ref 633 729 870 884 884 1472 1472 1563 1568 1575 1586 1589 1591 1593 1596 1597 1598 1604 1605 1606 1630 1631 1637 1641 1645 1692 1721 1721 1721 1739 1766 1788 1788 1790 1790 1835 1858 2028 2028 2028 2033 2033 2062 2075 2075 2078 2089 2089 2097 2097 2114 2116 2119 2121 2128 2147 2148 2150 2150 2158 2158 2160 2160 2165 2167 2168 2253 2266 2266 2268 2268 2307 2321 2321 t_ct 000102 automatic fixed bin(17,0) dcl 923 set ref 941* 945* 945 946 954 t_ptr 000100 automatic pointer dcl 922 in procedure "check_addnames" set ref 944* 946 947 t_ptr 000100 automatic pointer dcl 1800 in procedure "GET_SECTION" set ref 1834* 1835 t_ptr 000112 automatic pointer dcl 1711 in procedure "PROCESS_DIVIDER" set ref 1720* 1721 temp based structure level 1 unaligned dcl 458 temp_ptr 002574 automatic pointer dcl 452 set ref 690* 697* 848 848 931 933 939 939 939 939 940 940 943 944 1611 1611 1612 1612 1613 1613 1614 1614 1615 1615 1616 1616 1617 1640 1640 1641 1641 1642 1642 1643 1643 1644 1644 1644 1648 1648 1744 1744 1747 1747 1748 1748 1749 1749 1751 1751 1752 1752 1753 1780 1780 2351 2351* temp_sw 003271 automatic bit(1) packed unaligned dcl 556 set ref 748* 749* 749 terminate_file_ 000074 constant entry external dcl 593 ref 908 2349 this_form_preferred 37 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 2173* this_form_preferred 000100 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 2173* title 5 002604 automatic fixed bin(17,0) array level 3 dcl 468 set ref 1462* 1472 1472 too_many 000717 automatic varying char(80) initial dcl 106 in procedure "vis" set ref 106* 1487* too_many 40 001500 automatic fixed bin(18,0) level 2 in structure "local" dcl 345 in procedure "vis" set ref 1487* total 002167 automatic fixed bin(17,0) array level 2 dcl 403 set ref 646 646 649 649 649 649 747 748 749* 2256* 2256 2310* 2310 total_sw 003270 automatic bit(1) dcl 538 set ref 629* 655* 675* 706 743 827 906 1785 1829 2212 2259 2315 tr_sw 000011 internal static bit(1) initial packed unaligned dcl 2384 set ref 1078 1108 1200 1217 1227 1243 1252 1270 1279 1295 1304 1320 1329 1347 1356 1365 1370 1384 1393 1406 1422 1428 1458 1499 1545 1694 1803 1910 1936 1949 1962 2039 2385* 2386* translate builtin function dcl 596 ref 2158 2158 two_paragraph_syntax_sw 002576 automatic bit(1) dcl 453 set ref 1848* 1851 1946* type based fixed bin(2,0) array level 2 in structure "star_links" packed packed unsigned unaligned dcl 1-76 in procedure "vis" ref 2373 type based fixed bin(2,0) level 3 in structure "status_branch" packed packed unsigned unaligned dcl 2-8 in procedure "vis" set ref 819* type based fixed bin(2,0) level 2 in structure "status_link" packed packed unsigned unaligned dcl 2-38 in procedure "vis" ref 825 2359 unspec builtin function dcl 596 set ref 693* 696* 818* 874* 957* 1079* 1091* 1529* used 2 002604 automatic fixed bin(17,0) array level 3 dcl 468 set ref 1470 1486* 1486 1487 used_sw 000115 automatic bit(1) array dcl 929 set ref 957* 1023* 1036 vector 1 based pointer array level 3 packed packed unaligned dcl 458 set ref 933 944 1614* 1749* verify builtin function dcl 596 ref 858 1585 1596 1604 1630 1637 2078 2094 zero_segment 001412 automatic varying char(80) initial dcl 106 set ref 106* 853* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Segment internal static fixed bin(17,0) initial dcl 2-56 TERM_FILE_BC internal static bit(2) initial packed unaligned dcl 3-12 TERM_FILE_DELETE internal static bit(5) initial packed unaligned dcl 3-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial packed unaligned dcl 3-16 TERM_FILE_TRUNC internal static bit(1) initial packed unaligned dcl 3-11 TERM_FILE_TRUNC_BC internal static bit(2) initial packed unaligned dcl 3-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial packed unaligned dcl 3-15 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 1-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 1-110 star_DIRECTORY internal static fixed bin(2,0) initial unsigned dcl 1-121 star_LINKS_ONLY internal static fixed bin(2,0) initial dcl 1-109 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 1-120 star_entries based structure array level 1 dcl 1-27 star_entry_count automatic fixed bin(17,0) dcl 1-14 star_entry_ptr automatic pointer dcl 1-15 star_link_pathname based char packed unaligned dcl 1-102 star_linkx automatic fixed bin(17,0) dcl 1-18 star_list_branch based structure array level 1 dcl 1-41 star_names based char(32) array packed unaligned dcl 1-37 star_names_ptr automatic pointer dcl 1-19 terminate_file_switches based structure level 1 packed packed unaligned dcl 3-4 NAMES DECLARED BY EXPLICIT CONTEXT. ACT_FUN_INFO 011206 constant entry internal dcl 1224 ref 1158 ACT_REQ_INFO 012705 constant entry internal dcl 1302 ref 1174 AF_TOO_MANY 004225 constant label dcl 678 ref 796 BAD_CONVERSION 005232 constant label dcl 763 ref 643 BAD_PATH 004770 constant label dcl 735 BLANK 022004 constant label dcl 2081 ref 2057 CHECK_ARGS_FORMAT 020722 constant entry internal dcl 1913 ref 1872 CHECK_CTL_ARGS_FORMAT 020730 constant entry internal dcl 1913 ref 1876 CHECK_INFO_TYPE 010315 constant entry internal dcl 1111 ref 1081 CHECK_LIST_OF 020726 constant entry internal dcl 1913 ref 1886 CHECK_USAGE 020724 constant entry internal dcl 1913 ref 1889 CLEAN_UP 024166 constant entry internal dcl 2343 ref 692 760 CLEAN_UP$some 024257 constant entry internal dcl 2354 ref 805 COMMAND_INFO 010602 constant entry internal dcl 1196 ref 1151 COMM_AF_INFO 011612 constant entry internal dcl 1250 ref 1149 1156 1165 ENTRY___INFO 014150 constant entry internal dcl 1368 ref 1082 1085 1085 1125 ERR_LOG 023625 constant entry internal dcl 2274 ref 2075 2080 2089 2092 2094 ERR_MSG 023353 constant entry internal dcl 2232 ref 861 866 1030 1039 1472 1487 1670 1683 1721 1835 1893 1938 1941 1968 1975 2001 2173 ERR_MSG3 023372 constant entry internal dcl 2235 ref 832 836 853 870 884 1044 1082 1085 1093 1483 1517 1672 1687 2178 2185 2190 ERR_PRINT 023646 constant entry internal dcl 2293 ref 2204 2205 2206 2207 2208 GENERAL_INFO 014750 constant entry internal dcl 1420 ref 1123 GET_HEADER 015617 constant entry internal dcl 1543 ref 1122 1202 1229 1254 1281 1306 1331 1358 1373 1395 1424 GET_INFO 010042 constant entry internal dcl 1076 ref 896 GET_LINE 021614 constant entry internal dcl 2046 ref 1986 2018 GET_PARAGRAPH 021141 constant entry internal dcl 1956 ref 1546 1805 1857 GET_SECTION 020172 constant entry internal dcl 1798 ref 1130 1133 1148 1155 1162 1171 1426 1489 1501 1534 HEAD 022210 constant entry internal dcl 2108 ref 1818 L 000052 constant label array(0:9) dcl 1309 in procedure "ACT_REQ_INFO" ref 1309 1311 1312 1313 1314 1315 1316 1317 L 000064 constant label array(0:11) dcl 1334 in procedure "REQU_AR_INFO" ref 1334 1336 1337 1338 1339 1340 1341 1342 1343 1344 L 000040 constant label array(0:9) dcl 1284 in procedure "REQUEST_INFO" ref 1284 1286 1287 1288 1289 1290 1291 1292 L 000000 constant label array(0:9) dcl 1205 in procedure "COMMAND_INFO" ref 1205 1207 1208 1209 1210 1211 1212 1213 L 000024 constant label array(0:11) dcl 1257 in procedure "COMM_AF_INFO" ref 1257 1259 1260 1261 1262 1263 1264 1265 1266 1267 L 000104 constant label array(0:6) dcl 1376 in procedure "MULTSUB_INFO" ref 1376 1378 1379 1380 1381 L 000012 constant label array(0:9) dcl 1232 in procedure "ACT_FUN_INFO" ref 1232 1234 1235 1236 1237 1238 1239 1240 L 000113 constant label array(0:6) dcl 1398 in procedure "SINGSUB_INFO" ref 1398 1400 1401 1402 1403 MULTSUB_INFO 014000 constant entry internal dcl 1354 ref 1082 1085 1127 1134 NEXT_COLON 017510 constant label dcl 1735 ref 1777 NORMALIZE_SECTION_HEAD 022347 constant entry internal dcl 2136 ref 1844 NULL 022304 constant label dcl 2123 ref 2114 P 000100 constant label array(0:3) dcl 1361 ref 1361 1363 PARSE_SYNTAX_SECTION 020732 constant entry internal dcl 1931 ref 1849 PI 005035 constant label dcl 743 ref 704 POP 007764 constant entry internal dcl 1064 ref 1108 1217 1243 1270 1295 1320 1347 1365 1384 1406 1428 1694 1910 1949 2039 PRINT_ERR_SUMMARY 023033 constant entry internal dcl 2202 ref 1095 PROCESS_DIVIDER 017354 constant entry internal dcl 1706 ref 1566 1572 1578 PROCESS_STARNAME 005364 constant entry internal dcl 771 ref 738 PUSH 007705 constant entry internal dcl 1057 ref 1078 1200 1227 1252 1279 1304 1329 1356 1370 1393 1422 1545 1803 1936 1962 REQUEST_INFO 012301 constant entry internal dcl 1277 ref 1167 REQU_AR_INFO 013311 constant entry internal dcl 1327 ref 1163 1172 RETURN 005225 constant label dcl 760 ref 778 SEC 015033 constant entry internal dcl 1437 ref 1205 1207 1208 1232 1234 1235 1257 1259 1260 1261 1284 1286 1287 1309 1311 1312 1334 1336 1337 1338 1361 1363 1376 1378 1379 1398 1400 1401 SEC$init 015560 constant entry internal dcl 1525 ref 1203 1230 1255 1282 1307 1332 1359 1374 1396 SECx 015045 constant entry internal dcl 1441 ref 1209 1210 1211 1212 1213 1236 1237 1238 1239 1240 1262 1263 1264 1265 1266 1267 1288 1289 1290 1291 1292 1313 1314 1315 1316 1317 1339 1340 1341 1342 1343 1344 1380 1381 1402 1403 SHOW_HEADER 020044 constant entry internal dcl 1783 ref 1559 1716 SINGSUB_INFO 014444 constant entry internal dcl 1391 ref 1137 1143 UNKNOWN_INFO 014732 constant entry internal dcl 1412 ref 1176 VALIDATE 005652 constant entry internal dcl 813 ref 689 783 802 af_usage 003620 constant label dcl 622 ref 669 already_there 007211 constant label dcl 987 ref 976 check_addnames 006670 constant entry internal dcl 920 ref 898 common 014764 constant label dcl 1422 in procedure "UNKNOWN_INFO" ref 1414 common 015057 constant label dcl 1458 in procedure "SEC" ref 1439 1443 common 023401 constant label dcl 2250 in procedure "ERR_MSG" ref 2234 dbf 005301 constant entry external dcl 2382 dbn 005266 constant entry external dcl 2381 does_not_match 007066 constant label dcl 967 ref 962 epf 005353 constant entry external dcl 2390 epn 005340 constant entry external dcl 2389 exit 020670 constant label dcl 1897 in procedure "GET_SECTION" ref 1811 1851 1868 1875 1883 1884 1888 1891 exit 021502 constant label dcl 2033 in procedure "GET_PARAGRAPH" ref 1979 1992 next 015451 constant label dcl 1501 ref 1519 null_file 006600 constant label dcl 900 ref 838 854 862 rtn 000122 constant label array(0:20) dcl 1872 ref 1870 trf 005326 constant entry external dcl 2386 trn 005313 constant entry external dcl 2385 usage 003562 constant label dcl 613 ref 672 validate_info_seg 003531 constant entry external dcl 18 vis 003521 constant entry external dcl 18 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 27320 27426 26441 27330 Length 30142 26441 106 477 656 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME vis 2070 external procedure is an external procedure. on unit on line 643 64 on unit on unit on line 692 64 on unit on unit on line 704 64 on unit PROCESS_STARNAME internal procedure shares stack frame of external procedure vis. VALIDATE 356 internal procedure is assigned to an entry variable. check_addnames 228 internal procedure uses auto adjustable storage. PUSH 110 internal procedure is called by several nonquick procedures. POP 110 internal procedure is called by several nonquick procedures. GET_INFO internal procedure shares stack frame of internal procedure VALIDATE. CHECK_INFO_TYPE internal procedure shares stack frame of internal procedure VALIDATE. COMMAND_INFO 98 internal procedure is assigned to an entry variable. ACT_FUN_INFO 98 internal procedure is assigned to an entry variable. COMM_AF_INFO 98 internal procedure is assigned to an entry variable. REQUEST_INFO 98 internal procedure is assigned to an entry variable. ACT_REQ_INFO 98 internal procedure is assigned to an entry variable. REQU_AR_INFO 98 internal procedure is assigned to an entry variable. MULTSUB_INFO 98 internal procedure is assigned to an entry variable. SINGSUB_INFO 98 internal procedure is assigned to an entry variable. UNKNOWN_INFO 70 internal procedure is assigned to an entry variable. SEC 111 internal procedure is called by several nonquick procedures. GET_HEADER 314 internal procedure is called by several nonquick procedures. PROCESS_DIVIDER internal procedure shares stack frame of internal procedure GET_HEADER. SHOW_HEADER internal procedure shares stack frame of internal procedure GET_HEADER. GET_SECTION 431 internal procedure is called by several nonquick procedures. CHECK_ARGS_FORMAT internal procedure shares stack frame of internal procedure GET_SECTION. PARSE_SYNTAX_SECTION internal procedure shares stack frame of internal procedure GET_SECTION. GET_PARAGRAPH 186 internal procedure is called by several nonquick procedures. GET_LINE internal procedure shares stack frame of internal procedure GET_PARAGRAPH. HEAD internal procedure shares stack frame of internal procedure GET_SECTION. NORMALIZE_SECTION_HEAD internal procedure shares stack frame of internal procedure GET_SECTION. PRINT_ERR_SUMMARY internal procedure shares stack frame of internal procedure VALIDATE. ERR_MSG 108 internal procedure is called during a stack extension. ERR_LOG internal procedure shares stack frame of internal procedure GET_PARAGRAPH. ERR_PRINT internal procedure shares stack frame of internal procedure VALIDATE. CLEAN_UP 87 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 db_sw vis 000011 tr_sw vis 000012 ep_sw vis STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ERR_MSG 000100 argct ERR_MSG 000101 sev ERR_MSG 000102 ch1 ERR_MSG GET_HEADER 000100 header_date_sw GET_HEADER 000110 id_len PROCESS_DIVIDER 000112 t_ptr PROCESS_DIVIDER 000114 do_names PROCESS_DIVIDER 000115 ch1 PROCESS_DIVIDER GET_SECTION 000100 t_ptr GET_SECTION 000102 done GET_SECTION 000120 i PARSE_SYNTAX_SECTION 000130 i HEAD 000131 j HEAD 000140 old_len NORMALIZE_SECTION_HEAD 000141 section_temp NORMALIZE_SECTION_HEAD 000154 bsp_sw NORMALIZE_SECTION_HEAD SEC 000100 extra_sw SEC 000101 i SEC VALIDATE 000100 sev VALIDATE 000101 nest VALIDATE 000110 hold_type GET_INFO 000122 hold_src_index CHECK_INFO_TYPE 000123 hold_line_number CHECK_INFO_TYPE 000124 result CHECK_INFO_TYPE 000144 i ERR_PRINT 000145 sev ERR_PRINT 000146 ch1 ERR_PRINT check_addnames 000100 t_ptr check_addnames 000102 t_ct check_addnames 000103 a_name check_addnames 000113 done check_addnames 000114 order_sw check_addnames 000115 used_sw check_addnames vis 000100 this_form_preferred vis 000125 non_std_title vis 000152 paragraph_size vis 000177 no_syntax_name vis 000224 no_usage_name vis 000251 end_white_space vis 000276 blank_white_space vis 000323 backspace vis 000350 missing_name vis 000375 extra_name vis 000422 order_name vis 000447 non_printable vis 000474 lines_too_long vis 000521 need_usage vis 000546 need_function vis 000573 need_command vis 000620 not_belong vis 000645 out_of_sequence vis 000672 missing_section vis 000717 too_many vis 000744 bad_date vis 000771 entry_too_late vis 001016 missing_info vis 001043 no_entries vis 001070 bad_entry vis 001115 no_hdr_name vis 001142 no_sections vis 001167 need_2_blank_lines vis 001214 need_ending_NL vis 001241 ends_in_NUL vis 001266 big_header vis 001313 no_entry vis 001340 nothing_done vis 001365 null_segment vis 001412 zero_segment vis 001437 global vis 001500 local vis 001541 first_section_head vis 001566 map vis 001640 errors vis 002162 highest_severity vis 002163 severity_count vis 002164 severity_limit vis 002165 seg_count vis 002166 info_count vis 002167 error_count vis 002220 err_count vis 002222 area_ptr vis 002224 star_index vis 002225 status_br vis 002237 af_sw vis 002240 arg_count vis 002241 arg_index vis 002242 arg_len vis 002244 arg_ptr vis 002246 bf_format vis 002250 current_names_ptr vis 002252 format vis 002260 internal_sw vis 002261 path_count vis 002262 return_len vis 002264 return_ptr vis 002266 src_arg vis 002340 src_ptr vis 002342 src_len vis 002343 src_index vis 002344 src_bc vis 002345 src_path vis 002430 src_dname vis 002502 saved_dn vis 002554 src_ename vis 002564 star_en vis 002574 temp_ptr vis 002576 two_paragraph_syntax_sw vis 002577 div_names_ct vis 002600 div_names_ptr vis 002602 div_names_x1 vis 002603 div_names_x2 vis 002604 current vis 002666 header_date vis 002676 header_clock vis 002700 header vis 002723 header_short_name vis 003024 header_short_name_temp vis 003125 names_left_to_add vis 003126 info_name vis 003137 entry_date vis 003150 entry_clock vis 003152 section_ptr_len vis 003155 section_head vis 003170 section_id vis 003171 last_section_head vis 003204 normal_head vis 003217 section_head_len vis 003220 section_line_number vis 003221 section_line_count vis 003222 section_skip vis 003223 section_index vis 003224 last_seq vis 003225 blank_char_count vis 003226 blank_line_count vis 003230 par_ptr_len vis 003233 par_offset vis 003234 par_1st_line_len vis 003235 par_line_number vis 003236 par_line_count vis 003237 par_unit_line_number vis 003240 par_unit_line_count vis 003242 line_ptr_len vis 003245 line_number vis 003246 n_cols vis 003247 line_index vis 003250 special_index vis 003251 begin_info_sw vis 003252 blank_line_sw vis 003253 colon_info_seen_sw vis 003254 colon_entry_seen_sw vis 003255 subroutine_info vis 003256 end_info_sw vis 003257 entry_info vis 003260 general_info vis 003261 got_par_sw vis 003262 header_shown_sw vis 003263 link_sw vis 003264 name_sw vis 003265 non_standard vis 003266 new_segment_sw vis 003267 scanning vis 003270 total_sw vis 003271 temp_sw vis 003272 dtem_string vis 003302 i vis 003303 j vis 003304 code vis 003306 complain vis 003312 get_an_info vis 003346 star_branch_count vis 003350 star_list_branch_ptr vis 003352 star_link_count vis 003354 star_list_names_ptr vis 003356 star_select_sw vis 003360 status_area_ptr vis 003362 status_ptr vis THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_g_a r_e_as r_ne_as r_ge_a alloc_char_temp call_ent_var_desc call_ent_var call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 alloc_auto_adj mdfx1 signal_op enable_op shorten_stack ext_entry int_entry int_entry_desc set_chars_eis index_chars_eis any_to_any_truncate_op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. active_fnc_err_ active_fnc_err_$suppress_name check_star_name_$entry com_err_ com_err_$suppress_name convert_date_to_binary_$relative cu_$af_return_arg cu_$arg_ptr cv_fstime_ date_time_$format expand_pathname_$add_suffix get_system_free_area_ get_temp_segment_ hcs_$chname_seg hcs_$star_dir_list_ hcs_$status_ initiate_file_ ioa_ ioa_$nnl pathname_ release_temp_segment_ sort_items_$char terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_conversion error_table_$badopt error_table_$badstar error_table_$noentry error_table_$not_act_fnc error_table_$segnamedup LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 106 003240 18 003520 608 003537 609 003554 611 003560 613 003562 614 003607 616 003610 617 003611 618 003615 620 003616 622 003620 623 003645 625 003646 626 003650 629 003654 630 003657 631 003662 632 003671 633 003707 636 003725 637 003726 639 003731 640 003764 642 003765 643 004003 644 004027 645 004037 646 004041 649 004046 652 004111 654 004112 655 004113 657 004126 659 004141 662 004153 663 004205 664 004206 666 004207 667 004210 669 004212 672 004216 673 004217 675 004221 676 004223 678 004225 680 004252 684 004253 685 004255 686 004256 687 004257 688 004260 689 004261 690 004264 692 004272 693 004314 694 004317 695 004321 696 004322 697 004325 698 004346 700 004350 701 004373 703 004374 704 004377 706 004421 708 004425 709 004442 710 004456 711 004472 712 004506 713 004522 714 004536 715 004552 716 004566 717 004602 718 004616 719 004632 720 004646 721 004662 727 004676 728 004705 729 004723 731 004730 732 004734 733 004766 735 004770 736 005016 738 005017 739 005020 740 005021 742 005033 743 005035 746 005041 747 005064 748 005071 749 005074 754 005156 755 005161 758 005172 760 005225 761 005231 763 005232 765 005264 2381 005265 2381 005274 2381 005277 2382 005300 2382 005307 2382 005311 2385 005312 2385 005321 2385 005324 2386 005325 2386 005334 2386 005336 2389 005337 2389 005346 2389 005351 2390 005352 2390 005361 2390 005363 771 005364 773 005365 774 005371 775 005406 777 005412 778 005440 780 005441 782 005443 783 005446 784 005452 786 005453 787 005461 788 005463 791 005531 793 005533 794 005600 796 005601 798 005606 799 005611 800 005621 801 005633 802 005636 803 005642 805 005644 807 005650 813 005651 1055 005657 815 005661 816 005705 817 005714 818 005720 819 005723 820 005727 822 005765 824 006044 825 006047 826 006053 827 006061 829 006110 830 006150 832 006153 835 006172 836 006220 838 006234 841 006235 843 006271 844 006273 845 006275 847 006302 848 006304 849 006310 850 006311 851 006314 853 006315 854 006330 858 006331 859 006343 861 006345 862 006402 864 006403 866 006405 867 006442 870 006445 872 006466 873 006471 874 006472 875 006475 877 006477 878 006500 879 006501 883 006517 884 006521 887 006545 888 006546 891 006555 893 006557 894 006561 895 006563 896 006570 897 006571 898 006572 900 006600 902 006605 903 006611 904 006612 906 006614 908 006632 910 006666 920 006667 929 006675 931 006705 933 006710 934 006713 935 006727 936 006731 939 006732 940 006746 941 006755 942 006756 943 006761 944 006767 945 006771 946 006772 947 007005 949 007007 950 007010 951 007012 952 007013 953 007014 954 007015 957 007017 959 007027 961 007036 962 007047 964 007063 965 007065 969 007066 973 007072 975 007076 976 007111 978 007120 980 007122 981 007147 984 007156 985 007210 987 007211 990 007225 992 007234 993 007264 995 007270 997 007330 1000 007331 1002 007333 1003 007345 1004 007377 1006 007403 1008 007443 1010 007444 1011 007446 1015 007447 1017 007451 1018 007463 1019 007471 1020 007472 1021 007507 1023 007516 1024 007522 1026 007523 1027 007525 1029 007527 1030 007530 1033 007567 1035 007573 1036 007607 1038 007613 1039 007614 1042 007661 1044 007665 1046 007703 1057 007704 1059 007712 1061 007760 1062 007762 1064 007763 1066 007771 1067 007774 1069 010041 1076 010042 1078 010043 1079 010057 1080 010063 1081 010067 1082 010075 1085 010140 1089 010214 1090 010216 1091 010220 1092 010223 1093 010227 1095 010250 1096 010251 1097 010257 1098 010263 1099 010264 1100 010266 1103 010270 1105 010273 1106 010275 1108 010300 1110 010314 1111 010315 1117 010317 1118 010322 1119 010323 1120 010325 1121 010327 1122 010330 1123 010334 1125 010343 1127 010351 1130 010357 1131 010363 1133 010367 1134 010373 1137 010403 1138 010406 1140 010410 1141 010411 1143 010413 1144 010416 1145 010420 1146 010421 1148 010423 1149 010427 1151 010437 1152 010442 1153 010443 1155 010445 1156 010451 1158 010463 1159 010466 1160 010467 1162 010471 1163 010475 1165 010505 1167 010513 1168 010516 1169 010517 1171 010521 1172 010525 1174 010535 1175 010540 1176 010541 1178 010544 1179 010546 1180 010550 1181 010551 1182 010552 1183 010572 1196 010601 1199 010607 1199 010613 1200 010616 1202 010632 1203 010637 1205 010650 1207 010700 1208 010732 1209 010764 1210 011016 1211 011050 1212 011102 1213 011134 1214 011166 1217 011167 1219 011204 1224 011205 1226 011213 1226 011217 1227 011222 1229 011236 1230 011243 1232 011254 1234 011304 1235 011336 1236 011370 1237 011422 1238 011454 1239 011506 1240 011540 1241 011572 1243 011573 1245 011610 1250 011611 1251 011617 1251 011623 1252 011626 1254 011642 1255 011647 1257 011660 1259 011710 1260 011741 1261 011773 1262 012025 1263 012057 1264 012111 1265 012143 1266 012175 1267 012227 1268 012261 1270 012262 1272 012277 1277 012300 1278 012306 1278 012312 1279 012315 1281 012331 1282 012336 1284 012347 1286 012377 1287 012431 1288 012463 1289 012515 1290 012547 1291 012601 1292 012633 1293 012665 1295 012666 1297 012703 1302 012704 1303 012712 1303 012716 1304 012721 1306 012735 1307 012742 1309 012753 1311 013003 1312 013035 1313 013067 1314 013121 1315 013153 1316 013205 1317 013237 1318 013271 1320 013272 1322 013307 1327 013310 1328 013316 1328 013322 1329 013325 1331 013341 1332 013346 1334 013357 1336 013407 1337 013440 1338 013472 1339 013524 1340 013556 1341 013610 1342 013642 1343 013674 1344 013726 1345 013760 1347 013761 1349 013776 1354 013777 1355 014005 1355 014011 1356 014014 1358 014030 1359 014035 1361 014046 1363 014076 1364 014130 1365 014131 1366 014146 1368 014147 1369 014155 1369 014161 1370 014164 1371 014201 1372 014205 1373 014206 1374 014213 1376 014224 1378 014254 1379 014306 1380 014340 1381 014372 1382 014424 1384 014425 1386 014442 1391 014443 1392 014451 1392 014455 1393 014460 1395 014474 1396 014501 1398 014512 1400 014542 1401 014574 1402 014626 1403 014660 1404 014712 1406 014713 1408 014730 1412 014731 1413 014737 1413 014743 1414 014746 1420 014747 1421 014755 1421 014761 1422 014764 1424 014776 1425 015003 1426 015011 1427 015016 1428 015017 1430 015031 1437 015032 1438 015042 1439 015043 1441 015044 1442 015054 1443 015056 1458 015057 1462 015126 1463 015136 1464 015140 1466 015142 1468 015145 1470 015157 1472 015166 1474 015244 1475 015245 1476 015247 1481 015264 1483 015266 1485 015305 1486 015312 1487 015314 1489 015356 1491 015371 1492 015373 1493 015377 1496 015411 1499 015421 1501 015451 1504 015464 1505 015466 1506 015472 1510 015504 1512 015507 1514 015512 1515 015514 1517 015525 1519 015543 1521 015544 1525 015557 1529 015566 1530 015573 1531 015576 1532 015600 1533 015601 1534 015603 1535 015610 1543 015616 1545 015624 1546 015640 1548 015655 1549 015663 1552 015665 1559 015750 1560 015751 1563 015752 1565 015757 1566 015762 1567 015766 1568 015767 1570 015773 1571 015774 1572 015776 1575 016002 1577 016011 1578 016014 1580 016020 1582 016027 1583 016031 1584 016033 1585 016040 1586 016054 1587 016073 1589 016100 1591 016107 1592 016113 1593 016117 1596 016125 1597 016146 1598 016163 1599 016172 1600 016174 1601 016207 1604 016216 1605 016235 1606 016253 1608 016261 1610 016272 1611 016273 1612 016275 1613 016301 1614 016302 1615 016304 1616 016325 1617 016330 1624 016357 1626 016367 1628 016374 1629 016407 1630 016410 1631 016427 1634 016435 1635 016437 1636 016444 1637 016457 1638 016500 1639 016501 1640 016502 1641 016504 1642 016531 1643 016555 1644 016563 1645 016614 1646 016635 1648 016636 1651 016642 1652 016644 1653 016646 1656 016653 1657 016655 1658 016656 1659 016662 1665 016664 1667 016666 1668 016714 1670 017000 1672 017044 1675 017065 1677 017066 1678 017070 1679 017116 1681 017202 1683 017206 1684 017245 1687 017246 1690 017271 1692 017275 1693 017335 1694 017336 1698 017353 1706 017354 1715 017356 1716 017370 1717 017371 1718 017377 1720 017407 1721 017413 1727 017472 1728 017473 1729 017476 1730 017477 1731 017504 1732 017506 1735 017510 1737 017525 1739 017526 1740 017551 1741 017567 1743 017571 1744 017572 1745 017574 1747 017577 1748 017603 1749 017604 1751 017606 1752 017631 1753 017634 1755 017675 1757 017714 1758 017723 1766 020006 1767 020014 1769 020017 1770 020020 1771 020022 1772 020024 1773 020025 1775 020026 1776 020031 1777 020033 1780 020035 1782 020043 1783 020044 1785 020045 1787 020056 1788 020060 1790 020122 1792 020167 1793 020170 1798 020171 1803 020177 1805 020213 1807 020230 1808 020234 1810 020237 1811 020241 1814 020242 1816 020243 1818 020255 1819 020303 1820 020305 1821 020307 1822 020313 1824 020315 1825 020316 1827 020320 1829 020325 1832 020362 1834 020376 1835 020402 1842 020452 1844 020455 1846 020456 1848 020466 1849 020467 1851 020475 1855 020501 1856 020502 1857 020511 1858 020526 1862 020562 1863 020566 1864 020572 1865 020573 1866 020576 1868 020577 1870 020601 1872 020603 1875 020604 1876 020605 1883 020606 1884 020607 1886 020610 1888 020611 1889 020612 1891 020613 1893 020614 1895 020663 1897 020670 1910 020704 1925 020721 1913 020722 1922 020731 1931 020732 1936 020733 1937 020750 1938 020761 1941 021034 1946 021104 1949 021122 1950 021137 1956 021140 1962 021146 1964 021167 1966 021174 1968 021203 1970 021241 1973 021246 1975 021255 1978 021313 1979 021317 1981 021320 1982 021321 1983 021323 1984 021325 1985 021335 1986 021336 1987 021337 1989 021340 1992 021344 1995 021345 1996 021351 1999 021353 2001 021356 2004 021414 2005 021420 2007 021422 2009 021423 2013 021425 2014 021427 2015 021431 2016 021435 2017 021437 2018 021447 2019 021450 2021 021454 2022 021456 2023 021457 2025 021460 2028 021461 2032 021501 2033 021502 2037 021567 2039 021573 2041 021613 2046 021614 2049 021615 2050 021620 2051 021625 2052 021631 2053 021642 2055 021644 2056 021646 2057 021647 2060 021653 2061 021656 2062 021662 2063 021701 2065 021707 2066 021710 2067 021711 2069 021714 2070 021724 2072 021725 2073 021726 2075 021731 2078 021755 2080 021774 2081 022004 2083 022010 2084 022011 2085 022013 2086 022020 2087 022022 2089 022023 2091 022044 2092 022047 2094 022072 2097 022120 2101 022206 2108 022210 2114 022221 2116 022244 2118 022251 2119 022253 2121 022272 2123 022304 2124 022307 2127 022314 2128 022322 2136 022347 2141 022350 2142 022357 2143 022361 2145 022362 2147 022374 2148 022413 2150 022422 2151 022451 2153 022454 2154 022456 2155 022460 2156 022461 2158 022462 2160 022520 2162 022545 2163 022550 2165 022552 2166 022571 2167 022575 2168 022616 2170 022637 2171 022644 2173 022652 2174 022721 2176 022731 2178 022737 2179 022753 2181 022757 2183 022761 2185 022767 2186 023003 2188 023007 2190 023012 2191 023026 2198 023032 2202 023033 2204 023034 2205 023047 2206 023062 2207 023075 2208 023110 2210 023123 2212 023127 2214 023134 2216 023144 2217 023170 2219 023172 2223 023244 2225 023246 2226 023350 2228 023351 2232 023352 2233 023366 2234 023370 2235 023371 2236 023377 2250 023401 2252 023406 2253 023410 2254 023413 2255 023423 2256 023427 2257 023431 2258 023433 2259 023434 2262 023441 2263 023463 2265 023507 2266 023522 2268 023556 2270 023623 2274 023625 2281 023627 2283 023633 2284 023635 2286 023641 2287 023642 2289 023645 2293 023646 2305 023650 2307 023653 2308 023656 2309 023666 2310 023673 2311 023677 2312 023701 2313 023702 2315 023704 2318 023712 2319 023733 2321 023736 2322 023772 2324 024006 2325 024011 2326 024021 2328 024025 2329 024040 2330 024043 2331 024044 2332 024045 2334 024076 2335 024120 2336 024122 2338 024153 2340 024164 2343 024165 2349 024173 2351 024226 2354 024255 2357 024264 2359 024271 2362 024300 2363 024314 2365 024320 2367 024323 2368 024336 2370 024341 2373 024343 2375 024407 2378 024421 ----------------------------------------------------------- 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