COMPILATION LISTING OF SEGMENT linus_fr_build_page Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 07/29/86 0954.6 mst Tue 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 the linus page building subroutine called by linus_display. 11* Description and usage follows. 12* 13* Description: 14* 15* This module is called to build a single page and return to its caller. 16* In the case of unpaginated reports it builds a buffer (a portion of the 17* single page an unpaginated report is made up of). In the case of multiple 18* pass reports this module formats the report the number of passes minus 19* one, then formats the first page or buffer of the last pass and returns 20* to its caller. 21* 22* Usage: 23* 24* See the parameter list for usage. 25* 26* Known Bugs: 27* 28* Other Problems: 29* 30* History: 31* 32* Written - Al Dupuis - August 1983 33* 34* Modified: Al Dupuis - October 26, 1983. Added lines in internal procedure 35* check_for_outlining to make sure that the column being outlined isn't 36* excluded from the page. 37* 38**/ 39 40 /* 41* 42* Formatted Page Mainline Processing Overview 43* 44* ________________________________ 45* | PAGE HEADER | 1. Format the page header. 46* |______________________________| 47* | TITLE BLOCK | 2. Format the title block. 48* |______________________________| 49* | DETAIL BLOCK | 3. Format N detail blocks (see below). 50* |______________________________| 51* | PAGE FOOTER | 4. Format the page footer. 52* |______________________________| 53* 54* 55* 56* Detail Block Detail Block Processing Overview 57* 58* -------------------------------- 59* | GROUP HEADER | 1. Format the group header. 60* |______________________________| 61* | ROW HEADER | 2. Format the row header. 62* |______________________________| 63* | ROW VALUE | 3. Format the row value. 64* |______________________________| 65* | SUBTOTAL BLOCK | 4. Format the subtotal block. 66* |______________________________| 67* | SUBCOUNT BLOCK | 5. Format the subcount block. 68* |______________________________| 69* | TOTAL BLOCK | 6. Format the total block. 70* |______________________________| 71* | COUNT BLOCK | 7. Format the count block. 72* |______________________________| 73* | ROW FOOTER | 8. Format the row footer. 74* |______________________________| 75* | GROUP FOOTER | 9. Format the group footer. 76* |______________________________| 77* 78* 79* The above mainline is done once per page for every page of the report. 80* A return is done to the caller after every page is built. If the 81* multi-pass feature is being used, no output is produced until the last 82* pass. This means that the entire report is done "n" times without 83* returning to the caller, where "n" is one less than the requested 84* number of passes. On the final pass it returns to the caller after each 85* page is built. 86* 87**/ 88 89 linus_fr_build_page: proc ( 90 91 lcb_ptr_parm, /* input: ptr to the linus control block */ 92 page_info_ptr_parm, /* output: description of the page */ 93 code_parm /* output: success or failure */ 94 ); 95 96 dcl code_parm fixed bin (35) parm; 97 dcl lcb_ptr_parm ptr parm; 98 dcl page_info_ptr_parm ptr parm; 99 100 lcb_ptr = lcb_ptr_parm; 101 call housekeeping; 102 call setup_for_a_page; 103 call make_rows_available; 104 on sub_error_ call sub_error_handler; 105 106 if ^report_control_info.flags.multi_pass_mode 107 then do; 108 call build_page; 109 return; 110 end; 111 112 status.flags.last_pass = OFF; 113 do status.current_pass_number = 1 to report_control_info.number_of_passes - 1; 114 do while (^report_control_info.flags.report_has_just_been_completed); 115 call build_page; 116 if ^report_control_info.flags.report_has_just_been_completed 117 then call setup_for_a_page; 118 end; 119 call adjust_multi_pass_execution_control_info; 120 call setup_for_a_page; 121 end; 122 123 report_control_info.flags.multi_pass_mode = OFF; 124 status.flags.last_pass = ON; 125 call build_page; 126 127 return; 128 129 adjust_multi_pass_execution_control_info: proc; 130 131 /* Just completed one pass of the report, set up for the next pass. */ 132 133 status.current_row_ptr = null (); 134 status.previous_row_ptr = null (); 135 status.next_row_ptr = make_ptr (1); 136 137 status.last_page_number = status.current_page_number; 138 status.last_row_number = report_control_info.no_of_rows_retrieved; 139 status.highest_row_formatted = 0; 140 141 if format_report_info.flags.subtotal_is_defined 142 then do; 143 subtotal_info.columns.subtotal (*) = 0; 144 subtotal_generation_info.current_generation_block = -1; 145 end; 146 if format_report_info.flags.total_is_defined 147 then total_info.columns.total (*) = 0; 148 149 if format_report_info.flags.subcount_is_defined 150 then do; 151 subcount_info.columns.subtotal (*) = 0; 152 subcount_generation_info.current_generation_block = -1; 153 end; 154 if format_report_info.flags.count_is_defined 155 then count_info.columns.total (*) = 0; 156 157 report_control_info.flags.report_is_formatted = OFF; 158 report_control_info.flags.report_has_just_been_completed = OFF; 159 report_control_info.no_of_formatted_pages = 0; 160 161 format_report_info.number_of_formatted_rows = 0; 162 163 return; 164 165 end adjust_multi_pass_execution_control_info; 166 167 backout_detail_block: proc ( 168 169 bdb_object_doing_the_back_out_parm /* input: the caller */ 170 ); 171 172 dcl bdb_object_doing_the_back_out_parm char (*) varying parm; 173 174 /* Remove one detail block from the page, make sure it isn't the first. */ 175 176 if status.total_number_of_rows_used ^> 0 177 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_format, 178 "^/There isn't enough room to place the ^a on page number ^d." 179 || "^/The current row number is ^d.", 180 bdb_object_doing_the_back_out_parm, 181 status.current_page_number, status.current_row_number); 182 183 status.flags.page_overflow = ON; 184 status.flags.last_row_of_report = OFF; 185 status.current_line_on_page = formatted_page_info.detail_blocks 186 (formatted_page_info.number_of_detail_blocks).beginning_line_number; 187 status.remaining_lines_on_page = template_map_number_of_bits - status.current_line_on_page + 1; 188 status.flags.still_formatting_detail_blocks = OFF; 189 if page_info.page_overstrike_info_ptr ^= null () 190 then substr (page_overstrike_info_redefined.bit_map, ((status.current_line_on_page - 1) * page_info.width) + 1) = OFF; 191 192 status.next_row_ptr = status.current_row_ptr; 193 status.current_row_ptr = status.previous_row_ptr; 194 if status.current_row_number < 3 195 then status.previous_row_ptr = null (); 196 else status.previous_row_ptr = make_ptr (status.current_row_number - 2); 197 198 if format_report_info.flags.subtotal_is_defined 199 then call backout_subtotal_block; 200 status.flags.totals_ejection_in_progress = OFF; 201 status.flags.subtotals_ejection_in_progress = OFF; 202 203 if format_report_info.flags.subcount_is_defined 204 then call backout_subcount_block; 205 status.flags.counts_ejection_in_progress = OFF; 206 status.flags.subcounts_ejection_in_progress = OFF; 207 208 substr (template_map_defined_as_a_string, status.current_line_on_page) = OFF; 209 formatted_page_info.number_of_detail_blocks = formatted_page_info.number_of_detail_blocks - 1; 210 211 return; 212 213 end backout_detail_block; 214 215 backout_subcount_block: proc; 216 217 dcl bsb_loop fixed bin; 218 219 /* Back out the subtotal block if we've generated it or are in the process of generating it. */ 220 221 if formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).subcount_length ^= 0 222 | status.flags.subcounts_ejection_in_progress 223 then do; 224 subcount_generation_info.current_generation_block 225 = mod (subcount_generation_info.current_generation_block, 226 subcount_generation_info.maximum_number_of_generation_blocks); 227 do bsb_loop = 1 to subcount_generation_info.number_of_subtotals; 228 subcount_info.columns (bsb_loop).subtotal 229 = subcount_generation_info.generations 230 (subcount_generation_info.current_generation_block).subtotals (bsb_loop); 231 end; 232 end; 233 234 do bsb_loop = 1 to subcount_info.number_of_columns_to_subtotal; 235 subcount_info.columns (bsb_loop).subtotal 236 = subcount_info.columns (bsb_loop).subtotal - 1; 237 end; 238 239 return; 240 241 end backout_subcount_block; 242 243 backout_subtotal_block: proc; 244 245 dcl bsb_loop fixed bin; 246 247 /* Back out the subcount block if we've generated it or are in the process of generating it. */ 248 249 if formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).subtotal_length ^= 0 250 | status.flags.subtotals_ejection_in_progress 251 then do; 252 subtotal_generation_info.current_generation_block 253 = mod (subtotal_generation_info.current_generation_block, 254 subtotal_generation_info.maximum_number_of_generation_blocks); 255 do bsb_loop = 1 to subtotal_generation_info.number_of_subtotals; 256 subtotal_info.columns (bsb_loop).subtotal 257 = subtotal_generation_info.generations 258 (subtotal_generation_info.current_generation_block).subtotals (bsb_loop); 259 end; 260 end; 261 262 do bsb_loop = 1 to subtotal_info.number_of_columns_to_subtotal; 263 subtotal_info.columns (bsb_loop).subtotal 264 = subtotal_info.columns (bsb_loop).subtotal 265 - float (substr (next_row_value, 266 table_info.columns.column_index (subtotal_info.columns (bsb_loop).input_column), 267 table_info.columns.column_length (subtotal_info.columns (bsb_loop).input_column))); 268 end; 269 270 return; 271 272 end backout_subtotal_block; 273 274 build_page: proc; 275 276 /* 277* Make the pointers to the rows. Do the page header, the title block, 278* as many detail blocks as will fit, and the page footer. Use 279* the alogorithm as described back in the picture at the beginning of this 280* module. Close the page. Optionally save a copy of it. 281**/ 282 283 call make_row_ptrs; 284 if format_report_info.flags.page_header_is_defined 285 then call format_page_header; 286 if format_report_info.flags.title_block_is_defined 287 then call format_title_block; 288 first_time_through_the_detail_block_loop = ON; 289 status.still_formatting_detail_blocks = ON; 290 291 do while (status.still_formatting_detail_blocks); 292 if ^first_time_through_the_detail_block_loop 293 then call make_row_ptrs; 294 call format_detail_block; 295 first_time_through_the_detail_block_loop = OFF; 296 call make_rows_available; 297 end; 298 299 if format_report_info.flags.page_footer_is_defined 300 then call format_page_footer; 301 call close_page; 302 if report_control_info.flags.permanent_report & ^report_control_info.flags.multi_pass_mode 303 then call save_copy_of_page; 304 305 page_info_ptr_parm = page_ip; 306 code_parm = code; 307 308 return; 309 310 end build_page; 311 312 check_for_group_break: proc ( 313 314 cfgb_group_info_ptr_parm, /* input: ptr to group_info structure */ 315 cfgb_look_ahead_flag_parm, /* input: on if current should be compared to next */ 316 cfgb_column_changed_flag_parm /* output: on if a column changed */ 317 ); 318 319 dcl cfgb_column_changed_flag_parm bit (1) aligned parm; 320 dcl cfgb_column_number fixed bin; 321 dcl 1 cfgb_group_info like group_info based (cfgb_group_info_ptr_parm); 322 dcl cfgb_group_info_ptr_parm ptr parm; 323 dcl cfgb_look_ahead_flag_parm bit (1) aligned parm; 324 dcl cfgb_loop fixed bin; 325 326 /* Check the value of the named columns against the previous or next row and set the parm accordingly. */ 327 328 cfgb_column_changed_flag_parm = ON; 329 if (status.flags.last_row_of_report & cfgb_look_ahead_flag_parm) 330 | (status.flags.first_row_of_report & ^cfgb_look_ahead_flag_parm) 331 then return; 332 333 do cfgb_loop = 1 to cfgb_group_info.number_of_columns_to_group; 334 cfgb_column_number = cfgb_group_info.column_number (cfgb_loop); 335 if cfgb_look_ahead_flag_parm 336 then if substr (current_row_value, 337 table_info.columns.column_index (cfgb_column_number), 338 table_info.columns.column_length (cfgb_column_number)) 339 ^= substr (next_row_value, 340 table_info.columns.column_index (cfgb_column_number), 341 table_info.columns.column_length (cfgb_column_number)) 342 then return; 343 else; 344 else if substr (current_row_value, 345 table_info.columns.column_index (cfgb_column_number), 346 table_info.columns.column_length (cfgb_column_number)) 347 ^= substr (previous_row_value, 348 table_info.columns.column_index (cfgb_column_number), 349 table_info.columns.column_length (cfgb_column_number)) 350 then return; 351 else; 352 end; 353 354 cfgb_column_changed_flag_parm = OFF; 355 356 return; 357 358 end check_for_group_break; 359 360 check_for_outlining: proc; 361 362 dcl cfo_inner_loop fixed bin; 363 dcl cfo_loop fixed bin; 364 dcl cfo_most_major_column_changed bit (1) aligned; 365 dcl cfo_still_within_the_group bit (1) aligned; 366 367 /* 368* Never do outlining on the first row of the report or the first row on a 369* page. Do the single columns first (columns who are not a member of the 370* "group" of rows). Grab the column number and use it as an index into the 371* input_columns_info array, which gives us the number of the output column. 372**/ 373 374 if status.flags.first_row_of_report | status.flags.first_row_on_page 375 then do; 376 output_columns_info.columns (*).flags.outline = OFF; 377 return; 378 end; 379 380 if outline_info.number_of_single_columns ^= 0 381 then do cfo_loop = 1 to outline_info.number_of_single_columns; 382 if input_columns_info.columns.output_column (outline_info.single_columns (cfo_loop)) ^= 0 383 then do; 384 column_ip = addr (output_columns_info.columns (input_columns_info.columns.output_column ( 385 outline_info.single_columns (cfo_loop)))); 386 if substr (current_row_value, 387 table_info.columns.column_index (outline_info.single_columns (cfo_loop)), 388 table_info.columns.column_length (outline_info.single_columns (cfo_loop))) 389 = substr (previous_row_value, 390 table_info.columns.column_index (outline_info.single_columns (cfo_loop)), 391 table_info.columns.column_length (outline_info.single_columns (cfo_loop))) 392 then column_info.flags.outline = ON; 393 else column_info.flags.outline = OFF; 394 end; 395 end; 396 397 /* 398* Do the grouping columns next. A change in any member of the group who is 399* more major than our target column causes a change in all columns down to 400* our target column. Repeat the following sequence for each of our target 401* columns. Use the group column number as an index into the 402* input_columns_info array, which gives us the number of the output column. 403* If it has changed, or a more major member has changed, then it isn't 404* outlined. 405**/ 406 407 if outline_info.number_of_grouping_columns ^= 0 408 then do cfo_loop = 1 to outline_info.number_of_grouping_columns; 409 410 cfo_most_major_column_changed = OFF; 411 cfo_still_within_the_group = ON; 412 413 do cfo_inner_loop = 1 to group_info.number_of_columns_to_group 414 while (cfo_still_within_the_group); 415 416 if input_columns_info.columns.output_column (group_info.column_number (cfo_inner_loop)) ^= 0 417 then do; 418 column_ip = addr (output_columns_info.columns (input_columns_info.columns.output_column ( 419 group_info.column_number (cfo_inner_loop)))); 420 if cfo_most_major_column_changed 421 then column_info.flags.outline = OFF; 422 else do; 423 if substr (current_row_value, 424 table_info.columns.column_index (group_info.column_number (cfo_inner_loop)), 425 table_info.columns.column_length (group_info.column_number (cfo_inner_loop))) 426 = substr (previous_row_value, 427 table_info.columns.column_index (group_info.column_number (cfo_inner_loop)), 428 table_info.columns.column_length (group_info.column_number (cfo_inner_loop))) 429 then column_info.flags.outline = ON; 430 else do; 431 cfo_most_major_column_changed = ON; 432 column_info.flags.outline = OFF; 433 end; 434 end; 435 end; 436 437 if group_info.column_number (cfo_inner_loop) = outline_info.grouping_columns (cfo_loop) 438 then cfo_still_within_the_group = OFF; 439 440 end; 441 442 end; 443 444 return; 445 446 end check_for_outlining; 447 448 check_for_page_break: proc; 449 450 dcl cfpb_loop fixed bin; 451 452 /* 453* If we're on the last row then don't check for a page break. If the value 454* of any column being watched is about to change with the next row then 455* generate a page break. 456**/ 457 458 if ^status.flags.still_formatting_detail_blocks 459 then return; 460 461 status.still_formatting_detail_blocks = OFF; 462 463 do cfpb_loop = 1 to input_columns_info.number_of_columns; 464 if page_break_info.columns (cfpb_loop) 465 then do; 466 if substr (current_row_value, 467 table_info.columns.column_index (cfpb_loop), 468 table_info.columns.column_length (cfpb_loop)) 469 ^= substr (next_row_value, 470 table_info.columns.column_index (cfpb_loop), 471 table_info.columns.column_length (cfpb_loop)) 472 then return; 473 end; 474 end; 475 476 status.still_formatting_detail_blocks = ON; 477 478 return; 479 480 end check_for_page_break; 481 482 check_for_subtotal_break: proc ( 483 484 cfsb_subtotal_info_ptr_parm, /* input: ptr to subtotal_info structure */ 485 cfsb_subtotal_columns_info_ptr_parm, /* input: ptr to subtotal_columns_info structure */ 486 cfsb_level_number_parm, /* input: which level of subtotals we're on */ 487 cfsb_column_changed_flag_parm /* output: on means it's time for a subtotal break */ 488 ); 489 490 dcl cfsb_column_changed_flag_parm bit (1) aligned parm; 491 dcl cfsb_column_number fixed bin; 492 dcl cfsb_inner_loop fixed bin; 493 dcl cfsb_level_number fixed bin; 494 dcl cfsb_level_number_parm fixed bin parm; 495 dcl cfsb_loop fixed bin; 496 dcl cfsb_most_major_column_changed bit (1) aligned; 497 dcl cfsb_still_within_the_group bit (1) aligned; 498 dcl 1 cfsb_subtotal_columns_info like subtotal_columns_info based (cfsb_subtotal_columns_info_ptr_parm); 499 dcl cfsb_subtotal_columns_info_ptr_parm ptr parm; 500 dcl 1 cfsb_subtotal_info like subtotal_info based (cfsb_subtotal_info_ptr_parm); 501 dcl cfsb_subtotal_info_ptr_parm ptr parm; 502 503 /* 504* This subroutine walks through one level of subtotals looking at the watch 505* column to see if it has changed. A change means it is time to generate 506* the subtotal. If the watch column is a member of the "group" list of 507* columns, then it and any more major in the group are also watched. A 508* change in any member of the group causes all members lower to change also 509* (down to the watch column). 510* 511* Start off by outlining every column. Walk through all of the subtotal 512* columns processing only those that are at the current level. Grab the 513* number of the watch column. Use the subtotal_info array to index into 514* the input_columns_info array, which gives us the number of the 515* subtotal_columns_info output column. If it is the last row of the report, 516* or the watch column has changed, or the watch column is a group member 517* and a more major column has changed, then generate a subtotal break. The 518* column that changed can be excluded from the page; if it isn't then set 519* the outline bit off for it (and possibly more minor columns). Set the 520* outline bit off for the subtotal output column if we got a hit, and if 521* the parent column has an editing request associated with it then set 522* the pointer and length to the result of the editing request. 523**/ 524 525 cfsb_column_changed_flag_parm = OFF; 526 cfsb_level_number = cfsb_level_number_parm; 527 cfsb_subtotal_columns_info.columns (*).flags.outline = ON; 528 529 do cfsb_loop = 1 to cfsb_subtotal_info.number_of_columns_to_subtotal; 530 if cfsb_subtotal_info.columns (cfsb_loop).level = cfsb_level_number 531 then do; 532 cfsb_column_number = cfsb_subtotal_info.columns (cfsb_loop).watch_column; 533 column_ip = addr (cfsb_subtotal_columns_info.columns (input_columns_info.columns ( 534 cfsb_subtotal_info.columns (cfsb_loop).input_column).output_column)); 535 if ^cfsb_subtotal_info.columns (cfsb_loop).flags.group_column 536 then do; 537 if status.flags.last_row_of_report 538 then call subtotal_break (input_columns_info.columns (cfsb_column_number).output_column); 539 else if substr (current_row_value, 540 table_info.columns.column_index (cfsb_column_number), 541 table_info.columns.column_length (cfsb_column_number)) 542 ^= substr (next_row_value, 543 table_info.columns.column_index (cfsb_column_number), 544 table_info.columns.column_length (cfsb_column_number)) 545 then call subtotal_break (input_columns_info.columns (cfsb_column_number).output_column); 546 else; 547 end; 548 else do; 549 if status.flags.last_row_of_report 550 then cfsb_most_major_column_changed = ON; 551 else cfsb_most_major_column_changed = OFF; 552 cfsb_still_within_the_group = ON; 553 do cfsb_inner_loop = 1 to group_info.number_of_columns_to_group 554 while (cfsb_still_within_the_group); 555 if cfsb_most_major_column_changed 556 then call subtotal_break (input_columns_info.columns ( 557 group_info.column_number (cfsb_inner_loop)).output_column); 558 else if substr (current_row_value, 559 table_info.columns.column_index (group_info.column_number (cfsb_inner_loop)), 560 table_info.columns.column_length (group_info.column_number (cfsb_inner_loop))) 561 ^= substr (next_row_value, 562 table_info.columns.column_index (group_info.column_number (cfsb_inner_loop)), 563 table_info.columns.column_length (group_info.column_number (cfsb_inner_loop))) 564 then call subtotal_break (input_columns_info.columns 565 (group_info.column_number (cfsb_inner_loop)).output_column); 566 else; 567 if group_info.column_number (cfsb_inner_loop) = cfsb_column_number 568 then cfsb_still_within_the_group = OFF; 569 end; 570 end; 571 end; 572 end; 573 574 return; 575 576 subtotal_break: proc ( 577 578 sb_output_column_number_parm /* input: number of column that changed */ 579 ); 580 581 dcl sb_output_column_number_parm fixed bin parm; 582 583 /* 584* This subroutine is called when a watch column has changed and it is time 585* to generate a subtotal break. Set the parm to indicate a column has 586* changed. Set the subtotal/subcount output column's editing flag off. If 587* the column that changed isn't being excluded from the page, then set it's 588* editing bit off and if it has an editing request associated with it, set 589* the pointer and length so that the edited result is displayed in that 590* column. 591**/ 592 593 cfsb_column_changed_flag_parm = ON; 594 column_info.flags.outline = OFF; 595 if sb_output_column_number_parm = 0 596 then return; 597 598 cfsb_subtotal_columns_info.columns (sb_output_column_number_parm).flags.outline = OFF; 599 if cfsb_subtotal_columns_info.columns (sb_output_column_number_parm).flags.editing 600 then do; 601 cfsb_subtotal_columns_info.columns (sb_output_column_number_parm).editing_string_result_ptr 602 = output_columns_info.columns (sb_output_column_number_parm).editing_string_result_ptr; 603 cfsb_subtotal_columns_info.columns (sb_output_column_number_parm).editing_string_result_length 604 = output_columns_info.columns (sb_output_column_number_parm).editing_string_result_length; 605 end; 606 607 return; 608 609 end subtotal_break; 610 611 end check_for_subtotal_break; 612 613 close_page: proc; 614 615 /* 616* This subroutine closes a page. Increment the number of rows and pages 617* we've already formatted. Check for end of report and set flags 618* accordingly. If the whole page wasn't used then set page_info to reflect 619* the space used. Check for a zero length page, and set the last character 620* to a form feed if it's a paginated report or the last buffer of an 621* unpaginated report. 622**/ 623 624 format_report_info.number_of_formatted_rows 625 = format_report_info.number_of_formatted_rows + status.total_number_of_rows_used; 626 627 report_control_info.no_of_formatted_pages = report_control_info.no_of_formatted_pages + 1; 628 629 if format_report_info.number_of_formatted_rows >= report_control_info.no_of_rows_retrieved 630 then do; 631 report_control_info.flags.report_is_formatted = ON; 632 report_control_info.flags.report_has_just_been_completed = ON; 633 end; 634 635 if status.remaining_lines_on_page ^= 0 636 then do; 637 page_info.length = index (template_map_defined_as_a_string, OFF) - 1; 638 page_info.total_characters = page_info.length * page_info.width; 639 end; 640 641 if page_info.total_characters = 0 642 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_format, 643 "The report description resulted in a zero length page."); 644 645 if paginated_report | status.flags.last_row_of_report 646 then substr (page_defined_as_lines (page_info.length), page_info.width, 1) = FORM_FEED; 647 648 return; 649 650 end close_page; 651 652 evaluate_active_string: proc ( 653 654 eas_active_string_parm, /* input: the active string */ 655 eas_result_string_parm /* output: resultant string */ 656 ); 657 658 dcl eas_active_string_parm char (*) varying parm; 659 dcl eas_active_string_parm_length fixed bin (21); 660 dcl eas_active_string_type fixed bin; 661 dcl eas_code fixed bin (35); 662 dcl eas_current_position fixed bin (21); 663 dcl eas_current_inner_position fixed bin (21); 664 dcl eas_left_bracket_count fixed bin; 665 dcl eas_left_bracket_position fixed bin (21); 666 dcl eas_looking_for_matching_right_bracket bit (1) aligned; 667 dcl eas_next_bracket fixed bin (21); 668 dcl eas_result_string_parm char (*) varying parm; 669 dcl eas_right_bracket_count fixed bin; 670 dcl eas_right_bracket_position fixed bin (21); 671 dcl eas_still_evaluating bit (1) aligned; 672 dcl eas_string char (eas_string_length) based (eas_string_ptr); 673 dcl eas_string_length fixed bin (21); 674 dcl eas_string_ptr ptr; 675 dcl eas_string_start fixed bin (21); 676 677 /* 678* If there are no active requests return to caller. Find the left bracket. 679* Check for "|[" and "||[" constructs and set flag accordingly. Move any 680* user text before the left bracket into the result string. Find the 681* matching right bracket. Have ssu_$evaluate_active_string evaluate 682* everything between the left and matching right bracket. Move the result 683* into the result string. Repeat these operations until no more active 684* requests are left. Move any remaining user text into the result string. 685**/ 686 687 eas_next_bracket = search (eas_active_string_parm, LEFT_OR_RIGHT_BRACKET); 688 if eas_next_bracket = 0 689 then do; 690 eas_result_string_parm = eas_active_string_parm; 691 return; 692 end; 693 694 eas_result_string_parm = ""; 695 eas_current_position = 1; 696 eas_active_string_parm_length = length (eas_active_string_parm); 697 eas_still_evaluating = ON; 698 699 do while (eas_still_evaluating); 700 701 eas_left_bracket_count = 0; 702 eas_right_bracket_count = 0; 703 eas_left_bracket_position = index (substr (eas_active_string_parm, eas_current_position), LEFT_BRACKET); 704 if eas_left_bracket_position = 0 705 then call ssu_$abort_line (sci_ptr, error_table_$unbalanced_brackets, 706 "^a", eas_active_string_parm); 707 eas_left_bracket_count = eas_left_bracket_count + 1; 708 709 if eas_left_bracket_position >= 3 710 then if substr (eas_active_string_parm, 711 eas_current_position + eas_left_bracket_position - 3, 2) = BAR_BAR 712 then eas_active_string_type = ATOMIC_ACTIVE_STRING; 713 else if substr (eas_active_string_parm, 714 eas_current_position + eas_left_bracket_position - 2, 1) = BAR 715 then eas_active_string_type = TOKENS_ONLY_ACTIVE_STRING; 716 else eas_active_string_type = NORMAL_ACTIVE_STRING; 717 else if eas_left_bracket_position >= 2 718 then if substr (eas_active_string_parm, 719 eas_current_position + eas_left_bracket_position - 2, 1) = BAR 720 then eas_active_string_type = TOKENS_ONLY_ACTIVE_STRING; 721 else eas_active_string_type = NORMAL_ACTIVE_STRING; 722 else eas_active_string_type = NORMAL_ACTIVE_STRING; 723 724 if eas_active_string_type = NORMAL_ACTIVE_STRING 725 then eas_result_string_parm = eas_result_string_parm || substr (eas_active_string_parm, 726 eas_current_position, eas_left_bracket_position - 1); 727 else if eas_active_string_type = TOKENS_ONLY_ACTIVE_STRING 728 then eas_result_string_parm = eas_result_string_parm || substr (eas_active_string_parm, 729 eas_current_position, eas_left_bracket_position - 2); 730 else eas_result_string_parm = eas_result_string_parm || substr (eas_active_string_parm, 731 eas_current_position, eas_left_bracket_position - 3); 732 733 eas_current_inner_position = eas_current_position + eas_left_bracket_position; 734 eas_string_start = eas_current_inner_position; 735 eas_looking_for_matching_right_bracket = ON; 736 737 do while (eas_looking_for_matching_right_bracket); 738 if eas_current_inner_position > eas_active_string_parm_length 739 then call ssu_$abort_line (sci_ptr, error_table_$unbalanced_brackets, 740 "^a", eas_active_string_parm); 741 eas_next_bracket = search (substr (eas_active_string_parm, 742 eas_current_inner_position), LEFT_OR_RIGHT_BRACKET); 743 if eas_next_bracket = 0 744 then call ssu_$abort_line (sci_ptr, error_table_$unbalanced_brackets, 745 "^a", eas_active_string_parm); 746 if substr (eas_active_string_parm, eas_current_inner_position + eas_next_bracket - 1, 1) = LEFT_BRACKET 747 then eas_left_bracket_count = eas_left_bracket_count + 1; 748 else eas_right_bracket_count = eas_right_bracket_count + 1; 749 if eas_left_bracket_count = eas_right_bracket_count 750 then eas_looking_for_matching_right_bracket = OFF; 751 else eas_current_inner_position = eas_current_inner_position + eas_next_bracket; 752 end; 753 754 eas_right_bracket_position = eas_current_inner_position + eas_next_bracket - 1; 755 eas_string_length = eas_right_bracket_position - eas_string_start; 756 eas_string_ptr = addr (substr (eas_active_string_parm, eas_string_start, 1)); 757 time1 = vclock; 758 call ssu_$evaluate_active_string (sci_ptr, null (), eas_string, 759 eas_active_string_type, eas_spare_string, eas_code); 760 time2 = vclock; 761 report_control_info.ssu_evaluate_active_string_time 762 = report_control_info.ssu_evaluate_active_string_time + time2 - time1; 763 if eas_code ^= 0 764 then call ssu_$abort_line (sci_ptr, eas_code); 765 766 eas_result_string_parm = eas_result_string_parm || eas_spare_string; 767 eas_current_position = eas_right_bracket_position + 1; 768 769 if eas_current_position > eas_active_string_parm_length 770 then eas_still_evaluating = OFF; 771 else if search (substr (eas_active_string_parm, eas_current_position), LEFT_OR_RIGHT_BRACKET) = 0 772 then do; 773 eas_result_string_parm = eas_result_string_parm 774 || substr (eas_active_string_parm, eas_current_position); 775 eas_still_evaluating = OFF; 776 end; 777 else; 778 779 end; 780 781 return; 782 783 end evaluate_active_string; 784 785 execute_editing_strings: proc; 786 787 dcl ees_loop fixed bin; 788 789 /* 790* Walk through the list of input columns in the column order specified 791* by the user. If the column has an editing request associated with it, 792* pick up the pointer and length to the original editing request from the 793* input_columns_info array. Have it evaluated. If the column isn't being 794* excluded from the page, then set the editing string ptr and length for 795* it's output column to the result string; if it is then set the same 796* information for the input column. Stash the result string in the temp 797* segment and advance the next available byte index. 798**/ 799 800 editing_strings_next_byte = format_report_info.editing_strings_next_available_byte; 801 802 do ees_loop = 1 to input_columns_info.number_of_columns; 803 column_ip = addr (input_columns_info.columns (input_columns_order (ees_loop))); 804 if column_info.editing 805 then do; 806 editing_string_rl = column_info.editing_string_length; 807 editing_string_rp = column_info.editing_string_ptr; 808 input_string = editing_string_result; 809 call evaluate_active_string (input_string, output_string); 810 if column_info.output_column ^= 0 811 then column_ip = addr (output_columns_info.columns (column_info.output_column)); 812 column_info.editing_string_result_length = length (output_string); 813 column_info.editing_string_result_ptr 814 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 815 substr (editing_strings_temp_seg, editing_strings_next_byte, 816 column_info.editing_string_result_length) = output_string; 817 editing_strings_next_byte 818 = editing_strings_next_byte + column_info.editing_string_result_length; 819 end; 820 end; 821 822 return; 823 824 end execute_editing_strings; 825 826 fit_column: proc ( 827 828 fc_column_value_parm, /* input: actual column value */ 829 fc_output_width_parm, /* input: width to place it into */ 830 fc_output_position_parm, /* input: starting position in template */ 831 fc_alignment_mode_parm, /* input: left, right, center, or both */ 832 fc_decimal_position_parm, /* input: decimal position within width */ 833 fc_template_parm, /* input: template to lay down */ 834 fc_fill_parm, /* input: fill or truncate */ 835 fc_line_number_parm, /* input: beginning line number on page */ 836 fc_code_parm /* output: success or failure */ 837 ); 838 839 dcl fc_additional_alignment bit (1) aligned; 840 dcl fc_alignment_mode_parm fixed bin parm; 841 dcl fc_code fixed bin (35); 842 dcl fc_code_parm fixed bin (35) parm; 843 dcl fc_column_value_parm char (*) varying parm; 844 dcl fc_current_line_on_page fixed bin; 845 dcl fc_current_position fixed bin; 846 dcl fc_decimal_position_parm fixed bin; 847 dcl fc_fill_parm bit (1) unaligned parm; 848 dcl fc_line_number_parm fixed bin parm; 849 dcl fc_new_line_position fixed bin; 850 dcl fc_output_column char (fc_output_width_parm) based (fc_output_column_ptr); 851 dcl fc_output_column_ptr ptr; 852 dcl fc_output_width_parm fixed bin parm; 853 dcl fc_output_position_parm fixed bin parm; 854 dcl fc_returned_string_length fixed bin (21); 855 dcl fc_spare_string_length fixed bin; 856 dcl fc_still_filling bit (1) aligned; 857 dcl fc_string_end fixed bin; 858 dcl fc_template_parm char (*) parm; 859 860 /* 861* Make sure we're not starting past the end of the page. Set our current 862* line on the page to where the parm says we're supposed to start. If a 863* template hasn't been laid down yet on that line then lay one down and 864* mark it as laid down. If the value contains hardcopy mechanical device 865* motion control codes, or it is overlength, or the alignment is set to 866* both, then have the value filled; else have the value placed. 867**/ 868 869 fc_code_parm = 0; 870 if fc_line_number_parm > template_map_number_of_bits 871 then do; 872 fc_code_parm = PAGE_OVERFLOW_ERROR_CODE; 873 return; 874 end; 875 else fc_current_line_on_page = fc_line_number_parm; 876 877 if ^template_map (fc_current_line_on_page) 878 then do; 879 page_defined_as_lines (fc_current_line_on_page) = fc_template_parm; 880 template_map (fc_current_line_on_page) = ON; 881 end; 882 883 if (search (fc_column_value_parm, BACKSPACE_OR_VERTICAL_TAB_OR_HORIZONTAL_TAB_OR_NL) ^= 0) 884 | (length (fc_column_value_parm) > fc_output_width_parm) 885 | (fc_alignment_mode_parm = BOTH_ALIGNMENT) 886 then call fill_the_column; 887 else call place_column (fc_column_value_parm); 888 889 return; 890 891 fill_the_column: proc; 892 893 /* 894* The variable output_string is based on a segment, and the variable 895* input_string is artificially constructed to look like a char (N) where 896* N is the length of the meaninful portion of our parm. We do this because 897* format_document_ doesn't want a varying char string, and because 898* format_document_ will start out by doing a 899* "length (rtrim (input_string))" of input_string, which could be an entire 900* segment. Set the adj_sw and call format_document_. Artifically set the 901* length of output_string based on how long format_document_ says it is. 902* Strings filled by format_document_ may still have to be additionally 903* aligned to center or right as they are being placed on the page. If the 904* alignment mode is truncate then call the subroutine to do it, else do 905* it here. 906**/ 907 908 input_string_non_varying_length = length (fc_column_value_parm); 909 input_string_non_varying_ptr = addrel (addr (fc_column_value_parm), 1); 910 format_document_options.line_length = fc_output_width_parm; 911 if fc_alignment_mode_parm = BOTH_ALIGNMENT 912 then format_document_options.switches.adj_sw = ON; 913 else format_document_options.switches.adj_sw = OFF; 914 915 call format_document_$string (input_string_non_varying, output_string_non_varying, 916 fc_returned_string_length, format_document_options_ptr, fc_code); 917 if fc_code ^= 0 918 then if fc_code ^= error_table_$recoverable_error 919 then call ssu_$abort_line (sci_ptr, fc_code); 920 if fc_returned_string_length = 0 921 then return; 922 923 output_string_redefined.length_word = fc_returned_string_length; 924 925 if fc_alignment_mode_parm = CENTER_ALIGNMENT | fc_alignment_mode_parm = RIGHT_ALIGNMENT 926 then fc_additional_alignment = ON; 927 else fc_additional_alignment = OFF; 928 929 if ^fc_fill_parm 930 then do; 931 call truncate_the_column; 932 return; 933 end; 934 935 /* 936* Walk through the filled string. Find the newline. If the found portion 937* contains any backspaces then send it off to the hardcopy terminal 938* alignment routine. If it doesn't and there is additional alignment then 939* have it done. If it doesn't and there isn't additional alignment then just 940* place it on the page. If we're still filling then advance our current 941* line on the page, check for template already laid down, lay it down and 942* mark it if it hasn't been laid down. 943**/ 944 945 fc_still_filling = ON; 946 fc_current_position = 1; 947 948 do while (fc_still_filling); 949 fc_new_line_position = index (substr (output_string, fc_current_position), NEWLINE); 950 if index (substr (output_string, fc_current_position, fc_new_line_position - 1), BACKSPACE) ^= 0 951 then do; 952 fc_spare_string = substr (output_string, fc_current_position, fc_new_line_position - 1); 953 call align_hardcopy_dependent_string (fc_spare_string); 954 end; 955 else if fc_additional_alignment 956 then do; 957 fc_spare_string = substr (output_string, fc_current_position, fc_new_line_position - 1); 958 call place_column (fc_spare_string); 959 end; 960 else substr (page_defined_as_lines (fc_current_line_on_page), 961 fc_output_position_parm, fc_new_line_position - 1) 962 = substr (output_string, fc_current_position, fc_new_line_position - 1); 963 fc_current_position = fc_current_position + fc_new_line_position; 964 if fc_current_position > output_string_redefined.length_word 965 then fc_still_filling = OFF; 966 else do; 967 fc_current_line_on_page = fc_current_line_on_page + 1; 968 if fc_current_line_on_page > template_map_number_of_bits 969 then do; 970 fc_code_parm = PAGE_OVERFLOW_ERROR_CODE; 971 return; 972 end; 973 if ^template_map (fc_current_line_on_page) 974 then do; 975 page_defined_as_lines (fc_current_line_on_page) = fc_template_parm; 976 template_map (fc_current_line_on_page) = ON; 977 end; 978 end; 979 end; 980 981 return; 982 983 end fill_the_column; 984 985 place_column: proc ( 986 987 pc_column_value_parm /* input: actual column value */ 988 ); 989 990 dcl pc_column_value_parm char (*) varying parm; 991 dcl pc_column_width fixed bin; 992 dcl pc_decimal_position fixed bin; 993 dcl pc_no_of_digits_to_the_left fixed bin; 994 dcl pc_no_of_digits_to_the_right fixed bin; 995 dcl pc_remaining_digits fixed bin; 996 dcl pc_starting_position fixed bin; 997 dcl pc_the_actual_decimal fixed bin; 998 999 /* 1000* Set the pointer to the output column to the desired spot on the page. 1001* Have the value aligned within the output column based on what the 1002* parm says. 1003**/ 1004 1005 fc_output_column_ptr = addr (page_defined_as_chars ( 1006 ((fc_current_line_on_page - 1) * page_info.width + fc_output_position_parm))); 1007 1008 if fc_alignment_mode_parm = DECIMAL_ALIGNMENT 1009 then call align_decimal_value; 1010 else if fc_alignment_mode_parm = LEFT_ALIGNMENT 1011 then call align_left_value; 1012 else if fc_alignment_mode_parm = RIGHT_ALIGNMENT 1013 then call align_right_value; 1014 else if fc_alignment_mode_parm = CENTER_ALIGNMENT 1015 then call align_center_value; 1016 else call ssu_$abort_line (sci_ptr, error_table_$badcall, 1017 "Unknown alignment mode ^d.", fc_alignment_mode_parm); 1018 1019 return; 1020 1021 align_center_value: proc; 1022 1023 /* 1024* Center the value in the output column. (Centre it for the Canadian users. 1025* This subroutine speaks American and Canadian.) Figure out where it should 1026* start and substring it into place. 1027**/ 1028 1029 pc_column_width = length (pc_column_value_parm); 1030 1031 if (pc_column_width = fc_output_width_parm) | (fc_output_width_parm - pc_column_width) = 1 1032 then pc_starting_position = 1; 1033 else if fc_output_width_parm - pc_column_width = 2 1034 then pc_starting_position = 2; 1035 else do; 1036 pc_starting_position = fc_output_width_parm - pc_column_width; 1037 pc_starting_position = divide (pc_starting_position, 2, 17) + 1; 1038 end; 1039 1040 substr (fc_output_column, pc_starting_position, pc_column_width) = pc_column_value_parm; 1041 1042 return; 1043 1044 end align_center_value; 1045 1046 align_decimal_value: proc; 1047 1048 /* Decimal align it within the output column width, adding the decimal if necessary. */ 1049 1050 pc_column_value = pc_column_value_parm; 1051 pc_column_width = length (pc_column_value); 1052 if fc_decimal_position_parm > fc_output_width_parm 1053 then pc_decimal_position = fc_output_width_parm; 1054 else pc_decimal_position = fc_decimal_position_parm; 1055 pc_no_of_digits_to_the_left = pc_decimal_position - 1; 1056 pc_no_of_digits_to_the_right = fc_output_width_parm - pc_decimal_position; 1057 1058 substr (fc_output_column, pc_decimal_position, 1) = "."; 1059 pc_the_actual_decimal = index (pc_column_value, "."); 1060 if pc_the_actual_decimal = 0 1061 then do; 1062 if pc_column_width = pc_decimal_position 1063 then pc_column_value = substr (pc_column_value, 2) || "."; 1064 else pc_column_value = pc_column_value || "."; 1065 pc_column_width = length (pc_column_value); 1066 pc_the_actual_decimal = pc_column_width; 1067 end; 1068 1069 if pc_the_actual_decimal = pc_decimal_position 1070 then substr (fc_output_column, 1, pc_no_of_digits_to_the_left) 1071 = substr (pc_column_value, 1, pc_no_of_digits_to_the_left); 1072 else if pc_the_actual_decimal - 1 > pc_no_of_digits_to_the_left 1073 then substr (fc_output_column, 1, pc_no_of_digits_to_the_left) 1074 = substr (pc_column_value, pc_the_actual_decimal 1075 - pc_no_of_digits_to_the_left, pc_no_of_digits_to_the_left); 1076 else substr (fc_output_column, pc_no_of_digits_to_the_left 1077 - pc_the_actual_decimal + 2, pc_the_actual_decimal - 1) 1078 = substr (pc_column_value, 1, pc_the_actual_decimal - 1); 1079 1080 if pc_no_of_digits_to_the_right = 0 | pc_the_actual_decimal = pc_column_width 1081 then return; 1082 1083 pc_remaining_digits = pc_column_width - pc_the_actual_decimal; 1084 if pc_no_of_digits_to_the_right = pc_remaining_digits 1085 then substr (fc_output_column, pc_decimal_position + 1) 1086 = substr (pc_column_value, pc_the_actual_decimal + 1); 1087 else if pc_no_of_digits_to_the_right > pc_remaining_digits 1088 then substr (fc_output_column, pc_decimal_position + 1) 1089 = substr (pc_column_value, pc_the_actual_decimal + 1); 1090 else substr (fc_output_column, pc_decimal_position + 1) 1091 = substr (pc_column_value, pc_the_actual_decimal + 1, pc_no_of_digits_to_the_right); 1092 1093 return; 1094 1095 end align_decimal_value; 1096 1097 align_left_value: proc; 1098 1099 /* 1100* An easy alignment task, but probably the most often used. Note that only 1101* the exact number of characters in the parm are what's moved. The template 1102* that was laid down already blanked the rest of the output column. 1103**/ 1104 1105 substr (fc_output_column, 1, length (pc_column_value_parm)) = pc_column_value_parm; 1106 1107 return; 1108 1109 end align_left_value; 1110 1111 align_right_value: proc; 1112 1113 /* 1114* Once again, only the characters in the parm are moved. 1115**/ 1116 1117 substr (fc_output_column, fc_output_width_parm - length (pc_column_value_parm) + 1) 1118 = pc_column_value_parm; 1119 1120 return; 1121 1122 end align_right_value; 1123 1124 end place_column; 1125 1126 align_hardcopy_dependent_string: proc ( 1127 1128 ahds_column_value_parm /* input: actual column value */ 1129 ); 1130 1131 dcl ahds_column_value_parm char (*) varying parm; 1132 dcl ahds_current_input_position fixed bin; 1133 dcl ahds_current_output_position fixed bin; 1134 dcl ahds_loop fixed bin; 1135 dcl ahds_number_of_chars_to_move fixed bin; 1136 dcl ahds_overstrike_index fixed bin; 1137 dcl ahds_still_overstriking bit (1) aligned; 1138 dcl ahds_string_length fixed bin; 1139 dcl ahds_truncate_the_column bit (1) aligned; 1140 dcl ahds_virtual_length fixed bin; 1141 1142 /* 1143* Hopefully all of the hardcopy device support will one day be moved out 1144* of the operating system and applications forever. In the meantime we 1145* continue to bake it into everything written on Multics because that's 1146* the way it was done back in 1965 when Multics was first started. 1147* Fortunately the video system has said "I don't support ugly backspaces, 1148* and if you give me any to write I will refuse and hand you back an error 1149* code." This subroutine pre-processes the data so that the video system 1150* will not give us any error codes, and we can do things more rationally 1151* than they were done back in 1965 and are still being done today many 1152* places in Multics. This is also the key to why this formatter runs *so* 1153* fast when compared with others like compose. It never has to try to 1154* figure out where it really is on a page, because it doesn't have 1155* imbedded hardcopy device motion control characters stuck in the formatted 1156* page. Instead they are moved off to a separate overstrike array, and the 1157* formatter only runs slower for the people who continue to bake hardcopy 1158* device motion control characters in their formatted data. When the page is 1159* being displayed through the video system the page is displayed without 1160* any of the overstruck sequences; when it is being displayed in hardcopy 1161* dependent fashion the overstruck characters are put back in at display 1162* time. 1163**/ 1164 1165 ahds_string_length = length (ahds_column_value_parm); 1166 if ahds_string_length = 0 1167 then return; 1168 1169 ahds_overstrike_index = ((fc_current_line_on_page - 1) * page_info.width) 1170 + fc_output_position_parm; 1171 fc_output_column_ptr = addr (page_defined_as_chars (ahds_overstrike_index)); 1172 1173 ahds_virtual_length = 0; 1174 do ahds_loop = 1 to ahds_string_length; 1175 if substr (ahds_column_value_parm, ahds_loop, 1) ^= BACKSPACE 1176 then ahds_virtual_length = ahds_virtual_length + 1; 1177 else ahds_virtual_length = ahds_virtual_length - 1; 1178 end; 1179 1180 if ^fc_fill_parm 1181 then do; 1182 if ahds_virtual_length > fc_output_width_parm 1183 then do; 1184 ahds_number_of_chars_to_move = fc_output_width_parm - truncation_indicator_length; 1185 ahds_truncate_the_column = ON; 1186 end; 1187 else do; 1188 ahds_number_of_chars_to_move = ahds_virtual_length; 1189 ahds_truncate_the_column = OFF; 1190 end; 1191 if ahds_truncate_the_column 1192 then if fc_output_width_parm <= truncation_indicator_length 1193 then do; 1194 if fc_output_width_parm < truncation_indicator_length 1195 then fc_output_column = substr (format_report_info.truncation_indicator, 1, fc_output_width_parm); 1196 else fc_output_column = format_report_info.truncation_indicator; 1197 return; 1198 end; 1199 else; 1200 else; 1201 end; 1202 else ahds_number_of_chars_to_move = ahds_virtual_length; 1203 1204 if page_info.page_overstrike_info_ptr = null () 1205 then do; 1206 page_info.page_overstrike_info_ptr = page_overstrike_ip; 1207 unspec (page_overstrike_info.bit_map) = OFF; 1208 end; 1209 1210 if ^fc_additional_alignment 1211 then ahds_current_output_position = 1; 1212 else do; 1213 if fc_alignment_mode_parm = RIGHT_ALIGNMENT 1214 then ahds_current_output_position = fc_output_width_parm - ahds_virtual_length + 1; 1215 else do; 1216 if fc_output_width_parm = ahds_virtual_length | fc_output_width_parm - ahds_virtual_length = 1 1217 then ahds_current_output_position = 1; 1218 else if fc_output_width_parm - ahds_virtual_length = 2 1219 then ahds_current_output_position = 2; 1220 else do; 1221 ahds_current_output_position = fc_output_width_parm - ahds_virtual_length; 1222 ahds_current_output_position = divide (ahds_current_output_position, 2, 17) + 1; 1223 end; 1224 end; 1225 end; 1226 ahds_current_input_position = 1; 1227 1228 do ahds_loop = 1 to ahds_number_of_chars_to_move; 1229 substr (fc_output_column, ahds_current_output_position, 1) 1230 = substr (ahds_column_value_parm, ahds_current_input_position, 1); 1231 ahds_current_input_position = ahds_current_input_position + 1; 1232 ahds_still_overstriking = ON; 1233 do while (ahds_still_overstriking); 1234 if ahds_current_input_position < ahds_string_length 1235 then if substr (ahds_column_value_parm, ahds_current_input_position, 1) ^= BACKSPACE 1236 then ahds_still_overstriking = OFF; 1237 else do; 1238 ahds_current_input_position = ahds_current_input_position + 1; 1239 page_overstrike_info.bit_map (ahds_overstrike_index + ahds_current_output_position - 1) = ON; 1240 page_overstrike_info.chars (ahds_overstrike_index + ahds_current_output_position - 1) 1241 = substr (ahds_column_value_parm, ahds_current_input_position, 1); 1242 ahds_current_input_position = ahds_current_input_position + 1; 1243 end; 1244 else ahds_still_overstriking = OFF; 1245 end; 1246 ahds_current_output_position = ahds_current_output_position + 1; 1247 end; 1248 1249 if ^fc_fill_parm 1250 then if ahds_truncate_the_column 1251 then substr (fc_output_column, fc_output_width_parm - truncation_indicator_length + 1) 1252 = format_report_info.truncation_indicator; 1253 else; 1254 else; 1255 1256 return; 1257 1258 end align_hardcopy_dependent_string; 1259 1260 truncate_the_column: proc; 1261 1262 /* 1263* Find out if the character string or the output width is smallest. 1264* Translate any newlines format_document_ may have put in into blanks. 1265* If it contains overstruck characters then have the subroutine which 1266* specializes in that type of stuff do it; else just place the portion 1267* of the character string that fits into the output position. If this 1268* results in truncation then place the truncation indicator to show the 1269* user this has happened. 1270**/ 1271 1272 fc_string_end = min (output_string_redefined.length_word, fc_output_width_parm); 1273 if fc_string_end = 0 1274 then return; 1275 1276 fc_spare_string = substr (output_string, 1, fc_string_end); 1277 fc_spare_string = translate (fc_spare_string, BLANK, NEWLINE); 1278 if search (fc_spare_string, BACKSPACE) ^= 0 1279 then do; 1280 call align_hardcopy_dependent_string (fc_spare_string); 1281 return; 1282 end; 1283 1284 fc_spare_string_length = length (fc_spare_string); 1285 substr (page_defined_as_lines (fc_line_number_parm), fc_output_position_parm, 1286 fc_spare_string_length) = fc_spare_string; 1287 if output_string_redefined.length_word ^> fc_output_width_parm 1288 then return; 1289 1290 if fc_output_width_parm > truncation_indicator_length 1291 then substr (page_defined_as_lines (fc_line_number_parm), 1292 fc_output_position_parm + fc_output_width_parm - truncation_indicator_length, truncation_indicator_length) 1293 = format_report_info.truncation_indicator; 1294 else substr (page_defined_as_lines (fc_line_number_parm), 1295 fc_output_position_parm, fc_output_width_parm) 1296 = substr (format_report_info.truncation_indicator, 1, fc_output_width_parm); 1297 1298 return; 1299 1300 end truncate_the_column; 1301 1302 end fit_column; 1303 1304 format_detail_block: proc; 1305 1306 dcl fdb_code fixed bin (35); 1307 dcl fdb_column_changed_flag bit (1) aligned; 1308 1309 /* 1310* If the detail block won't fit on the page then we are done. Check to make 1311* sure that at least one detail block has been placed on the page. 1312**/ 1313 1314 if (status.number_of_lines_needed_for_detail_block > status.remaining_lines_on_page) 1315 | (format_report_info.flags.page_footer_is_defined & status.remaining_lines_on_page 1316 < status.number_of_lines_needed_for_page_footer + status.number_of_lines_needed_for_detail_block) 1317 then do; 1318 if status.total_number_of_rows_used ^> 0 1319 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_format, 1320 "^/There isn't enough room to place the first row on the page." 1321 || "^/It was row number ^d on page number ^d.", 1322 status.current_row_number, status.current_page_number); 1323 else do; 1324 still_formatting_detail_blocks = OFF; 1325 return; 1326 end; 1327 end; 1328 1329 /* 1330* Check to see if this row has been processed before and backed off the 1331* page. Flag appropriately. If the previous detail block used some lines 1332* then setup the detail_block information so this one can be backed out 1333* properly. 1334**/ 1335 1336 if status.current_row_number > status.highest_row_formatted 1337 then do; 1338 status.highest_row_formatted = status.current_row_number; 1339 status.flags.row_has_been_processed_before = OFF; 1340 end; 1341 else status.flags.row_has_been_processed_before = ON; 1342 1343 if status.flags.detail_block_used_some_lines 1344 then do; 1345 formatted_page_info.number_of_detail_blocks = formatted_page_info.number_of_detail_blocks + 1; 1346 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks) = 0; 1347 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).row_number 1348 = status.current_row_number; 1349 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).beginning_line_number 1350 = status.current_line_on_page; 1351 end; 1352 1353 /* 1354* Mark this block initially as using no lines. Execute the editing requests, 1355* and gather the subtotals, subcounts, totals and counts before formatting 1356* anything. 1357**/ 1358 1359 status.flags.detail_block_used_some_lines = OFF; 1360 1361 if format_report_info.flags.editing_is_defined 1362 then call execute_editing_strings; 1363 1364 if format_report_info.flags.subtotal_is_defined 1365 then call gather_subtotals; 1366 1367 if format_report_info.flags.subcount_is_defined 1368 then call gather_subcounts; 1369 1370 if format_report_info.flags.total_is_defined 1371 then call gather_totals; 1372 1373 if format_report_info.flags.count_is_defined 1374 then call gather_counts; 1375 1376 /* 1377* If a group header and trigger are defined then check to see if it is time 1378* to process it. If one of the trigger columns changed then format the 1379* header, backing it out if necessary. 1380**/ 1381 1382 if format_report_info.flags.group_header_is_defined 1383 & format_report_info.flags.group_header_trigger_is_defined 1384 then do; 1385 call check_for_group_break (format_report_info.group_header_trigger_info_ptr, 1386 LOOK_BEHIND, fdb_column_changed_flag); 1387 if fdb_column_changed_flag 1388 then do; 1389 call format_header (format_report_info.group_header_info_ptr, GROUP_HEADER, 1390 status.current_line_on_page, status.remaining_lines_on_page, 1391 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks) 1392 .group_header_length, fdb_code); 1393 if fdb_code ^= 0 1394 then do; 1395 call backout_detail_block (GROUP_HEADER); 1396 return; 1397 end; 1398 else status.flags.detail_block_used_some_lines = ON; 1399 end; 1400 end; 1401 1402 /* 1403* Next the row header. If it's defined then format it, backing it out if 1404* necessary. 1405**/ 1406 1407 if format_report_info.flags.row_header_is_defined 1408 then do; 1409 call format_header (format_report_info.row_header_info_ptr, ROW_HEADER, 1410 status.current_line_on_page, status.remaining_lines_on_page, 1411 formatted_page_info.detail_blocks (formatted_page_info 1412 .number_of_detail_blocks).row_header_length, fdb_code); 1413 if fdb_code ^= 0 1414 then do; 1415 call backout_detail_block (ROW_HEADER); 1416 return; 1417 end; 1418 else status.flags.detail_block_used_some_lines = ON; 1419 end; 1420 1421 /* 1422* If outlining is defined then outline the columns as appropriate. 1423**/ 1424 1425 if format_report_info.flags.outline_is_defined 1426 then call check_for_outlining; 1427 1428 /* 1429* If all columns haven't been excluded then format the row, backing it out 1430* if necessary. 1431**/ 1432 1433 if format_report_info.flags.row_value_is_defined 1434 then do; 1435 call format_row (ROW_VALUE, output_columns_ip, 1436 row_value_template_ip, GENERATE_ZERO_BLANK_LINES_TRAILER, 1437 status.current_line_on_page, status.remaining_lines_on_page, 1438 formatted_page_info.detail_blocks (formatted_page_info 1439 .number_of_detail_blocks).row_length, fdb_code); 1440 if fdb_code ^= 0 1441 then do; 1442 call backout_detail_block (ROW_VALUE); 1443 return; 1444 end; 1445 else status.flags.detail_block_used_some_lines = ON; 1446 end; 1447 1448 /* 1449* If subtotals are defined then format them if it's time for any of them 1450* to be generated, backing out the block if necessary. 1451**/ 1452 1453 if format_report_info.flags.subtotal_is_defined 1454 then do; 1455 call format_subtotals (subtotal_ip, subtotal_columns_ip, subtotal_generation_ip, ROW_SUBTOTAL, 1456 formatted_page_info.detail_blocks.subtotal_length 1457 (formatted_page_info.number_of_detail_blocks), 1458 status.flags.subtotals_ejection_in_progress, fdb_code); 1459 if fdb_code ^= 0 1460 then do; 1461 call backout_detail_block (ROW_SUBTOTAL); 1462 return; 1463 end; 1464 end; 1465 1466 /* 1467* If subcounts are defined then format them if it's time for any of them 1468* to be generated, backing out the block if necessary. 1469**/ 1470 1471 if format_report_info.flags.subcount_is_defined 1472 then do; 1473 call format_subtotals (subcount_ip, subcount_columns_ip, subcount_generation_ip, ROW_SUBCOUNT, 1474 formatted_page_info.detail_blocks.subcount_length 1475 (formatted_page_info.number_of_detail_blocks), 1476 status.flags.subcounts_ejection_in_progress, fdb_code); 1477 if fdb_code ^= 0 1478 then do; 1479 call backout_detail_block (ROW_SUBCOUNT); 1480 return; 1481 end; 1482 end; 1483 1484 /* 1485* If totals are defined and this is the last row of the report then format 1486* them, backing them out if necessary. 1487**/ 1488 1489 if format_report_info.flags.total_is_defined & status.flags.last_row_of_report 1490 then do; 1491 call format_totals (total_ip, total_columns_ip, ROW_TOTAL, 1492 formatted_page_info.detail_blocks.total_length 1493 (formatted_page_info.number_of_detail_blocks), 1494 status.flags.totals_ejection_in_progress, fdb_code); 1495 if fdb_code ^= 0 1496 then do; 1497 call backout_detail_block (ROW_TOTAL); 1498 return; 1499 end; 1500 end; 1501 1502 /* 1503* If counts are defined and this is the last row of the report then format 1504* them, backing them out if necessary. 1505**/ 1506 1507 if format_report_info.flags.count_is_defined & status.flags.last_row_of_report 1508 then do; 1509 call format_totals (count_ip, count_columns_ip, ROW_COUNT, 1510 formatted_page_info.detail_blocks.count_length 1511 (formatted_page_info.number_of_detail_blocks), 1512 status.flags.counts_ejection_in_progress, fdb_code); 1513 if fdb_code ^= 0 1514 then do; 1515 call backout_detail_block (ROW_COUNT); 1516 return; 1517 end; 1518 end; 1519 1520 /* 1521* If the row footer is defined then format it, backing it out if necessary. 1522**/ 1523 1524 if format_report_info.flags.row_footer_is_defined 1525 then do; 1526 call format_header (format_report_info.row_footer_info_ptr, ROW_FOOTER, 1527 status.current_line_on_page, status.remaining_lines_on_page, 1528 formatted_page_info.detail_blocks (formatted_page_info 1529 .number_of_detail_blocks).row_footer_length, fdb_code); 1530 if fdb_code ^= 0 1531 then do; 1532 call backout_detail_block (ROW_FOOTER); 1533 return; 1534 end; 1535 else status.flags.detail_block_used_some_lines = ON; 1536 end; 1537 1538 /* 1539* If a group footer and trigger are defined then check to see if it is time 1540* to process it. If one of the trigger columns changed then format the 1541* footer, backing it out if necessary. 1542**/ 1543 1544 if format_report_info.flags.group_footer_is_defined 1545 & format_report_info.flags.group_footer_trigger_is_defined 1546 then do; 1547 call check_for_group_break (format_report_info.group_footer_trigger_info_ptr, 1548 LOOK_AHEAD, fdb_column_changed_flag); 1549 if fdb_column_changed_flag 1550 then do; 1551 call format_header (format_report_info.group_footer_info_ptr, GROUP_FOOTER, 1552 status.current_line_on_page, status.remaining_lines_on_page, 1553 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).group_footer_length, fdb_code); 1554 if fdb_code ^= 0 1555 then do; 1556 call backout_detail_block (GROUP_FOOTER); 1557 return; 1558 end; 1559 else status.flags.detail_block_used_some_lines = ON; 1560 end; 1561 end; 1562 1563 /* 1564* If we've just formatted the last row, or there isn't enough space 1565* remaining on the page to attempt the next row, then quit formatting 1566* detail blocks. 1567* 1568**/ 1569 1570 status.total_number_of_rows_used = status.total_number_of_rows_used + 1; 1571 status.current_row_number = status.current_row_number + 1; 1572 1573 if (status.current_row_number > report_control_info.no_of_rows_retrieved) 1574 | (status.number_of_lines_needed_for_detail_block > status.remaining_lines_on_page) 1575 | (format_report_info.flags.page_footer_is_defined & status.remaining_lines_on_page 1576 < status.number_of_lines_needed_for_page_footer + status.number_of_lines_needed_for_detail_block) 1577 then status.still_formatting_detail_blocks = OFF; 1578 1579 /* 1580* Adjust status flags and check to see if it's time for a page break. 1581**/ 1582 1583 if report_control_info.table_is_full & status.current_row_number = report_control_info.no_of_rows_retrieved 1584 then status.flags.last_row_of_report = ON; 1585 1586 status.flags.first_row_of_report = OFF; 1587 status.flags.first_row_on_page = OFF; 1588 1589 if format_report_info.flags.page_break_is_defined 1590 then call check_for_page_break; 1591 1592 return; 1593 1594 end format_detail_block; 1595 1596 format_header: proc ( 1597 1598 fh_header_info_ptr_parm, /* input: ptr to header info */ 1599 fh_executing_object_parm, /* input: who's calling */ 1600 fh_current_line_number_parm, /* input/output: current line on page */ 1601 fh_remaining_lines_on_page_parm, /* input/output: number left on page */ 1602 fh_number_of_lines_used_parm, /* output: number of lines used */ 1603 fh_code_parm /* output: success or failure */ 1604 ); 1605 1606 dcl fh_current_line_number fixed bin; 1607 dcl fh_current_line_number_parm fixed bin parm; 1608 dcl fh_code_parm fixed bin (35) parm; 1609 dcl fh_executing_object_parm char (*) varying parm; 1610 dcl fh_header_info_ptr_parm ptr parm; 1611 dcl fh_loop fixed bin; 1612 dcl fh_next_line_number fixed bin; 1613 dcl fh_number_of_lines_used fixed bin; 1614 dcl fh_number_of_lines_used_parm fixed bin parm; 1615 dcl fh_remaining_lines_on_page_parm fixed bin parm; 1616 dcl fh_still_counting_lines bit (1) aligned; 1617 1618 /* 1619* Check to make sure we aren't about to exceed the page length. Repeat the 1620* following sequence for each line of the header/footer. Lay down a template 1621* on the current line and mark it as laid down. For each portion of the 1622* header that's present, have any active requests evaluated and fit the 1623* header portion into it assigned slot on the page. If we've still got 1624* another header line to do then find out where on the page it will begin, 1625* and repeat the loop. When we've evaluated all lines then count how many 1626* we've used, fill in the parms, and return to caller. 1627**/ 1628 1629 header_ip = fh_header_info_ptr_parm; 1630 fh_current_line_number = fh_current_line_number_parm; 1631 fh_number_of_lines_used_parm = 0; 1632 fh_code_parm = 0; 1633 status.flags.header_being_evaluated = ON; 1634 status.object_being_evaluated = fh_executing_object_parm; 1635 1636 if fh_current_line_number > template_map_number_of_bits 1637 then do; 1638 fh_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1639 return; 1640 end; 1641 1642 do status.current_header_line = 1 to header_info.number_of_lines; 1643 1644 page_defined_as_lines (fh_current_line_number) = generic_template; 1645 template_map (fh_current_line_number) = ON; 1646 1647 do status.current_header_part = 1 to header_info.maximum_number_of_parts; 1648 1649 if header_info.lines (status.current_header_line).parts (status.current_header_part).flags.present 1650 then do; 1651 if header_info.lines (status.current_header_line).parts (status.current_header_part).flags.active 1652 then do; 1653 output_string = substr (headers_temp_seg, 1654 header_info.lines (status.current_header_line).parts (status.current_header_part).index, 1655 header_info.lines (status.current_header_line).parts (status.current_header_part).length); 1656 call evaluate_active_string (output_string, input_string); 1657 end; 1658 else input_string = substr (headers_temp_seg, 1659 header_info.lines (status.current_header_line).parts (status.current_header_part).index, 1660 header_info.lines (status.current_header_line).parts (status.current_header_part).length); 1661 call fit_column (input_string, 1662 header_info.lines (status.current_header_line).parts (status.current_header_part).width, 1663 header_info.lines (status.current_header_line).parts (status.current_header_part).starting_position, 1664 header_info.lines (status.current_header_line).parts (status.current_header_part).alignment, 1665 0, generic_template, FILL, fh_current_line_number, fh_code_parm); 1666 if fh_code_parm ^= 0 1667 then return; 1668 end; 1669 1670 end; 1671 1672 if status.current_header_line < header_info.number_of_lines 1673 then do; 1674 if fh_current_line_number < template_map_number_of_bits 1675 then fh_next_line_number = index (substr (template_map_defined_as_a_string, 1676 fh_current_line_number + 1), OFF); 1677 else fh_next_line_number = 0; 1678 if fh_next_line_number = 0 1679 then do; 1680 fh_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1681 return; 1682 end; 1683 else fh_current_line_number = fh_current_line_number + fh_next_line_number; 1684 end; 1685 1686 end; 1687 1688 fh_still_counting_lines = ON; 1689 fh_number_of_lines_used = 0; 1690 1691 do fh_loop = fh_current_line_number_parm to template_map_number_of_bits 1692 while (fh_still_counting_lines); 1693 if template_map (fh_loop) 1694 then fh_number_of_lines_used = fh_number_of_lines_used + 1; 1695 else fh_still_counting_lines = OFF; 1696 end; 1697 1698 fh_number_of_lines_used_parm = fh_number_of_lines_used; 1699 fh_current_line_number_parm = fh_current_line_number_parm + fh_number_of_lines_used; 1700 fh_remaining_lines_on_page_parm = template_map_number_of_bits - fh_current_line_number_parm + 1; 1701 status.flags.header_being_evaluated = OFF; 1702 1703 return; 1704 1705 end format_header; 1706 1707 format_page_footer: proc; 1708 1709 dcl fpf_beginning_line_number fixed bin; 1710 dcl fpf_code fixed bin (35); 1711 dcl fpf_loop fixed bin; 1712 dcl fpf_overstrike_index_1 fixed bin; 1713 dcl fpf_overstrike_index_2 fixed bin; 1714 dcl fpf_overstruck_page bit (1) aligned; 1715 dcl fpf_page_footer_doesnt_fit bit (1) aligned; 1716 1717 /* 1718* Unpaginated reports only have a page footer placed after the last row 1719* of the report. Repeat the following sequence while the footer doesn't 1720* fit. Decrement the current row number so the last row on the page is 1721* available for the footer. Format the footer. If it doesn't fit then 1722* decrement the number of rows used on this page, back out the last 1723* detail block, and repeat the loop. If it does fit then kick out of the 1724* loop. (The proc that does the backing out never allows the first row 1725* of a page to be removed, so it is the governing mechanism in this loop.) 1726**/ 1727 1728 if ^paginated_report & ^status.flags.last_row_of_report 1729 then return; 1730 1731 fpf_page_footer_doesnt_fit = ON; 1732 1733 do while (fpf_page_footer_doesnt_fit); 1734 status.current_row_number = status.current_row_number - 1; 1735 fpf_beginning_line_number = status.current_line_on_page; 1736 call format_header (format_report_info.page_footer_info_ptr, PAGE_FOOTER, 1737 status.current_line_on_page, status.remaining_lines_on_page, 1738 formatted_page_info.page_footer_length, fpf_code); 1739 if fpf_code ^= 0 1740 then do; 1741 status.total_number_of_rows_used = status.total_number_of_rows_used - 1; 1742 call backout_detail_block (PAGE_FOOTER); 1743 end; 1744 else fpf_page_footer_doesnt_fit = OFF; 1745 end; 1746 1747 /* 1748* Adjust the current row number to compensate for when we decremented 1749* it. If there are remaining lines on the page and it's a paginated 1750* report do the following steps. Work the loop from the last line of the 1751* page back up to where we placed the last line of the footer. If we've 1752* just moved up to the point where we originally placed the footer lines 1753* then lay down a generic template to blank out the footer line, mark 1754* the template map, and if it's an overstruck page then show the line 1755* as having no overstrikes. If we haven't arrived at this point yet, then 1756* move the footer line down the page to where it belongs, mark the template 1757* map, and move any overstrike info if it's an overstruck page. 1758**/ 1759 1760 status.current_row_number = status.current_row_number + 1; 1761 1762 if status.remaining_lines_on_page > 0 1763 then if paginated_report 1764 then do; 1765 fpf_overstruck_page = (page_info.page_overstrike_info_ptr ^= null ()); 1766 do fpf_loop = template_map_number_of_bits to fpf_beginning_line_number by -1; 1767 if fpf_loop < template_map_number_of_bits - formatted_page_info.page_footer_length + 1 1768 then do; 1769 page_defined_as_lines (fpf_loop) = generic_template; 1770 template_map (fpf_loop) = ON; 1771 if fpf_overstruck_page 1772 then substr (page_overstrike_info_redefined.bit_map, 1773 ((fpf_loop - 1) * page_info.width) + 1, page_info.width) = OFF; 1774 else; 1775 end; 1776 else do; 1777 page_defined_as_lines (fpf_loop) 1778 = page_defined_as_lines (fpf_loop - status.remaining_lines_on_page); 1779 template_map (fpf_loop) = ON; 1780 if fpf_overstruck_page 1781 then do; 1782 fpf_overstrike_index_1 = ((fpf_loop - 1) * page_info.width) + 1; 1783 fpf_overstrike_index_2 = ((fpf_loop - status.remaining_lines_on_page - 1) * page_info.width) + 1; 1784 substr (page_overstrike_info_redefined.bit_map, 1785 fpf_overstrike_index_1, page_info.width) 1786 = substr (page_overstrike_info_redefined.bit_map, 1787 fpf_overstrike_index_2, page_info.width); 1788 substr (page_overstrike_info_redefined.chars, 1789 fpf_overstrike_index_1, page_info.width) 1790 = substr (page_overstrike_info_redefined.chars, 1791 fpf_overstrike_index_2, page_info.width); 1792 end; 1793 end; 1794 end; 1795 status.current_line_on_page = template_map_number_of_bits; 1796 status.remaining_lines_on_page = 0; 1797 end; 1798 else; 1799 else; 1800 1801 return; 1802 1803 end format_page_footer; 1804 1805 format_page_header: proc; 1806 1807 dcl fph_code fixed bin (35); 1808 1809 /* 1810* Unpaginated reports only have the header placed before the first row. 1811* Format the header and if it doesn't fit shut things down. 1812**/ 1813 1814 if ^paginated_report & ^status.flags.first_row_of_report 1815 then return; 1816 1817 call format_header (format_report_info.page_header_info_ptr, PAGE_HEADER, 1818 status.current_line_on_page, status.remaining_lines_on_page, 1819 formatted_page_info.page_header_length, fph_code); 1820 if fph_code ^= 0 1821 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_format, 1822 "^/There isn't enough room to place the page header on page number ^d.", 1823 status.current_page_number); 1824 1825 return; 1826 1827 end format_page_header; 1828 1829 format_row: proc ( 1830 1831 fr_executing_object_parm, /* input: who's calling */ 1832 fr_output_columns_info_ptr_parm, /* input: ptr to output_columns_info */ 1833 fr_row_template_info_ptr_parm, /* input: ptr to template_info */ 1834 fr_number_of_blank_lines_parm, /* input: # of blank lines after row */ 1835 fr_current_line_number_parm, /* input/output: current line on page */ 1836 fr_remaining_lines_on_page_parm, /* input/output: number left on page */ 1837 fr_number_of_lines_used_parm, /* output: number of lines used */ 1838 fr_code_parm /* output: success or failure */ 1839 ); 1840 1841 dcl fr_current_line_number_parm fixed bin parm; 1842 dcl fr_code_parm fixed bin (35) parm; 1843 dcl fr_current_detail_line fixed bin; 1844 dcl fr_current_line_number fixed bin; 1845 dcl fr_executing_object_parm char (*) varying parm; 1846 dcl fr_loop fixed bin; 1847 dcl fr_next_line_number fixed bin; 1848 dcl fr_number_of_blank_lines_parm fixed bin; 1849 dcl fr_number_of_lines_used fixed bin; 1850 dcl fr_number_of_lines_used_by_prefix fixed bin; 1851 dcl fr_number_of_lines_used_parm fixed bin parm; 1852 dcl 1 fr_output_columns_info like output_columns_info based (fr_output_columns_info_ptr); 1853 dcl fr_output_columns_info_ptr ptr; 1854 dcl fr_output_columns_info_ptr_parm ptr parm; 1855 dcl fr_remaining_lines_on_page_parm fixed bin parm; 1856 dcl 1 fr_row_template_info like template_info based (fr_row_template_info_ptr); 1857 dcl fr_row_template_info_ptr ptr; 1858 dcl fr_row_template_info_ptr_parm ptr parm; 1859 dcl fr_still_counting_lines bit (1) aligned; 1860 1861 /* 1862* Move parms into automatic variables, check to make sure we aren't 1863* about to run off the page, lay down a template on the first line and 1864* mark it. 1865**/ 1866 1867 status.object_being_evaluated = fr_executing_object_parm; 1868 fr_output_columns_info_ptr = fr_output_columns_info_ptr_parm; 1869 fr_row_template_info_ptr = fr_row_template_info_ptr_parm; 1870 fr_current_line_number = fr_current_line_number_parm; 1871 fr_number_of_lines_used_parm = 0; 1872 fr_code_parm = 0; 1873 1874 fr_current_detail_line = 1; 1875 template_ptr = addr (fr_row_template_info.templates (fr_current_detail_line)); 1876 if fr_current_line_number > template_map_number_of_bits 1877 then do; 1878 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1879 return; 1880 end; 1881 page_defined_as_lines (fr_current_line_number) = template; 1882 template_map (fr_current_line_number) = ON; 1883 1884 /* 1885* Repeat the following sequence for each column that isn't being outlined. 1886* If it has a prefix character then expand it to full column width and 1887* have it fit into the output column. If it has an editing request then use 1888* it; else rtrim character column values and rtrim and ltrim all other 1889* column values. Fit the column into the output column. If we're not on 1890* the last column and the next column goes onto a different output line, 1891* then find out where the next output line is and lay down a template also 1892* marking it (making sure it doesn't place us past the end of the page). 1893**/ 1894 1895 do status.current_column_number = 1 to fr_output_columns_info.number_of_columns; 1896 column_ip = addr (fr_output_columns_info.columns (status.current_column_number)); 1897 if ^column_info.flags.outline 1898 then do; 1899 if length (column_info.prefix_character) > 0 1900 then do; 1901 fr_spare_string = copy (column_info.prefix_character, column_info.width); 1902 call fit_column (fr_spare_string, column_info.width, 1903 column_info.starting_position, LEFT_ALIGNMENT, 1904 0, template, FILL, fr_current_line_number, fr_code_parm); 1905 if fr_code_parm ^= 0 1906 then return; 1907 else fr_number_of_lines_used_by_prefix = 1; 1908 end; 1909 else fr_number_of_lines_used_by_prefix = 0; 1910 if column_info.flags.editing 1911 then do; 1912 editing_string_rl = column_info.editing_string_result_length; 1913 editing_string_rp = column_info.editing_string_result_ptr; 1914 input_string = editing_string_result; 1915 end; 1916 else do; 1917 if column_info.linus_data_type ^= CHAR_DATA_TYPE 1918 then input_string = ltrim (rtrim (substr (current_row_value, 1919 table_info.columns.column_index (column_info.input_column), 1920 table_info.columns.column_length (column_info.input_column)))); 1921 else input_string = rtrim (substr (current_row_value, 1922 table_info.columns.column_index (column_info.input_column), 1923 table_info.columns.column_length (column_info.input_column))); 1924 end; 1925 call fit_column (input_string, column_info.width, 1926 column_info.starting_position, column_info.alignment, 1927 column_info.decimal_position, template, column_info.folding_is_fill, 1928 fr_current_line_number + fr_number_of_lines_used_by_prefix, fr_code_parm); 1929 if fr_code_parm ^= 0 1930 then return; 1931 end; 1932 else; 1933 if status.current_column_number ^= fr_output_columns_info.number_of_columns 1934 then if fr_output_columns_info.columns (status.current_column_number).output_line 1935 ^= fr_output_columns_info.columns (status.current_column_number + 1).output_line 1936 then do; 1937 if fr_current_line_number < template_map_number_of_bits 1938 then fr_next_line_number = index (substr (template_map_defined_as_a_string, 1939 fr_current_line_number + 1), OFF); 1940 else fr_next_line_number = 0; 1941 if fr_next_line_number = 0 1942 then do; 1943 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1944 return; 1945 end; 1946 fr_current_line_number = fr_current_line_number + fr_next_line_number; 1947 fr_current_detail_line = fr_current_detail_line + 1; 1948 template_ptr = addr (fr_row_template_info.templates (fr_current_detail_line)); 1949 page_defined_as_lines (fr_current_line_number) = template; 1950 template_map (fr_current_line_number) = ON; 1951 end; 1952 end; 1953 1954 /* 1955* Find out how many lines we've used. Add any blank trailer lines requested 1956* by the caller. Set the parms and return to caller. 1957**/ 1958 1959 fr_still_counting_lines = ON; 1960 fr_number_of_lines_used = 0; 1961 1962 do fr_loop = fr_current_line_number_parm to template_map_number_of_bits 1963 while (fr_still_counting_lines); 1964 if template_map (fr_loop) 1965 then fr_number_of_lines_used = fr_number_of_lines_used + 1; 1966 else fr_still_counting_lines = OFF; 1967 end; 1968 1969 if fr_number_of_blank_lines_parm ^= 0 1970 then do; 1971 fr_current_line_number = fr_current_line_number_parm + fr_number_of_lines_used; 1972 do fr_loop = 1 to fr_number_of_blank_lines_parm; 1973 if fr_current_line_number ^> template_map_number_of_bits 1974 then do; 1975 page_defined_as_lines (fr_current_line_number) = generic_template; 1976 template_map (fr_current_line_number) = ON; 1977 fr_current_line_number = fr_current_line_number + 1; 1978 fr_number_of_lines_used = fr_number_of_lines_used + 1; 1979 end; 1980 else do; 1981 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1982 return; 1983 end; 1984 end; 1985 end; 1986 1987 fr_number_of_lines_used_parm = fr_number_of_lines_used; 1988 fr_current_line_number_parm = fr_current_line_number_parm + fr_number_of_lines_used; 1989 fr_remaining_lines_on_page_parm = template_map_number_of_bits - fr_current_line_number_parm + 1; 1990 1991 return; 1992 1993 end format_row; 1994 1995 format_title_block: proc; 1996 1997 dcl ftb_code fixed bin (35); 1998 dcl ftb_current_line_number fixed bin; 1999 dcl ftb_loop fixed bin; 2000 2001 /* 2002* Unpaginated reports only have the title block placed before the first 2003* row of the report. Create the title block if it's our first time and 2004* save it away for future use if it's a paginated report. If it isn't our 2005* first time then just place the title block we've already created. If the 2006* title block contains overstruck characters then they loose this 2007* optimization (the title block is formatted every time it's needed). If 2008* the title block doesn't fit then shut things down. 2009**/ 2010 2011 if (^paginated_report & ^status.flags.first_row_of_report) 2012 then return; 2013 2014 if format_report_info.title_block_info_ptr = null () 2015 then call create_title_block (ftb_code); 2016 else call place_title_block (ftb_code); 2017 2018 if ftb_code ^= 0 2019 then call ssu_$abort_line (sci_ptr, linus_error_$bad_report_format, 2020 "^/There isn't enough room to place the titles on page number ^d.", 2021 status.current_page_number); 2022 2023 return; 2024 2025 create_title_block: proc (ctb_code_parm); 2026 2027 dcl ctb_code_parm fixed bin (35) parm; 2028 2029 /* 2030* Format the title block onto the page. If it's not a paginated report or 2031* it contains overstruck characters then return to caller. Allocate the 2032* title_block_info structure and save away our formatted lines for future 2033* placement on the coming pages. 2034**/ 2035 2036 title_block_columns_ip = format_report_info.title_block_columns_info_ptr; 2037 ftb_current_line_number = status.current_line_on_page; 2038 call format_row (ROW_TITLES, title_block_columns_ip, 2039 row_value_template_ip, GENERATE_ONE_BLANK_LINE_TRAILER, 2040 status.current_line_on_page, status.remaining_lines_on_page, 2041 formatted_page_info.title_block_length, ctb_code_parm); 2042 if ctb_code_parm ^= 0 2043 then return; 2044 2045 if ^paginated_report 2046 then return; 2047 else if page_info.page_overstrike_info_ptr ^= null () 2048 then if index (substr (page_overstrike_info_redefined.bit_map, 2049 ((ftb_current_line_number - 1) * page_info.width) + 1, 2050 page_info.width * formatted_page_info.title_block_length), ON) ^= 0 2051 then return; 2052 2053 tbi_init_line_length = page_info.width; 2054 tbi_init_number_of_lines = formatted_page_info.title_block_length; 2055 allocate title_block_info in (work_area) set (title_block_ip); 2056 2057 do ftb_loop = 1 to formatted_page_info.title_block_length; 2058 title_block_info.lines (ftb_loop) = page_defined_as_lines (ftb_current_line_number); 2059 ftb_current_line_number = ftb_current_line_number + 1; 2060 end; 2061 2062 format_report_info.title_block_info_ptr = title_block_ip; 2063 2064 return; 2065 2066 end create_title_block; 2067 2068 place_title_block: proc (ptb_code_parm); 2069 2070 dcl ptb_code_parm fixed bin (35) parm; 2071 2072 /* 2073* Place the saved away title lines onto the page. Lay down a title line 2074* and mark the template map. Repeat while we have more title lines. Set 2075* the title block length, current line on page, and remaining lines on 2076* page. 2077**/ 2078 2079 ptb_code_parm = 0; 2080 title_block_ip = format_report_info.title_block_info_ptr; 2081 ftb_current_line_number = status.current_line_on_page; 2082 2083 do ftb_loop = 1 to title_block_info.number_of_lines; 2084 if ftb_current_line_number > template_map_number_of_bits 2085 then do; 2086 ptb_code_parm = PAGE_OVERFLOW_ERROR_CODE; 2087 return; 2088 end; 2089 page_defined_as_lines (ftb_current_line_number) = title_block_info.lines (ftb_loop); 2090 template_map (ftb_current_line_number) = ON; 2091 ftb_current_line_number = ftb_current_line_number + 1; 2092 end; 2093 2094 formatted_page_info.title_block_length = title_block_info.number_of_lines; 2095 status.current_line_on_page = status.current_line_on_page + title_block_info.number_of_lines; 2096 status.remaining_lines_on_page = template_map_number_of_bits - status.current_line_on_page + 1; 2097 2098 return; 2099 2100 end place_title_block; 2101 2102 end format_title_block; 2103 2104 format_subtotals: proc ( 2105 2106 fst_subtotal_info_ptr_parm, /* input: ptr to subtotal_info structure */ 2107 fst_subtotal_columns_info_ptr_parm, /* input: ptr to subtotal_columns_info structure */ 2108 fst_subtotal_generation_info_ptr_parm, /* input: ptr to subtotal_generation_info structure */ 2109 fst_caller_parm, /* input: "row subtotal" or "row subcount" */ 2110 fst_number_of_lines_used_parm, /* output: how many lines the block used */ 2111 fst_subtotals_ejection_in_progress_parm, /* output: on when ejection starts, off after ejection complete */ 2112 fst_code_parm /* output: success or failure */ 2113 ); 2114 2115 dcl fst_caller_parm char (*) varying; 2116 dcl fst_code_parm fixed bin (35) parm; 2117 dcl fst_number_of_lines_used fixed bin; 2118 dcl fst_number_of_lines_used_parm fixed bin; 2119 dcl fst_some_column_changed bit (1) aligned; 2120 dcl 1 fst_subtotal_columns_info like subtotal_columns_info based (fst_subtotal_columns_info_ptr_parm); 2121 dcl fst_subtotal_columns_info_ptr_parm ptr parm; 2122 dcl 1 fst_subtotal_generation_info like subtotal_generation_info based (fst_subtotal_generation_info_ptr_parm); 2123 dcl fst_subtotal_generation_info_ptr_parm ptr parm; 2124 dcl 1 fst_subtotal_info like subtotal_info based (fst_subtotal_info_ptr_parm); 2125 dcl fst_subtotal_info_ptr_parm ptr parm; 2126 dcl fst_subtotals_ejection_in_progress_parm bit (1) aligned parm; 2127 dcl fst_subtotals_have_been_backed_up bit (1) aligned; 2128 dcl fst_total_lines_used fixed bin; 2129 2130 /* 2131* Walk through the subtotals level by level. Check the watch columns to see 2132* if any at the current level have changed. If any have, then back up the 2133* subtotals if they haven't been backed up already. Generate subtotals 2134* whose watch columns have changed, returning to caller if they don't fit. 2135* Set our number of lines used parm and return to caller. 2136**/ 2137 2138 fst_code_parm = 0; 2139 fst_number_of_lines_used_parm = 0; 2140 fst_total_lines_used = 0; 2141 fst_subtotals_have_been_backed_up = OFF; 2142 2143 do fst_subtotal_info.current_level = 1 to fst_subtotal_info.highest_level; 2144 call check_for_subtotal_break (fst_subtotal_info_ptr_parm, fst_subtotal_columns_info_ptr_parm, 2145 fst_subtotal_info.current_level, fst_some_column_changed); 2146 if fst_some_column_changed 2147 then do; 2148 if ^fst_subtotals_have_been_backed_up 2149 then call make_backup_of_subtotals; 2150 fst_subtotals_have_been_backed_up = ON; 2151 call generate_subtotals (fst_subtotal_info.current_level, 2152 fst_number_of_lines_used, fst_code_parm); 2153 if fst_code_parm ^= 0 2154 then return; 2155 fst_total_lines_used = fst_total_lines_used + fst_number_of_lines_used; 2156 end; 2157 end; 2158 2159 fst_number_of_lines_used_parm = fst_total_lines_used; 2160 fst_subtotals_ejection_in_progress_parm = OFF; 2161 2162 return; 2163 2164 generate_subtotals: proc ( 2165 2166 gs_level_number_parm, /* input: current subtotal level number */ 2167 gs_number_of_lines_used_parm, /* output: number of lines used */ 2168 gs_code_parm /* output: success or failure */ 2169 ); 2170 2171 dcl gs_code_parm fixed bin (35) parm; 2172 dcl gs_level_number_parm fixed bin; 2173 dcl gs_loop fixed bin; 2174 dcl gs_number_of_lines_used_parm fixed bin parm; 2175 2176 /* 2177* Use the headers temp seg for temporary storage. Walk through all of the 2178* subtotals. For each one at the current level number that isn't being 2179* outlined, format the float dec (59) into character format. Then format 2180* the row. Walk through all of the subtotals again, and for each one at 2181* the current level, restore it's editing flag to what it used to be and 2182* zero any reset subtotals. 2183**/ 2184 2185 headers_next_byte = format_report_info.headers_next_available_byte; 2186 fst_subtotals_ejection_in_progress_parm = ON; 2187 2188 do gs_loop = 1 to fst_subtotal_info.number_of_columns_to_subtotal; 2189 if gs_level_number_parm = fst_subtotal_info.columns (gs_loop).level 2190 then do; 2191 column_ip = addr (fst_subtotal_columns_info.columns 2192 (input_columns_info.columns (fst_subtotal_info.columns (gs_loop).input_column).output_column)); 2193 if ^column_info.flags.outline 2194 then call format_total_or_subtotal_into_character_format ( 2195 fst_subtotal_info.columns.subtotal (gs_loop), fst_subtotal_info.columns.ioa_string (gs_loop)); 2196 end; 2197 end; 2198 2199 call format_row (fst_caller_parm, fst_subtotal_columns_info_ptr_parm, 2200 row_value_template_ip, GENERATE_ONE_BLANK_LINE_TRAILER, 2201 status.current_line_on_page, status.remaining_lines_on_page, 2202 gs_number_of_lines_used_parm, gs_code_parm); 2203 2204 if gs_code_parm = 0 2205 then status.flags.detail_block_used_some_lines = ON; 2206 2207 do gs_loop = 1 to fst_subtotal_info.number_of_columns_to_subtotal; 2208 if gs_level_number_parm = fst_subtotal_info.columns (gs_loop).level 2209 then do; 2210 column_ip = addr (fst_subtotal_columns_info.columns (input_columns_info.columns ( 2211 fst_subtotal_info.columns (gs_loop).input_column).output_column)); 2212 column_info.flags.editing = column_info.flags.restore_editing; 2213 if ^column_info.flags.outline & fst_subtotal_info.columns (gs_loop).flags.reset 2214 then fst_subtotal_info.columns (gs_loop).subtotal = 0; 2215 end; 2216 end; 2217 2218 return; 2219 2220 end generate_subtotals; 2221 2222 make_backup_of_subtotals: proc; 2223 2224 dcl mbos_loop fixed bin; 2225 2226 /* 2227* Advance the current generation block in our circular table. Backup each subtotal. 2228**/ 2229 2230 fst_subtotal_generation_info.current_generation_block 2231 = mod (fst_subtotal_generation_info.current_generation_block + 1, 2232 fst_subtotal_generation_info.maximum_number_of_generation_blocks); 2233 2234 do mbos_loop = 1 to fst_subtotal_generation_info.number_of_subtotals; 2235 fst_subtotal_generation_info.generations 2236 (fst_subtotal_generation_info.current_generation_block).subtotals (mbos_loop) 2237 = fst_subtotal_info.columns (mbos_loop).subtotal; 2238 end; 2239 2240 return; 2241 2242 end make_backup_of_subtotals; 2243 2244 end format_subtotals; 2245 2246 format_total_or_subtotal_into_character_format: proc ( 2247 2248 ftosicf_subtotal_or_total_parm, /* input: the total or subtotal */ 2249 ftosicf_ioa_string_parm /* input: ioa_ string for editing */ 2250 ); 2251 2252 dcl ftosicf_ioa_string_parm char (*) varying parm; 2253 dcl ftosicf_length_doesnt_matter fixed bin (21); 2254 dcl ftosicf_subtotal_or_total_parm float dec (59) parm; 2255 2256 /* 2257* If the subtotal has an editing request then it's already been edited 2258* through it's parent column's editing request be the column_value request. 2259* Pick it up, or in the case of ones that don't have an editing request, 2260* edit them through ioa_ with the supplied string. Set the pointer and 2261* length to this result string, and stash the result string into the headers 2262* temp seg. Advance the next byte index, save the editing bit value, and 2263* turn on the editing bit for this column. 2264**/ 2265 2266 if column_info.flags.editing 2267 then do; 2268 editing_string_rl = column_info.editing_string_length; 2269 editing_string_rp = column_info.editing_string_ptr; 2270 input_string = editing_string_result; 2271 call evaluate_active_string (input_string, output_string); 2272 end; 2273 else call ioa_$rsnnl (ftosicf_ioa_string_parm, output_string, 2274 ftosicf_length_doesnt_matter, ftosicf_subtotal_or_total_parm); 2275 2276 column_info.editing_string_result_length = length (output_string); 2277 column_info.editing_string_result_ptr 2278 = addr (headers_temp_seg_as_an_array (headers_next_byte)); 2279 substr (headers_temp_seg, headers_next_byte, 2280 column_info.editing_string_result_length) = output_string; 2281 headers_next_byte = headers_next_byte + column_info.editing_string_result_length; 2282 column_info.flags.restore_editing = column_info.flags.editing; 2283 column_info.flags.editing = ON; 2284 2285 return; 2286 2287 end format_total_or_subtotal_into_character_format; 2288 2289 format_totals: proc ( 2290 2291 ft_total_info_ptr_parm, /* input: ptr to total_info structure */ 2292 ft_total_columns_info_ptr_parm, /* input: ptr to total_columns_info structure */ 2293 ft_caller_parm, /* input: "row total" or "row count" */ 2294 ft_number_of_lines_used_parm, /* output: number of lines used */ 2295 ft_totals_ejection_in_progress_parm, /* output: on when ejection starts, off after ejection complete */ 2296 ft_code_parm /* output: success or failure */ 2297 ); 2298 2299 dcl ft_caller_parm char (*) varying parm; 2300 dcl ft_code_parm fixed bin (35) parm; 2301 dcl ft_loop fixed bin; 2302 dcl ft_number_of_lines_used_parm fixed bin parm; 2303 dcl 1 ft_total_columns_info like total_columns_info based (ft_total_columns_info_ptr_parm); 2304 dcl ft_total_columns_info_ptr_parm ptr parm; 2305 dcl 1 ft_total_info like total_info based (ft_total_info_ptr_parm); 2306 dcl ft_total_info_ptr_parm ptr parm; 2307 dcl ft_totals_ejection_in_progress_parm bit (1) aligned parm; 2308 2309 /* 2310* Use the headers temp segment for temporary storage. For each total reach 2311* into the total_info array picking up the index to it's input column, 2312* which gives us the index into the input_columns_info array to pick up 2313* the index for the total_columns_info output column. Set the prefix to 2314* "=", turn off the outline bit, and format the total into character format. 2315* Then format the row and restore the editing bit for the columns. 2316**/ 2317 2318 ft_code_parm = 0; 2319 ft_number_of_lines_used_parm = 0; 2320 ft_totals_ejection_in_progress_parm = ON; 2321 2322 headers_next_byte = format_report_info.headers_next_available_byte; 2323 2324 do ft_loop = 1 to ft_total_info.number_of_columns_to_total; 2325 column_ip = addr (ft_total_columns_info.columns (input_columns_info.columns.output_column 2326 (ft_total_info.columns.input_column (ft_loop)))); 2327 column_info.prefix_character = "="; 2328 column_info.flags.outline = OFF; 2329 call format_total_or_subtotal_into_character_format ( 2330 ft_total_info.columns.total (ft_loop), ft_total_info.columns.ioa_string (ft_loop)); 2331 end; 2332 2333 call format_row (ft_caller_parm, ft_total_columns_info_ptr_parm, 2334 row_value_template_ip, GENERATE_ZERO_BLANK_LINES_TRAILER, 2335 status.current_line_on_page, status.remaining_lines_on_page, 2336 ft_number_of_lines_used_parm, ft_code_parm); 2337 2338 if ft_code_parm = 0 2339 then status.flags.detail_block_used_some_lines = ON; 2340 2341 do ft_loop = 1 to ft_total_columns_info.number_of_columns; 2342 ft_total_columns_info.columns (ft_loop).flags.editing 2343 = ft_total_columns_info.columns (ft_loop).flags.restore_editing; 2344 end; 2345 2346 ft_totals_ejection_in_progress_parm = OFF; 2347 2348 return; 2349 2350 end format_totals; 2351 2352 gather_counts: proc; 2353 2354 dcl gc_loop fixed bin; 2355 2356 /* 2357* If the row hasn't been processed before then add one to the count. 2358**/ 2359 2360 if status.flags.row_has_been_processed_before 2361 then return; 2362 2363 do gc_loop = 1 to count_info.number_of_columns_to_total; 2364 count_info.columns (gc_loop).total 2365 = count_info.columns (gc_loop).total + 1; 2366 end; 2367 2368 return; 2369 2370 end gather_counts; 2371 2372 gather_subcounts: proc; 2373 2374 dcl gs_loop fixed bin; 2375 2376 /* 2377* Add one to the subcount. 2378**/ 2379 2380 do gs_loop = 1 to subcount_info.number_of_columns_to_subtotal; 2381 subcount_info.columns.subtotal (gs_loop) 2382 = subcount_info.columns.subtotal (gs_loop) + 1; 2383 end; 2384 2385 return; 2386 2387 end gather_subcounts; 2388 2389 gather_subtotals: proc; 2390 2391 dcl gs_loop fixed bin; 2392 2393 /* 2394* Add in the value of the current column to the subtotal. 2395**/ 2396 2397 do gs_loop = 1 to subtotal_info.number_of_columns_to_subtotal; 2398 subtotal_info.columns (gs_loop).subtotal 2399 = subtotal_info.columns (gs_loop).subtotal 2400 + float (substr (current_row_value, 2401 table_info.columns.column_index (subtotal_info.columns.input_column (gs_loop)), 2402 table_info.columns.column_length (subtotal_info.columns.input_column (gs_loop)))); 2403 end; 2404 2405 return; 2406 2407 end gather_subtotals; 2408 2409 gather_totals: proc; 2410 2411 dcl gt_loop fixed bin; 2412 2413 /* 2414* If the row hasn't been processed before then add the current column's 2415* value into the total. 2416**/ 2417 2418 if status.flags.row_has_been_processed_before 2419 then return; 2420 2421 do gt_loop = 1 to total_info.number_of_columns_to_total; 2422 total_info.columns (gt_loop).total 2423 = total_info.columns (gt_loop).total 2424 + float (substr (current_row_value, 2425 table_info.columns.column_index (total_info.columns.input_column (gt_loop)), 2426 table_info.columns.column_length (total_info.columns.input_column (gt_loop)))); 2427 end; 2428 2429 return; 2430 2431 end gather_totals; 2432 2433 housekeeping: proc; 2434 2435 /* 2436* Move everything we need into automatic variables. 2437**/ 2438 2439 sci_ptr = lcb.subsystem_control_info_ptr; 2440 maximum_segment_size = sys_info$max_seg_size * 4; 2441 2442 report_cip = lcb.report_control_info_ptr; 2443 work_area_ptr = report_control_info.report_work_area_ptr; 2444 temp_seg_ptr = report_control_info.report_temp_seg_ptr; 2445 2446 format_report_ip = report_control_info.format_report_info_ptr; 2447 table_ip = format_report_info.table_info_ptr; 2448 row_segs_ip = table_info.row_segs_info_ptr; 2449 2450 input_columns_ip = format_report_info.input_columns_info_ptr; 2451 input_columns_op = format_report_info.input_columns_order_ptr; 2452 output_columns_ip = format_report_info.output_columns_info_ptr; 2453 2454 input_string_ptr = report_control_info.input_string_temp_seg_ptr; 2455 input_string_length = maximum_segment_size - 4; 2456 input_string = ""; 2457 input_string_non_varying_ptr = addrel (input_string_ptr, 1); 2458 input_string_non_varying_length = 0; 2459 2460 output_string_ptr = report_control_info.output_string_temp_seg_ptr; 2461 output_string_length = maximum_segment_size - 4; 2462 output_string = ""; 2463 output_string_non_varying_ptr = addrel (output_string_ptr, 1); 2464 output_string_non_varying_length = output_string_length; 2465 2466 editing_strings_tsp = report_control_info.editing_strings_temp_seg_ptr; 2467 headers_tsp = report_control_info.headers_temp_seg_ptr; 2468 2469 group_ip = format_report_info.group_info_ptr; 2470 outline_ip = format_report_info.outline_info_ptr; 2471 page_break_ip = format_report_info.page_break_info_ptr; 2472 2473 if format_report_info.flags.subtotal_is_defined 2474 then do; 2475 subtotal_ip = format_report_info.subtotal_info_ptr; 2476 subtotal_columns_ip = subtotal_info.columns_info_ptr; 2477 subtotal_generation_ip = subtotal_info.subtotal_generation_info_ptr; 2478 end; 2479 2480 if format_report_info.flags.subcount_is_defined 2481 then do; 2482 subcount_ip = format_report_info.subcount_info_ptr; 2483 subcount_columns_ip = subcount_info.columns_info_ptr; 2484 subcount_generation_ip = subcount_info.subtotal_generation_info_ptr; 2485 end; 2486 2487 if format_report_info.flags.total_is_defined 2488 then do; 2489 total_ip = format_report_info.total_info_ptr; 2490 total_columns_ip = total_info.columns_info_ptr; 2491 end; 2492 2493 if format_report_info.flags.count_is_defined 2494 then do; 2495 count_ip = format_report_info.count_info_ptr; 2496 count_columns_ip = count_info.columns_info_ptr; 2497 end; 2498 2499 format_document_options_ptr = format_report_info.format_document_op; 2500 2501 paginated_report = report_control_info.report_is_paginated; 2502 page_ip = format_report_info.copy_of_page_info_ptr; 2503 page_info = format_report_info.page_info_ptr -> page_info; 2504 page_info.page_overstrike_info_ptr = null (); 2505 page_overstrike_ip = format_report_info.overstrike_info_ptr; 2506 2507 formatted_page_ip = format_report_info.formatted_page_info_ptr; 2508 row_value_template_ip = format_report_info.row_value_template_info_ptr; 2509 template_length = page_info.width; 2510 generic_template_length = template_length; 2511 generic_tp = format_report_info.generic_template_ptr; 2512 2513 template_map_number_of_bits = page_info.length; 2514 template_mp = format_report_info.template_map_ptr; 2515 2516 truncation_indicator_length = length (format_report_info.truncation_indicator); 2517 status_pointer = format_report_info.status_ptr; 2518 2519 code = 0; 2520 2521 return; 2522 2523 end housekeeping; 2524 2525 make_ptr: proc (mp_row_number_parm) returns (ptr); 2526 2527 dcl mp_row_number_parm fixed bin (35) parm; 2528 dcl mp_segment_ptr_index fixed bin (21); 2529 dcl mp_row_ptr_index fixed bin (21); 2530 2531 /* 2532* Make an index for the segment that the row pointer lives in. Make an 2533* index for the row pointer within the segment. Make a pointer to the 2534* segment. Return the pointer for the row. 2535**/ 2536 2537 mp_segment_ptr_index = divide (mp_row_number_parm, 2538 row_segs_info.max_number_of_ptrs_per_seg, 21); 2539 if mod (mp_row_number_parm, row_segs_info.max_number_of_ptrs_per_seg) ^= 0 2540 then mp_segment_ptr_index = mp_segment_ptr_index + 1; 2541 2542 mp_row_ptr_index = mod (mp_row_number_parm, row_segs_info.max_number_of_ptrs_per_seg); 2543 if mp_row_ptr_index = 0 2544 then mp_row_ptr_index = row_segs_info.max_number_of_ptrs_per_seg; 2545 2546 row_ptrs_p = row_segs_info.seg_ptr (mp_segment_ptr_index); 2547 2548 return (row_ptrs.row_value_ptr (mp_row_ptr_index)); 2549 2550 end make_ptr; 2551 2552 make_rows_available: proc; 2553 2554 dcl mra_code fixed bin (35); 2555 dcl mra_number_of_rows_needed fixed bin (35); 2556 dcl mra_number_of_rows_retrieved fixed bin (35); 2557 2558 /* 2559* If the table is full, or we have enough rows to do this page then return. 2560* Have the rows loaded and time the operation, removing this time from our 2561* formatting time so the timers are accurate. Bump the number of rows 2562* retrieved and check for end of file on the data base setting appropriate 2563* flags. Shut things down if anything went wrong. 2564**/ 2565 2566 if report_control_info.flags.table_is_full 2567 then return; 2568 2569 mra_number_of_rows_needed = page_info.length + 1; 2570 if report_control_info.no_of_rows_retrieved - status.current_row_number > mra_number_of_rows_needed 2571 then return; 2572 2573 time1 = vclock; 2574 call linus_table$load_rows (lcb_ptr, mra_number_of_rows_needed, 2575 mra_number_of_rows_retrieved, 1, mra_code); 2576 time2 = vclock; 2577 report_control_info.table_loading_time 2578 = report_control_info.table_loading_time + (time2 - time1); 2579 report_control_info.report_formatting_time 2580 = report_control_info.report_formatting_time - (time2 - time1); 2581 2582 if mra_number_of_rows_retrieved ^= 0 2583 then report_control_info.no_of_rows_retrieved 2584 = report_control_info.no_of_rows_retrieved + mra_number_of_rows_retrieved; 2585 if mra_code ^= 0 2586 then if mra_code = mrds_error_$tuple_not_found 2587 then do; 2588 report_control_info.flags.table_is_full = ON; 2589 report_control_info.flags.table_has_just_been_loaded = ON; 2590 if status.current_row_number = report_control_info.no_of_rows_retrieved 2591 then status.flags.last_row_of_report = ON; 2592 end; 2593 else call ssu_$abort_line (sci_ptr, mra_code, 2594 "While trying to retrieve ^d rows.", mra_number_of_rows_needed); 2595 else; 2596 2597 return; 2598 2599 end make_rows_available; 2600 2601 make_row_ptrs: proc; 2602 2603 /* 2604* Make pointers to the previous, current and next rows. 2605**/ 2606 2607 status.previous_row_ptr = status.current_row_ptr; 2608 2609 status.current_row_ptr = status.next_row_ptr; 2610 if status.current_row_ptr = null () 2611 then status.current_row_ptr = make_ptr (status.current_row_number); 2612 2613 if status.flags.last_row_of_report 2614 then status.next_row_ptr = null (); 2615 else status.next_row_ptr = make_ptr (status.current_row_number + 1); 2616 2617 return; 2618 2619 end make_row_ptrs; 2620 2621 save_copy_of_page: proc; 2622 2623 dcl scop_code fixed bin (35); 2624 dcl scop_record_key char (256) varying; 2625 dcl scop_record_length fixed bin (21); 2626 dcl scop_record_number fixed bin (21); 2627 2628 /* 2629* Use the page or buffer number as the key for the record. Save a copy 2630* of the formatted page. Append ".page_info" to the page number and save the 2631* page_info structure under that key. Append ".formatted_page_info" to 2632* the page number and save the formatted_page_info structure under that 2633* key. If the page contains overstrikes then append ".page_overstrike_info" 2634* to the page number and save the page_overstrike_info structure under 2635* that key. 2636**/ 2637 2638 scop_record_number = report_control_info.no_of_formatted_pages; 2639 scop_record_key = ltrim (convert (scop_record_key, scop_record_number)); 2640 call iox_$seek_key (format_report_info.report_iocb_ptr, 2641 scop_record_key, scop_record_length, scop_code); 2642 if scop_code ^= error_table_$no_record 2643 then call ssu_$abort_line (sci_ptr, scop_code, 2644 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2645 2646 call iox_$write_record (format_report_info.report_iocb_ptr, 2647 page_info.page_ptr, page_info.total_characters, scop_code); 2648 if scop_code ^= 0 2649 then call ssu_$abort_line (sci_ptr, scop_code, 2650 "Unable to save a copy of page ^d.", scop_record_key); 2651 2652 scop_record_key = scop_record_key || ".page_info"; 2653 call iox_$seek_key (format_report_info.report_iocb_ptr, 2654 scop_record_key, scop_record_length, scop_code); 2655 if scop_code ^= error_table_$no_record 2656 then call ssu_$abort_line (sci_ptr, scop_code, 2657 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2658 2659 call iox_$write_record (format_report_info.report_iocb_ptr, 2660 page_ip, page_info.page_info_size * 4, scop_code); 2661 if scop_code ^= 0 2662 then call ssu_$abort_line (sci_ptr, scop_code, 2663 "Unable to save a copy of page ^d.", scop_record_key); 2664 2665 scop_record_key = before (scop_record_key, ".") || ".formatted_page_info"; 2666 call iox_$seek_key (format_report_info.report_iocb_ptr, 2667 scop_record_key, scop_record_length, scop_code); 2668 if scop_code ^= error_table_$no_record 2669 then call ssu_$abort_line (sci_ptr, scop_code, 2670 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2671 2672 call iox_$write_record (format_report_info.report_iocb_ptr, 2673 formatted_page_ip, currentsize (formatted_page_info) * 4, scop_code); 2674 if scop_code ^= 0 2675 then call ssu_$abort_line (sci_ptr, scop_code, 2676 "Unable to save a copy of page ^d.", scop_record_key); 2677 2678 if page_info.page_overstrike_info_ptr = null () 2679 then return; 2680 2681 scop_record_key = before (scop_record_key, ".") || ".page_overstrike_info"; 2682 call iox_$seek_key (format_report_info.report_iocb_ptr, 2683 scop_record_key, scop_record_length, scop_code); 2684 if scop_code ^= error_table_$no_record 2685 then call ssu_$abort_line (sci_ptr, scop_code, 2686 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2687 2688 call iox_$write_record (format_report_info.report_iocb_ptr, 2689 page_overstrike_ip, currentsize (page_overstrike_info) * 4, scop_code); 2690 if scop_code ^= 0 2691 then call ssu_$abort_line (sci_ptr, scop_code, 2692 "Unable to save a copy of page ^d.", scop_record_key); 2693 2694 return; 2695 2696 end save_copy_of_page; 2697 2698 setup_for_a_page: proc; 2699 2700 /* 2701* Set all of the info needed to begin a new page. 2702**/ 2703 2704 page_ip = format_report_info.copy_of_page_info_ptr; 2705 page_info = format_report_info.page_info_ptr -> page_info; 2706 page_info.page_overstrike_info_ptr = null (); 2707 page_overstrike_ip = format_report_info.overstrike_info_ptr; 2708 2709 formatted_page_info.page_header_length = 0; 2710 formatted_page_info.title_block_length = 0; 2711 formatted_page_info.page_footer_length = 0; 2712 formatted_page_info.number_of_detail_blocks = 0; 2713 unspec (formatted_page_info.detail_blocks) = OFF; 2714 2715 template_map (*) = OFF; 2716 2717 if format_report_info.number_of_formatted_rows = 0 2718 then status.flags.first_row_of_report = ON; 2719 else status.flags.first_row_of_report = OFF; 2720 status.current_row_number = format_report_info.number_of_formatted_rows + 1; 2721 if report_control_info.flags.table_is_full 2722 & report_control_info.no_of_rows_retrieved = status.current_row_number 2723 then status.flags.last_row_of_report = ON; 2724 else status.flags.last_row_of_report = OFF; 2725 status.flags.first_row_on_page = ON; 2726 status.flags.page_overflow = OFF; 2727 status.flags.subtotals_ejection_in_progress = OFF; 2728 status.flags.totals_ejection_in_progress = OFF; 2729 status.flags.header_being_evaluated = OFF; 2730 status.flags.detail_block_used_some_lines = ON; 2731 2732 status.total_number_of_rows_used = 0; 2733 if paginated_report 2734 then status.current_page_number = report_control_info.no_of_formatted_pages + 1; 2735 else status.current_page_number = 1; 2736 status.current_line_on_page = 1; 2737 status.remaining_lines_on_page = page_info.length; 2738 if status.current_row_number ^> status.highest_row_formatted 2739 then status.flags.row_has_been_processed_before = ON; 2740 else status.flags.row_has_been_processed_before = OFF; 2741 2742 return; 2743 2744 end setup_for_a_page; 2745 2746 sub_error_handler: proc; 2747 2748 dcl seh_code fixed bin (35); 2749 2750 /* 2751* Find the sub_error_info structure and if it wasn't format_document_ that 2752* signalled it then continue to signal. Set the ptr to the 2753* format_document_error structure and print the error message with added 2754* information to identify where in the report the error occured. 2755**/ 2756 2757 condition_info_ptr = addr (local_condition_info); 2758 condition_info.version = condition_info_version_1; 2759 call find_condition_info_ (null (), condition_info_ptr, seh_code); 2760 if seh_code ^= 0 2761 then call ssu_$abort_line (sci_ptr, seh_code); 2762 sub_error_info_ptr = condition_info.info_ptr; 2763 if sub_error_info.name ^= "format_document_" 2764 then do; 2765 call continue_to_signal_ (seh_code); 2766 return; 2767 end; 2768 2769 format_document_error_ptr = sub_error_info.info_ptr; 2770 if status.flags.header_being_evaluated 2771 then call ssu_$print_message (sci_ptr, linus_error_$bad_report_format, 2772 "^/Page ^d, ^a (line ^d, ^a).^/^a^x""^a""", 2773 status.current_page_number, status.object_being_evaluated, 2774 status.current_header_line, HEADER_PARTS_LABELS (status.current_header_part), 2775 sub_error_info.header.info_string, format_document_error.text_line); 2776 else call ssu_$print_message (sci_ptr, linus_error_$bad_report_format, 2777 "^/Page ^d, ^a (row ^d, ^a column).^/^a^x""^a""", 2778 status.current_page_number, status.object_being_evaluated, status.current_row_number, 2779 table_info.columns.column_name (output_columns_info.columns.input_column (status.current_column_number)), 2780 sub_error_info.header.info_string, format_document_error.text_line); 2781 2782 return; 2783 2784 end sub_error_handler; 2785 2786 dcl BACKSPACE char (1) static int options (constant) init (""); 2787 dcl BACKSPACE_OR_VERTICAL_TAB_OR_HORIZONTAL_TAB_OR_NL char (4) static int options (constant) init ("  2788 "); 2789 dcl BAR char (1) static int options (constant) init ("|"); 2790 dcl BAR_BAR char (2) static int options (constant) init ("||"); 2791 dcl BLANK char (1) static int options (constant) init (" "); 2792 dcl FILL bit (1) unaligned static int options (constant) init ("1"b); 2793 dcl FORM_FEED char (1) static int options (constant) init (" "); 2794 dcl GENERATE_ONE_BLANK_LINE_TRAILER fixed bin static int options (constant) init (1); 2795 dcl GENERATE_ZERO_BLANK_LINES_TRAILER fixed bin static int options (constant) init (0); 2796 dcl GROUP_FOOTER char (16) varying static int options (constant) init ("group footer"); 2797 dcl GROUP_HEADER char (16) varying static int options (constant) init ("group header"); 2798 dcl HEADER_PARTS_LABELS (3) char (11) varying static int options (constant) init 2799 ("left part", "center part", "right part"); 2800 dcl LEFT_BRACKET char (1) static int options (constant) init ("["); 2801 dcl LEFT_OR_RIGHT_BRACKET char (2) static int options (constant) init ("[]"); 2802 dcl LOOK_AHEAD bit (1) aligned static int options (constant) init ("1"b); 2803 dcl LOOK_BEHIND bit (1) aligned static int options (constant) init ("0"b); 2804 dcl NEWLINE char (1) static int options (constant) init (" 2805 "); 2806 dcl OFF bit (1) aligned int static options (constant) init ("0"b); 2807 dcl ON bit (1) aligned int static options (constant) init ("1"b); 2808 dcl PAGE_FOOTER char (16) varying static int options (constant) init ("page footer"); 2809 dcl PAGE_HEADER char (16) varying static int options (constant) init ("page header"); 2810 dcl PAGE_OVERFLOW_ERROR_CODE fixed bin (35) static int options (constant) init (1); 2811 dcl ROW_COUNT char (16) varying static int options (constant) init ("row count"); 2812 dcl ROW_FOOTER char (16) varying static int options (constant) init ("row footer"); 2813 dcl ROW_HEADER char (16) varying static int options (constant) init ("row header"); 2814 dcl ROW_SUBCOUNT char (16) varying static int options (constant) init ("row subcount"); 2815 dcl ROW_SUBTOTAL char (16) varying static int options (constant) init ("row subtotal"); 2816 dcl ROW_TITLES char (16) varying static int options (constant) init ("row titles"); 2817 dcl ROW_TOTAL char (16) varying static int options (constant) init ("row total"); 2818 dcl ROW_VALUE char (16) varying static int options (constant) init ("row value"); 2819 2820 dcl addr builtin; 2821 dcl addrel builtin; 2822 2823 dcl before builtin; 2824 2825 dcl code fixed bin (35); 2826 dcl copy builtin; 2827 dcl continue_to_signal_ entry (fixed bin(35)); 2828 dcl convert builtin; 2829 dcl currentsize builtin; 2830 2831 dcl divide builtin; 2832 2833 dcl eas_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2834 dcl error_table_$badcall fixed bin(35) ext static; 2835 dcl error_table_$no_record fixed bin(35) ext static; 2836 dcl error_table_$recoverable_error fixed bin(35) ext static; 2837 dcl error_table_$unbalanced_brackets fixed bin(35) ext static; 2838 2839 dcl fc_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2840 dcl find_condition_info_ entry (ptr, ptr, fixed bin(35)); 2841 dcl first_time_through_the_detail_block_loop bit (1) aligned; 2842 dcl fixed builtin; 2843 dcl float builtin; 2844 dcl format_document_$string entry (char(*), char(*), fixed bin(21), ptr, fixed bin(35)); 2845 dcl fr_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2846 2847 dcl index builtin; 2848 dcl input_string char (input_string_length) varying based (input_string_ptr); 2849 dcl input_string_length fixed bin (21); 2850 dcl input_string_ptr ptr; 2851 dcl input_string_non_varying char (input_string_non_varying_length) based (input_string_non_varying_ptr); 2852 dcl input_string_non_varying_length fixed bin (21); 2853 dcl input_string_non_varying_ptr ptr; 2854 dcl ioa_$rsnnl entry() options(variable); 2855 dcl iox_$write_record entry (ptr, ptr, fixed bin(21), fixed bin(35)); 2856 dcl iox_$seek_key entry (ptr, char(256) var, fixed bin(21), fixed bin(35)); 2857 2858 dcl length builtin; 2859 dcl linus_error_$bad_report_format fixed bin(35) ext static; 2860 dcl linus_table$load_rows entry (ptr, fixed bin(35), fixed bin(35), fixed bin(35), fixed bin (35)); 2861 dcl 1 local_condition_info like condition_info; 2862 dcl ltrim builtin; 2863 2864 dcl min builtin; 2865 dcl mod builtin; 2866 dcl mrds_error_$tuple_not_found fixed bin(35) ext static; 2867 2868 dcl null builtin; 2869 2870 dcl output_string char (output_string_length) varying based (output_string_ptr); 2871 dcl output_string_length fixed bin (21); 2872 dcl output_string_ptr ptr; 2873 dcl output_string_non_varying char (output_string_non_varying_length) based (output_string_non_varying_ptr); 2874 dcl output_string_non_varying_length fixed bin (21); 2875 dcl output_string_non_varying_ptr ptr; 2876 dcl 1 output_string_redefined based (output_string_ptr), 2877 2 length_word fixed bin (35) aligned, 2878 2 frobus char (output_string_non_varying_length) unaligned; 2879 2880 dcl paginated_report bit (1) aligned; 2881 dcl pc_column_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2882 2883 dcl rel builtin; 2884 dcl rtrim builtin; 2885 2886 dcl search builtin; 2887 dcl sci_ptr ptr; 2888 dcl ssu_$abort_line entry() options(variable); 2889 dcl ssu_$evaluate_active_string entry (ptr, ptr, char(*), fixed bin, char(*) var, fixed bin(35)); 2890 dcl ssu_$print_message entry() options(variable); 2891 dcl sub_error_ condition; 2892 dcl substr builtin; 2893 dcl sys_info$max_seg_size fixed bin(35) ext static; 2894 2895 dcl temp_seg_ptr ptr; 2896 dcl time1 float bin (63); 2897 dcl time2 float bin (63); 2898 dcl translate builtin; 2899 dcl truncation_indicator_length fixed bin; 2900 2901 dcl unspec builtin; 2902 2903 dcl vclock builtin; 2904 2905 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 2906 dcl work_area_ptr ptr; 2907 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 */ 2908 2909 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 */ 2910 2911 3 1 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 3 2 3 3 /* Structure for find_condition_info_. 3 4* 3 5* Written 1-Mar-79 by M. N. Davidoff. 3 6**/ 3 7 3 8 /* automatic */ 3 9 3 10 declare condition_info_ptr pointer; 3 11 3 12 /* based */ 3 13 3 14 declare 1 condition_info aligned based (condition_info_ptr), 3 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 3 16 2 version fixed binary, /* Must be 1 */ 3 17 2 condition_name char (32) varying, /* name of condition */ 3 18 2 info_ptr pointer, /* pointer to the condition data structure */ 3 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 3 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 3 21 2 flags unaligned, 3 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 3 23 3 pad1 bit (35), 3 24 2 pad2 bit (36), 3 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 3 26 2 pad3 (4) bit (36); 3 27 3 28 /* internal static */ 3 29 3 30 declare condition_info_version_1 3 31 fixed binary internal static options (constant) initial (1); 3 32 3 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 2912 2913 4 1 /* BEGIN INCLUDE FILE condition_info_header.incl.pl1 BIM 1981 */ 4 2 /* format: style2 */ 4 3 4 4 declare condition_info_header_ptr 4 5 pointer; 4 6 declare 1 condition_info_header 4 7 aligned based (condition_info_header_ptr), 4 8 2 length fixed bin, /* length in words of this structure */ 4 9 2 version fixed bin, /* version number of this structure */ 4 10 2 action_flags aligned, /* tell handler how to proceed */ 4 11 3 cant_restart bit (1) unaligned, /* caller doesn't ever want to be returned to */ 4 12 3 default_restart bit (1) unaligned, /* caller can be returned to with no further action */ 4 13 3 quiet_restart bit (1) unaligned, /* return, and print no message */ 4 14 3 support_signal bit (1) unaligned, /* treat this signal as if the signalling procedure had the support bit set */ 4 15 /* if the signalling procedure had the support bit set, do the same for its caller */ 4 16 3 pad bit (32) unaligned, 4 17 2 info_string char (256) varying, /* may contain printable message */ 4 18 2 status_code fixed bin (35); /* if^=0, code interpretable by com_err_ */ 4 19 4 20 /* END INCLUDE FILE condition_info_header.incl.pl1 */ 2914 2915 5 1 /* BEGIN INCLUDE FILE ... cp_active_string_types.incl.pl1 */ 5 2 /* Created: 5 May 1980 by G. Palter */ 5 3 5 4 /* Types of active strings recognized by active string evaluation entries of the Multics command processor */ 5 5 5 6 dcl (DEFAULT_ACTIVE_STRING initial (0), /* default type: same as NORMAL_ACTIVE_STRING */ 5 7 NORMAL_ACTIVE_STRING initial (1), /* normal active string: [...] */ 5 8 TOKENS_ONLY_ACTIVE_STRING initial (2), /* rescan active string for whitespace and quotes: |[...] */ 5 9 ATOMIC_ACTIVE_STRING initial (3)) /* do not rescan anything in value: ||[...] */ 5 10 fixed binary static options (constant); 5 11 5 12 /* END INCLUDE FILE ... cp_active_string_types.incl.pl1 */ 2916 2917 6 1 /* BEGIN INCLUDE FILE format_document_error.incl.pl1 6 2* 6 3* Information structure used by format_document_ in calls to sub_err_. 6 4* 6 5* Written 83.03.03 by Paul W. Benjamin 6 6* 6 7**/ 6 8 6 9 dcl 1 format_document_error aligned based (format_document_error_ptr), 6 10 2 version_number fixed bin, /* format_document_error_version_1 */ 6 11 2 error_code fixed bin (35), /* which error has occurred? */ 6 12 2 line_number fixed bin, /* and on what line? */ 6 13 2 text_line char (128) varying; /* the offending line (or first 128 chars) */ 6 14 6 15 dcl format_document_error_ptr ptr; 6 16 dcl format_document_error_version_1 fixed bin int static options (constant) init (1); 6 17 6 18 /* END INCLUDE FILE format_document_error.incl.pl1 */ 2918 2919 7 1 /* BEGIN INCLUDE FILE format_document_options.incl.pl1 7 2* 7 3* Modified 82.10.18 by Paul W. Benjamin to add dont_compress_sw and upgrade 7 4* to version_2. 7 5* Modified 83.02.15 by PWB to add break_word_sw and max_line_length_sw. 7 6* Modified 83.03.01 by PWB to add dont_break_indented_lines_sw. 7 7* Modified 83.03.03 by PWB to add sub_err_sw. 7 8* Modified 83.06.07 by PWB to add dont_fill_sw. 7 9* Modified 83.06.09 by PWB to add hyphenation_sw and syllable_size. 7 10**/ 7 11 7 12 dcl 1 format_document_options aligned based (format_document_options_ptr), 7 13 2 version_number fixed bin, /* input */ 7 14 /* must be format_document_version_2 */ 7 15 2 indentation fixed bin, /* input */ 7 16 /* all lines must be indented by this value */ 7 17 2 line_length fixed bin, /* input */ 7 18 /* initial line length */ 7 19 2 switches, 7 20 3 pgno_sw bit (1) unal, /* input */ 7 21 /* end each page with a centered page number */ 7 22 3 adj_sw bit (1) unal, /* input */ 7 23 /* adjust mode initially on */ 7 24 /* only meaningful if dont_fill_sw = "0"b */ 7 25 3 galley_sw bit (1) unal, /* input */ 7 26 /* galley mode -- no page breaks */ 7 27 3 error_sw bit (1) unal, /* input */ 7 28 /* report all errors on error_output */ 7 29 3 literal_sw bit (1) unal, /* input */ 7 30 /* "1"b - interpret all lines as text */ 7 31 /* "0"b - lines that start with "." are controls */ 7 32 3 file_sw bit (1) unal, /* output */ 7 33 /* has meaning for non-zero storage system status codes */ 7 34 /* "1"b code refers to output file */ 7 35 /* "0"b code refers to input file */ 7 36 3 dont_compress_sw bit (1) unal, /* input */ 7 37 /* "1"b - don't compress white space */ 7 38 /* "0"b - compress white space when filling */ 7 39 3 break_word_sw bit (1) unal, /* input */ 7 40 /* "1"b - break a word rather than exceed line_length */ 7 41 /* "0"b - write an overlength line if no spaces found */ 7 42 3 max_line_length_sw bit (1) unal, /* input */ 7 43 /* "1"b - line_length cannot be exceeded */ 7 44 /* "0"b - line_length can be exceeded (by .pdw controls) */ 7 45 3 dont_break_indented_lines_sw /* input */ 7 46 bit (1) unal, /* don't break a line that begins with whitespace */ 7 47 /* when it is the last line, or the next line is */ 7 48 /* null or the next line begins with whitespace */ 7 49 3 sub_err_sw bit (1) unal, /* input */ 7 50 /* quietly call sub_err_ with diagnostic errors */ 7 51 3 dont_fill_sw bit (1) unal, /* input */ 7 52 /* "1"b - fill mode off initially */ 7 53 /* "0"b - fill mode on initially */ 7 54 3 hyphenation_sw bit (1) unal, 7 55 3 mbz bit (23) unal, /* input */ 7 56 /* MUST be zero */ 7 57 2 syllable_size 7 58 fixed bin; /* input */ 7 59 /* smallest portion of word */ 7 60 /* to be left by hyphenation */ 7 61 7 62 dcl format_document_options_ptr ptr; 7 63 dcl format_document_version_2 fixed bin int static options (constant) init (2); 7 64 dcl format_document_version_1 fixed bin int static options (constant) init (1); 7 65 7 66 /* END INCLUDE FILE format_document_options.incl.pl1 */ 2920 2921 8 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 8 2 8 3 8 4 8 5 /****^ HISTORY COMMENTS: 8 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 8 7* install(86-07-29,MR12.0-1106): 8 8* Added general_work_area_ptr and renamed sfr_ptr to 8 9* force_retrieve_scope_ptr. 8 10* END HISTORY COMMENTS */ 8 11 8 12 8 13 /* HISTORY: 8 14* 8 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 8 16* 8 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 8 18* a part of the attribute level control work. 8 19* 8 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 8 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 8 22* scope information. 8 23* 8 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 8 25* retaining various vcpu times to be collected when in timing mode. The 8 26* times to be collected are: LINUS parsing time, LINUS processing time, and 8 27* MRDS processing time. 8 28* 8 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 8 30* part of the line numbering implementation. This allows for possible later 8 31* LINUS control of the build defaults. 8 32* 8 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 8 34* information is now retained by ssu_. Removed parse_timer as no longer 8 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 8 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 8 37* 8 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 8 39* subsystem_invocation_level, and selection_expression_identifier. 8 40* 8 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 8 42* table_control_info_ptr. 8 43* 8 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 8 45* 8 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 8 47* 8 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 8 49* 8 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 8 51**/ 8 52 8 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 8 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 8 55 2 rb_len fixed bin (21), /* length of request buffer */ 8 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 8 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 8 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 8 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 8 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 8 61 2 test_flag bit (1) unal, /* on if in test mode */ 8 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 8 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 8 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 8 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 8 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 8 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 8 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 8 69 2 reserved bit (27) unal, 8 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 8 71 2 rb_ptr ptr, /* ptr to request buffer */ 8 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 8 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 8 74 2 ttn_ptr ptr, /* pointer to table info structure */ 8 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 8 76 2 lv_ptr ptr, /* pointer linus variables */ 8 77 2 si_ptr ptr, /* pointer to select_info structure */ 8 78 2 setfi_ptr ptr, /* pointer to set function information */ 8 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 8 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 8 81 2 lit_ptr ptr, /* pointer to literal pool */ 8 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 8 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 8 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 8 85* (MR7.0) */ 8 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 8 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 8 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 8 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 8 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 8 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 8 92* for current lila expression */ 8 93 2 unused_timer float bin (63), /* future expansion */ 8 94 2 request_time float bin (63), /* How much request time was spent 8 95* in LINUS. (-1 = user has just enabled 8 96* timing, do not report) */ 8 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 8 98 2 build_increment fixed bin, /* default increment for build mode */ 8 99 2 build_start fixed bin, /* default start count for build mode */ 8 100 2 linus_version char (4), /* current version of LINUS */ 8 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 8 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 8 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 8 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 8 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 8 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 8 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 8 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 8 109 2 word_pad (6) bit (36) unal, 8 110 /* procedures that will be optionally */ 8 111 /* replaced by the user. Saved so they */ 8 112 /* can be reinstated if desired. */ 8 113 2 ssu_abort_line entry options (variable), 8 114 2 ssu_post_request_line variable entry (ptr), 8 115 2 ssu_pre_request_line variable entry (ptr), 8 116 8 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 8 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 8 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 8 120 8 121 dcl lcb_ptr ptr; 8 122 8 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 2922 2923 9 1 /* BEGIN INCLUDE FILE linus_options_extents.incl.pl1 9 2* 9 3* Extents for the formatting options used for producing reports. 9 4* Kept as a separate include so that some programs may include this 9 5* file without including linus_format_options.incl.pl1 9 6* 9 7* Al Dupuis - August 1983 9 8* 9 9**/ 9 10 /* format: off */ 9 11 9 12 /* The three types of format options that we have. */ 9 13 9 14 dcl GENERAL_REPORT_OPTION fixed bin static int options (constant) init (1); 9 15 dcl GENERAL_COLUMN_OPTION fixed bin static int options (constant) init (2); 9 16 dcl SPECIFIC_COLUMN_OPTION fixed bin static int options (constant) init (3); 9 17 9 18 /* Used to determine how big the tables are without doing a hbound on it. */ 9 19 9 20 dcl NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (15); 9 21 dcl NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE fixed bin static int options (constant) init (9); 9 22 dcl NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (6); 9 23 9 24 /* Used to determine how much space is needed to list them. */ 9 25 9 26 dcl LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (10); /* -alignment */ 9 27 dcl LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH fixed bin static int options (constant) init (25); /* -format_document_controls */ 9 28 dcl LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (21); /* -group_footer_trigger */ 9 29 9 30 /* MAXIMUM_OPTION_IDENTIFIER_LENGTH + MAXIMUM_OPTION_NAME_LENGTH */ 9 31 9 32 dcl MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH fixed bin static int options (constant) init (101); 9 33 9 34 dcl MAXIMUM_OPTION_IDENTIFIER_LENGTH fixed bin static int options (constant) init (69); 9 35 dcl MAXIMUM_OPTION_NAME_LENGTH fixed bin static int options (constant) init (32); 9 36 dcl MAXIMUM_OPTION_VALUE_LENGTH fixed bin static int options (constant) init (4096); 9 37 9 38 /* Used to index into the OPTIONS tables defined in linus_format_options.incl.pl1. */ 9 39 9 40 dcl INDEX_FOR_DELIMITER fixed bin static int options (constant) init (1); 9 41 dcl INDEX_FOR_FORMAT_DOCUMENT_CONTROLS fixed bin static int options (constant) init (2); 9 42 dcl INDEX_FOR_HYPHENATION fixed bin static int options (constant) init (3); 9 43 dcl INDEX_FOR_PAGE_FOOTER_VALUE fixed bin static int options (constant) init (4); 9 44 dcl INDEX_FOR_PAGE_HEADER_VALUE fixed bin static int options (constant) init (5); 9 45 dcl INDEX_FOR_PAGE_LENGTH fixed bin static int options (constant) init (6); 9 46 dcl INDEX_FOR_PAGE_WIDTH fixed bin static int options (constant) init (7); 9 47 dcl INDEX_FOR_TITLE_LINE fixed bin static int options (constant) init (8); 9 48 dcl INDEX_FOR_TRUNCATION fixed bin static int options (constant) init (9); 9 49 9 50 dcl INDEX_FOR_COLUMN_ORDER fixed bin static int options (constant) init (1); 9 51 dcl INDEX_FOR_COUNT fixed bin static int options (constant) init (2); 9 52 dcl INDEX_FOR_EXCLUDE fixed bin static int options (constant) init (3); 9 53 dcl INDEX_FOR_GROUP fixed bin static int options (constant) init (4); 9 54 dcl INDEX_FOR_GROUP_FOOTER_TRIGGER fixed bin static int options (constant) init (5); 9 55 dcl INDEX_FOR_GROUP_FOOTER_VALUE fixed bin static int options (constant) init (6); 9 56 dcl INDEX_FOR_GROUP_HEADER_TRIGGER fixed bin static int options (constant) init (7); 9 57 dcl INDEX_FOR_GROUP_HEADER_VALUE fixed bin static int options (constant) init (8); 9 58 dcl INDEX_FOR_OUTLINE fixed bin static int options (constant) init (9); 9 59 dcl INDEX_FOR_PAGE_BREAK fixed bin static int options (constant) init (10); 9 60 dcl INDEX_FOR_ROW_FOOTER_VALUE fixed bin static int options (constant) init (11); 9 61 dcl INDEX_FOR_ROW_HEADER_VALUE fixed bin static int options (constant) init (12); 9 62 dcl INDEX_FOR_SUBCOUNT fixed bin static int options (constant) init (13); 9 63 dcl INDEX_FOR_SUBTOTAL fixed bin static int options (constant) init (14); 9 64 dcl INDEX_FOR_TOTAL fixed bin static int options (constant) init (15); 9 65 9 66 dcl INDEX_FOR_ALIGNMENT fixed bin static int options (constant) init (1); 9 67 dcl INDEX_FOR_EDITING fixed bin static int options (constant) init (2); 9 68 dcl INDEX_FOR_FOLDING fixed bin static int options (constant) init (3); 9 69 dcl INDEX_FOR_SEPARATOR fixed bin static int options (constant) init (4); 9 70 dcl INDEX_FOR_TITLE fixed bin static int options (constant) init (5); 9 71 dcl INDEX_FOR_WIDTH fixed bin static int options (constant) init (6); 9 72 9 73 /* END INCLUDE FILE linus_options_extents */ 2924 2925 10 1 /* BEGIN INCLUDE FILE linus_page_info.incl.pl1 10 2* 10 3* Written - Al Dupuis - August 1983 10 4**/ 10 5 /* format: off */ 10 6 10 7 dcl 1 formatted_page_info aligned based (formatted_page_ip), 10 8 2 maximum_number_of_detail_blocks fixed bin, /* the most that can appear on a page */ 10 9 2 page_header_length fixed bin, /* page header in lines */ 10 10 2 title_block_length fixed bin, /* titles in lines */ 10 11 2 page_footer_length fixed bin, /* page footer in lines */ 10 12 2 number_of_detail_blocks fixed bin, 10 13 2 detail_blocks (fpi_init_maximum_number_of_detail_blocks 10 14 refer (formatted_page_info.maximum_number_of_detail_blocks)), 10 15 3 row_number fixed bin (35), /* position in the table */ 10 16 3 beginning_line_number fixed bin, /* beginning line on page */ 10 17 3 group_header_length fixed bin, /* group header length in lines */ 10 18 3 row_header_length fixed bin, /* row header in lines */ 10 19 3 row_length fixed bin, /* row value in lines */ 10 20 3 subtotal_length fixed bin, /* subtotal in lines */ 10 21 3 subcount_length fixed bin, /* subcount in lines */ 10 22 3 total_length fixed bin, /* total in lines */ 10 23 3 count_length fixed bin, /* count in lines */ 10 24 3 row_footer_length fixed bin, /* row footer in lines */ 10 25 3 group_footer_length fixed bin; /* group footer length in lines */ 10 26 dcl formatted_page_ip ptr; 10 27 dcl fpi_init_maximum_number_of_detail_blocks fixed bin; 10 28 10 29 dcl 1 page_info aligned based (page_ip), 10 30 2 width fixed bin, /* width in chars */ 10 31 2 length fixed bin, /* length in lines */ 10 32 2 total_characters fixed bin (21), /* width * length */ 10 33 2 page_info_size fixed bin, /* size of this structure in words */ 10 34 2 page_ptr ptr, /* points to the actual page */ 10 35 2 page_overstrike_info_ptr ptr, /* points to the overstrike info */ 10 36 2 formatted_page_info_ptr ptr; /* points to formatted_page_info */ 10 37 10 38 dcl page_defined_as_chars (page_info.total_characters) char (1) based (page_info.page_ptr); 10 39 dcl page_defined_as_lines (page_info.length) char (page_info.width) based (page_info.page_ptr); 10 40 dcl page_defined_as_a_string char (page_info.total_characters) based (page_info.page_ptr); 10 41 dcl page_ip ptr; 10 42 10 43 dcl 1 page_overstrike_info aligned based (page_overstrike_ip), 10 44 2 number_of_bits_or_chars fixed bin (21), /* number of chars in the page */ 10 45 2 bit_map (page_info.total_characters /* on means this char on the page is overstruck */ 10 46 refer (page_overstrike_info.number_of_bits_or_chars)) bit (1) unaligned, 10 47 2 chars (page_info.total_characters /* this is the overstrike character */ 10 48 refer (page_overstrike_info.number_of_bits_or_chars)) char (1) unaligned; 10 49 dcl page_overstrike_ip ptr; 10 50 10 51 dcl 1 page_overstrike_info_redefined aligned based (page_overstrike_ip), 10 52 2 number_of_bits_or_chars fixed bin (21), 10 53 2 bit_map bit (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned, 10 54 2 chars char (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned; 10 55 10 56 /* END INCLUDE FILE linus_page_info.incl.pl1 */ 2926 2927 11 1 /* BEGIN INCLUDE FILE linus_report_info.incl.pl1 11 2* Information needed to control the report environment. 11 3* Al Dupuis - August 1983 11 4**/ 11 5 /* format: off */ 11 6 11 7 dcl 1 report_control_info aligned based (report_cip), 11 8 2 flags, 11 9 3 report_is_paginated bit (1) unaligned, /* paged or one continous stream */ 11 10 3 table_has_been_started bit (1) unaligned, /* table clean up is necessary */ 11 11 3 table_is_full bit (1) unaligned, /* no more retrieves are necessary */ 11 12 3 report_has_been_started bit (1) unaligned, /* report clean up is necessary */ 11 13 3 report_is_formatted bit (1) unaligned, /* no more formatting is necessary */ 11 14 3 permanent_report bit (1) unaligned, /* or disposable */ 11 15 3 permanent_table bit (1) unaligned, /* or disposable */ 11 16 3 report_has_just_been_completed bit (1) unaligned, /* used for printing timers */ 11 17 3 table_has_just_been_loaded bit (1) unaligned, /* used for printing timers */ 11 18 3 multi_pass_mode bit (1) unaligned, /* on if we are to do more than 1 pass */ 11 19 3 available bit (26) unaligned, 11 20 2 format_options_flags, /* used to determine if value is default */ 11 21 3 general_report_default_value (NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE) bit (1) unaligned, 11 22 3 general_column_default_value (NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE) bit (1) unaligned, 11 23 2 value_seg_ptr ptr, /* the options value seg */ 11 24 2 name_value_area_ptr ptr, /* area for name-value allocations */ 11 25 2 name_value_temp_seg_ptr ptr, /* temp seg for name-value space */ 11 26 2 display_work_area_ptr ptr, /* display workspace */ 11 27 2 report_temp_seg_ptr ptr, /* report workspace */ 11 28 2 report_work_area_ptr ptr, /* report workspace */ 11 29 2 format_report_info_ptr ptr, /* info needed to create a report */ 11 30 2 input_string_temp_seg_ptr ptr, /* report workspace */ 11 31 2 output_string_temp_seg_ptr ptr, /* report workspace */ 11 32 2 editing_strings_temp_seg_ptr ptr, /* report workspace */ 11 33 2 headers_temp_seg_ptr ptr, /* report workspace */ 11 34 2 display_iocb_ptr ptr, /* report is displayed through this */ 11 35 2 selection_expression_identifier fixed bin, /* current selection expression */ 11 36 2 options_identifier fixed bin, /* current set of options */ 11 37 2 report_identifier fixed bin, /* current report */ 11 38 2 retrieval_identifier fixed bin, /* current retrieval */ 11 39 2 no_of_rows_retrieved fixed bin (35), /* current no of rows */ 11 40 2 no_of_formatted_pages fixed bin (21), /* current no of pages */ 11 41 2 number_of_passes fixed bin, /* number of times report will be formatted */ 11 42 2 table_loading_time float bin (63), 11 43 2 table_sorting_time float bin (63), 11 44 2 table_deletion_time float bin (63), 11 45 2 report_setup_time float bin (63), 11 46 2 report_formatting_time float bin (63), 11 47 2 report_display_time float bin (63), 11 48 2 report_deletion_time float bin (63), 11 49 2 ssu_evaluate_active_string_time float bin (63), 11 50 2 temp_dir_unique_id bit (36), /* uid of temp dir */ 11 51 2 temp_dir_name char (168) unaligned; /* the dir where we place the retrieved table and report */ 11 52 dcl report_cip ptr init (null ()); 11 53 11 54 /* END INCLUDE FILE linus_report_info.incl.pl1 */ 2928 2929 12 1 /* BEGIN INCLUDE FILE linus_report_structures.incl.pl1 12 2* 12 3* Written - Al Dupuis - August 1983 12 4**/ 12 5 /* format: off */ 12 6 12 7 /* Used in column_info.alignment and column_info.linus_data_type */ 12 8 12 9 dcl BIT_DATA_TYPE fixed bin static int options (constant) init (1); 12 10 dcl BOTH_ALIGNMENT fixed bin static int options (constant) init (1); 12 11 dcl CENTER_ALIGNMENT fixed bin static int options (constant) init (2); 12 12 dcl CHAR_DATA_TYPE fixed bin static int options (constant) init (2); 12 13 dcl DECIMAL_ALIGNMENT fixed bin static int options (constant) init (3); 12 14 dcl DECIMAL_DATA_TYPE fixed bin static int options (constant) init (3); 12 15 dcl LEFT_ALIGNMENT fixed bin static int options (constant) init (4); 12 16 dcl NUMERIC_DATA_TYPE fixed bin static int options (constant) init (4); 12 17 dcl RIGHT_ALIGNMENT fixed bin static int options (constant) init (5); 12 18 12 19 dcl 1 column_info aligned based (column_ip), 12 20 2 flags, 12 21 3 folding_is_fill bit (1) unaligned, /* fill or truncate */ 12 22 3 outline bit (1) unaligned, /* on means the display has been suppressed */ 12 23 3 editing bit (1) unaligned, /* on means there is an editing request */ 12 24 3 restore_editing bit (1) unaligned, /* used to toggle the editing bit */ 12 25 3 available bit (32) unaligned, 12 26 2 order fixed bin, /* as specified by the user */ 12 27 2 input_column fixed bin, /* # of the column in the table */ 12 28 2 output_column fixed bin, /* # of the column on the page */ 12 29 2 output_line fixed bin, /* within the block */ 12 30 2 starting_position fixed bin, /* within the page width */ 12 31 2 width fixed bin, /* in characters */ 12 32 2 alignment fixed bin, /* set to one of the above alignment constants */ 12 33 2 decimal_position fixed bin, /* only needed for decimal alignment */ 12 34 2 linus_data_type fixed bin, /* set to one of the above data type constants */ 12 35 2 editing_string_length fixed bin (21), /* before evaluation */ 12 36 2 editing_string_result_length fixed bin (21), /* after evaluation */ 12 37 2 editing_string_ptr ptr, /* before evaluation */ 12 38 2 editing_string_result_ptr ptr, /* after evaluation */ 12 39 2 prefix_character char (1) varying; /* column prefix */ 12 40 dcl column_ip ptr; 12 41 12 42 dcl 1 columns_info aligned based (columns_ip), /* an array of column_info's */ 12 43 2 number_of_columns fixed bin, 12 44 2 columns (initialize_number_of_columns 12 45 refer (columns_info.number_of_columns)) like column_info; 12 46 dcl columns_ip ptr; 12 47 12 48 dcl 1 column_map (column_map_number_of_columns) aligned based (column_mp), 12 49 2 present bit (1), /* the column is present in the list */ 12 50 2 position fixed bin; /* position where this column was found in the list */ 12 51 dcl column_map_number_of_columns fixed bin; 12 52 dcl column_mp ptr; 12 53 12 54 dcl 1 count_columns_info like columns_info based (count_columns_ip); 12 55 dcl count_columns_ip ptr; 12 56 12 57 dcl 1 count_info like total_info based (count_ip); 12 58 dcl count_ip ptr; 12 59 12 60 /* Used to access the current row from the table */ 12 61 dcl current_row_value char (table_info.row_value_length) based (status.current_row_ptr); 12 62 12 63 /* Used to pick up the value before or after evaluation */ 12 64 dcl editing_string_result char (editing_string_rl) based (editing_string_rp); 12 65 dcl editing_string_rl fixed bin; 12 66 dcl editing_string_rp ptr; 12 67 12 68 dcl editing_strings_next_byte fixed bin (21); 12 69 /* Used to store editing strings before and after evaluation. */ 12 70 dcl editing_strings_temp_seg char (maximum_segment_size) based (editing_strings_tsp); 12 71 dcl editing_strings_temp_seg_as_an_array (maximum_segment_size) char (1) based (editing_strings_tsp); 12 72 dcl editing_strings_tsp ptr; 12 73 12 74 dcl 1 format_report_info aligned based (format_report_ip), 12 75 2 flags, 12 76 3 unlimited_page_length bit (1) unaligned, /* -page_length equal to zero */ 12 77 3 unlimited_page_width bit (1) unaligned, /* -page_width equal to zero */ 12 78 3 page_header_is_defined bit (1) unaligned, /* -page_header_value */ 12 79 3 group_header_is_defined bit (1) unaligned, /* -group_header_value */ 12 80 3 group_header_trigger_is_defined bit (1) unaligned, /* -group_header_trigger */ 12 81 3 title_block_is_defined bit (1) unaligned, /* -title_line */ 12 82 3 row_header_is_defined bit (1) unaligned, /* -row_header_value */ 12 83 3 row_value_is_defined bit (1) unaligned, /* if all of the columns weren't excluded */ 12 84 3 row_footer_is_defined bit (1) unaligned, /* -row_footer_value */ 12 85 3 group_footer_is_defined bit (1) unaligned, /* -group_footer_value */ 12 86 3 group_footer_trigger_is_defined bit (1) unaligned, /* -group_footer_trigger */ 12 87 3 page_footer_is_defined bit (1) unaligned, /* -page_footer_value */ 12 88 3 editing_is_defined bit (1) unaligned, /* -editing */ 12 89 3 exclude_is_defined bit (1) unaligned, /* -exclude */ 12 90 3 group_is_defined bit (1) unaligned, /* -group */ 12 91 3 outline_is_defined bit (1) unaligned, /* -outline */ 12 92 3 page_break_is_defined bit (1) unaligned, /* -page_break */ 12 93 3 subtotal_is_defined bit (1) unaligned, /* -subtotal */ 12 94 3 subcount_is_defined bit (1) unaligned, /* -subcount */ 12 95 3 total_is_defined bit (1) unaligned, /* -total */ 12 96 3 count_is_defined bit (1) unaligned, /* -count */ 12 97 3 available bit (15) unaligned, 12 98 2 page_width fixed bin, /* as given by the user */ 12 99 2 page_length fixed bin, /* as given by the user */ 12 100 2 number_of_formatted_rows fixed bin (35), /* updated at the end of each page */ 12 101 2 editing_strings_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 12 102 2 headers_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 12 103 2 report_iocb_ptr ptr, /* for saving copies of the page */ 12 104 2 table_info_ptr ptr, /* to avoid repetitive calls to linus_table$info */ 12 105 2 format_document_op ptr, /* format_document_options structure */ 12 106 2 page_info_ptr ptr, /* page_info structure */ 12 107 2 copy_of_page_info_ptr ptr, /* version of page_info structure that can be changed */ 12 108 /* after each page */ 12 109 2 formatted_page_info_ptr ptr, /* formatted_page_info structure */ 12 110 2 overstrike_info_ptr ptr, /* page_overstrike_info structure */ 12 111 2 status_ptr ptr, /* status structure */ 12 112 2 template_map_ptr ptr, /* template_map array */ 12 113 2 page_header_info_ptr ptr, /* header_info structure */ 12 114 2 page_footer_info_ptr ptr, /* header_info structure */ 12 115 2 group_header_info_ptr ptr, /* header_info structure */ 12 116 2 group_footer_info_ptr ptr, /* header_info structure */ 12 117 2 group_header_trigger_info_ptr ptr, /* group_info structure */ 12 118 2 group_footer_trigger_info_ptr ptr, /* group_info structure */ 12 119 2 row_header_info_ptr ptr, /* header_info structure */ 12 120 2 row_footer_info_ptr ptr, /* header_info structure */ 12 121 2 title_block_columns_info_ptr ptr, /* title_block_columns_info structure */ 12 122 2 title_block_info_ptr ptr, /* title_block_info structure */ 12 123 2 input_columns_info_ptr ptr, /* input_columns_info structure */ 12 124 2 input_columns_order_ptr ptr, /* input_columns_order array */ 12 125 2 output_columns_info_ptr ptr, /* output_columns_info structure */ 12 126 2 group_info_ptr ptr, /* group_info structure */ 12 127 2 outline_info_ptr ptr, /* outline_info structure */ 12 128 2 page_break_info_ptr ptr, /* page_break_info structure */ 12 129 2 subtotal_info_ptr ptr, /* subtotal_info structure */ 12 130 2 subcount_info_ptr ptr, /* subcount_info structure */ 12 131 2 total_info_ptr ptr, /* total_info structure */ 12 132 2 count_info_ptr ptr, /* count_info structure */ 12 133 2 row_value_template_info_ptr ptr, /* row_value_template_info structure */ 12 134 2 generic_template_ptr ptr, /* generic_template char string */ 12 135 2 header_part_delimiter char (1) unaligned, /* delimits the different portions of a header/footer */ 12 136 2 truncation_indicator char (32) varying unaligned, /* used to indicate that truncation has occured */ 12 137 2 report_directory_name char (168) unaligned, /* dir where we place copies of the page */ 12 138 2 report_entry_name char (32) unaligned; /* entry name portion of above */ 12 139 dcl format_report_ip ptr; 12 140 12 141 /* used to format page/row headers and footers */ 12 142 dcl generic_template char (generic_template_length) based (generic_tp); 12 143 dcl generic_template_length fixed bin; 12 144 dcl generic_tp ptr; 12 145 12 146 /* these columns form a group of rows and are used with outlining, etc. */ 12 147 dcl 1 group_info aligned based (group_ip), 12 148 2 number_of_columns_to_group fixed bin, 12 149 2 column_number (gi_init_number_of_columns_to_group 12 150 refer (group_info.number_of_columns_to_group)) fixed bin; 12 151 dcl gi_init_number_of_columns_to_group fixed bin; 12 152 dcl group_ip ptr; 12 153 12 154 dcl headers_next_byte fixed bin (21); 12 155 /* used to hold the page/row headers/footers, and temp space for totals/subtotals. */ 12 156 dcl headers_temp_seg char (maximum_segment_size) based (headers_tsp); 12 157 dcl headers_temp_seg_as_an_array (maximum_segment_size) char (1) based (headers_tsp); 12 158 dcl headers_tsp ptr; 12 159 12 160 dcl 1 header_info aligned based (header_ip), 12 161 2 number_of_lines fixed bin, /* number of header lines typed in by the user */ 12 162 2 maximum_number_of_parts fixed bin, /* 3 parts maximum (left, right, and center) */ 12 163 2 lines (hi_init_number_of_lines 12 164 refer (header_info.number_of_lines)), 12 165 3 parts (hi_init_maximum_number_of_parts 12 166 refer (header_info.maximum_number_of_parts)), 12 167 4 flags, 12 168 5 present bit (1) unaligned, /* this particular part is defined */ 12 169 5 active bit (1) unaligned, /* and it contains active functions */ 12 170 5 available bit (34) unaligned, 12 171 4 index fixed bin (21), /* before evaluation */ 12 172 4 length fixed bin (21), /* before evaluation */ 12 173 4 starting_position fixed bin, /* within the page width */ 12 174 4 width fixed bin, /* within the page width */ 12 175 4 alignment fixed bin; /* left, right, or center */ 12 176 dcl header_ip ptr; 12 177 dcl hi_init_maximum_number_of_parts fixed bin; 12 178 dcl hi_init_number_of_lines fixed bin; 12 179 12 180 dcl initialize_number_of_columns fixed bin; /* columns_info refer extent */ 12 181 12 182 dcl 1 input_columns_info aligned like columns_info based (input_columns_ip); /* the columns in the table */ 12 183 dcl input_columns_ip ptr; 12 184 12 185 dcl input_columns_order (input_columns_info.number_of_columns) fixed bin based (input_columns_op); 12 186 dcl input_columns_op ptr; 12 187 12 188 dcl maximum_segment_size fixed bin (21); /* in characters */ 12 189 12 190 /* Used to access the next row from the table */ 12 191 dcl next_row_value char (table_info.row_value_length) based (status.next_row_ptr); 12 192 12 193 dcl 1 outline_info aligned based (outline_ip), /* who gets oulining attempted */ 12 194 2 maximum_number_of_single_columns fixed bin, 12 195 2 maximum_number_of_grouping_columns fixed bin, 12 196 2 number_of_single_columns fixed bin, /* columns who are not a member of the group */ 12 197 2 number_of_grouping_columns fixed bin, /* columns who are a member of the group */ 12 198 2 single_columns (oi_init_maximum_number_of_single_columns refer ( 12 199 outline_info.maximum_number_of_single_columns)) fixed bin, 12 200 2 grouping_columns (oi_init_maximum_number_of_grouping_columns refer ( 12 201 outline_info.maximum_number_of_grouping_columns)) fixed bin; 12 202 dcl oi_init_maximum_number_of_grouping_columns fixed bin; 12 203 dcl oi_init_maximum_number_of_single_columns fixed bin; 12 204 dcl outline_ip ptr; 12 205 12 206 dcl 1 output_columns_info like columns_info based (output_columns_ip); /* the columns that will go on the page */ 12 207 dcl output_columns_ip ptr; 12 208 12 209 /* these columns will be checked to determine if a page break is required */ 12 210 dcl 1 page_break_info aligned based (page_break_ip), 12 211 2 number_of_columns fixed bin, 12 212 2 columns (pbi_init_number_of_columns refer ( 12 213 page_break_info.number_of_columns)) bit (1) unaligned; 12 214 dcl page_break_ip ptr; 12 215 dcl pbi_init_number_of_columns fixed bin; 12 216 12 217 /* Used to access the previous row from the table */ 12 218 dcl previous_row_value char (table_info.row_value_length) based (status.previous_row_ptr); 12 219 12 220 /* The templates for the row value (also used for titles, subtotals, and totals.) */ 12 221 dcl 1 row_value_template_info like template_info based (row_value_template_ip); 12 222 dcl row_value_template_ip ptr; 12 223 12 224 /* main execution control structure for linus_fr_build_page */ 12 225 dcl 1 status aligned based (status_pointer), 12 226 2 flags, 12 227 3 still_formatting_detail_blocks bit (1), /* turned on while we are doing detail blocks */ 12 228 3 first_row_of_report bit (1), /* turned on when we are on the first row of a report */ 12 229 3 last_row_of_report bit (1), /* turned on when we are on the last row of a report */ 12 230 3 first_row_on_page bit (1), /* turned on when we are on the 1st row of a page */ 12 231 3 page_overflow bit (1), /* turned on when we are backing up */ 12 232 3 subtotals_ejection_in_progress bit (1), /* turned on when subtotals are being ejected */ 12 233 3 subcounts_ejection_in_progress bit (1), /* turned on when subcounts are being ejected */ 12 234 3 totals_ejection_in_progress bit (1), /* turned on when totals are being ejected */ 12 235 3 counts_ejection_in_progress bit (1), /* turned on when counts are being ejected */ 12 236 3 header_being_evaluated bit (1), /* turned on during header evaluation */ 12 237 3 detail_block_used_some_lines bit (1), /* turned on when a row header/footer/value/subtotal/total uses a line */ 12 238 3 row_has_been_processed_before bit (1), /* turned on when this row has been backed out of the previous page */ 12 239 3 last_pass bit (1), /* true if this is the last pass */ 12 240 2 previous_row_ptr ptr, /* points to the previous row (or null) */ 12 241 2 current_row_ptr ptr, /* points to the current row */ 12 242 2 next_row_ptr ptr, /* points to the next row (or null) */ 12 243 2 total_number_of_rows_used fixed bin, /* total # per page, used to make sure we don't */ 12 244 /* backup over the 1st row */ 12 245 2 current_pass_number fixed bin, /* [display_builtins current_pass_number] */ 12 246 2 current_row_number fixed bin (35), /* [display_builtins current_row_number] */ 12 247 2 current_column_number fixed bin, /* set to the current output column during row evaluation */ 12 248 2 current_page_number fixed bin (21), /* [display_builtins page_number] */ 12 249 2 current_line_on_page fixed bin, /* this is where the next thing is placed on the page */ 12 250 2 remaining_lines_on_page fixed bin, /* used in estimating if something will fit */ 12 251 2 highest_row_formatted fixed bin, /* used to keep track of rows backed out of the page */ 12 252 2 current_header_line fixed bin, /* set to the current header line during header evaluation */ 12 253 2 current_header_part fixed bin, /* set to the current header part during header evaluation */ 12 254 2 number_of_lines_needed_for_detail_block fixed bin, /* sum of row header, footer, and value */ 12 255 2 number_of_lines_needed_for_row_header fixed bin, /* may be zero */ 12 256 2 number_of_lines_needed_for_row_value fixed bin, /* may be zero */ 12 257 2 number_of_lines_needed_for_row_footer fixed bin, /* may be zero */ 12 258 2 number_of_lines_needed_for_page_footer fixed bin, /* may be zero */ 12 259 2 number_of_lines_needed_for_group_header fixed bin, /* may be zero */ 12 260 2 number_of_lines_needed_for_group_footer fixed bin, /* may be zero */ 12 261 2 last_row_number fixed bin (35), /* zero unless multi-pass */ 12 262 2 last_page_number fixed bin, /* zero unless multi-pass mode */ 12 263 2 object_being_evaluated char (16) varying; /* "page header", "row value", etc. */ 12 264 dcl status_pointer ptr; 12 265 12 266 dcl 1 subcount_columns_info like columns_info based (subcount_columns_ip); 12 267 dcl subcount_columns_ip ptr; 12 268 12 269 dcl 1 subcount_generation_info like subtotal_generation_info based (subcount_generation_ip); 12 270 dcl subcount_generation_ip ptr; 12 271 12 272 dcl 1 subcount_info like subtotal_info based (subcount_ip); 12 273 dcl subcount_ip ptr; 12 274 12 275 dcl 1 subtotal_columns_info like columns_info based (subtotal_columns_ip); 12 276 dcl subtotal_columns_ip ptr; 12 277 12 278 /* Used to restore subtotals when backing up on a page. */ 12 279 dcl 1 subtotal_generation_info aligned based (subtotal_generation_ip), 12 280 2 maximum_number_of_generation_blocks fixed bin, /* maximum number of subtotals possibly generated per page + 1 */ 12 281 2 number_of_subtotals fixed bin, /* # of subtotals we're taking */ 12 282 2 current_generation_block fixed bin, /* slot for next subtotal generation */ 12 283 2 generations (0:sgi_init_number_of_generations 12 284 refer (subtotal_generation_info.maximum_number_of_generation_blocks)), 12 285 3 subtotals (sgi_init_number_of_subtotals /* value of the subtotals when the break occured */ 12 286 refer (subtotal_generation_info.number_of_subtotals)) float dec (59); 12 287 dcl sgi_init_number_of_generations fixed bin; 12 288 dcl sgi_init_number_of_subtotals fixed bin; 12 289 dcl subtotal_generation_ip ptr; 12 290 12 291 dcl 1 subtotal_info aligned based (subtotal_ip), 12 292 2 columns_info_ptr ptr, /* points to subtotal_columns_info structure */ 12 293 2 subtotal_generation_info_ptr ptr, /* points to subtotal_generations_info structure */ 12 294 2 number_of_columns_to_subtotal fixed bin, /* the number of subtotals */ 12 295 2 highest_level fixed bin, /* the largest number of different subtotals on a single column */ 12 296 2 current_level fixed bin, /* the current level of subtotals being evaluated */ 12 297 2 columns (si_init_number_of_columns_to_subtotal 12 298 refer (subtotal_info.number_of_columns_to_subtotal)), 12 299 3 flags, 12 300 4 reset bit (1) unaligned, /* reset or running subtotals */ 12 301 4 group_column bit (1) unaligned, /* on means the watch column is a grouping column */ 12 302 4 available bit (34) unaligned, 12 303 3 input_column fixed bin, /* # of the input column for accumulations */ 12 304 3 watch_column fixed bin, /* # of the column to watch for generation */ 12 305 3 level fixed bin, /* different subtotals on the same column receive higher level numbers */ 12 306 3 ioa_string char (5) varying, /* used to edit the "subtotal" field */ 12 307 3 subtotal float dec (59); /* used to hold the subtotal until it needs /* 12 308* /* to be placed on the page */ 12 309 dcl si_init_number_of_columns_to_subtotal fixed bin; 12 310 dcl subtotal_ip ptr; 12 311 12 312 dcl 1 template_info aligned based (template_ip), /* templates that are laid down before the column values */ 12 313 2 template_width fixed bin, /* how wide they are */ 12 314 2 number_of_templates fixed bin, /* how many there are */ 12 315 2 templates (ti_init_number_of_templates refer (template_info.number_of_templates)) /* the templates */ 12 316 char (ti_init_template_width refer (template_info.template_width)); 12 317 dcl ti_init_number_of_templates fixed bin; 12 318 dcl template_ip ptr; 12 319 dcl ti_init_template_width fixed bin; 12 320 12 321 /* used to determine which templates have been placed */ 12 322 dcl template_map (template_map_number_of_bits) bit (1) unaligned based (template_mp); 12 323 dcl template_mp ptr; 12 324 dcl template_map_number_of_bits fixed bin; 12 325 dcl template_map_defined_as_a_string bit (template_map_number_of_bits) based (template_mp); 12 326 12 327 dcl template char (template_length) based (template_ptr); 12 328 dcl template_length fixed bin; 12 329 dcl template_ptr ptr; 12 330 12 331 dcl 1 title_block_columns_info like columns_info based (title_block_columns_ip); /* output columns for the titles */ 12 332 dcl title_block_columns_ip ptr; 12 333 12 334 /* holds the formatted title block after page 1 is finished */ 12 335 dcl 1 title_block_info aligned based (title_block_ip), 12 336 2 number_of_lines fixed bin, /* how many lines there are */ 12 337 2 line_length fixed bin, /* how long the lines are */ 12 338 2 lines (tbi_init_number_of_lines refer ( /* the formatted lines */ 12 339 title_block_info.number_of_lines)) char (tbi_init_line_length refer ( 12 340 title_block_info.line_length)); 12 341 dcl tbi_init_line_length fixed bin; 12 342 dcl tbi_init_number_of_lines fixed bin; 12 343 dcl title_block_ip ptr; 12 344 12 345 dcl 1 total_columns_info like columns_info based (total_columns_ip); /* output_columns_info for totals */ 12 346 dcl total_columns_ip ptr; 12 347 12 348 dcl 1 total_info aligned based (total_ip), 12 349 2 columns_info_ptr ptr, /* points to total_columns_info structure */ 12 350 2 number_of_columns_to_total fixed bin, /* # to total */ 12 351 2 columns (ti_init_number_of_columns_to_total 12 352 refer (total_info.number_of_columns_to_total)), 12 353 3 input_column fixed bin, /* the input column number */ 12 354 3 ioa_string char (5) varying, /* used to edit the "total" field */ 12 355 3 total float dec (59); /* used to hold the total until it's placed on the page */ 12 356 dcl ti_init_number_of_columns_to_total fixed bin; 12 357 dcl total_ip ptr; 12 358 12 359 /* END INCLUDE FILE linus_report_structures.incl.pl1 */ 2930 2931 13 1 /* BEGIN INCLUDE FILE linus_table_info.incl.pl1 -- Dave Schimke 1/5/83 */ 13 2 /* 13 3*09/28/83 Al Dupuis: Added the store_args_ptr variable and the store_args structure. 13 4**/ 13 5 dcl 1 table_info aligned based (table_ip), /* info on displayable table */ 13 6 2 retrieval_identifier fixed bin , /* current retrieval id */ 13 7 2 row_count fixed bin(35), /* number of rows in table */ 13 8 2 column_count fixed bin, /* number of columns in table */ 13 9 2 maximum_column_name_length fixed bin, 13 10 /* largest column name */ 13 11 2 maximum_column_value_length fixed bin, 13 12 /* largest column length */ 13 13 2 row_value_length fixed bin (21), /* length of entire row */ 13 14 /* (sum of column lengths) */ 13 15 2 row_segs_info_ptr ptr init (null), /* ptr to the row segs info */ 13 16 2 store_args_ptr ptr, /* ptr to the arg list for storing rows */ 13 17 2 columns (ti_init_column_count refer (table_info.column_count)), 13 18 /* column info */ 13 19 3 column_name char (69) var, /* column header name */ 13 20 3 column_data_type bit (36), /* original data descriptor */ 13 21 3 column_length fixed bin (21), /* length of column in chars */ 13 22 3 column_index fixed bin (21); /* index of start of column in */ 13 23 /* row value */ 13 24 13 25 dcl 1 row_segs_info aligned based (row_segs_ip), 13 26 2 max_number_of_seg_ptrs fixed bin, 13 27 2 max_number_of_ptrs_per_seg fixed bin(21), 13 28 2 number_of_seg_ptrs fixed bin, 13 29 2 seg_ptr (rsi_init_max_number_of_seg_ptrs refer (row_segs_info. 13 30 max_number_of_seg_ptrs)) ptr unal; 13 31 13 32 dcl 1 row_ptrs aligned based (row_ptrs_p), 13 33 2 number_of_ptrs_this_seg fixed bin(21), 13 34 2 row_value_ptr (row_ptrs.number_of_ptrs_this_seg) ptr unal; 13 35 13 36 dcl row_value char (table_info.row_value_length) based (row_value_p); 13 37 dcl row_value_p ptr unal; /* ptr to the current row value */ 13 38 13 39 dcl row_segs_ip ptr; /* ptr to the seg of ptrs to */ 13 40 /* the arrays of row_value_ptrs */ 13 41 dcl row_ptrs_p ptr; /* ptr to an array of */ 13 42 /* row_value_ptrs */ 13 43 13 44 dcl 1 store_args aligned based (store_ap), 13 45 2 table_name char (30), 13 46 2 error_code fixed bin (35), 13 47 2 number_of_descriptors fixed bin, 13 48 2 header like arg_list.header, 13 49 2 arg_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 13 50 2 desc_ptrs (arg_list_arg_count refer (store_args.header.arg_count)) ptr, 13 51 2 argument_list_descriptors (init_number_of_descriptors refer 13 52 (store_args.number_of_descriptors)) like arg_descriptor; 13 53 13 54 dcl init_number_of_descriptors; 13 55 dcl rsi_init_max_number_of_seg_ptrs fixed bin; 13 56 dcl store_ap ptr; 13 57 dcl table_ip ptr; 13 58 dcl ti_init_column_count fixed bin; 13 59 13 60 /* END INCLUDE FILE linus_table_info.incl.pl1 */ 2932 2933 14 1 /* BEGIN INCLUDE FILE sub_error_info.incl.pl1 */ 14 2 /* format: style2 */ 14 3 14 4 /* The include file condition_info_header must be used with this file */ 14 5 14 6 declare sub_error_info_ptr pointer; 14 7 declare 1 sub_error_info aligned based (sub_error_info_ptr), 14 8 2 header aligned like condition_info_header, 14 9 2 retval fixed bin (35), /* return value */ 14 10 2 name char (32), /* module name */ 14 11 2 info_ptr ptr; 14 12 14 13 declare sub_error_info_version_1 14 14 internal static options (constant) fixed bin init (1); 14 15 14 16 /* END INCLUDE FILE sub_error_info.incl.pl1 */ 2934 2935 2936 end linus_fr_build_page; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/29/86 0939.5 linus_fr_build_page.pl1 >special_ldd>install>MR12.0-1106>linus_fr_build_page.pl1 2908 1 11/02/83 1845.0 arg_descriptor.incl.pl1 >ldd>include>arg_descriptor.incl.pl1 2910 2 10/23/81 1948.6 arg_list.incl.pl1 >ldd>include>arg_list.incl.pl1 2912 3 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 2914 4 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>include>condition_info_header.incl.pl1 2916 5 09/22/80 1256.7 cp_active_string_types.incl.pl1 >ldd>include>cp_active_string_types.incl.pl1 2918 6 04/13/83 1552.8 format_document_error.incl.pl1 >ldd>include>format_document_error.incl.pl1 2920 7 11/01/84 1514.0 format_document_options.incl.pl1 >ldd>include>format_document_options.incl.pl1 2922 8 07/29/86 0937.8 linus_lcb.incl.pl1 >special_ldd>install>MR12.0-1106>linus_lcb.incl.pl1 2924 9 09/16/83 1338.0 linus_options_extents.incl.pl1 >ldd>include>linus_options_extents.incl.pl1 2926 10 09/16/83 1338.1 linus_page_info.incl.pl1 >ldd>include>linus_page_info.incl.pl1 2928 11 09/16/83 1338.1 linus_report_info.incl.pl1 >ldd>include>linus_report_info.incl.pl1 2930 12 09/16/83 1338.1 linus_report_structures.incl.pl1 >ldd>include>linus_report_structures.incl.pl1 2932 13 10/06/83 1219.0 linus_table_info.incl.pl1 >ldd>include>linus_table_info.incl.pl1 2934 14 07/18/81 1100.0 sub_error_info.incl.pl1 >ldd>include>sub_error_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. ATOMIC_ACTIVE_STRING constant fixed bin(17,0) initial dcl 5-6 ref 709 BACKSPACE 015225 constant char(1) initial unaligned dcl 2786 ref 950 1175 1234 1278 BACKSPACE_OR_VERTICAL_TAB_OR_HORIZONTAL_TAB_OR_NL 000111 constant char(4) initial unaligned dcl 2787 ref 883 BAR 015224 constant char(1) initial unaligned dcl 2789 ref 713 717 BAR_BAR 015223 constant char(2) initial unaligned dcl 2790 ref 709 BLANK constant char(1) initial unaligned dcl 2791 ref 1277 BOTH_ALIGNMENT constant fixed bin(17,0) initial dcl 12-10 ref 883 911 CENTER_ALIGNMENT constant fixed bin(17,0) initial dcl 12-11 ref 925 1014 CHAR_DATA_TYPE constant fixed bin(17,0) initial dcl 12-12 ref 1917 DECIMAL_ALIGNMENT constant fixed bin(17,0) initial dcl 12-13 ref 1008 FILL 000110 constant bit(1) initial unaligned dcl 2792 set ref 1661* 1902* FORM_FEED constant char(1) initial unaligned dcl 2793 ref 645 GENERATE_ONE_BLANK_LINE_TRAILER 000147 constant fixed bin(17,0) initial dcl 2794 set ref 2038* 2199* GENERATE_ZERO_BLANK_LINES_TRAILER 000145 constant fixed bin(17,0) initial dcl 2795 set ref 1435* 2333* GROUP_FOOTER 000103 constant varying char(16) initial dcl 2796 set ref 1551* 1556* GROUP_HEADER 000076 constant varying char(16) initial dcl 2797 set ref 1389* 1395* HEADER_PARTS_LABELS 000062 constant varying char(11) initial array dcl 2798 set ref 2770* LEFT_ALIGNMENT 000146 constant fixed bin(17,0) initial dcl 12-15 set ref 1010 1902* LEFT_BRACKET 015222 constant char(1) initial unaligned dcl 2800 ref 703 746 LEFT_OR_RIGHT_BRACKET constant char(2) initial unaligned dcl 2801 ref 687 741 771 LOOK_AHEAD 000110 constant bit(1) initial dcl 2802 set ref 1547* LOOK_BEHIND 000145 constant bit(1) initial dcl 2803 set ref 1385* MAXIMUM_OPTION_VALUE_LENGTH constant fixed bin(17,0) initial dcl 9-36 ref 2833 2839 2845 2881 NEWLINE constant char(1) initial unaligned dcl 2804 ref 949 1277 NORMAL_ACTIVE_STRING constant fixed bin(17,0) initial dcl 5-6 ref 716 721 722 724 NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 9-20 ref 113 138 159 627 627 629 761 761 1573 1583 2443 2444 2446 2454 2460 2466 2467 2570 2577 2577 2579 2579 2582 2582 2590 2638 2721 2733 NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 9-21 ref 113 138 159 627 627 629 761 761 1573 1583 2443 2444 2446 2454 2460 2466 2467 2570 2577 2577 2579 2579 2582 2582 2590 2638 2721 2733 OFF constant bit(1) initial dcl 2806 ref 112 123 157 158 184 188 189 200 201 205 206 208 295 354 376 393 410 420 432 437 461 525 551 567 594 598 637 749 769 775 913 927 964 1189 1207 1234 1244 1324 1339 1359 1573 1586 1587 1674 1695 1701 1744 1771 1937 1966 2141 2160 2328 2346 2713 2715 2719 2724 2726 2727 2728 2729 2740 ON constant bit(1) initial dcl 2807 ref 124 183 288 289 328 386 411 423 431 476 527 549 552 593 631 632 697 735 880 911 925 945 976 1185 1232 1239 1341 1398 1418 1445 1535 1559 1583 1633 1645 1688 1731 1770 1779 1882 1950 1959 1976 2047 2090 2150 2186 2204 2283 2320 2338 2588 2589 2590 2717 2721 2725 2730 2738 PAGE_FOOTER 000055 constant varying char(16) initial dcl 2808 set ref 1736* 1742* PAGE_HEADER 000050 constant varying char(16) initial dcl 2809 set ref 1817* PAGE_OVERFLOW_ERROR_CODE constant fixed bin(35,0) initial dcl 2810 ref 872 970 1638 1680 1878 1943 1981 2086 RIGHT_ALIGNMENT constant fixed bin(17,0) initial dcl 12-17 ref 925 1012 1213 ROW_COUNT 000043 constant varying char(16) initial dcl 2811 set ref 1509* 1515* ROW_FOOTER 000036 constant varying char(16) initial dcl 2812 set ref 1526* 1532* ROW_HEADER 000031 constant varying char(16) initial dcl 2813 set ref 1409* 1415* ROW_SUBCOUNT 000024 constant varying char(16) initial dcl 2814 set ref 1473* 1479* ROW_SUBTOTAL 000017 constant varying char(16) initial dcl 2815 set ref 1455* 1461* ROW_TITLES 000012 constant varying char(16) initial dcl 2816 set ref 2038* ROW_TOTAL 000005 constant varying char(16) initial dcl 2817 set ref 1491* 1497* ROW_VALUE 000000 constant varying char(16) initial dcl 2818 set ref 1435* 1442* TOKENS_ONLY_ACTIVE_STRING constant fixed bin(17,0) initial dcl 5-6 ref 713 717 727 active 2(01) based bit(1) array level 5 packed unaligned dcl 12-160 ref 1651 addr builtin function dcl 2820 ref 384 418 533 756 803 810 813 909 1005 1171 1875 1896 1948 2191 2210 2277 2325 2757 addrel builtin function dcl 2821 ref 909 2457 2463 adj_sw 3(01) based bit(1) level 3 packed unaligned dcl 7-12 set ref 911* 913* ahds_column_value_parm parameter varying char dcl 1131 ref 1126 1165 1175 1229 1234 1240 ahds_current_input_position 000702 automatic fixed bin(17,0) dcl 1132 set ref 1226* 1229 1231* 1231 1234 1234 1238* 1238 1240 1242* 1242 ahds_current_output_position 000703 automatic fixed bin(17,0) dcl 1133 set ref 1210* 1213* 1216* 1218* 1221* 1222* 1222 1229 1239 1240 1246* 1246 ahds_loop 000704 automatic fixed bin(17,0) dcl 1134 set ref 1174* 1175* 1228* ahds_number_of_chars_to_move 000705 automatic fixed bin(17,0) dcl 1135 set ref 1184* 1188* 1202* 1228 ahds_overstrike_index 000706 automatic fixed bin(17,0) dcl 1136 set ref 1169* 1171 1239 1240 ahds_still_overstriking 000707 automatic bit(1) dcl 1137 set ref 1232* 1233 1234* 1244* ahds_string_length 000710 automatic fixed bin(17,0) dcl 1138 set ref 1165* 1166 1174 1234 ahds_truncate_the_column 000711 automatic bit(1) dcl 1139 set ref 1185* 1189* 1191 1249 ahds_virtual_length 000712 automatic fixed bin(17,0) dcl 1140 set ref 1173* 1175* 1175 1177* 1177 1182 1188 1202 1213 1216 1216 1218 1221 alignment 7 based fixed bin(17,0) array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" set ref 1661* alignment 7 based fixed bin(17,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" set ref 1925* arg_descriptor based structure level 1 dcl 1-6 arg_list based structure level 1 dcl 2-5 bdb_object_doing_the_back_out_parm parameter varying char dcl 172 set ref 167 176* before builtin function dcl 2823 ref 2665 2681 beginning_line_number 6 based fixed bin(17,0) array level 3 dcl 10-7 set ref 185 1349* bit_map 1 based bit(1) array level 2 in structure "page_overstrike_info" packed unaligned dcl 10-43 in procedure "linus_fr_build_page" set ref 1207* 1239* bit_map 1 based bit level 2 in structure "page_overstrike_info_redefined" packed unaligned dcl 10-51 in procedure "linus_fr_build_page" set ref 189* 1771* 1784* 1784 2047 bsb_loop 000430 automatic fixed bin(17,0) dcl 245 in procedure "backout_subtotal_block" set ref 255* 256 256* 262* 263 263 263 263* bsb_loop 000416 automatic fixed bin(17,0) dcl 217 in procedure "backout_subcount_block" set ref 227* 228 228* 234* 235 235* cfgb_column_changed_flag_parm parameter bit(1) dcl 319 set ref 312 328* 354* cfgb_column_number 000450 automatic fixed bin(17,0) dcl 320 set ref 334* 335 335 335 335 344 344 344 344 cfgb_group_info based structure level 1 unaligned dcl 321 cfgb_group_info_ptr_parm parameter pointer dcl 322 ref 312 333 334 cfgb_look_ahead_flag_parm parameter bit(1) dcl 323 ref 312 329 329 335 cfgb_loop 000451 automatic fixed bin(17,0) dcl 324 set ref 333* 334* cfo_inner_loop 000462 automatic fixed bin(17,0) dcl 362 set ref 413* 416 418 423 423 423 423 437* cfo_loop 000463 automatic fixed bin(17,0) dcl 363 set ref 380* 382 384 386 386 386 386* 407* 437* cfo_most_major_column_changed 000464 automatic bit(1) dcl 364 set ref 410* 420 431* cfo_still_within_the_group 000465 automatic bit(1) dcl 365 set ref 411* 413 437* cfpb_loop 000500 automatic fixed bin(17,0) dcl 450 set ref 463* 464 466 466 466 466* cfsb_column_changed_flag_parm parameter bit(1) dcl 490 set ref 482 525* 593* cfsb_column_number 000510 automatic fixed bin(17,0) dcl 491 set ref 532* 537 539 539 539 539 539 567 cfsb_inner_loop 000511 automatic fixed bin(17,0) dcl 492 set ref 553* 555 558 558 558 558 558 567* cfsb_level_number 000512 automatic fixed bin(17,0) dcl 493 set ref 526* 530 cfsb_level_number_parm parameter fixed bin(17,0) dcl 494 ref 482 526 cfsb_loop 000513 automatic fixed bin(17,0) dcl 495 set ref 529* 530 532 533 535* cfsb_most_major_column_changed 000514 automatic bit(1) dcl 496 set ref 549* 551* 555 cfsb_still_within_the_group 000515 automatic bit(1) dcl 497 set ref 552* 553 567* cfsb_subtotal_columns_info based structure level 1 unaligned dcl 498 cfsb_subtotal_columns_info_ptr_parm parameter pointer dcl 499 ref 482 527 533 598 599 601 603 cfsb_subtotal_info based structure level 1 unaligned dcl 500 cfsb_subtotal_info_ptr_parm parameter pointer dcl 501 ref 482 529 530 532 533 535 chars based char(1) array level 2 in structure "page_overstrike_info" packed unaligned dcl 10-43 in procedure "linus_fr_build_page" set ref 1240* chars based char level 2 in structure "page_overstrike_info_redefined" packed unaligned dcl 10-51 in procedure "linus_fr_build_page" set ref 1788* 1788 code 000100 automatic fixed bin(35,0) dcl 2825 set ref 306 2519* code_parm parameter fixed bin(35,0) dcl 96 set ref 89 306* column_index 37 based fixed bin(21,0) array level 3 dcl 13-5 ref 263 335 335 344 344 386 386 423 423 466 466 539 539 558 558 1917 1921 2398 2422 column_info based structure level 1 dcl 12-19 column_ip 000222 automatic pointer dcl 12-40 set ref 384* 386 393 418* 420 423 432 533* 594 803* 804 806 807 810 810* 810 812 813 815 817 1896* 1897 1899 1901 1901 1902 1902 1910 1912 1913 1917 1917 1917 1921 1921 1925 1925 1925 1925 1925 2191* 2193 2210* 2212 2212 2213 2266 2268 2269 2276 2277 2279 2281 2282 2282 2283 2325* 2327 2328 column_length 36 based fixed bin(21,0) array level 3 dcl 13-5 ref 263 335 335 344 344 386 386 423 423 466 466 539 539 558 558 1917 1921 2398 2422 column_name 12 based varying char(69) array level 3 dcl 13-5 set ref 2776* column_number 1 based fixed bin(17,0) array level 2 in structure "cfgb_group_info" dcl 321 in procedure "check_for_group_break" ref 334 column_number 1 based fixed bin(17,0) array level 2 in structure "group_info" dcl 12-147 in procedure "linus_fr_build_page" ref 416 418 423 423 423 423 437 555 558 558 558 558 558 567 columns 2 based structure array level 2 in structure "ft_total_columns_info" unaligned dcl 2303 in procedure "format_totals" set ref 2325 columns 7 based structure array level 2 in structure "subcount_info" unaligned dcl 12-272 in procedure "linus_fr_build_page" columns 12 based structure array level 2 in structure "table_info" dcl 13-5 in procedure "linus_fr_build_page" columns 2 based structure array level 2 in structure "fst_subtotal_columns_info" unaligned dcl 2120 in procedure "format_subtotals" set ref 2191 2210 columns 3 based structure array level 2 in structure "count_info" unaligned dcl 12-57 in procedure "linus_fr_build_page" columns 2 based structure array level 2 in structure "fr_output_columns_info" unaligned dcl 1852 in procedure "format_row" set ref 1896 columns 2 based structure array level 2 in structure "input_columns_info" dcl 12-182 in procedure "linus_fr_build_page" set ref 803 columns 3 based structure array level 2 in structure "total_info" dcl 12-348 in procedure "linus_fr_build_page" columns 2 based structure array level 2 in structure "cfsb_subtotal_columns_info" unaligned dcl 498 in procedure "check_for_subtotal_break" set ref 533 columns 7 based structure array level 2 in structure "fst_subtotal_info" unaligned dcl 2124 in procedure "format_subtotals" columns 1 based bit(1) array level 2 in structure "page_break_info" packed unaligned dcl 12-210 in procedure "linus_fr_build_page" ref 464 columns 2 based structure array level 2 in structure "output_columns_info" unaligned dcl 12-206 in procedure "linus_fr_build_page" set ref 384 418 810 columns 3 based structure array level 2 in structure "ft_total_info" unaligned dcl 2305 in procedure "format_totals" columns 7 based structure array level 2 in structure "cfsb_subtotal_info" unaligned dcl 500 in procedure "check_for_subtotal_break" columns 7 based structure array level 2 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" columns_info based structure level 1 dcl 12-42 columns_info_ptr based pointer level 2 in structure "total_info" dcl 12-348 in procedure "linus_fr_build_page" ref 2490 columns_info_ptr based pointer level 2 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" ref 2476 columns_info_ptr based pointer level 2 in structure "count_info" dcl 12-57 in procedure "linus_fr_build_page" ref 2496 columns_info_ptr based pointer level 2 in structure "subcount_info" dcl 12-272 in procedure "linus_fr_build_page" ref 2483 condition_info based structure level 1 dcl 3-14 condition_info_header based structure level 1 dcl 4-6 condition_info_ptr 000202 automatic pointer dcl 3-10 set ref 2757* 2758 2759* 2762 condition_info_version_1 constant fixed bin(17,0) initial dcl 3-30 ref 2758 continue_to_signal_ 000010 constant entry external dcl 2827 ref 2765 convert builtin function dcl 2828 ref 2639 copy builtin function dcl 2826 ref 1901 copy_of_page_info_ptr 16 based pointer level 2 dcl 12-74 ref 2502 2704 count_columns_ip 000224 automatic pointer dcl 12-55 set ref 1509* 2496* count_info based structure level 1 unaligned dcl 12-57 count_info_ptr 76 based pointer level 2 dcl 12-74 ref 2495 count_ip 000226 automatic pointer dcl 12-58 set ref 154 1509* 2363 2364 2364 2495* 2496 count_is_defined 0(20) based bit(1) level 3 packed unaligned dcl 12-74 ref 154 1373 1507 2493 count_length 15 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1509* counts_ejection_in_progress 10 based bit(1) level 3 dcl 12-225 set ref 205* 1509* ctb_code_parm parameter fixed bin(35,0) dcl 2027 set ref 2025 2038* 2042 current_column_number 27 based fixed bin(17,0) level 2 dcl 12-225 set ref 1895* 1896 1933 1933 1933* 2776 current_generation_block 2 based fixed bin(17,0) level 2 in structure "subtotal_generation_info" dcl 12-279 in procedure "linus_fr_build_page" set ref 144* 252* 252 256 current_generation_block 2 based fixed bin(17,0) level 2 in structure "fst_subtotal_generation_info" dcl 2122 in procedure "format_subtotals" set ref 2230* 2230 2235 current_generation_block 2 based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 12-269 in procedure "linus_fr_build_page" set ref 152* 224* 224 228 current_header_line 34 based fixed bin(17,0) level 2 dcl 12-225 set ref 1642* 1649 1651 1653 1653 1658 1658 1661 1661 1661 1672* 2770* current_header_part 35 based fixed bin(17,0) level 2 dcl 12-225 set ref 1647* 1649 1651 1653 1653 1658 1658 1661 1661 1661* 2770 current_level 6 based fixed bin(17,0) level 2 dcl 2124 set ref 2143* 2144* 2151* current_line_on_page 31 based fixed bin(17,0) level 2 dcl 12-225 set ref 185* 187 189 208 1349 1389* 1409* 1435* 1526* 1551* 1735 1736* 1795* 1817* 2037 2038* 2081 2095* 2095 2096 2199* 2333* 2736* current_page_number 30 based fixed bin(21,0) level 2 dcl 12-225 set ref 137 176* 1318* 1820* 2018* 2733* 2735* 2770* 2776* current_pass_number 25 based fixed bin(17,0) level 2 dcl 12-225 set ref 113* current_row_number 26 based fixed bin(35,0) level 2 dcl 12-225 set ref 176* 194 196 1318* 1336 1338 1347 1571* 1571 1573 1583 1734* 1734 1760* 1760 2570 2590 2610* 2615 2720* 2721 2738 2776* current_row_ptr 20 based pointer level 2 dcl 12-225 set ref 133* 192 193* 335 344 386 423 466 539 558 1917 1921 2398 2422 2607 2609* 2610 2610* current_row_value based char unaligned dcl 12-61 ref 335 344 386 423 466 539 558 1917 1921 2398 2422 currentsize builtin function dcl 2829 ref 2672 2688 decimal_position 10 based fixed bin(17,0) level 2 dcl 12-19 set ref 1925* detail_block_used_some_lines 12 based bit(1) level 3 dcl 12-225 set ref 1343 1359* 1398* 1418* 1445* 1535* 1559* 2204* 2338* 2730* detail_blocks 5 based structure array level 2 dcl 10-7 set ref 1346* 2713* divide builtin function dcl 2831 ref 1037 1222 2537 eas_active_string_parm parameter varying char dcl 658 set ref 652 687 690 696 703 704* 709 713 717 724 727 730 738* 741 743* 746 756 771 773 eas_active_string_parm_length 000544 automatic fixed bin(21,0) dcl 659 set ref 696* 738 769 eas_active_string_type 000545 automatic fixed bin(17,0) dcl 660 set ref 709* 713* 716* 717* 721* 722* 724 727 758* eas_code 000546 automatic fixed bin(35,0) dcl 661 set ref 758* 763 763* eas_current_inner_position 000550 automatic fixed bin(21,0) dcl 663 set ref 733* 734 738 741 746 751* 751 754 eas_current_position 000547 automatic fixed bin(21,0) dcl 662 set ref 695* 703 709 713 717 724 727 730 733 767* 769 771 773 eas_left_bracket_count 000551 automatic fixed bin(17,0) dcl 664 set ref 701* 707* 707 746* 746 749 eas_left_bracket_position 000552 automatic fixed bin(21,0) dcl 665 set ref 703* 704 709 709 713 717 717 724 727 730 733 eas_looking_for_matching_right_bracket 000553 automatic bit(1) dcl 666 set ref 735* 737 749* eas_next_bracket 000554 automatic fixed bin(21,0) dcl 667 set ref 687* 688 741* 743 746 751 754 eas_result_string_parm parameter varying char dcl 668 set ref 652 690* 694* 724* 724 727* 727 730* 730 766* 766 773* 773 eas_right_bracket_count 000555 automatic fixed bin(17,0) dcl 669 set ref 702* 748* 748 749 eas_right_bracket_position 000556 automatic fixed bin(21,0) dcl 670 set ref 754* 755 767 eas_spare_string 000101 automatic varying char dcl 2833 set ref 758* 766 eas_still_evaluating 000557 automatic bit(1) dcl 671 set ref 697* 699 769* 775* eas_string based char unaligned dcl 672 set ref 758* eas_string_length 000560 automatic fixed bin(21,0) dcl 673 set ref 755* 758 758 eas_string_ptr 000562 automatic pointer dcl 674 set ref 756* 758 eas_string_start 000564 automatic fixed bin(21,0) dcl 675 set ref 734* 755 756 editing 2(02) based bit(1) array level 4 in structure "cfsb_subtotal_columns_info" packed unaligned dcl 498 in procedure "check_for_subtotal_break" set ref 599 editing 2(02) based bit(1) array level 4 in structure "ft_total_columns_info" packed unaligned dcl 2303 in procedure "format_totals" set ref 2342* editing 0(02) based bit(1) level 3 in structure "column_info" packed unaligned dcl 12-19 in procedure "linus_fr_build_page" set ref 804 1910 2212* 2266 2282 2283* editing_is_defined 0(12) based bit(1) level 3 packed unaligned dcl 12-74 ref 1361 editing_string_length 12 based fixed bin(21,0) level 2 dcl 12-19 ref 806 2268 editing_string_ptr 14 based pointer level 2 dcl 12-19 ref 807 2269 editing_string_result based char unaligned dcl 12-64 ref 808 1914 2270 editing_string_result_length 15 based fixed bin(21,0) array level 3 in structure "output_columns_info" dcl 12-206 in procedure "linus_fr_build_page" set ref 603 editing_string_result_length 13 based fixed bin(21,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" set ref 812* 815 817 1912 2276* 2279 2281 editing_string_result_length 15 based fixed bin(21,0) array level 3 in structure "cfsb_subtotal_columns_info" dcl 498 in procedure "check_for_subtotal_break" set ref 603* editing_string_result_ptr 20 based pointer array level 3 in structure "output_columns_info" dcl 12-206 in procedure "linus_fr_build_page" set ref 601 editing_string_result_ptr 16 based pointer level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" set ref 813* 1913 2277* editing_string_result_ptr 20 based pointer array level 3 in structure "cfsb_subtotal_columns_info" dcl 498 in procedure "check_for_subtotal_break" set ref 601* editing_string_rl 000230 automatic fixed bin(17,0) dcl 12-65 set ref 806* 808 1912* 1914 2268* 2270 editing_string_rp 000232 automatic pointer dcl 12-66 set ref 807* 808 1913* 1914 2269* 2270 editing_strings_next_available_byte 4 based fixed bin(21,0) level 2 dcl 12-74 ref 800 editing_strings_next_byte 000234 automatic fixed bin(21,0) dcl 12-68 set ref 800* 813 815 817* 817 editing_strings_temp_seg based char unaligned dcl 12-70 set ref 815* editing_strings_temp_seg_as_an_array based char(1) array unaligned dcl 12-71 set ref 813 editing_strings_temp_seg_ptr based pointer level 2 dcl 11-7 ref 2466 editing_strings_tsp 000236 automatic pointer dcl 12-72 set ref 813 815 2466* ees_loop 000574 automatic fixed bin(17,0) dcl 787 set ref 802* 803* error_table_$badcall 000012 external static fixed bin(35,0) dcl 2834 set ref 1016* error_table_$no_record 000014 external static fixed bin(35,0) dcl 2835 ref 2642 2655 2668 2684 error_table_$recoverable_error 000016 external static fixed bin(35,0) dcl 2836 ref 917 error_table_$unbalanced_brackets 000020 external static fixed bin(35,0) dcl 2837 set ref 704* 738* 743* extended_arg_type 000200 automatic fixed bin(17,0) initial dcl 1-36 set ref 1-36* fc_additional_alignment 000604 automatic bit(1) dcl 839 set ref 925* 927* 955 1210 fc_alignment_mode_parm parameter fixed bin(17,0) dcl 840 set ref 826 883 911 925 925 1008 1010 1012 1014 1016* 1213 fc_code 000605 automatic fixed bin(35,0) dcl 841 set ref 915* 917 917 917* fc_code_parm parameter fixed bin(35,0) dcl 842 set ref 826 869* 872* 970* fc_column_value_parm parameter varying char dcl 843 set ref 826 883 883 887* 908 909 fc_current_line_on_page 000606 automatic fixed bin(17,0) dcl 844 set ref 875* 877 879 880 960 967* 967 968 973 975 976 1005 1169 fc_current_position 000607 automatic fixed bin(17,0) dcl 845 set ref 946* 949 950 952 957 960 963* 963 964 fc_decimal_position_parm parameter fixed bin(17,0) dcl 846 ref 826 1052 1054 fc_fill_parm parameter bit(1) unaligned dcl 847 ref 826 929 1180 1249 fc_line_number_parm parameter fixed bin(17,0) dcl 848 ref 826 870 875 1285 1290 1294 fc_new_line_position 000610 automatic fixed bin(17,0) dcl 849 set ref 949* 950 952 957 960 960 963 fc_output_column based char unaligned dcl 850 set ref 1040* 1058* 1069* 1072* 1076* 1084* 1087* 1090* 1105* 1117* 1194* 1196* 1229* 1249* fc_output_column_ptr 000612 automatic pointer dcl 851 set ref 1005* 1040 1058 1069 1072 1076 1084 1087 1090 1105 1117 1171* 1194 1196 1229 1249 fc_output_position_parm parameter fixed bin(17,0) dcl 853 ref 826 960 1005 1169 1285 1290 1294 fc_output_width_parm parameter fixed bin(17,0) dcl 852 ref 826 883 910 1031 1031 1033 1036 1040 1052 1052 1056 1058 1069 1072 1076 1084 1087 1090 1105 1117 1117 1182 1184 1191 1194 1194 1194 1196 1213 1216 1216 1218 1221 1229 1249 1249 1272 1287 1290 1290 1294 1294 fc_returned_string_length 000614 automatic fixed bin(21,0) dcl 854 set ref 915* 920 923 fc_spare_string 000101 automatic varying char dcl 2839 set ref 952* 953* 957* 958* 1276* 1277* 1277 1278 1280* 1284 1285 fc_spare_string_length 000615 automatic fixed bin(17,0) dcl 855 set ref 1284* 1285 fc_still_filling 000616 automatic bit(1) dcl 856 set ref 945* 948 964* fc_string_end 000617 automatic fixed bin(17,0) dcl 857 set ref 1272* 1273 1276 fc_template_parm parameter char unaligned dcl 858 ref 826 879 975 fdb_code 000732 automatic fixed bin(35,0) dcl 1306 set ref 1389* 1393 1409* 1413 1435* 1440 1455* 1459 1473* 1477 1491* 1495 1509* 1513 1526* 1530 1551* 1554 fdb_column_changed_flag 000733 automatic bit(1) dcl 1307 set ref 1385* 1387 1547* 1549 fh_code_parm parameter fixed bin(35,0) dcl 1608 set ref 1596 1632* 1638* 1661* 1666 1680* fh_current_line_number 000742 automatic fixed bin(17,0) dcl 1606 set ref 1630* 1636 1644 1645 1661* 1674 1674 1683* 1683 fh_current_line_number_parm parameter fixed bin(17,0) dcl 1607 set ref 1596 1630 1691 1699* 1699 1700 fh_executing_object_parm parameter varying char dcl 1609 ref 1596 1634 fh_header_info_ptr_parm parameter pointer dcl 1610 ref 1596 1629 fh_loop 000743 automatic fixed bin(17,0) dcl 1611 set ref 1691* 1693* fh_next_line_number 000744 automatic fixed bin(17,0) dcl 1612 set ref 1674* 1677* 1678 1683 fh_number_of_lines_used 000745 automatic fixed bin(17,0) dcl 1613 set ref 1689* 1693* 1693 1698 1699 fh_number_of_lines_used_parm parameter fixed bin(17,0) dcl 1614 set ref 1596 1631* 1698* fh_remaining_lines_on_page_parm parameter fixed bin(17,0) dcl 1615 set ref 1596 1700* fh_still_counting_lines 000746 automatic bit(1) dcl 1616 set ref 1688* 1691 1695* find_condition_info_ 000022 constant entry external dcl 2840 ref 2759 first_row_of_report 1 based bit(1) level 3 dcl 12-225 set ref 329 374 1586* 1814 2011 2717* 2719* first_row_on_page 3 based bit(1) level 3 dcl 12-225 set ref 374 1587* 2725* first_time_through_the_detail_block_loop 000101 automatic bit(1) dcl 2841 set ref 288* 292 295* flags based structure level 2 in structure "status" dcl 12-225 in procedure "linus_fr_build_page" flags based structure level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" flags 2 based structure array level 3 in structure "cfsb_subtotal_columns_info" packed unaligned dcl 498 in procedure "check_for_subtotal_break" flags 2 based structure array level 3 in structure "output_columns_info" packed unaligned dcl 12-206 in procedure "linus_fr_build_page" flags 2 based structure array level 3 in structure "ft_total_columns_info" packed unaligned dcl 2303 in procedure "format_totals" flags 7 based structure array level 3 in structure "cfsb_subtotal_info" packed unaligned dcl 500 in procedure "check_for_subtotal_break" flags 2 based structure array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" flags 7 based structure array level 3 in structure "fst_subtotal_info" packed unaligned dcl 2124 in procedure "format_subtotals" flags based structure level 2 in structure "format_report_info" dcl 12-74 in procedure "linus_fr_build_page" flags based structure level 2 in structure "report_control_info" dcl 11-7 in procedure "linus_fr_build_page" float builtin function dcl 2843 ref 263 2398 2422 folding_is_fill based bit(1) level 3 packed unaligned dcl 12-19 set ref 1925* format_document_$string 000024 constant entry external dcl 2844 ref 915 format_document_error based structure level 1 dcl 6-9 format_document_error_ptr 000204 automatic pointer dcl 6-15 set ref 2769* 2770 2776 format_document_op 12 based pointer level 2 dcl 12-74 ref 2499 format_document_options based structure level 1 dcl 7-12 format_document_options_ptr 000206 automatic pointer dcl 7-62 set ref 910 911 913 915* 2499* format_report_info based structure level 1 dcl 12-74 format_report_info_ptr based pointer level 2 dcl 11-7 ref 2446 format_report_ip 000240 automatic pointer dcl 12-139 set ref 141 146 149 154 161 198 203 284 286 299 624 624 629 800 1194 1196 1249 1290 1294 1314 1361 1364 1367 1370 1373 1382 1382 1385 1389 1407 1409 1425 1433 1453 1471 1489 1507 1524 1526 1544 1544 1547 1551 1573 1589 1736 1817 2014 2036 2062 2080 2185 2322 2446* 2447 2450 2451 2452 2469 2470 2471 2473 2475 2480 2482 2487 2489 2493 2495 2499 2502 2503 2505 2507 2508 2511 2514 2516 2517 2640 2646 2653 2659 2666 2672 2682 2688 2704 2705 2707 2717 2720 formatted_page_info based structure level 1 dcl 10-7 set ref 2672 formatted_page_info_ptr 20 based pointer level 2 dcl 12-74 ref 2507 formatted_page_ip 000212 automatic pointer dcl 10-26 set ref 185 185 209 209 221 221 249 249 1345 1345 1346 1346 1346 1346 1346 1346 1346 1346 1346 1346 1346 1346 1347 1347 1349 1349 1389 1389 1409 1409 1435 1435 1455 1455 1473 1473 1491 1491 1509 1509 1526 1526 1551 1551 1736 1767 1817 2038 2047 2054 2057 2094 2507* 2672* 2672 2709 2710 2711 2712 2713 fpf_beginning_line_number 000766 automatic fixed bin(17,0) dcl 1709 set ref 1735* 1766 fpf_code 000767 automatic fixed bin(35,0) dcl 1710 set ref 1736* 1739 fpf_loop 000770 automatic fixed bin(17,0) dcl 1711 set ref 1766* 1767 1769 1770 1771 1777 1777 1779 1782 1783* fpf_overstrike_index_1 000771 automatic fixed bin(17,0) dcl 1712 set ref 1782* 1784 1788 fpf_overstrike_index_2 000772 automatic fixed bin(17,0) dcl 1713 set ref 1783* 1784 1788 fpf_overstruck_page 000773 automatic bit(1) dcl 1714 set ref 1765* 1771 1780 fpf_page_footer_doesnt_fit 000774 automatic bit(1) dcl 1715 set ref 1731* 1733 1744* fph_code 001004 automatic fixed bin(35,0) dcl 1807 set ref 1817* 1820 fr_code_parm parameter fixed bin(35,0) dcl 1842 set ref 1829 1872* 1878* 1902* 1905 1925* 1929 1943* 1981* fr_current_detail_line 001014 automatic fixed bin(17,0) dcl 1843 set ref 1874* 1875 1947* 1947 1948 fr_current_line_number 001015 automatic fixed bin(17,0) dcl 1844 set ref 1870* 1876 1881 1882 1902* 1925 1937 1937 1946* 1946 1949 1950 1971* 1973 1975 1976 1977* 1977 fr_current_line_number_parm parameter fixed bin(17,0) dcl 1841 set ref 1829 1870 1962 1971 1988* 1988 1989 fr_executing_object_parm parameter varying char dcl 1845 ref 1829 1867 fr_loop 001016 automatic fixed bin(17,0) dcl 1846 set ref 1962* 1964* 1972* fr_next_line_number 001017 automatic fixed bin(17,0) dcl 1847 set ref 1937* 1940* 1941 1946 fr_number_of_blank_lines_parm parameter fixed bin(17,0) dcl 1848 ref 1829 1969 1972 fr_number_of_lines_used 001020 automatic fixed bin(17,0) dcl 1849 set ref 1960* 1964* 1964 1971 1978* 1978 1987 1988 fr_number_of_lines_used_by_prefix 001021 automatic fixed bin(17,0) dcl 1850 set ref 1907* 1909* 1925 fr_number_of_lines_used_parm parameter fixed bin(17,0) dcl 1851 set ref 1829 1871* 1987* fr_output_columns_info based structure level 1 unaligned dcl 1852 fr_output_columns_info_ptr 001022 automatic pointer dcl 1853 set ref 1868* 1895 1896 1933 1933 1933 fr_output_columns_info_ptr_parm parameter pointer dcl 1854 ref 1829 1868 fr_remaining_lines_on_page_parm parameter fixed bin(17,0) dcl 1855 set ref 1829 1989* fr_row_template_info based structure level 1 unaligned dcl 1856 fr_row_template_info_ptr 001024 automatic pointer dcl 1857 set ref 1869* 1875 1948 fr_row_template_info_ptr_parm parameter pointer dcl 1858 ref 1829 1869 fr_spare_string 000102 automatic varying char dcl 2845 set ref 1901* 1902* fr_still_counting_lines 001026 automatic bit(1) dcl 1859 set ref 1959* 1962 1966* fst_caller_parm parameter varying char dcl 2115 set ref 2104 2199* fst_code_parm parameter fixed bin(35,0) dcl 2116 set ref 2104 2138* 2151* 2153 fst_number_of_lines_used 001076 automatic fixed bin(17,0) dcl 2117 set ref 2151* 2155 fst_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2118 set ref 2104 2139* 2159* fst_some_column_changed 001077 automatic bit(1) dcl 2119 set ref 2144* 2146 fst_subtotal_columns_info based structure level 1 unaligned dcl 2120 fst_subtotal_columns_info_ptr_parm parameter pointer dcl 2121 set ref 2104 2144* 2191 2199* 2210 fst_subtotal_generation_info based structure level 1 unaligned dcl 2122 fst_subtotal_generation_info_ptr_parm parameter pointer dcl 2123 ref 2104 2230 2230 2230 2234 2235 2235 fst_subtotal_info based structure level 1 unaligned dcl 2124 fst_subtotal_info_ptr_parm parameter pointer dcl 2125 set ref 2104 2143 2143 2144* 2144 2151 2188 2189 2191 2193 2193 2207 2208 2210 2213 2213 2235 fst_subtotals_ejection_in_progress_parm parameter bit(1) dcl 2126 set ref 2104 2160* 2186* fst_subtotals_have_been_backed_up 001100 automatic bit(1) dcl 2127 set ref 2141* 2148 2150* fst_total_lines_used 001101 automatic fixed bin(17,0) dcl 2128 set ref 2140* 2155* 2155 2159 ft_caller_parm parameter varying char dcl 2299 set ref 2289 2333* ft_code_parm parameter fixed bin(35,0) dcl 2300 set ref 2289 2318* 2333* 2338 ft_loop 001146 automatic fixed bin(17,0) dcl 2301 set ref 2324* 2325 2329 2329* 2341* 2342 2342* ft_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2302 set ref 2289 2319* 2333* ft_total_columns_info based structure level 1 unaligned dcl 2303 ft_total_columns_info_ptr_parm parameter pointer dcl 2304 set ref 2289 2325 2333* 2341 2342 2342 ft_total_info based structure level 1 unaligned dcl 2305 ft_total_info_ptr_parm parameter pointer dcl 2306 ref 2289 2324 2325 2329 2329 ft_totals_ejection_in_progress_parm parameter bit(1) dcl 2307 set ref 2289 2320* 2346* ftb_code 001044 automatic fixed bin(35,0) dcl 1997 set ref 2014* 2016* 2018 ftb_current_line_number 001045 automatic fixed bin(17,0) dcl 1998 set ref 2037* 2047 2058 2059* 2059 2081* 2084 2089 2090 2091* 2091 ftb_loop 001046 automatic fixed bin(17,0) dcl 1999 set ref 2057* 2058* 2083* 2089* ftosicf_ioa_string_parm parameter varying char dcl 2252 set ref 2246 2273* ftosicf_length_doesnt_matter 001136 automatic fixed bin(21,0) dcl 2253 set ref 2273* ftosicf_subtotal_or_total_parm parameter float dec(59) dcl 2254 set ref 2246 2273* gc_loop 001160 automatic fixed bin(17,0) dcl 2354 set ref 2363* 2364 2364* generations 3 based structure array level 2 in structure "fst_subtotal_generation_info" unaligned dcl 2122 in procedure "format_subtotals" generations 3 based structure array level 2 in structure "subtotal_generation_info" dcl 12-279 in procedure "linus_fr_build_page" generations 3 based structure array level 2 in structure "subcount_generation_info" unaligned dcl 12-269 in procedure "linus_fr_build_page" generic_template based char unaligned dcl 12-142 set ref 1644 1661* 1769 1975 generic_template_length 000242 automatic fixed bin(17,0) dcl 12-143 set ref 1644 1661 1661 1769 1975 2510* generic_template_ptr 102 based pointer level 2 dcl 12-74 ref 2511 generic_tp 000244 automatic pointer dcl 12-144 set ref 1644 1661 1769 1975 2511* group_column 7(01) based bit(1) array level 4 packed unaligned dcl 500 ref 535 group_footer_info_ptr 36 based pointer level 2 dcl 12-74 set ref 1551* group_footer_is_defined 0(09) based bit(1) level 3 packed unaligned dcl 12-74 ref 1544 group_footer_length 17 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1551* group_footer_trigger_info_ptr 42 based pointer level 2 dcl 12-74 set ref 1547* group_footer_trigger_is_defined 0(10) based bit(1) level 3 packed unaligned dcl 12-74 ref 1544 group_header_info_ptr 34 based pointer level 2 dcl 12-74 set ref 1389* group_header_is_defined 0(03) based bit(1) level 3 packed unaligned dcl 12-74 ref 1382 group_header_length 7 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1389* group_header_trigger_info_ptr 40 based pointer level 2 dcl 12-74 set ref 1385* group_header_trigger_is_defined 0(04) based bit(1) level 3 packed unaligned dcl 12-74 ref 1382 group_info based structure level 1 dcl 12-147 group_info_ptr 62 based pointer level 2 dcl 12-74 ref 2469 group_ip 000246 automatic pointer dcl 12-152 set ref 413 416 418 423 423 423 423 437 553 555 558 558 558 558 558 567 2469* grouping_columns based fixed bin(17,0) array level 2 dcl 12-193 ref 437 gs_code_parm parameter fixed bin(35,0) dcl 2171 set ref 2164 2199* 2204 gs_level_number_parm parameter fixed bin(17,0) dcl 2172 ref 2164 2189 2208 gs_loop 001114 automatic fixed bin(17,0) dcl 2173 in procedure "generate_subtotals" set ref 2188* 2189 2191 2193 2193* 2207* 2208 2210 2213 2213* gs_loop 001170 automatic fixed bin(17,0) dcl 2374 in procedure "gather_subcounts" set ref 2380* 2381 2381* gs_loop 001200 automatic fixed bin(17,0) dcl 2391 in procedure "gather_subtotals" set ref 2397* 2398 2398 2398 2398* gs_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2174 set ref 2164 2199* gt_loop 001210 automatic fixed bin(17,0) dcl 2411 set ref 2421* 2422 2422 2422 2422* header based structure level 2 in structure "arg_list" dcl 2-5 in procedure "linus_fr_build_page" header based structure level 2 in structure "sub_error_info" dcl 14-7 in procedure "linus_fr_build_page" header_being_evaluated 11 based bit(1) level 3 dcl 12-225 set ref 1633* 1701* 2729* 2770 header_info based structure level 1 dcl 12-160 header_ip 000254 automatic pointer dcl 12-176 set ref 1629* 1642 1647 1649 1651 1653 1653 1658 1658 1661 1661 1661 1672 headers_next_available_byte 5 based fixed bin(21,0) level 2 dcl 12-74 ref 2185 2322 headers_next_byte 000250 automatic fixed bin(21,0) dcl 12-154 set ref 2185* 2277 2279 2281* 2281 2322* headers_temp_seg based char unaligned dcl 12-156 set ref 1653 1658 2279* headers_temp_seg_as_an_array based char(1) array unaligned dcl 12-157 set ref 2277 headers_temp_seg_ptr based pointer level 2 dcl 11-7 ref 2467 headers_tsp 000252 automatic pointer dcl 12-158 set ref 1653 1658 2277 2279 2467* highest_level 5 based fixed bin(17,0) level 2 dcl 2124 ref 2143 highest_row_formatted 33 based fixed bin(17,0) level 2 dcl 12-225 set ref 139* 1336 1338* 2738 index 3 based fixed bin(21,0) array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" ref 1653 1658 index builtin function dcl 2847 in procedure "linus_fr_build_page" ref 637 703 949 950 1059 1674 1937 2047 info_ptr 14 based pointer level 2 in structure "condition_info" dcl 3-14 in procedure "linus_fr_build_page" ref 2762 info_ptr 116 based pointer level 2 in structure "sub_error_info" dcl 14-7 in procedure "linus_fr_build_page" ref 2769 info_string 3 based varying char(256) level 3 dcl 14-7 set ref 2770* 2776* input_column 3 based fixed bin(17,0) array level 3 in structure "ft_total_info" dcl 2305 in procedure "format_totals" ref 2325 input_column 10 based fixed bin(17,0) array level 3 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" ref 263 263 2398 2398 input_column 3 based fixed bin(17,0) array level 3 in structure "total_info" dcl 12-348 in procedure "linus_fr_build_page" ref 2422 2422 input_column 4 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 12-206 in procedure "linus_fr_build_page" set ref 2776 input_column 10 based fixed bin(17,0) array level 3 in structure "cfsb_subtotal_info" dcl 500 in procedure "check_for_subtotal_break" ref 533 input_column 10 based fixed bin(17,0) array level 3 in structure "fst_subtotal_info" dcl 2124 in procedure "format_subtotals" ref 2191 2210 input_column 2 based fixed bin(17,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" ref 1917 1917 1921 1921 input_columns_info based structure level 1 dcl 12-182 input_columns_info_ptr 54 based pointer level 2 dcl 12-74 ref 2450 input_columns_ip 000256 automatic pointer dcl 12-183 set ref 382 384 416 418 463 533 537 539 555 558 802 803 2191 2210 2325 2450* input_columns_op 000260 automatic pointer dcl 12-186 set ref 803 2451* input_columns_order based fixed bin(17,0) array dcl 12-185 ref 803 input_columns_order_ptr 56 based pointer level 2 dcl 12-74 ref 2451 input_string based varying char dcl 2848 set ref 808* 809* 1656* 1658* 1661* 1914* 1917* 1921* 1925* 2270* 2271* 2456* input_string_length 000102 automatic fixed bin(21,0) dcl 2849 set ref 808 809 1656 1658 1661 1914 1917 1921 1925 2270 2271 2455* 2456 input_string_non_varying based char unaligned dcl 2851 set ref 915* input_string_non_varying_length 000106 automatic fixed bin(21,0) dcl 2852 set ref 908* 915 915 2458* input_string_non_varying_ptr 000110 automatic pointer dcl 2853 set ref 909* 915 2457* input_string_ptr 000104 automatic pointer dcl 2850 set ref 808 809 1656 1658 1661 1914 1917 1921 1925 2270 2271 2454* 2456 2457 input_string_temp_seg_ptr based pointer level 2 dcl 11-7 ref 2454 ioa_$rsnnl 000026 constant entry external dcl 2854 ref 2273 ioa_string 13 based varying char(5) array level 3 in structure "fst_subtotal_info" dcl 2124 in procedure "format_subtotals" set ref 2193* ioa_string 4 based varying char(5) array level 3 in structure "ft_total_info" dcl 2305 in procedure "format_totals" set ref 2329* iox_$seek_key 000032 constant entry external dcl 2856 ref 2640 2653 2666 2682 iox_$write_record 000030 constant entry external dcl 2855 ref 2646 2659 2672 2688 last_page_number 46 based fixed bin(17,0) level 2 dcl 12-225 set ref 137* last_pass 14 based bit(1) level 3 dcl 12-225 set ref 112* 124* last_row_number 45 based fixed bin(35,0) level 2 dcl 12-225 set ref 138* last_row_of_report 2 based bit(1) level 3 dcl 12-225 set ref 184* 329 537 549 645 1489 1507 1583* 1728 2590* 2613 2721* 2724* lcb based structure level 1 dcl 8-53 lcb_ptr 000210 automatic pointer dcl 8-121 set ref 100* 2439 2442 2574* lcb_ptr_parm parameter pointer dcl 97 ref 89 100 length 1 based fixed bin(17,0) level 2 in structure "page_info" dcl 10-29 in procedure "linus_fr_build_page" set ref 637* 638 645 2513 2569 2737 length builtin function dcl 2858 in procedure "linus_fr_build_page" ref 696 812 883 908 1029 1051 1065 1105 1117 1165 1284 1899 2276 2516 length 4 based fixed bin(21,0) array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" ref 1653 1658 length_word based fixed bin(35,0) level 2 dcl 2876 set ref 923* 964 1272 1287 level 12 based fixed bin(17,0) array level 3 in structure "fst_subtotal_info" dcl 2124 in procedure "format_subtotals" ref 2189 2208 level 12 based fixed bin(17,0) array level 3 in structure "cfsb_subtotal_info" dcl 500 in procedure "check_for_subtotal_break" ref 530 line_length 2 based fixed bin(17,0) level 2 in structure "format_document_options" dcl 7-12 in procedure "linus_fr_build_page" set ref 910* line_length 1 based fixed bin(17,0) level 2 in structure "title_block_info" dcl 12-335 in procedure "linus_fr_build_page" set ref 2055* 2058 2058 2058 2089 2089 2089 lines 2 based structure array level 2 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" lines 2 based char array level 2 in structure "title_block_info" dcl 12-335 in procedure "linus_fr_build_page" set ref 2058* 2089 linus_data_type 11 based fixed bin(17,0) level 2 dcl 12-19 ref 1917 linus_error_$bad_report_format 000034 external static fixed bin(35,0) dcl 2859 set ref 176* 641* 1318* 1820* 2018* 2770* 2776* linus_table$load_rows 000036 constant entry external dcl 2860 ref 2574 local_condition_info 000112 automatic structure level 1 unaligned dcl 2861 set ref 2757 ltrim builtin function dcl 2862 ref 1917 2639 max_number_of_ptrs_per_seg 1 based fixed bin(21,0) level 2 dcl 13-25 ref 2537 2539 2542 2543 maximum_number_of_detail_blocks based fixed bin(17,0) level 2 dcl 10-7 ref 2672 2713 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 12-269 in procedure "linus_fr_build_page" ref 224 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "fst_subtotal_generation_info" dcl 2122 in procedure "format_subtotals" ref 2230 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "subtotal_generation_info" dcl 12-279 in procedure "linus_fr_build_page" ref 252 maximum_number_of_parts 1 based fixed bin(17,0) level 2 dcl 12-160 ref 1647 1649 1649 1651 1651 1653 1653 1653 1653 1658 1658 1658 1658 1661 1661 1661 1661 1661 1661 maximum_number_of_single_columns based fixed bin(17,0) level 2 dcl 12-193 ref 437 maximum_segment_size 000262 automatic fixed bin(21,0) dcl 12-188 set ref 815 1653 1658 2279 2440* 2455 2461 mbos_loop 001126 automatic fixed bin(17,0) dcl 2224 set ref 2234* 2235 2235* min builtin function dcl 2864 ref 1272 mod builtin function dcl 2865 ref 224 252 2230 2539 2542 mp_row_number_parm parameter fixed bin(35,0) dcl 2527 ref 2525 2537 2539 2542 mp_row_ptr_index 001227 automatic fixed bin(21,0) dcl 2529 set ref 2542* 2543 2543* 2548 mp_segment_ptr_index 001226 automatic fixed bin(21,0) dcl 2528 set ref 2537* 2539* 2539 2546 mra_code 001236 automatic fixed bin(35,0) dcl 2554 set ref 2574* 2585 2585 2593* mra_number_of_rows_needed 001237 automatic fixed bin(35,0) dcl 2555 set ref 2569* 2570 2574* 2593* mra_number_of_rows_retrieved 001240 automatic fixed bin(35,0) dcl 2556 set ref 2574* 2582 2582 mrds_error_$tuple_not_found 000040 external static fixed bin(35,0) dcl 2866 ref 2585 multi_pass_mode 0(09) based bit(1) level 3 packed unaligned dcl 11-7 set ref 106 123* 302 name 106 based char(32) level 2 dcl 14-7 ref 2763 next_row_ptr 22 based pointer level 2 dcl 12-225 set ref 135* 192* 263 335 466 539 558 2609 2613* 2615* next_row_value based char unaligned dcl 12-191 ref 263 335 466 539 558 no_of_formatted_pages based fixed bin(21,0) level 2 dcl 11-7 set ref 159* 627* 627 2638 2733 no_of_rows_retrieved based fixed bin(35,0) level 2 dcl 11-7 set ref 138 629 1573 1583 2570 2582* 2582 2590 2721 null builtin function dcl 2868 ref 11-52 133 134 189 194 758 758 1204 1765 2014 2047 2504 2610 2613 2678 2706 2759 2759 number_of_bits_or_chars based fixed bin(21,0) level 2 in structure "page_overstrike_info" dcl 10-43 in procedure "linus_fr_build_page" ref 1207 1240 2688 2688 number_of_bits_or_chars based fixed bin(21,0) level 2 in structure "page_overstrike_info_redefined" dcl 10-51 in procedure "linus_fr_build_page" ref 189 1771 1784 1784 1788 1788 1788 1788 2047 number_of_columns based fixed bin(17,0) level 2 in structure "fr_output_columns_info" dcl 1852 in procedure "format_row" ref 1895 1933 number_of_columns based fixed bin(17,0) level 2 in structure "input_columns_info" dcl 12-182 in procedure "linus_fr_build_page" ref 463 802 number_of_columns based fixed bin(17,0) level 2 in structure "ft_total_columns_info" dcl 2303 in procedure "format_totals" ref 2341 number_of_columns based fixed bin(17,0) level 2 in structure "columns_info" dcl 12-42 in procedure "linus_fr_build_page" ref 376 527 number_of_columns_to_group based fixed bin(17,0) level 2 in structure "group_info" dcl 12-147 in procedure "linus_fr_build_page" ref 413 553 number_of_columns_to_group based fixed bin(17,0) level 2 in structure "cfgb_group_info" dcl 321 in procedure "check_for_group_break" ref 333 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "cfsb_subtotal_info" dcl 500 in procedure "check_for_subtotal_break" ref 529 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "fst_subtotal_info" dcl 2124 in procedure "format_subtotals" ref 2188 2207 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" ref 143 151 262 2397 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subcount_info" dcl 12-272 in procedure "linus_fr_build_page" ref 234 2380 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "total_info" dcl 12-348 in procedure "linus_fr_build_page" ref 146 154 2421 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "ft_total_info" dcl 2305 in procedure "format_totals" ref 2324 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "count_info" dcl 12-57 in procedure "linus_fr_build_page" ref 2363 number_of_detail_blocks 4 based fixed bin(17,0) level 2 dcl 10-7 set ref 185 209* 209 221 249 1345* 1345 1346 1346 1346 1346 1346 1346 1346 1346 1346 1346 1346 1347 1349 1389 1409 1435 1455 1473 1491 1509 1526 1551 2712* number_of_formatted_rows 3 based fixed bin(35,0) level 2 dcl 12-74 set ref 161* 624* 624 629 2717 2720 number_of_grouping_columns 3 based fixed bin(17,0) level 2 dcl 12-193 ref 407 407 number_of_lines based fixed bin(17,0) level 2 in structure "title_block_info" dcl 12-335 in procedure "linus_fr_build_page" set ref 2055* 2083 2094 2095 number_of_lines based fixed bin(17,0) level 2 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" ref 1642 1672 number_of_lines_needed_for_detail_block 36 based fixed bin(17,0) level 2 dcl 12-225 ref 1314 1314 1573 1573 number_of_lines_needed_for_page_footer 42 based fixed bin(17,0) level 2 dcl 12-225 ref 1314 1573 number_of_passes based fixed bin(17,0) level 2 dcl 11-7 ref 113 number_of_single_columns 2 based fixed bin(17,0) level 2 dcl 12-193 ref 380 380 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 12-269 in procedure "linus_fr_build_page" ref 227 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "subtotal_generation_info" dcl 12-279 in procedure "linus_fr_build_page" ref 228 255 256 2235 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "fst_subtotal_generation_info" dcl 2122 in procedure "format_subtotals" ref 2234 object_being_evaluated 47 based varying char(16) level 2 dcl 12-225 set ref 1634* 1867* 2770* 2776* outline 2(01) based bit(1) array level 4 in structure "cfsb_subtotal_columns_info" packed unaligned dcl 498 in procedure "check_for_subtotal_break" set ref 527* 598* outline 2(01) based bit(1) array level 4 in structure "output_columns_info" packed unaligned dcl 12-206 in procedure "linus_fr_build_page" set ref 376* outline 0(01) based bit(1) level 3 in structure "column_info" packed unaligned dcl 12-19 in procedure "linus_fr_build_page" set ref 386* 393* 420* 423* 432* 594* 1897 2193 2213 2328* outline_info based structure level 1 dcl 12-193 outline_info_ptr 64 based pointer level 2 dcl 12-74 ref 2470 outline_ip 000264 automatic pointer dcl 12-204 set ref 380 380 382 384 386 386 386 386 407 407 437 2470* outline_is_defined 0(15) based bit(1) level 3 packed unaligned dcl 12-74 ref 1425 output_column 3 based fixed bin(17,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" ref 810 810 output_column 5 based fixed bin(17,0) array level 3 in structure "input_columns_info" dcl 12-182 in procedure "linus_fr_build_page" set ref 382 384 416 418 533 537* 539* 555* 558* 2191 2210 2325 output_columns_info based structure level 1 unaligned dcl 12-206 output_columns_info_ptr 60 based pointer level 2 dcl 12-74 ref 2452 output_columns_ip 000266 automatic pointer dcl 12-207 set ref 376 384 418 601 603 810 1435* 2452* 2776 output_line 6 based fixed bin(17,0) array level 3 dcl 1852 set ref 1933 1933 output_string based varying char dcl 2870 set ref 809* 812 815 949 950 952 957 960 1276 1653* 1656* 2271* 2273* 2276 2279 2462* output_string_length 000144 automatic fixed bin(21,0) dcl 2871 set ref 809 1653 1656 2271 2273 2461* 2462 2464 output_string_non_varying based char unaligned dcl 2873 set ref 915* output_string_non_varying_length 000150 automatic fixed bin(21,0) dcl 2874 set ref 915 915 2464* output_string_non_varying_ptr 000152 automatic pointer dcl 2875 set ref 915 2463* output_string_ptr 000146 automatic pointer dcl 2872 set ref 809 812 815 923 949 950 952 957 960 964 1272 1276 1287 1653 1656 2271 2273 2276 2279 2460* 2462 2463 output_string_redefined based structure level 1 unaligned dcl 2876 output_string_temp_seg_ptr based pointer level 2 dcl 11-7 ref 2460 overstrike_info_ptr 22 based pointer level 2 dcl 12-74 ref 2505 2707 page_break_info based structure level 1 dcl 12-210 page_break_info_ptr 66 based pointer level 2 dcl 12-74 ref 2471 page_break_ip 000270 automatic pointer dcl 12-214 set ref 464 2471* page_break_is_defined 0(16) based bit(1) level 3 packed unaligned dcl 12-74 ref 1589 page_defined_as_chars based char(1) array unaligned dcl 10-38 set ref 1005 1171 page_defined_as_lines based char array unaligned dcl 10-39 set ref 645* 879* 960* 975* 1285* 1290* 1294* 1644* 1769* 1777* 1777 1881* 1949* 1975* 2058 2089* page_footer_info_ptr 32 based pointer level 2 dcl 12-74 set ref 1736* page_footer_is_defined 0(11) based bit(1) level 3 packed unaligned dcl 12-74 ref 299 1314 1573 page_footer_length 3 based fixed bin(17,0) level 2 dcl 10-7 set ref 1736* 1767 2711* page_header_info_ptr 30 based pointer level 2 dcl 12-74 set ref 1817* page_header_is_defined 0(02) based bit(1) level 3 packed unaligned dcl 12-74 ref 284 page_header_length 1 based fixed bin(17,0) level 2 dcl 10-7 set ref 1817* 2709* page_info based structure level 1 dcl 10-29 set ref 2503* 2503 2705* 2705 page_info_ptr 14 based pointer level 2 dcl 12-74 ref 2503 2705 page_info_ptr_parm parameter pointer dcl 98 set ref 89 305* page_info_size 3 based fixed bin(17,0) level 2 dcl 10-29 set ref 2659 page_ip 000214 automatic pointer dcl 10-41 set ref 189 189 305 637 638 638 638 641 645 645 645 645 645 645 879 879 879 879 960 960 960 960 975 975 975 975 1005 1005 1169 1171 1204 1206 1285 1285 1285 1285 1290 1290 1290 1290 1294 1294 1294 1294 1644 1644 1644 1644 1765 1769 1769 1769 1769 1771 1771 1777 1777 1777 1777 1777 1777 1777 1777 1782 1783 1784 1784 1788 1788 1881 1881 1881 1881 1949 1949 1949 1949 1975 1975 1975 1975 2047 2047 2047 2053 2058 2058 2058 2058 2089 2089 2089 2089 2502* 2503 2504 2509 2513 2569 2646 2646 2659* 2659 2678 2704* 2705 2706 2737 page_overflow 4 based bit(1) level 3 dcl 12-225 set ref 183* 2726* page_overstrike_info based structure level 1 dcl 10-43 set ref 2688 page_overstrike_info_ptr 6 based pointer level 2 dcl 10-29 set ref 189 1204 1206* 1765 2047 2504* 2678 2706* page_overstrike_info_redefined based structure level 1 dcl 10-51 page_overstrike_ip 000216 automatic pointer dcl 10-49 set ref 189 189 1206 1207 1239 1240 1771 1771 1784 1784 1784 1784 1788 1788 1788 1788 1788 1788 2047 2047 2505* 2688* 2688 2707* page_ptr 4 based pointer level 2 dcl 10-29 set ref 645 879 960 975 1005 1171 1285 1290 1294 1644 1769 1777 1777 1881 1949 1975 2058 2089 2646* paginated_report 000154 automatic bit(1) dcl 2880 set ref 645 1728 1762 1814 2011 2045 2501* 2733 parts 2 based structure array level 3 dcl 12-160 pc_column_value 000155 automatic varying char dcl 2881 set ref 1050* 1051 1059 1062* 1062 1064* 1064 1065 1069 1072 1076 1084 1087 1090 pc_column_value_parm parameter varying char dcl 990 ref 985 1029 1040 1050 1105 1105 1117 1117 pc_column_width 000634 automatic fixed bin(17,0) dcl 991 set ref 1029* 1031 1031 1033 1036 1040 1051* 1062 1065* 1066 1080 1083 pc_decimal_position 000635 automatic fixed bin(17,0) dcl 992 set ref 1052* 1054* 1055 1056 1058 1062 1069 1084 1087 1090 pc_no_of_digits_to_the_left 000636 automatic fixed bin(17,0) dcl 993 set ref 1055* 1069 1069 1072 1072 1072 1072 1076 pc_no_of_digits_to_the_right 000637 automatic fixed bin(17,0) dcl 994 set ref 1056* 1080 1084 1087 1090 pc_remaining_digits 000640 automatic fixed bin(17,0) dcl 995 set ref 1083* 1084 1087 pc_starting_position 000641 automatic fixed bin(17,0) dcl 996 set ref 1031* 1033* 1036* 1037* 1037 1040 pc_the_actual_decimal 000642 automatic fixed bin(17,0) dcl 997 set ref 1059* 1060 1066* 1069 1072 1072 1076 1076 1076 1080 1083 1084 1087 1090 permanent_report 0(05) based bit(1) level 3 packed unaligned dcl 11-7 ref 302 prefix_character 20 based varying char(1) level 2 dcl 12-19 set ref 1899 1901 2327* present 2 based bit(1) array level 5 packed unaligned dcl 12-160 ref 1649 previous_row_ptr 16 based pointer level 2 dcl 12-225 set ref 134* 193 194* 196* 344 386 423 2607* previous_row_value based char unaligned dcl 12-218 ref 344 386 423 ptb_code_parm parameter fixed bin(35,0) dcl 2070 set ref 2068 2079* 2086* remaining_lines_on_page 32 based fixed bin(17,0) level 2 dcl 12-225 set ref 187* 635 1314 1314 1389* 1409* 1435* 1526* 1551* 1573 1573 1736* 1762 1777 1783 1796* 1817* 2038* 2096* 2199* 2333* 2737* report_cip 000220 automatic pointer initial dcl 11-52 set ref 106 113 114 116 123 11-52* 138 157 158 159 302 302 627 627 629 631 632 761 761 1573 1583 1583 2442* 2443 2444 2446 2454 2460 2466 2467 2501 2566 2570 2577 2577 2579 2579 2582 2582 2588 2589 2590 2638 2721 2721 2733 report_control_info based structure level 1 dcl 11-7 report_control_info_ptr 106 based pointer level 2 dcl 8-53 ref 2442 report_formatting_time based float bin(63) level 2 dcl 11-7 set ref 2579* 2579 report_has_just_been_completed 0(07) based bit(1) level 3 packed unaligned dcl 11-7 set ref 114 116 158* 632* report_iocb_ptr 6 based pointer level 2 dcl 12-74 set ref 2640* 2646* 2653* 2659* 2666* 2672* 2682* 2688* report_is_formatted 0(04) based bit(1) level 3 packed unaligned dcl 11-7 set ref 157* 631* report_is_paginated based bit(1) level 3 packed unaligned dcl 11-7 ref 2501 report_temp_seg_ptr based pointer level 2 dcl 11-7 ref 2444 report_work_area_ptr based pointer level 2 dcl 11-7 ref 2443 reset 7 based bit(1) array level 4 packed unaligned dcl 2124 ref 2213 restore_editing 0(03) based bit(1) level 3 in structure "column_info" packed unaligned dcl 12-19 in procedure "linus_fr_build_page" set ref 2212 2282* restore_editing 2(03) based bit(1) array level 4 in structure "ft_total_columns_info" packed unaligned dcl 2303 in procedure "format_totals" set ref 2342 row_footer_info_ptr 46 based pointer level 2 dcl 12-74 set ref 1526* row_footer_is_defined 0(08) based bit(1) level 3 packed unaligned dcl 12-74 ref 1524 row_footer_length 16 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1526* row_has_been_processed_before 13 based bit(1) level 3 dcl 12-225 set ref 1339* 1341* 2360 2418 2738* 2740* row_header_info_ptr 44 based pointer level 2 dcl 12-74 set ref 1409* row_header_is_defined 0(06) based bit(1) level 3 packed unaligned dcl 12-74 ref 1407 row_header_length 10 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1409* row_length 11 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1435* row_number 5 based fixed bin(35,0) array level 3 dcl 10-7 set ref 1347* row_ptrs based structure level 1 dcl 13-32 row_ptrs_p 000334 automatic pointer dcl 13-41 set ref 2546* 2548 row_segs_info based structure level 1 dcl 13-25 row_segs_info_ptr 6 based pointer initial level 2 dcl 13-5 ref 2448 row_segs_ip 000332 automatic pointer dcl 13-39 set ref 2448* 2537 2539 2542 2543 2546 row_value_is_defined 0(07) based bit(1) level 3 packed unaligned dcl 12-74 ref 1433 row_value_length 5 based fixed bin(21,0) level 2 dcl 13-5 ref 263 335 335 344 344 386 386 423 423 466 466 539 539 558 558 1917 1921 2398 2422 row_value_ptr 1 based pointer array level 2 packed unaligned dcl 13-32 ref 2548 row_value_template_info_ptr 100 based pointer level 2 dcl 12-74 ref 2508 row_value_template_ip 000272 automatic pointer dcl 12-222 set ref 1435* 2038* 2199* 2333* 2508* rtrim builtin function dcl 2884 ref 1917 1921 sb_output_column_number_parm parameter fixed bin(17,0) dcl 581 ref 576 595 598 599 601 601 603 603 sci_ptr 000156 automatic pointer dcl 2887 set ref 176* 641* 704* 738* 743* 758* 763* 917* 1016* 1318* 1820* 2018* 2439* 2593* 2642* 2648* 2655* 2661* 2668* 2674* 2684* 2690* 2760* 2770* 2776* scop_code 001256 automatic fixed bin(35,0) dcl 2623 set ref 2640* 2642 2642* 2646* 2648 2648* 2653* 2655 2655* 2659* 2661 2661* 2666* 2668 2668* 2672* 2674 2674* 2682* 2684 2684* 2688* 2690 2690* scop_record_key 001257 automatic varying char(256) dcl 2624 set ref 2639* 2639 2640* 2642* 2648* 2652* 2652 2653* 2655* 2661* 2665* 2665 2666* 2668* 2674* 2681* 2681 2682* 2684* 2690* scop_record_length 001360 automatic fixed bin(21,0) dcl 2625 set ref 2640* 2653* 2666* 2682* scop_record_number 001361 automatic fixed bin(21,0) dcl 2626 set ref 2638* 2639 search builtin function dcl 2886 ref 687 741 771 883 1278 seg_ptr 3 based pointer array level 2 packed unaligned dcl 13-25 ref 2546 seh_code 000106 automatic fixed bin(35,0) dcl 2748 set ref 2759* 2760 2760* 2765* single_columns 4 based fixed bin(17,0) array level 2 dcl 12-193 ref 382 384 386 386 386 386 ssu_$abort_line 000042 constant entry external dcl 2888 ref 176 641 704 738 743 763 917 1016 1318 1820 2018 2593 2642 2648 2655 2661 2668 2674 2684 2690 2760 ssu_$evaluate_active_string 000044 constant entry external dcl 2889 ref 758 ssu_$print_message 000046 constant entry external dcl 2890 ref 2770 2776 ssu_evaluate_active_string_time based float bin(63) level 2 dcl 11-7 set ref 761* 761 starting_position 5 based fixed bin(17,0) array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" set ref 1661* starting_position 5 based fixed bin(17,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" set ref 1902* 1925* status based structure level 1 dcl 12-225 status_pointer 000274 automatic pointer dcl 12-264 set ref 112 113 124 133 134 135 137 137 138 139 176 176 176 183 184 185 187 187 188 189 192 192 193 193 194 194 196 196 200 201 205 206 208 221 249 263 289 291 329 329 335 335 344 344 374 374 386 386 423 423 458 461 466 466 476 537 539 539 549 558 558 624 635 645 1314 1314 1314 1314 1314 1318 1318 1318 1324 1336 1336 1338 1338 1339 1341 1343 1347 1349 1359 1389 1389 1398 1409 1409 1418 1435 1435 1445 1455 1473 1489 1491 1507 1509 1526 1526 1535 1551 1551 1559 1570 1570 1571 1571 1573 1573 1573 1573 1573 1573 1573 1583 1583 1586 1587 1633 1634 1642 1647 1649 1649 1651 1651 1653 1653 1653 1653 1658 1658 1658 1658 1661 1661 1661 1661 1661 1661 1672 1701 1728 1734 1734 1735 1736 1736 1741 1741 1760 1760 1762 1777 1783 1795 1796 1814 1817 1817 1820 1867 1895 1896 1917 1921 1933 1933 1933 2011 2018 2037 2038 2038 2081 2095 2095 2096 2096 2199 2199 2204 2333 2333 2338 2360 2398 2418 2422 2517* 2570 2590 2590 2607 2607 2609 2609 2610 2610 2610 2613 2613 2615 2615 2717 2719 2720 2721 2721 2724 2725 2726 2727 2728 2729 2730 2732 2733 2735 2736 2737 2738 2738 2738 2740 2770 2770 2770 2770 2770 2776 2776 2776 2776 status_ptr 24 based pointer level 2 dcl 12-74 ref 2517 still_formatting_detail_blocks based bit(1) level 3 dcl 12-225 set ref 188* 289* 291 458 461* 476* 1324* 1573* sub_error_ 000160 stack reference condition dcl 2891 ref 104 sub_error_info based structure level 1 dcl 14-7 sub_error_info_ptr 000340 automatic pointer dcl 14-6 set ref 2762* 2763 2769 2770 2776 subcount_columns_ip 000276 automatic pointer dcl 12-267 set ref 1473* 2483* subcount_generation_info based structure level 1 unaligned dcl 12-269 subcount_generation_ip 000300 automatic pointer dcl 12-270 set ref 152 224 224 224 227 228 228 1473* 2484* subcount_info based structure level 1 unaligned dcl 12-272 subcount_info_ptr 72 based pointer level 2 dcl 12-74 ref 2482 subcount_ip 000302 automatic pointer dcl 12-273 set ref 151 228 234 235 235 1473* 2380 2381 2381 2482* 2483 2484 subcount_is_defined 0(18) based bit(1) level 3 packed unaligned dcl 12-74 ref 149 203 1367 1471 2480 subcount_length 13 based fixed bin(17,0) array level 3 dcl 10-7 set ref 221 1473* subcounts_ejection_in_progress 6 based bit(1) level 3 dcl 12-225 set ref 206* 221 1473* substr builtin function dcl 2892 set ref 189* 208* 263 335 335 344 344 386 386 423 423 466 466 539 539 558 558 645* 703 709 713 717 724 727 730 741 746 756 771 773 815* 949 950 952 957 960* 960 1040* 1058* 1062 1069* 1069 1072* 1072 1076* 1076 1084* 1084 1087* 1087 1090* 1090 1105* 1117* 1175 1194 1229* 1229 1234 1240 1249* 1276 1285* 1290* 1294* 1294 1653 1658 1674 1771* 1784* 1784 1788* 1788 1917 1921 1937 2047 2279* 2398 2422 subsystem_control_info_ptr 102 based pointer level 2 dcl 8-53 ref 2439 subtotal 16 based float dec(59) array level 3 in structure "subcount_info" dcl 12-272 in procedure "linus_fr_build_page" set ref 151* 228* 235* 235 2381* 2381 subtotal 16 based float dec(59) array level 3 in structure "fst_subtotal_info" dcl 2124 in procedure "format_subtotals" set ref 2193* 2213* 2235 subtotal 16 based float dec(59) array level 3 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" set ref 143* 256* 263* 263 2398* 2398 subtotal_columns_info based structure level 1 unaligned dcl 12-275 subtotal_columns_ip 000304 automatic pointer dcl 12-276 set ref 1455* 2476* subtotal_generation_info based structure level 1 dcl 12-279 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subtotal_info" dcl 12-291 in procedure "linus_fr_build_page" ref 2477 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subcount_info" dcl 12-272 in procedure "linus_fr_build_page" ref 2484 subtotal_generation_ip 000306 automatic pointer dcl 12-289 set ref 144 252 252 252 255 256 256 1455* 2477* subtotal_info based structure level 1 dcl 12-291 subtotal_info_ptr 70 based pointer level 2 dcl 12-74 ref 2475 subtotal_ip 000310 automatic pointer dcl 12-310 set ref 143 256 262 263 263 263 263 1455* 2397 2398 2398 2398 2398 2475* 2476 2477 subtotal_is_defined 0(17) based bit(1) level 3 packed unaligned dcl 12-74 ref 141 198 1364 1453 2473 subtotal_length 12 based fixed bin(17,0) array level 3 dcl 10-7 set ref 249 1455* subtotals 3 based float dec(59) array level 3 in structure "subtotal_generation_info" dcl 12-279 in procedure "linus_fr_build_page" ref 256 subtotals 3 based float dec(59) array level 3 in structure "fst_subtotal_generation_info" dcl 2122 in procedure "format_subtotals" set ref 2235* subtotals 3 based float dec(59) array level 3 in structure "subcount_generation_info" dcl 12-269 in procedure "linus_fr_build_page" ref 228 subtotals_ejection_in_progress 5 based bit(1) level 3 dcl 12-225 set ref 201* 249 1455* 2727* switches 3 based structure level 2 dcl 7-12 sys_info$max_seg_size 000050 external static fixed bin(35,0) dcl 2893 ref 2440 table_has_just_been_loaded 0(08) based bit(1) level 3 packed unaligned dcl 11-7 set ref 2589* table_info based structure level 1 dcl 13-5 table_info_ptr 10 based pointer level 2 dcl 12-74 ref 2447 table_ip 000336 automatic pointer dcl 13-57 set ref 263 263 263 335 335 335 335 335 335 344 344 344 344 344 344 386 386 386 386 386 386 423 423 423 423 423 423 466 466 466 466 466 466 539 539 539 539 539 539 558 558 558 558 558 558 1917 1917 1917 1921 1921 1921 2398 2398 2398 2422 2422 2422 2447* 2448 2776 table_is_full 0(02) based bit(1) level 3 packed unaligned dcl 11-7 set ref 1583 2566 2588* 2721 table_loading_time based float bin(63) level 2 dcl 11-7 set ref 2577* 2577 tbi_init_line_length 000322 automatic fixed bin(17,0) dcl 12-341 set ref 2053* 2055 2055 tbi_init_number_of_lines 000323 automatic fixed bin(17,0) dcl 12-342 set ref 2054* 2055 2055 temp_seg_ptr 000166 automatic pointer dcl 2895 set ref 2444* template based char unaligned dcl 12-327 set ref 1881 1902* 1925* 1949 template_info based structure level 1 dcl 12-312 template_length 000315 automatic fixed bin(17,0) dcl 12-328 set ref 1881 1902 1902 1925 1925 1949 2509* 2510 template_map based bit(1) array unaligned dcl 12-322 set ref 877 880* 973 976* 1645* 1693 1770* 1779* 1882* 1950* 1964 1976* 2090* 2715* template_map_defined_as_a_string based bit unaligned dcl 12-325 set ref 208* 637 1674 1937 template_map_number_of_bits 000314 automatic fixed bin(17,0) dcl 12-324 set ref 187 208 637 870 968 1636 1674 1674 1691 1700 1766 1767 1795 1876 1937 1937 1962 1973 1989 2084 2096 2513* 2715 template_map_ptr 26 based pointer level 2 dcl 12-74 ref 2514 template_mp 000312 automatic pointer dcl 12-323 set ref 208 637 877 880 973 976 1645 1674 1693 1770 1779 1882 1937 1950 1964 1976 2090 2514* 2715 template_ptr 000316 automatic pointer dcl 12-329 set ref 1875* 1881 1902 1925 1948* 1949 template_width based fixed bin(17,0) level 2 dcl 12-312 ref 1875 1875 1875 1948 1948 1948 templates 2 based char array level 2 packed unaligned dcl 1856 set ref 1875 1948 text_line 3 based varying char(128) level 2 dcl 6-9 set ref 2770* 2776* time1 000170 automatic float bin(63) dcl 2896 set ref 757* 761 2573* 2577 2579 time2 000172 automatic float bin(63) dcl 2897 set ref 760* 761 2576* 2577 2579 title_block_columns_info_ptr 50 based pointer level 2 dcl 12-74 ref 2036 title_block_columns_ip 000320 automatic pointer dcl 12-332 set ref 2036* 2038* title_block_info based structure level 1 dcl 12-335 set ref 2055 title_block_info_ptr 52 based pointer level 2 dcl 12-74 set ref 2014 2062* 2080 title_block_ip 000324 automatic pointer dcl 12-343 set ref 2055* 2058 2062 2080* 2083 2089 2094 2095 title_block_is_defined 0(05) based bit(1) level 3 packed unaligned dcl 12-74 ref 286 title_block_length 2 based fixed bin(17,0) level 2 dcl 10-7 set ref 2038* 2047 2054 2057 2094* 2710* total 7 based float dec(59) array level 3 in structure "total_info" dcl 12-348 in procedure "linus_fr_build_page" set ref 146* 2422* 2422 total 7 based float dec(59) array level 3 in structure "ft_total_info" dcl 2305 in procedure "format_totals" set ref 2329* total 7 based float dec(59) array level 3 in structure "count_info" dcl 12-57 in procedure "linus_fr_build_page" set ref 154* 2364* 2364 total_characters 2 based fixed bin(21,0) level 2 dcl 10-29 set ref 638* 641 2646* total_columns_info based structure level 1 unaligned dcl 12-345 total_columns_ip 000326 automatic pointer dcl 12-346 set ref 1491* 2490* total_info based structure level 1 dcl 12-348 total_info_ptr 74 based pointer level 2 dcl 12-74 ref 2489 total_ip 000330 automatic pointer dcl 12-357 set ref 146 1491* 2421 2422 2422 2422 2422 2489* 2490 total_is_defined 0(19) based bit(1) level 3 packed unaligned dcl 12-74 ref 146 1370 1489 2487 total_length 14 based fixed bin(17,0) array level 3 dcl 10-7 set ref 1491* total_number_of_rows_used 24 based fixed bin(17,0) level 2 dcl 12-225 set ref 176 624 1318 1570* 1570 1741* 1741 2732* totals_ejection_in_progress 7 based bit(1) level 3 dcl 12-225 set ref 200* 1491* 2728* translate builtin function dcl 2898 ref 1277 truncation_indicator 105 based varying char(32) level 2 dcl 12-74 ref 1194 1196 1249 1290 1294 2516 truncation_indicator_length 000174 automatic fixed bin(17,0) dcl 2899 set ref 1184 1191 1194 1249 1290 1290 1290 2516* unspec builtin function dcl 2901 set ref 1207* 2713* vclock builtin function dcl 2903 ref 757 760 2573 2576 version 2 based fixed bin(17,0) level 2 dcl 3-14 set ref 2758* watch_column 11 based fixed bin(17,0) array level 3 dcl 500 ref 532 width based fixed bin(17,0) level 2 in structure "page_info" dcl 10-29 in procedure "linus_fr_build_page" set ref 189 638 645 645 645 645 879 879 879 960 960 960 975 975 975 1005 1169 1285 1285 1285 1290 1290 1290 1294 1294 1294 1644 1644 1644 1769 1769 1769 1771 1771 1777 1777 1777 1777 1777 1777 1782 1783 1784 1784 1788 1788 1881 1881 1881 1949 1949 1949 1975 1975 1975 2047 2047 2053 2058 2058 2058 2089 2089 2089 2509 width 6 based fixed bin(17,0) array level 4 in structure "header_info" dcl 12-160 in procedure "linus_fr_build_page" set ref 1661* width 6 based fixed bin(17,0) level 2 in structure "column_info" dcl 12-19 in procedure "linus_fr_build_page" set ref 1901 1902* 1925* work_area based area dcl 2905 ref 2055 work_area_ptr 000176 automatic pointer dcl 2906 set ref 2055 2443* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BIT_DATA_TYPE internal static fixed bin(17,0) initial dcl 12-9 DECIMAL_DATA_TYPE internal static fixed bin(17,0) initial dcl 12-14 DEFAULT_ACTIVE_STRING internal static fixed bin(17,0) initial dcl 5-6 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 9-15 GENERAL_REPORT_OPTION internal static fixed bin(17,0) initial dcl 9-14 INDEX_FOR_ALIGNMENT internal static fixed bin(17,0) initial dcl 9-66 INDEX_FOR_COLUMN_ORDER internal static fixed bin(17,0) initial dcl 9-50 INDEX_FOR_COUNT internal static fixed bin(17,0) initial dcl 9-51 INDEX_FOR_DELIMITER internal static fixed bin(17,0) initial dcl 9-40 INDEX_FOR_EDITING internal static fixed bin(17,0) initial dcl 9-67 INDEX_FOR_EXCLUDE internal static fixed bin(17,0) initial dcl 9-52 INDEX_FOR_FOLDING internal static fixed bin(17,0) initial dcl 9-68 INDEX_FOR_FORMAT_DOCUMENT_CONTROLS internal static fixed bin(17,0) initial dcl 9-41 INDEX_FOR_GROUP internal static fixed bin(17,0) initial dcl 9-53 INDEX_FOR_GROUP_FOOTER_TRIGGER internal static fixed bin(17,0) initial dcl 9-54 INDEX_FOR_GROUP_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 9-55 INDEX_FOR_GROUP_HEADER_TRIGGER internal static fixed bin(17,0) initial dcl 9-56 INDEX_FOR_GROUP_HEADER_VALUE internal static fixed bin(17,0) initial dcl 9-57 INDEX_FOR_HYPHENATION internal static fixed bin(17,0) initial dcl 9-42 INDEX_FOR_OUTLINE internal static fixed bin(17,0) initial dcl 9-58 INDEX_FOR_PAGE_BREAK internal static fixed bin(17,0) initial dcl 9-59 INDEX_FOR_PAGE_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 9-43 INDEX_FOR_PAGE_HEADER_VALUE internal static fixed bin(17,0) initial dcl 9-44 INDEX_FOR_PAGE_LENGTH internal static fixed bin(17,0) initial dcl 9-45 INDEX_FOR_PAGE_WIDTH internal static fixed bin(17,0) initial dcl 9-46 INDEX_FOR_ROW_FOOTER_VALUE internal static fixed bin(17,0) initial dcl 9-60 INDEX_FOR_ROW_HEADER_VALUE internal static fixed bin(17,0) initial dcl 9-61 INDEX_FOR_SEPARATOR internal static fixed bin(17,0) initial dcl 9-69 INDEX_FOR_SUBCOUNT internal static fixed bin(17,0) initial dcl 9-62 INDEX_FOR_SUBTOTAL internal static fixed bin(17,0) initial dcl 9-63 INDEX_FOR_TITLE internal static fixed bin(17,0) initial dcl 9-70 INDEX_FOR_TITLE_LINE internal static fixed bin(17,0) initial dcl 9-47 INDEX_FOR_TOTAL internal static fixed bin(17,0) initial dcl 9-64 INDEX_FOR_TRUNCATION internal static fixed bin(17,0) initial dcl 9-48 INDEX_FOR_WIDTH internal static fixed bin(17,0) initial dcl 9-71 Interseg_call_type internal static fixed bin(18,0) initial unsigned unaligned dcl 2-29 LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 9-28 LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 9-27 LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 9-26 MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 9-32 MAXIMUM_OPTION_IDENTIFIER_LENGTH internal static fixed bin(17,0) initial dcl 9-34 MAXIMUM_OPTION_NAME_LENGTH internal static fixed bin(17,0) initial dcl 9-35 NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE internal static fixed bin(17,0) initial dcl 9-22 NUMERIC_DATA_TYPE internal static fixed bin(17,0) initial dcl 12-16 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 9-16 arg_descriptor_ptr automatic pointer dcl 1-34 arg_list_with_envptr based structure level 1 dcl 2-17 column_map based structure array level 1 dcl 12-48 column_map_number_of_columns automatic fixed bin(17,0) dcl 12-51 column_mp automatic pointer dcl 12-52 columns_ip automatic pointer dcl 12-46 condition_info_header_ptr automatic pointer dcl 4-4 count_columns_info based structure level 1 unaligned dcl 12-54 extended_arg_descriptor based structure level 1 dcl 1-21 fixed builtin function dcl 2842 fixed_arg_descriptor based structure level 1 dcl 1-13 format_document_error_version_1 internal static fixed bin(17,0) initial dcl 6-16 format_document_version_1 internal static fixed bin(17,0) initial dcl 7-64 format_document_version_2 internal static fixed bin(17,0) initial dcl 7-63 fpi_init_maximum_number_of_detail_blocks automatic fixed bin(17,0) dcl 10-27 gi_init_number_of_columns_to_group automatic fixed bin(17,0) dcl 12-151 hi_init_maximum_number_of_parts automatic fixed bin(17,0) dcl 12-177 hi_init_number_of_lines automatic fixed bin(17,0) dcl 12-178 init_number_of_descriptors automatic fixed bin(17,0) dcl 13-54 initialize_number_of_columns automatic fixed bin(17,0) dcl 12-180 oi_init_maximum_number_of_grouping_columns automatic fixed bin(17,0) dcl 12-202 oi_init_maximum_number_of_single_columns automatic fixed bin(17,0) dcl 12-203 page_defined_as_a_string based char unaligned dcl 10-40 pbi_init_number_of_columns automatic fixed bin(17,0) dcl 12-215 rel builtin function dcl 2883 row_value based char unaligned dcl 13-36 row_value_p automatic pointer unaligned dcl 13-37 row_value_template_info based structure level 1 unaligned dcl 12-221 rsi_init_max_number_of_seg_ptrs automatic fixed bin(17,0) dcl 13-55 sgi_init_number_of_generations automatic fixed bin(17,0) dcl 12-287 sgi_init_number_of_subtotals automatic fixed bin(17,0) dcl 12-288 si_init_number_of_columns_to_subtotal automatic fixed bin(17,0) dcl 12-309 store_ap automatic pointer dcl 13-56 store_args based structure level 1 dcl 13-44 sub_error_info_version_1 internal static fixed bin(17,0) initial dcl 14-13 subcount_columns_info based structure level 1 unaligned dcl 12-266 template_ip automatic pointer dcl 12-318 ti_init_column_count automatic fixed bin(17,0) dcl 13-58 ti_init_number_of_columns_to_total automatic fixed bin(17,0) dcl 12-356 ti_init_number_of_templates automatic fixed bin(17,0) dcl 12-317 ti_init_template_width automatic fixed bin(17,0) dcl 12-319 title_block_columns_info based structure level 1 unaligned dcl 12-331 NAMES DECLARED BY EXPLICIT CONTEXT. adjust_multi_pass_execution_control_info 000635 constant entry internal dcl 129 ref 119 align_center_value 004255 constant entry internal dcl 1021 ref 1014 align_decimal_value 004321 constant entry internal dcl 1046 ref 1008 align_hardcopy_dependent_string 004577 constant entry internal dcl 1126 ref 953 1280 align_left_value 004543 constant entry internal dcl 1097 ref 1010 align_right_value 004555 constant entry internal dcl 1111 ref 1012 backout_detail_block 001020 constant entry internal dcl 167 ref 1395 1415 1442 1461 1479 1497 1515 1532 1556 1742 backout_subcount_block 001225 constant entry internal dcl 215 ref 203 backout_subtotal_block 001316 constant entry internal dcl 243 ref 198 build_page 001434 constant entry internal dcl 274 ref 108 115 125 check_for_group_break 001505 constant entry internal dcl 312 ref 1385 1547 check_for_outlining 001610 constant entry internal dcl 360 ref 1425 check_for_page_break 002022 constant entry internal dcl 448 ref 1589 check_for_subtotal_break 002066 constant entry internal dcl 482 ref 2144 close_page 002357 constant entry internal dcl 613 ref 301 create_title_block 010423 constant entry internal dcl 2025 ref 2014 evaluate_active_string 002472 constant entry internal dcl 652 ref 809 1656 2271 execute_editing_strings 003361 constant entry internal dcl 785 ref 1361 fill_the_column 003622 constant entry internal dcl 891 ref 883 fit_column 003502 constant entry internal dcl 826 ref 1661 1902 1925 format_detail_block 005267 constant entry internal dcl 1304 ref 294 format_header 006424 constant entry internal dcl 1596 ref 1389 1409 1526 1551 1736 1817 format_page_footer 007046 constant entry internal dcl 1707 ref 299 format_page_header 007345 constant entry internal dcl 1805 ref 284 format_row 007445 constant entry internal dcl 1829 ref 1435 2038 2199 2333 format_subtotals 010734 constant entry internal dcl 2104 ref 1455 1473 format_title_block 010346 constant entry internal dcl 1995 ref 286 format_total_or_subtotal_into_character_format 011344 constant entry internal dcl 2246 ref 2193 2329 format_totals 011507 constant entry internal dcl 2289 ref 1491 1509 gather_counts 011707 constant entry internal dcl 2352 ref 1373 gather_subcounts 011736 constant entry internal dcl 2372 ref 1367 gather_subtotals 011760 constant entry internal dcl 2389 ref 1364 gather_totals 012026 constant entry internal dcl 2409 ref 1370 generate_subtotals 011050 constant entry internal dcl 2164 ref 2151 housekeeping 012100 constant entry internal dcl 2433 ref 101 linus_fr_build_page 000441 constant entry external dcl 89 make_backup_of_subtotals 011274 constant entry internal dcl 2222 ref 2148 make_ptr 012324 constant entry internal dcl 2525 ref 135 196 2610 2615 make_row_ptrs 012547 constant entry internal dcl 2601 ref 283 292 make_rows_available 012354 constant entry internal dcl 2552 ref 103 296 place_column 004156 constant entry internal dcl 985 ref 887 958 place_title_block 010626 constant entry internal dcl 2068 ref 2016 save_copy_of_page 012615 constant entry internal dcl 2621 ref 302 setup_for_a_page 013507 constant entry internal dcl 2698 ref 102 116 120 sub_error_handler 013655 constant entry internal dcl 2746 ref 104 subtotal_break 002322 constant entry internal dcl 576 ref 537 539 555 558 truncate_the_column 005127 constant entry internal dcl 1260 ref 931 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 15510 15562 15231 15520 Length 16336 15231 52 540 256 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_fr_build_page 2167 external procedure is an external procedure. on unit on line 104 168 on unit adjust_multi_pass_execution_control_info internal procedure shares stack frame of external procedure linus_fr_build_page. backout_detail_block internal procedure shares stack frame of external procedure linus_fr_build_page. backout_subcount_block internal procedure shares stack frame of external procedure linus_fr_build_page. backout_subtotal_block internal procedure shares stack frame of external procedure linus_fr_build_page. build_page internal procedure shares stack frame of external procedure linus_fr_build_page. check_for_group_break internal procedure shares stack frame of external procedure linus_fr_build_page. check_for_outlining internal procedure shares stack frame of external procedure linus_fr_build_page. check_for_page_break internal procedure shares stack frame of external procedure linus_fr_build_page. check_for_subtotal_break internal procedure shares stack frame of external procedure linus_fr_build_page. subtotal_break internal procedure shares stack frame of external procedure linus_fr_build_page. close_page internal procedure shares stack frame of external procedure linus_fr_build_page. evaluate_active_string internal procedure shares stack frame of external procedure linus_fr_build_page. execute_editing_strings internal procedure shares stack frame of external procedure linus_fr_build_page. fit_column internal procedure shares stack frame of external procedure linus_fr_build_page. fill_the_column internal procedure shares stack frame of external procedure linus_fr_build_page. place_column internal procedure shares stack frame of external procedure linus_fr_build_page. align_center_value internal procedure shares stack frame of external procedure linus_fr_build_page. align_decimal_value internal procedure shares stack frame of external procedure linus_fr_build_page. align_left_value internal procedure shares stack frame of external procedure linus_fr_build_page. align_right_value internal procedure shares stack frame of external procedure linus_fr_build_page. align_hardcopy_dependent_string internal procedure shares stack frame of external procedure linus_fr_build_page. truncate_the_column internal procedure shares stack frame of external procedure linus_fr_build_page. format_detail_block internal procedure shares stack frame of external procedure linus_fr_build_page. format_header internal procedure shares stack frame of external procedure linus_fr_build_page. format_page_footer internal procedure shares stack frame of external procedure linus_fr_build_page. format_page_header internal procedure shares stack frame of external procedure linus_fr_build_page. format_row internal procedure shares stack frame of external procedure linus_fr_build_page. format_title_block internal procedure shares stack frame of external procedure linus_fr_build_page. create_title_block internal procedure shares stack frame of external procedure linus_fr_build_page. place_title_block internal procedure shares stack frame of external procedure linus_fr_build_page. format_subtotals internal procedure shares stack frame of external procedure linus_fr_build_page. generate_subtotals internal procedure shares stack frame of external procedure linus_fr_build_page. make_backup_of_subtotals internal procedure shares stack frame of external procedure linus_fr_build_page. format_total_or_subtotal_into_character_format internal procedure shares stack frame of external procedure linus_fr_build_page. format_totals internal procedure shares stack frame of external procedure linus_fr_build_page. gather_counts internal procedure shares stack frame of external procedure linus_fr_build_page. gather_subcounts internal procedure shares stack frame of external procedure linus_fr_build_page. gather_subtotals internal procedure shares stack frame of external procedure linus_fr_build_page. gather_totals internal procedure shares stack frame of external procedure linus_fr_build_page. housekeeping internal procedure shares stack frame of external procedure linus_fr_build_page. make_ptr internal procedure shares stack frame of external procedure linus_fr_build_page. make_rows_available internal procedure shares stack frame of external procedure linus_fr_build_page. make_row_ptrs internal procedure shares stack frame of external procedure linus_fr_build_page. save_copy_of_page internal procedure shares stack frame of external procedure linus_fr_build_page. setup_for_a_page internal procedure shares stack frame of external procedure linus_fr_build_page. sub_error_handler internal procedure shares stack frame of on unit on line 104. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_fr_build_page 000100 code linus_fr_build_page 000101 first_time_through_the_detail_block_loop linus_fr_build_page 000101 fc_spare_string linus_fr_build_page 000101 eas_spare_string linus_fr_build_page 000102 fr_spare_string linus_fr_build_page 000102 input_string_length linus_fr_build_page 000104 input_string_ptr linus_fr_build_page 000106 input_string_non_varying_length linus_fr_build_page 000110 input_string_non_varying_ptr linus_fr_build_page 000112 local_condition_info linus_fr_build_page 000144 output_string_length linus_fr_build_page 000146 output_string_ptr linus_fr_build_page 000150 output_string_non_varying_length linus_fr_build_page 000152 output_string_non_varying_ptr linus_fr_build_page 000154 paginated_report linus_fr_build_page 000155 pc_column_value linus_fr_build_page 000156 sci_ptr linus_fr_build_page 000166 temp_seg_ptr linus_fr_build_page 000170 time1 linus_fr_build_page 000172 time2 linus_fr_build_page 000174 truncation_indicator_length linus_fr_build_page 000176 work_area_ptr linus_fr_build_page 000200 extended_arg_type linus_fr_build_page 000202 condition_info_ptr linus_fr_build_page 000204 format_document_error_ptr linus_fr_build_page 000206 format_document_options_ptr linus_fr_build_page 000210 lcb_ptr linus_fr_build_page 000212 formatted_page_ip linus_fr_build_page 000214 page_ip linus_fr_build_page 000216 page_overstrike_ip linus_fr_build_page 000220 report_cip linus_fr_build_page 000222 column_ip linus_fr_build_page 000224 count_columns_ip linus_fr_build_page 000226 count_ip linus_fr_build_page 000230 editing_string_rl linus_fr_build_page 000232 editing_string_rp linus_fr_build_page 000234 editing_strings_next_byte linus_fr_build_page 000236 editing_strings_tsp linus_fr_build_page 000240 format_report_ip linus_fr_build_page 000242 generic_template_length linus_fr_build_page 000244 generic_tp linus_fr_build_page 000246 group_ip linus_fr_build_page 000250 headers_next_byte linus_fr_build_page 000252 headers_tsp linus_fr_build_page 000254 header_ip linus_fr_build_page 000256 input_columns_ip linus_fr_build_page 000260 input_columns_op linus_fr_build_page 000262 maximum_segment_size linus_fr_build_page 000264 outline_ip linus_fr_build_page 000266 output_columns_ip linus_fr_build_page 000270 page_break_ip linus_fr_build_page 000272 row_value_template_ip linus_fr_build_page 000274 status_pointer linus_fr_build_page 000276 subcount_columns_ip linus_fr_build_page 000300 subcount_generation_ip linus_fr_build_page 000302 subcount_ip linus_fr_build_page 000304 subtotal_columns_ip linus_fr_build_page 000306 subtotal_generation_ip linus_fr_build_page 000310 subtotal_ip linus_fr_build_page 000312 template_mp linus_fr_build_page 000314 template_map_number_of_bits linus_fr_build_page 000315 template_length linus_fr_build_page 000316 template_ptr linus_fr_build_page 000320 title_block_columns_ip linus_fr_build_page 000322 tbi_init_line_length linus_fr_build_page 000323 tbi_init_number_of_lines linus_fr_build_page 000324 title_block_ip linus_fr_build_page 000326 total_columns_ip linus_fr_build_page 000330 total_ip linus_fr_build_page 000332 row_segs_ip linus_fr_build_page 000334 row_ptrs_p linus_fr_build_page 000336 table_ip linus_fr_build_page 000340 sub_error_info_ptr linus_fr_build_page 000416 bsb_loop backout_subcount_block 000430 bsb_loop backout_subtotal_block 000450 cfgb_column_number check_for_group_break 000451 cfgb_loop check_for_group_break 000462 cfo_inner_loop check_for_outlining 000463 cfo_loop check_for_outlining 000464 cfo_most_major_column_changed check_for_outlining 000465 cfo_still_within_the_group check_for_outlining 000500 cfpb_loop check_for_page_break 000510 cfsb_column_number check_for_subtotal_break 000511 cfsb_inner_loop check_for_subtotal_break 000512 cfsb_level_number check_for_subtotal_break 000513 cfsb_loop check_for_subtotal_break 000514 cfsb_most_major_column_changed check_for_subtotal_break 000515 cfsb_still_within_the_group check_for_subtotal_break 000544 eas_active_string_parm_length evaluate_active_string 000545 eas_active_string_type evaluate_active_string 000546 eas_code evaluate_active_string 000547 eas_current_position evaluate_active_string 000550 eas_current_inner_position evaluate_active_string 000551 eas_left_bracket_count evaluate_active_string 000552 eas_left_bracket_position evaluate_active_string 000553 eas_looking_for_matching_right_bracket evaluate_active_string 000554 eas_next_bracket evaluate_active_string 000555 eas_right_bracket_count evaluate_active_string 000556 eas_right_bracket_position evaluate_active_string 000557 eas_still_evaluating evaluate_active_string 000560 eas_string_length evaluate_active_string 000562 eas_string_ptr evaluate_active_string 000564 eas_string_start evaluate_active_string 000574 ees_loop execute_editing_strings 000604 fc_additional_alignment fit_column 000605 fc_code fit_column 000606 fc_current_line_on_page fit_column 000607 fc_current_position fit_column 000610 fc_new_line_position fit_column 000612 fc_output_column_ptr fit_column 000614 fc_returned_string_length fit_column 000615 fc_spare_string_length fit_column 000616 fc_still_filling fit_column 000617 fc_string_end fit_column 000634 pc_column_width place_column 000635 pc_decimal_position place_column 000636 pc_no_of_digits_to_the_left place_column 000637 pc_no_of_digits_to_the_right place_column 000640 pc_remaining_digits place_column 000641 pc_starting_position place_column 000642 pc_the_actual_decimal place_column 000702 ahds_current_input_position align_hardcopy_dependent_string 000703 ahds_current_output_position align_hardcopy_dependent_string 000704 ahds_loop align_hardcopy_dependent_string 000705 ahds_number_of_chars_to_move align_hardcopy_dependent_string 000706 ahds_overstrike_index align_hardcopy_dependent_string 000707 ahds_still_overstriking align_hardcopy_dependent_string 000710 ahds_string_length align_hardcopy_dependent_string 000711 ahds_truncate_the_column align_hardcopy_dependent_string 000712 ahds_virtual_length align_hardcopy_dependent_string 000732 fdb_code format_detail_block 000733 fdb_column_changed_flag format_detail_block 000742 fh_current_line_number format_header 000743 fh_loop format_header 000744 fh_next_line_number format_header 000745 fh_number_of_lines_used format_header 000746 fh_still_counting_lines format_header 000766 fpf_beginning_line_number format_page_footer 000767 fpf_code format_page_footer 000770 fpf_loop format_page_footer 000771 fpf_overstrike_index_1 format_page_footer 000772 fpf_overstrike_index_2 format_page_footer 000773 fpf_overstruck_page format_page_footer 000774 fpf_page_footer_doesnt_fit format_page_footer 001004 fph_code format_page_header 001014 fr_current_detail_line format_row 001015 fr_current_line_number format_row 001016 fr_loop format_row 001017 fr_next_line_number format_row 001020 fr_number_of_lines_used format_row 001021 fr_number_of_lines_used_by_prefix format_row 001022 fr_output_columns_info_ptr format_row 001024 fr_row_template_info_ptr format_row 001026 fr_still_counting_lines format_row 001044 ftb_code format_title_block 001045 ftb_current_line_number format_title_block 001046 ftb_loop format_title_block 001076 fst_number_of_lines_used format_subtotals 001077 fst_some_column_changed format_subtotals 001100 fst_subtotals_have_been_backed_up format_subtotals 001101 fst_total_lines_used format_subtotals 001114 gs_loop generate_subtotals 001126 mbos_loop make_backup_of_subtotals 001136 ftosicf_length_doesnt_matter format_total_or_subtotal_into_character_format 001146 ft_loop format_totals 001160 gc_loop gather_counts 001170 gs_loop gather_subcounts 001200 gs_loop gather_subtotals 001210 gt_loop gather_totals 001226 mp_segment_ptr_index make_ptr 001227 mp_row_ptr_index make_ptr 001236 mra_code make_rows_available 001237 mra_number_of_rows_needed make_rows_available 001240 mra_number_of_rows_retrieved make_rows_available 001256 scop_code save_copy_of_page 001257 scop_record_key save_copy_of_page 001360 scop_record_length save_copy_of_page 001361 scop_record_number save_copy_of_page on unit on line 104 000106 seh_code sub_error_handler THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_cs call_ext_out_desc call_ext_out return alloc_auto_adj mpfx2 mod_fx1 enable shorten_stack ext_entry int_entry repeat set_cs_eis index_bs_1_eis any_to_any_rd alloc_based vclock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. continue_to_signal_ find_condition_info_ format_document_$string ioa_$rsnnl iox_$seek_key iox_$write_record linus_table$load_rows ssu_$abort_line ssu_$evaluate_active_string ssu_$print_message THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badcall error_table_$no_record error_table_$recoverable_error error_table_$unbalanced_brackets linus_error_$bad_report_format mrds_error_$tuple_not_found sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 89 000435 2833 000446 2839 000456 2845 000466 2881 000476 1 36 000506 11 52 000510 758 000512 953 000515 958 000520 1280 000523 1902 000526 100 000531 101 000535 102 000536 103 000537 104 000540 106 000556 108 000561 109 000562 112 000563 113 000565 114 000610 115 000613 116 000614 118 000620 119 000621 120 000622 121 000623 123 000626 124 000630 125 000633 127 000634 129 000635 133 000636 134 000641 135 000642 137 000654 138 000657 139 000671 141 000672 143 000675 144 000714 146 000717 149 000740 151 000743 152 000762 154 000765 157 001006 158 001010 159 001012 161 001015 163 001017 167 001020 176 001031 183 001075 184 001100 185 001101 187 001106 188 001112 189 001113 192 001141 193 001143 194 001145 196 001153 198 001171 200 001175 201 001177 203 001200 205 001204 206 001206 208 001207 209 001221 211 001224 215 001225 221 001226 224 001237 227 001244 228 001253 231 001273 234 001275 235 001305 237 001313 239 001315 243 001316 249 001317 252 001330 255 001335 256 001345 259 001365 262 001367 263 001377 268 001431 270 001433 274 001434 283 001435 284 001436 286 001442 288 001446 289 001450 291 001451 292 001454 294 001457 295 001460 296 001461 297 001462 299 001463 301 001467 302 001470 305 001477 306 001502 308 001504 312 001505 328 001507 329 001511 333 001526 334 001537 335 001543 343 001564 344 001565 352 001603 354 001605 356 001607 360 001610 374 001611 376 001616 377 001636 380 001637 382 001651 384 001660 386 001664 393 001705 395 001707 407 001711 410 001723 411 001724 413 001726 416 001737 418 001745 420 001751 423 001756 431 001777 432 002001 437 002003 440 002015 442 002017 444 002021 448 002022 458 002023 461 002026 463 002027 464 002037 466 002044 474 002061 476 002063 478 002065 482 002066 525 002070 526 002071 527 002073 529 002116 530 002127 532 002137 533 002142 535 002153 537 002156 539 002173 547 002221 549 002222 551 002230 552 002231 553 002233 555 002245 558 002261 567 002310 569 002315 572 002317 574 002321 576 002322 593 002324 594 002327 595 002331 598 002334 599 002341 601 002345 603 002350 607 002356 613 002357 624 002360 627 002366 629 002376 631 002402 632 002404 635 002406 637 002410 638 002417 641 002421 645 002450 648 002471 652 002472 687 002510 688 002525 690 002526 691 002537 694 002540 695 002542 696 002544 697 002546 699 002550 701 002552 702 002553 703 002554 704 002575 707 002626 709 002627 713 002645 716 002654 717 002657 721 002673 722 002676 724 002700 727 002727 730 002756 733 003002 734 003005 735 003006 737 003010 738 003012 741 003046 743 003070 746 003121 748 003133 749 003134 751 003141 752 003143 754 003144 755 003150 756 003152 757 003161 758 003165 760 003227 761 003233 763 003255 766 003274 767 003311 769 003314 771 003320 773 003341 775 003356 779 003357 781 003360 785 003361 800 003362 802 003365 803 003375 804 003403 806 003406 807 003410 808 003412 809 003422 810 003445 812 003454 813 003457 815 003465 817 003476 820 003477 822 003501 826 003502 869 003520 870 003522 872 003525 873 003527 875 003530 877 003531 879 003536 880 003557 883 003564 887 003610 889 003621 891 003622 908 003623 909 003627 910 003633 911 003636 913 003645 915 003647 917 003705 920 003726 923 003731 925 003732 927 003743 929 003744 931 003751 932 003752 945 003753 946 003755 948 003757 949 003762 950 004002 952 004015 953 004026 954 004036 955 004037 957 004041 958 004052 959 004062 960 004063 963 004101 964 004103 967 004110 968 004111 970 004114 971 004117 973 004120 975 004125 976 004147 979 004154 981 004155 985 004156 1005 004167 1008 004203 1010 004210 1012 004214 1014 004220 1016 004224 1019 004254 1021 004255 1029 004256 1031 004262 1033 004277 1036 004304 1037 004307 1040 004312 1042 004320 1046 004321 1050 004322 1051 004335 1052 004337 1054 004346 1055 004347 1056 004351 1058 004354 1059 004361 1060 004373 1062 004374 1064 004423 1065 004433 1066 004435 1069 004436 1072 004445 1076 004460 1080 004466 1083 004474 1084 004477 1087 004515 1090 004532 1093 004542 1097 004543 1105 004544 1107 004554 1111 004555 1117 004556 1120 004576 1126 004577 1165 004610 1166 004614 1169 004616 1171 004624 1173 004632 1174 004633 1175 004643 1177 004653 1178 004655 1180 004657 1182 004665 1184 004670 1185 004673 1186 004675 1188 004676 1189 004677 1191 004700 1194 004705 1196 004714 1197 004722 1201 004723 1202 004724 1204 004726 1206 004733 1207 004735 1210 004742 1213 004747 1216 004760 1218 004774 1221 005001 1222 005004 1226 005007 1228 005011 1229 005021 1231 005031 1232 005032 1233 005034 1234 005036 1238 005051 1239 005052 1240 005060 1242 005073 1243 005074 1244 005075 1245 005076 1246 005077 1247 005100 1249 005102 1256 005126 1260 005127 1272 005130 1273 005136 1276 005141 1277 005152 1278 005170 1280 005204 1281 005214 1284 005215 1285 005217 1287 005236 1290 005243 1294 005261 1298 005266 1304 005267 1314 005270 1318 005302 1324 005340 1325 005341 1336 005342 1338 005346 1339 005347 1340 005350 1341 005351 1343 005353 1345 005355 1346 005357 1347 005416 1349 005423 1359 005425 1361 005426 1364 005432 1367 005436 1370 005442 1373 005446 1382 005452 1385 005456 1387 005471 1389 005474 1393 005536 1395 005540 1396 005543 1398 005544 1407 005547 1409 005552 1413 005614 1415 005616 1416 005621 1418 005622 1425 005625 1433 005631 1435 005634 1440 005703 1442 005705 1443 005710 1445 005711 1453 005714 1455 005717 1459 005763 1461 005765 1462 005770 1471 005771 1473 005774 1477 006040 1479 006042 1480 006045 1489 006046 1491 006054 1495 006114 1497 006116 1498 006121 1507 006122 1509 006130 1513 006170 1515 006172 1516 006175 1524 006176 1526 006201 1530 006243 1532 006245 1533 006250 1535 006251 1544 006254 1547 006260 1549 006273 1551 006276 1554 006340 1556 006342 1557 006345 1559 006346 1570 006351 1571 006353 1573 006357 1583 006405 1586 006415 1587 006416 1589 006417 1592 006423 1596 006424 1629 006435 1630 006441 1631 006443 1632 006444 1633 006445 1634 006450 1636 006461 1638 006464 1639 006466 1642 006467 1644 006502 1645 006523 1647 006530 1649 006544 1651 006562 1653 006566 1656 006602 1657 006625 1658 006626 1661 006642 1666 006741 1670 006745 1672 006750 1674 006754 1677 006770 1678 006771 1680 006773 1681 006776 1683 006777 1686 007000 1688 007003 1689 007005 1691 007006 1693 007021 1695 007030 1696 007031 1698 007033 1699 007036 1700 007037 1701 007043 1703 007045 1707 007046 1728 007047 1731 007055 1733 007057 1734 007062 1735 007071 1736 007073 1739 007127 1741 007131 1742 007134 1743 007137 1744 007140 1745 007141 1760 007142 1762 007147 1765 007153 1766 007161 1767 007171 1769 007177 1770 007220 1771 007225 1775 007236 1777 007237 1779 007266 1780 007273 1782 007275 1783 007302 1784 007307 1788 007314 1794 007335 1795 007340 1796 007343 1801 007344 1805 007345 1814 007346 1817 007354 1820 007411 1825 007444 1829 007445 1867 007456 1868 007471 1869 007474 1870 007477 1871 007501 1872 007502 1874 007503 1875 007505 1876 007521 1878 007524 1879 007526 1881 007527 1882 007550 1895 007555 1896 007570 1897 007576 1899 007601 1901 007603 1902 007621 1905 007674 1907 007700 1908 007702 1909 007703 1910 007704 1912 007707 1913 007712 1914 007714 1915 007724 1917 007725 1921 010003 1925 010034 1929 010114 1933 010120 1937 010132 1940 010146 1941 010147 1943 010151 1944 010154 1946 010155 1947 010156 1948 010157 1949 010174 1950 010215 1952 010222 1959 010225 1960 010227 1962 010230 1964 010243 1966 010252 1967 010253 1969 010255 1971 010260 1972 010263 1973 010273 1975 010276 1976 010317 1977 010324 1978 010325 1979 010326 1981 010327 1982 010332 1984 010333 1987 010335 1988 010340 1989 010341 1991 010345 1995 010346 2011 010347 2014 010355 2016 010365 2018 010367 2023 010422 2025 010423 2036 010425 2037 010430 2038 010433 2042 010475 2045 010501 2047 010504 2053 010531 2054 010533 2055 010536 2057 010555 2058 010565 2059 010617 2060 010620 2062 010622 2064 010625 2068 010626 2079 010630 2080 010631 2081 010634 2083 010637 2084 010647 2086 010652 2087 010655 2089 010656 2090 010711 2091 010716 2092 010717 2094 010721 2095 010724 2096 010727 2098 010733 2104 010734 2138 010745 2139 010747 2140 010750 2141 010751 2143 010752 2144 010766 2146 011005 2148 011010 2150 011013 2151 011015 2153 011032 2155 011036 2157 011040 2159 011043 2160 011046 2162 011047 2164 011050 2185 011052 2186 011055 2188 011060 2189 011071 2191 011102 2193 011113 2197 011136 2199 011140 2204 011204 2207 011212 2208 011225 2210 011237 2212 011250 2213 011255 2216 011271 2218 011273 2222 011274 2230 011275 2234 011305 2235 011315 2238 011341 2240 011343 2246 011344 2266 011355 2268 011360 2269 011363 2270 011365 2271 011375 2272 011420 2273 011421 2276 011454 2277 011457 2279 011465 2281 011476 2282 011477 2283 011504 2285 011506 2289 011507 2318 011520 2319 011522 2320 011523 2322 011525 2324 011530 2325 011541 2327 011557 2328 011563 2329 011565 2331 011605 2333 011607 2338 011652 2341 011660 2342 011671 2344 011702 2346 011704 2348 011706 2352 011707 2360 011710 2363 011714 2364 011725 2366 011733 2368 011735 2372 011736 2380 011737 2381 011747 2383 011755 2385 011757 2389 011760 2397 011761 2398 011771 2403 012023 2405 012025 2409 012026 2418 012027 2421 012033 2422 012043 2427 012075 2429 012077 2433 012100 2439 012101 2440 012104 2442 012110 2443 012113 2444 012123 2446 012125 2447 012127 2448 012131 2450 012133 2451 012135 2452 012137 2454 012141 2455 012144 2456 012150 2457 012151 2458 012154 2460 012155 2461 012160 2462 012163 2463 012164 2464 012167 2466 012170 2467 012173 2469 012176 2470 012201 2471 012204 2473 012207 2475 012212 2476 012215 2477 012217 2480 012222 2482 012225 2483 012230 2484 012232 2487 012235 2489 012240 2490 012243 2493 012245 2495 012250 2496 012253 2499 012255 2501 012260 2502 012263 2503 012266 2504 012273 2505 012276 2507 012300 2508 012302 2509 012304 2510 012306 2511 012307 2513 012311 2514 012314 2516 012316 2517 012320 2519 012322 2521 012323 2525 012324 2537 012326 2539 012332 2542 012337 2543 012343 2546 012346 2548 012351 2552 012354 2566 012355 2569 012361 2570 012365 2573 012410 2574 012414 2576 012435 2577 012441 2579 012464 2582 012470 2585 012477 2588 012504 2589 012506 2590 012510 2592 012517 2593 012520 2597 012546 2601 012547 2607 012550 2609 012554 2610 012556 2613 012572 2615 012600 2617 012614 2621 012615 2638 012616 2639 012627 2640 012657 2642 012675 2646 012730 2648 012747 2652 013001 2653 013013 2655 013031 2659 013064 2661 013106 2665 013140 2666 013167 2668 013206 2672 013241 2674 013264 2678 013316 2681 013324 2682 013353 2684 013372 2688 013425 2690 013454 2694 013506 2698 013507 2704 013510 2705 013513 2706 013520 2707 013523 2709 013525 2710 013527 2711 013530 2712 013531 2713 013532 2715 013542 2717 013557 2719 013566 2720 013570 2721 013574 2724 013615 2725 013616 2726 013620 2727 013621 2728 013622 2729 013623 2730 013624 2732 013625 2733 013626 2735 013636 2736 013640 2737 013642 2738 013645 2740 013653 2742 013654 2746 013655 2757 013656 2758 013662 2759 013664 2760 013701 2762 013721 2763 013726 2765 013732 2766 013741 2769 013742 2770 013744 2776 014026 2782 014113 ----------------------------------------------------------- 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