COMPILATION LISTING OF SEGMENT linus_fr_new_report Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-05-04_1648.39_Thu_mdt Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 /* format: off */ 7 8 /* 9* 10* This module is called by the linus display request to set 11* up the environment for a new report. Description and usage follows. 12* 13* Description: 14* 15* This module calls linus_options to get the values of the formatting 16* options. It then uses the set of defined options to allocate all of 17* the structures needed by linus_fr_build_page. The number of structures, 18* their extents, etc. are all dictated by the definition of the format 19* options. These structures which result from the translation provide 20* a complete execution environment for linus_fr_build_page. 21* 22* Usage: 23* 24* Both parameters are passed to this program by it's caller, linus_display. 25* It is called every time a new report is desired. 26* 27* Known Bugs: 28* 29* Other Problems: 30* 31* History: 32* 33* Written - Al Dupuis - August 1983 34* 35**/ 36 37 linus_fr_new_report: proc ( 38 39 lcb_ptr_parm, /* input: points to the linus control block */ 40 code_parm /* output: success or failure */ 41 ); 42 43 dcl code_parm fixed bin (35) parm; 44 dcl lcb_ptr_parm ptr parm; 45 46 /* 47* Mainline Processing Overview. 48* 49* (1) Perform initialization. 50* 51* (2) Go through the process of getting format options from linus_options 52* and allocating/filling in the execution structures based on what the 53* options are defined as. The order is roughly setting up the input 54* columns, the output columns, the page information, the subtotals and 55* subcounts, the totals and counts, the report info, the 56* headers/footers info, and the status info. Everything specific to 57* one of these areas sometimes can't all be done in the specific 58* subroutine because there are some things that are order dependent. 59* 60**/ 61 62 lcb_ptr = lcb_ptr_parm; 63 code_parm = 0; 64 call housekeeping; 65 call setup_input_column_info; 66 call setup_output_column_info; 67 call setup_page_info; 68 call setup_subtotals_info; 69 call setup_subcounts_info; 70 call setup_totals_info; 71 call setup_counts_info; 72 call setup_report_info; 73 call setup_header_info; 74 call setup_status_info; 75 76 report_control_info.format_report_info_ptr = format_report_ip; 77 78 return; 79 80 get_option_value: proc ( 81 82 gov_option_name_parm, /* input: name of option */ 83 gov_option_identifier_parm, /* input: column identifier */ 84 gov_option_value_parm /* output: option value */ 85 ); 86 87 dcl gov_code fixed bin (35); 88 dcl gov_option_identifier_parm char (*) varying parm; 89 dcl gov_option_name_parm char (*) varying parm; 90 dcl gov_option_value_parm char (*) varying parm; 91 92 call linus_options$get (lcb_ptr, gov_option_name_parm, 93 gov_option_identifier_parm, normalized_option_name, 94 gov_option_value_parm, gov_code); 95 96 if gov_code ^= 0 97 then call ssu_$abort_line (sci_ptr, gov_code); 98 99 return; 100 101 end get_option_value; 102 103 housekeeping: proc; 104 105 /* 106* Make sure the table information is up to date. Set the pointers to 107* our needed temp segments and areas. Allocate/initialize the 108* format_report_info structure. 109**/ 110 111 sci_ptr = lcb.subsystem_control_info_ptr; 112 113 call linus_table$info (lcb_ptr, table_ip, code); 114 if code ^= 0 115 then call ssu_$abort_line (sci_ptr, code); 116 number_of_defined_columns = table_info.column_count; 117 maximum_segment_size = sys_info$max_seg_size * 4; 118 119 report_cip = lcb.report_control_info_ptr; 120 work_area_ptr = report_control_info.report_work_area_ptr; 121 temp_seg_ptr = report_control_info.report_temp_seg_ptr; 122 editing_strings_tsp 123 = report_control_info.editing_strings_temp_seg_ptr; 124 editing_strings_next_byte = 1; 125 headers_tsp = report_control_info.headers_temp_seg_ptr; 126 headers_next_byte = 1; 127 128 allocate format_report_info in (work_area) set (format_report_ip); 129 unspec (format_report_info) = OFF; 130 format_report_info.table_info_ptr = table_ip; 131 132 code = 0; 133 134 return; 135 136 end housekeeping; 137 138 map_column_list: proc ( 139 140 mcl_type_of_map_parm, /* input: two different types of map */ 141 mcl_option_value_parm, /* input: the list of columns */ 142 mcl_no_of_columns_found_parm /* output: how many were in the list */ 143 ); 144 145 dcl mcl_character_string_length fixed bin; 146 dcl mcl_column_number fixed bin; 147 dcl mcl_column_position fixed bin; 148 dcl mcl_current_position fixed bin; 149 dcl mcl_next_blank fixed bin; 150 dcl mcl_no_of_columns_found fixed bin; 151 dcl mcl_no_of_columns_found_parm fixed bin parm; 152 dcl mcl_option_value_parm char (*) varying parm; 153 dcl mcl_still_processing_columns bit (1) aligned; 154 dcl mcl_type_of_map_parm bit (1) aligned parm; 155 156 /* 157* Parse the column list and fill in the column_map structure based on what 158* we find. Set the output parm to reflect how many columns we've found. 159* The column map has been normalized by linus_options to change all column 160* numbers to names, place a single blank between each, and trim all leading 161* and trailing whitespace. We supply two types of maps. The parameter 162* mcl_type_of_map_parm when set to OUTPUT_MAP results in us preserving the 163* order in which we find them. If it is set to INPUT_MAP the order of the 164* selection expression is preserved. For example, if the user selected a, 165* b, c, d, e, f, g, h and the list contained "e c" the map would look like: 166* 167* OUTPUT_MAP 1 2 3 4 5 6 7 8 168* 1 1 0 0 0 0 0 0 PRESENT 169* 5 3 0 0 0 0 0 0 POSITION 170* 171* INPUT_MAP 1 2 3 4 5 6 7 8 172* 0 0 1 0 1 0 0 0 PRESENT 173* 0 0 3 0 5 0 0 0 POSITION 174**/ 175 176 unspec (column_map) = OFF; 177 mcl_option_value_parm = mcl_option_value_parm || BLANK; 178 mcl_current_position = 1; 179 mcl_character_string_length = length (mcl_option_value_parm); 180 mcl_column_position = 1; 181 mcl_no_of_columns_found = 0; 182 mcl_still_processing_columns = ON; 183 184 do while (mcl_still_processing_columns); 185 mcl_next_blank = index (substr (mcl_option_value_parm, mcl_current_position), BLANK); 186 mcl_column_number = lookup_column_number (); 187 if mcl_type_of_map_parm = OUTPUT_MAP 188 then do; 189 column_map.present (mcl_column_position) = ON; 190 column_map.position (mcl_column_position) = mcl_column_number; 191 mcl_column_position = mcl_column_position + 1; 192 end; 193 else do; 194 column_map.present (mcl_column_number) = ON; 195 column_map.position (mcl_column_number) = mcl_column_number; 196 end; 197 mcl_current_position = mcl_current_position + mcl_next_blank; 198 mcl_no_of_columns_found = mcl_no_of_columns_found + 1; 199 if mcl_current_position > mcl_character_string_length 200 then mcl_still_processing_columns = OFF; 201 end; 202 203 mcl_no_of_columns_found_parm = mcl_no_of_columns_found; 204 205 return; 206 207 lookup_column_number: proc () returns (fixed bin); 208 209 dcl lcn_loop fixed bin; 210 211 lcn_column_name = substr (mcl_option_value_parm, 212 mcl_current_position, mcl_next_blank - 1); 213 214 do lcn_loop = 1 to number_of_defined_columns; 215 if lcn_column_name = table_info.columns.column_name (lcn_loop) 216 then return (lcn_loop); 217 end; 218 219 call ssu_$abort_line (sci_ptr, linus_error_$bad_option_value, 220 "^/Invalid column list ""^a"".", mcl_option_value_parm); 221 222 return (0); 223 224 end lookup_column_number; 225 226 end map_column_list; 227 228 set_grouping_info: proc ( 229 230 sgi_option_name_parm, /* input: name of group option */ 231 sgi_grouping_is_defined_flag_parm, /* output: on if group is defined */ 232 sgi_group_info_ptr_parm /* output: ptr to group_info structure if above is on */ 233 ); 234 235 dcl 1 sgi_group_info like group_info based (sgi_group_info_ptr); 236 dcl sgi_group_info_ptr ptr; 237 dcl sgi_group_info_ptr_parm ptr parm; 238 dcl sgi_grouping_is_defined_flag_parm bit (1) parm; 239 dcl sgi_loop fixed bin; 240 dcl sgi_option_name_parm char (*) varying parm; 241 242 /* 243* 244* Get the option value associated with the named option. Set the flag to 245* reflect whether or not it's defined. Allocate/fill in the group_info 246* structure if it's defined. 247* 248**/ 249 250 sgi_group_info_ptr_parm = null (); 251 call get_option_value (sgi_option_name_parm, "", option_value); 252 if option_value = "" 253 then do; 254 sgi_grouping_is_defined_flag_parm = OFF; 255 return; 256 end; 257 258 sgi_grouping_is_defined_flag_parm = ON; 259 call map_column_list (OUTPUT_MAP, option_value, gi_init_number_of_columns_to_group); 260 allocate sgi_group_info in (work_area) set (sgi_group_info_ptr); 261 262 do sgi_loop = 1 to gi_init_number_of_columns_to_group; 263 sgi_group_info.column_number (sgi_loop) = column_map.position (sgi_loop); 264 end; 265 sgi_group_info_ptr_parm = sgi_group_info_ptr; 266 267 return; 268 269 end set_grouping_info; 270 271 set_ioa_string_for_total_or_subtotal: proc ( 272 273 sisfs_descriptor_ptr_parm, /* input: ptr to the descriptor */ 274 sisfs_ioa_string_parm /* output: the proper ioa_ string to edit it through */ 275 ); 276 277 dcl sisfs_char_10 char (10) based; 278 dcl sisfs_descriptor_ptr_parm ptr parm; 279 dcl sisfs_ioa_string_parm char (*) varying parm; 280 dcl sisfs_scale fixed bin; 281 282 /* 283* If the scale is greater than zero then set the ioa_ string to reflect 284* the number of digits (i.e. fixed dec (5,2) would be "^.2f"). If scale 285* is zero then set the ioa_ string to "^f" for float numbers and "^d" for 286* all others. 287**/ 288 289 desc_ptr = sisfs_descriptor_ptr_parm; 290 sisfs_scale = fixed (descriptor.size.scale, 17, 0); 291 if sisfs_scale > 0 292 then sisfs_ioa_string_parm = "^." || ltrim (convert (sisfs_char_10, sisfs_scale)) || "f"; 293 else if descriptor.type = 3 | descriptor.type = 4 | descriptor.type = 7 294 | descriptor.type = 8 | descriptor.type = 10 | descriptor.type = 12 295 | descriptor.type = 42 | descriptor.type = 44 | descriptor.type = 46 296 then sisfs_ioa_string_parm = "^f"; 297 else sisfs_ioa_string_parm = "^d"; 298 299 return; 300 301 end set_ioa_string_for_total_or_subtotal; 302 303 setup_counts_info: proc; 304 305 /* 306* Get the value for the count option and get the subroutine to figure out 307* if it's defined and allocate/initialize the structure if it is. Set it's 308* pointer in format_report_info. 309**/ 310 311 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 312 (INDEX_FOR_COUNT), "", option_value); 313 call setup_totals_or_counts_info (ROW_COUNT, option_value, 314 format_report_info.flags.count_is_defined, count_ip); 315 if format_report_info.flags.count_is_defined 316 then format_report_info.count_info_ptr = count_ip; 317 else format_report_info.count_info_ptr = null (); 318 319 return; 320 321 end setup_counts_info; 322 323 setup_header_info: proc; 324 325 dcl shi_additional_indent fixed bin; 326 dcl shi_alignment_modes (3) fixed bin; 327 dcl shi_delimiter char (1); 328 dcl shi_inner_loop fixed bin; 329 dcl shi_loop fixed bin; 330 dcl shi_current_header_part fixed bin; 331 dcl shi_current_inner_position fixed bin; 332 dcl shi_current_position fixed bin; 333 dcl shi_header_info_ptr ptr; 334 dcl shi_header_length fixed bin; 335 dcl shi_header_part_length fixed bin; 336 dcl shi_n_parts_width (3) fixed bin; 337 dcl shi_next_newline_position fixed bin; 338 dcl shi_number_of_lines_found fixed bin; 339 dcl shi_number_of_parts_found fixed bin; 340 dcl shi_second_delimiter_position fixed bin; 341 dcl shi_starting_position fixed bin; 342 dcl shi_still_counting bit (1) aligned; 343 dcl shi_still_parsing bit (1) aligned; 344 345 /* 346* Get the header portion delimiter. Init maximum number of portions to three 347* and set the widths for 1, 2, and 3 part headers. Make left, center 348* and right portions alignment accordingly. Get the subroutine to figure out 349* which headers/footers are defined and allocate/fill in the structures. 350* Group headers and footers need grouping info set for them. The parsed 351* versions of the character strings the headers/footers were set to are 352* placed contiguosly in a temp segment, and the rest of the temp seg is used 353* during the evaluation of each (in linus_fr_build_page). 354**/ 355 356 call get_option_value (OPTIONS.GENERAL_REPORT.NAME ( 357 INDEX_FOR_DELIMITER), "", option_value); 358 if option_value ^= "" 359 then format_report_info.header_part_delimiter = substr (option_value, 1, 1); 360 else format_report_info.header_part_delimiter = BLANK; 361 shi_delimiter = format_report_info.header_part_delimiter; 362 hi_init_maximum_number_of_parts = 3; 363 shi_n_parts_width (1) = page_info.width - 1; 364 shi_n_parts_width (2) = divide (shi_n_parts_width (1), 2, 17); 365 shi_n_parts_width (3) = divide (shi_n_parts_width (1), 3, 17); 366 shi_alignment_modes (1) = LEFT_ALIGNMENT; 367 shi_alignment_modes (2) = CENTER_ALIGNMENT; 368 shi_alignment_modes (3) = RIGHT_ALIGNMENT; 369 370 call define_header (OPTIONS.GENERAL_REPORT.NAME (INDEX_FOR_PAGE_HEADER_VALUE), 371 format_report_info.flags.page_header_is_defined, 372 format_report_info.page_header_info_ptr); 373 374 call define_header (OPTIONS.GENERAL_REPORT.NAME (INDEX_FOR_PAGE_FOOTER_VALUE), 375 format_report_info.flags.page_footer_is_defined, 376 format_report_info.page_footer_info_ptr); 377 378 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_ROW_HEADER_VALUE), 379 format_report_info.flags.row_header_is_defined, 380 format_report_info.row_header_info_ptr); 381 382 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_ROW_FOOTER_VALUE), 383 format_report_info.flags.row_footer_is_defined, 384 format_report_info.row_footer_info_ptr); 385 386 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_HEADER_VALUE), 387 format_report_info.flags.group_header_is_defined, 388 format_report_info.group_header_info_ptr); 389 390 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_FOOTER_VALUE), 391 format_report_info.flags.group_footer_is_defined, 392 format_report_info.group_footer_info_ptr); 393 394 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_HEADER_TRIGGER), 395 format_report_info.flags.group_header_trigger_is_defined, 396 format_report_info.group_header_trigger_info_ptr); 397 398 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_FOOTER_TRIGGER), 399 format_report_info.flags.group_footer_trigger_is_defined, 400 format_report_info.group_footer_trigger_info_ptr); 401 402 format_report_info.headers_next_available_byte = headers_next_byte; 403 404 return; 405 406 define_header: proc ( 407 408 dh_header_option_name_parm, /* input: name of header/footer option */ 409 dh_header_is_defined_flag_parm, /* output: on if header is defined */ 410 dh_header_info_ptr_parm /* output: points to header_info structure */ 411 ); 412 413 dcl dh_header_option_name_parm char (*) varying parm; 414 dcl dh_header_is_defined_flag_parm bit (1) parm; 415 dcl dh_header_info_ptr_parm ptr parm; 416 417 /* 418* Parse the header and set pointer and bit to reflect it's definition. 419**/ 420 421 dh_header_info_ptr_parm = null (); 422 call get_option_value (dh_header_option_name_parm, "", option_value); 423 if option_value = "" 424 then do; 425 dh_header_is_defined_flag_parm = OFF; 426 return; 427 end; 428 429 call parse_header (option_value, shi_header_info_ptr); 430 dh_header_is_defined_flag_parm = ON; 431 dh_header_info_ptr_parm = shi_header_info_ptr; 432 433 return; 434 435 end define_header; 436 437 parse_header: proc ( 438 439 ph_header_value_parm, /* input: the header to be parsed */ 440 ph_header_info_ptr_parm /* output: ptr to the header info structure */ 441 ); 442 443 dcl ph_header_info_ptr_parm ptr parm; 444 dcl ph_header_line_length fixed bin; 445 dcl ph_header_value_parm char (*) varying parm; 446 447 /* 448* Make sure header ends in new line. Allocate header_info structure based on 449* how many lines it is. Cleanup header and place it in temp seg. For each 450* part within each line fill in the structure and redistribute page space. 451* Set the starting position on the page and alignment for each part. 452**/ 453 454 ph_header_info_ptr_parm = null (); 455 if substr (ph_header_value_parm, length (ph_header_value_parm), 1) ^= NL 456 then ph_header_value_parm = ph_header_value_parm || NL; 457 call allocate_header_info_structure; 458 459 shi_current_position = 1; 460 461 do shi_loop = 1 to shi_number_of_lines_found; 462 call cleanup_and_save_header_line; 463 shi_current_header_part = 1; 464 shi_number_of_parts_found = 0; 465 shi_current_inner_position = 1; 466 shi_still_parsing = ON; 467 do while (shi_still_parsing); 468 call set_header_part_info; 469 end; 470 call correct_header_part_anomaly; 471 do shi_inner_loop = 1 to hi_init_maximum_number_of_parts; 472 call set_header_part_additional_info; 473 end; 474 headers_next_byte = headers_next_byte + ph_header_line_length; 475 end; 476 477 ph_header_info_ptr_parm = header_ip; 478 479 return; 480 481 allocate_header_info_structure: proc; 482 483 /* 484* Allocate structure based on number of lines it is made up of. 485**/ 486 487 shi_number_of_lines_found = 0; 488 shi_current_position = 1; 489 shi_header_length = length (ph_header_value_parm); 490 shi_still_counting = ON; 491 492 do while (shi_still_counting); 493 shi_next_newline_position = index (substr (ph_header_value_parm, 494 shi_current_position), NL); 495 shi_number_of_lines_found = shi_number_of_lines_found + 1; 496 shi_current_position = shi_current_position + shi_next_newline_position; 497 if shi_current_position > shi_header_length 498 then shi_still_counting = OFF; 499 end; 500 501 hi_init_number_of_lines = shi_number_of_lines_found; 502 allocate header_info in (work_area) set (header_ip); 503 unspec (header_info.lines) = OFF; 504 505 return; 506 507 end allocate_header_info_structure; 508 509 cleanup_and_save_header_line: proc; 510 511 /* 512* Left, right, and center portion delimiters are optional. Place any 513* missing ones. Save the cleaned up header line. 514**/ 515 516 shi_next_newline_position = index (substr (ph_header_value_parm, 517 shi_current_position), NL); 518 ph_header_line = substr (ph_header_value_parm, 519 shi_current_position, shi_next_newline_position - 1); 520 shi_current_position = shi_current_position + shi_next_newline_position; 521 522 if length (ph_header_line) = 0 523 then ph_header_line = shi_delimiter || shi_delimiter; 524 if substr (ph_header_line, 1, 1) ^= shi_delimiter 525 then ph_header_line = shi_delimiter || ph_header_line; 526 if substr (ph_header_line, length (ph_header_line), 1) ^= shi_delimiter 527 then ph_header_line = ph_header_line || shi_delimiter; 528 529 ph_header_line_length = length (ph_header_line); 530 substr (headers_temp_seg, headers_next_byte, ph_header_line_length) = ph_header_line; 531 532 return; 533 534 end cleanup_and_save_header_line; 535 536 correct_header_part_anomaly: proc; 537 538 dcl chpa_loop fixed bin; 539 540 /* 541* Parts of a header/footer which are zero length have their space 542* assigned to the parts whose length is greater than zero. This creates 543* an environment where all space on the page is available for use. For 544* example, if only the center part of a header has a length greater than 545* zero, the text is centered on the page but it has 100% of the page width 546* available to use. There are two cases where this action is not desired, 547* and this subroutine takes care of these two special cases (listed in the 548* table below as the two special cases). 549* 550* NORMAL RE-DISTIBUTION ACTION 551* 552*1. !!text!! 100%-centered 553*2. !text!text!text! 33%-left aligned, 33%-centered, 33%-right aligned 554*3. !text!!text! 50%-left aligned, 50%-right aligned 555*4. !text!!! 100%-left aligned 556*5. !!!text! 100%-right aligned 557* 558* SPECIAL CASE - NO RE-DISTRIBUTION ACTION 559* 560*6. !text!text!! 33%-left aligned, 33%-centered, 33%-UNUSED 561*7. !!text!text! 33%-UNUSED, 33%-centered, 33%-right aligned 562* 563* Special case, #7 above, followed immediately by #6. 564**/ 565 566 if (header_info.lines (shi_loop).parts (1).flags.present 567 & header_info.lines (shi_loop).parts (1).length = 0) 568 & (header_info.lines (shi_loop).parts (2).flags.present 569 & header_info.lines (shi_loop).parts (2).length > 0) 570 & (header_info.lines (shi_loop).parts (3).flags.present 571 & header_info.lines (shi_loop).parts (3).length > 0) 572 then return; 573 else if (header_info.lines (shi_loop).parts (3).flags.present 574 & header_info.lines (shi_loop).parts (3).length = 0) 575 & (header_info.lines (shi_loop).parts (1).flags.present 576 & header_info.lines (shi_loop).parts (1).length > 0) 577 & (header_info.lines (shi_loop).parts (2).flags.present 578 & header_info.lines (shi_loop).parts (2).length > 0) 579 then return; 580 else; 581 582 do chpa_loop = 1 to hi_init_maximum_number_of_parts; 583 if header_info.lines (shi_loop).parts (chpa_loop).flags.present 584 then if header_info.lines (shi_loop).parts (chpa_loop).length = 0 585 then do; 586 header_info.lines (shi_loop).parts (chpa_loop).flags.present = OFF; 587 shi_number_of_parts_found = shi_number_of_parts_found - 1; 588 end; 589 else; 590 else; 591 end; 592 593 return; 594 595 end correct_header_part_anomaly; 596 597 set_header_part_additional_info: proc; 598 599 /* 600* For each part that's present set it's width, starting position on the 601* page, and alignment. 602**/ 603 604 if header_info.lines (shi_loop).parts (shi_inner_loop).flags.present 605 then do; 606 header_info.lines (shi_loop).parts (shi_inner_loop).width 607 = shi_n_parts_width (shi_number_of_parts_found); 608 if shi_number_of_parts_found = 1 609 then shi_starting_position = 1; 610 else if shi_number_of_parts_found = 2 611 then if shi_inner_loop = 1 612 then shi_starting_position = 1; 613 else shi_starting_position = shi_n_parts_width (2) 614 + mod (shi_n_parts_width (1), 2) + 1; 615 else if shi_inner_loop = 1 616 then shi_starting_position = 1; 617 else if shi_inner_loop = 2 618 then do; 619 shi_starting_position = shi_n_parts_width (3) + 1; 620 shi_additional_indent = mod (shi_n_parts_width (1), 3); 621 if shi_additional_indent = 2 622 then shi_additional_indent = 1; 623 shi_starting_position = shi_starting_position + shi_additional_indent; 624 end; 625 else shi_starting_position = shi_n_parts_width (1) - shi_n_parts_width (3) + 1; 626 header_info.lines (shi_loop).parts (shi_inner_loop).starting_position = shi_starting_position; 627 header_info.lines (shi_loop).parts (shi_inner_loop).alignment 628 = shi_alignment_modes (shi_inner_loop); 629 end; 630 631 return; 632 633 end set_header_part_additional_info; 634 635 set_header_part_info: proc; 636 637 /* 638* Find the portion and it's length. Mark it present and whether it 639* contains active requests. Set the index and length to it. Check to make 640* sure the maximum number of header parts isn't exceeded. 641**/ 642 643 shi_second_delimiter_position = index (substr (ph_header_line, 644 shi_current_inner_position + 1), shi_delimiter); 645 shi_header_part_length = shi_second_delimiter_position - 1; 646 shi_number_of_parts_found = shi_number_of_parts_found + 1; 647 header_info.lines (shi_loop).parts (shi_current_header_part).flags.present = ON; 648 649 if shi_header_part_length ^= 0 650 then if search (substr (ph_header_line, 651 shi_current_inner_position + 1, shi_header_part_length), LEFT_OR_RIGHT_BRACKET) ^= 0 652 then header_info.lines (shi_loop).parts (shi_current_header_part).flags.active = ON; 653 else; 654 else; 655 656 header_info.lines (shi_loop).parts (shi_current_header_part).index 657 = headers_next_byte + shi_current_inner_position; 658 header_info.lines (shi_loop).parts (shi_current_header_part).length = shi_header_part_length; 659 660 shi_current_inner_position = shi_current_inner_position + shi_second_delimiter_position; 661 if shi_current_inner_position >= ph_header_line_length 662 then shi_still_parsing = OFF; 663 else shi_current_header_part = shi_current_header_part + 1; 664 if shi_current_header_part > hi_init_maximum_number_of_parts 665 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 666 "^/A header or footer was found which contained more than ^d parts." 667 || "^/The line in error was ^/^a", hi_init_maximum_number_of_parts, ph_header_line); 668 669 return; 670 671 end set_header_part_info; 672 673 end parse_header; 674 675 end setup_header_info; 676 677 setup_input_column_info: proc; 678 679 dcl sici_hit bit (1) aligned; 680 dcl sici_inner_loop fixed bin; 681 dcl sici_loop fixed bin; 682 683 /* 684* Allocate and init the input_columns_info and input_columns_order structures. 685**/ 686 687 initialize_number_of_columns = number_of_defined_columns; 688 allocate input_columns_info in (work_area) set (input_columns_ip); 689 unspec (input_columns_info.columns) = OFF; 690 format_report_info.input_columns_info_ptr = input_columns_ip; 691 allocate input_columns_order in (work_area) set (input_columns_op); 692 format_report_info.input_columns_order_ptr = input_columns_op; 693 694 /* 695* Set the width, alignment, folding, prefix character, editing, title, 696* and data type for each column. Stash the editing string and the title 697* in the editing strings temp segment. 698**/ 699 700 do sici_loop = 1 to number_of_defined_columns; 701 option_identifier = ltrim (convert (option_identifier, sici_loop)); 702 input_columns_info.columns (sici_loop).input_column = sici_loop; 703 704 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 705 (INDEX_FOR_WIDTH), option_identifier, option_value); 706 input_columns_info.columns (sici_loop).width = convert (sici_loop, option_value); 707 708 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 709 (INDEX_FOR_ALIGNMENT), option_identifier, option_value); 710 call set_alignment_and_decimal_position (sici_loop, option_value); 711 712 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 713 (INDEX_FOR_FOLDING), option_identifier, option_value); 714 if option_value = "fill" 715 then input_columns_info.columns (sici_loop).folding_is_fill = ON; 716 else input_columns_info.columns (sici_loop).folding_is_fill = OFF; 717 input_columns_info.columns (sici_loop).prefix_character = ""; 718 719 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 720 (INDEX_FOR_EDITING), option_identifier, option_value); 721 if option_value = "" 722 then input_columns_info.columns (sici_loop).editing = OFF; 723 else do; 724 format_report_info.flags.editing_is_defined = ON; 725 input_columns_info.columns (sici_loop).editing = ON; 726 input_columns_info.columns (sici_loop).editing_string_length = length (option_value); 727 input_columns_info.columns (sici_loop).editing_string_ptr 728 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 729 substr (editing_strings_temp_seg, editing_strings_next_byte, 730 input_columns_info.columns (sici_loop).editing_string_length) = option_value; 731 editing_strings_next_byte = editing_strings_next_byte 732 + input_columns_info.columns (sici_loop).editing_string_length; 733 end; 734 735 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 736 (INDEX_FOR_TITLE), option_identifier, option_value); 737 if option_value = "" 738 then option_value = BLANK; 739 input_columns_info.columns (sici_loop).editing_string_result_length = length (option_value); 740 input_columns_info.columns (sici_loop).editing_string_result_ptr 741 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 742 substr (editing_strings_temp_seg, editing_strings_next_byte, 743 input_columns_info.columns (sici_loop).editing_string_result_length) = option_value; 744 editing_strings_next_byte = editing_strings_next_byte 745 + input_columns_info.columns (sici_loop).editing_string_result_length; 746 747 call set_linus_data_type (sici_loop); 748 end; 749 750 /* 751* Set the next available byte in the editing strings temp seg. Allocate 752* the column map structure. Map the column order list and set the 753* input_columns_info and input_columns_order structures to reflect the 754* order. Set the grouping info. 755**/ 756 757 format_report_info.editing_strings_next_available_byte = editing_strings_next_byte; 758 column_map_number_of_columns = number_of_defined_columns; 759 allocate column_map in (work_area) set (column_mp); 760 761 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 762 (INDEX_FOR_COLUMN_ORDER), "", option_value); 763 call map_column_list (OUTPUT_MAP, option_value, no_of_columns_found); 764 do sici_loop = 1 to number_of_defined_columns; 765 input_columns_info.columns (sici_loop).order = column_map.position (sici_loop); 766 input_columns_info.columns (sici_loop).input_column = sici_loop; 767 input_columns_order (sici_loop) = column_map.position (sici_loop); 768 end; 769 770 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP), 771 format_report_info.flags.group_is_defined, format_report_info.group_info_ptr); 772 if format_report_info.flags.group_is_defined 773 then group_ip = format_report_info.group_info_ptr; 774 else group_ip = null (); 775 776 /* 777* Allocate/set the page_break_info structure. Any column requested as a 778* page break candidate who is a member of the "group" columns has any 779* columns more major in the group set also. 780**/ 781 782 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 783 (INDEX_FOR_PAGE_BREAK), "", option_value); 784 if option_value = "" 785 then do; 786 format_report_info.flags.page_break_is_defined = OFF; 787 format_report_info.page_break_info_ptr = null (); 788 end; 789 else do; 790 format_report_info.flags.page_break_is_defined = ON; 791 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 792 pbi_init_number_of_columns = input_columns_info.number_of_columns; 793 allocate page_break_info in (work_area) set (page_break_ip); 794 page_break_info.columns (*) = OFF; 795 format_report_info.page_break_info_ptr = page_break_ip; 796 do sici_loop = 1 to input_columns_info.number_of_columns; 797 if column_map.present (sici_loop) 798 then page_break_info.columns (sici_loop) = ON; 799 end; 800 if format_report_info.flags.group_is_defined 801 then do; 802 do sici_loop = 1 to input_columns_info.number_of_columns; 803 sici_hit = OFF; 804 do sici_inner_loop = group_info.number_of_columns_to_group to 1 by -1; 805 if group_info.column_number (sici_inner_loop) = sici_loop 806 & page_break_info.columns (group_info.column_number (sici_inner_loop)) 807 then sici_hit = ON; 808 if sici_hit 809 then page_break_info.columns (group_info.column_number (sici_inner_loop)) = ON; 810 end; 811 end; 812 end; 813 end; 814 815 /* 816* Allocate/set the outline_info structure. The columns named who are a 817* member of the "group" of columns are treated separately from the columns 818* who are not a member of the group. 819**/ 820 821 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 822 (INDEX_FOR_OUTLINE), "", option_value); 823 if option_value = "" 824 then do; 825 format_report_info.flags.outline_is_defined = OFF; 826 format_report_info.outline_info_ptr = null (); 827 end; 828 else do; 829 format_report_info.flags.outline_is_defined = ON; 830 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 831 if format_report_info.flags.group_is_defined 832 then oi_init_maximum_number_of_grouping_columns = group_info.number_of_columns_to_group; 833 else oi_init_maximum_number_of_grouping_columns = 0; 834 oi_init_maximum_number_of_single_columns = input_columns_info.number_of_columns; 835 allocate outline_info in (work_area) set (outline_ip); 836 format_report_info.outline_info_ptr = outline_ip; 837 outline_info.number_of_grouping_columns = 0; 838 if format_report_info.flags.group_is_defined 839 then do sici_loop = 1 to input_columns_info.number_of_columns; 840 do sici_inner_loop = group_info.number_of_columns_to_group to 1 by -1; 841 if group_info.column_number (sici_inner_loop) = sici_loop 842 & column_map.present (group_info.column_number (sici_inner_loop)) 843 then do; 844 outline_info.number_of_grouping_columns 845 = outline_info.number_of_grouping_columns + 1; 846 outline_info.grouping_columns (outline_info.number_of_grouping_columns) 847 = group_info.column_number (sici_inner_loop); 848 column_map.present (group_info.column_number (sici_inner_loop)) = OFF; 849 end; 850 end; 851 end; 852 outline_info.number_of_single_columns = 0; 853 if outline_info.number_of_grouping_columns ^= no_of_columns_found 854 then do sici_loop = 1 to input_columns_info.number_of_columns; 855 if column_map.present (sici_loop) 856 then do; 857 outline_info.number_of_single_columns = outline_info.number_of_single_columns + 1; 858 outline_info.single_columns (outline_info.number_of_single_columns) = sici_loop; 859 end; 860 end; 861 end; 862 863 return; 864 865 end setup_input_column_info; 866 867 setup_output_column_info: proc; 868 869 dcl soci_inner_loop fixed bin; 870 dcl soci_loop fixed bin; 871 872 /* 873* Find out which columns are excluded from the page. 874**/ 875 876 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 877 (INDEX_FOR_EXCLUDE), "", option_value); 878 if option_value ^= "" 879 then do; 880 format_report_info.flags.exclude_is_defined = ON; 881 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 882 initialize_number_of_columns = number_of_defined_columns - no_of_columns_found; 883 end; 884 else do; 885 initialize_number_of_columns = number_of_defined_columns; 886 unspec (column_map) = OFF; 887 end; 888 889 /* 890* If all columns are excluded fill them in as all present for the case 891* where it is a report consisting of totals/subtotals only. 892**/ 893 894 if initialize_number_of_columns = 0 895 then do; 896 format_report_info.flags.row_value_is_defined = OFF; 897 initialize_number_of_columns = number_of_defined_columns; 898 unspec (column_map) = OFF; 899 end; 900 else format_report_info.flags.row_value_is_defined = ON; 901 allocate output_columns_info in (work_area) set (output_columns_ip); 902 format_report_info.output_columns_info_ptr = output_columns_ip; 903 904 /* 905* Allocate/set the output_columns_order array. Assign input_columns_info 906* for each column that isn't excluded into output_columns_info, and make 907* each output_columns_info reflect it's input_columns_info (i.e. if the 908* user re-ordered and excluded columns, the output_columns_info structure 909* will reflect it.) 910**/ 911 912 output_columns_order_number_of_columns = output_columns_info.number_of_columns; 913 allocate output_columns_order in (work_area) set (output_columns_op); 914 soci_inner_loop = 1; 915 916 do soci_loop = 1 to number_of_defined_columns; 917 if ^column_map.present (input_columns_info.columns (soci_loop).order) 918 then do; 919 output_columns_order (soci_inner_loop) = input_columns_info.columns (soci_loop).order; 920 soci_inner_loop = soci_inner_loop + 1; 921 end; 922 end; 923 924 do soci_loop = 1 to output_columns_info.number_of_columns; 925 output_columns_info.columns (soci_loop) 926 = input_columns_info.columns (output_columns_order (soci_loop)); 927 input_columns_info.columns (output_columns_order (soci_loop)).output_column = soci_loop; 928 end; 929 930 return; 931 932 end setup_output_column_info; 933 934 setup_page_info: proc; 935 936 dcl spi_current_detail_line fixed bin; 937 dcl spi_current_position fixed bin; 938 dcl spi_exceeds_max_seg_size bit (1) aligned; 939 dcl spi_last_column_on_detail_line bit (1) aligned; 940 dcl spi_loop fixed bin; 941 dcl spi_separator_width fixed bin; 942 943 /* 944* Get the page length and width. A page length of zero means the report is 945* unpaginated. If page length is zero then set the internal page length 946* to a healthy buffer size. Unpaginated reports are buffered into chunks 947* that are mostly treated just like a page, because it would be foolish 948* to try to do the whole report in one chunk when there may be several 949* million rows in the table. Allocate formatted_page_info structure. 950**/ 951 952 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 953 (INDEX_FOR_PAGE_WIDTH), "", option_value); 954 format_report_info.page_width = convert (spi_loop, option_value); 955 if format_report_info.page_width = 0 956 then format_report_info.flags.unlimited_page_width = ON; 957 else format_report_info.flags.unlimited_page_width = OFF; 958 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 959 (INDEX_FOR_PAGE_LENGTH), "", option_value); 960 format_report_info.page_length = convert (spi_loop, option_value); 961 if format_report_info.page_length = 0 962 then do; 963 report_control_info.flags.report_is_paginated = OFF; 964 format_report_info.flags.unlimited_page_length = ON; 965 format_report_info.page_length = convert (format_report_info.page_length, 966 OPTIONS.GENERAL_REPORT.VALUE (INDEX_FOR_PAGE_LENGTH)) * SAFETY_FACTOR; 967 end; 968 else do; 969 report_control_info.flags.report_is_paginated = ON; 970 format_report_info.flags.unlimited_page_length = OFF; 971 end; 972 fpi_init_maximum_number_of_detail_blocks = format_report_info.page_length; 973 allocate formatted_page_info in (work_area) set (formatted_page_ip); 974 format_report_info.formatted_page_info_ptr = formatted_page_ip; 975 976 /* 977* Get the definition of the title line. If page width is zero then calculate 978* exactly what's needed; if it isn't zero then reduce the width of any 979* column who exceeds page width to page width. 980**/ 981 982 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 983 (INDEX_FOR_TITLE_LINE), "", option_value); 984 if option_value = "on" 985 then format_report_info.flags.title_block_is_defined = ON; 986 else format_report_info.flags.title_block_is_defined = OFF; 987 988 if format_report_info.page_width = 0 989 then do; 990 spi_current_position = 1; 991 do spi_loop = 1 to output_columns_info.number_of_columns; 992 spi_current_position = spi_current_position 993 + output_columns_info.columns (spi_loop).width; 994 if spi_loop ^= output_columns_info.number_of_columns 995 then do; 996 option_identifier = ltrim (convert (option_identifier, 997 output_columns_info.columns (spi_loop).input_column)); 998 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 999 (INDEX_FOR_SEPARATOR), option_identifier, option_value); 1000 spi_current_position = spi_current_position + length (option_value); 1001 end; 1002 else; 1003 end; 1004 format_report_info.page_width = spi_current_position - 1; 1005 end; 1006 else do spi_loop = 1 to output_columns_info.number_of_columns; 1007 if output_columns_info.columns (spi_loop).width > format_report_info.page_width 1008 then output_columns_info.columns (spi_loop).width = format_report_info.page_width; 1009 end; 1010 1011 /* 1012* Add one to page width to accomodate the newline. If report isn't paginated 1013* then check to make sure that our chosen page length * page width doesn't 1014* exceed the maximum segment size. If it does reduce accordingly. 1015**/ 1016 1017 format_report_info.page_width = format_report_info.page_width + 1; 1018 if format_report_info.flags.unlimited_page_length 1019 then do; 1020 spi_exceeds_max_seg_size = ON; 1021 do while (spi_exceeds_max_seg_size); 1022 if format_report_info.page_width * (format_report_info.page_length - 6) ^> maximum_segment_size 1023 then spi_exceeds_max_seg_size = OFF; 1024 else do; 1025 if format_report_info.page_length < 8 1026 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1027 "The page width of ^d causes a single page to exceed the maximum segment size.", 1028 format_report_info.page_width); 1029 1030 format_report_info.page_length = divide (format_report_info.page_length, 2, 17); 1031 if format_report_info.page_length < 7 1032 then format_report_info.page_length = 7; 1033 else; 1034 end; 1035 end; 1036 end; 1037 1038 /* 1039* Allocate/set page_info structure. Make sure a single page doesn't exceed 1040* a segment for paginated reports. Allocate a second copy of the structure 1041* so linus_fr_build_page can adjust the length, width, and total_characters 1042* after formatting each page and then restore the original structure before 1043* beginning the next page. Allocate page_overstrike_info structure. 1044**/ 1045 1046 allocate page_info in (work_area) set (page_ip); 1047 page_info.width = format_report_info.page_width; 1048 page_info.length = format_report_info.page_length - 6; 1049 page_info.total_characters = page_info.width * page_info.length; 1050 if format_report_info.flags.unlimited_page_length 1051 then if page_info.total_characters > maximum_segment_size 1052 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1053 "^/The page width of ^d and the page length of ^d cause a single page to exceed the maximum segment size.", 1054 format_report_info.page_width, format_report_info.page_length); 1055 else; 1056 else; 1057 page_info.page_info_size = size (page_info); 1058 page_info.page_ptr = report_control_info.report_temp_seg_ptr; 1059 page_info.formatted_page_info_ptr = format_report_info.formatted_page_info_ptr; 1060 format_report_info.page_info_ptr = page_ip; 1061 allocate page_info in (work_area) set (page_ip); 1062 page_info = format_report_info.page_info_ptr -> page_info; 1063 format_report_info.copy_of_page_info_ptr = page_ip; 1064 allocate page_overstrike_info in (work_area) set (page_overstrike_ip); 1065 format_report_info.overstrike_info_ptr = page_overstrike_ip; 1066 1067 /* 1068* Allocate the generic_template (for headers and the like). Base template 1069* at the beginning of the temp seg and assign it initially the value of 1070* the generic template. 1071**/ 1072 1073 generic_template_length = page_info.width; 1074 allocate generic_template in (work_area) set (generic_tp); 1075 generic_template = BLANK; 1076 substr (generic_template, generic_template_length, 1) = NL; 1077 format_report_info.generic_template_ptr = generic_tp; 1078 template_length = generic_template_length; 1079 template_ptr = temp_seg_ptr; 1080 template = generic_template; 1081 1082 /* 1083* Walk through the output columns. Set the number of detail lines a row 1084* value will take and do folding of columns which won't fit down to the 1085* next detail line(s). Create a template for each individual detail line 1086* and stash it away in the temp seg. Set the starting position on the page 1087* for each output column, and fill it's separator into the template. The 1088* last column of each detail line doesn't have a separator. 1089**/ 1090 1091 spi_current_detail_line = 1; 1092 spi_current_position = 1; 1093 1094 do spi_loop = 1 to output_columns_info.number_of_columns; 1095 option_identifier = ltrim (convert (option_identifier, 1096 output_columns_info.columns (spi_loop).input_column)); 1097 if spi_loop = output_columns_info.number_of_columns 1098 then spi_last_column_on_detail_line = ON; 1099 else spi_last_column_on_detail_line = OFF; 1100 1101 output_columns_info.columns (spi_loop).starting_position = spi_current_position; 1102 output_columns_info.columns (spi_loop).output_line = spi_current_detail_line; 1103 spi_current_position = spi_current_position + output_columns_info.columns (spi_loop).width; 1104 1105 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 1106 (INDEX_FOR_SEPARATOR), option_identifier, option_value); 1107 spi_separator_width = length (option_value); 1108 if spi_current_position + spi_separator_width > page_info.width 1109 then spi_last_column_on_detail_line = ON; 1110 1111 if ^spi_last_column_on_detail_line 1112 then if spi_current_position + spi_separator_width 1113 + output_columns_info.columns (spi_loop + 1).width > page_info.width 1114 then spi_last_column_on_detail_line = ON; 1115 1116 if ^spi_last_column_on_detail_line 1117 then do; 1118 substr (template, spi_current_position, spi_separator_width) = option_value; 1119 spi_current_position = spi_current_position + spi_separator_width; 1120 end; 1121 else if spi_loop ^= output_columns_info.number_of_columns 1122 then do; 1123 template_ptr = addrel (template_ptr, size (template)); 1124 template = generic_template; 1125 spi_current_detail_line = spi_current_detail_line + 1; 1126 spi_current_position = 1; 1127 end; 1128 else; 1129 end; 1130 1131 /* 1132* Initialize the number of templates, and allocate/set the 1133* row_value_template_info structure. Allocate the template_map 1134* structure (used to determine which lines on a page have already 1135* had a template laid down). 1136**/ 1137 1138 ti_init_number_of_templates = spi_current_detail_line; 1139 ti_init_template_width = template_length; 1140 allocate row_value_template_info in (work_area) set (row_value_template_ip); 1141 format_report_info.row_value_template_info_ptr = row_value_template_ip; 1142 template_map_number_of_bits = page_info.length; 1143 allocate template_map in (work_area) set (template_mp); 1144 format_report_info.template_map_ptr = template_mp; 1145 template_ptr = temp_seg_ptr; 1146 do spi_loop = 1 to spi_current_detail_line; 1147 row_value_template_info.templates (spi_loop) = template; 1148 template_ptr = addrel (template_ptr, size (template)); 1149 end; 1150 1151 /* 1152* If the title line is on then allocate/set the title_block_columns_info 1153* structure. Null the pointer to the title_block_info structure so that 1154* linus_fr_build_page will know it is the first time formatting the titles 1155* (it only formats the title block on page 1 and then places the resulting 1156* lines on the page for every one after page 1.) 1157**/ 1158 1159 if format_report_info.flags.title_block_is_defined 1160 then do; 1161 initialize_number_of_columns = output_columns_info.number_of_columns; 1162 allocate title_block_columns_info in (work_area) set (title_block_columns_ip); 1163 title_block_columns_info = output_columns_info; 1164 format_report_info.title_block_columns_info_ptr = title_block_columns_ip; 1165 do spi_loop = 1 to initialize_number_of_columns; 1166 column_ip = addr (title_block_columns_info.columns (spi_loop)); 1167 column_info.flags.outline = OFF; 1168 column_info.flags.editing = ON; 1169 column_info.alignment = CENTER_ALIGNMENT; 1170 end; 1171 format_report_info.title_block_info_ptr = null (); 1172 end; 1173 1174 return; 1175 1176 end setup_page_info; 1177 1178 setup_report_info: proc; 1179 1180 /* 1181* Set the truncation indicator. Allocate/set the format_document_options 1182* structure. 1183**/ 1184 1185 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 1186 (INDEX_FOR_TRUNCATION), "", option_value); 1187 format_report_info.truncation_indicator = option_value; 1188 1189 allocate format_document_options in (work_area) set (format_document_options_ptr); 1190 unspec (format_document_options) = OFF; 1191 format_document_options.version_number = format_document_version_2; 1192 format_document_options.switches.galley_sw = ON; 1193 format_document_options.switches.break_word_sw = ON; 1194 format_document_options.switches.max_line_length_sw = ON; 1195 format_document_options.switches.sub_err_sw = ON; 1196 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 1197 (INDEX_FOR_FORMAT_DOCUMENT_CONTROLS), "", option_value); 1198 if option_value = "off" 1199 then do; 1200 format_document_options.switches.literal_sw = ON; 1201 format_document_options.switches.dont_compress_sw = ON; 1202 end; 1203 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 1204 (INDEX_FOR_HYPHENATION), "", option_value); 1205 if option_value = "on" 1206 then format_document_options.switches.hyphenation_sw = ON; 1207 format_document_options.syllable_size = DEFAULT_SYLLABLE_SIZE; 1208 format_report_info.format_document_op = format_document_options_ptr; 1209 1210 /* 1211* If it's a permanent report then setup the file which will contain a 1212* copy of each formatted page. 1213**/ 1214 1215 if report_control_info.flags.permanent_report 1216 then do; 1217 switch_name = unique_chars_ ("0"b) || ".linus_report"; 1218 format_report_info.report_entry_name = unique_chars_ ("0"b); 1219 format_report_info.report_directory_name = report_control_info.temp_dir_name; 1220 call iox_$attach_name (switch_name, iocb_ptr, 1221 "vfile_ " || rtrim (format_report_info.report_directory_name) 1222 || ">" || rtrim (format_report_info.report_entry_name), 1223 null (), code); 1224 if code ^= 0 1225 then call ssu_$abort_line (sci_ptr, code, 1226 "While trying to attach file ^a in dir ^a.", 1227 rtrim (format_report_info.report_directory_name), 1228 rtrim (format_report_info.report_entry_name)); 1229 call iox_$open (iocb_ptr, Direct_update, "0"b, code); 1230 if code ^= 0 1231 then call ssu_$abort_line (sci_ptr, code, 1232 "While trying to open file ^a in dir ^a.", 1233 rtrim (format_report_info.report_directory_name), 1234 rtrim (format_report_info.report_entry_name)); 1235 format_report_info.report_iocb_ptr = iocb_ptr; 1236 end; 1237 1238 return; 1239 1240 end setup_report_info; 1241 1242 setup_status_info: proc; 1243 1244 /* 1245* Allocate/set the status structure. This is the execution control structure 1246* that linus_fr_build_page lives and breathes by. 1247**/ 1248 1249 allocate status in (work_area) set (status_pointer); 1250 unspec (status) = OFF; 1251 1252 status.number_of_lines_needed_for_detail_block = 0; 1253 if ^format_report_info.flags.row_header_is_defined 1254 then status.number_of_lines_needed_for_row_header = 0; 1255 else do; 1256 header_ip = format_report_info.row_header_info_ptr; 1257 status.number_of_lines_needed_for_row_header = header_info.number_of_lines; 1258 status.number_of_lines_needed_for_detail_block = status.number_of_lines_needed_for_detail_block 1259 + status.number_of_lines_needed_for_row_header; 1260 end; 1261 if format_report_info.flags.row_value_is_defined 1262 then do; 1263 status.number_of_lines_needed_for_row_value = row_value_template_info.number_of_templates; 1264 status.number_of_lines_needed_for_detail_block = status.number_of_lines_needed_for_detail_block 1265 + status.number_of_lines_needed_for_row_value; 1266 end; 1267 if ^format_report_info.flags.row_footer_is_defined 1268 then status.number_of_lines_needed_for_row_footer = 0; 1269 else do; 1270 header_ip = format_report_info.row_footer_info_ptr; 1271 status.number_of_lines_needed_for_row_footer = header_info.number_of_lines; 1272 status.number_of_lines_needed_for_detail_block = status.number_of_lines_needed_for_detail_block 1273 + status.number_of_lines_needed_for_row_footer; 1274 end; 1275 1276 if ^format_report_info.flags.page_footer_is_defined 1277 then status.number_of_lines_needed_for_page_footer = 0; 1278 else do; 1279 header_ip = format_report_info.page_footer_info_ptr; 1280 status.number_of_lines_needed_for_page_footer = header_info.number_of_lines; 1281 end; 1282 1283 if ^format_report_info.flags.group_header_is_defined 1284 then status.number_of_lines_needed_for_group_header = 0; 1285 else do; 1286 header_ip = format_report_info.group_header_info_ptr; 1287 status.number_of_lines_needed_for_group_header = header_info.number_of_lines; 1288 end; 1289 1290 if ^format_report_info.flags.group_footer_is_defined 1291 then status.number_of_lines_needed_for_group_footer = 0; 1292 else do; 1293 header_ip = format_report_info.group_footer_info_ptr; 1294 status.number_of_lines_needed_for_group_footer = header_info.number_of_lines; 1295 end; 1296 1297 status.current_row_ptr = null (); 1298 status.previous_row_ptr = null (); 1299 status.next_row_ptr = null (); 1300 status.last_row_number = 0; 1301 status.last_page_number = 0; 1302 status.current_pass_number = 1; 1303 status.flags.last_pass = ON; 1304 1305 format_report_info.status_ptr = status_pointer; 1306 1307 return; 1308 1309 end setup_status_info; 1310 1311 setup_subcounts_info: proc; 1312 1313 /* 1314* Allocate/set the subcount_info, subcount_generation_info, and 1315* subcount_columns_info structures if the subcount option is defined. 1316**/ 1317 1318 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 1319 (INDEX_FOR_SUBCOUNT), "", option_value); 1320 call setup_subtotals_or_subcounts_info (ROW_SUBCOUNT, option_value, 1321 format_report_info.flags.subcount_is_defined, subcount_ip); 1322 if format_report_info.flags.subcount_is_defined 1323 then do; 1324 format_report_info.subcount_info_ptr = subcount_ip; 1325 subcount_generation_ip = subcount_info.subtotal_generation_info_ptr; 1326 subcount_columns_ip = subcount_info.columns_info_ptr; 1327 end; 1328 else format_report_info.subcount_info_ptr = null (); 1329 1330 return; 1331 1332 end setup_subcounts_info; 1333 1334 setup_subtotals_info: proc; 1335 1336 /* 1337* Allocate/set the subtotal_info, subtotal_generation_info, and 1338* subtotal_columns_info structures if the subtotal option is defined. 1339**/ 1340 1341 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 1342 (INDEX_FOR_SUBTOTAL), "", option_value); 1343 call setup_subtotals_or_subcounts_info (ROW_SUBTOTAL, option_value, 1344 format_report_info.flags.subtotal_is_defined, subtotal_ip); 1345 if format_report_info.flags.subtotal_is_defined 1346 then do; 1347 format_report_info.subtotal_info_ptr = subtotal_ip; 1348 subtotal_generation_ip = subtotal_info.subtotal_generation_info_ptr; 1349 subtotal_columns_ip = subtotal_info.columns_info_ptr; 1350 end; 1351 else format_report_info.subtotal_info_ptr = null (); 1352 1353 return; 1354 1355 end setup_subtotals_info; 1356 1357 setup_subtotals_or_subcounts_info: proc ( 1358 1359 ssosi_subtotal_flag_parm, /* input: on for subtotals, off for subcounts */ 1360 ssosi_option_value_parm, /* input: the value for the option */ 1361 ssosi_defined_flag_parm, /* output: on if it is defined */ 1362 ssosi_subtotal_info_ptr_parm /* output: points to subtotal_info structure */ 1363 ); 1364 1365 dcl ssosi_comma_position fixed bin; 1366 dcl ssosi_current_position fixed bin; 1367 dcl ssosi_current_inner_position fixed bin; 1368 dcl ssosi_defined_flag_parm bit (1) parm; 1369 dcl ssosi_inner_loop fixed bin; 1370 dcl ssosi_loop fixed bin; 1371 dcl ssosi_next_blank fixed bin; 1372 dcl ssosi_option_value_parm char (*) varying parm; 1373 dcl ssosi_still_counting_subtotals bit (1) aligned; 1374 dcl ssosi_subtotal_flag_parm bit (1) aligned parm; 1375 dcl 1 ssosi_subtotal_columns_info like subtotal_columns_info based (ssosi_subtotal_columns_info_ptr); 1376 dcl ssosi_subtotal_columns_info_ptr ptr; 1377 dcl 1 ssosi_subtotal_generation_info like subtotal_generation_info based (ssosi_subtotal_generation_info_ptr); 1378 dcl ssosi_subtotal_generation_info_ptr ptr; 1379 dcl 1 ssosi_subtotal_info like subtotal_info based (ssosi_subtotal_info_ptr_parm); 1380 dcl ssosi_subtotal_info_ptr_parm ptr parm; 1381 dcl ssosi_subtotal_list_length fixed bin; 1382 1383 /* 1384* This subroutine works for subcounts and subtotals. See if it's defined. 1385**/ 1386 1387 if ssosi_option_value_parm = "" 1388 then do; 1389 ssosi_defined_flag_parm = OFF; 1390 ssosi_subtotal_info_ptr_parm = null (); 1391 return; 1392 end; 1393 1394 /* 1395* Great! First let's remove the subtotals/subcounts whose parents are 1396* excluded from the page and see if we still have any defined. 1397**/ 1398 1399 ssosi_defined_flag_parm = ON; 1400 si_init_number_of_columns_to_subtotal = 0; 1401 ssosi_still_counting_subtotals = ON; 1402 ssosi_current_position = 1; 1403 ssosi_option_value_parm = ssosi_option_value_parm || BLANK; 1404 call remove_orphan_subtotals; 1405 if ssosi_option_value_parm = BLANK 1406 then do; 1407 ssosi_defined_flag_parm = OFF; 1408 ssosi_subtotal_info_ptr_parm = null (); 1409 return; 1410 end; 1411 ssosi_subtotal_list_length = length (ssosi_option_value_parm); 1412 1413 /* 1414* We have some defined. Let's see how many. 1415**/ 1416 1417 do while (ssosi_still_counting_subtotals); 1418 ssosi_next_blank = index (substr (ssosi_option_value_parm, ssosi_current_position), BLANK); 1419 if ssosi_next_blank ^= 0 1420 then si_init_number_of_columns_to_subtotal = si_init_number_of_columns_to_subtotal + 1; 1421 else ssosi_still_counting_subtotals = OFF; 1422 if ssosi_still_counting_subtotals 1423 then ssosi_current_position = ssosi_current_position + ssosi_next_blank; 1424 if ssosi_current_position > ssosi_subtotal_list_length 1425 then ssosi_still_counting_subtotals = OFF; 1426 end; 1427 1428 /* 1429* Allocate/set the subtotal_info structure. 1430**/ 1431 1432 allocate ssosi_subtotal_info in (work_area) set (ssosi_subtotal_info_ptr_parm); 1433 ssosi_subtotal_info.current_level = 0; 1434 unspec (ssosi_subtotal_info.columns) = OFF; 1435 ssosi_subtotal_info.columns (*).subtotal = 0; 1436 1437 /* 1438* Allocate the subtotal_generation_info structure. This is a circular 1439* list used to place the value of each subtotal after it's been generated. 1440* During formatting when the removal of rows is necessary, the subtotals 1441* are restored back to their old values from this circular list. 1442**/ 1443 1444 sgi_init_number_of_subtotals = si_init_number_of_columns_to_subtotal; 1445 sgi_init_number_of_generations = divide (page_info.length, 2, 17) + 1; 1446 allocate ssosi_subtotal_generation_info in (work_area) 1447 set (ssosi_subtotal_generation_info_ptr); 1448 ssosi_subtotal_info.subtotal_generation_info_ptr = ssosi_subtotal_generation_info_ptr; 1449 ssosi_subtotal_generation_info.current_generation_block = -1; 1450 1451 /* 1452* Allocate/set the subtotal_map structure so we can figure out how 1453* many levels of them we have (several subtotals defined on the same 1454* column, who are generated when different column's values change.) For 1455* the subtotal_info structure set the input column and level for each 1456* column. Set the highest_level in the same structure. For subtotals 1457* there is a requirement that they must be numbers; this isn't true 1458* for subcounts. Set the ioa_ string to edit them through. If the "watch" 1459* column is a member of the group of columns then mark it. Set the 1460* reset flag accordingly. 1461**/ 1462 1463 subtotal_map_init_number_of_columns = input_columns_info.number_of_columns; 1464 allocate subtotal_map in (work_area) set (subtotal_map_ptr); 1465 unspec (subtotal_map.columns) = OFF; 1466 ssosi_current_position = 1; 1467 ssosi_subtotal_info.highest_level = 0; 1468 1469 do ssosi_loop = 1 to si_init_number_of_columns_to_subtotal; 1470 ssosi_current_inner_position = 1; 1471 ssosi_next_blank = index (substr (ssosi_option_value_parm, ssosi_current_position), BLANK); 1472 ssosi_option_value = substr (ssosi_option_value_parm, 1473 ssosi_current_position, ssosi_next_blank - 1); 1474 ssosi_comma_position = index (ssosi_option_value, COMMA); 1475 ssosi_column_name = substr (ssosi_option_value, 1, ssosi_comma_position - 1); 1476 ssosi_subtotal_info.columns (ssosi_loop).input_column = get_column_number (); 1477 subtotal_map.columns (ssosi_subtotal_info.columns (ssosi_loop).input_column).present = ON; 1478 subtotal_map.columns (ssosi_subtotal_info.columns (ssosi_loop).input_column).number 1479 = subtotal_map.columns (ssosi_subtotal_info.columns (ssosi_loop).input_column).number + 1; 1480 ssosi_subtotal_info.columns (ssosi_loop).level 1481 = subtotal_map.columns (ssosi_subtotal_info.columns (ssosi_loop).input_column).number; 1482 if ssosi_subtotal_info.columns (ssosi_loop).level > ssosi_subtotal_info.highest_level 1483 then ssosi_subtotal_info.highest_level = ssosi_subtotal_info.columns (ssosi_loop).level; 1484 if ssosi_subtotal_flag_parm 1485 then do; 1486 if input_columns_info.columns (ssosi_subtotal_info.columns 1487 .input_column (ssosi_loop)).linus_data_type = NUMERIC_DATA_TYPE 1488 | input_columns_info.columns (ssosi_subtotal_info.columns 1489 .input_column (ssosi_loop)).linus_data_type = DECIMAL_DATA_TYPE 1490 then; 1491 else call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1492 "^/A subtotal was specified for the ^a column and it is not numeric.", 1493 table_info.columns.column_name (ssosi_subtotal_info.columns.input_column (ssosi_loop))); 1494 call set_ioa_string_for_total_or_subtotal ( 1495 addr (table_info.columns (ssosi_subtotal_info.columns.input_column (ssosi_loop)).column_data_type), 1496 ssosi_subtotal_info.columns.ioa_string (ssosi_loop)); 1497 end; 1498 else ssosi_subtotal_info.columns.ioa_string (ssosi_loop) = "^d"; 1499 ssosi_current_inner_position = ssosi_current_inner_position + ssosi_comma_position; 1500 ssosi_comma_position = index (substr (ssosi_option_value, ssosi_current_inner_position), COMMA); 1501 ssosi_column_name = substr (ssosi_option_value, 1502 ssosi_current_inner_position, ssosi_comma_position - 1); 1503 ssosi_subtotal_info.columns (ssosi_loop).watch_column = get_column_number (); 1504 if format_report_info.flags.group_is_defined 1505 then do ssosi_inner_loop = 1 to group_info.number_of_columns_to_group; 1506 if group_info.column_number (ssosi_inner_loop) 1507 = ssosi_subtotal_info.columns (ssosi_loop).watch_column 1508 then ssosi_subtotal_info.columns (ssosi_loop).flags.group_column = ON; 1509 end; 1510 ssosi_subtotal_info.columns (ssosi_loop).flags.reset 1511 = (substr (ssosi_option_value, ssosi_current_inner_position + ssosi_comma_position) = RESET); 1512 ssosi_current_position = ssosi_current_position + ssosi_next_blank; 1513 end; 1514 1515 /* 1516* Allocate/set the subtotal_columns_info structure. Assign the values of 1517* the output_columns to them, and set the prefix of all to blank. Walk 1518* through the subtotal_columns_info structure setting the prefix of each 1519* one that is really a subtotal/subcount to "-", and set the alignment in 1520* the case of subcounts to right. 1521**/ 1522 1523 initialize_number_of_columns = output_columns_info.number_of_columns; 1524 allocate ssosi_subtotal_columns_info in (work_area) set (ssosi_subtotal_columns_info_ptr); 1525 ssosi_subtotal_info.columns_info_ptr = ssosi_subtotal_columns_info_ptr; 1526 ssosi_subtotal_columns_info = output_columns_info; 1527 ssosi_subtotal_columns_info.columns (*).prefix_character = BLANK; 1528 1529 do ssosi_loop = 1 to ssosi_subtotal_info.number_of_columns_to_subtotal; 1530 ssosi_subtotal_columns_info.columns (input_columns_info.columns 1531 (ssosi_subtotal_info.columns (ssosi_loop).input_column).output_column).prefix_character = "-"; 1532 if ^ssosi_subtotal_flag_parm 1533 then ssosi_subtotal_columns_info.columns (input_columns_info.columns 1534 (ssosi_subtotal_info.columns (ssosi_loop).input_column).output_column).alignment = RIGHT_ALIGNMENT; 1535 end; 1536 1537 return; 1538 1539 get_column_number: proc () returns (fixed bin); 1540 1541 dcl gcn_loop fixed bin; 1542 1543 /* 1544* Get the column number for the supplied column name. These names have been 1545* verified in linus_options, so any name that isn't found indicates the 1546* parsing code in this module messed up somewhere. 1547**/ 1548 1549 do gcn_loop = 1 to number_of_defined_columns; 1550 if ssosi_column_name = table_info.columns.column_name (gcn_loop) 1551 then return (gcn_loop); 1552 end; 1553 1554 if ssosi_subtotal_flag_parm 1555 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1556 "The column name ""^a"" in the subtotal list ""^a"" isn't valid.", 1557 ssosi_column_name, ssosi_option_value_parm); 1558 else call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1559 "The column name ""^a"" in the subcount list ""^a"" isn't valid.", 1560 ssosi_column_name, ssosi_option_value_parm); 1561 1562 return (0); 1563 1564 end get_column_number; 1565 1566 remove_orphan_subtotals: proc; 1567 1568 dcl ros_column_number fixed bin; 1569 dcl ros_current_position fixed bin; 1570 dcl ros_next_blank fixed bin; 1571 dcl ros_next_comma fixed bin; 1572 dcl ros_still_eliminating_orphans bit (1) aligned; 1573 dcl ros_subtotal_list_length fixed bin; 1574 1575 /* 1576* Walk through the list eliminating any subtotals whose parents have been 1577* excluded from the page. 1578**/ 1579 1580 ssosi_option_value = ""; 1581 ros_subtotal_list_length = length (ssosi_option_value_parm); 1582 ros_current_position = 1; 1583 ros_still_eliminating_orphans = ON; 1584 1585 do while (ros_still_eliminating_orphans); 1586 ros_next_blank = index (substr (ssosi_option_value_parm, 1587 ros_current_position), BLANK); 1588 ros_next_comma = index (substr (ssosi_option_value_parm, 1589 ros_current_position), COMMA); 1590 ssosi_column_name = substr (ssosi_option_value_parm, 1591 ros_current_position, ros_next_comma - 1); 1592 ros_column_number = get_column_number (); 1593 if input_columns_info.columns (ros_column_number).output_column ^= 0 1594 then ssosi_option_value = ssosi_option_value 1595 || substr (ssosi_option_value_parm, ros_current_position, ros_next_blank); 1596 ros_current_position = ros_current_position + ros_next_blank; 1597 if ros_current_position > ros_subtotal_list_length 1598 then ros_still_eliminating_orphans = OFF; 1599 end; 1600 1601 ssosi_option_value_parm = ssosi_option_value; 1602 1603 return; 1604 1605 end remove_orphan_subtotals; 1606 1607 end setup_subtotals_or_subcounts_info; 1608 1609 setup_totals_info: proc; 1610 1611 /* 1612* Get the subroutine to figure out if we have any defined. 1613**/ 1614 1615 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 1616 (INDEX_FOR_TOTAL), "", option_value); 1617 call setup_totals_or_counts_info (ROW_TOTAL, option_value, 1618 format_report_info.flags.total_is_defined, total_ip); 1619 if format_report_info.flags.total_is_defined 1620 then format_report_info.total_info_ptr = total_ip; 1621 else format_report_info.total_info_ptr = null (); 1622 1623 return; 1624 1625 end setup_totals_info; 1626 1627 setup_totals_or_counts_info: proc ( 1628 1629 stoci_total_flag_parm, /* input: on for totals, off for counts */ 1630 stoci_option_value_parm, /* input: the value for the option */ 1631 stoci_defined_flag_parm, /* output: on if it's defined */ 1632 stoci_total_info_ptr_parm /* output: points to total_info structure */ 1633 ); 1634 1635 dcl stoci_defined_flag_parm bit (1) parm; 1636 dcl stoci_inner_loop fixed bin; 1637 dcl stoci_loop fixed bin; 1638 dcl stoci_option_value_parm char (*) varying parm; 1639 dcl 1 stoci_total_columns_info like total_columns_info based (stoci_total_columns_info_ptr); 1640 dcl stoci_total_columns_info_ptr ptr; 1641 dcl stoci_total_flag_parm bit (1) aligned parm; 1642 dcl 1 stoci_total_info like total_info based (stoci_total_info_ptr_parm); 1643 dcl stoci_total_info_ptr_parm ptr parm; 1644 1645 /* 1646* See if we have any defined. 1647**/ 1648 1649 if stoci_option_value_parm = "" 1650 then do; 1651 stoci_defined_flag_parm = OFF; 1652 stoci_total_info_ptr_parm = null (); 1653 return; 1654 end; 1655 1656 /* 1657* Yes we do. Get a map and remove any totals whose parents are excluded 1658* from the page. Adjust our count accordingly. 1659**/ 1660 1661 stoci_defined_flag_parm = ON; 1662 call map_column_list (INPUT_MAP, stoci_option_value_parm, 1663 ti_init_number_of_columns_to_total); 1664 do stoci_loop = 1 to number_of_defined_columns; 1665 if column_map.present (stoci_loop) 1666 then if input_columns_info.columns (stoci_loop).output_column = 0 1667 then do; 1668 column_map.present (stoci_loop) = OFF; 1669 ti_init_number_of_columns_to_total = ti_init_number_of_columns_to_total - 1; 1670 end; 1671 else; 1672 else; 1673 end; 1674 1675 /* 1676* There may not be any defined at this point. 1677**/ 1678 1679 if ti_init_number_of_columns_to_total ^> 0 1680 then do; 1681 stoci_defined_flag_parm = OFF; 1682 stoci_total_info_ptr_parm = null (); 1683 return; 1684 end; 1685 1686 /* 1687* Looks like we still have some left. Allocate the total_info structure 1688* and zero all totals. 1689**/ 1690 1691 allocate stoci_total_info in (work_area) set (stoci_total_info_ptr_parm); 1692 stoci_total_info.columns.total (*) = 0; 1693 stoci_inner_loop = 1; 1694 1695 /* 1696* Walk through the column map setting the input column and ioa_ string. 1697* There is a requirement that totals be defined on columns that are 1698* numbers; no such requirement for counts. 1699**/ 1700 1701 do stoci_loop = 1 to output_columns_info.number_of_columns; 1702 if column_map.present (output_columns_info.columns (stoci_loop).input_column) 1703 then do; 1704 stoci_total_info.columns.input_column (stoci_inner_loop) 1705 = output_columns_info.columns (stoci_loop).input_column; 1706 if stoci_total_flag_parm 1707 then do; 1708 if input_columns_info.columns (stoci_total_info.columns.input_column (stoci_inner_loop)) 1709 .linus_data_type = NUMERIC_DATA_TYPE 1710 | input_columns_info.columns (stoci_total_info.columns.input_column (stoci_inner_loop)) 1711 .linus_data_type = DECIMAL_DATA_TYPE 1712 then; 1713 else call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1714 "^/A total was specified for the ^a column and it is not numeric.", 1715 table_info.columns.column_name (stoci_total_info.columns.input_column (stoci_inner_loop))); 1716 call set_ioa_string_for_total_or_subtotal ( 1717 addr (table_info.columns (stoci_total_info.columns.input_column (stoci_inner_loop)).column_data_type), 1718 stoci_total_info.columns.ioa_string (stoci_inner_loop)); 1719 end; 1720 else stoci_total_info.columns.ioa_string (stoci_inner_loop) = "^d"; 1721 stoci_inner_loop = stoci_inner_loop + 1; 1722 end; 1723 end; 1724 1725 /* 1726* Allocate the total_columns_info structure. Assign the output_columns_info 1727* to total_columns_info. Set outlining on for all and right alignment if we 1728* are playing with counts rather than totals. 1729**/ 1730 1731 initialize_number_of_columns = output_columns_info.number_of_columns; 1732 allocate stoci_total_columns_info in (work_area) set (stoci_total_columns_info_ptr); 1733 stoci_total_info.columns_info_ptr = stoci_total_columns_info_ptr; 1734 stoci_total_columns_info = output_columns_info; 1735 stoci_total_columns_info.columns (*).flags.outline = ON; 1736 if ^stoci_total_flag_parm 1737 then stoci_total_columns_info.columns (*).alignment = RIGHT_ALIGNMENT; 1738 1739 return; 1740 1741 end setup_totals_or_counts_info; 1742 1743 set_alignment_and_decimal_position: proc ( 1744 1745 saadp_column_number_parm, /* input: number of column */ 1746 saadp_option_value_parm /* input: value of option for column */ 1747 ); 1748 1749 dcl saadp_claimed_digits char (7) varying; 1750 dcl saadp_column_number_parm parm; 1751 dcl saadp_option_value_parm char (*) varying parm; 1752 1753 /* 1754* Set the alignment and in the case of decimal, the position within the 1755* display width where the decimal alignment should take place. 1756**/ 1757 1758 if saadp_option_value_parm = "center" 1759 then input_columns_info.columns (saadp_column_number_parm).alignment 1760 = CENTER_ALIGNMENT; 1761 else if saadp_option_value_parm = "left" 1762 then input_columns_info.columns (saadp_column_number_parm) 1763 .alignment = LEFT_ALIGNMENT; 1764 else if saadp_option_value_parm = "right" 1765 then input_columns_info.columns (saadp_column_number_parm) 1766 .alignment = RIGHT_ALIGNMENT; 1767 else if saadp_option_value_parm = "both" 1768 then input_columns_info.columns (saadp_column_number_parm) 1769 .alignment = BOTH_ALIGNMENT; 1770 else do; 1771 input_columns_info.columns (saadp_column_number_parm) 1772 .alignment = DECIMAL_ALIGNMENT; 1773 saadp_claimed_digits = after (saadp_option_value_parm, BLANK); 1774 if verify (saadp_claimed_digits, DIGITS) ^= 0 1775 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1776 "^/The decimal alignment position could not be converted to an integer. ""^a""", 1777 saadp_option_value_parm); 1778 input_columns_info.columns (saadp_column_number_parm).decimal_position 1779 = convert (saadp_column_number_parm, saadp_claimed_digits); 1780 if input_columns_info.columns (saadp_column_number_parm).decimal_position 1781 > input_columns_info.columns (saadp_column_number_parm).width 1782 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1783 "^/The decimal alignment position ^d is larger than the column width ^d for column number ^d.", 1784 input_columns_info.columns (saadp_column_number_parm).decimal_position, 1785 input_columns_info.columns (saadp_column_number_parm).width, 1786 saadp_column_number_parm); 1787 end; 1788 1789 return; 1790 1791 end set_alignment_and_decimal_position; 1792 1793 set_linus_data_type: proc (sldt_column_number_parm); 1794 1795 dcl sldt_column_number_parm fixed bin parm; 1796 dcl sldt_column_type fixed bin (6) unsigned unaligned; 1797 1798 /* 1799* Simplify all of the possibilities into numeric, decimal, bit or character. 1800**/ 1801 1802 desc_ptr = addr (table_info.columns.column_data_type (sldt_column_number_parm)); 1803 sldt_column_type = descriptor.type; 1804 1805 if (sldt_column_type >= 1 & sldt_column_type <= 8) 1806 | (sldt_column_type = 33 | sldt_column_type = 34) 1807 then input_columns_info.columns (sldt_column_number_parm) 1808 .linus_data_type = NUMERIC_DATA_TYPE; 1809 else if (sldt_column_type >= 9 & sldt_column_type <= 12) 1810 | (sldt_column_type = 29 | sldt_column_type = 30) 1811 | (sldt_column_type = 35 | sldt_column_type = 36) 1812 | (sldt_column_type >= 38 & sldt_column_type <= 46) 1813 then input_columns_info.columns (sldt_column_number_parm) 1814 .linus_data_type = DECIMAL_DATA_TYPE; 1815 else if (sldt_column_type = 19 | sldt_column_type = 20) 1816 then input_columns_info.columns (sldt_column_number_parm) 1817 .linus_data_type = BIT_DATA_TYPE; 1818 else if (sldt_column_type = 21 | sldt_column_type = 22) 1819 then input_columns_info.columns (sldt_column_number_parm) 1820 .linus_data_type = CHAR_DATA_TYPE; 1821 else call ssu_$abort_line (sci_ptr, linus_error_$bad_report_setup, 1822 "^/The table information described an unsupported data type.^/The data type was ^d.", 1823 sldt_column_type); 1824 1825 return; 1826 1827 end set_linus_data_type; 1828 1829 dcl BLANK char (1) static int options (constant) init (" "); 1830 dcl COMMA char (1) static int options (constant) init (","); 1831 dcl DEFAULT_SYLLABLE_SIZE fixed bin static int options (constant) init (2); 1832 dcl DIGITS char (10) static int options (constant) init ("0123456789"); 1833 dcl INPUT_MAP bit (1) aligned static int options (constant) init ("1"b); 1834 dcl LEFT_OR_RIGHT_BRACKET char (2) internal static options (constant) init ("[]"); 1835 dcl NL char (1) internal static options (constant) init (" 1836 "); 1837 dcl OFF bit (1) aligned internal static options (constant) init ("0"b); 1838 dcl ON bit (1) aligned internal static options (constant) init ("1"b); 1839 dcl OUTPUT_MAP bit (1) aligned static int options (constant) init ("0"b); 1840 dcl RESET char (5) static int options (constant) init ("reset"); 1841 dcl ROW_COUNT bit (1) aligned static int options (constant) init ("0"b); 1842 dcl ROW_SUBCOUNT bit (1) aligned static int options (constant) init ("0"b); 1843 dcl ROW_SUBTOTAL bit (1) aligned static int options (constant) init ("1"b); 1844 dcl ROW_TOTAL bit (1) aligned static int options (constant) init ("1"b); 1845 dcl SAFETY_FACTOR fixed bin int static options (constant) init (4); 1846 1847 dcl addr builtin; 1848 dcl addrel builtin; 1849 dcl after builtin; 1850 1851 dcl code fixed bin (35); 1852 dcl convert builtin; 1853 1854 dcl divide builtin; 1855 1856 dcl fixed builtin; 1857 1858 dcl iocb_ptr ptr; 1859 dcl index builtin; 1860 dcl iox_$attach_name entry (char(*), ptr, char(*), ptr, fixed bin(35)); 1861 dcl iox_$open entry (ptr, fixed bin, bit(1) aligned, fixed bin(35)); 1862 1863 dcl lcn_column_name char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1864 dcl length builtin; 1865 dcl linus_error_$bad_option_value fixed bin(35) ext static; 1866 dcl linus_error_$bad_report_setup fixed bin(35) ext static; 1867 dcl linus_options$get entry (ptr, char(*) var, char(*) var, char(*) var, char(*) var, fixed bin(35)); 1868 dcl linus_table$info entry (ptr, ptr, fixed bin(35)); 1869 dcl ltrim builtin; 1870 1871 dcl mod builtin; 1872 1873 dcl no_of_columns_found fixed bin; 1874 dcl normalized_option_name char (97) varying; 1875 dcl null builtin; 1876 dcl number_of_defined_columns fixed bin; 1877 1878 dcl option_identifier char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1879 dcl option_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1880 dcl output_columns_order (output_columns_order_number_of_columns) fixed bin based (output_columns_op); 1881 dcl output_columns_order_number_of_columns fixed bin; 1882 dcl output_columns_op ptr; 1883 1884 dcl ph_header_line char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1885 1886 dcl rel builtin; 1887 dcl rtrim builtin; 1888 1889 dcl sci_ptr ptr; 1890 dcl search builtin; 1891 dcl size builtin; 1892 dcl ssosi_column_name char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1893 dcl ssosi_option_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1894 dcl ssu_$abort_line entry() options(variable); 1895 dcl 1 subtotal_map aligned based (subtotal_map_ptr), 1896 2 number_of_columns fixed bin, 1897 2 columns (subtotal_map_init_number_of_columns refer (subtotal_map.number_of_columns)), 1898 3 present bit (1), 1899 3 number fixed bin; 1900 dcl substr builtin; 1901 dcl subtotal_map_init_number_of_columns fixed bin; 1902 dcl subtotal_map_ptr ptr; 1903 dcl switch_name char (32); 1904 dcl sys_info$max_seg_size fixed bin(35) ext static; 1905 1906 dcl temp_seg_ptr ptr; 1907 1908 dcl unique_chars_ entry (bit(*)) returns(char(15)); 1909 dcl unspec builtin; 1910 1911 dcl verify builtin; 1912 1913 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 1914 dcl work_area_ptr ptr; 1915 1 1 /* BEGIN INCLUDE FILE ... arg_descriptor.incl.pl1 1 2* 1 3* James R. Davis 1 Mar 79 */ 1 4 /* Modified June 83 JMAthane for extended arg descriptor format */ 1 5 1 6 dcl 1 arg_descriptor based (arg_descriptor_ptr) aligned, 1 7 2 flag bit (1) unal, 1 8 2 type fixed bin (6) unsigned unal, 1 9 2 packed bit (1) unal, 1 10 2 number_dims fixed bin (4) unsigned unal, 1 11 2 size fixed bin (24) unsigned unal; 1 12 1 13 dcl 1 fixed_arg_descriptor based (arg_descriptor_ptr) aligned, 1 14 2 flag bit (1) unal, 1 15 2 type fixed bin (6) unsigned unal, 1 16 2 packed bit (1) unal, 1 17 2 number_dims fixed bin (4) unsigned unal, 1 18 2 scale fixed bin (11) unal, 1 19 2 precision fixed bin (12) unsigned unal; 1 20 1 21 dcl 1 extended_arg_descriptor based (arg_descriptor_ptr) aligned, 1 22 2 flag bit (1) unal, /* = "1"b */ 1 23 2 type fixed bin (6) unsigned unal, /* = 58 */ 1 24 2 packed bit (1) unal, /* significant if number_dims ^= 0 */ 1 25 2 number_dims fixed (4) unsigned unal,/* number of variable dimensions */ 1 26 2 size bit (24) unal, 1 27 2 dims (0 refer (extended_arg_descriptor.number_dims)), /* part referenced by called generated code */ 1 28 3 low fixed bin (35), 1 29 3 high fixed bin (35), 1 30 3 multiplier fixed bin (35), /* in bits if packed, in words if not */ 1 31 2 real_type fixed bin (18) unsigned unal, 1 32 2 type_offset fixed bin (18) unsigned unal; /* offset rel to symbol tree to symbol node for type, if any */ 1 33 1 34 dcl arg_descriptor_ptr ptr; 1 35 1 36 dcl extended_arg_type fixed bin init (58); 1 37 1 38 /* END INCLUDE file .... arg_descriptor.incl.pl1 */ 1916 1917 2 1 /* BEGIN INCLUDE FILE ... arg_list.incl.pl1 2 2* 2 3* James R. Davis 10 May 79 */ 2 4 2 5 2 6 2 7 /****^ HISTORY COMMENTS: 2 8* 1) change(86-05-15,DGHowe), approve(86-05-15,MCR7375), 2 9* audit(86-07-15,Schroth): 2 10* added command_name_arglist declaration to allow the storage of the 2 11* command name given to the command processor 2 12* END HISTORY COMMENTS */ 2 13 2 14 dcl 1 arg_list aligned based, 2 15 2 header, 2 16 3 arg_count fixed bin (17) unsigned unal, 2 17 3 pad1 bit (1) unal, 2 18 3 call_type fixed bin (18) unsigned unal, 2 19 3 desc_count fixed bin (17) unsigned unal, 2 20 3 pad2 bit (19) unal, 2 21 2 arg_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr, 2 22 2 desc_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr; 2 23 2 24 2 25 dcl 1 command_name_arglist aligned based, 2 26 2 header, 2 27 3 arg_count fixed bin (17) unsigned unal, 2 28 3 pad1 bit (1) unal, 2 29 3 call_type fixed bin (18) unsigned unal, 2 30 3 desc_count fixed bin (17) unsigned unal, 2 31 3 mbz bit(1) unal, 2 32 3 has_command_name bit(1) unal, 2 33 3 pad2 bit (17) unal, 2 34 2 arg_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 2 35 2 desc_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 2 36 2 name, 2 37 3 command_name_ptr pointer, 2 38 3 command_name_length fixed bin (21); 2 39 2 40 2 41 2 42 dcl 1 arg_list_with_envptr aligned based, /* used with non-quick int and entry-var calls */ 2 43 2 header, 2 44 3 arg_count fixed bin (17) unsigned unal, 2 45 3 pad1 bit (1) unal, 2 46 3 call_type fixed bin (18) unsigned unal, 2 47 3 desc_count fixed bin (17) unsigned unal, 2 48 3 pad2 bit (19) unal, 2 49 2 arg_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr, 2 50 2 envptr ptr, 2 51 2 desc_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr; 2 52 2 53 2 54 dcl ( 2 55 Quick_call_type init (0), 2 56 Interseg_call_type init (4), 2 57 Envptr_supplied_call_type 2 58 init (8) 2 59 ) fixed bin (18) unsigned unal int static options (constant); 2 60 2 61 /* The user must declare arg_list_arg_count - if an adjustable automatic structure 2 62* is being "liked" then arg_list_arg_count may be a parameter, in order to allocate 2 63* an argument list of the proper size in the user's stack 2 64* 2 65**/ 2 66 /* END INCLUDE FILE ... arg_list.incl.pl1 */ 1918 1919 3 1 /* BEGIN INCLUDE FILE format_document_options.incl.pl1 3 2* 3 3* Modified 82.10.18 by Paul W. Benjamin to add dont_compress_sw and upgrade 3 4* to version_2. 3 5* Modified 83.02.15 by PWB to add break_word_sw and max_line_length_sw. 3 6* Modified 83.03.01 by PWB to add dont_break_indented_lines_sw. 3 7* Modified 83.03.03 by PWB to add sub_err_sw. 3 8* Modified 83.06.07 by PWB to add dont_fill_sw. 3 9* Modified 83.06.09 by PWB to add hyphenation_sw and syllable_size. 3 10**/ 3 11 3 12 dcl 1 format_document_options aligned based (format_document_options_ptr), 3 13 2 version_number fixed bin, /* input */ 3 14 /* must be format_document_version_2 */ 3 15 2 indentation fixed bin, /* input */ 3 16 /* all lines must be indented by this value */ 3 17 2 line_length fixed bin, /* input */ 3 18 /* initial line length */ 3 19 2 switches, 3 20 3 pgno_sw bit (1) unal, /* input */ 3 21 /* end each page with a centered page number */ 3 22 3 adj_sw bit (1) unal, /* input */ 3 23 /* adjust mode initially on */ 3 24 /* only meaningful if dont_fill_sw = "0"b */ 3 25 3 galley_sw bit (1) unal, /* input */ 3 26 /* galley mode -- no page breaks */ 3 27 3 error_sw bit (1) unal, /* input */ 3 28 /* report all errors on error_output */ 3 29 3 literal_sw bit (1) unal, /* input */ 3 30 /* "1"b - interpret all lines as text */ 3 31 /* "0"b - lines that start with "." are controls */ 3 32 3 file_sw bit (1) unal, /* output */ 3 33 /* has meaning for non-zero storage system status codes */ 3 34 /* "1"b code refers to output file */ 3 35 /* "0"b code refers to input file */ 3 36 3 dont_compress_sw bit (1) unal, /* input */ 3 37 /* "1"b - don't compress white space */ 3 38 /* "0"b - compress white space when filling */ 3 39 3 break_word_sw bit (1) unal, /* input */ 3 40 /* "1"b - break a word rather than exceed line_length */ 3 41 /* "0"b - write an overlength line if no spaces found */ 3 42 3 max_line_length_sw bit (1) unal, /* input */ 3 43 /* "1"b - line_length cannot be exceeded */ 3 44 /* "0"b - line_length can be exceeded (by .pdw controls) */ 3 45 3 dont_break_indented_lines_sw /* input */ 3 46 bit (1) unal, /* don't break a line that begins with whitespace */ 3 47 /* when it is the last line, or the next line is */ 3 48 /* null or the next line begins with whitespace */ 3 49 3 sub_err_sw bit (1) unal, /* input */ 3 50 /* quietly call sub_err_ with diagnostic errors */ 3 51 3 dont_fill_sw bit (1) unal, /* input */ 3 52 /* "1"b - fill mode off initially */ 3 53 /* "0"b - fill mode on initially */ 3 54 3 hyphenation_sw bit (1) unal, 3 55 3 mbz bit (23) unal, /* input */ 3 56 /* MUST be zero */ 3 57 2 syllable_size 3 58 fixed bin; /* input */ 3 59 /* smallest portion of word */ 3 60 /* to be left by hyphenation */ 3 61 3 62 dcl format_document_options_ptr ptr; 3 63 dcl format_document_version_2 fixed bin int static options (constant) init (2); 3 64 dcl format_document_version_1 fixed bin int static options (constant) init (1); 3 65 3 66 /* END INCLUDE FILE format_document_options.incl.pl1 */ 1920 1921 4 1 /* Begin include file ..... iox_modes.incl.pl1 */ 4 2 4 3 /* Written by C. D. Tavares, 03/17/75 */ 4 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 4 5 4 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 4 7 ("stream_input", "stream_output", "stream_input_output", 4 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 4 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 4 10 "direct_input", "direct_output", "direct_update"); 4 11 4 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 4 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 4 14 4 15 dcl (Stream_input initial (1), 4 16 Stream_output initial (2), 4 17 Stream_input_output initial (3), 4 18 Sequential_input initial (4), 4 19 Sequential_output initial (5), 4 20 Sequential_input_output initial (6), 4 21 Sequential_update initial (7), 4 22 Keyed_sequential_input initial (8), 4 23 Keyed_sequential_output initial (9), 4 24 Keyed_sequential_update initial (10), 4 25 Direct_input initial (11), 4 26 Direct_output initial (12), 4 27 Direct_update initial (13)) fixed bin int static options (constant); 4 28 4 29 /* End include file ..... iox_modes.incl.pl1 */ 1922 1923 5 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 5 7* install(86-07-29,MR12.0-1106): 5 8* Added general_work_area_ptr and renamed sfr_ptr to 5 9* force_retrieve_scope_ptr. 5 10* END HISTORY COMMENTS */ 5 11 5 12 5 13 /* HISTORY: 5 14* 5 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 5 16* 5 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 5 18* a part of the attribute level control work. 5 19* 5 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 5 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 5 22* scope information. 5 23* 5 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 5 25* retaining various vcpu times to be collected when in timing mode. The 5 26* times to be collected are: LINUS parsing time, LINUS processing time, and 5 27* MRDS processing time. 5 28* 5 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 5 30* part of the line numbering implementation. This allows for possible later 5 31* LINUS control of the build defaults. 5 32* 5 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 5 34* information is now retained by ssu_. Removed parse_timer as no longer 5 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 5 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 5 37* 5 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 5 39* subsystem_invocation_level, and selection_expression_identifier. 5 40* 5 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 5 42* table_control_info_ptr. 5 43* 5 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 5 45* 5 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 5 47* 5 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 5 49* 5 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 5 51**/ 5 52 5 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 5 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 5 55 2 rb_len fixed bin (21), /* length of request buffer */ 5 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 5 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 5 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 5 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 5 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 5 61 2 test_flag bit (1) unal, /* on if in test mode */ 5 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 5 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 5 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 5 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 5 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 5 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 5 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 5 69 2 reserved bit (27) unal, 5 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 5 71 2 rb_ptr ptr, /* ptr to request buffer */ 5 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 5 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 5 74 2 ttn_ptr ptr, /* pointer to table info structure */ 5 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 5 76 2 lv_ptr ptr, /* pointer linus variables */ 5 77 2 si_ptr ptr, /* pointer to select_info structure */ 5 78 2 setfi_ptr ptr, /* pointer to set function information */ 5 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 5 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 5 81 2 lit_ptr ptr, /* pointer to literal pool */ 5 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 5 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 5 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 5 85* (MR7.0) */ 5 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 5 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 5 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 5 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 5 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 5 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 5 92* for current lila expression */ 5 93 2 unused_timer float bin (63), /* future expansion */ 5 94 2 request_time float bin (63), /* How much request time was spent 5 95* in LINUS. (-1 = user has just enabled 5 96* timing, do not report) */ 5 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 5 98 2 build_increment fixed bin, /* default increment for build mode */ 5 99 2 build_start fixed bin, /* default start count for build mode */ 5 100 2 linus_version char (4), /* current version of LINUS */ 5 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 5 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 5 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 5 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 5 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 5 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 5 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 5 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 5 109 2 word_pad (6) bit (36) unal, 5 110 /* procedures that will be optionally */ 5 111 /* replaced by the user. Saved so they */ 5 112 /* can be reinstated if desired. */ 5 113 2 ssu_abort_line entry options (variable), 5 114 2 ssu_post_request_line variable entry (ptr), 5 115 2 ssu_pre_request_line variable entry (ptr), 5 116 5 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 5 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 5 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 5 120 5 121 dcl lcb_ptr ptr; 5 122 5 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 1924 1925 6 1 /* BEGIN INCLUDE FILE linus_format_options.incl.pl1 6 2* 6 3* Formatting options used for producing reports. 6 4* Al Dupuis - August 1983 6 5* 6 6**/ 6 7 /* format: off */ 6 8 6 9 dcl 1 OPTIONS static int options (constant), 6 10 6 11 2 GENERAL_REPORT (9), 6 12 6 13 3 NAME char (32) varying init ( 6 14 6 15 "-delimiter", /* "!" */ 6 16 "-format_document_controls", /* "off" */ 6 17 "-hyphenation", /* "off" */ 6 18 "-page_footer_value", /* "" */ 6 19 "-page_header_value", /* "" */ 6 20 "-page_length", /* "66" */ 6 21 "-page_width", /* "79" */ 6 22 "-title_line", /* "on" */ 6 23 "-truncation" /* "*" */ 6 24 ), 6 25 6 26 3 VALUE char (32) varying init ( 6 27 6 28 "!", /* "-delimiter" */ 6 29 "off", /* "-format_document_controls " */ 6 30 "off", /* "-hyphenation" */ 6 31 "", /* "-page_footer_value" */ 6 32 "", /* "-page_header_value" */ 6 33 "66", /* "-page_length" */ 6 34 "79", /* "-page_width" */ 6 35 "on", /* "-title_line" */ 6 36 "*" /* "-truncation" */ 6 37 ), 6 38 6 39 2 GENERAL_COLUMN (15), 6 40 6 41 3 NAME char (32) varying init ( 6 42 6 43 "-column_order", /* "[sequential]" */ 6 44 "-count", /* "" */ 6 45 "-exclude", /* "" */ 6 46 "-group", /* "" */ 6 47 "-group_footer_trigger", /* "" */ 6 48 "-group_footer_value", /* "" */ 6 49 "-group_header_trigger", /* "" */ 6 50 "-group_header_value", /* "" */ 6 51 "-outline", /* "" */ 6 52 "-page_break", /* "" */ 6 53 "-row_footer_value", /* "" */ 6 54 "-row_header_value", /* "" */ 6 55 "-subcount", /* "" */ 6 56 "-subtotal", /* "" */ 6 57 "-total" /* "" */ 6 58 ), 6 59 6 60 3 VALUE char (32) varying init ( 6 61 6 62 "[sequential]", /* "-column_order" */ 6 63 "", /* "-count" */ 6 64 "", /* "-exclude" */ 6 65 "", /* "-group" */ 6 66 "", /* "-group_footer_trigger" */ 6 67 "", /* "-group_footer_value" */ 6 68 "", /* "-group_header_trigger" */ 6 69 "", /* "-group_header_value" */ 6 70 "", /* "-outline" */ 6 71 "", /* "-page_break" */ 6 72 "", /* "-row_footer_value" */ 6 73 "", /* "-row_header_value" */ 6 74 "", /* "-subcount" */ 6 75 "", /* "-subtotal" */ 6 76 "" /* "-total" */ 6 77 ), 6 78 6 79 2 SPECIFIC_COLUMN (6), 6 80 6 81 3 NAME char (32) varying init ( 6 82 6 83 "-alignment", /* "[alignment_default]" */ 6 84 "-editing", /* "" */ 6 85 "-folding", /* "fill" */ 6 86 "-separator", /* " " */ 6 87 "-title", /* "[database_column_name]" */ 6 88 "-width" /* "[width_default]" */ 6 89 ), 6 90 6 91 3 VALUE char (32) varying init ( 6 92 6 93 "[alignment_default]", /* "-alignment" */ 6 94 "", /* "-editing" */ 6 95 "fill", /* "-folding" */ 6 96 " ", /* "-separator" */ 6 97 "[database_column_name]", /* "-title" */ 6 98 "[width_default]" /* "-width" */ 6 99 ); 6 100 6 101 dcl 1 OPTION_NAMES_AS_ARGS (30) static int options (constant), 6 102 6 103 2 LONG_NAME char (32) varying init ( 6 104 6 105 "-alignment", /* sorted based on their values */ 6 106 "-column_order", 6 107 "-count", 6 108 "-delimiter", 6 109 "-editing", 6 110 "-exclude", 6 111 "-folding", 6 112 "-format_document_controls", 6 113 "-group", 6 114 "-group_footer_trigger", 6 115 "-group_footer_value", 6 116 "-group_header_trigger", 6 117 "-group_header_value", 6 118 "-hyphenation", 6 119 "-outline", 6 120 "-page_break", 6 121 "-page_footer_value", 6 122 "-page_header_value", 6 123 "-page_length", 6 124 "-page_width", 6 125 "-row_footer_value", 6 126 "-row_header_value", 6 127 "-separator", 6 128 "-subcount", 6 129 "-subtotal", 6 130 "-title", 6 131 "-title_line", 6 132 "-total", 6 133 "-truncation", 6 134 "-width" 6 135 ), 6 136 6 137 2 SHORT_NAME char (5) varying init ( 6 138 6 139 "-al", /* sorted based on their values */ 6 140 "-co", 6 141 "-ct", 6 142 "-dm", 6 143 "-ed", 6 144 "-ex", 6 145 "-fdc", 6 146 "-fold", 6 147 "-gft", 6 148 "-gfv", 6 149 "-ght", 6 150 "-ghv", 6 151 "-gr", 6 152 "-hph", 6 153 "-out", 6 154 "-pb", 6 155 "-pfv", 6 156 "-phv", 6 157 "-pl", 6 158 "-pw", 6 159 "-rfv", 6 160 "-rhv", 6 161 "-sct", 6 162 "-sep", 6 163 "-stt", 6 164 "-tc", 6 165 "-tl", 6 166 "-tt", 6 167 "-ttl", 6 168 "-wid" 6 169 ), 6 170 6 171 2 LONG_NAME_IN_SHORT_NAME_ORDER char (32) varying init ( 6 172 6 173 /* sorted based on the values of short_name */ 6 174 6 175 "-alignment", /* -al */ 6 176 "-column_order", /* -co */ 6 177 "-count", /* -ct */ 6 178 "-delimiter", /* -dm */ 6 179 "-editing", /* -ed */ 6 180 "-exclude", /* -ex */ 6 181 "-format_document_controls", /* -fdc */ 6 182 "-folding", /* -fold */ 6 183 "-group_footer_trigger", /* -gfv */ 6 184 "-group_footer_value", /* -gfv */ 6 185 "-group_header_trigger", /* -ghv */ 6 186 "-group_header_value", /* -ghv */ 6 187 "-group", /* -gr */ 6 188 "-hyphenation", /* -hph */ 6 189 "-outline", /* -out */ 6 190 "-page_break", /* -pb */ 6 191 "-page_footer_value", /* -pfv */ 6 192 "-page_header_value", /* -phv */ 6 193 "-page_length", /* -pl */ 6 194 "-page_width", /* -pw */ 6 195 "-row_footer_value", /* -rfv */ 6 196 "-row_header_value", /* -rhv */ 6 197 "-subcount", /* -sct */ 6 198 "-separator", /* -sep */ 6 199 "-subtotal", /* -stt */ 6 200 "-truncation", /* -tc */ 6 201 "-title_line", /* -tl */ 6 202 "-total", /* -tt */ 6 203 "-title", /* -ttl */ 6 204 "-width" /* -wid */ 6 205 ); 6 206 6 207 /* END INCLUDE FILE linus_format_options */ 1926 1927 7 1 /* BEGIN INCLUDE FILE ... linus_names_and_values.incl.pl1 7 2* 7 3* Names and values used for producing reports. These structures provide for 7 4* the passing of format report option names and values between requests and 7 5* the "linus_options" subroutine. The caller (usually a request) fills in the 7 6* "option_name_table" structure, or calls a bulk load entry point such as 7 7* linus_options$get_all. The linus_options subroutine uses the 7 8* "name_value_info" structure and the "names_and_values" character string to 7 9* return the requested names and values. 7 10* 7 11* Al Dupuis - August 1983 7 12**/ 7 13 /* format: off */ 7 14 7 15 /* Describes the "names_and_values" character string below. */ 7 16 7 17 dcl 1 name_value_info (no_of_names_and_values) aligned based (names_and_values_info_ptr), 7 18 2 name, /* location and length in temp seg */ 7 19 3 index fixed bin (21), 7 20 3 length fixed bin (21), 7 21 2 value, /* location and length in temp seg */ 7 22 3 index fixed bin (21), 7 23 3 length fixed bin (21); 7 24 7 25 /* Described by "name_value_info" structure above. */ 7 26 7 27 dcl names_and_values char (size_of_names_and_values) based (names_and_values_ptr); 7 28 7 29 dcl names_and_values_info_ptr ptr init (null()); 7 30 dcl names_and_values_ptr ptr init (null()); 7 31 dcl no_of_names_and_values fixed bin (21); 7 32 dcl size_of_names_and_values fixed bin (21); 7 33 7 34 /* Filled in by the caller (i.e. "list_format_options" request) */ 7 35 7 36 dcl 1 option_name_table (no_of_options_in_name_table) based (option_name_table_ptr), 7 37 2 the_name char (32) varying, /* option name */ 7 38 2 the_identifier char (32) varying; /* null, column name, or star name */ 7 39 7 40 dcl no_of_options_in_name_table fixed bin (21); 7 41 dcl option_name_table_ptr ptr init (null()); 7 42 7 43 /* END INCLUDE FILE linus_names_and_values.incl.pl1 */ 1928 1929 8 1 /* BEGIN INCLUDE FILE linus_options_extents.incl.pl1 8 2* 8 3* Extents for the formatting options used for producing reports. 8 4* Kept as a separate include so that some programs may include this 8 5* file without including linus_format_options.incl.pl1 8 6* 8 7* Al Dupuis - August 1983 8 8* 8 9**/ 8 10 /* format: off */ 8 11 8 12 /* The three types of format options that we have. */ 8 13 8 14 dcl GENERAL_REPORT_OPTION fixed bin static int options (constant) init (1); 8 15 dcl GENERAL_COLUMN_OPTION fixed bin static int options (constant) init (2); 8 16 dcl SPECIFIC_COLUMN_OPTION fixed bin static int options (constant) init (3); 8 17 8 18 /* Used to determine how big the tables are without doing a hbound on it. */ 8 19 8 20 dcl NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (15); 8 21 dcl NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE fixed bin static int options (constant) init (9); 8 22 dcl NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (6); 8 23 8 24 /* Used to determine how much space is needed to list them. */ 8 25 8 26 dcl LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (10); /* -alignment */ 8 27 dcl LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH fixed bin static int options (constant) init (25); /* -format_document_controls */ 8 28 dcl LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (21); /* -group_footer_trigger */ 8 29 8 30 /* MAXIMUM_OPTION_IDENTIFIER_LENGTH + MAXIMUM_OPTION_NAME_LENGTH */ 8 31 8 32 dcl MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH fixed bin static int options (constant) init (101); 8 33 8 34 dcl MAXIMUM_OPTION_IDENTIFIER_LENGTH fixed bin static int options (constant) init (69); 8 35 dcl MAXIMUM_OPTION_NAME_LENGTH fixed bin static int options (constant) init (32); 8 36 dcl MAXIMUM_OPTION_VALUE_LENGTH fixed bin static int options (constant) init (4096); 8 37 8 38 /* Used to index into the OPTIONS tables defined in linus_format_options.incl.pl1. */ 8 39 8 40 dcl INDEX_FOR_DELIMITER fixed bin static int options (constant) init (1); 8 41 dcl INDEX_FOR_FORMAT_DOCUMENT_CONTROLS fixed bin static int options (constant) init (2); 8 42 dcl INDEX_FOR_HYPHENATION fixed bin static int options (constant) init (3); 8 43 dcl INDEX_FOR_PAGE_FOOTER_VALUE fixed bin static int options (constant) init (4); 8 44 dcl INDEX_FOR_PAGE_HEADER_VALUE fixed bin static int options (constant) init (5); 8 45 dcl INDEX_FOR_PAGE_LENGTH fixed bin static int options (constant) init (6); 8 46 dcl INDEX_FOR_PAGE_WIDTH fixed bin static int options (constant) init (7); 8 47 dcl INDEX_FOR_TITLE_LINE fixed bin static int options (constant) init (8); 8 48 dcl INDEX_FOR_TRUNCATION fixed bin static int options (constant) init (9); 8 49 8 50 dcl INDEX_FOR_COLUMN_ORDER fixed bin static int options (constant) init (1); 8 51 dcl INDEX_FOR_COUNT fixed bin static int options (constant) init (2); 8 52 dcl INDEX_FOR_EXCLUDE fixed bin static int options (constant) init (3); 8 53 dcl INDEX_FOR_GROUP fixed bin static int options (constant) init (4); 8 54 dcl INDEX_FOR_GROUP_FOOTER_TRIGGER fixed bin static int options (constant) init (5); 8 55 dcl INDEX_FOR_GROUP_FOOTER_VALUE fixed bin static int options (constant) init (6); 8 56 dcl INDEX_FOR_GROUP_HEADER_TRIGGER fixed bin static int options (constant) init (7); 8 57 dcl INDEX_FOR_GROUP_HEADER_VALUE fixed bin static int options (constant) init (8); 8 58 dcl INDEX_FOR_OUTLINE fixed bin static int options (constant) init (9); 8 59 dcl INDEX_FOR_PAGE_BREAK fixed bin static int options (constant) init (10); 8 60 dcl INDEX_FOR_ROW_FOOTER_VALUE fixed bin static int options (constant) init (11); 8 61 dcl INDEX_FOR_ROW_HEADER_VALUE fixed bin static int options (constant) init (12); 8 62 dcl INDEX_FOR_SUBCOUNT fixed bin static int options (constant) init (13); 8 63 dcl INDEX_FOR_SUBTOTAL fixed bin static int options (constant) init (14); 8 64 dcl INDEX_FOR_TOTAL fixed bin static int options (constant) init (15); 8 65 8 66 dcl INDEX_FOR_ALIGNMENT fixed bin static int options (constant) init (1); 8 67 dcl INDEX_FOR_EDITING fixed bin static int options (constant) init (2); 8 68 dcl INDEX_FOR_FOLDING fixed bin static int options (constant) init (3); 8 69 dcl INDEX_FOR_SEPARATOR fixed bin static int options (constant) init (4); 8 70 dcl INDEX_FOR_TITLE fixed bin static int options (constant) init (5); 8 71 dcl INDEX_FOR_WIDTH fixed bin static int options (constant) init (6); 8 72 8 73 /* END INCLUDE FILE linus_options_extents */ 1930 1931 9 1 /* BEGIN INCLUDE FILE linus_page_info.incl.pl1 9 2* 9 3* Written - Al Dupuis - August 1983 9 4**/ 9 5 /* format: off */ 9 6 9 7 dcl 1 formatted_page_info aligned based (formatted_page_ip), 9 8 2 maximum_number_of_detail_blocks fixed bin, /* the most that can appear on a page */ 9 9 2 page_header_length fixed bin, /* page header in lines */ 9 10 2 title_block_length fixed bin, /* titles in lines */ 9 11 2 page_footer_length fixed bin, /* page footer in lines */ 9 12 2 number_of_detail_blocks fixed bin, 9 13 2 detail_blocks (fpi_init_maximum_number_of_detail_blocks 9 14 refer (formatted_page_info.maximum_number_of_detail_blocks)), 9 15 3 row_number fixed bin (35), /* position in the table */ 9 16 3 beginning_line_number fixed bin, /* beginning line on page */ 9 17 3 group_header_length fixed bin, /* group header length in lines */ 9 18 3 row_header_length fixed bin, /* row header in lines */ 9 19 3 row_length fixed bin, /* row value in lines */ 9 20 3 subtotal_length fixed bin, /* subtotal in lines */ 9 21 3 subcount_length fixed bin, /* subcount in lines */ 9 22 3 total_length fixed bin, /* total in lines */ 9 23 3 count_length fixed bin, /* count in lines */ 9 24 3 row_footer_length fixed bin, /* row footer in lines */ 9 25 3 group_footer_length fixed bin; /* group footer length in lines */ 9 26 dcl formatted_page_ip ptr; 9 27 dcl fpi_init_maximum_number_of_detail_blocks fixed bin; 9 28 9 29 dcl 1 page_info aligned based (page_ip), 9 30 2 width fixed bin, /* width in chars */ 9 31 2 length fixed bin, /* length in lines */ 9 32 2 total_characters fixed bin (21), /* width * length */ 9 33 2 page_info_size fixed bin, /* size of this structure in words */ 9 34 2 page_ptr ptr, /* points to the actual page */ 9 35 2 page_overstrike_info_ptr ptr, /* points to the overstrike info */ 9 36 2 formatted_page_info_ptr ptr; /* points to formatted_page_info */ 9 37 9 38 dcl page_defined_as_chars (page_info.total_characters) char (1) based (page_info.page_ptr); 9 39 dcl page_defined_as_lines (page_info.length) char (page_info.width) based (page_info.page_ptr); 9 40 dcl page_defined_as_a_string char (page_info.total_characters) based (page_info.page_ptr); 9 41 dcl page_ip ptr; 9 42 9 43 dcl 1 page_overstrike_info aligned based (page_overstrike_ip), 9 44 2 number_of_bits_or_chars fixed bin (21), /* number of chars in the page */ 9 45 2 bit_map (page_info.total_characters /* on means this char on the page is overstruck */ 9 46 refer (page_overstrike_info.number_of_bits_or_chars)) bit (1) unaligned, 9 47 2 chars (page_info.total_characters /* this is the overstrike character */ 9 48 refer (page_overstrike_info.number_of_bits_or_chars)) char (1) unaligned; 9 49 dcl page_overstrike_ip ptr; 9 50 9 51 dcl 1 page_overstrike_info_redefined aligned based (page_overstrike_ip), 9 52 2 number_of_bits_or_chars fixed bin (21), 9 53 2 bit_map bit (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned, 9 54 2 chars char (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned; 9 55 9 56 /* END INCLUDE FILE linus_page_info.incl.pl1 */ 1932 1933 10 1 /* BEGIN INCLUDE FILE linus_report_info.incl.pl1 10 2* Information needed to control the report environment. 10 3* Al Dupuis - August 1983 10 4**/ 10 5 /* format: off */ 10 6 10 7 dcl 1 report_control_info aligned based (report_cip), 10 8 2 flags, 10 9 3 report_is_paginated bit (1) unaligned, /* paged or one continous stream */ 10 10 3 table_has_been_started bit (1) unaligned, /* table clean up is necessary */ 10 11 3 table_is_full bit (1) unaligned, /* no more retrieves are necessary */ 10 12 3 report_has_been_started bit (1) unaligned, /* report clean up is necessary */ 10 13 3 report_is_formatted bit (1) unaligned, /* no more formatting is necessary */ 10 14 3 permanent_report bit (1) unaligned, /* or disposable */ 10 15 3 permanent_table bit (1) unaligned, /* or disposable */ 10 16 3 report_has_just_been_completed bit (1) unaligned, /* used for printing timers */ 10 17 3 table_has_just_been_loaded bit (1) unaligned, /* used for printing timers */ 10 18 3 multi_pass_mode bit (1) unaligned, /* on if we are to do more than 1 pass */ 10 19 3 available bit (26) unaligned, 10 20 2 format_options_flags, /* used to determine if value is default */ 10 21 3 general_report_default_value (NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE) bit (1) unaligned, 10 22 3 general_column_default_value (NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE) bit (1) unaligned, 10 23 2 value_seg_ptr ptr, /* the options value seg */ 10 24 2 name_value_area_ptr ptr, /* area for name-value allocations */ 10 25 2 name_value_temp_seg_ptr ptr, /* temp seg for name-value space */ 10 26 2 display_work_area_ptr ptr, /* display workspace */ 10 27 2 report_temp_seg_ptr ptr, /* report workspace */ 10 28 2 report_work_area_ptr ptr, /* report workspace */ 10 29 2 format_report_info_ptr ptr, /* info needed to create a report */ 10 30 2 input_string_temp_seg_ptr ptr, /* report workspace */ 10 31 2 output_string_temp_seg_ptr ptr, /* report workspace */ 10 32 2 editing_strings_temp_seg_ptr ptr, /* report workspace */ 10 33 2 headers_temp_seg_ptr ptr, /* report workspace */ 10 34 2 display_iocb_ptr ptr, /* report is displayed through this */ 10 35 2 selection_expression_identifier fixed bin, /* current selection expression */ 10 36 2 options_identifier fixed bin, /* current set of options */ 10 37 2 report_identifier fixed bin, /* current report */ 10 38 2 retrieval_identifier fixed bin, /* current retrieval */ 10 39 2 no_of_rows_retrieved fixed bin (35), /* current no of rows */ 10 40 2 no_of_formatted_pages fixed bin (21), /* current no of pages */ 10 41 2 number_of_passes fixed bin, /* number of times report will be formatted */ 10 42 2 table_loading_time float bin (63), 10 43 2 table_sorting_time float bin (63), 10 44 2 table_deletion_time float bin (63), 10 45 2 report_setup_time float bin (63), 10 46 2 report_formatting_time float bin (63), 10 47 2 report_display_time float bin (63), 10 48 2 report_deletion_time float bin (63), 10 49 2 ssu_evaluate_active_string_time float bin (63), 10 50 2 temp_dir_unique_id bit (36), /* uid of temp dir */ 10 51 2 temp_dir_name char (168) unaligned; /* the dir where we place the retrieved table and report */ 10 52 dcl report_cip ptr init (null ()); 10 53 10 54 /* END INCLUDE FILE linus_report_info.incl.pl1 */ 1934 1935 11 1 /* BEGIN INCLUDE FILE linus_report_structures.incl.pl1 11 2* 11 3* Written - Al Dupuis - August 1983 11 4**/ 11 5 /* format: off */ 11 6 11 7 /* Used in column_info.alignment and column_info.linus_data_type */ 11 8 11 9 dcl BIT_DATA_TYPE fixed bin static int options (constant) init (1); 11 10 dcl BOTH_ALIGNMENT fixed bin static int options (constant) init (1); 11 11 dcl CENTER_ALIGNMENT fixed bin static int options (constant) init (2); 11 12 dcl CHAR_DATA_TYPE fixed bin static int options (constant) init (2); 11 13 dcl DECIMAL_ALIGNMENT fixed bin static int options (constant) init (3); 11 14 dcl DECIMAL_DATA_TYPE fixed bin static int options (constant) init (3); 11 15 dcl LEFT_ALIGNMENT fixed bin static int options (constant) init (4); 11 16 dcl NUMERIC_DATA_TYPE fixed bin static int options (constant) init (4); 11 17 dcl RIGHT_ALIGNMENT fixed bin static int options (constant) init (5); 11 18 11 19 dcl 1 column_info aligned based (column_ip), 11 20 2 flags, 11 21 3 folding_is_fill bit (1) unaligned, /* fill or truncate */ 11 22 3 outline bit (1) unaligned, /* on means the display has been suppressed */ 11 23 3 editing bit (1) unaligned, /* on means there is an editing request */ 11 24 3 restore_editing bit (1) unaligned, /* used to toggle the editing bit */ 11 25 3 available bit (32) unaligned, 11 26 2 order fixed bin, /* as specified by the user */ 11 27 2 input_column fixed bin, /* # of the column in the table */ 11 28 2 output_column fixed bin, /* # of the column on the page */ 11 29 2 output_line fixed bin, /* within the block */ 11 30 2 starting_position fixed bin, /* within the page width */ 11 31 2 width fixed bin, /* in characters */ 11 32 2 alignment fixed bin, /* set to one of the above alignment constants */ 11 33 2 decimal_position fixed bin, /* only needed for decimal alignment */ 11 34 2 linus_data_type fixed bin, /* set to one of the above data type constants */ 11 35 2 editing_string_length fixed bin (21), /* before evaluation */ 11 36 2 editing_string_result_length fixed bin (21), /* after evaluation */ 11 37 2 editing_string_ptr ptr, /* before evaluation */ 11 38 2 editing_string_result_ptr ptr, /* after evaluation */ 11 39 2 prefix_character char (1) varying; /* column prefix */ 11 40 dcl column_ip ptr; 11 41 11 42 dcl 1 columns_info aligned based (columns_ip), /* an array of column_info's */ 11 43 2 number_of_columns fixed bin, 11 44 2 columns (initialize_number_of_columns 11 45 refer (columns_info.number_of_columns)) like column_info; 11 46 dcl columns_ip ptr; 11 47 11 48 dcl 1 column_map (column_map_number_of_columns) aligned based (column_mp), 11 49 2 present bit (1), /* the column is present in the list */ 11 50 2 position fixed bin; /* position where this column was found in the list */ 11 51 dcl column_map_number_of_columns fixed bin; 11 52 dcl column_mp ptr; 11 53 11 54 dcl 1 count_columns_info like columns_info based (count_columns_ip); 11 55 dcl count_columns_ip ptr; 11 56 11 57 dcl 1 count_info like total_info based (count_ip); 11 58 dcl count_ip ptr; 11 59 11 60 /* Used to access the current row from the table */ 11 61 dcl current_row_value char (table_info.row_value_length) based (status.current_row_ptr); 11 62 11 63 /* Used to pick up the value before or after evaluation */ 11 64 dcl editing_string_result char (editing_string_rl) based (editing_string_rp); 11 65 dcl editing_string_rl fixed bin; 11 66 dcl editing_string_rp ptr; 11 67 11 68 dcl editing_strings_next_byte fixed bin (21); 11 69 /* Used to store editing strings before and after evaluation. */ 11 70 dcl editing_strings_temp_seg char (maximum_segment_size) based (editing_strings_tsp); 11 71 dcl editing_strings_temp_seg_as_an_array (maximum_segment_size) char (1) based (editing_strings_tsp); 11 72 dcl editing_strings_tsp ptr; 11 73 11 74 dcl 1 format_report_info aligned based (format_report_ip), 11 75 2 flags, 11 76 3 unlimited_page_length bit (1) unaligned, /* -page_length equal to zero */ 11 77 3 unlimited_page_width bit (1) unaligned, /* -page_width equal to zero */ 11 78 3 page_header_is_defined bit (1) unaligned, /* -page_header_value */ 11 79 3 group_header_is_defined bit (1) unaligned, /* -group_header_value */ 11 80 3 group_header_trigger_is_defined bit (1) unaligned, /* -group_header_trigger */ 11 81 3 title_block_is_defined bit (1) unaligned, /* -title_line */ 11 82 3 row_header_is_defined bit (1) unaligned, /* -row_header_value */ 11 83 3 row_value_is_defined bit (1) unaligned, /* if all of the columns weren't excluded */ 11 84 3 row_footer_is_defined bit (1) unaligned, /* -row_footer_value */ 11 85 3 group_footer_is_defined bit (1) unaligned, /* -group_footer_value */ 11 86 3 group_footer_trigger_is_defined bit (1) unaligned, /* -group_footer_trigger */ 11 87 3 page_footer_is_defined bit (1) unaligned, /* -page_footer_value */ 11 88 3 editing_is_defined bit (1) unaligned, /* -editing */ 11 89 3 exclude_is_defined bit (1) unaligned, /* -exclude */ 11 90 3 group_is_defined bit (1) unaligned, /* -group */ 11 91 3 outline_is_defined bit (1) unaligned, /* -outline */ 11 92 3 page_break_is_defined bit (1) unaligned, /* -page_break */ 11 93 3 subtotal_is_defined bit (1) unaligned, /* -subtotal */ 11 94 3 subcount_is_defined bit (1) unaligned, /* -subcount */ 11 95 3 total_is_defined bit (1) unaligned, /* -total */ 11 96 3 count_is_defined bit (1) unaligned, /* -count */ 11 97 3 available bit (15) unaligned, 11 98 2 page_width fixed bin, /* as given by the user */ 11 99 2 page_length fixed bin, /* as given by the user */ 11 100 2 number_of_formatted_rows fixed bin (35), /* updated at the end of each page */ 11 101 2 editing_strings_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 11 102 2 headers_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 11 103 2 report_iocb_ptr ptr, /* for saving copies of the page */ 11 104 2 table_info_ptr ptr, /* to avoid repetitive calls to linus_table$info */ 11 105 2 format_document_op ptr, /* format_document_options structure */ 11 106 2 page_info_ptr ptr, /* page_info structure */ 11 107 2 copy_of_page_info_ptr ptr, /* version of page_info structure that can be changed */ 11 108 /* after each page */ 11 109 2 formatted_page_info_ptr ptr, /* formatted_page_info structure */ 11 110 2 overstrike_info_ptr ptr, /* page_overstrike_info structure */ 11 111 2 status_ptr ptr, /* status structure */ 11 112 2 template_map_ptr ptr, /* template_map array */ 11 113 2 page_header_info_ptr ptr, /* header_info structure */ 11 114 2 page_footer_info_ptr ptr, /* header_info structure */ 11 115 2 group_header_info_ptr ptr, /* header_info structure */ 11 116 2 group_footer_info_ptr ptr, /* header_info structure */ 11 117 2 group_header_trigger_info_ptr ptr, /* group_info structure */ 11 118 2 group_footer_trigger_info_ptr ptr, /* group_info structure */ 11 119 2 row_header_info_ptr ptr, /* header_info structure */ 11 120 2 row_footer_info_ptr ptr, /* header_info structure */ 11 121 2 title_block_columns_info_ptr ptr, /* title_block_columns_info structure */ 11 122 2 title_block_info_ptr ptr, /* title_block_info structure */ 11 123 2 input_columns_info_ptr ptr, /* input_columns_info structure */ 11 124 2 input_columns_order_ptr ptr, /* input_columns_order array */ 11 125 2 output_columns_info_ptr ptr, /* output_columns_info structure */ 11 126 2 group_info_ptr ptr, /* group_info structure */ 11 127 2 outline_info_ptr ptr, /* outline_info structure */ 11 128 2 page_break_info_ptr ptr, /* page_break_info structure */ 11 129 2 subtotal_info_ptr ptr, /* subtotal_info structure */ 11 130 2 subcount_info_ptr ptr, /* subcount_info structure */ 11 131 2 total_info_ptr ptr, /* total_info structure */ 11 132 2 count_info_ptr ptr, /* count_info structure */ 11 133 2 row_value_template_info_ptr ptr, /* row_value_template_info structure */ 11 134 2 generic_template_ptr ptr, /* generic_template char string */ 11 135 2 header_part_delimiter char (1) unaligned, /* delimits the different portions of a header/footer */ 11 136 2 truncation_indicator char (32) varying unaligned, /* used to indicate that truncation has occured */ 11 137 2 report_directory_name char (168) unaligned, /* dir where we place copies of the page */ 11 138 2 report_entry_name char (32) unaligned; /* entry name portion of above */ 11 139 dcl format_report_ip ptr; 11 140 11 141 /* used to format page/row headers and footers */ 11 142 dcl generic_template char (generic_template_length) based (generic_tp); 11 143 dcl generic_template_length fixed bin; 11 144 dcl generic_tp ptr; 11 145 11 146 /* these columns form a group of rows and are used with outlining, etc. */ 11 147 dcl 1 group_info aligned based (group_ip), 11 148 2 number_of_columns_to_group fixed bin, 11 149 2 column_number (gi_init_number_of_columns_to_group 11 150 refer (group_info.number_of_columns_to_group)) fixed bin; 11 151 dcl gi_init_number_of_columns_to_group fixed bin; 11 152 dcl group_ip ptr; 11 153 11 154 dcl headers_next_byte fixed bin (21); 11 155 /* used to hold the page/row headers/footers, and temp space for totals/subtotals. */ 11 156 dcl headers_temp_seg char (maximum_segment_size) based (headers_tsp); 11 157 dcl headers_temp_seg_as_an_array (maximum_segment_size) char (1) based (headers_tsp); 11 158 dcl headers_tsp ptr; 11 159 11 160 dcl 1 header_info aligned based (header_ip), 11 161 2 number_of_lines fixed bin, /* number of header lines typed in by the user */ 11 162 2 maximum_number_of_parts fixed bin, /* 3 parts maximum (left, right, and center) */ 11 163 2 lines (hi_init_number_of_lines 11 164 refer (header_info.number_of_lines)), 11 165 3 parts (hi_init_maximum_number_of_parts 11 166 refer (header_info.maximum_number_of_parts)), 11 167 4 flags, 11 168 5 present bit (1) unaligned, /* this particular part is defined */ 11 169 5 active bit (1) unaligned, /* and it contains active functions */ 11 170 5 available bit (34) unaligned, 11 171 4 index fixed bin (21), /* before evaluation */ 11 172 4 length fixed bin (21), /* before evaluation */ 11 173 4 starting_position fixed bin, /* within the page width */ 11 174 4 width fixed bin, /* within the page width */ 11 175 4 alignment fixed bin; /* left, right, or center */ 11 176 dcl header_ip ptr; 11 177 dcl hi_init_maximum_number_of_parts fixed bin; 11 178 dcl hi_init_number_of_lines fixed bin; 11 179 11 180 dcl initialize_number_of_columns fixed bin; /* columns_info refer extent */ 11 181 11 182 dcl 1 input_columns_info aligned like columns_info based (input_columns_ip); /* the columns in the table */ 11 183 dcl input_columns_ip ptr; 11 184 11 185 dcl input_columns_order (input_columns_info.number_of_columns) fixed bin based (input_columns_op); 11 186 dcl input_columns_op ptr; 11 187 11 188 dcl maximum_segment_size fixed bin (21); /* in characters */ 11 189 11 190 /* Used to access the next row from the table */ 11 191 dcl next_row_value char (table_info.row_value_length) based (status.next_row_ptr); 11 192 11 193 dcl 1 outline_info aligned based (outline_ip), /* who gets oulining attempted */ 11 194 2 maximum_number_of_single_columns fixed bin, 11 195 2 maximum_number_of_grouping_columns fixed bin, 11 196 2 number_of_single_columns fixed bin, /* columns who are not a member of the group */ 11 197 2 number_of_grouping_columns fixed bin, /* columns who are a member of the group */ 11 198 2 single_columns (oi_init_maximum_number_of_single_columns refer ( 11 199 outline_info.maximum_number_of_single_columns)) fixed bin, 11 200 2 grouping_columns (oi_init_maximum_number_of_grouping_columns refer ( 11 201 outline_info.maximum_number_of_grouping_columns)) fixed bin; 11 202 dcl oi_init_maximum_number_of_grouping_columns fixed bin; 11 203 dcl oi_init_maximum_number_of_single_columns fixed bin; 11 204 dcl outline_ip ptr; 11 205 11 206 dcl 1 output_columns_info like columns_info based (output_columns_ip); /* the columns that will go on the page */ 11 207 dcl output_columns_ip ptr; 11 208 11 209 /* these columns will be checked to determine if a page break is required */ 11 210 dcl 1 page_break_info aligned based (page_break_ip), 11 211 2 number_of_columns fixed bin, 11 212 2 columns (pbi_init_number_of_columns refer ( 11 213 page_break_info.number_of_columns)) bit (1) unaligned; 11 214 dcl page_break_ip ptr; 11 215 dcl pbi_init_number_of_columns fixed bin; 11 216 11 217 /* Used to access the previous row from the table */ 11 218 dcl previous_row_value char (table_info.row_value_length) based (status.previous_row_ptr); 11 219 11 220 /* The templates for the row value (also used for titles, subtotals, and totals.) */ 11 221 dcl 1 row_value_template_info like template_info based (row_value_template_ip); 11 222 dcl row_value_template_ip ptr; 11 223 11 224 /* main execution control structure for linus_fr_build_page */ 11 225 dcl 1 status aligned based (status_pointer), 11 226 2 flags, 11 227 3 still_formatting_detail_blocks bit (1), /* turned on while we are doing detail blocks */ 11 228 3 first_row_of_report bit (1), /* turned on when we are on the first row of a report */ 11 229 3 last_row_of_report bit (1), /* turned on when we are on the last row of a report */ 11 230 3 first_row_on_page bit (1), /* turned on when we are on the 1st row of a page */ 11 231 3 page_overflow bit (1), /* turned on when we are backing up */ 11 232 3 subtotals_ejection_in_progress bit (1), /* turned on when subtotals are being ejected */ 11 233 3 subcounts_ejection_in_progress bit (1), /* turned on when subcounts are being ejected */ 11 234 3 totals_ejection_in_progress bit (1), /* turned on when totals are being ejected */ 11 235 3 counts_ejection_in_progress bit (1), /* turned on when counts are being ejected */ 11 236 3 header_being_evaluated bit (1), /* turned on during header evaluation */ 11 237 3 detail_block_used_some_lines bit (1), /* turned on when a row header/footer/value/subtotal/total uses a line */ 11 238 3 row_has_been_processed_before bit (1), /* turned on when this row has been backed out of the previous page */ 11 239 3 last_pass bit (1), /* true if this is the last pass */ 11 240 2 previous_row_ptr ptr, /* points to the previous row (or null) */ 11 241 2 current_row_ptr ptr, /* points to the current row */ 11 242 2 next_row_ptr ptr, /* points to the next row (or null) */ 11 243 2 total_number_of_rows_used fixed bin, /* total # per page, used to make sure we don't */ 11 244 /* backup over the 1st row */ 11 245 2 current_pass_number fixed bin, /* [display_builtins current_pass_number] */ 11 246 2 current_row_number fixed bin (35), /* [display_builtins current_row_number] */ 11 247 2 current_column_number fixed bin, /* set to the current output column during row evaluation */ 11 248 2 current_page_number fixed bin (21), /* [display_builtins page_number] */ 11 249 2 current_line_on_page fixed bin, /* this is where the next thing is placed on the page */ 11 250 2 remaining_lines_on_page fixed bin, /* used in estimating if something will fit */ 11 251 2 highest_row_formatted fixed bin, /* used to keep track of rows backed out of the page */ 11 252 2 current_header_line fixed bin, /* set to the current header line during header evaluation */ 11 253 2 current_header_part fixed bin, /* set to the current header part during header evaluation */ 11 254 2 number_of_lines_needed_for_detail_block fixed bin, /* sum of row header, footer, and value */ 11 255 2 number_of_lines_needed_for_row_header fixed bin, /* may be zero */ 11 256 2 number_of_lines_needed_for_row_value fixed bin, /* may be zero */ 11 257 2 number_of_lines_needed_for_row_footer fixed bin, /* may be zero */ 11 258 2 number_of_lines_needed_for_page_footer fixed bin, /* may be zero */ 11 259 2 number_of_lines_needed_for_group_header fixed bin, /* may be zero */ 11 260 2 number_of_lines_needed_for_group_footer fixed bin, /* may be zero */ 11 261 2 last_row_number fixed bin (35), /* zero unless multi-pass */ 11 262 2 last_page_number fixed bin, /* zero unless multi-pass mode */ 11 263 2 object_being_evaluated char (16) varying; /* "page header", "row value", etc. */ 11 264 dcl status_pointer ptr; 11 265 11 266 dcl 1 subcount_columns_info like columns_info based (subcount_columns_ip); 11 267 dcl subcount_columns_ip ptr; 11 268 11 269 dcl 1 subcount_generation_info like subtotal_generation_info based (subcount_generation_ip); 11 270 dcl subcount_generation_ip ptr; 11 271 11 272 dcl 1 subcount_info like subtotal_info based (subcount_ip); 11 273 dcl subcount_ip ptr; 11 274 11 275 dcl 1 subtotal_columns_info like columns_info based (subtotal_columns_ip); 11 276 dcl subtotal_columns_ip ptr; 11 277 11 278 /* Used to restore subtotals when backing up on a page. */ 11 279 dcl 1 subtotal_generation_info aligned based (subtotal_generation_ip), 11 280 2 maximum_number_of_generation_blocks fixed bin, /* maximum number of subtotals possibly generated per page + 1 */ 11 281 2 number_of_subtotals fixed bin, /* # of subtotals we're taking */ 11 282 2 current_generation_block fixed bin, /* slot for next subtotal generation */ 11 283 2 generations (0:sgi_init_number_of_generations 11 284 refer (subtotal_generation_info.maximum_number_of_generation_blocks)), 11 285 3 subtotals (sgi_init_number_of_subtotals /* value of the subtotals when the break occured */ 11 286 refer (subtotal_generation_info.number_of_subtotals)) float dec (59); 11 287 dcl sgi_init_number_of_generations fixed bin; 11 288 dcl sgi_init_number_of_subtotals fixed bin; 11 289 dcl subtotal_generation_ip ptr; 11 290 11 291 dcl 1 subtotal_info aligned based (subtotal_ip), 11 292 2 columns_info_ptr ptr, /* points to subtotal_columns_info structure */ 11 293 2 subtotal_generation_info_ptr ptr, /* points to subtotal_generations_info structure */ 11 294 2 number_of_columns_to_subtotal fixed bin, /* the number of subtotals */ 11 295 2 highest_level fixed bin, /* the largest number of different subtotals on a single column */ 11 296 2 current_level fixed bin, /* the current level of subtotals being evaluated */ 11 297 2 columns (si_init_number_of_columns_to_subtotal 11 298 refer (subtotal_info.number_of_columns_to_subtotal)), 11 299 3 flags, 11 300 4 reset bit (1) unaligned, /* reset or running subtotals */ 11 301 4 group_column bit (1) unaligned, /* on means the watch column is a grouping column */ 11 302 4 available bit (34) unaligned, 11 303 3 input_column fixed bin, /* # of the input column for accumulations */ 11 304 3 watch_column fixed bin, /* # of the column to watch for generation */ 11 305 3 level fixed bin, /* different subtotals on the same column receive higher level numbers */ 11 306 3 ioa_string char (5) varying, /* used to edit the "subtotal" field */ 11 307 3 subtotal float dec (59); /* used to hold the subtotal until it needs /* 11 308* /* to be placed on the page */ 11 309 dcl si_init_number_of_columns_to_subtotal fixed bin; 11 310 dcl subtotal_ip ptr; 11 311 11 312 dcl 1 template_info aligned based (template_ip), /* templates that are laid down before the column values */ 11 313 2 template_width fixed bin, /* how wide they are */ 11 314 2 number_of_templates fixed bin, /* how many there are */ 11 315 2 templates (ti_init_number_of_templates refer (template_info.number_of_templates)) /* the templates */ 11 316 char (ti_init_template_width refer (template_info.template_width)); 11 317 dcl ti_init_number_of_templates fixed bin; 11 318 dcl template_ip ptr; 11 319 dcl ti_init_template_width fixed bin; 11 320 11 321 /* used to determine which templates have been placed */ 11 322 dcl template_map (template_map_number_of_bits) bit (1) unaligned based (template_mp); 11 323 dcl template_mp ptr; 11 324 dcl template_map_number_of_bits fixed bin; 11 325 dcl template_map_defined_as_a_string bit (template_map_number_of_bits) based (template_mp); 11 326 11 327 dcl template char (template_length) based (template_ptr); 11 328 dcl template_length fixed bin; 11 329 dcl template_ptr ptr; 11 330 11 331 dcl 1 title_block_columns_info like columns_info based (title_block_columns_ip); /* output columns for the titles */ 11 332 dcl title_block_columns_ip ptr; 11 333 11 334 /* holds the formatted title block after page 1 is finished */ 11 335 dcl 1 title_block_info aligned based (title_block_ip), 11 336 2 number_of_lines fixed bin, /* how many lines there are */ 11 337 2 line_length fixed bin, /* how long the lines are */ 11 338 2 lines (tbi_init_number_of_lines refer ( /* the formatted lines */ 11 339 title_block_info.number_of_lines)) char (tbi_init_line_length refer ( 11 340 title_block_info.line_length)); 11 341 dcl tbi_init_line_length fixed bin; 11 342 dcl tbi_init_number_of_lines fixed bin; 11 343 dcl title_block_ip ptr; 11 344 11 345 dcl 1 total_columns_info like columns_info based (total_columns_ip); /* output_columns_info for totals */ 11 346 dcl total_columns_ip ptr; 11 347 11 348 dcl 1 total_info aligned based (total_ip), 11 349 2 columns_info_ptr ptr, /* points to total_columns_info structure */ 11 350 2 number_of_columns_to_total fixed bin, /* # to total */ 11 351 2 columns (ti_init_number_of_columns_to_total 11 352 refer (total_info.number_of_columns_to_total)), 11 353 3 input_column fixed bin, /* the input column number */ 11 354 3 ioa_string char (5) varying, /* used to edit the "total" field */ 11 355 3 total float dec (59); /* used to hold the total until it's placed on the page */ 11 356 dcl ti_init_number_of_columns_to_total fixed bin; 11 357 dcl total_ip ptr; 11 358 11 359 /* END INCLUDE FILE linus_report_structures.incl.pl1 */ 1936 1937 12 1 /* BEGIN INCLUDE FILE linus_table_control.incl.pl1 */ 12 2 12 3 /* HISTORY: written 9/8/82 Dave Schimke */ 12 4 12 5 dcl 1 table_control_info based (table_control_ip), 12 6 2 selection_expression_identifier fixed bin, /* current processed lila */ 12 7 /* expression */ 12 8 2 row_info_ptr ptr init(null), /* saved row_segs_ip */ 12 9 2 component_ptrs_ptr ptr init(null), /* ptr to array of */ 12 10 /* component ptrs */ 12 11 2 max_number_of_components fixed bin, /* limit of msf_seg_count */ 12 12 2 msf_seg_count fixed bin init (0), /* number of components in*/ 12 13 /* the msf */ 12 14 2 max_number_of_rows_per_seg fixed bin(21), /* number of rows that */ 12 15 /* will fit in each */ 12 16 /* component of the msf */ 12 17 2 retrieval_id fixed bin init(0), /* id of this retrieval */ 12 18 /* (for sync) */ 12 19 2 table_info_ptr ptr init (null), /* table state info */ 12 20 2 fcb_ptr ptr init (null), /* ptr to file control */ 12 21 /* block of table_msf */ 12 22 2 table_msf char (27) init (""), /* name of table msf */ 12 23 2 temp_directory char (168) init (""), /* temp_dir for table */ 12 24 2 info_area_ptr ptr init (null), /* area for table_info */ 12 25 2 work_area_ptr ptr init (null), /* work area for all */ 12 26 /* other needs */ 12 27 2 incremental_retrieval_arg_ptr 12 28 ptr init (null), /* ptr to arg list used */ 12 29 /* for "-another" calls */ 12 30 2 incremental_retrieval_char_ptr 12 31 ptr init (null), /* ptr to char descriptors*/ 12 32 /* for arg list */ 12 33 2 char_output_string_ptr ptr init (null), /* ptr to character string*/ 12 34 2 current_component_ptr ptr init (null), /* ptr to the component */ 12 35 /* currently being loaded*/ 12 36 2 current_seg_row_count fixed bin(35) init (0), 12 37 /* number of rows in */ 12 38 /* current seg */ 12 39 2 flags, 12 40 3 permanent aligned bit(1), /* "1"b if non-disposable */ 12 41 3 sorted bit(1), /* has table been sorted? */ 12 42 3 mbz1 bit(34) unal; 12 43 12 44 dcl table_control_ip ptr; 12 45 12 46 /* END INCLUDE FILE linus_table_control.incl.pl1 */ 12 47 1938 1939 13 1 /* BEGIN INCLUDE FILE linus_table_info.incl.pl1 -- Dave Schimke 1/5/83 */ 13 2 /* 13 3*09/28/83 Al Dupuis: Added the store_args_ptr variable and the store_args structure. 13 4**/ 13 5 dcl 1 table_info aligned based (table_ip), /* info on displayable table */ 13 6 2 retrieval_identifier fixed bin , /* current retrieval id */ 13 7 2 row_count fixed bin(35), /* number of rows in table */ 13 8 2 column_count fixed bin, /* number of columns in table */ 13 9 2 maximum_column_name_length fixed bin, 13 10 /* largest column name */ 13 11 2 maximum_column_value_length fixed bin, 13 12 /* largest column length */ 13 13 2 row_value_length fixed bin (21), /* length of entire row */ 13 14 /* (sum of column lengths) */ 13 15 2 row_segs_info_ptr ptr init (null), /* ptr to the row segs info */ 13 16 2 store_args_ptr ptr, /* ptr to the arg list for storing rows */ 13 17 2 columns (ti_init_column_count refer (table_info.column_count)), 13 18 /* column info */ 13 19 3 column_name char (69) var, /* column header name */ 13 20 3 column_data_type bit (36), /* original data descriptor */ 13 21 3 column_length fixed bin (21), /* length of column in chars */ 13 22 3 column_index fixed bin (21); /* index of start of column in */ 13 23 /* row value */ 13 24 13 25 dcl 1 row_segs_info aligned based (row_segs_ip), 13 26 2 max_number_of_seg_ptrs fixed bin, 13 27 2 max_number_of_ptrs_per_seg fixed bin(21), 13 28 2 number_of_seg_ptrs fixed bin, 13 29 2 seg_ptr (rsi_init_max_number_of_seg_ptrs refer (row_segs_info. 13 30 max_number_of_seg_ptrs)) ptr unal; 13 31 13 32 dcl 1 row_ptrs aligned based (row_ptrs_p), 13 33 2 number_of_ptrs_this_seg fixed bin(21), 13 34 2 row_value_ptr (row_ptrs.number_of_ptrs_this_seg) ptr unal; 13 35 13 36 dcl row_value char (table_info.row_value_length) based (row_value_p); 13 37 dcl row_value_p ptr unal; /* ptr to the current row value */ 13 38 13 39 dcl row_segs_ip ptr; /* ptr to the seg of ptrs to */ 13 40 /* the arrays of row_value_ptrs */ 13 41 dcl row_ptrs_p ptr; /* ptr to an array of */ 13 42 /* row_value_ptrs */ 13 43 13 44 dcl 1 store_args aligned based (store_ap), 13 45 2 table_name char (30), 13 46 2 error_code fixed bin (35), 13 47 2 number_of_descriptors fixed bin, 13 48 2 header like arg_list.header, 13 49 2 arg_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 13 50 2 desc_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 13 51 2 argument_list_descriptors (init_number_of_descriptors refer 13 52 (store_args.number_of_descriptors)) like arg_descriptor; 13 53 13 54 dcl init_number_of_descriptors; 13 55 dcl rsi_init_max_number_of_seg_ptrs fixed bin; 13 56 dcl store_ap ptr; 13 57 dcl table_ip ptr; 13 58 dcl ti_init_column_count fixed bin; 13 59 13 60 /* END INCLUDE FILE linus_table_info.incl.pl1 */ 1940 1941 14 1 /* BEGIN mdbm_descriptor.incl.pl1 -- jaw 5/31/78 */ 14 2 /* modified by Jim Gray - - Nov. 1979, to change type from fixed bin(5) to 14 3* unsigned fixed bin(6), so new packed decimal data types could be handled. 14 4* also the duplicate mrds_descriptor.incl.pl1 was eliminated. */ 14 5 14 6 dcl 1 descriptor based (desc_ptr), /* map of Multics descriptor */ 14 7 2 version bit (1) unal, /* DBM handles vers. 1 only */ 14 8 2 type unsigned fixed bin (6) unal, /* data type */ 14 9 2 packed bit (1) unal, /* on if data item is packed */ 14 10 2 number_dims bit (4) unal, /* dimensions */ 14 11 2 size, /* size for string data */ 14 12 3 scale bit (12) unal, /* scale for num. data */ 14 13 3 precision bit (12) unal, /* prec. for num. data */ 14 14 2 array_info (num_dims), 14 15 3 lower_bound fixed bin (35), /* lower bound of dimension */ 14 16 3 upper_bound fixed bin (35), /* upper bound of dimension */ 14 17 3 multiplier fixed bin (35); /* element separation */ 14 18 14 19 dcl desc_ptr ptr; 14 20 dcl num_dims fixed bin init (0) ; /* more useful form of number_dims */ 14 21 14 22 /* END mdbm_descriptor.incl.pl1 */ 14 23 14 24 1942 1943 1944 end linus_fr_new_report; 1945 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/04/00 1648.3 linus_fr_new_report.pl1 >udd>sm>ds>w>ml>linus_fr_new_report.pl1 1916 1 11/02/83 1945.0 arg_descriptor.incl.pl1 >ldd>incl>arg_descriptor.incl.pl1 1918 2 08/05/86 0956.8 arg_list.incl.pl1 >ldd>incl>arg_list.incl.pl1 1920 3 11/01/84 1614.0 format_document_options.incl.pl1 >ldd>incl>format_document_options.incl.pl1 1922 4 02/02/78 1329.7 iox_modes.incl.pl1 >ldd>incl>iox_modes.incl.pl1 1924 5 07/29/86 1248.4 linus_lcb.incl.pl1 >ldd>incl>linus_lcb.incl.pl1 1926 6 09/16/83 1438.0 linus_format_options.incl.pl1 >ldd>incl>linus_format_options.incl.pl1 1928 7 09/16/83 1438.0 linus_names_and_values.incl.pl1 >ldd>incl>linus_names_and_values.incl.pl1 1930 8 09/16/83 1438.0 linus_options_extents.incl.pl1 >ldd>incl>linus_options_extents.incl.pl1 1932 9 09/16/83 1438.1 linus_page_info.incl.pl1 >ldd>incl>linus_page_info.incl.pl1 1934 10 09/16/83 1438.1 linus_report_info.incl.pl1 >ldd>incl>linus_report_info.incl.pl1 1936 11 09/16/83 1438.1 linus_report_structures.incl.pl1 >ldd>incl>linus_report_structures.incl.pl1 1938 12 09/16/83 1438.0 linus_table_control.incl.pl1 >ldd>incl>linus_table_control.incl.pl1 1940 13 10/06/83 1319.0 linus_table_info.incl.pl1 >ldd>incl>linus_table_info.incl.pl1 1942 14 10/14/83 1708.6 mdbm_descriptor.incl.pl1 >ldd>incl>mdbm_descriptor.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. BIT_DATA_TYPE constant fixed bin(17,0) initial dcl 11-9 ref 1815 BLANK 013543 constant char(1) initial packed unaligned dcl 1829 ref 177 185 360 737 1075 1403 1405 1418 1471 1527 1586 1773 BOTH_ALIGNMENT constant fixed bin(17,0) initial dcl 11-10 ref 1767 CENTER_ALIGNMENT constant fixed bin(17,0) initial dcl 11-11 ref 367 1169 1758 CHAR_DATA_TYPE constant fixed bin(17,0) initial dcl 11-12 ref 1818 COMMA constant char(1) initial packed unaligned dcl 1830 ref 1474 1500 1588 DECIMAL_ALIGNMENT constant fixed bin(17,0) initial dcl 11-13 ref 1771 DECIMAL_DATA_TYPE constant fixed bin(17,0) initial dcl 11-14 ref 1486 1708 1809 DEFAULT_SYLLABLE_SIZE constant fixed bin(17,0) initial dcl 1831 ref 1207 DIGITS 001041 constant char(10) initial packed unaligned dcl 1832 ref 1774 Direct_update 001034 constant fixed bin(17,0) initial dcl 4-15 set ref 1229* GENERAL_COLUMN 242 000000 constant structure array level 2 unaligned dcl 6-9 GENERAL_REPORT 000000 constant structure array level 2 unaligned dcl 6-9 INDEX_FOR_ALIGNMENT constant fixed bin(17,0) initial dcl 8-66 ref 708 INDEX_FOR_COLUMN_ORDER constant fixed bin(17,0) initial dcl 8-50 ref 761 INDEX_FOR_COUNT constant fixed bin(17,0) initial dcl 8-51 ref 311 INDEX_FOR_DELIMITER constant fixed bin(17,0) initial dcl 8-40 ref 356 INDEX_FOR_EDITING constant fixed bin(17,0) initial dcl 8-67 ref 719 INDEX_FOR_EXCLUDE constant fixed bin(17,0) initial dcl 8-52 ref 876 INDEX_FOR_FOLDING constant fixed bin(17,0) initial dcl 8-68 ref 712 INDEX_FOR_FORMAT_DOCUMENT_CONTROLS constant fixed bin(17,0) initial dcl 8-41 ref 1196 INDEX_FOR_GROUP constant fixed bin(17,0) initial dcl 8-53 ref 770 INDEX_FOR_GROUP_FOOTER_TRIGGER constant fixed bin(17,0) initial dcl 8-54 ref 398 INDEX_FOR_GROUP_FOOTER_VALUE constant fixed bin(17,0) initial dcl 8-55 ref 390 INDEX_FOR_GROUP_HEADER_TRIGGER constant fixed bin(17,0) initial dcl 8-56 ref 394 INDEX_FOR_GROUP_HEADER_VALUE constant fixed bin(17,0) initial dcl 8-57 ref 386 INDEX_FOR_HYPHENATION constant fixed bin(17,0) initial dcl 8-42 ref 1203 INDEX_FOR_OUTLINE constant fixed bin(17,0) initial dcl 8-58 ref 821 INDEX_FOR_PAGE_BREAK constant fixed bin(17,0) initial dcl 8-59 ref 782 INDEX_FOR_PAGE_FOOTER_VALUE constant fixed bin(17,0) initial dcl 8-43 ref 374 INDEX_FOR_PAGE_HEADER_VALUE constant fixed bin(17,0) initial dcl 8-44 ref 370 INDEX_FOR_PAGE_LENGTH constant fixed bin(17,0) initial dcl 8-45 ref 958 965 INDEX_FOR_PAGE_WIDTH constant fixed bin(17,0) initial dcl 8-46 ref 952 INDEX_FOR_ROW_FOOTER_VALUE constant fixed bin(17,0) initial dcl 8-60 ref 382 INDEX_FOR_ROW_HEADER_VALUE constant fixed bin(17,0) initial dcl 8-61 ref 378 INDEX_FOR_SEPARATOR constant fixed bin(17,0) initial dcl 8-69 ref 998 1105 INDEX_FOR_SUBCOUNT constant fixed bin(17,0) initial dcl 8-62 ref 1318 INDEX_FOR_SUBTOTAL constant fixed bin(17,0) initial dcl 8-63 ref 1341 INDEX_FOR_TITLE constant fixed bin(17,0) initial dcl 8-70 ref 735 INDEX_FOR_TITLE_LINE constant fixed bin(17,0) initial dcl 8-47 ref 982 INDEX_FOR_TOTAL constant fixed bin(17,0) initial dcl 8-64 ref 1615 INDEX_FOR_TRUNCATION constant fixed bin(17,0) initial dcl 8-48 ref 1185 INDEX_FOR_WIDTH constant fixed bin(17,0) initial dcl 8-71 ref 704 INPUT_MAP 001040 constant bit(1) initial dcl 1833 set ref 791* 830* 881* 1662* LEFT_ALIGNMENT constant fixed bin(17,0) initial dcl 11-15 ref 366 1761 LEFT_OR_RIGHT_BRACKET constant char(2) initial packed unaligned dcl 1834 ref 649 MAXIMUM_OPTION_IDENTIFIER_LENGTH constant fixed bin(17,0) initial dcl 8-34 ref 1863 1878 1892 MAXIMUM_OPTION_VALUE_LENGTH constant fixed bin(17,0) initial dcl 8-36 ref 1879 1884 1893 NAME 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 6-9 in procedure "linus_fr_new_report" set ref 356* 370* 374* 952* 958* 982* 1185* 1196* 1203* NAME 660 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 6-9 in procedure "linus_fr_new_report" set ref 704* 708* 712* 719* 735* 998* 1105* NAME 242 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 6-9 in procedure "linus_fr_new_report" set ref 311* 378* 382* 386* 390* 394* 398* 761* 770* 782* 821* 876* 1318* 1341* 1615* NL 013542 constant char(1) initial packed unaligned dcl 1835 ref 455 455 493 516 1076 NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 8-20 ref 10-7 NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 8-21 ref 10-7 NUMERIC_DATA_TYPE constant fixed bin(17,0) initial dcl 11-16 ref 1486 1708 1805 OFF constant bit(1) initial dcl 1837 ref 129 176 199 254 425 497 503 586 661 689 716 721 786 794 803 825 848 886 896 898 957 963 970 986 1022 1099 1167 1190 1250 1389 1407 1421 1424 1434 1465 1597 1651 1668 1681 ON constant bit(1) initial dcl 1838 ref 182 189 194 258 430 466 490 647 649 714 724 725 790 797 805 808 829 880 900 955 964 969 984 1020 1097 1108 1111 1168 1192 1193 1194 1195 1200 1201 1205 1303 1399 1401 1477 1506 1583 1661 1735 OPTIONS 000000 constant structure level 1 unaligned dcl 6-9 OUTPUT_MAP 001101 constant bit(1) initial dcl 1839 set ref 187 259* 763* RESET 001036 constant char(5) initial packed unaligned dcl 1840 ref 1510 RIGHT_ALIGNMENT constant fixed bin(17,0) initial dcl 11-17 ref 368 1532 1736 1764 ROW_COUNT 001101 constant bit(1) initial dcl 1841 set ref 313* ROW_SUBCOUNT 001101 constant bit(1) initial dcl 1842 set ref 1320* ROW_SUBTOTAL 001040 constant bit(1) initial dcl 1843 set ref 1343* ROW_TOTAL 001040 constant bit(1) initial dcl 1844 set ref 1617* SAFETY_FACTOR constant fixed bin(17,0) initial dcl 1845 ref 965 SPECIFIC_COLUMN 660 000000 constant structure array level 2 unaligned dcl 6-9 VALUE 11 000000 constant varying char(32) initial array level 3 dcl 6-9 ref 965 active 2(01) based bit(1) array level 5 packed packed unaligned dcl 11-160 set ref 649* addr builtin function dcl 1847 ref 727 740 1166 1494 1494 1716 1716 1802 addrel builtin function dcl 1848 ref 1123 1148 after builtin function dcl 1849 ref 1773 alignment 11 based fixed bin(17,0) array level 3 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" set ref 1758* 1761* 1764* 1767* 1771* alignment 7 based fixed bin(17,0) level 2 in structure "column_info" dcl 11-19 in procedure "linus_fr_new_report" set ref 1169* alignment 7 based fixed bin(17,0) array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" set ref 627* alignment 11 based fixed bin(17,0) array level 3 in structure "ssosi_subtotal_columns_info" dcl 1375 in procedure "setup_subtotals_or_subcounts_info" set ref 1532* alignment 11 based fixed bin(17,0) array level 3 in structure "stoci_total_columns_info" dcl 1639 in procedure "setup_totals_or_counts_info" set ref 1736* arg_descriptor based structure level 1 dcl 1-6 arg_list based structure level 1 dcl 2-14 break_word_sw 3(07) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1193* chpa_loop 000646 automatic fixed bin(17,0) dcl 538 set ref 582* 583 583 586* code 000100 automatic fixed bin(35,0) dcl 1851 set ref 113* 114 114* 132* 1220* 1224 1224* 1229* 1230 1230* code_parm parameter fixed bin(35,0) dcl 43 set ref 37 63* column_count 2 based fixed bin(17,0) level 2 dcl 13-5 ref 116 column_data_type 35 based bit(36) array level 3 dcl 13-5 set ref 1494 1494 1716 1716 1802 column_info based structure level 1 dcl 11-19 column_ip 000214 automatic pointer dcl 11-40 set ref 1166* 1167 1168 1169 column_map based structure array level 1 dcl 11-48 set ref 176* 759 886* 898* column_map_number_of_columns 000216 automatic fixed bin(17,0) dcl 11-51 set ref 176 758* 759 886 898 column_mp 000220 automatic pointer dcl 11-52 set ref 176 189 190 194 195 263 759* 765 767 797 841 848 855 886 898 917 1665 1668 1702 column_name 12 based varying char(69) array level 3 dcl 13-5 set ref 215 1491* 1550 1713* column_number 1 based fixed bin(17,0) array level 2 in structure "group_info" dcl 11-147 in procedure "linus_fr_new_report" ref 805 805 808 841 841 846 848 1506 column_number 1 based fixed bin(17,0) array level 2 in structure "sgi_group_info" dcl 235 in procedure "set_grouping_info" set ref 263* columns 12 based structure array level 2 in structure "table_info" dcl 13-5 in procedure "linus_fr_new_report" columns 2 based structure array level 2 in structure "title_block_columns_info" unaligned dcl 11-331 in procedure "linus_fr_new_report" set ref 1166 columns 2 based structure array level 2 in structure "stoci_total_columns_info" unaligned dcl 1639 in procedure "setup_totals_or_counts_info" columns 7 based structure array level 2 in structure "ssosi_subtotal_info" unaligned dcl 1379 in procedure "setup_subtotals_or_subcounts_info" set ref 1434* columns 2 based structure array level 2 in structure "ssosi_subtotal_columns_info" unaligned dcl 1375 in procedure "setup_subtotals_or_subcounts_info" columns 1 based bit(1) array level 2 in structure "page_break_info" packed packed unaligned dcl 11-210 in procedure "linus_fr_new_report" set ref 794* 797* 805 808* columns 1 based structure array level 2 in structure "subtotal_map" dcl 1895 in procedure "linus_fr_new_report" set ref 1465* columns 3 based structure array level 2 in structure "stoci_total_info" unaligned dcl 1642 in procedure "setup_totals_or_counts_info" columns 2 based structure array level 2 in structure "output_columns_info" unaligned dcl 11-206 in procedure "linus_fr_new_report" set ref 925* columns 2 based structure array level 2 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" set ref 689* 925 columns_info based structure level 1 dcl 11-42 columns_info_ptr based pointer level 2 in structure "subtotal_info" dcl 11-291 in procedure "linus_fr_new_report" ref 1349 columns_info_ptr based pointer level 2 in structure "stoci_total_info" dcl 1642 in procedure "setup_totals_or_counts_info" set ref 1733* columns_info_ptr based pointer level 2 in structure "ssosi_subtotal_info" dcl 1379 in procedure "setup_subtotals_or_subcounts_info" set ref 1525* columns_info_ptr based pointer level 2 in structure "subcount_info" dcl 11-272 in procedure "linus_fr_new_report" ref 1326 convert builtin function dcl 1852 ref 291 701 706 954 960 965 996 1095 1778 copy_of_page_info_ptr 16 based pointer level 2 dcl 11-74 set ref 1063* count_info_ptr 76 based pointer level 2 dcl 11-74 set ref 315* 317* count_ip 000222 automatic pointer dcl 11-58 set ref 313* 315 count_is_defined 0(20) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 313* 315 current_generation_block 2 based fixed bin(17,0) level 2 dcl 1377 set ref 1449* current_level 6 based fixed bin(17,0) level 2 dcl 1379 set ref 1433* current_pass_number 25 based fixed bin(17,0) level 2 dcl 11-225 set ref 1302* current_row_ptr 20 based pointer level 2 dcl 11-225 set ref 1297* decimal_position 12 based fixed bin(17,0) array level 3 dcl 11-182 set ref 1778* 1780 1780* desc_ptr 000340 automatic pointer dcl 14-19 set ref 289* 290 293 293 293 293 293 293 293 293 293 1802* 1803 descriptor based structure level 1 unaligned dcl 14-6 dh_header_info_ptr_parm parameter pointer dcl 415 set ref 406 421* 431* dh_header_is_defined_flag_parm parameter bit(1) packed unaligned dcl 414 set ref 406 425* 430* dh_header_option_name_parm parameter varying char dcl 413 set ref 406 422* divide builtin function dcl 1854 ref 364 365 1030 1445 dont_compress_sw 3(06) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1201* editing 0(02) based bit(1) level 3 in structure "column_info" packed packed unaligned dcl 11-19 in procedure "linus_fr_new_report" set ref 1168* editing 2(02) based bit(1) array level 4 in structure "input_columns_info" packed packed unaligned dcl 11-182 in procedure "linus_fr_new_report" set ref 721* 725* editing_is_defined 0(12) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 724* editing_string_length 14 based fixed bin(21,0) array level 3 dcl 11-182 set ref 726* 729 731 editing_string_ptr 16 based pointer array level 3 dcl 11-182 set ref 727* editing_string_result_length 15 based fixed bin(21,0) array level 3 dcl 11-182 set ref 739* 742 744 editing_string_result_ptr 20 based pointer array level 3 dcl 11-182 set ref 740* editing_strings_next_available_byte 4 based fixed bin(21,0) level 2 dcl 11-74 set ref 757* editing_strings_next_byte 000224 automatic fixed bin(21,0) dcl 11-68 set ref 124* 727 729 731* 731 740 742 744* 744 757 editing_strings_temp_seg based char packed unaligned dcl 11-70 set ref 729* 742* editing_strings_temp_seg_as_an_array based char(1) array packed unaligned dcl 11-71 set ref 727 740 editing_strings_temp_seg_ptr 24 based pointer level 2 dcl 10-7 ref 122 editing_strings_tsp 000226 automatic pointer dcl 11-72 set ref 122* 727 729 740 742 exclude_is_defined 0(13) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 880* extended_arg_type 000166 automatic fixed bin(17,0) initial dcl 1-36 set ref 1-36* fixed builtin function dcl 1856 ref 290 flags 2 based structure array level 3 in structure "stoci_total_columns_info" packed packed unaligned dcl 1639 in procedure "setup_totals_or_counts_info" flags based structure level 2 in structure "column_info" dcl 11-19 in procedure "linus_fr_new_report" flags based structure level 2 in structure "report_control_info" dcl 10-7 in procedure "linus_fr_new_report" flags based structure level 2 in structure "format_report_info" dcl 11-74 in procedure "linus_fr_new_report" flags 7 based structure array level 3 in structure "ssosi_subtotal_info" packed packed unaligned dcl 1379 in procedure "setup_subtotals_or_subcounts_info" flags 2 based structure array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" flags based structure level 2 in structure "status" dcl 11-225 in procedure "linus_fr_new_report" flags 2 based structure array level 3 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" folding_is_fill 2 based bit(1) array level 4 packed packed unaligned dcl 11-182 set ref 714* 716* format_document_op 12 based pointer level 2 dcl 11-74 set ref 1208* format_document_options based structure level 1 dcl 3-12 set ref 1189 1190* format_document_options_ptr 000170 automatic pointer dcl 3-62 set ref 1189* 1190 1191 1192 1193 1194 1195 1200 1201 1205 1207 1208 format_document_version_2 constant fixed bin(17,0) initial dcl 3-63 ref 1191 format_report_info based structure level 1 dcl 11-74 set ref 128 129* format_report_info_ptr 16 based pointer level 2 dcl 10-7 set ref 76* format_report_ip 000230 automatic pointer dcl 11-139 set ref 76 128* 129 130 313 315 315 317 358 360 361 370 370 374 374 378 378 382 382 386 386 390 390 394 394 398 398 402 690 692 724 757 770 770 772 772 786 787 790 795 800 825 826 829 831 836 838 880 896 900 902 954 955 955 957 960 961 964 965 965 970 972 974 984 986 988 1004 1007 1007 1017 1017 1018 1022 1022 1025 1025 1030 1030 1031 1031 1047 1048 1050 1050 1050 1059 1060 1062 1063 1065 1077 1141 1144 1159 1164 1171 1187 1208 1218 1219 1220 1220 1224 1224 1224 1224 1230 1230 1230 1230 1235 1253 1256 1261 1267 1270 1276 1279 1283 1286 1290 1293 1305 1320 1322 1324 1328 1343 1345 1347 1351 1504 1617 1619 1619 1621 formatted_page_info based structure level 1 dcl 9-7 set ref 973 formatted_page_info_ptr 10 based pointer level 2 in structure "page_info" dcl 9-29 in procedure "linus_fr_new_report" set ref 1059* formatted_page_info_ptr 20 based pointer level 2 in structure "format_report_info" dcl 11-74 in procedure "linus_fr_new_report" set ref 974* 1059 formatted_page_ip 000202 automatic pointer dcl 9-26 set ref 973* 974 fpi_init_maximum_number_of_detail_blocks 000204 automatic fixed bin(17,0) dcl 9-27 set ref 972* 973 973 galley_sw 3(02) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1192* gcn_loop 001026 automatic fixed bin(17,0) dcl 1541 set ref 1549* 1550 1550* generic_template based char packed unaligned dcl 11-142 set ref 1074 1075* 1076* 1080 1124 generic_template_length 000232 automatic fixed bin(17,0) dcl 11-143 set ref 1073* 1074 1074 1075 1076 1076 1078 1080 1124 generic_template_ptr 102 based pointer level 2 dcl 11-74 set ref 1077* generic_tp 000234 automatic pointer dcl 11-144 set ref 1074* 1075 1076 1077 1080 1124 gi_init_number_of_columns_to_group 000236 automatic fixed bin(17,0) dcl 11-151 set ref 259* 260 260 262 gov_code 000460 automatic fixed bin(35,0) dcl 87 set ref 92* 96 96* gov_option_identifier_parm parameter varying char dcl 88 set ref 80 92* gov_option_name_parm parameter varying char dcl 89 set ref 80 92* gov_option_value_parm parameter varying char dcl 90 set ref 80 92* group_column 7(01) based bit(1) array level 4 packed packed unaligned dcl 1379 set ref 1506* group_footer_info_ptr 36 based pointer level 2 dcl 11-74 set ref 390* 1293 group_footer_is_defined 0(09) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 390* 1290 group_footer_trigger_info_ptr 42 based pointer level 2 dcl 11-74 set ref 398* group_footer_trigger_is_defined 0(10) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 398* group_header_info_ptr 34 based pointer level 2 dcl 11-74 set ref 386* 1286 group_header_is_defined 0(03) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 386* 1283 group_header_trigger_info_ptr 40 based pointer level 2 dcl 11-74 set ref 394* group_header_trigger_is_defined 0(04) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 394* group_info based structure level 1 dcl 11-147 group_info_ptr 62 based pointer level 2 dcl 11-74 set ref 770* 772 group_ip 000240 automatic pointer dcl 11-152 set ref 772* 774* 804 805 805 808 831 840 841 841 846 848 1504 1506 group_is_defined 0(14) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 770* 772 800 831 838 1504 grouping_columns based fixed bin(17,0) array level 2 dcl 11-193 set ref 846* header based structure level 2 dcl 2-14 header_info based structure level 1 dcl 11-160 set ref 502 header_ip 000246 automatic pointer dcl 11-176 set ref 477 502* 503 566 566 566 566 566 566 573 573 573 573 573 573 583 583 586 604 606 626 627 647 649 656 658 1256* 1257 1270* 1271 1279* 1280 1286* 1287 1293* 1294 header_part_delimiter 104 based char(1) level 2 packed packed unaligned dcl 11-74 set ref 358* 360* 361 headers_next_available_byte 5 based fixed bin(21,0) level 2 dcl 11-74 set ref 402* headers_next_byte 000242 automatic fixed bin(21,0) dcl 11-154 set ref 126* 402 474* 474 530 656 headers_temp_seg based char packed unaligned dcl 11-156 set ref 530* headers_temp_seg_ptr 26 based pointer level 2 dcl 10-7 ref 125 headers_tsp 000244 automatic pointer dcl 11-158 set ref 125* 530 hi_init_maximum_number_of_parts 000250 automatic fixed bin(17,0) dcl 11-177 set ref 362* 471 502 502 582 664 664* hi_init_number_of_lines 000251 automatic fixed bin(17,0) dcl 11-178 set ref 501* 502 502 highest_level 5 based fixed bin(17,0) level 2 dcl 1379 set ref 1467* 1482 1482* hyphenation_sw 3(12) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1205* index builtin function dcl 1859 in procedure "linus_fr_new_report" ref 185 493 516 643 1418 1471 1474 1500 1586 1588 index 3 based fixed bin(21,0) array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" set ref 656* initialize_number_of_columns 000252 automatic fixed bin(17,0) dcl 11-180 set ref 687* 688 688 882* 885* 894 897* 901 901 1161* 1162 1162 1165 1523* 1524 1524 1731* 1732 1732 input_column 10 based fixed bin(17,0) array level 3 in structure "ssosi_subtotal_info" dcl 1379 in procedure "setup_subtotals_or_subcounts_info" set ref 1476* 1477 1478 1478 1480 1486 1486 1491 1494 1494 1530 1532 input_column 4 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 11-206 in procedure "linus_fr_new_report" set ref 996 1095 1702 1704 input_column 4 based fixed bin(17,0) array level 3 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" set ref 702* 766* input_column 3 based fixed bin(17,0) array level 3 in structure "stoci_total_info" dcl 1642 in procedure "setup_totals_or_counts_info" set ref 1704* 1708 1708 1713 1716 1716 input_columns_info based structure level 1 dcl 11-182 set ref 688 input_columns_info_ptr 54 based pointer level 2 dcl 11-74 set ref 690* input_columns_ip 000254 automatic pointer dcl 11-183 set ref 688* 689 690 691 702 706 714 716 717 721 725 726 727 729 731 739 740 742 744 765 766 792 796 802 834 838 853 917 919 925 927 1463 1486 1486 1530 1532 1593 1665 1708 1708 1758 1761 1764 1767 1771 1778 1780 1780 1780 1780 1805 1809 1815 1818 input_columns_op 000256 automatic pointer dcl 11-186 set ref 691* 692 767 input_columns_order based fixed bin(17,0) array dcl 11-185 set ref 691 767* input_columns_order_ptr 56 based pointer level 2 dcl 11-74 set ref 692* ioa_string 4 based varying char(5) array level 3 in structure "stoci_total_info" dcl 1642 in procedure "setup_totals_or_counts_info" set ref 1716* 1720* ioa_string 13 based varying char(5) array level 3 in structure "ssosi_subtotal_info" dcl 1379 in procedure "setup_subtotals_or_subcounts_info" set ref 1494* 1498* iocb_ptr 000102 automatic pointer dcl 1858 set ref 1220* 1229* 1235 iox_$attach_name 000010 constant entry external dcl 1860 ref 1220 iox_$open 000012 constant entry external dcl 1861 ref 1229 last_page_number 46 based fixed bin(17,0) level 2 dcl 11-225 set ref 1301* last_pass 14 based bit(1) level 3 dcl 11-225 set ref 1303* last_row_number 45 based fixed bin(35,0) level 2 dcl 11-225 set ref 1300* lcb based structure level 1 dcl 5-53 lcb_ptr 000172 automatic pointer dcl 5-121 set ref 62* 92* 111 113* 119 lcb_ptr_parm parameter pointer dcl 44 ref 37 62 lcn_column_name 000104 automatic varying char dcl 1863 set ref 211* 215 lcn_loop 000514 automatic fixed bin(17,0) dcl 209 set ref 214* 215 215* length 4 based fixed bin(21,0) array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" set ref 566 566 566 573 573 573 583 658* length builtin function dcl 1864 in procedure "linus_fr_new_report" ref 179 455 489 522 526 529 726 739 1000 1107 1411 1581 length 1 based fixed bin(17,0) level 2 in structure "page_info" dcl 9-29 in procedure "linus_fr_new_report" set ref 1048* 1049 1142 1445 level 12 based fixed bin(17,0) array level 3 dcl 1379 set ref 1480* 1482 1482 lines 2 based structure array level 2 dcl 11-160 set ref 503* linus_data_type 13 based fixed bin(17,0) array level 3 dcl 11-182 set ref 1486 1486 1708 1708 1805* 1809* 1815* 1818* linus_error_$bad_option_value 000014 external static fixed bin(35,0) dcl 1865 set ref 219* linus_error_$bad_report_setup 000016 external static fixed bin(35,0) dcl 1866 set ref 664* 1025* 1050* 1491* 1554* 1558* 1713* 1774* 1780* 1821* linus_options$get 000020 constant entry external dcl 1867 ref 92 linus_table$info 000022 constant entry external dcl 1868 ref 113 literal_sw 3(04) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1200* ltrim builtin function dcl 1869 ref 291 701 996 1095 max_line_length_sw 3(08) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1194* maximum_number_of_detail_blocks based fixed bin(17,0) level 2 dcl 9-7 set ref 973* maximum_number_of_generation_blocks based fixed bin(17,0) level 2 dcl 11-279 set ref 1446* maximum_number_of_grouping_columns 1 based fixed bin(17,0) level 2 dcl 11-193 set ref 835* maximum_number_of_parts 1 based fixed bin(17,0) level 2 dcl 11-160 set ref 502* 503 566 566 566 566 566 566 566 566 566 566 566 566 573 573 573 573 573 573 573 573 573 573 573 573 583 583 583 583 586 586 604 604 606 606 626 626 627 627 647 647 649 649 656 656 658 658 maximum_number_of_single_columns based fixed bin(17,0) level 2 dcl 11-193 set ref 835* 846 maximum_segment_size 000260 automatic fixed bin(21,0) dcl 11-188 set ref 117* 530 729 742 1022 1050 mcl_character_string_length 000476 automatic fixed bin(17,0) dcl 145 set ref 179* 199 mcl_column_number 000477 automatic fixed bin(17,0) dcl 146 set ref 186* 190 194 195 195 mcl_column_position 000500 automatic fixed bin(17,0) dcl 147 set ref 180* 189 190 191* 191 mcl_current_position 000501 automatic fixed bin(17,0) dcl 148 set ref 178* 185 197* 197 199 211 mcl_next_blank 000502 automatic fixed bin(17,0) dcl 149 set ref 185* 197 211 mcl_no_of_columns_found 000503 automatic fixed bin(17,0) dcl 150 set ref 181* 198* 198 203 mcl_no_of_columns_found_parm parameter fixed bin(17,0) dcl 151 set ref 138 203* mcl_option_value_parm parameter varying char dcl 152 set ref 138 177* 177 179 185 211 219* mcl_still_processing_columns 000504 automatic bit(1) dcl 153 set ref 182* 184 199* mcl_type_of_map_parm parameter bit(1) dcl 154 ref 138 187 mod builtin function dcl 1871 ref 613 620 names_and_values_info_ptr 000174 automatic pointer initial dcl 7-29 set ref 7-29* names_and_values_ptr 000176 automatic pointer initial dcl 7-30 set ref 7-30* next_row_ptr 22 based pointer level 2 dcl 11-225 set ref 1299* no_of_columns_found 000104 automatic fixed bin(17,0) dcl 1873 set ref 763* 791* 830* 853 881* 882 normalized_option_name 000105 automatic varying char(97) dcl 1874 set ref 92* null builtin function dcl 1875 ref 7-29 7-30 7-41 10-52 250 317 421 454 774 787 826 1171 1220 1220 1297 1298 1299 1328 1351 1390 1408 1621 1652 1682 num_dims 000342 automatic fixed bin(17,0) initial dcl 14-20 set ref 14-20* number 2 based fixed bin(17,0) array level 3 dcl 1895 set ref 1478* 1478 1480 number_of_bits_or_chars based fixed bin(21,0) level 2 dcl 9-43 set ref 1064* number_of_columns based fixed bin(17,0) level 2 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" ref 691 792 796 802 834 838 853 1463 number_of_columns based fixed bin(17,0) level 2 in structure "page_break_info" dcl 11-210 in procedure "linus_fr_new_report" set ref 793* 794 number_of_columns based fixed bin(17,0) level 2 in structure "columns_info" dcl 11-42 in procedure "linus_fr_new_report" set ref 688* 689 901* 1162* 1163 1524* 1526 1527 1732* 1734 1735 1736 number_of_columns based fixed bin(17,0) level 2 in structure "subtotal_map" dcl 1895 in procedure "linus_fr_new_report" set ref 1464* 1465 number_of_columns based fixed bin(17,0) level 2 in structure "output_columns_info" dcl 11-206 in procedure "linus_fr_new_report" ref 912 924 991 994 1006 1094 1097 1121 1161 1523 1701 1731 number_of_columns_to_group based fixed bin(17,0) level 2 dcl 11-147 set ref 260* 804 831 840 1504 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subtotal_info" dcl 11-291 in procedure "linus_fr_new_report" set ref 1432* 1434 1435 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "ssosi_subtotal_info" dcl 1379 in procedure "setup_subtotals_or_subcounts_info" ref 1529 number_of_columns_to_total 2 based fixed bin(17,0) level 2 dcl 11-348 set ref 1691* 1692 number_of_defined_columns 000137 automatic fixed bin(17,0) dcl 1876 set ref 116* 214 687 700 758 764 882 885 897 916 1549 1664 number_of_grouping_columns 3 based fixed bin(17,0) level 2 dcl 11-193 set ref 837* 844* 844 846 853 number_of_lines based fixed bin(17,0) level 2 dcl 11-160 set ref 502* 503 1257 1271 1280 1287 1294 number_of_lines_needed_for_detail_block 36 based fixed bin(17,0) level 2 dcl 11-225 set ref 1252* 1258* 1258 1264* 1264 1272* 1272 number_of_lines_needed_for_group_footer 44 based fixed bin(17,0) level 2 dcl 11-225 set ref 1290* 1294* number_of_lines_needed_for_group_header 43 based fixed bin(17,0) level 2 dcl 11-225 set ref 1283* 1287* number_of_lines_needed_for_page_footer 42 based fixed bin(17,0) level 2 dcl 11-225 set ref 1276* 1280* number_of_lines_needed_for_row_footer 41 based fixed bin(17,0) level 2 dcl 11-225 set ref 1267* 1271* 1272 number_of_lines_needed_for_row_header 37 based fixed bin(17,0) level 2 dcl 11-225 set ref 1253* 1257* 1258 number_of_lines_needed_for_row_value 40 based fixed bin(17,0) level 2 dcl 11-225 set ref 1263* 1264 number_of_single_columns 2 based fixed bin(17,0) level 2 dcl 11-193 set ref 852* 857* 857 858 number_of_subtotals 1 based fixed bin(17,0) level 2 dcl 11-279 set ref 1446* number_of_templates 1 based fixed bin(17,0) level 2 in structure "template_info" dcl 11-312 in procedure "linus_fr_new_report" set ref 1140* number_of_templates 1 based fixed bin(17,0) level 2 in structure "row_value_template_info" dcl 11-221 in procedure "linus_fr_new_report" ref 1263 oi_init_maximum_number_of_grouping_columns 000261 automatic fixed bin(17,0) dcl 11-202 set ref 831* 833* 835 835 oi_init_maximum_number_of_single_columns 000262 automatic fixed bin(17,0) dcl 11-203 set ref 834* 835 835 option_identifier 000140 automatic varying char dcl 1878 set ref 701* 701 704* 708* 712* 719* 735* 996* 996 998* 1095* 1095 1105* option_name_table_ptr 000200 automatic pointer initial dcl 7-41 set ref 7-41* option_value 000140 automatic varying char dcl 1879 set ref 251* 252 259* 311* 313* 356* 358 358 422* 423 429* 704* 706 708* 710* 712* 714 719* 721 726 729 735* 737 737* 739 742 761* 763* 782* 784 791* 821* 823 830* 876* 878 881* 952* 954 958* 960 982* 984 998* 1000 1105* 1107 1118 1185* 1187 1196* 1198 1203* 1205 1318* 1320* 1341* 1343* 1615* 1617* order 3 based fixed bin(17,0) array level 3 dcl 11-182 set ref 765* 917 919 outline 2(01) based bit(1) array level 4 in structure "stoci_total_columns_info" packed packed unaligned dcl 1639 in procedure "setup_totals_or_counts_info" set ref 1735* outline 0(01) based bit(1) level 3 in structure "column_info" packed packed unaligned dcl 11-19 in procedure "linus_fr_new_report" set ref 1167* outline_info based structure level 1 dcl 11-193 set ref 835 outline_info_ptr 64 based pointer level 2 dcl 11-74 set ref 826* 836* outline_ip 000264 automatic pointer dcl 11-204 set ref 835* 836 837 844 844 846 846 852 853 857 857 858 858 outline_is_defined 0(15) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 825* 829* output_column 5 based fixed bin(17,0) array level 3 dcl 11-182 set ref 927* 1530 1532 1593 1665 output_columns_info based structure level 1 unaligned dcl 11-206 set ref 901 1163 1526 1734 output_columns_info_ptr 60 based pointer level 2 dcl 11-74 set ref 902* output_columns_ip 000266 automatic pointer dcl 11-207 set ref 901* 902 912 924 925 991 992 994 996 1006 1007 1007 1094 1095 1097 1101 1102 1103 1111 1121 1161 1163 1523 1526 1701 1702 1704 1731 1734 output_columns_op 000142 automatic pointer dcl 1882 set ref 913* 919 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 927 output_columns_order based fixed bin(17,0) array dcl 1880 set ref 913 919* 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 927 output_columns_order_number_of_columns 000140 automatic fixed bin(17,0) dcl 1881 set ref 912* 913 output_line 6 based fixed bin(17,0) array level 3 dcl 11-206 set ref 1102* overstrike_info_ptr 22 based pointer level 2 dcl 11-74 set ref 1065* page_break_info based structure level 1 dcl 11-210 set ref 793 page_break_info_ptr 66 based pointer level 2 dcl 11-74 set ref 787* 795* page_break_ip 000270 automatic pointer dcl 11-214 set ref 793* 794 795 797 805 808 page_break_is_defined 0(16) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 786* 790* page_footer_info_ptr 32 based pointer level 2 dcl 11-74 set ref 374* 1279 page_footer_is_defined 0(11) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 374* 1276 page_header_info_ptr 30 based pointer level 2 dcl 11-74 set ref 370* page_header_is_defined 0(02) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 370* page_info based structure level 1 dcl 9-29 set ref 1046 1057 1061 1062* 1062 page_info_ptr 14 based pointer level 2 dcl 11-74 set ref 1060* 1062 page_info_size 3 based fixed bin(17,0) level 2 dcl 9-29 set ref 1057* page_ip 000206 automatic pointer dcl 9-41 set ref 363 1046* 1047 1048 1049 1049 1049 1050 1057 1057 1058 1059 1060 1061* 1062 1063 1064 1064 1064 1073 1108 1111 1142 1445 page_length 2 based fixed bin(17,0) level 2 dcl 11-74 set ref 960* 961 965* 965 972 1022 1025 1030* 1030 1031 1031* 1048 1050* page_overstrike_info based structure level 1 dcl 9-43 set ref 1064 page_overstrike_ip 000210 automatic pointer dcl 9-49 set ref 1064* 1065 page_ptr 4 based pointer level 2 dcl 9-29 set ref 1058* page_width 1 based fixed bin(17,0) level 2 dcl 11-74 set ref 954* 955 988 1004* 1007 1007 1017* 1017 1022 1025* 1047 1050* parts 2 based structure array level 3 dcl 11-160 pbi_init_number_of_columns 000272 automatic fixed bin(17,0) dcl 11-215 set ref 792* 793 793 permanent_report 0(05) based bit(1) level 3 packed packed unaligned dcl 10-7 ref 1215 ph_header_info_ptr_parm parameter pointer dcl 443 set ref 437 454* 477* ph_header_line 000144 automatic varying char dcl 1884 set ref 518* 522 522* 524 524* 524 526 526 526* 526 529 530 643 649 664* ph_header_line_length 000620 automatic fixed bin(17,0) dcl 444 set ref 474 529* 530 661 ph_header_value_parm parameter varying char dcl 445 set ref 437 455 455 455* 455 489 493 516 518 position 1 based fixed bin(17,0) array level 2 dcl 11-48 set ref 190* 195* 263 765 767 prefix_character 22 based varying char(1) array level 3 in structure "ssosi_subtotal_columns_info" dcl 1375 in procedure "setup_subtotals_or_subcounts_info" set ref 1527* 1530* prefix_character 22 based varying char(1) array level 3 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" set ref 717* present 1 based bit(1) array level 3 in structure "subtotal_map" dcl 1895 in procedure "linus_fr_new_report" set ref 1477* present 2 based bit(1) array level 5 in structure "header_info" packed packed unaligned dcl 11-160 in procedure "linus_fr_new_report" set ref 566 566 566 573 573 573 583 586* 604 647* present based bit(1) array level 2 in structure "column_map" dcl 11-48 in procedure "linus_fr_new_report" set ref 189* 194* 797 841 848* 855 917 1665 1668* 1702 previous_row_ptr 16 based pointer level 2 dcl 11-225 set ref 1298* report_cip 000212 automatic pointer initial dcl 10-52 set ref 76 10-52* 119* 120 121 122 125 963 969 1058 1215 1219 report_control_info based structure level 1 dcl 10-7 report_control_info_ptr 106 based pointer level 2 dcl 5-53 ref 119 report_directory_name 116 based char(168) level 2 packed packed unaligned dcl 11-74 set ref 1219* 1220 1224 1224 1230 1230 report_entry_name 170 based char(32) level 2 packed packed unaligned dcl 11-74 set ref 1218* 1220 1224 1224 1230 1230 report_iocb_ptr 6 based pointer level 2 dcl 11-74 set ref 1235* report_is_paginated based bit(1) level 3 packed packed unaligned dcl 10-7 set ref 963* 969* report_temp_seg_ptr 12 based pointer level 2 dcl 10-7 ref 121 1058 report_work_area_ptr 14 based pointer level 2 dcl 10-7 ref 120 reset 7 based bit(1) array level 4 packed packed unaligned dcl 1379 set ref 1510* ros_column_number 001036 automatic fixed bin(17,0) dcl 1568 set ref 1592* 1593 ros_current_position 001037 automatic fixed bin(17,0) dcl 1569 set ref 1582* 1586 1588 1590 1593 1596* 1596 1597 ros_next_blank 001040 automatic fixed bin(17,0) dcl 1570 set ref 1586* 1593 1596 ros_next_comma 001041 automatic fixed bin(17,0) dcl 1571 set ref 1588* 1590 ros_still_eliminating_orphans 001042 automatic bit(1) dcl 1572 set ref 1583* 1585 1597* ros_subtotal_list_length 001043 automatic fixed bin(17,0) dcl 1573 set ref 1581* 1597 row_footer_info_ptr 46 based pointer level 2 dcl 11-74 set ref 382* 1270 row_footer_is_defined 0(08) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 382* 1267 row_header_info_ptr 44 based pointer level 2 dcl 11-74 set ref 378* 1256 row_header_is_defined 0(06) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 378* 1253 row_value_is_defined 0(07) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 896* 900* 1261 row_value_template_info based structure level 1 unaligned dcl 11-221 set ref 1140 row_value_template_info_ptr 100 based pointer level 2 dcl 11-74 set ref 1141* row_value_template_ip 000274 automatic pointer dcl 11-222 set ref 1140* 1141 1147 1263 rtrim builtin function dcl 1887 ref 1220 1220 1224 1224 1224 1224 1230 1230 1230 1230 saadp_claimed_digits 001076 automatic varying char(7) dcl 1749 set ref 1773* 1774 1778 saadp_column_number_parm parameter fixed bin(17,0) dcl 1750 set ref 1743 1758 1761 1764 1767 1771 1778 1778 1780 1780 1780 1780 1780* saadp_option_value_parm parameter varying char dcl 1751 set ref 1743 1758 1761 1764 1767 1773 1774* scale 0(12) based bit(12) level 3 packed packed unaligned dcl 14-6 ref 290 sci_ptr 000144 automatic pointer dcl 1889 set ref 96* 111* 114* 219* 664* 1025* 1050* 1224* 1230* 1491* 1554* 1558* 1713* 1774* 1780* 1821* search builtin function dcl 1890 ref 649 sgi_group_info based structure level 1 unaligned dcl 235 set ref 260 sgi_group_info_ptr 000524 automatic pointer dcl 236 set ref 260* 263 265 sgi_group_info_ptr_parm parameter pointer dcl 237 set ref 228 250* 265* sgi_grouping_is_defined_flag_parm parameter bit(1) packed unaligned dcl 238 set ref 228 254* 258* sgi_init_number_of_generations 000310 automatic fixed bin(17,0) dcl 11-287 set ref 1445* 1446 1446 sgi_init_number_of_subtotals 000311 automatic fixed bin(17,0) dcl 11-288 set ref 1444* 1446 1446 sgi_loop 000526 automatic fixed bin(17,0) dcl 239 set ref 262* 263 263* sgi_option_name_parm parameter varying char dcl 240 set ref 228 251* shi_additional_indent 000554 automatic fixed bin(17,0) dcl 325 set ref 620* 621 621* 623 shi_alignment_modes 000555 automatic fixed bin(17,0) array dcl 326 set ref 366* 367* 368* 627 shi_current_header_part 000563 automatic fixed bin(17,0) dcl 330 set ref 463* 647 649 656 658 663* 663 664 shi_current_inner_position 000564 automatic fixed bin(17,0) dcl 331 set ref 465* 643 649 656 660* 660 661 shi_current_position 000565 automatic fixed bin(17,0) dcl 332 set ref 459* 488* 493 496* 496 497 516 518 520* 520 shi_delimiter 000560 automatic char(1) packed unaligned dcl 327 set ref 361* 522 522 524 524 526 526 643 shi_header_info_ptr 000566 automatic pointer dcl 333 set ref 429* 431 shi_header_length 000570 automatic fixed bin(17,0) dcl 334 set ref 489* 497 shi_header_part_length 000571 automatic fixed bin(17,0) dcl 335 set ref 645* 649 649 658 shi_inner_loop 000561 automatic fixed bin(17,0) dcl 328 set ref 471* 604 606 610 615 617 626 627 627 shi_loop 000562 automatic fixed bin(17,0) dcl 329 set ref 461* 566 566 566 566 566 566 573 573 573 573 573 573 583 583 586 604 606 626 627 647 649 656 658 shi_n_parts_width 000572 automatic fixed bin(17,0) array dcl 336 set ref 363* 364* 364 365* 365 606 613 613 619 620 625 625 shi_next_newline_position 000575 automatic fixed bin(17,0) dcl 337 set ref 493* 496 516* 518 520 shi_number_of_lines_found 000576 automatic fixed bin(17,0) dcl 338 set ref 461 487* 495* 495 501 shi_number_of_parts_found 000577 automatic fixed bin(17,0) dcl 339 set ref 464* 587* 587 606 608 610 646* 646 shi_second_delimiter_position 000600 automatic fixed bin(17,0) dcl 340 set ref 643* 645 660 shi_starting_position 000601 automatic fixed bin(17,0) dcl 341 set ref 608* 610* 613* 615* 619* 623* 623 625* 626 shi_still_counting 000602 automatic bit(1) dcl 342 set ref 490* 492 497* shi_still_parsing 000603 automatic bit(1) dcl 343 set ref 466* 467 661* si_init_number_of_columns_to_subtotal 000314 automatic fixed bin(17,0) dcl 11-309 set ref 1400* 1419* 1419 1432 1432 1444 1469 sici_hit 000672 automatic bit(1) dcl 679 set ref 803* 805* 808 sici_inner_loop 000673 automatic fixed bin(17,0) dcl 680 set ref 804* 805 805 808* 840* 841 841 846 848* sici_loop 000674 automatic fixed bin(17,0) dcl 681 set ref 700* 701 702 702 706 706 710* 714 716 717 721 725 726 727 729 731 739 740 742 744 747* 764* 765 765 766 766 767 767* 796* 797 797* 802* 805* 838* 841* 853* 855 858* single_columns 4 based fixed bin(17,0) array level 2 dcl 11-193 set ref 858* sisfs_char_10 based char(10) packed unaligned dcl 277 ref 291 sisfs_descriptor_ptr_parm parameter pointer dcl 278 ref 271 289 sisfs_ioa_string_parm parameter varying char dcl 279 set ref 271 291* 293* 297* sisfs_scale 000536 automatic fixed bin(17,0) dcl 280 set ref 290* 291 291 size builtin function dcl 1891 in procedure "linus_fr_new_report" ref 1057 1123 1148 size 0(12) based structure level 2 in structure "descriptor" packed packed unaligned dcl 14-6 in procedure "linus_fr_new_report" sldt_column_number_parm parameter fixed bin(17,0) dcl 1795 ref 1793 1802 1805 1809 1815 1818 sldt_column_type 001110 automatic fixed bin(6,0) packed unsigned unaligned dcl 1796 set ref 1803* 1805 1805 1805 1805 1809 1809 1809 1809 1809 1809 1809 1809 1815 1815 1818 1818 1821* soci_inner_loop 000712 automatic fixed bin(17,0) dcl 869 set ref 914* 919 920* 920 soci_loop 000713 automatic fixed bin(17,0) dcl 870 set ref 916* 917 919* 924* 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 925 927 927* spi_current_detail_line 000724 automatic fixed bin(17,0) dcl 936 set ref 1091* 1102 1125* 1125 1138 1146 spi_current_position 000725 automatic fixed bin(17,0) dcl 937 set ref 990* 992* 992 1000* 1000 1004 1092* 1101 1103* 1103 1108 1111 1118 1119* 1119 1126* spi_exceeds_max_seg_size 000726 automatic bit(1) dcl 938 set ref 1020* 1021 1022* spi_last_column_on_detail_line 000727 automatic bit(1) dcl 939 set ref 1097* 1099* 1108* 1111 1111* 1116 spi_loop 000730 automatic fixed bin(17,0) dcl 940 set ref 954 960 991* 992 994 996* 1006* 1007 1007* 1094* 1095 1097 1101 1102 1103 1111 1121* 1146* 1147* 1165* 1166* spi_separator_width 000731 automatic fixed bin(17,0) dcl 941 set ref 1107* 1108 1111 1118 1119 ssosi_column_name 000146 automatic varying char dcl 1892 set ref 1475* 1501* 1550 1554* 1558* 1590* ssosi_comma_position 000776 automatic fixed bin(17,0) dcl 1365 set ref 1474* 1475 1499 1500* 1501 1510 ssosi_current_inner_position 001000 automatic fixed bin(17,0) dcl 1367 set ref 1470* 1499* 1499 1500 1501 1510 ssosi_current_position 000777 automatic fixed bin(17,0) dcl 1366 set ref 1402* 1418 1422* 1422 1424 1466* 1471 1472 1512* 1512 ssosi_defined_flag_parm parameter bit(1) packed unaligned dcl 1368 set ref 1357 1389* 1399* 1407* ssosi_inner_loop 001001 automatic fixed bin(17,0) dcl 1369 set ref 1504* 1506* ssosi_loop 001002 automatic fixed bin(17,0) dcl 1370 set ref 1469* 1476 1477 1478 1478 1480 1480 1482 1482 1486 1486 1491 1494 1494 1494 1498 1503 1506 1506 1510* 1529* 1530 1532* ssosi_next_blank 001003 automatic fixed bin(17,0) dcl 1371 set ref 1418* 1419 1422 1471* 1472 1512 ssosi_option_value 000146 automatic varying char dcl 1893 set ref 1472* 1474 1475 1500 1501 1510 1580* 1593* 1593 1601 ssosi_option_value_parm parameter varying char dcl 1372 set ref 1357 1387 1403* 1403 1405 1411 1418 1471 1472 1554* 1558* 1581 1586 1588 1590 1593 1601* ssosi_still_counting_subtotals 001004 automatic bit(1) dcl 1373 set ref 1401* 1417 1421* 1422 1424* ssosi_subtotal_columns_info based structure level 1 unaligned dcl 1375 set ref 1524 1526* ssosi_subtotal_columns_info_ptr 001006 automatic pointer dcl 1376 set ref 1524* 1525 1526 1527 1530 1532 ssosi_subtotal_flag_parm parameter bit(1) dcl 1374 ref 1357 1484 1532 1554 ssosi_subtotal_generation_info based structure level 1 unaligned dcl 1377 set ref 1446 ssosi_subtotal_generation_info_ptr 001010 automatic pointer dcl 1378 set ref 1446* 1448 1449 ssosi_subtotal_info based structure level 1 unaligned dcl 1379 set ref 1432 ssosi_subtotal_info_ptr_parm parameter pointer dcl 1380 set ref 1357 1390* 1408* 1432* 1433 1434 1435 1448 1467 1476 1477 1478 1478 1480 1480 1482 1482 1482 1482 1486 1486 1491 1494 1494 1494 1498 1503 1506 1506 1510 1525 1529 1530 1532 ssosi_subtotal_list_length 001012 automatic fixed bin(17,0) dcl 1381 set ref 1411* 1424 ssu_$abort_line 000024 constant entry external dcl 1894 ref 96 114 219 664 1025 1050 1224 1230 1491 1554 1558 1713 1774 1780 1821 starting_position 7 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 11-206 in procedure "linus_fr_new_report" set ref 1101* starting_position 5 based fixed bin(17,0) array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" set ref 626* status based structure level 1 dcl 11-225 set ref 1249 1250* status_pointer 000276 automatic pointer dcl 11-264 set ref 1249* 1250 1252 1253 1257 1258 1258 1258 1263 1264 1264 1264 1267 1271 1272 1272 1272 1276 1280 1283 1287 1290 1294 1297 1298 1299 1300 1301 1302 1303 1305 status_ptr 24 based pointer level 2 dcl 11-74 set ref 1305* stoci_defined_flag_parm parameter bit(1) packed unaligned dcl 1635 set ref 1627 1651* 1661* 1681* stoci_inner_loop 001060 automatic fixed bin(17,0) dcl 1636 set ref 1693* 1704 1708 1708 1713 1716 1716 1716 1720 1721* 1721 stoci_loop 001061 automatic fixed bin(17,0) dcl 1637 set ref 1664* 1665 1665 1668* 1701* 1702 1704* stoci_option_value_parm parameter varying char dcl 1638 set ref 1627 1649 1662* stoci_total_columns_info based structure level 1 unaligned dcl 1639 set ref 1732 1734* stoci_total_columns_info_ptr 001062 automatic pointer dcl 1640 set ref 1732* 1733 1734 1735 1736 stoci_total_flag_parm parameter bit(1) dcl 1641 ref 1627 1706 1736 stoci_total_info based structure level 1 unaligned dcl 1642 set ref 1691 stoci_total_info_ptr_parm parameter pointer dcl 1643 set ref 1627 1652* 1682* 1691* 1692 1704 1708 1708 1713 1716 1716 1716 1720 1733 sub_err_sw 3(10) based bit(1) level 3 packed packed unaligned dcl 3-12 set ref 1195* subcount_columns_ip 000300 automatic pointer dcl 11-267 set ref 1326* subcount_generation_ip 000302 automatic pointer dcl 11-270 set ref 1325* subcount_info based structure level 1 unaligned dcl 11-272 subcount_info_ptr 72 based pointer level 2 dcl 11-74 set ref 1324* 1328* subcount_ip 000304 automatic pointer dcl 11-273 set ref 1320* 1324 1325 1326 subcount_is_defined 0(18) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 1320* 1322 substr builtin function dcl 1900 set ref 185 211 358 455 493 516 518 524 526 530* 643 649 729* 742* 1076* 1118* 1418 1471 1472 1475 1500 1501 1510 1586 1588 1590 1593 subsystem_control_info_ptr 102 based pointer level 2 dcl 5-53 ref 111 subtotal 16 based float dec(59) array level 3 dcl 1379 set ref 1435* subtotal_columns_info based structure level 1 unaligned dcl 11-275 subtotal_columns_ip 000306 automatic pointer dcl 11-276 set ref 1349* subtotal_generation_info based structure level 1 dcl 11-279 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subtotal_info" dcl 11-291 in procedure "linus_fr_new_report" ref 1348 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subcount_info" dcl 11-272 in procedure "linus_fr_new_report" ref 1325 subtotal_generation_info_ptr 2 based pointer level 2 in structure "ssosi_subtotal_info" dcl 1379 in procedure "setup_subtotals_or_subcounts_info" set ref 1448* subtotal_generation_ip 000312 automatic pointer dcl 11-289 set ref 1348* subtotal_info based structure level 1 dcl 11-291 subtotal_info_ptr 70 based pointer level 2 dcl 11-74 set ref 1347* 1351* subtotal_ip 000316 automatic pointer dcl 11-310 set ref 1343* 1347 1348 1349 subtotal_is_defined 0(17) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 1343* 1345 subtotal_map based structure level 1 dcl 1895 set ref 1464 subtotal_map_init_number_of_columns 000146 automatic fixed bin(17,0) dcl 1901 set ref 1463* 1464 1464 subtotal_map_ptr 000150 automatic pointer dcl 1902 set ref 1464* 1465 1477 1478 1478 1480 switch_name 000152 automatic char(32) packed unaligned dcl 1903 set ref 1217* 1220* switches 3 based structure level 2 dcl 3-12 syllable_size 4 based fixed bin(17,0) level 2 dcl 3-12 set ref 1207* sys_info$max_seg_size 000026 external static fixed bin(35,0) dcl 1904 ref 117 table_info based structure level 1 dcl 13-5 table_info_ptr 10 based pointer level 2 dcl 11-74 set ref 130* table_ip 000336 automatic pointer dcl 13-57 set ref 113* 116 130 215 1491 1494 1494 1550 1713 1716 1716 1802 temp_dir_name 63 based char(168) level 2 packed packed unaligned dcl 10-7 ref 1219 temp_seg_ptr 000162 automatic pointer dcl 1906 set ref 121* 1079 1145 template based char packed unaligned dcl 11-327 set ref 1080* 1118* 1123 1124* 1147 1148 template_info based structure level 1 dcl 11-312 template_length 000325 automatic fixed bin(17,0) dcl 11-328 set ref 1078* 1080 1118 1123 1123 1124 1139 1147 1148 1148 template_map based bit(1) array packed unaligned dcl 11-322 ref 1143 template_map_number_of_bits 000324 automatic fixed bin(17,0) dcl 11-324 set ref 1142* 1143 template_map_ptr 26 based pointer level 2 dcl 11-74 set ref 1144* template_mp 000322 automatic pointer dcl 11-323 set ref 1143* 1144 template_ptr 000326 automatic pointer dcl 11-329 set ref 1079* 1080 1118 1123* 1123 1123 1124 1145* 1147 1148* 1148 1148 template_width based fixed bin(17,0) level 2 dcl 11-312 set ref 1140* 1147 1147 1147 templates 2 based char array level 2 packed packed unaligned dcl 11-221 set ref 1147* ti_init_number_of_columns_to_total 000332 automatic fixed bin(17,0) dcl 11-356 set ref 1662* 1669* 1669 1679 1691 1691 ti_init_number_of_templates 000320 automatic fixed bin(17,0) dcl 11-317 set ref 1138* 1140 1140 ti_init_template_width 000321 automatic fixed bin(17,0) dcl 11-319 set ref 1139* 1140 1140 title_block_columns_info based structure level 1 unaligned dcl 11-331 set ref 1162 1163* title_block_columns_info_ptr 50 based pointer level 2 dcl 11-74 set ref 1164* title_block_columns_ip 000330 automatic pointer dcl 11-332 set ref 1162* 1163 1164 1166 title_block_info_ptr 52 based pointer level 2 dcl 11-74 set ref 1171* title_block_is_defined 0(05) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 984* 986* 1159 total 7 based float dec(59) array level 3 dcl 1642 set ref 1692* total_characters 2 based fixed bin(21,0) level 2 dcl 9-29 set ref 1049* 1050 1064 1064 1064 total_columns_info based structure level 1 unaligned dcl 11-345 total_info based structure level 1 dcl 11-348 total_info_ptr 74 based pointer level 2 dcl 11-74 set ref 1619* 1621* total_ip 000334 automatic pointer dcl 11-357 set ref 1617* 1619 total_is_defined 0(19) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 1617* 1619 truncation_indicator 105 based varying char(32) level 2 dcl 11-74 set ref 1187* type 0(01) based fixed bin(6,0) level 2 packed packed unsigned unaligned dcl 14-6 ref 293 293 293 293 293 293 293 293 293 1803 unique_chars_ 000030 constant entry external dcl 1908 ref 1217 1218 unlimited_page_length based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 964* 970* 1018 1050 unlimited_page_width 0(01) based bit(1) level 3 packed packed unaligned dcl 11-74 set ref 955* 957* unspec builtin function dcl 1909 set ref 129* 176* 503* 689* 886* 898* 1190* 1250* 1434* 1465* verify builtin function dcl 1911 ref 1774 version_number based fixed bin(17,0) level 2 dcl 3-12 set ref 1191* watch_column 11 based fixed bin(17,0) array level 3 dcl 1379 set ref 1503* 1506 width 10 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 11-206 in procedure "linus_fr_new_report" set ref 992 1007 1007* 1103 1111 width based fixed bin(17,0) level 2 in structure "page_info" dcl 9-29 in procedure "linus_fr_new_report" set ref 363 1047* 1049 1073 1108 1111 width 6 based fixed bin(17,0) array level 4 in structure "header_info" dcl 11-160 in procedure "linus_fr_new_report" set ref 606* width 10 based fixed bin(17,0) array level 3 in structure "input_columns_info" dcl 11-182 in procedure "linus_fr_new_report" set ref 706* 1780 1780* work_area based area dcl 1913 ref 128 260 502 688 691 759 793 835 901 913 973 1046 1061 1064 1074 1140 1143 1162 1189 1249 1432 1446 1464 1524 1691 1732 work_area_ptr 000164 automatic pointer dcl 1914 set ref 120* 128 260 502 688 691 759 793 835 901 913 973 1046 1061 1064 1074 1140 1143 1162 1189 1249 1432 1446 1464 1524 1691 1732 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 4-15 Direct_output internal static fixed bin(17,0) initial dcl 4-15 Envptr_supplied_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 GENERAL_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 8-15 GENERAL_REPORT_OPTION internal static fixed bin(17,0) initial dcl 8-14 Interseg_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 4-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 4-15 LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 8-28 LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 8-27 LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 8-26 MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 8-32 MAXIMUM_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 8-35 NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 8-22 OPTION_NAMES_AS_ARGS internal static structure array level 1 unaligned dcl 6-101 Quick_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 2-54 SPECIFIC_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 8-16 Sequential_input internal static fixed bin(17,0) initial dcl 4-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_output internal static fixed bin(17,0) initial dcl 4-15 Sequential_update internal static fixed bin(17,0) initial dcl 4-15 Stream_input internal static fixed bin(17,0) initial dcl 4-15 Stream_input_output internal static fixed bin(17,0) initial dcl 4-15 Stream_output internal static fixed bin(17,0) initial dcl 4-15 arg_descriptor_ptr automatic pointer dcl 1-34 arg_list_with_envptr based structure level 1 dcl 2-42 columns_ip automatic pointer dcl 11-46 command_name_arglist based structure level 1 dcl 2-25 count_columns_info based structure level 1 unaligned dcl 11-54 count_columns_ip automatic pointer dcl 11-55 count_info based structure level 1 unaligned dcl 11-57 current_row_value based char packed unaligned dcl 11-61 editing_string_result based char packed unaligned dcl 11-64 editing_string_rl automatic fixed bin(17,0) dcl 11-65 editing_string_rp automatic pointer dcl 11-66 extended_arg_descriptor based structure level 1 dcl 1-21 fixed_arg_descriptor based structure level 1 dcl 1-13 format_document_version_1 internal static fixed bin(17,0) initial dcl 3-64 headers_temp_seg_as_an_array based char(1) array packed unaligned dcl 11-157 init_number_of_descriptors automatic fixed bin(17,0) dcl 13-54 iox_modes internal static char(24) initial array dcl 4-6 name_value_info based structure array level 1 dcl 7-17 names_and_values based char packed unaligned dcl 7-27 next_row_value based char packed unaligned dcl 11-191 no_of_names_and_values automatic fixed bin(21,0) dcl 7-31 no_of_options_in_name_table automatic fixed bin(21,0) dcl 7-40 option_name_table based structure array level 1 unaligned dcl 7-36 page_defined_as_a_string based char packed unaligned dcl 9-40 page_defined_as_chars based char(1) array packed unaligned dcl 9-38 page_defined_as_lines based char array packed unaligned dcl 9-39 page_overstrike_info_redefined based structure level 1 dcl 9-51 previous_row_value based char packed unaligned dcl 11-218 rel builtin function dcl 1886 row_ptrs based structure level 1 dcl 13-32 row_ptrs_p automatic pointer dcl 13-41 row_segs_info based structure level 1 dcl 13-25 row_segs_ip automatic pointer dcl 13-39 row_value based char packed unaligned dcl 13-36 row_value_p automatic pointer packed unaligned dcl 13-37 rsi_init_max_number_of_seg_ptrs automatic fixed bin(17,0) dcl 13-55 short_iox_modes internal static char(4) initial array dcl 4-12 size_of_names_and_values automatic fixed bin(21,0) dcl 7-32 store_ap automatic pointer dcl 13-56 store_args based structure level 1 dcl 13-44 subcount_columns_info based structure level 1 unaligned dcl 11-266 subcount_generation_info based structure level 1 unaligned dcl 11-269 table_control_info based structure level 1 unaligned dcl 12-5 table_control_ip automatic pointer dcl 12-44 tbi_init_line_length automatic fixed bin(17,0) dcl 11-341 tbi_init_number_of_lines automatic fixed bin(17,0) dcl 11-342 template_ip automatic pointer dcl 11-318 template_map_defined_as_a_string based bit packed unaligned dcl 11-325 ti_init_column_count automatic fixed bin(17,0) dcl 13-58 title_block_info based structure level 1 dcl 11-335 title_block_ip automatic pointer dcl 11-343 total_columns_ip automatic pointer dcl 11-346 NAMES DECLARED BY EXPLICIT CONTEXT. allocate_header_info_structure 003604 constant entry internal dcl 481 ref 457 cleanup_and_save_header_line 003677 constant entry internal dcl 509 ref 462 correct_header_part_anomaly 004030 constant entry internal dcl 536 ref 470 define_header 003403 constant entry internal dcl 406 ref 370 374 378 382 386 390 get_column_number 011502 constant entry internal dcl 1539 ref 1476 1503 1592 get_option_value 002016 constant entry internal dcl 80 ref 251 311 356 422 704 708 712 719 735 761 782 821 876 952 958 982 998 1105 1185 1196 1203 1318 1341 1615 housekeeping 002120 constant entry internal dcl 103 ref 64 linus_fr_new_report 001466 constant entry external dcl 37 lookup_column_number 002353 constant entry internal dcl 207 ref 186 map_column_list 002217 constant entry internal dcl 138 ref 259 763 791 830 881 1662 parse_header 003502 constant entry internal dcl 437 ref 429 remove_orphan_subtotals 011640 constant entry internal dcl 1566 ref 1404 set_alignment_and_decimal_position 012467 constant entry internal dcl 1743 ref 710 set_grouping_info 002457 constant entry internal dcl 228 ref 394 398 770 set_header_part_additional_info 004145 constant entry internal dcl 597 ref 472 set_header_part_info 004272 constant entry internal dcl 635 ref 468 set_ioa_string_for_total_or_subtotal 002612 constant entry internal dcl 271 ref 1494 1716 set_linus_data_type 012751 constant entry internal dcl 1793 ref 747 setup_counts_info 002766 constant entry internal dcl 303 ref 71 setup_header_info 003054 constant entry internal dcl 323 ref 73 setup_input_column_info 004425 constant entry internal dcl 677 ref 65 setup_output_column_info 005654 constant entry internal dcl 867 ref 66 setup_page_info 006202 constant entry internal dcl 934 ref 67 setup_report_info 007413 constant entry internal dcl 1178 ref 72 setup_status_info 010215 constant entry internal dcl 1242 ref 74 setup_subcounts_info 010337 constant entry internal dcl 1311 ref 69 setup_subtotals_info 010433 constant entry internal dcl 1334 ref 68 setup_subtotals_or_subcounts_info 010527 constant entry internal dcl 1357 ref 1320 1343 setup_totals_info 011772 constant entry internal dcl 1609 ref 70 setup_totals_or_counts_info 012060 constant entry internal dcl 1627 ref 313 1617 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 13716 13750 13555 13726 Length 14462 13555 32 476 140 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_fr_new_report 1808 external procedure is an external procedure. get_option_value internal procedure shares stack frame of external procedure linus_fr_new_report. housekeeping internal procedure shares stack frame of external procedure linus_fr_new_report. map_column_list internal procedure shares stack frame of external procedure linus_fr_new_report. lookup_column_number internal procedure shares stack frame of external procedure linus_fr_new_report. set_grouping_info internal procedure shares stack frame of external procedure linus_fr_new_report. set_ioa_string_for_total_or_subtotal internal procedure shares stack frame of external procedure linus_fr_new_report. setup_counts_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_header_info internal procedure shares stack frame of external procedure linus_fr_new_report. define_header internal procedure shares stack frame of external procedure linus_fr_new_report. parse_header internal procedure shares stack frame of external procedure linus_fr_new_report. allocate_header_info_structure internal procedure shares stack frame of external procedure linus_fr_new_report. cleanup_and_save_header_line internal procedure shares stack frame of external procedure linus_fr_new_report. correct_header_part_anomaly internal procedure shares stack frame of external procedure linus_fr_new_report. set_header_part_additional_info internal procedure shares stack frame of external procedure linus_fr_new_report. set_header_part_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_input_column_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_output_column_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_page_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_report_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_status_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_subcounts_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_subtotals_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_subtotals_or_subcounts_info internal procedure shares stack frame of external procedure linus_fr_new_report. get_column_number internal procedure shares stack frame of external procedure linus_fr_new_report. remove_orphan_subtotals internal procedure shares stack frame of external procedure linus_fr_new_report. setup_totals_info internal procedure shares stack frame of external procedure linus_fr_new_report. setup_totals_or_counts_info internal procedure shares stack frame of external procedure linus_fr_new_report. set_alignment_and_decimal_position internal procedure shares stack frame of external procedure linus_fr_new_report. set_linus_data_type internal procedure shares stack frame of external procedure linus_fr_new_report. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_fr_new_report 000100 code linus_fr_new_report 000102 iocb_ptr linus_fr_new_report 000104 lcn_column_name linus_fr_new_report 000104 no_of_columns_found linus_fr_new_report 000105 normalized_option_name linus_fr_new_report 000137 number_of_defined_columns linus_fr_new_report 000140 option_value linus_fr_new_report 000140 output_columns_order_number_of_columns linus_fr_new_report 000140 option_identifier linus_fr_new_report 000142 output_columns_op linus_fr_new_report 000144 ph_header_line linus_fr_new_report 000144 sci_ptr linus_fr_new_report 000146 ssosi_option_value linus_fr_new_report 000146 ssosi_column_name linus_fr_new_report 000146 subtotal_map_init_number_of_columns linus_fr_new_report 000150 subtotal_map_ptr linus_fr_new_report 000152 switch_name linus_fr_new_report 000162 temp_seg_ptr linus_fr_new_report 000164 work_area_ptr linus_fr_new_report 000166 extended_arg_type linus_fr_new_report 000170 format_document_options_ptr linus_fr_new_report 000172 lcb_ptr linus_fr_new_report 000174 names_and_values_info_ptr linus_fr_new_report 000176 names_and_values_ptr linus_fr_new_report 000200 option_name_table_ptr linus_fr_new_report 000202 formatted_page_ip linus_fr_new_report 000204 fpi_init_maximum_number_of_detail_blocks linus_fr_new_report 000206 page_ip linus_fr_new_report 000210 page_overstrike_ip linus_fr_new_report 000212 report_cip linus_fr_new_report 000214 column_ip linus_fr_new_report 000216 column_map_number_of_columns linus_fr_new_report 000220 column_mp linus_fr_new_report 000222 count_ip linus_fr_new_report 000224 editing_strings_next_byte linus_fr_new_report 000226 editing_strings_tsp linus_fr_new_report 000230 format_report_ip linus_fr_new_report 000232 generic_template_length linus_fr_new_report 000234 generic_tp linus_fr_new_report 000236 gi_init_number_of_columns_to_group linus_fr_new_report 000240 group_ip linus_fr_new_report 000242 headers_next_byte linus_fr_new_report 000244 headers_tsp linus_fr_new_report 000246 header_ip linus_fr_new_report 000250 hi_init_maximum_number_of_parts linus_fr_new_report 000251 hi_init_number_of_lines linus_fr_new_report 000252 initialize_number_of_columns linus_fr_new_report 000254 input_columns_ip linus_fr_new_report 000256 input_columns_op linus_fr_new_report 000260 maximum_segment_size linus_fr_new_report 000261 oi_init_maximum_number_of_grouping_columns linus_fr_new_report 000262 oi_init_maximum_number_of_single_columns linus_fr_new_report 000264 outline_ip linus_fr_new_report 000266 output_columns_ip linus_fr_new_report 000270 page_break_ip linus_fr_new_report 000272 pbi_init_number_of_columns linus_fr_new_report 000274 row_value_template_ip linus_fr_new_report 000276 status_pointer linus_fr_new_report 000300 subcount_columns_ip linus_fr_new_report 000302 subcount_generation_ip linus_fr_new_report 000304 subcount_ip linus_fr_new_report 000306 subtotal_columns_ip linus_fr_new_report 000310 sgi_init_number_of_generations linus_fr_new_report 000311 sgi_init_number_of_subtotals linus_fr_new_report 000312 subtotal_generation_ip linus_fr_new_report 000314 si_init_number_of_columns_to_subtotal linus_fr_new_report 000316 subtotal_ip linus_fr_new_report 000320 ti_init_number_of_templates linus_fr_new_report 000321 ti_init_template_width linus_fr_new_report 000322 template_mp linus_fr_new_report 000324 template_map_number_of_bits linus_fr_new_report 000325 template_length linus_fr_new_report 000326 template_ptr linus_fr_new_report 000330 title_block_columns_ip linus_fr_new_report 000332 ti_init_number_of_columns_to_total linus_fr_new_report 000334 total_ip linus_fr_new_report 000336 table_ip linus_fr_new_report 000340 desc_ptr linus_fr_new_report 000342 num_dims linus_fr_new_report 000460 gov_code get_option_value 000476 mcl_character_string_length map_column_list 000477 mcl_column_number map_column_list 000500 mcl_column_position map_column_list 000501 mcl_current_position map_column_list 000502 mcl_next_blank map_column_list 000503 mcl_no_of_columns_found map_column_list 000504 mcl_still_processing_columns map_column_list 000514 lcn_loop lookup_column_number 000524 sgi_group_info_ptr set_grouping_info 000526 sgi_loop set_grouping_info 000536 sisfs_scale set_ioa_string_for_total_or_subtotal 000554 shi_additional_indent setup_header_info 000555 shi_alignment_modes setup_header_info 000560 shi_delimiter setup_header_info 000561 shi_inner_loop setup_header_info 000562 shi_loop setup_header_info 000563 shi_current_header_part setup_header_info 000564 shi_current_inner_position setup_header_info 000565 shi_current_position setup_header_info 000566 shi_header_info_ptr setup_header_info 000570 shi_header_length setup_header_info 000571 shi_header_part_length setup_header_info 000572 shi_n_parts_width setup_header_info 000575 shi_next_newline_position setup_header_info 000576 shi_number_of_lines_found setup_header_info 000577 shi_number_of_parts_found setup_header_info 000600 shi_second_delimiter_position setup_header_info 000601 shi_starting_position setup_header_info 000602 shi_still_counting setup_header_info 000603 shi_still_parsing setup_header_info 000620 ph_header_line_length parse_header 000646 chpa_loop correct_header_part_anomaly 000672 sici_hit setup_input_column_info 000673 sici_inner_loop setup_input_column_info 000674 sici_loop setup_input_column_info 000712 soci_inner_loop setup_output_column_info 000713 soci_loop setup_output_column_info 000724 spi_current_detail_line setup_page_info 000725 spi_current_position setup_page_info 000726 spi_exceeds_max_seg_size setup_page_info 000727 spi_last_column_on_detail_line setup_page_info 000730 spi_loop setup_page_info 000731 spi_separator_width setup_page_info 000776 ssosi_comma_position setup_subtotals_or_subcounts_info 000777 ssosi_current_position setup_subtotals_or_subcounts_info 001000 ssosi_current_inner_position setup_subtotals_or_subcounts_info 001001 ssosi_inner_loop setup_subtotals_or_subcounts_info 001002 ssosi_loop setup_subtotals_or_subcounts_info 001003 ssosi_next_blank setup_subtotals_or_subcounts_info 001004 ssosi_still_counting_subtotals setup_subtotals_or_subcounts_info 001006 ssosi_subtotal_columns_info_ptr setup_subtotals_or_subcounts_info 001010 ssosi_subtotal_generation_info_ptr setup_subtotals_or_subcounts_info 001012 ssosi_subtotal_list_length setup_subtotals_or_subcounts_info 001026 gcn_loop get_column_number 001036 ros_column_number remove_orphan_subtotals 001037 ros_current_position remove_orphan_subtotals 001040 ros_next_blank remove_orphan_subtotals 001041 ros_next_comma remove_orphan_subtotals 001042 ros_still_eliminating_orphans remove_orphan_subtotals 001043 ros_subtotal_list_length remove_orphan_subtotals 001060 stoci_inner_loop setup_totals_or_counts_info 001061 stoci_loop setup_totals_or_counts_info 001062 stoci_total_columns_info_ptr setup_totals_or_counts_info 001076 saadp_claimed_digits set_alignment_and_decimal_position 001110 sldt_column_type set_linus_data_type THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac alloc_auto_adj mpfx2 mdfx1 shorten_stack ext_entry any_to_any_truncate_op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. iox_$attach_name iox_$open linus_options$get linus_table$info ssu_$abort_line unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. linus_error_$bad_option_value linus_error_$bad_report_setup sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 37 001462 1863 001473 1878 001503 1879 001513 1884 001523 1892 001533 1893 001543 1 36 001553 7 29 001555 7 30 001557 7 41 001560 10 52 001561 14 20 001562 251 001563 259 001566 311 001571 313 001574 356 001577 422 001602 429 001605 664 001610 704 001613 708 001621 710 001627 712 001632 719 001640 735 001646 761 001654 763 001657 782 001662 791 001665 821 001670 830 001673 876 001676 881 001701 952 001704 958 001707 982 001712 998 001715 1105 001723 1185 001731 1196 001734 1203 001737 1318 001742 1320 001745 1341 001750 1343 001753 1554 001756 1558 001761 1615 001764 1617 001767 62 001772 63 001776 64 001777 65 002000 66 002001 67 002002 68 002003 69 002004 70 002005 71 002006 72 002007 73 002010 74 002011 76 002012 78 002015 80 002016 92 002041 96 002100 99 002117 103 002120 111 002121 113 002124 114 002137 116 002156 117 002161 119 002165 120 002170 121 002172 122 002174 124 002176 125 002200 126 002202 128 002203 129 002210 130 002213 132 002215 134 002216 138 002217 176 002230 177 002241 178 002252 179 002254 180 002256 181 002260 182 002261 184 002263 185 002266 186 002307 187 002311 189 002315 190 002322 191 002325 192 002326 194 002327 195 002334 197 002337 198 002341 199 002342 201 002346 203 002347 205 002352 207 002353 211 002355 214 002372 215 002401 217 002420 219 002422 222 002454 228 002457 250 002470 251 002473 252 002516 254 002524 255 002531 258 002532 259 002537 260 002557 262 002567 263 002577 264 002604 265 002606 267 002611 271 002612 289 002623 290 002627 291 002633 293 002713 297 002754 299 002765 303 002766 311 002767 313 003012 315 003041 317 003050 319 003053 323 003054 356 003055 358 003100 360 003113 361 003116 362 003120 363 003122 364 003125 365 003127 366 003132 367 003134 368 003136 370 003140 374 003163 378 003207 382 003233 386 003257 390 003303 394 003327 398 003353 402 003377 404 003402 406 003403 421 003414 422 003417 423 003442 425 003450 426 003455 429 003456 430 003472 431 003477 433 003501 437 003502 454 003513 455 003516 457 003533 459 003534 461 003536 462 003545 463 003546 464 003550 465 003551 466 003552 467 003554 468 003556 469 003557 470 003560 471 003561 472 003571 473 003572 474 003574 475 003576 477 003600 479 003603 481 003604 487 003605 488 003606 489 003610 490 003614 492 003616 493 003620 495 003641 496 003642 497 003643 499 003647 501 003650 502 003652 503 003666 505 003676 509 003677 516 003700 518 003721 520 003732 522 003734 524 003752 526 003777 529 004014 530 004016 532 004027 536 004030 566 004031 573 004071 582 004106 583 004115 586 004135 587 004140 591 004142 593 004144 597 004145 604 004146 606 004164 608 004170 610 004176 613 004206 615 004215 617 004223 619 004225 620 004230 621 004234 623 004240 624 004241 625 004242 626 004246 627 004257 631 004271 635 004272 643 004273 645 004310 646 004312 647 004313 649 004327 656 004347 658 004353 660 004355 661 004357 663 004364 664 004365 669 004424 677 004425 687 004426 688 004430 689 004441 690 004450 691 004452 692 004457 700 004461 701 004471 702 004531 704 004540 706 004562 708 004600 710 004623 712 004640 714 004663 716 004677 717 004704 719 004707 721 004731 724 004745 725 004747 726 004754 727 004757 729 004765 731 004775 733 004776 735 004777 737 005021 739 005037 740 005045 742 005053 744 005063 747 005064 748 005067 757 005071 758 005074 759 005076 761 005104 763 005127 764 005150 765 005157 766 005170 767 005172 768 005176 770 005200 772 005224 774 005233 782 005235 784 005260 786 005266 787 005270 788 005273 790 005274 791 005276 792 005316 793 005320 794 005332 795 005347 796 005351 797 005361 799 005373 800 005375 802 005400 803 005407 804 005410 805 005415 808 005427 810 005435 811 005440 821 005442 823 005465 825 005473 826 005475 827 005500 829 005501 830 005503 831 005523 833 005531 834 005532 835 005534 836 005547 837 005551 838 005552 840 005565 841 005573 844 005602 846 005604 848 005613 850 005616 851 005621 852 005623 853 005625 855 005637 857 005644 858 005646 860 005651 863 005653 867 005654 876 005655 878 005700 880 005706 881 005710 882 005730 883 005733 885 005734 886 005736 894 005747 896 005751 897 005753 898 005755 899 005766 900 005767 901 005771 902 006002 912 006004 913 006006 914 006013 916 006015 917 006025 919 006035 920 006042 922 006043 924 006045 925 006055 927 006175 928 006177 930 006201 934 006202 952 006203 954 006226 955 006240 957 006246 958 006250 960 006273 961 006305 963 006310 964 006312 965 006314 967 006331 969 006332 970 006334 972 006336 973 006340 974 006351 982 006353 984 006376 986 006407 988 006411 990 006414 991 006416 992 006425 994 006432 996 006435 998 006477 1000 006522 1003 006524 1004 006526 1005 006532 1006 006533 1007 006543 1009 006555 1017 006557 1018 006561 1020 006564 1021 006566 1022 006570 1025 006603 1030 006636 1031 006642 1035 006646 1046 006647 1047 006654 1048 006657 1049 006662 1050 006664 1057 006724 1058 006727 1059 006732 1060 006735 1061 006737 1062 006744 1063 006751 1064 006752 1065 006771 1073 006773 1074 006775 1075 007004 1076 007010 1077 007013 1078 007015 1079 007017 1080 007021 1091 007025 1092 007027 1094 007030 1095 007037 1097 007103 1099 007113 1101 007114 1102 007117 1103 007121 1105 007123 1107 007145 1108 007147 1111 007155 1116 007171 1118 007173 1119 007203 1120 007205 1121 007206 1123 007211 1124 007217 1125 007225 1126 007226 1129 007230 1138 007232 1139 007234 1140 007236 1141 007255 1142 007257 1143 007262 1144 007271 1145 007273 1146 007275 1147 007305 1148 007325 1149 007332 1159 007334 1161 007337 1162 007341 1163 007352 1164 007362 1165 007364 1166 007373 1167 007377 1168 007401 1169 007403 1170 007405 1171 007407 1174 007412 1178 007413 1185 007414 1187 007437 1189 007451 1190 007456 1191 007461 1192 007463 1193 007465 1194 007467 1195 007471 1196 007473 1198 007516 1200 007524 1201 007527 1203 007531 1205 007553 1207 007564 1208 007567 1215 007571 1217 007574 1218 007626 1219 007652 1220 007656 1224 007771 1229 010071 1230 010111 1235 010210 1238 010214 1242 010215 1249 010216 1250 010223 1252 010226 1253 010227 1256 010234 1257 010237 1258 010241 1261 010242 1263 010245 1264 010250 1267 010251 1270 010256 1271 010261 1272 010263 1276 010264 1279 010271 1280 010274 1283 010276 1286 010303 1287 010306 1290 010310 1293 010315 1294 010320 1297 010322 1298 010324 1299 010325 1300 010326 1301 010327 1302 010330 1303 010332 1305 010334 1307 010336 1311 010337 1318 010340 1320 010363 1322 010412 1324 010415 1325 010420 1326 010423 1327 010426 1328 010427 1330 010432 1334 010433 1341 010434 1343 010457 1345 010506 1347 010511 1348 010514 1349 010517 1350 010522 1351 010523 1353 010526 1357 010527 1387 010540 1389 010547 1390 010553 1391 010555 1399 010556 1400 010562 1401 010563 1402 010565 1403 010567 1404 010576 1405 010577 1407 010606 1408 010612 1409 010614 1411 010615 1417 010617 1418 010622 1419 010643 1421 010646 1422 010647 1424 010652 1426 010656 1432 010657 1433 010671 1434 010672 1435 010702 1444 010723 1445 010725 1446 010732 1448 010751 1449 010755 1463 010757 1464 010761 1465 010772 1466 011001 1467 011003 1469 011007 1470 011017 1471 011021 1472 011042 1474 011053 1475 011065 1476 011076 1477 011111 1478 011122 1480 011123 1482 011127 1484 011132 1486 011135 1491 011147 1494 011204 1497 011233 1498 011234 1499 011240 1500 011242 1501 011262 1503 011273 1504 011306 1506 011321 1509 011336 1510 011340 1512 011367 1513 011371 1523 011373 1524 011375 1525 011406 1526 011411 1527 011421 1529 011441 1530 011453 1532 011471 1535 011477 1537 011501 1539 011502 1549 011504 1550 011513 1552 011532 1554 011534 1558 011577 1562 011635 1566 011640 1580 011641 1581 011642 1582 011646 1583 011650 1585 011652 1586 011654 1588 011676 1590 011710 1592 011721 1593 011723 1596 011747 1597 011751 1599 011755 1601 011756 1603 011771 1609 011772 1615 011773 1617 012016 1619 012045 1621 012054 1623 012057 1627 012060 1649 012071 1651 012100 1652 012104 1653 012106 1661 012107 1662 012113 1664 012134 1665 012143 1668 012156 1669 012160 1673 012162 1679 012164 1681 012166 1682 012173 1683 012175 1691 012176 1692 012210 1693 012231 1701 012233 1702 012243 1704 012253 1706 012264 1708 012270 1713 012301 1716 012336 1719 012365 1720 012366 1721 012372 1723 012373 1731 012375 1732 012377 1733 012410 1734 012413 1735 012423 1736 012444 1739 012466 1743 012467 1758 012500 1761 012516 1764 012532 1767 012546 1771 012562 1773 012570 1774 012613 1778 012657 1780 012675 1789 012750 1793 012751 1802 012753 1803 012760 1805 012764 1809 013005 1815 013034 1818 013047 1821 013062 1825 013112 ----------------------------------------------------------- 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