COMPILATION LISTING OF SEGMENT rw_fr_new_report Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/16/84 1122.5 mst Fri 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 report_writer_ display request to set 11* up the environment for a new report. Description and usage follows. 12* 13* Description: 14* 15* This module calls rw_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 rw_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 rw_fr_build_page. 21* 22* Usage: 23* 24* Both parameters are passed to this program by it's caller, rw_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* Changed - Al Dupuis - October 1984 Became report_writer_. 35* 36**/ 37 38 rw_fr_new_report: proc ( 39 40 report_cip_parm, /* input: points to report_control_info */ 41 code_parm /* output: success or failure */ 42 ); 43 44 dcl code_parm fixed bin (35) parm; 45 dcl report_cip_parm ptr parm; 46 47 /* 48* Mainline Processing Overview. 49* 50* (1) Perform initialization. 51* 52* (2) Go through the process of getting format options from rw_options 53* and allocating/filling in the execution structures based on what the 54* options are defined as. The order is roughly setting up the input 55* columns, the output columns, the page information, the subtotals and 56* subcounts, the totals and counts, the report info, the 57* headers/footers info, and the status info. Everything specific to 58* one of these areas sometimes can't all be done in the specific 59* subroutine because there are some things that are order dependent. 60* 61**/ 62 63 report_cip = report_cip_parm; 64 code_parm = 0; 65 call housekeeping; 66 call setup_input_column_info; 67 call setup_output_column_info; 68 call setup_page_info; 69 call setup_subtotals_info; 70 call setup_subcounts_info; 71 call setup_totals_info; 72 call setup_counts_info; 73 call setup_report_info; 74 call setup_header_info; 75 call setup_status_info; 76 77 report_control_info.format_report_info_ptr = format_report_ip; 78 79 return; 80 81 get_option_value: proc ( 82 83 gov_option_name_parm, /* input: name of option */ 84 gov_option_identifier_parm, /* input: column identifier */ 85 gov_option_value_parm /* output: option value */ 86 ); 87 88 dcl gov_code fixed bin (35); 89 dcl gov_option_identifier_parm char (*) varying parm; 90 dcl gov_option_name_parm char (*) varying parm; 91 dcl gov_option_value_parm char (*) varying parm; 92 93 call rw_options$get (report_cip, gov_option_name_parm, 94 gov_option_identifier_parm, normalized_option_name, 95 gov_option_value_parm, gov_code); 96 97 if gov_code ^= 0 98 then call ssu_$abort_line (sci_ptr, gov_code); 99 100 return; 101 102 end get_option_value; 103 104 housekeeping: proc; 105 106 /* 107* Make sure the table information is up to date. Set the pointers to 108* our needed temp segments and areas. Allocate/initialize the 109* format_report_info structure. 110**/ 111 112 sci_ptr = report_control_info.subsystem_control_info_ptr; 113 114 table_ip = report_control_info.table_information_ptr; 115 if table_ip = null 116 then call ssu_$abort_line (sci_ptr, rw_error_$no_columns_defined); 117 number_of_defined_columns = table_info.column_count; 118 maximum_segment_size = sys_info$max_seg_size * 4; 119 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 format_report_info.report_iocb_ptr = null; 132 format_report_info.report_directory_name = ""; 133 format_report_info.report_entry_name = ""; 134 135 code = 0; 136 137 return; 138 139 end housekeeping; 140 141 map_column_list: proc ( 142 143 mcl_type_of_map_parm, /* input: two different types of map */ 144 mcl_option_value_parm, /* input: the list of columns */ 145 mcl_no_of_columns_found_parm /* output: how many were in the list */ 146 ); 147 148 dcl mcl_character_string_length fixed bin; 149 dcl mcl_column_number fixed bin; 150 dcl mcl_column_position fixed bin; 151 dcl mcl_current_position fixed bin; 152 dcl mcl_next_blank fixed bin; 153 dcl mcl_no_of_columns_found fixed bin; 154 dcl mcl_no_of_columns_found_parm fixed bin parm; 155 dcl mcl_option_value_parm char (*) varying parm; 156 dcl mcl_still_processing_columns bit (1) aligned; 157 dcl mcl_type_of_map_parm bit (1) aligned parm; 158 159 /* 160* Parse the column list and fill in the column_map structure based on what 161* we find. Set the output parm to reflect how many columns we've found. 162* The column map has been normalized by rw_options to change all column 163* numbers to names, place a single blank between each, and trim all leading 164* and trailing whitespace. We supply two types of maps. The parameter 165* mcl_type_of_map_parm when set to OUTPUT_MAP results in us preserving the 166* order in which we find them. If it is set to INPUT_MAP the order of the 167* selection expression is preserved. For example, if the user selected a, 168* b, c, d, e, f, g, h and the list contained "e c" the map would look like: 169* 170* OUTPUT_MAP 1 2 3 4 5 6 7 8 171* 1 1 0 0 0 0 0 0 PRESENT 172* 5 3 0 0 0 0 0 0 POSITION 173* 174* INPUT_MAP 1 2 3 4 5 6 7 8 175* 0 0 1 0 1 0 0 0 PRESENT 176* 0 0 3 0 5 0 0 0 POSITION 177**/ 178 179 unspec (column_map) = OFF; 180 mcl_option_value_parm = mcl_option_value_parm || BLANK; 181 mcl_current_position = 1; 182 mcl_character_string_length = length (mcl_option_value_parm); 183 mcl_column_position = 1; 184 mcl_no_of_columns_found = 0; 185 mcl_still_processing_columns = ON; 186 187 do while (mcl_still_processing_columns); 188 mcl_next_blank = index (substr (mcl_option_value_parm, mcl_current_position), BLANK); 189 mcl_column_number = lookup_column_number (); 190 if mcl_type_of_map_parm = OUTPUT_MAP 191 then do; 192 column_map.present (mcl_column_position) = ON; 193 column_map.position (mcl_column_position) = mcl_column_number; 194 mcl_column_position = mcl_column_position + 1; 195 end; 196 else do; 197 column_map.present (mcl_column_number) = ON; 198 column_map.position (mcl_column_number) = mcl_column_number; 199 end; 200 mcl_current_position = mcl_current_position + mcl_next_blank; 201 mcl_no_of_columns_found = mcl_no_of_columns_found + 1; 202 if mcl_current_position > mcl_character_string_length 203 then mcl_still_processing_columns = OFF; 204 end; 205 206 mcl_no_of_columns_found_parm = mcl_no_of_columns_found; 207 208 return; 209 210 lookup_column_number: proc () returns (fixed bin); 211 212 dcl lcn_loop fixed bin; 213 214 lcn_column_name = substr (mcl_option_value_parm, 215 mcl_current_position, mcl_next_blank - 1); 216 217 do lcn_loop = 1 to number_of_defined_columns; 218 if lcn_column_name = table_info.columns.column_name (lcn_loop) 219 then return (lcn_loop); 220 end; 221 222 call ssu_$abort_line (sci_ptr, rw_error_$bad_option_value, 223 "^/Invalid column list ""^a"".", mcl_option_value_parm); 224 225 return (0); 226 227 end lookup_column_number; 228 229 end map_column_list; 230 231 set_grouping_info: proc ( 232 233 sgi_option_name_parm, /* input: name of group option */ 234 sgi_grouping_is_defined_flag_parm, /* output: on if group is defined */ 235 sgi_group_info_ptr_parm /* output: ptr to group_info structure if above is on */ 236 ); 237 238 dcl 1 sgi_group_info like group_info based (sgi_group_info_ptr); 239 dcl sgi_group_info_ptr ptr; 240 dcl sgi_group_info_ptr_parm ptr parm; 241 dcl sgi_grouping_is_defined_flag_parm bit (1) parm; 242 dcl sgi_loop fixed bin; 243 dcl sgi_option_name_parm char (*) varying parm; 244 245 /* 246* 247* Get the option value associated with the named option. Set the flag to 248* reflect whether or not it's defined. Allocate/fill in the group_info 249* structure if it's defined. 250* 251**/ 252 253 sgi_group_info_ptr_parm = null (); 254 call get_option_value (sgi_option_name_parm, "", option_value); 255 if option_value = "" 256 then do; 257 sgi_grouping_is_defined_flag_parm = OFF; 258 return; 259 end; 260 261 sgi_grouping_is_defined_flag_parm = ON; 262 call map_column_list (OUTPUT_MAP, option_value, gi_init_number_of_columns_to_group); 263 allocate sgi_group_info in (work_area) set (sgi_group_info_ptr); 264 265 do sgi_loop = 1 to gi_init_number_of_columns_to_group; 266 sgi_group_info.column_number (sgi_loop) = column_map.position (sgi_loop); 267 end; 268 sgi_group_info_ptr_parm = sgi_group_info_ptr; 269 270 return; 271 272 end set_grouping_info; 273 274 set_ioa_string_for_total_or_subtotal: proc ( 275 276 sisfs_descriptor_ptr_parm, /* input: ptr to the descriptor */ 277 sisfs_ioa_string_parm /* output: the proper ioa_ string to edit it through */ 278 ); 279 280 dcl sisfs_char_10 char (10) based; 281 dcl sisfs_descriptor_ptr_parm ptr parm; 282 dcl sisfs_ioa_string_parm char (*) varying parm; 283 dcl sisfs_scale fixed bin; 284 285 /* 286* If the scale is greater than zero then set the ioa_ string to reflect 287* the number of digits (i.e. fixed dec (5,2) would be "^.2f"). If scale 288* is zero then set the ioa_ string to "^f" for float numbers and "^d" for 289* all others. 290**/ 291 292 arg_descriptor_ptr = sisfs_descriptor_ptr_parm; 293 sisfs_scale = fixed_arg_descriptor.scale; 294 if sisfs_scale > 0 295 then sisfs_ioa_string_parm = "^." || ltrim (convert (sisfs_char_10, sisfs_scale)) || "f"; 296 else if arg_descriptor.type = 3 | arg_descriptor.type = 4 | arg_descriptor.type = 7 297 | arg_descriptor.type = 8 | arg_descriptor.type = 10 | arg_descriptor.type = 12 298 | arg_descriptor.type = 42 | arg_descriptor.type = 44 | arg_descriptor.type = 46 299 then sisfs_ioa_string_parm = "^f"; 300 else sisfs_ioa_string_parm = "^d"; 301 302 return; 303 304 end set_ioa_string_for_total_or_subtotal; 305 306 setup_counts_info: proc; 307 308 /* 309* Get the value for the count option and get the subroutine to figure out 310* if it's defined and allocate/initialize the structure if it is. Set it's 311* pointer in format_report_info. 312**/ 313 314 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 315 (INDEX_FOR_COUNT), "", option_value); 316 call setup_totals_or_counts_info (ROW_COUNT, option_value, 317 format_report_info.flags.count_is_defined, count_ip); 318 if format_report_info.flags.count_is_defined 319 then format_report_info.count_info_ptr = count_ip; 320 else format_report_info.count_info_ptr = null (); 321 322 return; 323 324 end setup_counts_info; 325 326 setup_header_info: proc; 327 328 dcl shi_additional_indent fixed bin; 329 dcl shi_alignment_modes (3) fixed bin; 330 dcl shi_delimiter char (1); 331 dcl shi_inner_loop fixed bin; 332 dcl shi_loop fixed bin; 333 dcl shi_current_header_part fixed bin; 334 dcl shi_current_inner_position fixed bin; 335 dcl shi_current_position fixed bin; 336 dcl shi_header_info_ptr ptr; 337 dcl shi_header_length fixed bin; 338 dcl shi_header_part_length fixed bin; 339 dcl shi_n_parts_width (3) fixed bin; 340 dcl shi_next_newline_position fixed bin; 341 dcl shi_number_of_lines_found fixed bin; 342 dcl shi_number_of_parts_found fixed bin; 343 dcl shi_second_delimiter_position fixed bin; 344 dcl shi_starting_position fixed bin; 345 dcl shi_still_counting bit (1) aligned; 346 dcl shi_still_parsing bit (1) aligned; 347 348 /* 349* Get the header portion delimiter. Init maximum number of portions to three 350* and set the widths for 1, 2, and 3 part headers. Make left, center 351* and right portions alignment accordingly. Get the subroutine to figure out 352* which headers/footers are defined and allocate/fill in the structures. 353* Group headers and footers need grouping info set for them. The parsed 354* versions of the character strings the headers/footers were set to are 355* placed contiguosly in a temp segment, and the rest of the temp seg is used 356* during the evaluation of each (in rw_fr_build_page). 357**/ 358 359 call get_option_value (OPTIONS.GENERAL_REPORT.NAME ( 360 INDEX_FOR_DELIMITER), "", option_value); 361 if option_value ^= "" 362 then format_report_info.header_part_delimiter = substr (option_value, 1, 1); 363 else format_report_info.header_part_delimiter = BLANK; 364 shi_delimiter = format_report_info.header_part_delimiter; 365 hi_init_maximum_number_of_parts = 3; 366 shi_n_parts_width (1) = page_info.width - 1; 367 shi_n_parts_width (2) = divide (shi_n_parts_width (1), 2, 17); 368 shi_n_parts_width (3) = divide (shi_n_parts_width (1), 3, 17); 369 shi_alignment_modes (1) = LEFT_ALIGNMENT; 370 shi_alignment_modes (2) = CENTER_ALIGNMENT; 371 shi_alignment_modes (3) = RIGHT_ALIGNMENT; 372 373 call define_header (OPTIONS.GENERAL_REPORT.NAME (INDEX_FOR_PAGE_HEADER_VALUE), 374 format_report_info.flags.page_header_is_defined, 375 format_report_info.page_header_info_ptr); 376 377 call define_header (OPTIONS.GENERAL_REPORT.NAME (INDEX_FOR_PAGE_FOOTER_VALUE), 378 format_report_info.flags.page_footer_is_defined, 379 format_report_info.page_footer_info_ptr); 380 381 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_ROW_HEADER_VALUE), 382 format_report_info.flags.row_header_is_defined, 383 format_report_info.row_header_info_ptr); 384 385 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_ROW_FOOTER_VALUE), 386 format_report_info.flags.row_footer_is_defined, 387 format_report_info.row_footer_info_ptr); 388 389 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_HEADER_VALUE), 390 format_report_info.flags.group_header_is_defined, 391 format_report_info.group_header_info_ptr); 392 393 call define_header (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_FOOTER_VALUE), 394 format_report_info.flags.group_footer_is_defined, 395 format_report_info.group_footer_info_ptr); 396 397 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_HEADER_TRIGGER), 398 format_report_info.flags.group_header_trigger_is_defined, 399 format_report_info.group_header_trigger_info_ptr); 400 401 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP_FOOTER_TRIGGER), 402 format_report_info.flags.group_footer_trigger_is_defined, 403 format_report_info.group_footer_trigger_info_ptr); 404 405 format_report_info.headers_next_available_byte = headers_next_byte; 406 407 return; 408 409 define_header: proc ( 410 411 dh_header_option_name_parm, /* input: name of header/footer option */ 412 dh_header_is_defined_flag_parm, /* output: on if header is defined */ 413 dh_header_info_ptr_parm /* output: points to header_info structure */ 414 ); 415 416 dcl dh_header_option_name_parm char (*) varying parm; 417 dcl dh_header_is_defined_flag_parm bit (1) parm; 418 dcl dh_header_info_ptr_parm ptr parm; 419 420 /* 421* Parse the header and set pointer and bit to reflect it's definition. 422**/ 423 424 dh_header_info_ptr_parm = null (); 425 call get_option_value (dh_header_option_name_parm, "", option_value); 426 if option_value = "" 427 then do; 428 dh_header_is_defined_flag_parm = OFF; 429 return; 430 end; 431 432 call parse_header (option_value, shi_header_info_ptr); 433 dh_header_is_defined_flag_parm = ON; 434 dh_header_info_ptr_parm = shi_header_info_ptr; 435 436 return; 437 438 end define_header; 439 440 parse_header: proc ( 441 442 ph_header_value_parm, /* input: the header to be parsed */ 443 ph_header_info_ptr_parm /* output: ptr to the header info structure */ 444 ); 445 446 dcl ph_header_info_ptr_parm ptr parm; 447 dcl ph_header_line_length fixed bin; 448 dcl ph_header_value_parm char (*) varying parm; 449 450 /* 451* Make sure header ends in new line. Allocate header_info structure based on 452* how many lines it is. Cleanup header and place it in temp seg. For each 453* part within each line fill in the structure and redistribute page space. 454* Set the starting position on the page and alignment for each part. 455**/ 456 457 ph_header_info_ptr_parm = null (); 458 if substr (ph_header_value_parm, length (ph_header_value_parm), 1) ^= NL 459 then ph_header_value_parm = ph_header_value_parm || NL; 460 call allocate_header_info_structure; 461 462 shi_current_position = 1; 463 464 do shi_loop = 1 to shi_number_of_lines_found; 465 call cleanup_and_save_header_line; 466 shi_current_header_part = 1; 467 shi_number_of_parts_found = 0; 468 shi_current_inner_position = 1; 469 shi_still_parsing = ON; 470 do while (shi_still_parsing); 471 call set_header_part_info; 472 end; 473 call correct_header_part_anomaly; 474 do shi_inner_loop = 1 to hi_init_maximum_number_of_parts; 475 call set_header_part_additional_info; 476 end; 477 headers_next_byte = headers_next_byte + ph_header_line_length; 478 end; 479 480 ph_header_info_ptr_parm = header_ip; 481 482 return; 483 484 allocate_header_info_structure: proc; 485 486 /* 487* Allocate structure based on number of lines it is made up of. 488**/ 489 490 shi_number_of_lines_found = 0; 491 shi_current_position = 1; 492 shi_header_length = length (ph_header_value_parm); 493 shi_still_counting = ON; 494 495 do while (shi_still_counting); 496 shi_next_newline_position = index (substr (ph_header_value_parm, 497 shi_current_position), NL); 498 shi_number_of_lines_found = shi_number_of_lines_found + 1; 499 shi_current_position = shi_current_position + shi_next_newline_position; 500 if shi_current_position > shi_header_length 501 then shi_still_counting = OFF; 502 end; 503 504 hi_init_number_of_lines = shi_number_of_lines_found; 505 allocate header_info in (work_area) set (header_ip); 506 unspec (header_info.lines) = OFF; 507 508 return; 509 510 end allocate_header_info_structure; 511 512 cleanup_and_save_header_line: proc; 513 514 /* 515* Left, right, and center portion delimiters are optional. Place any 516* missing ones. Save the cleaned up header line. 517**/ 518 519 shi_next_newline_position = index (substr (ph_header_value_parm, 520 shi_current_position), NL); 521 ph_header_line = substr (ph_header_value_parm, 522 shi_current_position, shi_next_newline_position - 1); 523 shi_current_position = shi_current_position + shi_next_newline_position; 524 525 if length (ph_header_line) = 0 526 then ph_header_line = shi_delimiter || shi_delimiter; 527 if substr (ph_header_line, 1, 1) ^= shi_delimiter 528 then ph_header_line = shi_delimiter || ph_header_line; 529 if substr (ph_header_line, length (ph_header_line), 1) ^= shi_delimiter 530 then ph_header_line = ph_header_line || shi_delimiter; 531 532 ph_header_line_length = length (ph_header_line); 533 substr (headers_temp_seg, headers_next_byte, ph_header_line_length) = ph_header_line; 534 535 return; 536 537 end cleanup_and_save_header_line; 538 539 correct_header_part_anomaly: proc; 540 541 dcl chpa_loop fixed bin; 542 543 /* 544* Parts of a header/footer which are zero length have their space 545* assigned to the parts whose length is greater than zero. This creates 546* an environment where all space on the page is available for use. For 547* example, if only the center part of a header has a length greater than 548* zero, the text is centered on the page but it has 100% of the page width 549* available to use. There are two cases where this action is not desired, 550* and this subroutine takes care of these two special cases (listed in the 551* table below as the two special cases). 552* 553* NORMAL RE-DISTIBUTION ACTION 554* 555*1. !!text!! 100%-centered 556*2. !text!text!text! 33%-left aligned, 33%-centered, 33%-right aligned 557*3. !text!!text! 50%-left aligned, 50%-right aligned 558*4. !text!!! 100%-left aligned 559*5. !!!text! 100%-right aligned 560* 561* SPECIAL CASE - NO RE-DISTRIBUTION ACTION 562* 563*6. !text!text!! 33%-left aligned, 33%-centered, 33%-UNUSED 564*7. !!text!text! 33%-UNUSED, 33%-centered, 33%-right aligned 565* 566* Special case, #7 above, followed immediately by #6. 567**/ 568 569 if (header_info.lines (shi_loop).parts (1).flags.present 570 & header_info.lines (shi_loop).parts (1).length = 0) 571 & (header_info.lines (shi_loop).parts (2).flags.present 572 & header_info.lines (shi_loop).parts (2).length > 0) 573 & (header_info.lines (shi_loop).parts (3).flags.present 574 & header_info.lines (shi_loop).parts (3).length > 0) 575 then return; 576 else if (header_info.lines (shi_loop).parts (3).flags.present 577 & header_info.lines (shi_loop).parts (3).length = 0) 578 & (header_info.lines (shi_loop).parts (1).flags.present 579 & header_info.lines (shi_loop).parts (1).length > 0) 580 & (header_info.lines (shi_loop).parts (2).flags.present 581 & header_info.lines (shi_loop).parts (2).length > 0) 582 then return; 583 else; 584 585 do chpa_loop = 1 to hi_init_maximum_number_of_parts; 586 if header_info.lines (shi_loop).parts (chpa_loop).flags.present 587 then if header_info.lines (shi_loop).parts (chpa_loop).length = 0 588 then do; 589 header_info.lines (shi_loop).parts (chpa_loop).flags.present = OFF; 590 shi_number_of_parts_found = shi_number_of_parts_found - 1; 591 end; 592 else; 593 else; 594 end; 595 596 return; 597 598 end correct_header_part_anomaly; 599 600 set_header_part_additional_info: proc; 601 602 /* 603* For each part that's present set it's width, starting position on the 604* page, and alignment. 605**/ 606 607 if header_info.lines (shi_loop).parts (shi_inner_loop).flags.present 608 then do; 609 header_info.lines (shi_loop).parts (shi_inner_loop).width 610 = shi_n_parts_width (shi_number_of_parts_found); 611 if shi_number_of_parts_found = 1 612 then shi_starting_position = 1; 613 else if shi_number_of_parts_found = 2 614 then if shi_inner_loop = 1 615 then shi_starting_position = 1; 616 else shi_starting_position = shi_n_parts_width (2) 617 + mod (shi_n_parts_width (1), 2) + 1; 618 else if shi_inner_loop = 1 619 then shi_starting_position = 1; 620 else if shi_inner_loop = 2 621 then do; 622 shi_starting_position = shi_n_parts_width (3) + 1; 623 shi_additional_indent = mod (shi_n_parts_width (1), 3); 624 if shi_additional_indent = 2 625 then shi_additional_indent = 1; 626 shi_starting_position = shi_starting_position + shi_additional_indent; 627 end; 628 else shi_starting_position = shi_n_parts_width (1) - shi_n_parts_width (3) + 1; 629 header_info.lines (shi_loop).parts (shi_inner_loop).starting_position = shi_starting_position; 630 header_info.lines (shi_loop).parts (shi_inner_loop).alignment 631 = shi_alignment_modes (shi_inner_loop); 632 end; 633 634 return; 635 636 end set_header_part_additional_info; 637 638 set_header_part_info: proc; 639 640 /* 641* Find the portion and it's length. Mark it present and whether it 642* contains active requests. Set the index and length to it. Check to make 643* sure the maximum number of header parts isn't exceeded. 644**/ 645 646 shi_second_delimiter_position = index (substr (ph_header_line, 647 shi_current_inner_position + 1), shi_delimiter); 648 shi_header_part_length = shi_second_delimiter_position - 1; 649 shi_number_of_parts_found = shi_number_of_parts_found + 1; 650 header_info.lines (shi_loop).parts (shi_current_header_part).flags.present = ON; 651 652 if shi_header_part_length ^= 0 653 then if search (substr (ph_header_line, 654 shi_current_inner_position + 1, shi_header_part_length), LEFT_OR_RIGHT_BRACKET) ^= 0 655 then header_info.lines (shi_loop).parts (shi_current_header_part).flags.active = ON; 656 else; 657 else; 658 659 header_info.lines (shi_loop).parts (shi_current_header_part).index 660 = headers_next_byte + shi_current_inner_position; 661 header_info.lines (shi_loop).parts (shi_current_header_part).length = shi_header_part_length; 662 663 shi_current_inner_position = shi_current_inner_position + shi_second_delimiter_position; 664 if shi_current_inner_position >= ph_header_line_length 665 then shi_still_parsing = OFF; 666 else shi_current_header_part = shi_current_header_part + 1; 667 if shi_current_header_part > hi_init_maximum_number_of_parts 668 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_setup, 669 "^/A header or footer was found which contained more than ^d parts." 670 || "^/The line in error was ^/^a", hi_init_maximum_number_of_parts, ph_header_line); 671 672 return; 673 674 end set_header_part_info; 675 676 end parse_header; 677 678 end setup_header_info; 679 680 setup_input_column_info: proc; 681 682 dcl sici_hit bit (1) aligned; 683 dcl sici_inner_loop fixed bin; 684 dcl sici_loop fixed bin; 685 686 /* 687* Allocate and init the input_columns_info and input_columns_order structures. 688**/ 689 690 initialize_number_of_columns = number_of_defined_columns; 691 allocate input_columns_info in (work_area) set (input_columns_ip); 692 unspec (input_columns_info.columns) = OFF; 693 format_report_info.input_columns_info_ptr = input_columns_ip; 694 allocate input_columns_order in (work_area) set (input_columns_op); 695 format_report_info.input_columns_order_ptr = input_columns_op; 696 697 /* 698* Set the width, alignment, folding, prefix character, editing, title, 699* and data type for each column. Stash the editing string and the title 700* in the editing strings temp segment. 701**/ 702 703 do sici_loop = 1 to number_of_defined_columns; 704 option_identifier = ltrim (convert (option_identifier, sici_loop)); 705 input_columns_info.columns (sici_loop).input_column = sici_loop; 706 707 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 708 (INDEX_FOR_WIDTH), option_identifier, option_value); 709 input_columns_info.columns (sici_loop).width = convert (sici_loop, option_value); 710 711 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 712 (INDEX_FOR_ALIGNMENT), option_identifier, option_value); 713 call set_alignment_and_decimal_position (sici_loop, option_value); 714 715 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 716 (INDEX_FOR_FOLDING), option_identifier, option_value); 717 if option_value = "fill" 718 then input_columns_info.columns (sici_loop).folding_is_fill = ON; 719 else input_columns_info.columns (sici_loop).folding_is_fill = OFF; 720 input_columns_info.columns (sici_loop).prefix_character = ""; 721 722 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 723 (INDEX_FOR_EDITING), option_identifier, option_value); 724 if option_value = "" 725 then input_columns_info.columns (sici_loop).editing = OFF; 726 else do; 727 format_report_info.flags.editing_is_defined = ON; 728 input_columns_info.columns (sici_loop).editing = ON; 729 input_columns_info.columns (sici_loop).editing_string_length = length (option_value); 730 input_columns_info.columns (sici_loop).editing_string_ptr 731 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 732 substr (editing_strings_temp_seg, editing_strings_next_byte, 733 input_columns_info.columns (sici_loop).editing_string_length) = option_value; 734 editing_strings_next_byte = editing_strings_next_byte 735 + input_columns_info.columns (sici_loop).editing_string_length; 736 end; 737 738 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 739 (INDEX_FOR_TITLE), option_identifier, option_value); 740 if option_value = "" 741 then option_value = BLANK; 742 input_columns_info.columns (sici_loop).editing_string_result_length = length (option_value); 743 input_columns_info.columns (sici_loop).editing_string_result_ptr 744 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 745 substr (editing_strings_temp_seg, editing_strings_next_byte, 746 input_columns_info.columns (sici_loop).editing_string_result_length) = option_value; 747 editing_strings_next_byte = editing_strings_next_byte 748 + input_columns_info.columns (sici_loop).editing_string_result_length; 749 750 call set_data_type (sici_loop); 751 end; 752 753 /* 754* Set the next available byte in the editing strings temp seg. Allocate 755* the column map structure. Map the column order list and set the 756* input_columns_info and input_columns_order structures to reflect the 757* order. Set the grouping info. 758**/ 759 760 format_report_info.editing_strings_next_available_byte = editing_strings_next_byte; 761 column_map_number_of_columns = number_of_defined_columns; 762 allocate column_map in (work_area) set (column_mp); 763 764 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 765 (INDEX_FOR_COLUMN_ORDER), "", option_value); 766 call map_column_list (OUTPUT_MAP, option_value, no_of_columns_found); 767 do sici_loop = 1 to number_of_defined_columns; 768 input_columns_info.columns (sici_loop).order = column_map.position (sici_loop); 769 input_columns_info.columns (sici_loop).input_column = sici_loop; 770 input_columns_order (sici_loop) = column_map.position (sici_loop); 771 end; 772 773 call set_grouping_info (OPTIONS.GENERAL_COLUMN.NAME (INDEX_FOR_GROUP), 774 format_report_info.flags.group_is_defined, format_report_info.group_info_ptr); 775 if format_report_info.flags.group_is_defined 776 then group_ip = format_report_info.group_info_ptr; 777 else group_ip = null (); 778 779 /* 780* Allocate/set the page_break_info structure. Any column requested as a 781* page break candidate who is a member of the "group" columns has any 782* columns more major in the group set also. 783**/ 784 785 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 786 (INDEX_FOR_PAGE_BREAK), "", option_value); 787 if option_value = "" 788 then do; 789 format_report_info.flags.page_break_is_defined = OFF; 790 format_report_info.page_break_info_ptr = null (); 791 end; 792 else do; 793 format_report_info.flags.page_break_is_defined = ON; 794 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 795 pbi_init_number_of_columns = input_columns_info.number_of_columns; 796 allocate page_break_info in (work_area) set (page_break_ip); 797 page_break_info.columns (*) = OFF; 798 format_report_info.page_break_info_ptr = page_break_ip; 799 do sici_loop = 1 to input_columns_info.number_of_columns; 800 if column_map.present (sici_loop) 801 then page_break_info.columns (sici_loop) = ON; 802 end; 803 if format_report_info.flags.group_is_defined 804 then do; 805 do sici_loop = 1 to input_columns_info.number_of_columns; 806 sici_hit = OFF; 807 do sici_inner_loop = group_info.number_of_columns_to_group to 1 by -1; 808 if group_info.column_number (sici_inner_loop) = sici_loop 809 & page_break_info.columns (group_info.column_number (sici_inner_loop)) 810 then sici_hit = ON; 811 if sici_hit 812 then page_break_info.columns (group_info.column_number (sici_inner_loop)) = ON; 813 end; 814 end; 815 end; 816 end; 817 818 /* 819* Allocate/set the outline_info structure. The columns named who are a 820* member of the "group" of columns are treated separately from the columns 821* who are not a member of the group. 822**/ 823 824 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 825 (INDEX_FOR_OUTLINE), "", option_value); 826 if option_value = "" 827 then do; 828 format_report_info.flags.outline_is_defined = OFF; 829 format_report_info.outline_info_ptr = null (); 830 end; 831 else do; 832 format_report_info.flags.outline_is_defined = ON; 833 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 834 if format_report_info.flags.group_is_defined 835 then oi_init_maximum_number_of_grouping_columns = group_info.number_of_columns_to_group; 836 else oi_init_maximum_number_of_grouping_columns = 0; 837 oi_init_maximum_number_of_single_columns = input_columns_info.number_of_columns; 838 allocate outline_info in (work_area) set (outline_ip); 839 format_report_info.outline_info_ptr = outline_ip; 840 outline_info.number_of_grouping_columns = 0; 841 if format_report_info.flags.group_is_defined 842 then do sici_loop = 1 to input_columns_info.number_of_columns; 843 do sici_inner_loop = group_info.number_of_columns_to_group to 1 by -1; 844 if group_info.column_number (sici_inner_loop) = sici_loop 845 & column_map.present (group_info.column_number (sici_inner_loop)) 846 then do; 847 outline_info.number_of_grouping_columns 848 = outline_info.number_of_grouping_columns + 1; 849 outline_info.grouping_columns (outline_info.number_of_grouping_columns) 850 = group_info.column_number (sici_inner_loop); 851 column_map.present (group_info.column_number (sici_inner_loop)) = OFF; 852 end; 853 end; 854 end; 855 outline_info.number_of_single_columns = 0; 856 if outline_info.number_of_grouping_columns ^= no_of_columns_found 857 then do sici_loop = 1 to input_columns_info.number_of_columns; 858 if column_map.present (sici_loop) 859 then do; 860 outline_info.number_of_single_columns = outline_info.number_of_single_columns + 1; 861 outline_info.single_columns (outline_info.number_of_single_columns) = sici_loop; 862 end; 863 end; 864 end; 865 866 return; 867 868 end setup_input_column_info; 869 870 setup_output_column_info: proc; 871 872 dcl soci_inner_loop fixed bin; 873 dcl soci_loop fixed bin; 874 875 /* 876* Find out which columns are excluded from the page. 877**/ 878 879 call get_option_value (OPTIONS.GENERAL_COLUMN.NAME 880 (INDEX_FOR_EXCLUDE), "", option_value); 881 if option_value ^= "" 882 then do; 883 format_report_info.flags.exclude_is_defined = ON; 884 call map_column_list (INPUT_MAP, option_value, no_of_columns_found); 885 initialize_number_of_columns = number_of_defined_columns - no_of_columns_found; 886 end; 887 else do; 888 initialize_number_of_columns = number_of_defined_columns; 889 unspec (column_map) = OFF; 890 end; 891 892 /* 893* If all columns are excluded fill them in as all present for the case 894* where it is a report consisting of totals/subtotals only. 895**/ 896 897 if initialize_number_of_columns = 0 898 then do; 899 format_report_info.flags.row_value_is_defined = OFF; 900 initialize_number_of_columns = number_of_defined_columns; 901 unspec (column_map) = OFF; 902 end; 903 else format_report_info.flags.row_value_is_defined = ON; 904 allocate output_columns_info in (work_area) set (output_columns_ip); 905 format_report_info.output_columns_info_ptr = output_columns_ip; 906 907 /* 908* Allocate/set the output_columns_order array. Assign input_columns_info 909* for each column that isn't excluded into output_columns_info, and make 910* each output_columns_info reflect it's input_columns_info (i.e. if the 911* user re-ordered and excluded columns, the output_columns_info structure 912* will reflect it.) 913**/ 914 915 output_columns_order_number_of_columns = output_columns_info.number_of_columns; 916 allocate output_columns_order in (work_area) set (output_columns_op); 917 soci_inner_loop = 1; 918 919 do soci_loop = 1 to number_of_defined_columns; 920 if ^column_map.present (input_columns_info.columns (soci_loop).order) 921 then do; 922 output_columns_order (soci_inner_loop) = input_columns_info.columns (soci_loop).order; 923 soci_inner_loop = soci_inner_loop + 1; 924 end; 925 end; 926 927 do soci_loop = 1 to output_columns_info.number_of_columns; 928 output_columns_info.columns (soci_loop) 929 = input_columns_info.columns (output_columns_order (soci_loop)); 930 input_columns_info.columns (output_columns_order (soci_loop)).output_column = soci_loop; 931 end; 932 933 return; 934 935 end setup_output_column_info; 936 937 setup_page_info: proc; 938 939 dcl spi_current_detail_line fixed bin; 940 dcl spi_current_position fixed bin; 941 dcl spi_exceeds_max_seg_size bit (1) aligned; 942 dcl spi_last_column_on_detail_line bit (1) aligned; 943 dcl spi_loop fixed bin; 944 dcl spi_separator_width fixed bin; 945 946 /* 947* Get the page length and width. A page length of zero means the report is 948* unpaginated. If page length is zero then set the internal page length 949* to a healthy buffer size. Unpaginated reports are buffered into chunks 950* that are mostly treated just like a page, because it would be foolish 951* to try to do the whole report in one chunk when there may be several 952* million rows in the table. Allocate formatted_page_info structure. 953**/ 954 955 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 956 (INDEX_FOR_PAGE_WIDTH), "", option_value); 957 format_report_info.page_width = convert (spi_loop, option_value); 958 if format_report_info.page_width = 0 959 then format_report_info.flags.unlimited_page_width = ON; 960 else format_report_info.flags.unlimited_page_width = OFF; 961 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 962 (INDEX_FOR_PAGE_LENGTH), "", option_value); 963 format_report_info.page_length = convert (spi_loop, option_value); 964 if format_report_info.page_length = 0 965 then do; 966 report_control_info.flags.report_is_paginated = OFF; 967 format_report_info.flags.unlimited_page_length = ON; 968 format_report_info.page_length = BUFFER_PAGE_LENGTH; 969 end; 970 else do; 971 report_control_info.flags.report_is_paginated = ON; 972 format_report_info.flags.unlimited_page_length = OFF; 973 end; 974 fpi_init_maximum_number_of_detail_blocks = format_report_info.page_length; 975 allocate formatted_page_info in (work_area) set (formatted_page_ip); 976 format_report_info.formatted_page_info_ptr = formatted_page_ip; 977 978 /* 979* Get the definition of the title line. If page width is zero then calculate 980* exactly what's needed; if it isn't zero then reduce the width of any 981* column who exceeds page width to page width. 982**/ 983 984 call get_option_value (OPTIONS.GENERAL_REPORT.NAME 985 (INDEX_FOR_TITLE_LINE), "", option_value); 986 if option_value = "on" 987 then format_report_info.flags.title_block_is_defined = ON; 988 else format_report_info.flags.title_block_is_defined = OFF; 989 990 if format_report_info.page_width = 0 991 then do; 992 spi_current_position = 1; 993 do spi_loop = 1 to output_columns_info.number_of_columns; 994 spi_current_position = spi_current_position 995 + output_columns_info.columns (spi_loop).width; 996 if spi_loop ^= output_columns_info.number_of_columns 997 then do; 998 option_identifier = ltrim (convert (option_identifier, 999 output_columns_info.columns (spi_loop).input_column)); 1000 call get_option_value (OPTIONS.SPECIFIC_COLUMN.NAME 1001 (INDEX_FOR_SEPARATOR), option_identifier, option_value); 1002 spi_current_position = spi_current_position + length (option_value); 1003 end; 1004 else; 1005 end; 1006 format_report_info.page_width = spi_current_position - 1; 1007 end; 1008 else do spi_loop = 1 to output_columns_info.number_of_columns; 1009 if output_columns_info.columns (spi_loop).width > format_report_info.page_width 1010 then output_columns_info.columns (spi_loop).width = format_report_info.page_width; 1011 end; 1012 1013 /* 1014* Add one to page width to accomodate the newline. If report isn't paginated 1015* then check to make sure that our chosen page length * page width doesn't 1016* exceed the maximum segment size. If it does reduce accordingly. 1017**/ 1018 1019 format_report_info.page_width = format_report_info.page_width + 1; 1020 if format_report_info.flags.unlimited_page_length 1021 then do; 1022 spi_exceeds_max_seg_size = ON; 1023 do while (spi_exceeds_max_seg_size); 1024 if format_report_info.page_width * (format_report_info.page_length - 6) ^> maximum_segment_size 1025 then spi_exceeds_max_seg_size = OFF; 1026 else do; 1027 if format_report_info.page_length < 8 1028 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_setup, 1029 "The page width of ^d causes a single page to exceed the maximum segment size.", 1030 format_report_info.page_width); 1031 1032 format_report_info.page_length = divide (format_report_info.page_length, 2, 17); 1033 if format_report_info.page_length < 7 1034 then format_report_info.page_length = 7; 1035 else; 1036 end; 1037 end; 1038 end; 1039 1040 /* 1041* Allocate/set page_info structure. Make sure a single page doesn't exceed 1042* a segment for paginated reports. Allocate a second copy of the structure 1043* so rw_fr_build_page can adjust the length, width, and total_characters 1044* after formatting each page and then restore the original structure before 1045* beginning the next page. Allocate page_overstrike_info structure. 1046**/ 1047 1048 allocate page_info in (work_area) set (page_ip); 1049 page_info.width = format_report_info.page_width; 1050 page_info.length = format_report_info.page_length - 6; 1051 if page_info.width * page_info.length > maximum_segment_size 1052 then call ssu_$abort_line (sci_ptr, rw_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 page_info.total_characters = page_info.width * page_info.length; 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* rw_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) || ".rw_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 rw_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)).subsystem_data_type = NUMERIC_DATA_TYPE 1488 | input_columns_info.columns (ssosi_subtotal_info.columns 1489 .input_column (ssosi_loop)).subsystem_data_type = DECIMAL_DATA_TYPE 1490 then; 1491 else call ssu_$abort_line (sci_ptr, rw_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 rw_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, rw_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, rw_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 .subsystem_data_type = NUMERIC_DATA_TYPE 1710 | input_columns_info.columns (stoci_total_info.columns.input_column (stoci_inner_loop)) 1711 .subsystem_data_type = DECIMAL_DATA_TYPE 1712 then; 1713 else call ssu_$abort_line (sci_ptr, rw_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, rw_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, rw_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_data_type: proc (sdt_column_number_parm); 1794 1795 dcl sdt_column_number_parm fixed bin parm; 1796 dcl sdt_column_type fixed bin (6) unsigned unaligned; 1797 1798 /* 1799* Simplify all of the possibilities into numeric, decimal, bit or character. 1800**/ 1801 1802 arg_descriptor_ptr = addr (table_info.columns.column_data_type (sdt_column_number_parm)); 1803 sdt_column_type = arg_descriptor.type; 1804 1805 if (sdt_column_type >= 1 & sdt_column_type <= 8) 1806 | (sdt_column_type = 33 | sdt_column_type = 34) 1807 then input_columns_info.columns (sdt_column_number_parm) 1808 .subsystem_data_type = NUMERIC_DATA_TYPE; 1809 else if (sdt_column_type >= 9 & sdt_column_type <= 12) 1810 | (sdt_column_type = 29 | sdt_column_type = 30) 1811 | (sdt_column_type = 35 | sdt_column_type = 36) 1812 | (sdt_column_type >= 38 & sdt_column_type <= 46) 1813 then input_columns_info.columns (sdt_column_number_parm) 1814 .subsystem_data_type = DECIMAL_DATA_TYPE; 1815 else if (sdt_column_type = 19 | sdt_column_type = 20) 1816 then input_columns_info.columns (sdt_column_number_parm) 1817 .subsystem_data_type = BIT_DATA_TYPE; 1818 else if (sdt_column_type = 21 | sdt_column_type = 22) 1819 then input_columns_info.columns (sdt_column_number_parm) 1820 .subsystem_data_type = CHAR_DATA_TYPE; 1821 else call ssu_$abort_line (sci_ptr, rw_error_$bad_report_setup, 1822 "^/The table information described an unsupported data type.^/The data type was ^d.", 1823 sdt_column_type); 1824 1825 return; 1826 1827 end set_data_type; 1828 1829 dcl BLANK char (1) static int options (constant) init (" "); 1830 dcl BUFFER_PAGE_LENGTH fixed bin int static options (constant) init (264); 1831 dcl COMMA char (1) static int options (constant) init (","); 1832 dcl DEFAULT_SYLLABLE_SIZE fixed bin static int options (constant) init (2); 1833 dcl DIGITS char (10) static int options (constant) init ("0123456789"); 1834 dcl INPUT_MAP bit (1) aligned static int options (constant) init ("1"b); 1835 dcl LEFT_OR_RIGHT_BRACKET char (2) internal static options (constant) init ("[]"); 1836 dcl NL char (1) internal static options (constant) init (" 1837 "); 1838 dcl OFF bit (1) aligned internal static options (constant) init ("0"b); 1839 dcl ON bit (1) aligned internal static options (constant) init ("1"b); 1840 dcl OUTPUT_MAP bit (1) aligned static int options (constant) init ("0"b); 1841 dcl RESET char (5) static int options (constant) init ("reset"); 1842 dcl ROW_COUNT bit (1) aligned static int options (constant) init ("0"b); 1843 dcl ROW_SUBCOUNT bit (1) aligned static int options (constant) init ("0"b); 1844 dcl ROW_SUBTOTAL bit (1) aligned static int options (constant) init ("1"b); 1845 dcl ROW_TOTAL bit (1) aligned static int options (constant) init ("1"b); 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 1857 dcl iocb_ptr ptr; 1858 dcl index builtin; 1859 dcl iox_$attach_name entry (char(*), ptr, char(*), ptr, fixed bin(35)); 1860 dcl iox_$open entry (ptr, fixed bin, bit(1) aligned, fixed bin(35)); 1861 1862 dcl lcn_column_name char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1863 dcl length builtin; 1864 dcl ltrim builtin; 1865 1866 dcl mod builtin; 1867 1868 dcl no_of_columns_found fixed bin; 1869 dcl normalized_option_name char (97) varying; 1870 dcl null builtin; 1871 dcl number_of_defined_columns fixed bin; 1872 1873 dcl option_identifier char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1874 dcl option_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1875 dcl output_columns_order (output_columns_order_number_of_columns) fixed bin based (output_columns_op); 1876 dcl output_columns_order_number_of_columns fixed bin; 1877 dcl output_columns_op ptr; 1878 1879 dcl ph_header_line char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1880 1881 dcl rtrim builtin; 1882 dcl rw_error_$bad_option_value fixed bin(35) ext static; 1883 dcl rw_error_$bad_report_setup fixed bin(35) ext static; 1884 dcl rw_error_$no_columns_defined fixed bin(35) ext static; 1885 dcl rw_options$get entry (ptr, char(*) var, char(*) var, char(*) var, char(*) var, fixed bin(35)); 1886 1887 dcl sci_ptr ptr; 1888 dcl search builtin; 1889 dcl size builtin; 1890 dcl ssosi_column_name char (MAXIMUM_OPTION_IDENTIFIER_LENGTH) varying; 1891 dcl ssosi_option_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 1892 dcl ssu_$abort_line entry() options(variable); 1893 dcl 1 subtotal_map aligned based (subtotal_map_ptr), 1894 2 number_of_columns fixed bin, 1895 2 columns (subtotal_map_init_number_of_columns refer (subtotal_map.number_of_columns)), 1896 3 present bit (1), 1897 3 number fixed bin; 1898 dcl substr builtin; 1899 dcl subtotal_map_init_number_of_columns fixed bin; 1900 dcl subtotal_map_ptr ptr; 1901 dcl switch_name char (32); 1902 dcl sys_info$max_seg_size fixed bin(35) ext static; 1903 1904 dcl temp_seg_ptr ptr; 1905 1906 dcl unique_chars_ entry (bit(*)) returns(char(15)); 1907 dcl unspec builtin; 1908 1909 dcl verify builtin; 1910 1911 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 1912 dcl work_area_ptr ptr; 1913 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 */ 1914 1915 2 1 /* BEGIN INCLUDE FILE ... arg_list.incl.pl1 2 2* 2 3* James R. Davis 10 May 79 */ 2 4 2 5 dcl 1 arg_list aligned based, 2 6 2 header, 2 7 3 arg_count fixed bin (17) unsigned unal, 2 8 3 pad1 bit (1) unal, 2 9 3 call_type fixed bin (18) unsigned unal, 2 10 3 desc_count fixed bin (17) unsigned unal, 2 11 3 pad2 bit (19) unal, 2 12 2 arg_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr, 2 13 2 desc_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr; 2 14 2 15 2 16 2 17 dcl 1 arg_list_with_envptr aligned based, /* used with non-quick int and entry-var calls */ 2 18 2 header, 2 19 3 arg_count fixed bin (17) unsigned unal, 2 20 3 pad1 bit (1) unal, 2 21 3 call_type fixed bin (18) unsigned unal, 2 22 3 desc_count fixed bin (17) unsigned unal, 2 23 3 pad2 bit (19) unal, 2 24 2 arg_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr, 2 25 2 envptr ptr, 2 26 2 desc_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr; 2 27 2 28 2 29 dcl ( 2 30 Quick_call_type init (0), 2 31 Interseg_call_type init (4), 2 32 Envptr_supplied_call_type 2 33 init (8) 2 34 ) fixed bin (18) unsigned unal int static options (constant); 2 35 2 36 /* The user must declare arg_list_arg_count - if an adjustable automatic structure 2 37* is being "liked" then arg_list_arg_count may be a parameter, in order to allocate 2 38* an argument list of the proper size in the user's stack 2 39* 2 40**/ 2 41 /* END INCLUDE FILE ... arg_list.incl.pl1 */ 1916 1917 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 */ 1918 1919 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 */ 1920 1921 5 1 /* BEGIN INCLUDE FILE rw_format_options.incl.pl1 5 2* 5 3* Formatting options used for producing reports. 5 4* Al Dupuis - August 1983 5 5* 5 6**/ 5 7 /* format: off */ 5 8 5 9 dcl 1 OPTIONS static int options (constant), 5 10 5 11 2 GENERAL_REPORT (9), 5 12 5 13 3 NAME char (32) varying init ( 5 14 5 15 "-delimiter", /* "!" */ 5 16 "-format_document_controls", /* "off" */ 5 17 "-hyphenation", /* "off" */ 5 18 "-page_footer_value", /* "" */ 5 19 "-page_header_value", /* "" */ 5 20 "-page_length", /* "0" */ 5 21 "-page_width", /* "79" */ 5 22 "-title_line", /* "on" */ 5 23 "-truncation" /* "*" */ 5 24 ), 5 25 5 26 3 VALUE char (32) varying init ( 5 27 5 28 "!", /* "-delimiter" */ 5 29 "off", /* "-format_document_controls " */ 5 30 "off", /* "-hyphenation" */ 5 31 "", /* "-page_footer_value" */ 5 32 "", /* "-page_header_value" */ 5 33 "0", /* "-page_length" */ 5 34 "79", /* "-page_width" */ 5 35 "on", /* "-title_line" */ 5 36 "*" /* "-truncation" */ 5 37 ), 5 38 5 39 2 GENERAL_COLUMN (15), 5 40 5 41 3 NAME char (32) varying init ( 5 42 5 43 "-column_order", /* "[sequential]" */ 5 44 "-count", /* "" */ 5 45 "-exclude", /* "" */ 5 46 "-group", /* "" */ 5 47 "-group_footer_trigger", /* "" */ 5 48 "-group_footer_value", /* "" */ 5 49 "-group_header_trigger", /* "" */ 5 50 "-group_header_value", /* "" */ 5 51 "-outline", /* "" */ 5 52 "-page_break", /* "" */ 5 53 "-row_footer_value", /* "" */ 5 54 "-row_header_value", /* "" */ 5 55 "-subcount", /* "" */ 5 56 "-subtotal", /* "" */ 5 57 "-total" /* "" */ 5 58 ), 5 59 5 60 3 VALUE char (32) varying init ( 5 61 5 62 "[sequential]", /* "-column_order" */ 5 63 "", /* "-count" */ 5 64 "", /* "-exclude" */ 5 65 "", /* "-group" */ 5 66 "", /* "-group_footer_trigger" */ 5 67 "", /* "-group_footer_value" */ 5 68 "", /* "-group_header_trigger" */ 5 69 "", /* "-group_header_value" */ 5 70 "", /* "-outline" */ 5 71 "", /* "-page_break" */ 5 72 "", /* "-row_footer_value" */ 5 73 "", /* "-row_header_value" */ 5 74 "", /* "-subcount" */ 5 75 "", /* "-subtotal" */ 5 76 "" /* "-total" */ 5 77 ), 5 78 5 79 2 SPECIFIC_COLUMN (6), 5 80 5 81 3 NAME char (32) varying init ( 5 82 5 83 "-alignment", /* "[alignment_default]" */ 5 84 "-editing", /* "" */ 5 85 "-folding", /* "fill" */ 5 86 "-separator", /* " " */ 5 87 "-title", /* "[database_column_name]" */ 5 88 "-width" /* "[width_default]" */ 5 89 ), 5 90 5 91 3 VALUE char (32) varying init ( 5 92 5 93 "[alignment_default]", /* "-alignment" */ 5 94 "", /* "-editing" */ 5 95 "fill", /* "-folding" */ 5 96 " ", /* "-separator" */ 5 97 "[database_column_name]", /* "-title" */ 5 98 "[width_default]" /* "-width" */ 5 99 ); 5 100 5 101 dcl 1 OPTION_NAMES_AS_ARGS (30) static int options (constant), 5 102 5 103 2 LONG_NAME char (32) varying init ( 5 104 5 105 "-alignment", /* sorted based on their values */ 5 106 "-column_order", 5 107 "-count", 5 108 "-delimiter", 5 109 "-editing", 5 110 "-exclude", 5 111 "-folding", 5 112 "-format_document_controls", 5 113 "-group", 5 114 "-group_footer_trigger", 5 115 "-group_footer_value", 5 116 "-group_header_trigger", 5 117 "-group_header_value", 5 118 "-hyphenation", 5 119 "-outline", 5 120 "-page_break", 5 121 "-page_footer_value", 5 122 "-page_header_value", 5 123 "-page_length", 5 124 "-page_width", 5 125 "-row_footer_value", 5 126 "-row_header_value", 5 127 "-separator", 5 128 "-subcount", 5 129 "-subtotal", 5 130 "-title", 5 131 "-title_line", 5 132 "-total", 5 133 "-truncation", 5 134 "-width" 5 135 ), 5 136 5 137 2 SHORT_NAME char (5) varying init ( 5 138 5 139 "-al", /* sorted based on their values */ 5 140 "-co", 5 141 "-ct", 5 142 "-dm", 5 143 "-ed", 5 144 "-ex", 5 145 "-fdc", 5 146 "-fold", 5 147 "-gft", 5 148 "-gfv", 5 149 "-ght", 5 150 "-ghv", 5 151 "-gr", 5 152 "-hph", 5 153 "-out", 5 154 "-pb", 5 155 "-pfv", 5 156 "-phv", 5 157 "-pl", 5 158 "-pw", 5 159 "-rfv", 5 160 "-rhv", 5 161 "-sct", 5 162 "-sep", 5 163 "-stt", 5 164 "-tc", 5 165 "-tl", 5 166 "-tt", 5 167 "-ttl", 5 168 "-wid" 5 169 ), 5 170 5 171 2 LONG_NAME_IN_SHORT_NAME_ORDER char (32) varying init ( 5 172 5 173 /* sorted based on the values of short_name */ 5 174 5 175 "-alignment", /* -al */ 5 176 "-column_order", /* -co */ 5 177 "-count", /* -ct */ 5 178 "-delimiter", /* -dm */ 5 179 "-editing", /* -ed */ 5 180 "-exclude", /* -ex */ 5 181 "-format_document_controls", /* -fdc */ 5 182 "-folding", /* -fold */ 5 183 "-group_footer_trigger", /* -gfv */ 5 184 "-group_footer_value", /* -gfv */ 5 185 "-group_header_trigger", /* -ghv */ 5 186 "-group_header_value", /* -ghv */ 5 187 "-group", /* -gr */ 5 188 "-hyphenation", /* -hph */ 5 189 "-outline", /* -out */ 5 190 "-page_break", /* -pb */ 5 191 "-page_footer_value", /* -pfv */ 5 192 "-page_header_value", /* -phv */ 5 193 "-page_length", /* -pl */ 5 194 "-page_width", /* -pw */ 5 195 "-row_footer_value", /* -rfv */ 5 196 "-row_header_value", /* -rhv */ 5 197 "-subcount", /* -sct */ 5 198 "-separator", /* -sep */ 5 199 "-subtotal", /* -stt */ 5 200 "-truncation", /* -tc */ 5 201 "-title_line", /* -tl */ 5 202 "-total", /* -tt */ 5 203 "-title", /* -ttl */ 5 204 "-width" /* -wid */ 5 205 ); 5 206 5 207 /* END INCLUDE FILE rw_format_options */ 1922 1923 6 1 /* BEGIN INCLUDE FILE ... rw_names_and_values.incl.pl1 6 2* 6 3* Names and values used for producing reports. These structures provide for 6 4* the passing of format report option names and values between requests and 6 5* the "rw_options" subroutine. The caller (usually a request) fills in the 6 6* "option_name_table" structure, or calls a bulk load entry point such as 6 7* rw_options$get_all. The rw_options subroutine uses the 6 8* "name_value_info" structure and the "names_and_values" character string to 6 9* return the requested names and values. 6 10* 6 11* Al Dupuis - August 1983 6 12**/ 6 13 /* format: off */ 6 14 6 15 /* Describes the "names_and_values" character string below. */ 6 16 6 17 dcl 1 name_value_info (no_of_names_and_values) aligned based (names_and_values_info_ptr), 6 18 2 name, /* location and length in temp seg */ 6 19 3 index fixed bin (21), 6 20 3 length fixed bin (21), 6 21 2 value, /* location and length in temp seg */ 6 22 3 index fixed bin (21), 6 23 3 length fixed bin (21); 6 24 6 25 /* Described by "name_value_info" structure above. */ 6 26 6 27 dcl names_and_values char (size_of_names_and_values) based (names_and_values_ptr); 6 28 6 29 dcl names_and_values_info_ptr ptr init (null()); 6 30 dcl names_and_values_ptr ptr init (null()); 6 31 dcl no_of_names_and_values fixed bin (21); 6 32 dcl size_of_names_and_values fixed bin (21); 6 33 6 34 /* Filled in by the caller (i.e. "list_format_options" request) */ 6 35 6 36 dcl 1 option_name_table (no_of_options_in_name_table) based (option_name_table_ptr), 6 37 2 the_name char (32) varying, /* option name */ 6 38 2 the_identifier char (32) varying; /* null, column name, or star name */ 6 39 6 40 dcl no_of_options_in_name_table fixed bin (21); 6 41 dcl option_name_table_ptr ptr init (null()); 6 42 6 43 /* END INCLUDE FILE rw_names_and_values.incl.pl1 */ 1924 1925 7 1 /* BEGIN INCLUDE FILE rw_options_extents.incl.pl1 7 2* 7 3* Extents for the formatting options used for producing reports. 7 4* Kept as a separate include so that some programs may include this 7 5* file without including rw_format_options.incl.pl1 7 6* 7 7* Al Dupuis - August 1983 7 8* 7 9**/ 7 10 /* format: off */ 7 11 7 12 /* The three types of format options that we have. */ 7 13 7 14 dcl GENERAL_REPORT_OPTION fixed bin static int options (constant) init (1); 7 15 dcl GENERAL_COLUMN_OPTION fixed bin static int options (constant) init (2); 7 16 dcl SPECIFIC_COLUMN_OPTION fixed bin static int options (constant) init (3); 7 17 7 18 /* Used to determine how big the tables are without doing a hbound on it. */ 7 19 7 20 dcl NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (15); 7 21 dcl NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE fixed bin static int options (constant) init (9); 7 22 dcl NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (6); 7 23 7 24 /* Used to determine how much space is needed to list them. */ 7 25 7 26 dcl LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (10); /* -alignment */ 7 27 dcl LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH fixed bin static int options (constant) init (25); /* -format_document_controls */ 7 28 dcl LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (21); /* -group_footer_trigger */ 7 29 7 30 /* MAXIMUM_OPTION_IDENTIFIER_LENGTH + MAXIMUM_OPTION_NAME_LENGTH */ 7 31 7 32 dcl MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH fixed bin static int options (constant) init (101); 7 33 7 34 dcl MAXIMUM_OPTION_IDENTIFIER_LENGTH fixed bin static int options (constant) init (69); 7 35 dcl MAXIMUM_OPTION_NAME_LENGTH fixed bin static int options (constant) init (32); 7 36 dcl MAXIMUM_OPTION_VALUE_LENGTH fixed bin static int options (constant) init (4096); 7 37 7 38 /* Used to index into the OPTIONS tables defined in rw_format_options.incl.pl1. */ 7 39 7 40 dcl INDEX_FOR_DELIMITER fixed bin static int options (constant) init (1); 7 41 dcl INDEX_FOR_FORMAT_DOCUMENT_CONTROLS fixed bin static int options (constant) init (2); 7 42 dcl INDEX_FOR_HYPHENATION fixed bin static int options (constant) init (3); 7 43 dcl INDEX_FOR_PAGE_FOOTER_VALUE fixed bin static int options (constant) init (4); 7 44 dcl INDEX_FOR_PAGE_HEADER_VALUE fixed bin static int options (constant) init (5); 7 45 dcl INDEX_FOR_PAGE_LENGTH fixed bin static int options (constant) init (6); 7 46 dcl INDEX_FOR_PAGE_WIDTH fixed bin static int options (constant) init (7); 7 47 dcl INDEX_FOR_TITLE_LINE fixed bin static int options (constant) init (8); 7 48 dcl INDEX_FOR_TRUNCATION fixed bin static int options (constant) init (9); 7 49 7 50 dcl INDEX_FOR_COLUMN_ORDER fixed bin static int options (constant) init (1); 7 51 dcl INDEX_FOR_COUNT fixed bin static int options (constant) init (2); 7 52 dcl INDEX_FOR_EXCLUDE fixed bin static int options (constant) init (3); 7 53 dcl INDEX_FOR_GROUP fixed bin static int options (constant) init (4); 7 54 dcl INDEX_FOR_GROUP_FOOTER_TRIGGER fixed bin static int options (constant) init (5); 7 55 dcl INDEX_FOR_GROUP_FOOTER_VALUE fixed bin static int options (constant) init (6); 7 56 dcl INDEX_FOR_GROUP_HEADER_TRIGGER fixed bin static int options (constant) init (7); 7 57 dcl INDEX_FOR_GROUP_HEADER_VALUE fixed bin static int options (constant) init (8); 7 58 dcl INDEX_FOR_OUTLINE fixed bin static int options (constant) init (9); 7 59 dcl INDEX_FOR_PAGE_BREAK fixed bin static int options (constant) init (10); 7 60 dcl INDEX_FOR_ROW_FOOTER_VALUE fixed bin static int options (constant) init (11); 7 61 dcl INDEX_FOR_ROW_HEADER_VALUE fixed bin static int options (constant) init (12); 7 62 dcl INDEX_FOR_SUBCOUNT fixed bin static int options (constant) init (13); 7 63 dcl INDEX_FOR_SUBTOTAL fixed bin static int options (constant) init (14); 7 64 dcl INDEX_FOR_TOTAL fixed bin static int options (constant) init (15); 7 65 7 66 dcl INDEX_FOR_ALIGNMENT fixed bin static int options (constant) init (1); 7 67 dcl INDEX_FOR_EDITING fixed bin static int options (constant) init (2); 7 68 dcl INDEX_FOR_FOLDING fixed bin static int options (constant) init (3); 7 69 dcl INDEX_FOR_SEPARATOR fixed bin static int options (constant) init (4); 7 70 dcl INDEX_FOR_TITLE fixed bin static int options (constant) init (5); 7 71 dcl INDEX_FOR_WIDTH fixed bin static int options (constant) init (6); 7 72 7 73 /* END INCLUDE FILE rw_options_extents */ 1926 1927 8 1 /* BEGIN INCLUDE FILE rw_page_info.incl.pl1 8 2* 8 3* Written - Al Dupuis - August 1983 8 4**/ 8 5 /* format: off */ 8 6 8 7 dcl 1 formatted_page_info aligned based (formatted_page_ip), 8 8 2 maximum_number_of_detail_blocks fixed bin, /* the most that can appear on a page */ 8 9 2 page_header_length fixed bin, /* page header in lines */ 8 10 2 title_block_length fixed bin, /* titles in lines */ 8 11 2 page_footer_length fixed bin, /* page footer in lines */ 8 12 2 number_of_detail_blocks fixed bin, 8 13 2 detail_blocks (fpi_init_maximum_number_of_detail_blocks 8 14 refer (formatted_page_info.maximum_number_of_detail_blocks)), 8 15 3 row_number fixed bin (35), /* position in the table */ 8 16 3 beginning_line_number fixed bin, /* beginning line on page */ 8 17 3 group_header_length fixed bin, /* group header length in lines */ 8 18 3 row_header_length fixed bin, /* row header in lines */ 8 19 3 row_length fixed bin, /* row value in lines */ 8 20 3 subtotal_length fixed bin, /* subtotal in lines */ 8 21 3 subcount_length fixed bin, /* subcount in lines */ 8 22 3 total_length fixed bin, /* total in lines */ 8 23 3 count_length fixed bin, /* count in lines */ 8 24 3 row_footer_length fixed bin, /* row footer in lines */ 8 25 3 group_footer_length fixed bin; /* group footer length in lines */ 8 26 dcl formatted_page_ip ptr; 8 27 dcl fpi_init_maximum_number_of_detail_blocks fixed bin; 8 28 8 29 dcl 1 page_info aligned based (page_ip), 8 30 2 width fixed bin, /* width in chars */ 8 31 2 length fixed bin, /* length in lines */ 8 32 2 total_characters fixed bin (21), /* width * length */ 8 33 2 page_info_size fixed bin, /* size of this structure in words */ 8 34 2 page_ptr ptr, /* points to the actual page */ 8 35 2 page_overstrike_info_ptr ptr, /* points to the overstrike info */ 8 36 2 formatted_page_info_ptr ptr; /* points to formatted_page_info */ 8 37 8 38 dcl page_defined_as_chars (page_info.total_characters) char (1) based (page_info.page_ptr); 8 39 dcl page_defined_as_lines (page_info.length) char (page_info.width) based (page_info.page_ptr); 8 40 dcl page_defined_as_a_string char (page_info.total_characters) based (page_info.page_ptr); 8 41 dcl page_ip ptr; 8 42 8 43 dcl 1 page_overstrike_info aligned based (page_overstrike_ip), 8 44 2 number_of_bits_or_chars fixed bin (21), /* number of chars in the page */ 8 45 2 bit_map (page_info.total_characters /* on means this char on the page is overstruck */ 8 46 refer (page_overstrike_info.number_of_bits_or_chars)) bit (1) unaligned, 8 47 2 chars (page_info.total_characters /* this is the overstrike character */ 8 48 refer (page_overstrike_info.number_of_bits_or_chars)) char (1) unaligned; 8 49 dcl page_overstrike_ip ptr; 8 50 8 51 dcl 1 page_overstrike_info_redefined aligned based (page_overstrike_ip), 8 52 2 number_of_bits_or_chars fixed bin (21), 8 53 2 bit_map bit (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned, 8 54 2 chars char (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned; 8 55 8 56 /* END INCLUDE FILE rw_page_info.incl.pl1 */ 1928 1929 9 1 /* BEGIN INCLUDE FILE rw_report_info.incl.pl1 9 2* Information needed to control the report environment. 9 3* Al Dupuis - August 1983 9 4**/ 9 5 /* format: off */ 9 6 9 7 dcl 1 report_control_info aligned based (report_cip), 9 8 2 flags, 9 9 3 report_is_paginated bit (1) unaligned, /* paged or one continous stream */ 9 10 3 table_has_been_started bit (1) unaligned, /* table clean up is necessary */ 9 11 3 table_is_full bit (1) unaligned, /* no more retrieves are necessary */ 9 12 3 report_has_been_started bit (1) unaligned, /* report clean up is necessary */ 9 13 3 report_is_formatted bit (1) unaligned, /* no more formatting is necessary */ 9 14 3 permanent_report bit (1) unaligned, /* or disposable */ 9 15 3 permanent_table bit (1) unaligned, /* or disposable */ 9 16 3 report_has_just_been_completed bit (1) unaligned, /* used for printing timers */ 9 17 3 table_has_just_been_loaded bit (1) unaligned, /* used for printing timers */ 9 18 3 multi_pass_mode bit (1) unaligned, /* on if we are to do more than 1 pass */ 9 19 3 available bit (26) unaligned, 9 20 2 format_options_flags, /* used to determine if value is default */ 9 21 3 general_report_default_value (NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE) bit (1) unaligned, 9 22 3 general_column_default_value (NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE) bit (1) unaligned, 9 23 2 value_seg_ptr ptr, /* the options value seg */ 9 24 2 table_information_ptr ptr, /* points to table_info */ 9 25 2 table_control_info_ptr ptr, /* points to table_control_info */ 9 26 2 row_value_temp_segment_ptr ptr, /* points to a segment for the row value */ 9 27 2 general_work_area_ptr ptr, /* a freeing work area */ 9 28 2 name_value_area_ptr ptr, /* area for name-value allocations */ 9 29 2 subsystem_control_info_ptr ptr, /* ptr for ssu_ info structure */ 9 30 2 subsystems_info_ptr ptr, /* points to subsystems info structure */ 9 31 2 name_value_temp_seg_ptr ptr, /* temp seg for name-value space */ 9 32 2 report_temp_seg_ptr ptr, /* report workspace */ 9 33 2 report_work_area_ptr ptr, /* report workspace */ 9 34 2 format_report_info_ptr ptr, /* info needed to create a report */ 9 35 2 input_string_temp_seg_ptr ptr, /* report workspace */ 9 36 2 output_string_temp_seg_ptr ptr, /* report workspace */ 9 37 2 editing_strings_temp_seg_ptr ptr, /* report workspace */ 9 38 2 headers_temp_seg_ptr ptr, /* report workspace */ 9 39 2 display_iocb_ptr ptr, /* report is displayed through this */ 9 40 2 area_info_ptr ptr, /* points to area_info structure */ 9 41 2 table_manager_delete_table_entry variable entry (ptr, fixed bin (35)), /* entry who deletes the table */ 9 42 2 table_manager_get_query_entry variable entry (ptr, ptr, fixed bin (21), fixed bin (35)), /* entry who gets the query */ 9 43 2 table_manager_get_row_entry variable entry (ptr, fixed bin (35)), /* entry who loads rows */ 9 44 2 table_manager_create_table_entry variable entry (ptr, fixed bin (35)), /* entry who makes a new table */ 9 45 2 options_identifier fixed bin, /* current set of options */ 9 46 2 report_identifier fixed bin, /* current report */ 9 47 2 no_of_rows_retrieved fixed bin (35), /* current no of rows */ 9 48 2 no_of_formatted_pages fixed bin (21), /* current no of pages */ 9 49 2 number_of_passes fixed bin, /* number of times report will be formatted */ 9 50 2 table_loading_time float bin (63), 9 51 2 table_sorting_time float bin (63), 9 52 2 table_deletion_time float bin (63), 9 53 2 report_setup_time float bin (63), 9 54 2 report_formatting_time float bin (63), 9 55 2 report_display_time float bin (63), 9 56 2 report_deletion_time float bin (63), 9 57 2 ssu_evaluate_active_string_time float bin (63), 9 58 2 temp_dir_unique_id bit (36), /* uid of temp dir */ 9 59 2 subsystems_ec_suffix char (32), /* suffix for saving and restoring ecs */ 9 60 2 temp_dir_name char (168) unaligned; /* the dir where we place the retrieved table and report */ 9 61 dcl report_cip ptr init (null ()); 9 62 9 63 /* END INCLUDE FILE rw_report_info.incl.pl1 */ 1930 1931 10 1 /* BEGIN INCLUDE FILE rw_report_structures.incl.pl1 10 2* 10 3* Written - Al Dupuis - August 1983 10 4**/ 10 5 /* format: off */ 10 6 10 7 /* Used in column_info.alignment and column_info.subsystem_data_type */ 10 8 10 9 dcl BIT_DATA_TYPE fixed bin static int options (constant) init (1); 10 10 dcl BOTH_ALIGNMENT fixed bin static int options (constant) init (1); 10 11 dcl CENTER_ALIGNMENT fixed bin static int options (constant) init (2); 10 12 dcl CHAR_DATA_TYPE fixed bin static int options (constant) init (2); 10 13 dcl DECIMAL_ALIGNMENT fixed bin static int options (constant) init (3); 10 14 dcl DECIMAL_DATA_TYPE fixed bin static int options (constant) init (3); 10 15 dcl LEFT_ALIGNMENT fixed bin static int options (constant) init (4); 10 16 dcl NUMERIC_DATA_TYPE fixed bin static int options (constant) init (4); 10 17 dcl RIGHT_ALIGNMENT fixed bin static int options (constant) init (5); 10 18 10 19 dcl 1 column_info aligned based (column_ip), 10 20 2 flags, 10 21 3 folding_is_fill bit (1) unaligned, /* fill or truncate */ 10 22 3 outline bit (1) unaligned, /* on means the display has been suppressed */ 10 23 3 editing bit (1) unaligned, /* on means there is an editing request */ 10 24 3 restore_editing bit (1) unaligned, /* used to toggle the editing bit */ 10 25 3 available bit (32) unaligned, 10 26 2 order fixed bin, /* as specified by the user */ 10 27 2 input_column fixed bin, /* # of the column in the table */ 10 28 2 output_column fixed bin, /* # of the column on the page */ 10 29 2 output_line fixed bin, /* within the block */ 10 30 2 starting_position fixed bin, /* within the page width */ 10 31 2 width fixed bin, /* in characters */ 10 32 2 alignment fixed bin, /* set to one of the above alignment constants */ 10 33 2 decimal_position fixed bin, /* only needed for decimal alignment */ 10 34 2 subsystem_data_type fixed bin, /* set to one of the above data type constants */ 10 35 2 editing_string_length fixed bin (21), /* before evaluation */ 10 36 2 editing_string_result_length fixed bin (21), /* after evaluation */ 10 37 2 editing_string_ptr ptr, /* before evaluation */ 10 38 2 editing_string_result_ptr ptr, /* after evaluation */ 10 39 2 prefix_character char (1) varying; /* column prefix */ 10 40 dcl column_ip ptr; 10 41 10 42 dcl 1 columns_info aligned based (columns_ip), /* an array of column_info's */ 10 43 2 number_of_columns fixed bin, 10 44 2 columns (initialize_number_of_columns 10 45 refer (columns_info.number_of_columns)) like column_info; 10 46 dcl columns_ip ptr; 10 47 10 48 dcl 1 column_map (column_map_number_of_columns) aligned based (column_mp), 10 49 2 present bit (1), /* the column is present in the list */ 10 50 2 position fixed bin; /* position where this column was found in the list */ 10 51 dcl column_map_number_of_columns fixed bin; 10 52 dcl column_mp ptr; 10 53 10 54 dcl 1 count_columns_info like columns_info based (count_columns_ip); 10 55 dcl count_columns_ip ptr; 10 56 10 57 dcl 1 count_info like total_info based (count_ip); 10 58 dcl count_ip ptr; 10 59 10 60 /* Used to access the current row from the table */ 10 61 dcl current_row_value char (table_info.row_value_length) based (status.current_row_ptr); 10 62 10 63 /* Used to pick up the value before or after evaluation */ 10 64 dcl editing_string_result char (editing_string_rl) based (editing_string_rp); 10 65 dcl editing_string_rl fixed bin; 10 66 dcl editing_string_rp ptr; 10 67 10 68 dcl editing_strings_next_byte fixed bin (21); 10 69 /* Used to store editing strings before and after evaluation. */ 10 70 dcl editing_strings_temp_seg char (maximum_segment_size) based (editing_strings_tsp); 10 71 dcl editing_strings_temp_seg_as_an_array (maximum_segment_size) char (1) based (editing_strings_tsp); 10 72 dcl editing_strings_tsp ptr; 10 73 10 74 dcl 1 format_report_info aligned based (format_report_ip), 10 75 2 flags, 10 76 3 unlimited_page_length bit (1) unaligned, /* -page_length equal to zero */ 10 77 3 unlimited_page_width bit (1) unaligned, /* -page_width equal to zero */ 10 78 3 page_header_is_defined bit (1) unaligned, /* -page_header_value */ 10 79 3 group_header_is_defined bit (1) unaligned, /* -group_header_value */ 10 80 3 group_header_trigger_is_defined bit (1) unaligned, /* -group_header_trigger */ 10 81 3 title_block_is_defined bit (1) unaligned, /* -title_line */ 10 82 3 row_header_is_defined bit (1) unaligned, /* -row_header_value */ 10 83 3 row_value_is_defined bit (1) unaligned, /* if all of the columns weren't excluded */ 10 84 3 row_footer_is_defined bit (1) unaligned, /* -row_footer_value */ 10 85 3 group_footer_is_defined bit (1) unaligned, /* -group_footer_value */ 10 86 3 group_footer_trigger_is_defined bit (1) unaligned, /* -group_footer_trigger */ 10 87 3 page_footer_is_defined bit (1) unaligned, /* -page_footer_value */ 10 88 3 editing_is_defined bit (1) unaligned, /* -editing */ 10 89 3 exclude_is_defined bit (1) unaligned, /* -exclude */ 10 90 3 group_is_defined bit (1) unaligned, /* -group */ 10 91 3 outline_is_defined bit (1) unaligned, /* -outline */ 10 92 3 page_break_is_defined bit (1) unaligned, /* -page_break */ 10 93 3 subtotal_is_defined bit (1) unaligned, /* -subtotal */ 10 94 3 subcount_is_defined bit (1) unaligned, /* -subcount */ 10 95 3 total_is_defined bit (1) unaligned, /* -total */ 10 96 3 count_is_defined bit (1) unaligned, /* -count */ 10 97 3 available bit (15) unaligned, 10 98 2 page_width fixed bin, /* as given by the user */ 10 99 2 page_length fixed bin, /* as given by the user */ 10 100 2 number_of_formatted_rows fixed bin (35), /* updated at the end of each page */ 10 101 2 editing_strings_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 10 102 2 headers_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 10 103 2 report_iocb_ptr ptr, /* for saving copies of the page */ 10 104 2 table_info_ptr ptr, /* to avoid repetitive calls to rw_table$info */ 10 105 2 format_document_op ptr, /* format_document_options structure */ 10 106 2 page_info_ptr ptr, /* page_info structure */ 10 107 2 copy_of_page_info_ptr ptr, /* version of page_info structure that can be changed */ 10 108 /* after each page */ 10 109 2 formatted_page_info_ptr ptr, /* formatted_page_info structure */ 10 110 2 overstrike_info_ptr ptr, /* page_overstrike_info structure */ 10 111 2 status_ptr ptr, /* status structure */ 10 112 2 template_map_ptr ptr, /* template_map array */ 10 113 2 page_header_info_ptr ptr, /* header_info structure */ 10 114 2 page_footer_info_ptr ptr, /* header_info structure */ 10 115 2 group_header_info_ptr ptr, /* header_info structure */ 10 116 2 group_footer_info_ptr ptr, /* header_info structure */ 10 117 2 group_header_trigger_info_ptr ptr, /* group_info structure */ 10 118 2 group_footer_trigger_info_ptr ptr, /* group_info structure */ 10 119 2 row_header_info_ptr ptr, /* header_info structure */ 10 120 2 row_footer_info_ptr ptr, /* header_info structure */ 10 121 2 title_block_columns_info_ptr ptr, /* title_block_columns_info structure */ 10 122 2 title_block_info_ptr ptr, /* title_block_info structure */ 10 123 2 input_columns_info_ptr ptr, /* input_columns_info structure */ 10 124 2 input_columns_order_ptr ptr, /* input_columns_order array */ 10 125 2 output_columns_info_ptr ptr, /* output_columns_info structure */ 10 126 2 group_info_ptr ptr, /* group_info structure */ 10 127 2 outline_info_ptr ptr, /* outline_info structure */ 10 128 2 page_break_info_ptr ptr, /* page_break_info structure */ 10 129 2 subtotal_info_ptr ptr, /* subtotal_info structure */ 10 130 2 subcount_info_ptr ptr, /* subcount_info structure */ 10 131 2 total_info_ptr ptr, /* total_info structure */ 10 132 2 count_info_ptr ptr, /* count_info structure */ 10 133 2 row_value_template_info_ptr ptr, /* row_value_template_info structure */ 10 134 2 generic_template_ptr ptr, /* generic_template char string */ 10 135 2 header_part_delimiter char (1) unaligned, /* delimits the different portions of a header/footer */ 10 136 2 truncation_indicator char (32) varying unaligned, /* used to indicate that truncation has occured */ 10 137 2 report_directory_name char (168) unaligned, /* dir where we place copies of the page */ 10 138 2 report_entry_name char (32) unaligned; /* entry name portion of above */ 10 139 dcl format_report_ip ptr; 10 140 10 141 /* used to format page/row headers and footers */ 10 142 dcl generic_template char (generic_template_length) based (generic_tp); 10 143 dcl generic_template_length fixed bin; 10 144 dcl generic_tp ptr; 10 145 10 146 /* these columns form a group of rows and are used with outlining, etc. */ 10 147 dcl 1 group_info aligned based (group_ip), 10 148 2 number_of_columns_to_group fixed bin, 10 149 2 column_number (gi_init_number_of_columns_to_group 10 150 refer (group_info.number_of_columns_to_group)) fixed bin; 10 151 dcl gi_init_number_of_columns_to_group fixed bin; 10 152 dcl group_ip ptr; 10 153 10 154 dcl headers_next_byte fixed bin (21); 10 155 /* used to hold the page/row headers/footers, and temp space for totals/subtotals. */ 10 156 dcl headers_temp_seg char (maximum_segment_size) based (headers_tsp); 10 157 dcl headers_temp_seg_as_an_array (maximum_segment_size) char (1) based (headers_tsp); 10 158 dcl headers_tsp ptr; 10 159 10 160 dcl 1 header_info aligned based (header_ip), 10 161 2 number_of_lines fixed bin, /* number of header lines typed in by the user */ 10 162 2 maximum_number_of_parts fixed bin, /* 3 parts maximum (left, right, and center) */ 10 163 2 lines (hi_init_number_of_lines 10 164 refer (header_info.number_of_lines)), 10 165 3 parts (hi_init_maximum_number_of_parts 10 166 refer (header_info.maximum_number_of_parts)), 10 167 4 flags, 10 168 5 present bit (1) unaligned, /* this particular part is defined */ 10 169 5 active bit (1) unaligned, /* and it contains active functions */ 10 170 5 available bit (34) unaligned, 10 171 4 index fixed bin (21), /* before evaluation */ 10 172 4 length fixed bin (21), /* before evaluation */ 10 173 4 starting_position fixed bin, /* within the page width */ 10 174 4 width fixed bin, /* within the page width */ 10 175 4 alignment fixed bin; /* left, right, or center */ 10 176 dcl header_ip ptr; 10 177 dcl hi_init_maximum_number_of_parts fixed bin; 10 178 dcl hi_init_number_of_lines fixed bin; 10 179 10 180 dcl initialize_number_of_columns fixed bin; /* columns_info refer extent */ 10 181 10 182 dcl 1 input_columns_info aligned like columns_info based (input_columns_ip); /* the columns in the table */ 10 183 dcl input_columns_ip ptr; 10 184 10 185 dcl input_columns_order (input_columns_info.number_of_columns) fixed bin based (input_columns_op); 10 186 dcl input_columns_op ptr; 10 187 10 188 dcl maximum_segment_size fixed bin (21); /* in characters */ 10 189 10 190 /* Used to access the next row from the table */ 10 191 dcl next_row_value char (table_info.row_value_length) based (status.next_row_ptr); 10 192 10 193 dcl 1 outline_info aligned based (outline_ip), /* who gets oulining attempted */ 10 194 2 maximum_number_of_single_columns fixed bin, 10 195 2 maximum_number_of_grouping_columns fixed bin, 10 196 2 number_of_single_columns fixed bin, /* columns who are not a member of the group */ 10 197 2 number_of_grouping_columns fixed bin, /* columns who are a member of the group */ 10 198 2 single_columns (oi_init_maximum_number_of_single_columns refer ( 10 199 outline_info.maximum_number_of_single_columns)) fixed bin, 10 200 2 grouping_columns (oi_init_maximum_number_of_grouping_columns refer ( 10 201 outline_info.maximum_number_of_grouping_columns)) fixed bin; 10 202 dcl oi_init_maximum_number_of_grouping_columns fixed bin; 10 203 dcl oi_init_maximum_number_of_single_columns fixed bin; 10 204 dcl outline_ip ptr; 10 205 10 206 dcl 1 output_columns_info like columns_info based (output_columns_ip); /* the columns that will go on the page */ 10 207 dcl output_columns_ip ptr; 10 208 10 209 /* these columns will be checked to determine if a page break is required */ 10 210 dcl 1 page_break_info aligned based (page_break_ip), 10 211 2 number_of_columns fixed bin, 10 212 2 columns (pbi_init_number_of_columns refer ( 10 213 page_break_info.number_of_columns)) bit (1) unaligned; 10 214 dcl page_break_ip ptr; 10 215 dcl pbi_init_number_of_columns fixed bin; 10 216 10 217 /* Used to access the previous row from the table */ 10 218 dcl previous_row_value char (table_info.row_value_length) based (status.previous_row_ptr); 10 219 10 220 /* The templates for the row value (also used for titles, subtotals, and totals.) */ 10 221 dcl 1 row_value_template_info like template_info based (row_value_template_ip); 10 222 dcl row_value_template_ip ptr; 10 223 10 224 /* main execution control structure for rw_fr_build_page */ 10 225 dcl 1 status aligned based (status_pointer), 10 226 2 flags, 10 227 3 still_formatting_detail_blocks bit (1), /* turned on while we are doing detail blocks */ 10 228 3 first_row_of_report bit (1), /* turned on when we are on the first row of a report */ 10 229 3 last_row_of_report bit (1), /* turned on when we are on the last row of a report */ 10 230 3 first_row_on_page bit (1), /* turned on when we are on the 1st row of a page */ 10 231 3 page_overflow bit (1), /* turned on when we are backing up */ 10 232 3 subtotals_ejection_in_progress bit (1), /* turned on when subtotals are being ejected */ 10 233 3 subcounts_ejection_in_progress bit (1), /* turned on when subcounts are being ejected */ 10 234 3 totals_ejection_in_progress bit (1), /* turned on when totals are being ejected */ 10 235 3 counts_ejection_in_progress bit (1), /* turned on when counts are being ejected */ 10 236 3 header_being_evaluated bit (1), /* turned on during header evaluation */ 10 237 3 detail_block_used_some_lines bit (1), /* turned on when a row header/footer/value/subtotal/total uses a line */ 10 238 3 row_has_been_processed_before bit (1), /* turned on when this row has been backed out of the previous page */ 10 239 3 last_pass bit (1), /* true if this is the last pass */ 10 240 2 previous_row_ptr ptr, /* points to the previous row (or null) */ 10 241 2 current_row_ptr ptr, /* points to the current row */ 10 242 2 next_row_ptr ptr, /* points to the next row (or null) */ 10 243 2 total_number_of_rows_used fixed bin, /* total # per page, used to make sure we don't */ 10 244 /* backup over the 1st row */ 10 245 2 current_pass_number fixed bin, /* [display_builtins current_pass_number] */ 10 246 2 current_row_number fixed bin (35), /* [display_builtins current_row_number] */ 10 247 2 current_column_number fixed bin, /* set to the current output column during row evaluation */ 10 248 2 current_page_number fixed bin (21), /* [display_builtins page_number] */ 10 249 2 current_line_on_page fixed bin, /* this is where the next thing is placed on the page */ 10 250 2 remaining_lines_on_page fixed bin, /* used in estimating if something will fit */ 10 251 2 highest_row_formatted fixed bin, /* used to keep track of rows backed out of the page */ 10 252 2 current_header_line fixed bin, /* set to the current header line during header evaluation */ 10 253 2 current_header_part fixed bin, /* set to the current header part during header evaluation */ 10 254 2 number_of_lines_needed_for_detail_block fixed bin, /* sum of row header, footer, and value */ 10 255 2 number_of_lines_needed_for_row_header fixed bin, /* may be zero */ 10 256 2 number_of_lines_needed_for_row_value fixed bin, /* may be zero */ 10 257 2 number_of_lines_needed_for_row_footer fixed bin, /* may be zero */ 10 258 2 number_of_lines_needed_for_page_footer fixed bin, /* may be zero */ 10 259 2 number_of_lines_needed_for_group_header fixed bin, /* may be zero */ 10 260 2 number_of_lines_needed_for_group_footer fixed bin, /* may be zero */ 10 261 2 last_row_number fixed bin (35), /* zero unless multi-pass */ 10 262 2 last_page_number fixed bin, /* zero unless multi-pass mode */ 10 263 2 object_being_evaluated char (16) varying; /* "page header", "row value", etc. */ 10 264 dcl status_pointer ptr; 10 265 10 266 dcl 1 subcount_columns_info like columns_info based (subcount_columns_ip); 10 267 dcl subcount_columns_ip ptr; 10 268 10 269 dcl 1 subcount_generation_info like subtotal_generation_info based (subcount_generation_ip); 10 270 dcl subcount_generation_ip ptr; 10 271 10 272 dcl 1 subcount_info like subtotal_info based (subcount_ip); 10 273 dcl subcount_ip ptr; 10 274 10 275 dcl 1 subtotal_columns_info like columns_info based (subtotal_columns_ip); 10 276 dcl subtotal_columns_ip ptr; 10 277 10 278 /* Used to restore subtotals when backing up on a page. */ 10 279 dcl 1 subtotal_generation_info aligned based (subtotal_generation_ip), 10 280 2 maximum_number_of_generation_blocks fixed bin, /* maximum number of subtotals possibly generated per page + 1 */ 10 281 2 number_of_subtotals fixed bin, /* # of subtotals we're taking */ 10 282 2 current_generation_block fixed bin, /* slot for next subtotal generation */ 10 283 2 generations (0:sgi_init_number_of_generations 10 284 refer (subtotal_generation_info.maximum_number_of_generation_blocks)), 10 285 3 subtotals (sgi_init_number_of_subtotals /* value of the subtotals when the break occured */ 10 286 refer (subtotal_generation_info.number_of_subtotals)) float dec (59); 10 287 dcl sgi_init_number_of_generations fixed bin; 10 288 dcl sgi_init_number_of_subtotals fixed bin; 10 289 dcl subtotal_generation_ip ptr; 10 290 10 291 dcl 1 subtotal_info aligned based (subtotal_ip), 10 292 2 columns_info_ptr ptr, /* points to subtotal_columns_info structure */ 10 293 2 subtotal_generation_info_ptr ptr, /* points to subtotal_generations_info structure */ 10 294 2 number_of_columns_to_subtotal fixed bin, /* the number of subtotals */ 10 295 2 highest_level fixed bin, /* the largest number of different subtotals on a single column */ 10 296 2 current_level fixed bin, /* the current level of subtotals being evaluated */ 10 297 2 columns (si_init_number_of_columns_to_subtotal 10 298 refer (subtotal_info.number_of_columns_to_subtotal)), 10 299 3 flags, 10 300 4 reset bit (1) unaligned, /* reset or running subtotals */ 10 301 4 group_column bit (1) unaligned, /* on means the watch column is a grouping column */ 10 302 4 available bit (34) unaligned, 10 303 3 input_column fixed bin, /* # of the input column for accumulations */ 10 304 3 watch_column fixed bin, /* # of the column to watch for generation */ 10 305 3 level fixed bin, /* different subtotals on the same column receive higher level numbers */ 10 306 3 ioa_string char (5) varying, /* used to edit the "subtotal" field */ 10 307 3 subtotal float dec (59); /* used to hold the subtotal until it needs /* 10 308* /* to be placed on the page */ 10 309 dcl si_init_number_of_columns_to_subtotal fixed bin; 10 310 dcl subtotal_ip ptr; 10 311 10 312 dcl 1 template_info aligned based (template_ip), /* templates that are laid down before the column values */ 10 313 2 template_width fixed bin, /* how wide they are */ 10 314 2 number_of_templates fixed bin, /* how many there are */ 10 315 2 templates (ti_init_number_of_templates refer (template_info.number_of_templates)) /* the templates */ 10 316 char (ti_init_template_width refer (template_info.template_width)); 10 317 dcl ti_init_number_of_templates fixed bin; 10 318 dcl template_ip ptr; 10 319 dcl ti_init_template_width fixed bin; 10 320 10 321 /* used to determine which templates have been placed */ 10 322 dcl template_map (template_map_number_of_bits) bit (1) unaligned based (template_mp); 10 323 dcl template_mp ptr; 10 324 dcl template_map_number_of_bits fixed bin; 10 325 dcl template_map_defined_as_a_string bit (template_map_number_of_bits) based (template_mp); 10 326 10 327 dcl template char (template_length) based (template_ptr); 10 328 dcl template_length fixed bin; 10 329 dcl template_ptr ptr; 10 330 10 331 dcl 1 title_block_columns_info like columns_info based (title_block_columns_ip); /* output columns for the titles */ 10 332 dcl title_block_columns_ip ptr; 10 333 10 334 /* holds the formatted title block after page 1 is finished */ 10 335 dcl 1 title_block_info aligned based (title_block_ip), 10 336 2 number_of_lines fixed bin, /* how many lines there are */ 10 337 2 line_length fixed bin, /* how long the lines are */ 10 338 2 lines (tbi_init_number_of_lines refer ( /* the formatted lines */ 10 339 title_block_info.number_of_lines)) char (tbi_init_line_length refer ( 10 340 title_block_info.line_length)); 10 341 dcl tbi_init_line_length fixed bin; 10 342 dcl tbi_init_number_of_lines fixed bin; 10 343 dcl title_block_ip ptr; 10 344 10 345 dcl 1 total_columns_info like columns_info based (total_columns_ip); /* output_columns_info for totals */ 10 346 dcl total_columns_ip ptr; 10 347 10 348 dcl 1 total_info aligned based (total_ip), 10 349 2 columns_info_ptr ptr, /* points to total_columns_info structure */ 10 350 2 number_of_columns_to_total fixed bin, /* # to total */ 10 351 2 columns (ti_init_number_of_columns_to_total 10 352 refer (total_info.number_of_columns_to_total)), 10 353 3 input_column fixed bin, /* the input column number */ 10 354 3 ioa_string char (5) varying, /* used to edit the "total" field */ 10 355 3 total float dec (59); /* used to hold the total until it's placed on the page */ 10 356 dcl ti_init_number_of_columns_to_total fixed bin; 10 357 dcl total_ip ptr; 10 358 10 359 /* END INCLUDE FILE rw_report_structures.incl.pl1 */ 1932 1933 11 1 /* BEGIN INCLUDE FILE rw_table_info.incl.pl1 11 2* 11 3* Written - Al Dupuis 11 4**/ 11 5 /* format: off */ 11 6 11 7 dcl 1 table_info aligned based (table_ip), 11 8 2 version char (8), 11 9 2 column_count fixed bin, 11 10 2 maximum_column_name_length fixed bin, 11 11 2 maximum_column_value_length fixed bin, 11 12 2 row_value_length fixed bin (21), 11 13 2 row_value_ptr ptr, 11 14 2 columns (ti_init_column_count refer (table_info.column_count)), 11 15 3 column_name char (69) varying, 11 16 3 column_data_type bit (36), 11 17 3 column_length fixed bin (21), 11 18 3 column_index fixed bin (21); 11 19 11 20 dcl table_ip ptr; 11 21 dcl ti_init_column_count fixed bin; 11 22 dcl TABLE_INFO_VERSION_1 char (8) internal static options (constant) init ("rwti_001"); 11 23 11 24 /* END INCLUDE FILE view_master_table_info.incl.pl1 */ 1934 1935 1936 end rw_fr_new_report; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/16/84 1107.0 rw_fr_new_report.pl1 >special_ldd>online>7001-11/16/84>rw_fr_new_report.pl1 1914 1 11/02/83 1845.0 arg_descriptor.incl.pl1 >ldd>include>arg_descriptor.incl.pl1 1916 2 10/23/81 1948.6 arg_list.incl.pl1 >ldd>include>arg_list.incl.pl1 1918 3 11/01/84 1514.0 format_document_options.incl.pl1 >ldd>include>format_document_options.incl.pl1 1920 4 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 1922 5 11/16/84 1107.7 rw_format_options.incl.pl1 >special_ldd>online>7001-11/16/84>rw_format_options.incl.pl1 1924 6 11/16/84 1107.7 rw_names_and_values.incl.pl1 >special_ldd>online>7001-11/16/84>rw_names_and_values.incl.pl1 1926 7 11/16/84 1107.8 rw_options_extents.incl.pl1 >special_ldd>online>7001-11/16/84>rw_options_extents.incl.pl1 1928 8 11/16/84 1107.8 rw_page_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_page_info.incl.pl1 1930 9 11/16/84 1107.6 rw_report_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_report_info.incl.pl1 1932 10 11/16/84 1107.8 rw_report_structures.incl.pl1 >special_ldd>online>7001-11/16/84>rw_report_structures.incl.pl1 1934 11 11/16/84 1107.6 rw_table_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_table_info.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 10-9 ref 1815 BLANK 013575 constant char(1) initial unaligned dcl 1829 ref 180 188 363 740 1075 1403 1405 1418 1471 1527 1586 1773 BOTH_ALIGNMENT constant fixed bin(17,0) initial dcl 10-10 ref 1767 BUFFER_PAGE_LENGTH constant fixed bin(17,0) initial dcl 1830 ref 968 CENTER_ALIGNMENT constant fixed bin(17,0) initial dcl 10-11 ref 370 1169 1758 CHAR_DATA_TYPE constant fixed bin(17,0) initial dcl 10-12 ref 1818 COMMA constant char(1) initial unaligned dcl 1831 ref 1474 1500 1588 DECIMAL_ALIGNMENT constant fixed bin(17,0) initial dcl 10-13 ref 1771 DECIMAL_DATA_TYPE constant fixed bin(17,0) initial dcl 10-14 ref 1486 1708 1809 DEFAULT_SYLLABLE_SIZE constant fixed bin(17,0) initial dcl 1832 ref 1207 DIGITS 001041 constant char(10) initial unaligned dcl 1833 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 5-9 GENERAL_REPORT 000000 constant structure array level 2 unaligned dcl 5-9 INDEX_FOR_ALIGNMENT constant fixed bin(17,0) initial dcl 7-66 ref 711 INDEX_FOR_COLUMN_ORDER constant fixed bin(17,0) initial dcl 7-50 ref 764 INDEX_FOR_COUNT constant fixed bin(17,0) initial dcl 7-51 ref 314 INDEX_FOR_DELIMITER constant fixed bin(17,0) initial dcl 7-40 ref 359 INDEX_FOR_EDITING constant fixed bin(17,0) initial dcl 7-67 ref 722 INDEX_FOR_EXCLUDE constant fixed bin(17,0) initial dcl 7-52 ref 879 INDEX_FOR_FOLDING constant fixed bin(17,0) initial dcl 7-68 ref 715 INDEX_FOR_FORMAT_DOCUMENT_CONTROLS constant fixed bin(17,0) initial dcl 7-41 ref 1196 INDEX_FOR_GROUP constant fixed bin(17,0) initial dcl 7-53 ref 773 INDEX_FOR_GROUP_FOOTER_TRIGGER constant fixed bin(17,0) initial dcl 7-54 ref 401 INDEX_FOR_GROUP_FOOTER_VALUE constant fixed bin(17,0) initial dcl 7-55 ref 393 INDEX_FOR_GROUP_HEADER_TRIGGER constant fixed bin(17,0) initial dcl 7-56 ref 397 INDEX_FOR_GROUP_HEADER_VALUE constant fixed bin(17,0) initial dcl 7-57 ref 389 INDEX_FOR_HYPHENATION constant fixed bin(17,0) initial dcl 7-42 ref 1203 INDEX_FOR_OUTLINE constant fixed bin(17,0) initial dcl 7-58 ref 824 INDEX_FOR_PAGE_BREAK constant fixed bin(17,0) initial dcl 7-59 ref 785 INDEX_FOR_PAGE_FOOTER_VALUE constant fixed bin(17,0) initial dcl 7-43 ref 377 INDEX_FOR_PAGE_HEADER_VALUE constant fixed bin(17,0) initial dcl 7-44 ref 373 INDEX_FOR_PAGE_LENGTH constant fixed bin(17,0) initial dcl 7-45 ref 961 INDEX_FOR_PAGE_WIDTH constant fixed bin(17,0) initial dcl 7-46 ref 955 INDEX_FOR_ROW_FOOTER_VALUE constant fixed bin(17,0) initial dcl 7-60 ref 385 INDEX_FOR_ROW_HEADER_VALUE constant fixed bin(17,0) initial dcl 7-61 ref 381 INDEX_FOR_SEPARATOR constant fixed bin(17,0) initial dcl 7-69 ref 1000 1105 INDEX_FOR_SUBCOUNT constant fixed bin(17,0) initial dcl 7-62 ref 1318 INDEX_FOR_SUBTOTAL constant fixed bin(17,0) initial dcl 7-63 ref 1341 INDEX_FOR_TITLE constant fixed bin(17,0) initial dcl 7-70 ref 738 INDEX_FOR_TITLE_LINE constant fixed bin(17,0) initial dcl 7-47 ref 984 INDEX_FOR_TOTAL constant fixed bin(17,0) initial dcl 7-64 ref 1615 INDEX_FOR_TRUNCATION constant fixed bin(17,0) initial dcl 7-48 ref 1185 INDEX_FOR_WIDTH constant fixed bin(17,0) initial dcl 7-71 ref 707 INPUT_MAP 001040 constant bit(1) initial dcl 1834 set ref 794* 833* 884* 1662* LEFT_ALIGNMENT constant fixed bin(17,0) initial dcl 10-15 ref 369 1761 LEFT_OR_RIGHT_BRACKET constant char(2) initial unaligned dcl 1835 ref 652 MAXIMUM_OPTION_IDENTIFIER_LENGTH constant fixed bin(17,0) initial dcl 7-34 ref 1862 1873 1890 MAXIMUM_OPTION_VALUE_LENGTH constant fixed bin(17,0) initial dcl 7-36 ref 1874 1879 1891 NAME 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 5-9 in procedure "rw_fr_new_report" set ref 359* 373* 377* 955* 961* 984* 1185* 1196* 1203* NAME 242 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 5-9 in procedure "rw_fr_new_report" set ref 314* 381* 385* 389* 393* 397* 401* 764* 773* 785* 824* 879* 1318* 1341* 1615* NAME 660 000000 constant varying char(32) initial array level 3 in structure "OPTIONS" dcl 5-9 in procedure "rw_fr_new_report" set ref 707* 711* 715* 722* 738* 1000* 1105* NL 013574 constant char(1) initial unaligned dcl 1836 ref 458 458 496 519 1076 NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 7-20 ref 77 112 114 120 121 122 125 1058 1219 NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 7-21 ref 77 112 114 120 121 122 125 1058 1219 NUMERIC_DATA_TYPE constant fixed bin(17,0) initial dcl 10-16 ref 1486 1708 1805 OFF constant bit(1) initial dcl 1838 ref 129 179 202 257 428 500 506 589 664 692 719 724 789 797 806 828 851 889 899 901 960 966 972 988 1024 1099 1167 1190 1250 1389 1407 1421 1424 1434 1465 1597 1651 1668 1681 ON constant bit(1) initial dcl 1839 ref 185 192 197 261 433 469 493 650 652 717 727 728 793 800 808 811 832 883 903 958 967 971 986 1022 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 5-9 OUTPUT_MAP 001101 constant bit(1) initial dcl 1840 set ref 190 262* 766* RESET 001036 constant char(5) initial unaligned dcl 1841 ref 1510 RIGHT_ALIGNMENT constant fixed bin(17,0) initial dcl 10-17 ref 371 1532 1736 1764 ROW_COUNT 001101 constant bit(1) initial dcl 1842 set ref 316* ROW_SUBCOUNT 001101 constant bit(1) initial dcl 1843 set ref 1320* ROW_SUBTOTAL 001040 constant bit(1) initial dcl 1844 set ref 1343* ROW_TOTAL 001040 constant bit(1) initial dcl 1845 set ref 1617* SPECIFIC_COLUMN 660 000000 constant structure array level 2 unaligned dcl 5-9 active 2(01) based bit(1) array level 5 packed unaligned dcl 10-160 set ref 652* addr builtin function dcl 1847 ref 730 743 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 "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* alignment 11 based fixed bin(17,0) array level 3 in structure "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" set ref 1758* 1761* 1764* 1767* 1771* alignment 7 based fixed bin(17,0) array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" set ref 630* alignment 7 based fixed bin(17,0) level 2 in structure "column_info" dcl 10-19 in procedure "rw_fr_new_report" set ref 1169* arg_descriptor based structure level 1 dcl 1-6 arg_descriptor_ptr 000166 automatic pointer dcl 1-34 set ref 292* 293 296 296 296 296 296 296 296 296 296 1802* 1803 break_word_sw 3(07) based bit(1) level 3 packed unaligned dcl 3-12 set ref 1193* chpa_loop 000642 automatic fixed bin(17,0) dcl 541 set ref 585* 586 586 589* code 000100 automatic fixed bin(35,0) dcl 1851 set ref 135* 1220* 1224 1224* 1229* 1230 1230* code_parm parameter fixed bin(35,0) dcl 44 set ref 38 64* column_count 2 based fixed bin(17,0) level 2 dcl 11-7 ref 117 column_data_type 33 based bit(36) array level 3 dcl 11-7 set ref 1494 1494 1716 1716 1802 column_info based structure level 1 dcl 10-19 column_ip 000214 automatic pointer dcl 10-40 set ref 1166* 1167 1168 1169 column_map based structure array level 1 dcl 10-48 set ref 179* 762 889* 901* column_map_number_of_columns 000216 automatic fixed bin(17,0) dcl 10-51 set ref 179 761* 762 889 901 column_mp 000220 automatic pointer dcl 10-52 set ref 179 192 193 197 198 266 762* 768 770 800 844 851 858 889 901 920 1665 1668 1702 column_name 10 based varying char(69) array level 3 dcl 11-7 set ref 218 1491* 1550 1713* column_number 1 based fixed bin(17,0) array level 2 in structure "sgi_group_info" dcl 238 in procedure "set_grouping_info" set ref 266* column_number 1 based fixed bin(17,0) array level 2 in structure "group_info" dcl 10-147 in procedure "rw_fr_new_report" ref 808 808 811 844 844 849 851 1506 columns 10 based structure array level 2 in structure "table_info" dcl 11-7 in procedure "rw_fr_new_report" columns 2 based structure array level 2 in structure "ssosi_subtotal_columns_info" unaligned dcl 1375 in procedure "setup_subtotals_or_subcounts_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 1 based bit(1) array level 2 in structure "page_break_info" packed unaligned dcl 10-210 in procedure "rw_fr_new_report" set ref 797* 800* 808 811* columns 2 based structure array level 2 in structure "stoci_total_columns_info" unaligned dcl 1639 in procedure "setup_totals_or_counts_info" columns 2 based structure array level 2 in structure "output_columns_info" unaligned dcl 10-206 in procedure "rw_fr_new_report" set ref 928* columns 2 based structure array level 2 in structure "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" set ref 692* 928 columns 1 based structure array level 2 in structure "subtotal_map" dcl 1893 in procedure "rw_fr_new_report" set ref 1465* columns 2 based structure array level 2 in structure "title_block_columns_info" unaligned dcl 10-331 in procedure "rw_fr_new_report" set ref 1166 columns 3 based structure array level 2 in structure "stoci_total_info" unaligned dcl 1642 in procedure "setup_totals_or_counts_info" columns_info based structure level 1 dcl 10-42 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 "stoci_total_info" dcl 1642 in procedure "setup_totals_or_counts_info" set ref 1733* columns_info_ptr based pointer level 2 in structure "subcount_info" dcl 10-272 in procedure "rw_fr_new_report" ref 1326 columns_info_ptr based pointer level 2 in structure "subtotal_info" dcl 10-291 in procedure "rw_fr_new_report" ref 1349 convert builtin function dcl 1852 ref 294 704 709 957 963 998 1095 1778 copy_of_page_info_ptr 16 based pointer level 2 dcl 10-74 set ref 1063* count_info_ptr 76 based pointer level 2 dcl 10-74 set ref 318* 320* count_ip 000222 automatic pointer dcl 10-58 set ref 316* 318 count_is_defined 0(20) based bit(1) level 3 packed unaligned dcl 10-74 set ref 316* 318 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 10-225 set ref 1302* current_row_ptr 20 based pointer level 2 dcl 10-225 set ref 1297* decimal_position 12 based fixed bin(17,0) array level 3 dcl 10-182 set ref 1778* 1780 1780* dh_header_info_ptr_parm parameter pointer dcl 418 set ref 409 424* 434* dh_header_is_defined_flag_parm parameter bit(1) unaligned dcl 417 set ref 409 428* 433* dh_header_option_name_parm parameter varying char dcl 416 set ref 409 425* divide builtin function dcl 1854 ref 367 368 1032 1445 dont_compress_sw 3(06) based bit(1) level 3 packed unaligned dcl 3-12 set ref 1201* editing 0(02) based bit(1) level 3 in structure "column_info" packed unaligned dcl 10-19 in procedure "rw_fr_new_report" set ref 1168* editing 2(02) based bit(1) array level 4 in structure "input_columns_info" packed unaligned dcl 10-182 in procedure "rw_fr_new_report" set ref 724* 728* editing_is_defined 0(12) based bit(1) level 3 packed unaligned dcl 10-74 set ref 727* editing_string_length 14 based fixed bin(21,0) array level 3 dcl 10-182 set ref 729* 732 734 editing_string_ptr 16 based pointer array level 3 dcl 10-182 set ref 730* editing_string_result_length 15 based fixed bin(21,0) array level 3 dcl 10-182 set ref 742* 745 747 editing_string_result_ptr 20 based pointer array level 3 dcl 10-182 set ref 743* editing_strings_next_available_byte 4 based fixed bin(21,0) level 2 dcl 10-74 set ref 760* editing_strings_next_byte 000224 automatic fixed bin(21,0) dcl 10-68 set ref 124* 730 732 734* 734 743 745 747* 747 760 editing_strings_temp_seg based char unaligned dcl 10-70 set ref 732* 745* editing_strings_temp_seg_as_an_array based char(1) array unaligned dcl 10-71 set ref 730 743 editing_strings_temp_seg_ptr based pointer level 2 dcl 9-7 ref 122 editing_strings_tsp 000226 automatic pointer dcl 10-72 set ref 122* 730 732 743 745 exclude_is_defined 0(13) based bit(1) level 3 packed unaligned dcl 10-74 set ref 883* extended_arg_type 000170 automatic fixed bin(17,0) initial dcl 1-36 set ref 1-36* fixed_arg_descriptor based structure level 1 dcl 1-13 flags 2 based structure array level 3 in structure "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" flags 2 based structure array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" flags based structure level 2 in structure "status" dcl 10-225 in procedure "rw_fr_new_report" flags 2 based structure array level 3 in structure "stoci_total_columns_info" packed unaligned dcl 1639 in procedure "setup_totals_or_counts_info" flags based structure level 2 in structure "column_info" dcl 10-19 in procedure "rw_fr_new_report" flags based structure level 2 in structure "report_control_info" dcl 9-7 in procedure "rw_fr_new_report" flags based structure level 2 in structure "format_report_info" dcl 10-74 in procedure "rw_fr_new_report" flags 7 based structure array level 3 in structure "ssosi_subtotal_info" packed unaligned dcl 1379 in procedure "setup_subtotals_or_subcounts_info" folding_is_fill 2 based bit(1) array level 4 packed unaligned dcl 10-182 set ref 717* 719* format_document_op 12 based pointer level 2 dcl 10-74 set ref 1208* format_document_options based structure level 1 dcl 3-12 set ref 1189 1190* format_document_options_ptr 000172 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 10-74 set ref 128 129* format_report_info_ptr based pointer level 2 dcl 9-7 set ref 77* format_report_ip 000230 automatic pointer dcl 10-139 set ref 77 128* 129 130 131 132 133 316 318 318 320 361 363 364 373 373 377 377 381 381 385 385 389 389 393 393 397 397 401 401 405 693 695 727 760 773 773 775 775 789 790 793 798 803 828 829 832 834 839 841 883 899 903 905 957 958 958 960 963 964 967 968 972 974 976 986 988 990 1006 1009 1009 1019 1019 1020 1024 1024 1027 1027 1032 1032 1033 1033 1049 1050 1051 1051 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 8-7 set ref 975 formatted_page_info_ptr 10 based pointer level 2 in structure "page_info" dcl 8-29 in procedure "rw_fr_new_report" set ref 1059* formatted_page_info_ptr 20 based pointer level 2 in structure "format_report_info" dcl 10-74 in procedure "rw_fr_new_report" set ref 976* 1059 formatted_page_ip 000202 automatic pointer dcl 8-26 set ref 975* 976 fpi_init_maximum_number_of_detail_blocks 000204 automatic fixed bin(17,0) dcl 8-27 set ref 974* 975 975 galley_sw 3(02) based bit(1) level 3 packed unaligned dcl 3-12 set ref 1192* gcn_loop 001022 automatic fixed bin(17,0) dcl 1541 set ref 1549* 1550 1550* generic_template based char unaligned dcl 10-142 set ref 1074 1075* 1076* 1080 1124 generic_template_length 000232 automatic fixed bin(17,0) dcl 10-143 set ref 1073* 1074 1074 1075 1076 1076 1078 1080 1124 generic_template_ptr 102 based pointer level 2 dcl 10-74 set ref 1077* generic_tp 000234 automatic pointer dcl 10-144 set ref 1074* 1075 1076 1077 1080 1124 gi_init_number_of_columns_to_group 000236 automatic fixed bin(17,0) dcl 10-151 set ref 262* 263 263 265 gov_code 000454 automatic fixed bin(35,0) dcl 88 set ref 93* 97 97* gov_option_identifier_parm parameter varying char dcl 89 set ref 81 93* gov_option_name_parm parameter varying char dcl 90 set ref 81 93* gov_option_value_parm parameter varying char dcl 91 set ref 81 93* group_column 7(01) based bit(1) array level 4 packed unaligned dcl 1379 set ref 1506* group_footer_info_ptr 36 based pointer level 2 dcl 10-74 set ref 393* 1293 group_footer_is_defined 0(09) based bit(1) level 3 packed unaligned dcl 10-74 set ref 393* 1290 group_footer_trigger_info_ptr 42 based pointer level 2 dcl 10-74 set ref 401* group_footer_trigger_is_defined 0(10) based bit(1) level 3 packed unaligned dcl 10-74 set ref 401* group_header_info_ptr 34 based pointer level 2 dcl 10-74 set ref 389* 1286 group_header_is_defined 0(03) based bit(1) level 3 packed unaligned dcl 10-74 set ref 389* 1283 group_header_trigger_info_ptr 40 based pointer level 2 dcl 10-74 set ref 397* group_header_trigger_is_defined 0(04) based bit(1) level 3 packed unaligned dcl 10-74 set ref 397* group_info based structure level 1 dcl 10-147 group_info_ptr 62 based pointer level 2 dcl 10-74 set ref 773* 775 group_ip 000240 automatic pointer dcl 10-152 set ref 775* 777* 807 808 808 811 834 843 844 844 849 851 1504 1506 group_is_defined 0(14) based bit(1) level 3 packed unaligned dcl 10-74 set ref 773* 775 803 834 841 1504 grouping_columns based fixed bin(17,0) array level 2 dcl 10-193 set ref 849* header_info based structure level 1 dcl 10-160 set ref 505 header_ip 000246 automatic pointer dcl 10-176 set ref 480 505* 506 569 569 569 569 569 569 576 576 576 576 576 576 586 586 589 607 609 629 630 650 652 659 661 1256* 1257 1270* 1271 1279* 1280 1286* 1287 1293* 1294 header_part_delimiter 104 based char(1) level 2 packed unaligned dcl 10-74 set ref 361* 363* 364 headers_next_available_byte 5 based fixed bin(21,0) level 2 dcl 10-74 set ref 405* headers_next_byte 000242 automatic fixed bin(21,0) dcl 10-154 set ref 126* 405 477* 477 533 659 headers_temp_seg based char unaligned dcl 10-156 set ref 533* headers_temp_seg_ptr based pointer level 2 dcl 9-7 ref 125 headers_tsp 000244 automatic pointer dcl 10-158 set ref 125* 533 hi_init_maximum_number_of_parts 000250 automatic fixed bin(17,0) dcl 10-177 set ref 365* 474 505 505 585 667 667* hi_init_number_of_lines 000251 automatic fixed bin(17,0) dcl 10-178 set ref 504* 505 505 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 unaligned dcl 3-12 set ref 1205* index builtin function dcl 1858 in procedure "rw_fr_new_report" ref 188 496 519 646 1418 1471 1474 1500 1586 1588 index 3 based fixed bin(21,0) array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" set ref 659* initialize_number_of_columns 000252 automatic fixed bin(17,0) dcl 10-180 set ref 690* 691 691 885* 888* 897 900* 904 904 1161* 1162 1162 1165 1523* 1524 1524 1731* 1732 1732 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_column 4 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 10-206 in procedure "rw_fr_new_report" set ref 998 1095 1702 1704 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 "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" set ref 705* 769* input_columns_info based structure level 1 dcl 10-182 set ref 691 input_columns_info_ptr 54 based pointer level 2 dcl 10-74 set ref 693* input_columns_ip 000254 automatic pointer dcl 10-183 set ref 691* 692 693 694 705 709 717 719 720 724 728 729 730 732 734 742 743 745 747 768 769 795 799 805 837 841 856 920 922 928 930 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 10-186 set ref 694* 695 770 input_columns_order based fixed bin(17,0) array dcl 10-185 set ref 694 770* input_columns_order_ptr 56 based pointer level 2 dcl 10-74 set ref 695* 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* 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* iocb_ptr 000102 automatic pointer dcl 1857 set ref 1220* 1229* 1235 iox_$attach_name 000010 constant entry external dcl 1859 ref 1220 iox_$open 000012 constant entry external dcl 1860 ref 1229 last_page_number 46 based fixed bin(17,0) level 2 dcl 10-225 set ref 1301* last_pass 14 based bit(1) level 3 dcl 10-225 set ref 1303* last_row_number 45 based fixed bin(35,0) level 2 dcl 10-225 set ref 1300* lcn_column_name 000104 automatic varying char dcl 1862 set ref 214* 218 lcn_loop 000510 automatic fixed bin(17,0) dcl 212 set ref 217* 218 218* length 4 based fixed bin(21,0) array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" set ref 569 569 569 576 576 576 586 661* length 1 based fixed bin(17,0) level 2 in structure "page_info" dcl 8-29 in procedure "rw_fr_new_report" set ref 1050* 1051 1056 1142 1445 length builtin function dcl 1863 in procedure "rw_fr_new_report" ref 182 458 492 525 529 532 729 742 1002 1107 1411 1581 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 10-160 set ref 506* literal_sw 3(04) based bit(1) level 3 packed unaligned dcl 3-12 set ref 1200* ltrim builtin function dcl 1864 ref 294 704 998 1095 max_line_length_sw 3(08) based bit(1) level 3 packed unaligned dcl 3-12 set ref 1194* maximum_number_of_detail_blocks based fixed bin(17,0) level 2 dcl 8-7 set ref 975* maximum_number_of_generation_blocks based fixed bin(17,0) level 2 dcl 10-279 set ref 1446* maximum_number_of_grouping_columns 1 based fixed bin(17,0) level 2 dcl 10-193 set ref 838* maximum_number_of_parts 1 based fixed bin(17,0) level 2 dcl 10-160 set ref 505* 506 569 569 569 569 569 569 569 569 569 569 569 569 576 576 576 576 576 576 576 576 576 576 576 576 586 586 586 586 589 589 607 607 609 609 629 629 630 630 650 650 652 652 659 659 661 661 maximum_number_of_single_columns based fixed bin(17,0) level 2 dcl 10-193 set ref 838* 849 maximum_segment_size 000260 automatic fixed bin(21,0) dcl 10-188 set ref 118* 533 732 745 1024 1051 mcl_character_string_length 000472 automatic fixed bin(17,0) dcl 148 set ref 182* 202 mcl_column_number 000473 automatic fixed bin(17,0) dcl 149 set ref 189* 193 197 198 198 mcl_column_position 000474 automatic fixed bin(17,0) dcl 150 set ref 183* 192 193 194* 194 mcl_current_position 000475 automatic fixed bin(17,0) dcl 151 set ref 181* 188 200* 200 202 214 mcl_next_blank 000476 automatic fixed bin(17,0) dcl 152 set ref 188* 200 214 mcl_no_of_columns_found 000477 automatic fixed bin(17,0) dcl 153 set ref 184* 201* 201 206 mcl_no_of_columns_found_parm parameter fixed bin(17,0) dcl 154 set ref 141 206* mcl_option_value_parm parameter varying char dcl 155 set ref 141 180* 180 182 188 214 222* mcl_still_processing_columns 000500 automatic bit(1) dcl 156 set ref 185* 187 202* mcl_type_of_map_parm parameter bit(1) dcl 157 ref 141 190 mod builtin function dcl 1866 ref 616 623 names_and_values_info_ptr 000174 automatic pointer initial dcl 6-29 set ref 6-29* names_and_values_ptr 000176 automatic pointer initial dcl 6-30 set ref 6-30* next_row_ptr 22 based pointer level 2 dcl 10-225 set ref 1299* no_of_columns_found 000104 automatic fixed bin(17,0) dcl 1868 set ref 766* 794* 833* 856 884* 885 normalized_option_name 000105 automatic varying char(97) dcl 1869 set ref 93* null builtin function dcl 1870 ref 6-29 6-30 6-41 9-61 115 131 253 320 424 457 777 790 829 1171 1220 1220 1297 1298 1299 1328 1351 1390 1408 1621 1652 1682 number 2 based fixed bin(17,0) array level 3 dcl 1893 set ref 1478* 1478 1480 number_of_bits_or_chars based fixed bin(21,0) level 2 dcl 8-43 set ref 1064* number_of_columns based fixed bin(17,0) level 2 in structure "output_columns_info" dcl 10-206 in procedure "rw_fr_new_report" ref 915 927 993 996 1008 1094 1097 1121 1161 1523 1701 1731 number_of_columns based fixed bin(17,0) level 2 in structure "subtotal_map" dcl 1893 in procedure "rw_fr_new_report" set ref 1464* 1465 number_of_columns based fixed bin(17,0) level 2 in structure "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" ref 694 795 799 805 837 841 856 1463 number_of_columns based fixed bin(17,0) level 2 in structure "page_break_info" dcl 10-210 in procedure "rw_fr_new_report" set ref 796* 797 number_of_columns based fixed bin(17,0) level 2 in structure "columns_info" dcl 10-42 in procedure "rw_fr_new_report" set ref 691* 692 904* 1162* 1163 1524* 1526 1527 1732* 1734 1735 1736 number_of_columns_to_group based fixed bin(17,0) level 2 dcl 10-147 set ref 263* 807 834 843 1504 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subtotal_info" dcl 10-291 in procedure "rw_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 10-348 set ref 1691* 1692 number_of_defined_columns 000137 automatic fixed bin(17,0) dcl 1871 set ref 117* 217 690 703 761 767 885 888 900 919 1549 1664 number_of_grouping_columns 3 based fixed bin(17,0) level 2 dcl 10-193 set ref 840* 847* 847 849 856 number_of_lines based fixed bin(17,0) level 2 dcl 10-160 set ref 505* 506 1257 1271 1280 1287 1294 number_of_lines_needed_for_detail_block 36 based fixed bin(17,0) level 2 dcl 10-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 10-225 set ref 1290* 1294* number_of_lines_needed_for_group_header 43 based fixed bin(17,0) level 2 dcl 10-225 set ref 1283* 1287* number_of_lines_needed_for_page_footer 42 based fixed bin(17,0) level 2 dcl 10-225 set ref 1276* 1280* number_of_lines_needed_for_row_footer 41 based fixed bin(17,0) level 2 dcl 10-225 set ref 1267* 1271* 1272 number_of_lines_needed_for_row_header 37 based fixed bin(17,0) level 2 dcl 10-225 set ref 1253* 1257* 1258 number_of_lines_needed_for_row_value 40 based fixed bin(17,0) level 2 dcl 10-225 set ref 1263* 1264 number_of_single_columns 2 based fixed bin(17,0) level 2 dcl 10-193 set ref 855* 860* 860 861 number_of_subtotals 1 based fixed bin(17,0) level 2 dcl 10-279 set ref 1446* number_of_templates 1 based fixed bin(17,0) level 2 in structure "row_value_template_info" dcl 10-221 in procedure "rw_fr_new_report" ref 1263 number_of_templates 1 based fixed bin(17,0) level 2 in structure "template_info" dcl 10-312 in procedure "rw_fr_new_report" set ref 1140* oi_init_maximum_number_of_grouping_columns 000261 automatic fixed bin(17,0) dcl 10-202 set ref 834* 836* 838 838 oi_init_maximum_number_of_single_columns 000262 automatic fixed bin(17,0) dcl 10-203 set ref 837* 838 838 option_identifier 000140 automatic varying char dcl 1873 set ref 704* 704 707* 711* 715* 722* 738* 998* 998 1000* 1095* 1095 1105* option_name_table_ptr 000200 automatic pointer initial dcl 6-41 set ref 6-41* option_value 000140 automatic varying char dcl 1874 set ref 254* 255 262* 314* 316* 359* 361 361 425* 426 432* 707* 709 711* 713* 715* 717 722* 724 729 732 738* 740 740* 742 745 764* 766* 785* 787 794* 824* 826 833* 879* 881 884* 955* 957 961* 963 984* 986 1000* 1002 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 10-182 set ref 768* 920 922 outline 2(01) based bit(1) array level 4 in structure "stoci_total_columns_info" 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 unaligned dcl 10-19 in procedure "rw_fr_new_report" set ref 1167* outline_info based structure level 1 dcl 10-193 set ref 838 outline_info_ptr 64 based pointer level 2 dcl 10-74 set ref 829* 839* outline_ip 000264 automatic pointer dcl 10-204 set ref 838* 839 840 847 847 849 849 855 856 860 860 861 861 outline_is_defined 0(15) based bit(1) level 3 packed unaligned dcl 10-74 set ref 828* 832* output_column 5 based fixed bin(17,0) array level 3 dcl 10-182 set ref 930* 1530 1532 1593 1665 output_columns_info based structure level 1 unaligned dcl 10-206 set ref 904 1163 1526 1734 output_columns_info_ptr 60 based pointer level 2 dcl 10-74 set ref 905* output_columns_ip 000266 automatic pointer dcl 10-207 set ref 904* 905 915 927 928 993 994 996 998 1008 1009 1009 1094 1095 1097 1101 1102 1103 1111 1121 1161 1163 1523 1526 1701 1702 1704 1731 1734 output_columns_op 000142 automatic pointer dcl 1877 set ref 916* 922 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 930 output_columns_order based fixed bin(17,0) array dcl 1875 set ref 916 922* 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 930 output_columns_order_number_of_columns 000140 automatic fixed bin(17,0) dcl 1876 set ref 915* 916 output_line 6 based fixed bin(17,0) array level 3 dcl 10-206 set ref 1102* overstrike_info_ptr 22 based pointer level 2 dcl 10-74 set ref 1065* page_break_info based structure level 1 dcl 10-210 set ref 796 page_break_info_ptr 66 based pointer level 2 dcl 10-74 set ref 790* 798* page_break_ip 000270 automatic pointer dcl 10-214 set ref 796* 797 798 800 808 811 page_break_is_defined 0(16) based bit(1) level 3 packed unaligned dcl 10-74 set ref 789* 793* page_footer_info_ptr 32 based pointer level 2 dcl 10-74 set ref 377* 1279 page_footer_is_defined 0(11) based bit(1) level 3 packed unaligned dcl 10-74 set ref 377* 1276 page_header_info_ptr 30 based pointer level 2 dcl 10-74 set ref 373* page_header_is_defined 0(02) based bit(1) level 3 packed unaligned dcl 10-74 set ref 373* page_info based structure level 1 dcl 8-29 set ref 1048 1057 1061 1062* 1062 page_info_ptr 14 based pointer level 2 dcl 10-74 set ref 1060* 1062 page_info_size 3 based fixed bin(17,0) level 2 dcl 8-29 set ref 1057* page_ip 000206 automatic pointer dcl 8-41 set ref 366 1048* 1049 1050 1051 1051 1056 1056 1056 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 10-74 set ref 963* 964 968* 974 1024 1027 1032* 1032 1033 1033* 1050 1051* page_overstrike_info based structure level 1 dcl 8-43 set ref 1064 page_overstrike_ip 000210 automatic pointer dcl 8-49 set ref 1064* 1065 page_ptr 4 based pointer level 2 dcl 8-29 set ref 1058* page_width 1 based fixed bin(17,0) level 2 dcl 10-74 set ref 957* 958 990 1006* 1009 1009 1019* 1019 1024 1027* 1049 1051* parts 2 based structure array level 3 dcl 10-160 pbi_init_number_of_columns 000272 automatic fixed bin(17,0) dcl 10-215 set ref 795* 796 796 permanent_report 0(05) based bit(1) level 3 packed unaligned dcl 9-7 ref 1215 ph_header_info_ptr_parm parameter pointer dcl 446 set ref 440 457* 480* ph_header_line 000144 automatic varying char dcl 1879 set ref 521* 525 525* 527 527* 527 529 529 529* 529 532 533 646 652 667* ph_header_line_length 000614 automatic fixed bin(17,0) dcl 447 set ref 477 532* 533 664 ph_header_value_parm parameter varying char dcl 448 set ref 440 458 458 458* 458 492 496 519 521 position 1 based fixed bin(17,0) array level 2 dcl 10-48 set ref 193* 198* 266 768 770 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 10-182 in procedure "rw_fr_new_report" set ref 720* present 1 based bit(1) array level 3 in structure "subtotal_map" dcl 1893 in procedure "rw_fr_new_report" set ref 1477* present 2 based bit(1) array level 5 in structure "header_info" packed unaligned dcl 10-160 in procedure "rw_fr_new_report" set ref 569 569 569 576 576 576 586 589* 607 650* present based bit(1) array level 2 in structure "column_map" dcl 10-48 in procedure "rw_fr_new_report" set ref 192* 197* 800 844 851* 858 920 1665 1668* 1702 previous_row_ptr 16 based pointer level 2 dcl 10-225 set ref 1298* report_cip 000212 automatic pointer initial dcl 9-61 set ref 63* 77 9-61* 93* 112 114 120 121 122 125 966 971 1058 1215 1219 report_cip_parm parameter pointer dcl 45 ref 38 63 report_control_info based structure level 1 dcl 9-7 report_directory_name 116 based char(168) level 2 packed unaligned dcl 10-74 set ref 132* 1219* 1220 1224 1224 1230 1230 report_entry_name 170 based char(32) level 2 packed unaligned dcl 10-74 set ref 133* 1218* 1220 1224 1224 1230 1230 report_iocb_ptr 6 based pointer level 2 dcl 10-74 set ref 131* 1235* report_is_paginated based bit(1) level 3 packed unaligned dcl 9-7 set ref 966* 971* report_temp_seg_ptr based pointer level 2 dcl 9-7 ref 121 1058 report_work_area_ptr based pointer level 2 dcl 9-7 ref 120 reset 7 based bit(1) array level 4 packed unaligned dcl 1379 set ref 1510* ros_column_number 001032 automatic fixed bin(17,0) dcl 1568 set ref 1592* 1593 ros_current_position 001033 automatic fixed bin(17,0) dcl 1569 set ref 1582* 1586 1588 1590 1593 1596* 1596 1597 ros_next_blank 001034 automatic fixed bin(17,0) dcl 1570 set ref 1586* 1593 1596 ros_next_comma 001035 automatic fixed bin(17,0) dcl 1571 set ref 1588* 1590 ros_still_eliminating_orphans 001036 automatic bit(1) dcl 1572 set ref 1583* 1585 1597* ros_subtotal_list_length 001037 automatic fixed bin(17,0) dcl 1573 set ref 1581* 1597 row_footer_info_ptr 46 based pointer level 2 dcl 10-74 set ref 385* 1270 row_footer_is_defined 0(08) based bit(1) level 3 packed unaligned dcl 10-74 set ref 385* 1267 row_header_info_ptr 44 based pointer level 2 dcl 10-74 set ref 381* 1256 row_header_is_defined 0(06) based bit(1) level 3 packed unaligned dcl 10-74 set ref 381* 1253 row_value_is_defined 0(07) based bit(1) level 3 packed unaligned dcl 10-74 set ref 899* 903* 1261 row_value_template_info based structure level 1 unaligned dcl 10-221 set ref 1140 row_value_template_info_ptr 100 based pointer level 2 dcl 10-74 set ref 1141* row_value_template_ip 000274 automatic pointer dcl 10-222 set ref 1140* 1141 1147 1263 rtrim builtin function dcl 1881 ref 1220 1220 1224 1224 1224 1224 1230 1230 1230 1230 rw_error_$bad_option_value 000014 external static fixed bin(35,0) dcl 1882 set ref 222* rw_error_$bad_report_setup 000016 external static fixed bin(35,0) dcl 1883 set ref 667* 1027* 1051* 1491* 1554* 1558* 1713* 1774* 1780* 1821* rw_error_$no_columns_defined 000020 external static fixed bin(35,0) dcl 1884 set ref 115* rw_options$get 000022 constant entry external dcl 1885 ref 93 saadp_claimed_digits 001072 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 fixed bin(11,0) level 2 packed unaligned dcl 1-13 ref 293 sci_ptr 000144 automatic pointer dcl 1887 set ref 97* 112* 115* 222* 667* 1027* 1051* 1224* 1230* 1491* 1554* 1558* 1713* 1774* 1780* 1821* sdt_column_number_parm parameter fixed bin(17,0) dcl 1795 ref 1793 1802 1805 1809 1815 1818 sdt_column_type 001104 automatic fixed bin(6,0) unsigned unaligned dcl 1796 set ref 1803* 1805 1805 1805 1805 1809 1809 1809 1809 1809 1809 1809 1809 1815 1815 1818 1818 1821* search builtin function dcl 1888 ref 652 sgi_group_info based structure level 1 unaligned dcl 238 set ref 263 sgi_group_info_ptr 000520 automatic pointer dcl 239 set ref 263* 266 268 sgi_group_info_ptr_parm parameter pointer dcl 240 set ref 231 253* 268* sgi_grouping_is_defined_flag_parm parameter bit(1) unaligned dcl 241 set ref 231 257* 261* sgi_init_number_of_generations 000310 automatic fixed bin(17,0) dcl 10-287 set ref 1445* 1446 1446 sgi_init_number_of_subtotals 000311 automatic fixed bin(17,0) dcl 10-288 set ref 1444* 1446 1446 sgi_loop 000522 automatic fixed bin(17,0) dcl 242 set ref 265* 266 266* sgi_option_name_parm parameter varying char dcl 243 set ref 231 254* shi_additional_indent 000550 automatic fixed bin(17,0) dcl 328 set ref 623* 624 624* 626 shi_alignment_modes 000551 automatic fixed bin(17,0) array dcl 329 set ref 369* 370* 371* 630 shi_current_header_part 000557 automatic fixed bin(17,0) dcl 333 set ref 466* 650 652 659 661 666* 666 667 shi_current_inner_position 000560 automatic fixed bin(17,0) dcl 334 set ref 468* 646 652 659 663* 663 664 shi_current_position 000561 automatic fixed bin(17,0) dcl 335 set ref 462* 491* 496 499* 499 500 519 521 523* 523 shi_delimiter 000554 automatic char(1) unaligned dcl 330 set ref 364* 525 525 527 527 529 529 646 shi_header_info_ptr 000562 automatic pointer dcl 336 set ref 432* 434 shi_header_length 000564 automatic fixed bin(17,0) dcl 337 set ref 492* 500 shi_header_part_length 000565 automatic fixed bin(17,0) dcl 338 set ref 648* 652 652 661 shi_inner_loop 000555 automatic fixed bin(17,0) dcl 331 set ref 474* 607 609 613 618 620 629 630 630 shi_loop 000556 automatic fixed bin(17,0) dcl 332 set ref 464* 569 569 569 569 569 569 576 576 576 576 576 576 586 586 589 607 609 629 630 650 652 659 661 shi_n_parts_width 000566 automatic fixed bin(17,0) array dcl 339 set ref 366* 367* 367 368* 368 609 616 616 622 623 628 628 shi_next_newline_position 000571 automatic fixed bin(17,0) dcl 340 set ref 496* 499 519* 521 523 shi_number_of_lines_found 000572 automatic fixed bin(17,0) dcl 341 set ref 464 490* 498* 498 504 shi_number_of_parts_found 000573 automatic fixed bin(17,0) dcl 342 set ref 467* 590* 590 609 611 613 649* 649 shi_second_delimiter_position 000574 automatic fixed bin(17,0) dcl 343 set ref 646* 648 663 shi_starting_position 000575 automatic fixed bin(17,0) dcl 344 set ref 611* 613* 616* 618* 622* 626* 626 628* 629 shi_still_counting 000576 automatic bit(1) dcl 345 set ref 493* 495 500* shi_still_parsing 000577 automatic bit(1) dcl 346 set ref 469* 470 664* si_init_number_of_columns_to_subtotal 000314 automatic fixed bin(17,0) dcl 10-309 set ref 1400* 1419* 1419 1432 1432 1444 1469 sici_hit 000666 automatic bit(1) dcl 682 set ref 806* 808* 811 sici_inner_loop 000667 automatic fixed bin(17,0) dcl 683 set ref 807* 808 808 811* 843* 844 844 849 851* sici_loop 000670 automatic fixed bin(17,0) dcl 684 set ref 703* 704 705 705 709 709 713* 717 719 720 724 728 729 730 732 734 742 743 745 747 750* 767* 768 768 769 769 770 770* 799* 800 800* 805* 808* 841* 844* 856* 858 861* single_columns 4 based fixed bin(17,0) array level 2 dcl 10-193 set ref 861* sisfs_char_10 based char(10) unaligned dcl 280 ref 294 sisfs_descriptor_ptr_parm parameter pointer dcl 281 ref 274 292 sisfs_ioa_string_parm parameter varying char dcl 282 set ref 274 294* 296* 300* sisfs_scale 000532 automatic fixed bin(17,0) dcl 283 set ref 293* 294 294 size builtin function dcl 1889 ref 1057 1123 1148 soci_inner_loop 000706 automatic fixed bin(17,0) dcl 872 set ref 917* 922 923* 923 soci_loop 000707 automatic fixed bin(17,0) dcl 873 set ref 919* 920 922* 927* 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 928 930 930* spi_current_detail_line 000720 automatic fixed bin(17,0) dcl 939 set ref 1091* 1102 1125* 1125 1138 1146 spi_current_position 000721 automatic fixed bin(17,0) dcl 940 set ref 992* 994* 994 1002* 1002 1006 1092* 1101 1103* 1103 1108 1111 1118 1119* 1119 1126* spi_exceeds_max_seg_size 000722 automatic bit(1) dcl 941 set ref 1022* 1023 1024* spi_last_column_on_detail_line 000723 automatic bit(1) dcl 942 set ref 1097* 1099* 1108* 1111 1111* 1116 spi_loop 000724 automatic fixed bin(17,0) dcl 943 set ref 957 963 993* 994 996 998* 1008* 1009 1009* 1094* 1095 1097 1101 1102 1103 1111 1121* 1146* 1147* 1165* 1166* spi_separator_width 000725 automatic fixed bin(17,0) dcl 944 set ref 1107* 1108 1111 1118 1119 ssosi_column_name 000146 automatic varying char dcl 1890 set ref 1475* 1501* 1550 1554* 1558* 1590* ssosi_comma_position 000772 automatic fixed bin(17,0) dcl 1365 set ref 1474* 1475 1499 1500* 1501 1510 ssosi_current_inner_position 000774 automatic fixed bin(17,0) dcl 1367 set ref 1470* 1499* 1499 1500 1501 1510 ssosi_current_position 000773 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) unaligned dcl 1368 set ref 1357 1389* 1399* 1407* ssosi_inner_loop 000775 automatic fixed bin(17,0) dcl 1369 set ref 1504* 1506* ssosi_loop 000776 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 000777 automatic fixed bin(17,0) dcl 1371 set ref 1418* 1419 1422 1471* 1472 1512 ssosi_option_value 000146 automatic varying char dcl 1891 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 001000 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 001002 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 001004 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 001006 automatic fixed bin(17,0) dcl 1381 set ref 1411* 1424 ssu_$abort_line 000024 constant entry external dcl 1892 ref 97 115 222 667 1027 1051 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 10-206 in procedure "rw_fr_new_report" set ref 1101* starting_position 5 based fixed bin(17,0) array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" set ref 629* status based structure level 1 dcl 10-225 set ref 1249 1250* status_pointer 000276 automatic pointer dcl 10-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 10-74 set ref 1305* stoci_defined_flag_parm parameter bit(1) unaligned dcl 1635 set ref 1627 1651* 1661* 1681* stoci_inner_loop 001054 automatic fixed bin(17,0) dcl 1636 set ref 1693* 1704 1708 1708 1713 1716 1716 1716 1720 1721* 1721 stoci_loop 001055 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 001056 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 unaligned dcl 3-12 set ref 1195* subcount_columns_ip 000300 automatic pointer dcl 10-267 set ref 1326* subcount_generation_ip 000302 automatic pointer dcl 10-270 set ref 1325* subcount_info based structure level 1 unaligned dcl 10-272 subcount_info_ptr 72 based pointer level 2 dcl 10-74 set ref 1324* 1328* subcount_ip 000304 automatic pointer dcl 10-273 set ref 1320* 1324 1325 1326 subcount_is_defined 0(18) based bit(1) level 3 packed unaligned dcl 10-74 set ref 1320* 1322 substr builtin function dcl 1898 set ref 188 214 361 458 496 519 521 527 529 533* 646 652 732* 745* 1076* 1118* 1418 1471 1472 1475 1500 1501 1510 1586 1588 1590 1593 subsystem_control_info_ptr based pointer level 2 dcl 9-7 ref 112 subsystem_data_type 13 based fixed bin(17,0) array level 3 dcl 10-182 set ref 1486 1486 1708 1708 1805* 1809* 1815* 1818* subtotal 16 based float dec(59) array level 3 dcl 1379 set ref 1435* subtotal_columns_info based structure level 1 unaligned dcl 10-275 subtotal_columns_ip 000306 automatic pointer dcl 10-276 set ref 1349* subtotal_generation_info based structure level 1 dcl 10-279 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_info_ptr 2 based pointer level 2 in structure "subcount_info" dcl 10-272 in procedure "rw_fr_new_report" ref 1325 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subtotal_info" dcl 10-291 in procedure "rw_fr_new_report" ref 1348 subtotal_generation_ip 000312 automatic pointer dcl 10-289 set ref 1348* subtotal_info based structure level 1 dcl 10-291 subtotal_info_ptr 70 based pointer level 2 dcl 10-74 set ref 1347* 1351* subtotal_ip 000316 automatic pointer dcl 10-310 set ref 1343* 1347 1348 1349 subtotal_is_defined 0(17) based bit(1) level 3 packed unaligned dcl 10-74 set ref 1343* 1345 subtotal_map based structure level 1 dcl 1893 set ref 1464 subtotal_map_init_number_of_columns 000146 automatic fixed bin(17,0) dcl 1899 set ref 1463* 1464 1464 subtotal_map_ptr 000150 automatic pointer dcl 1900 set ref 1464* 1465 1477 1478 1478 1480 switch_name 000152 automatic char(32) unaligned dcl 1901 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 1902 ref 118 table_info based structure level 1 dcl 11-7 table_info_ptr 10 based pointer level 2 dcl 10-74 set ref 130* table_information_ptr based pointer level 2 dcl 9-7 ref 114 table_ip 000336 automatic pointer dcl 11-20 set ref 114* 115 117 130 218 1491 1494 1494 1550 1713 1716 1716 1802 temp_dir_name based char(168) level 2 packed unaligned dcl 9-7 ref 1219 temp_seg_ptr 000162 automatic pointer dcl 1904 set ref 121* 1079 1145 template based char unaligned dcl 10-327 set ref 1080* 1118* 1123 1124* 1147 1148 template_info based structure level 1 dcl 10-312 template_length 000325 automatic fixed bin(17,0) dcl 10-328 set ref 1078* 1080 1118 1123 1123 1124 1139 1147 1148 1148 template_map based bit(1) array unaligned dcl 10-322 ref 1143 template_map_number_of_bits 000324 automatic fixed bin(17,0) dcl 10-324 set ref 1142* 1143 template_map_ptr 26 based pointer level 2 dcl 10-74 set ref 1144* template_mp 000322 automatic pointer dcl 10-323 set ref 1143* 1144 template_ptr 000326 automatic pointer dcl 10-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 10-312 set ref 1140* 1147 1147 1147 templates 2 based char array level 2 packed unaligned dcl 10-221 set ref 1147* ti_init_number_of_columns_to_total 000332 automatic fixed bin(17,0) dcl 10-356 set ref 1662* 1669* 1669 1679 1691 1691 ti_init_number_of_templates 000320 automatic fixed bin(17,0) dcl 10-317 set ref 1138* 1140 1140 ti_init_template_width 000321 automatic fixed bin(17,0) dcl 10-319 set ref 1139* 1140 1140 title_block_columns_info based structure level 1 unaligned dcl 10-331 set ref 1162 1163* title_block_columns_info_ptr 50 based pointer level 2 dcl 10-74 set ref 1164* title_block_columns_ip 000330 automatic pointer dcl 10-332 set ref 1162* 1163 1164 1166 title_block_info_ptr 52 based pointer level 2 dcl 10-74 set ref 1171* title_block_is_defined 0(05) based bit(1) level 3 packed unaligned dcl 10-74 set ref 986* 988* 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 8-29 set ref 1056* 1064 1064 1064 total_columns_info based structure level 1 unaligned dcl 10-345 total_info based structure level 1 dcl 10-348 total_info_ptr 74 based pointer level 2 dcl 10-74 set ref 1619* 1621* total_ip 000334 automatic pointer dcl 10-357 set ref 1617* 1619 total_is_defined 0(19) based bit(1) level 3 packed unaligned dcl 10-74 set ref 1617* 1619 truncation_indicator 105 based varying char(32) level 2 dcl 10-74 set ref 1187* type 0(01) based fixed bin(6,0) level 2 packed unsigned unaligned dcl 1-6 ref 296 296 296 296 296 296 296 296 296 1803 unique_chars_ 000030 constant entry external dcl 1906 ref 1217 1218 unlimited_page_length based bit(1) level 3 packed unaligned dcl 10-74 set ref 967* 972* 1020 unlimited_page_width 0(01) based bit(1) level 3 packed unaligned dcl 10-74 set ref 958* 960* unspec builtin function dcl 1907 set ref 129* 179* 506* 692* 889* 901* 1190* 1250* 1434* 1465* verify builtin function dcl 1909 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 "input_columns_info" dcl 10-182 in procedure "rw_fr_new_report" set ref 709* 1780 1780* width based fixed bin(17,0) level 2 in structure "page_info" dcl 8-29 in procedure "rw_fr_new_report" set ref 366 1049* 1051 1056 1073 1108 1111 width 10 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 10-206 in procedure "rw_fr_new_report" set ref 994 1009 1009* 1103 1111 width 6 based fixed bin(17,0) array level 4 in structure "header_info" dcl 10-160 in procedure "rw_fr_new_report" set ref 609* work_area based area dcl 1911 ref 128 263 505 691 694 762 796 838 904 916 975 1048 1061 1064 1074 1140 1143 1162 1189 1249 1432 1446 1464 1524 1691 1732 work_area_ptr 000164 automatic pointer dcl 1912 set ref 120* 128 263 505 691 694 762 796 838 904 916 975 1048 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 unsigned unaligned dcl 2-29 GENERAL_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 7-15 GENERAL_REPORT_OPTION internal static fixed bin(17,0) initial dcl 7-14 Interseg_call_type internal static fixed bin(18,0) initial unsigned unaligned dcl 2-29 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 7-28 LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 7-27 LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 7-26 MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 7-32 MAXIMUM_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 7-35 NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 7-22 OPTION_NAMES_AS_ARGS internal static structure array level 1 unaligned dcl 5-101 Quick_call_type internal static fixed bin(18,0) initial unsigned unaligned dcl 2-29 SPECIFIC_COLUMN_OPTION internal static fixed bin(17,0) initial dcl 7-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 TABLE_INFO_VERSION_1 internal static char(8) initial unaligned dcl 11-22 arg_list based structure level 1 dcl 2-5 arg_list_with_envptr based structure level 1 dcl 2-17 columns_ip automatic pointer dcl 10-46 count_columns_info based structure level 1 unaligned dcl 10-54 count_columns_ip automatic pointer dcl 10-55 count_info based structure level 1 unaligned dcl 10-57 current_row_value based char unaligned dcl 10-61 editing_string_result based char unaligned dcl 10-64 editing_string_rl automatic fixed bin(17,0) dcl 10-65 editing_string_rp automatic pointer dcl 10-66 extended_arg_descriptor based structure level 1 dcl 1-21 format_document_version_1 internal static fixed bin(17,0) initial dcl 3-64 headers_temp_seg_as_an_array based char(1) array unaligned dcl 10-157 iox_modes internal static char(24) initial array dcl 4-6 name_value_info based structure array level 1 dcl 6-17 names_and_values based char unaligned dcl 6-27 next_row_value based char unaligned dcl 10-191 no_of_names_and_values automatic fixed bin(21,0) dcl 6-31 no_of_options_in_name_table automatic fixed bin(21,0) dcl 6-40 option_name_table based structure array level 1 unaligned dcl 6-36 page_defined_as_a_string based char unaligned dcl 8-40 page_defined_as_chars based char(1) array unaligned dcl 8-38 page_defined_as_lines based char array unaligned dcl 8-39 page_overstrike_info_redefined based structure level 1 dcl 8-51 previous_row_value based char unaligned dcl 10-218 short_iox_modes internal static char(4) initial array dcl 4-12 size_of_names_and_values automatic fixed bin(21,0) dcl 6-32 subcount_columns_info based structure level 1 unaligned dcl 10-266 subcount_generation_info based structure level 1 unaligned dcl 10-269 tbi_init_line_length automatic fixed bin(17,0) dcl 10-341 tbi_init_number_of_lines automatic fixed bin(17,0) dcl 10-342 template_ip automatic pointer dcl 10-318 template_map_defined_as_a_string based bit unaligned dcl 10-325 ti_init_column_count automatic fixed bin(17,0) dcl 11-21 title_block_info based structure level 1 dcl 10-335 title_block_ip automatic pointer dcl 10-343 total_columns_ip automatic pointer dcl 10-346 NAMES DECLARED BY EXPLICIT CONTEXT. allocate_header_info_structure 003620 constant entry internal dcl 484 ref 460 cleanup_and_save_header_line 003713 constant entry internal dcl 512 ref 465 correct_header_part_anomaly 004044 constant entry internal dcl 539 ref 473 define_header 003416 constant entry internal dcl 409 ref 373 377 381 385 389 393 get_column_number 011534 constant entry internal dcl 1539 ref 1476 1503 1592 get_option_value 002022 constant entry internal dcl 81 ref 254 314 359 425 707 711 715 722 738 764 785 824 879 955 961 984 1000 1105 1185 1196 1203 1318 1341 1615 housekeeping 002124 constant entry internal dcl 104 ref 65 lookup_column_number 002371 constant entry internal dcl 210 ref 189 map_column_list 002236 constant entry internal dcl 141 ref 262 766 794 833 884 1662 parse_header 003515 constant entry internal dcl 440 ref 432 remove_orphan_subtotals 011671 constant entry internal dcl 1566 ref 1404 rw_fr_new_report 001465 constant entry external dcl 38 set_alignment_and_decimal_position 012521 constant entry internal dcl 1743 ref 713 set_data_type 013003 constant entry internal dcl 1793 ref 750 set_grouping_info 002474 constant entry internal dcl 231 ref 397 401 773 set_header_part_additional_info 004161 constant entry internal dcl 600 ref 475 set_header_part_info 004306 constant entry internal dcl 638 ref 471 set_ioa_string_for_total_or_subtotal 002626 constant entry internal dcl 274 ref 1494 1716 setup_counts_info 003001 constant entry internal dcl 306 ref 72 setup_header_info 003067 constant entry internal dcl 326 ref 74 setup_input_column_info 004441 constant entry internal dcl 680 ref 66 setup_output_column_info 005667 constant entry internal dcl 870 ref 67 setup_page_info 006214 constant entry internal dcl 937 ref 68 setup_report_info 007421 constant entry internal dcl 1178 ref 73 setup_status_info 010250 constant entry internal dcl 1242 ref 75 setup_subcounts_info 010372 constant entry internal dcl 1311 ref 70 setup_subtotals_info 010466 constant entry internal dcl 1334 ref 69 setup_subtotals_or_subcounts_info 010562 constant entry internal dcl 1357 ref 1320 1343 setup_totals_info 012023 constant entry internal dcl 1609 ref 71 setup_totals_or_counts_info 012111 constant entry internal dcl 1627 ref 316 1617 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 13746 14000 13607 13756 Length 14516 13607 32 502 136 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rw_fr_new_report 1792 external procedure is an external procedure. get_option_value internal procedure shares stack frame of external procedure rw_fr_new_report. housekeeping internal procedure shares stack frame of external procedure rw_fr_new_report. map_column_list internal procedure shares stack frame of external procedure rw_fr_new_report. lookup_column_number internal procedure shares stack frame of external procedure rw_fr_new_report. set_grouping_info internal procedure shares stack frame of external procedure rw_fr_new_report. set_ioa_string_for_total_or_subtotal internal procedure shares stack frame of external procedure rw_fr_new_report. setup_counts_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_header_info internal procedure shares stack frame of external procedure rw_fr_new_report. define_header internal procedure shares stack frame of external procedure rw_fr_new_report. parse_header internal procedure shares stack frame of external procedure rw_fr_new_report. allocate_header_info_structure internal procedure shares stack frame of external procedure rw_fr_new_report. cleanup_and_save_header_line internal procedure shares stack frame of external procedure rw_fr_new_report. correct_header_part_anomaly internal procedure shares stack frame of external procedure rw_fr_new_report. set_header_part_additional_info internal procedure shares stack frame of external procedure rw_fr_new_report. set_header_part_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_input_column_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_output_column_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_page_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_report_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_status_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_subcounts_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_subtotals_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_subtotals_or_subcounts_info internal procedure shares stack frame of external procedure rw_fr_new_report. get_column_number internal procedure shares stack frame of external procedure rw_fr_new_report. remove_orphan_subtotals internal procedure shares stack frame of external procedure rw_fr_new_report. setup_totals_info internal procedure shares stack frame of external procedure rw_fr_new_report. setup_totals_or_counts_info internal procedure shares stack frame of external procedure rw_fr_new_report. set_alignment_and_decimal_position internal procedure shares stack frame of external procedure rw_fr_new_report. set_data_type internal procedure shares stack frame of external procedure rw_fr_new_report. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rw_fr_new_report 000100 code rw_fr_new_report 000102 iocb_ptr rw_fr_new_report 000104 lcn_column_name rw_fr_new_report 000104 no_of_columns_found rw_fr_new_report 000105 normalized_option_name rw_fr_new_report 000137 number_of_defined_columns rw_fr_new_report 000140 output_columns_order_number_of_columns rw_fr_new_report 000140 option_value rw_fr_new_report 000140 option_identifier rw_fr_new_report 000142 output_columns_op rw_fr_new_report 000144 ph_header_line rw_fr_new_report 000144 sci_ptr rw_fr_new_report 000146 ssosi_option_value rw_fr_new_report 000146 ssosi_column_name rw_fr_new_report 000146 subtotal_map_init_number_of_columns rw_fr_new_report 000150 subtotal_map_ptr rw_fr_new_report 000152 switch_name rw_fr_new_report 000162 temp_seg_ptr rw_fr_new_report 000164 work_area_ptr rw_fr_new_report 000166 arg_descriptor_ptr rw_fr_new_report 000170 extended_arg_type rw_fr_new_report 000172 format_document_options_ptr rw_fr_new_report 000174 names_and_values_info_ptr rw_fr_new_report 000176 names_and_values_ptr rw_fr_new_report 000200 option_name_table_ptr rw_fr_new_report 000202 formatted_page_ip rw_fr_new_report 000204 fpi_init_maximum_number_of_detail_blocks rw_fr_new_report 000206 page_ip rw_fr_new_report 000210 page_overstrike_ip rw_fr_new_report 000212 report_cip rw_fr_new_report 000214 column_ip rw_fr_new_report 000216 column_map_number_of_columns rw_fr_new_report 000220 column_mp rw_fr_new_report 000222 count_ip rw_fr_new_report 000224 editing_strings_next_byte rw_fr_new_report 000226 editing_strings_tsp rw_fr_new_report 000230 format_report_ip rw_fr_new_report 000232 generic_template_length rw_fr_new_report 000234 generic_tp rw_fr_new_report 000236 gi_init_number_of_columns_to_group rw_fr_new_report 000240 group_ip rw_fr_new_report 000242 headers_next_byte rw_fr_new_report 000244 headers_tsp rw_fr_new_report 000246 header_ip rw_fr_new_report 000250 hi_init_maximum_number_of_parts rw_fr_new_report 000251 hi_init_number_of_lines rw_fr_new_report 000252 initialize_number_of_columns rw_fr_new_report 000254 input_columns_ip rw_fr_new_report 000256 input_columns_op rw_fr_new_report 000260 maximum_segment_size rw_fr_new_report 000261 oi_init_maximum_number_of_grouping_columns rw_fr_new_report 000262 oi_init_maximum_number_of_single_columns rw_fr_new_report 000264 outline_ip rw_fr_new_report 000266 output_columns_ip rw_fr_new_report 000270 page_break_ip rw_fr_new_report 000272 pbi_init_number_of_columns rw_fr_new_report 000274 row_value_template_ip rw_fr_new_report 000276 status_pointer rw_fr_new_report 000300 subcount_columns_ip rw_fr_new_report 000302 subcount_generation_ip rw_fr_new_report 000304 subcount_ip rw_fr_new_report 000306 subtotal_columns_ip rw_fr_new_report 000310 sgi_init_number_of_generations rw_fr_new_report 000311 sgi_init_number_of_subtotals rw_fr_new_report 000312 subtotal_generation_ip rw_fr_new_report 000314 si_init_number_of_columns_to_subtotal rw_fr_new_report 000316 subtotal_ip rw_fr_new_report 000320 ti_init_number_of_templates rw_fr_new_report 000321 ti_init_template_width rw_fr_new_report 000322 template_mp rw_fr_new_report 000324 template_map_number_of_bits rw_fr_new_report 000325 template_length rw_fr_new_report 000326 template_ptr rw_fr_new_report 000330 title_block_columns_ip rw_fr_new_report 000332 ti_init_number_of_columns_to_total rw_fr_new_report 000334 total_ip rw_fr_new_report 000336 table_ip rw_fr_new_report 000454 gov_code get_option_value 000472 mcl_character_string_length map_column_list 000473 mcl_column_number map_column_list 000474 mcl_column_position map_column_list 000475 mcl_current_position map_column_list 000476 mcl_next_blank map_column_list 000477 mcl_no_of_columns_found map_column_list 000500 mcl_still_processing_columns map_column_list 000510 lcn_loop lookup_column_number 000520 sgi_group_info_ptr set_grouping_info 000522 sgi_loop set_grouping_info 000532 sisfs_scale set_ioa_string_for_total_or_subtotal 000550 shi_additional_indent setup_header_info 000551 shi_alignment_modes setup_header_info 000554 shi_delimiter setup_header_info 000555 shi_inner_loop setup_header_info 000556 shi_loop setup_header_info 000557 shi_current_header_part setup_header_info 000560 shi_current_inner_position setup_header_info 000561 shi_current_position setup_header_info 000562 shi_header_info_ptr setup_header_info 000564 shi_header_length setup_header_info 000565 shi_header_part_length setup_header_info 000566 shi_n_parts_width setup_header_info 000571 shi_next_newline_position setup_header_info 000572 shi_number_of_lines_found setup_header_info 000573 shi_number_of_parts_found setup_header_info 000574 shi_second_delimiter_position setup_header_info 000575 shi_starting_position setup_header_info 000576 shi_still_counting setup_header_info 000577 shi_still_parsing setup_header_info 000614 ph_header_line_length parse_header 000642 chpa_loop correct_header_part_anomaly 000666 sici_hit setup_input_column_info 000667 sici_inner_loop setup_input_column_info 000670 sici_loop setup_input_column_info 000706 soci_inner_loop setup_output_column_info 000707 soci_loop setup_output_column_info 000720 spi_current_detail_line setup_page_info 000721 spi_current_position setup_page_info 000722 spi_exceeds_max_seg_size setup_page_info 000723 spi_last_column_on_detail_line setup_page_info 000724 spi_loop setup_page_info 000725 spi_separator_width setup_page_info 000772 ssosi_comma_position setup_subtotals_or_subcounts_info 000773 ssosi_current_position setup_subtotals_or_subcounts_info 000774 ssosi_current_inner_position setup_subtotals_or_subcounts_info 000775 ssosi_inner_loop setup_subtotals_or_subcounts_info 000776 ssosi_loop setup_subtotals_or_subcounts_info 000777 ssosi_next_blank setup_subtotals_or_subcounts_info 001000 ssosi_still_counting_subtotals setup_subtotals_or_subcounts_info 001002 ssosi_subtotal_columns_info_ptr setup_subtotals_or_subcounts_info 001004 ssosi_subtotal_generation_info_ptr setup_subtotals_or_subcounts_info 001006 ssosi_subtotal_list_length setup_subtotals_or_subcounts_info 001022 gcn_loop get_column_number 001032 ros_column_number remove_orphan_subtotals 001033 ros_current_position remove_orphan_subtotals 001034 ros_next_blank remove_orphan_subtotals 001035 ros_next_comma remove_orphan_subtotals 001036 ros_still_eliminating_orphans remove_orphan_subtotals 001037 ros_subtotal_list_length remove_orphan_subtotals 001054 stoci_inner_loop setup_totals_or_counts_info 001055 stoci_loop setup_totals_or_counts_info 001056 stoci_total_columns_info_ptr setup_totals_or_counts_info 001072 saadp_claimed_digits set_alignment_and_decimal_position 001104 sdt_column_type set_data_type THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return alloc_auto_adj mpfx2 mod_fx1 shorten_stack ext_entry any_to_any_tr alloc_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. iox_$attach_name iox_$open rw_options$get ssu_$abort_line unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. rw_error_$bad_option_value rw_error_$bad_report_setup rw_error_$no_columns_defined sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 38 001461 1862 001472 1873 001502 1874 001512 1879 001522 1890 001532 1891 001542 1 36 001552 6 29 001554 6 30 001556 6 41 001557 9 61 001560 254 001561 262 001564 314 001567 316 001572 359 001575 425 001600 432 001603 667 001606 707 001611 711 001617 713 001625 715 001630 722 001636 738 001644 764 001652 766 001655 785 001660 794 001663 824 001666 833 001671 879 001674 884 001677 955 001702 961 001705 984 001710 1000 001713 1105 001721 1185 001727 1196 001732 1203 001735 1318 001740 1320 001743 1341 001746 1343 001751 1554 001754 1558 001757 1615 001762 1617 001765 63 001770 64 001774 65 001775 66 001776 67 001777 68 002000 69 002001 70 002002 71 002003 72 002004 73 002005 74 002006 75 002007 77 002010 79 002021 81 002022 93 002045 97 002104 100 002123 104 002124 112 002125 114 002136 115 002141 117 002163 118 002166 120 002172 121 002176 122 002201 124 002204 125 002206 126 002211 128 002212 129 002217 130 002222 131 002224 132 002226 133 002231 135 002234 137 002235 141 002236 179 002247 180 002260 181 002271 182 002273 183 002275 184 002277 185 002300 187 002302 188 002304 189 002325 190 002327 192 002333 193 002340 194 002343 195 002344 197 002345 198 002352 200 002355 201 002357 202 002360 204 002364 206 002365 208 002370 210 002371 214 002373 217 002410 218 002417 220 002435 222 002437 225 002471 231 002474 253 002505 254 002510 255 002533 257 002541 258 002546 261 002547 262 002554 263 002574 265 002604 266 002613 267 002620 268 002622 270 002625 274 002626 292 002637 293 002643 294 002647 296 002726 300 002767 302 003000 306 003001 314 003002 316 003025 318 003054 320 003063 322 003066 326 003067 359 003070 361 003113 363 003126 364 003131 365 003133 366 003135 367 003140 368 003142 369 003145 370 003147 371 003151 373 003153 377 003176 381 003222 385 003246 389 003272 393 003316 397 003342 401 003366 405 003412 407 003415 409 003416 424 003427 425 003432 426 003455 428 003463 429 003470 432 003471 433 003505 434 003512 436 003514 440 003515 457 003526 458 003531 460 003546 462 003547 464 003551 465 003561 466 003562 467 003564 468 003565 469 003566 470 003570 471 003572 472 003573 473 003574 474 003575 475 003605 476 003606 477 003610 478 003612 480 003614 482 003617 484 003620 490 003621 491 003622 492 003624 493 003630 495 003632 496 003634 498 003655 499 003656 500 003657 502 003663 504 003664 505 003666 506 003702 508 003712 512 003713 519 003714 521 003735 523 003746 525 003750 527 003766 529 004013 532 004030 533 004032 535 004043 539 004044 569 004045 576 004105 585 004122 586 004131 589 004151 590 004154 594 004156 596 004160 600 004161 607 004162 609 004200 611 004204 613 004212 616 004222 618 004231 620 004237 622 004241 623 004244 624 004250 626 004254 627 004255 628 004256 629 004262 630 004273 634 004305 638 004306 646 004307 648 004324 649 004326 650 004327 652 004343 659 004363 661 004367 663 004371 664 004373 666 004400 667 004401 672 004440 680 004441 690 004442 691 004444 692 004455 693 004464 694 004466 695 004473 703 004475 704 004505 705 004545 707 004554 709 004576 711 004614 713 004637 715 004654 717 004677 719 004713 720 004720 722 004723 724 004745 727 004761 728 004763 729 004770 730 004773 732 005001 734 005011 736 005012 738 005013 740 005035 742 005053 743 005061 745 005067 747 005077 750 005100 751 005103 760 005105 761 005110 762 005112 764 005120 766 005143 767 005164 768 005173 769 005204 770 005206 771 005212 773 005214 775 005240 777 005247 785 005251 787 005274 789 005302 790 005304 791 005307 793 005310 794 005312 795 005332 796 005334 797 005346 798 005363 799 005365 800 005375 802 005406 803 005410 805 005413 806 005423 807 005424 808 005431 811 005443 813 005451 814 005454 824 005456 826 005501 828 005507 829 005511 830 005514 832 005515 833 005517 834 005537 836 005545 837 005546 838 005550 839 005563 840 005565 841 005566 843 005601 844 005607 847 005616 849 005620 851 005627 853 005632 854 005635 855 005637 856 005641 858 005653 860 005657 861 005661 863 005664 866 005666 870 005667 879 005670 881 005713 883 005721 884 005723 885 005743 886 005746 888 005747 889 005751 897 005762 899 005764 900 005766 901 005770 902 006001 903 006002 904 006004 905 006015 915 006017 916 006021 917 006026 919 006030 920 006037 922 006047 923 006054 925 006055 927 006057 928 006067 930 006207 931 006211 933 006213 937 006214 955 006215 957 006240 958 006252 960 006260 961 006262 963 006305 964 006317 966 006322 967 006324 968 006326 969 006330 971 006331 972 006333 974 006335 975 006337 976 006350 984 006352 986 006375 988 006406 990 006410 992 006413 993 006415 994 006425 996 006432 998 006435 1000 006477 1002 006522 1005 006524 1006 006526 1007 006532 1008 006533 1009 006543 1011 006555 1019 006557 1020 006561 1022 006564 1023 006566 1024 006570 1027 006603 1032 006636 1033 006642 1037 006646 1048 006647 1049 006654 1050 006657 1051 006662 1056 006720 1057 006724 1058 006726 1059 006737 1060 006742 1061 006744 1062 006751 1063 006756 1064 006757 1065 006776 1073 007000 1074 007002 1075 007011 1076 007015 1077 007020 1078 007022 1079 007024 1080 007026 1091 007032 1092 007034 1094 007035 1095 007045 1097 007111 1099 007121 1101 007122 1102 007125 1103 007127 1105 007131 1107 007153 1108 007155 1111 007163 1116 007177 1118 007201 1119 007211 1120 007213 1121 007214 1123 007217 1124 007225 1125 007233 1126 007234 1129 007236 1138 007240 1139 007242 1140 007244 1141 007263 1142 007265 1143 007270 1144 007277 1145 007301 1146 007303 1147 007313 1148 007333 1149 007340 1159 007342 1161 007345 1162 007347 1163 007360 1164 007370 1165 007372 1166 007401 1167 007405 1168 007407 1169 007411 1170 007413 1171 007415 1174 007420 1178 007421 1185 007422 1187 007445 1189 007457 1190 007464 1191 007467 1192 007471 1193 007473 1194 007475 1195 007477 1196 007501 1198 007524 1200 007532 1201 007535 1203 007537 1205 007561 1207 007572 1208 007575 1215 007577 1217 007602 1218 007634 1219 007660 1220 007711 1224 010024 1229 010124 1230 010144 1235 010243 1238 010247 1242 010250 1249 010251 1250 010256 1252 010261 1253 010262 1256 010267 1257 010272 1258 010274 1261 010275 1263 010300 1264 010303 1267 010304 1270 010311 1271 010314 1272 010316 1276 010317 1279 010324 1280 010327 1283 010331 1286 010336 1287 010341 1290 010343 1293 010350 1294 010353 1297 010355 1298 010357 1299 010360 1300 010361 1301 010362 1302 010363 1303 010365 1305 010367 1307 010371 1311 010372 1318 010373 1320 010416 1322 010445 1324 010450 1325 010453 1326 010456 1327 010461 1328 010462 1330 010465 1334 010466 1341 010467 1343 010512 1345 010541 1347 010544 1348 010547 1349 010552 1350 010555 1351 010556 1353 010561 1357 010562 1387 010573 1389 010602 1390 010606 1391 010610 1399 010611 1400 010615 1401 010616 1402 010620 1403 010622 1404 010631 1405 010632 1407 010641 1408 010645 1409 010647 1411 010650 1417 010652 1418 010654 1419 010675 1421 010700 1422 010701 1424 010704 1426 010710 1432 010711 1433 010723 1434 010724 1435 010734 1444 010755 1445 010757 1446 010764 1448 011003 1449 011007 1463 011011 1464 011013 1465 011024 1466 011033 1467 011035 1469 011041 1470 011051 1471 011053 1472 011074 1474 011105 1475 011117 1476 011130 1477 011143 1478 011154 1480 011155 1482 011161 1484 011164 1486 011167 1491 011201 1494 011236 1497 011265 1498 011266 1499 011272 1500 011274 1501 011314 1503 011325 1504 011340 1506 011353 1509 011370 1510 011372 1512 011421 1513 011423 1523 011425 1524 011427 1525 011440 1526 011443 1527 011453 1529 011473 1530 011505 1532 011523 1535 011531 1537 011533 1539 011534 1549 011536 1550 011545 1552 011563 1554 011565 1558 011630 1562 011666 1566 011671 1580 011672 1581 011673 1582 011677 1583 011701 1585 011703 1586 011706 1588 011730 1590 011742 1592 011753 1593 011755 1596 012000 1597 012002 1599 012006 1601 012007 1603 012022 1609 012023 1615 012024 1617 012047 1619 012076 1621 012105 1623 012110 1627 012111 1649 012122 1651 012131 1652 012135 1653 012137 1661 012140 1662 012144 1664 012165 1665 012175 1668 012207 1669 012211 1673 012213 1679 012215 1681 012217 1682 012224 1683 012226 1691 012227 1692 012241 1693 012263 1701 012265 1702 012275 1704 012305 1706 012316 1708 012322 1713 012333 1716 012370 1719 012417 1720 012420 1721 012424 1723 012425 1731 012427 1732 012431 1733 012442 1734 012445 1735 012455 1736 012476 1739 012520 1743 012521 1758 012532 1761 012550 1764 012564 1767 012600 1771 012614 1773 012622 1774 012645 1778 012711 1780 012727 1789 013002 1793 013003 1802 013005 1803 013012 1805 013016 1809 013037 1815 013066 1818 013101 1821 013114 1825 013144 ----------------------------------------------------------- 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