THIS FILE IS DAMAGED COMPILATION LISTING OF SEGMENT rw_fr_build_page Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/16/84 1132.0 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 /* format: off */ 7 8 /* 9* 10* This module is the report_writer_ page building subroutine called by 11* rw_display. 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* Changed - Al Dupuis - October 1984 - Became report_writer_. 39**/ 40 41 /* 42* 43* Formatted Page Mainline Processing Overview 44* 45* ________________________________ 46* | PAGE HEADER | 1. Format the page header. 47* |______________________________| 48* | TITLE BLOCK | 2. Format the title block. 49* |______________________________| 50* | DETAIL BLOCK | 3. Format N detail blocks (see below). 51* |______________________________| 52* | PAGE FOOTER | 4. Format the page footer. 53* |______________________________| 54* 55* 56* 57* Detail Block Detail Block Processing Overview 58* 59* -------------------------------- 60* | GROUP HEADER | 1. Format the group header. 61* |______________________________| 62* | ROW HEADER | 2. Format the row header. 63* |______________________________| 64* | ROW VALUE | 3. Format the row value. 65* |______________________________| 66* | SUBTOTAL BLOCK | 4. Format the subtotal block. 67* |______________________________| 68* | SUBCOUNT BLOCK | 5. Format the subcount block. 69* |______________________________| 70* | TOTAL BLOCK | 6. Format the total block. 71* |______________________________| 72* | COUNT BLOCK | 7. Format the count block. 73* |______________________________| 74* | ROW FOOTER | 8. Format the row footer. 75* |______________________________| 76* | GROUP FOOTER | 9. Format the group footer. 77* |______________________________| 78* 79* 80* The above mainline is done once per page for every page of the report. 81* A return is done to the caller after every page is built. If the 82* multi-pass feature is being used, no output is produced until the last 83* pass. This means that the entire report is done "n" times without 84* returning to the caller, where "n" is one less than the requested 85* number of passes. On the final pass it returns to the caller after each 86* page is built. 87* 88**/ 89 90 rw_fr_build_page: proc ( 91 92 report_cip_parm, /* input: points to report_control_info */ 93 page_info_ptr_parm, /* output: description of the page */ 94 code_parm /* output: success or failure */ 95 ); 96 97 dcl code_parm fixed bin (35) parm; 98 dcl page_info_ptr_parm ptr parm; 99 dcl report_cip_parm ptr parm; 100 101 report_cip = report_cip_parm; 102 call housekeeping; 103 call setup_for_a_page; 104 call make_rows_available; 105 on sub_error_ call sub_error_handler; 106 107 if ^report_control_info.flags.multi_pass_mode 108 then do; 109 call build_page; 110 return; 111 end; 112 113 status.flags.last_pass = OFF; 114 do status.current_pass_number = 1 to report_control_info.number_of_passes - 1; 115 do while (^report_control_info.flags.report_has_just_been_completed); 116 call build_page; 117 if ^report_control_info.flags.report_has_just_been_completed 118 then call setup_for_a_page; 119 end; 120 call adjust_multi_pass_execution_control_info; 121 call setup_for_a_page; 122 end; 123 124 report_control_info.flags.multi_pass_mode = OFF; 125 status.flags.last_pass = ON; 126 call build_page; 127 128 return; 129 130 adjust_multi_pass_execution_control_info: proc; 131 132 /* Just completed one pass of the report, set up for the next pass. */ 133 134 status.current_row_ptr = null (); 135 status.previous_row_ptr = null (); 136 status.next_row_ptr = make_ptr (1); 137 138 status.last_page_number = status.current_page_number; 139 status.last_row_number = report_control_info.no_of_rows_retrieved; 140 status.highest_row_formatted = 0; 141 142 if format_report_info.flags.subtotal_is_defined 143 then do; 144 subtotal_info.columns.subtotal (*) = 0; 145 subtotal_generation_info.current_generation_block = -1; 146 end; 147 if format_report_info.flags.total_is_defined 148 then total_info.columns.total (*) = 0; 149 150 if format_report_info.flags.subcount_is_defined 151 then do; 152 subcount_info.columns.subtotal (*) = 0; 153 subcount_generation_info.current_generation_block = -1; 154 end; 155 if format_report_info.flags.count_is_defined 156 then count_info.columns.total (*) = 0; 157 158 report_control_info.flags.report_is_formatted = OFF; 159 report_control_info.flags.report_has_just_been_completed = OFF; 160 report_control_info.no_of_formatted_pages = 0; 161 162 format_report_info.number_of_formatted_rows = 0; 163 164 return; 165 166 end adjust_multi_pass_execution_control_info; 167 168 backout_detail_block: proc ( 169 170 bdb_object_doing_the_back_out_parm /* input: the caller */ 171 ); 172 173 dcl bdb_object_doing_the_back_out_parm char (*) varying parm; 174 175 /* Remove one detail block from the page, make sure it isn't the first. */ 176 177 if status.total_number_of_rows_used ^> 0 178 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_format, 179 "^/There isn't enough room to place the ^a on page number ^d." 180 || "^/The current row number is ^d.", 181 bdb_object_doing_the_back_out_parm, 182 status.current_page_number, status.current_row_numb@f bY&rb@=L $F$F`P"&H &zj4Nf&T4P,zzarsave.profile T4PZbbp'$a f*@T4 SysDaemon f*@T4Estock fNMLPROD fr&T:PZaEstock.memo T:P!6$af*@T:*@T:F&T*P[aEstock.mbx T*Ryʱ!i^I>6af6>*@(T*.*@(T*.*@T*|&UUPNNaF8start_up.ec UUP !6r$tlaft*@UUl*UUF&UhR~8a|&Estock.value UhRyʳ!i$a0f*@Uh*@Uh|&7lP0a 1180m.profile 7lPO5!i,$a tf*@7l*@7l,&nQ0a!Estock.profile nQwz!i($a,f*@n*nEngAdmin fb&9R,ł44a,.gptol 9R.f ŸzRXabYfZ*@9XR*@9,&.R,Ńjjabgp2tol .Rt2 HabYf*@.H*@.Qa!opcom.unml s $af*@ s* sEngAdmin f*@ sQa1opxcom.incl.nml $a^>f*@ *@  *@ Q-a"+op1com.nml.MAC $aSf*@.*@ Z*@9.columns (bsb_loop).subtotal 266 - float (substr (next_row_value, 267 table_info.columns.column_index (subtotal_info.columns (bsb_loop).input_column), 268 table_info.columns.column_length (subtotal_info.columns (bsb_loop).input_column))); 269 end; 270 271 return; 272 273 end backout_subtotal_block; 274 275 build_page: proc; 276 277 /* 278* Make the pointers to the rows. Do the page header, the title block, 279* as many detail blocks as will fit, and the page footer. Use 280* the alogorithm as described back in the picture at the beginning of this 281* module. Close the page. Optionally save a copy of it. 282**/ 283 284 call make_row_ptrs; 285 if format_report_info.flags.page_header_is_defined 286 then call format_page_header; 287 if format_report_info.flags.title_block_is_defined 288 then call format_title_block; 289 first_time_through_the_detail_block_loop = ON; 290 status.still_formatting_detail_blocks = ON; 291 292 do while (status.still_formatting_detail_blocks); 293 if ^first_time_through_the_detail_block_loop 294 then call make_row_ptrs; 295 call format_detail_block; 296 first_time_through_the_detail_block_loop = OFF; 297 call make_rows_available; 298 end; 299 300 if format_report_info.flags.page_footer_is_defined 301 then call format_page_footer; 302 call close_page; 303 if report_control_info.flags.permanent_report & ^report_control_info.flags.multi_pass_mode 304 then call save_copy_of_page; 305 306 page_info_ptr_parm = page_ip; 307 code_parm = code; 308 309 return; 310 311 end build_page; 312 313 check_for_group_break: proc ( 314 315 cfgb_group_info_ptr_parm, /* input: ptr to group_info structure */ 316 cfgb_look_ahead_flag_parm, /* input: on if current should be compared to next */ 317 cfgb_column_changed_flag_parm /* output: on if a column changed */ 318 ); 319 320 dcl cfgb_column_changed_flag_parm bit (1) aligned parm; 321 dcl cfgb_column_number fixed bin; 322 dcl 1 cfgb_group_info like group_info based (cfgb_group_info_ptr_parm); 323 dcl cfgb_group_info_ptr_parm ptr parm; 324 dcl cfgb_look_ahead_flag_parm bit (1) aligned parm; 325 dcl cfgb_loop fixed bin; 326 327 /* Check the value of the named columns against the previous or next row and set the parm accordingly. */ 328 329 cfgb_column_changed_flag_parm = ON; 330 if (status.flags.last_row_of_report & cfgb_look_ahead_flag_parm) 331 | (status.flags.first_row_of_report & ^cfgb_look_ahead_flag_parm) 332 then return; 333 334 do cfgb_loop = 1 to cfgb_group_info.number_of_columns_to_group; 335 cfgb_column_number = cfgb_group_info.column_number (cfgb_loop); 336 if cfgb_look_ahead_flag_parm 337 then if substr (current_row_value, 338 table_info.columns.column_index (cfgb_column_number), 339 table_info.columns.column_length (cfgb_column_number)) 340 ^= substr (next_row_value, 341 table_info.columns.column_index (cfgb_column_number), 342 table_info.columns.column_length (cfgb_column_number)) 343 then return; 344 else; 345 else if substr (current_row_value, 346 table_info.columns.column_index (cfgb_column_number), 347 table_info.columns.column_length (cfgb_column_number)) 348 ^= substr (previous_row_value, 349 table_info.columns.column_index (cfgb_column_number), 350 table_info.columns.column_length (cfgb_column_number)) 351 then return; 352 else; 353 end; 354 355 cfgb_column_changed_flag_parm = OFF; 356 357 return; 358 359 end check_for_group_break; 360 361 check_for_outlining: proc; 362 363 dcl cfo_inner_loop fixed bin; 364 dcl cfo_loop fixed bin; 365 dcl cfo_most_major_column_changed bit (1) aligned; 366 dcl cfo_still_within_the_group bit (1) aligned; 367 368 /* 369* Never do outlining on the first row of the report or the first row on a 370* page. Do the single columns first (columns who are not a member of the 371* "group" of rows). Grab the column number and use it as an index into the 372* input_columns_info array, which gives us the number of the output column. 373**/ 374 375 if status.flags.first_row_of_report | status.flags.first_row_on_page 376 then do; 377 output_columns_info.columns (*).flags.outline = OFF; 378 return; 379 end; 380 381 if outline_info.number_of_single_columns ^= 0 382 then do cfo_loop = 1 to outline_info.number_of_single_columns; 383 if input_columns_info.columns.output_column (outline_info.single_columns (cfo_loop)) ^= 0 384 then do; 385 column_ip = addr (output_columns_info.columns (input_columns_info.columns.output_column ( 386 outline_info.single_columns (cfo_loop)))); 387 if substr (current_row_value, 388 table_info.columns.column_index (outline_info.single_columns (cfo_loop)), 389 table_info.columns.column_length (outline_info.single_columns (cfo_loop))) 390 = substr (previous_row_value, 391 table_info.columns.column_index (outline_info.single_columns (cfo_loop)), 392 table_info.columns.column_length (outline_info.single_columns (cfo_loop))) 393 then column_info.flags.outline = ON; 394 else column_info.flags.outline = OFF; 395 end; 396 end; 397 398 /* 399* Do the grouping columns next. A change in any member of the group who is 400* more major than our target column causes a change in all columns down to 401* our target column. Repeat the following sequence for each of our target 402* columns. Use the group column number as an index into the 403* input_columns_info array, which gives us the number of the output column. 404* If it has changed, or a more major member has changed, then it isn't 405* outlined. 406**/ 407 408 if outline_info.number_of_grouping_columns ^= 0 409 then do cfo_loop = 1 to outline_info.number_of_grouping_columns; 410 411 cfo_most_major_column_changed = OFF; 412 cfo_still_within_the_group = ON; 413 414 do cfo_inner_loop = 1 to group_info.number_of_columns_to_group 415 while (cfo_still_within_the_group); 416 417 if input_columns_info.columns.output_column (group_info.column_number (cfo_inner_loop)) ^= 0 418 then do; 419 column_ip = addr (output_columns_info.columns (input_columns_info.columns.output_column ( 420 group_info.column_number (cfo_inner_loop)))); 421 if cfo_most_major_column_changed 422 then column_info.flags.outline = OFF; 423 else do; 424 if substr (current_row_value, 425 table_info.columns.column_index (group_info.column_number (cfo_inner_loop)), 426 table_info.columns.column_length (group_info.column_number (cfo_inner_loop))) 427 = substr (previous_row_value, 428 table_info.columns.column_index (group_info.column_number (cfo_inner_loop)), 429 table_info.columns.column_length (group_info.column_number (cfo_inner_loop))) 430 then column_info.flags.outline = ON; 431 else do; 432 cfo_most_major_column_changed = ON; 433 column_info.flags.outline = OFF; 434 end; 435 end; 436 end; 437 438 if group_info.column_number (cfo_inner_loop) = outline_info@sJT 4@=L>&Sj&H &<sJT(Multics sJTTDEVM sJTTOBSWE sJT>rNMLPROD sJTOke sJT&qlLgra,Attendees qlRyY brasJT6*@ql*@ql*@qlb*@qlLp*@ql4&q 9qraTransactions q F-y 0,,rasJT*@q &q 9q<<ra4.Proceedings.1 q F-y ZZrasJT*@q >STDSPPT sJTTEngAdmin sJTL*@qlNMills sJT~*@qlEichele sJT*@qlFudge sJT*@qlDickson sJT*@ql(pGuest sJTbT*@qlTolts sJT *@ql *@qlbSiteSA sJT 6(*@qlrMSGD sJT >*@qlbPLASTICS sJT~*@qlpDPS-E sJT*@ql and length to the result of the editing request. 524**/ 525 526 cfsb_column_changed_flag_parm = OFF; 527 cfsb_level_number = cfsb_level_number_parm; 528 cfsb_subtotal_columns_info.columns (*).flags.outline = ON; 529 530 do cfsb_loop = 1 to cfsb_subtotal_info.number_of_columns_to_subtotal; 531 if cfsb_subtotal_info.columns (cfsb_loop).level = cfsb_level_number 532 then do; 533 cfsb_column_number = cfsb_subtotal_info.columns (cfsb_loop).watch_column; 534 column_ip = addr (cfsb_subtotal_columns_info.columns (input_columns_info.columns ( 535 cfsb_subtotal_info.columns (cfsb_loop).input_column).output_column)); 536 if ^cfsb_subtotal_info.columns (cfsb_loop).flags.group_column 537 then do; 538 if status.flags.last_row_of_report 539 then call subtotal_break (input_columns_info.columns (cfsb_column_number).output_column); 540 else if substr (current_row_value, 541 table_info.columns.column_index (cfsb_column_number), 542 table_info.columns.column_length (cfsb_column_number)) 543 ^= substr (next_row_value, 544 table_info.columns.column_index (cfsb_column_number), 545 table_info.columns.column_length (cfsb_column_number)) 546 then call subtotal_break (input_columns_info.columns (cfsb_column_number).output_column); 547 else; 548 end; 549 else do; 550 if status.flags.last_row_of_report 551 then cfsb_most_major_column_changed = ON; 552 else cfsb_most_major_column_changed = OFF; 553 cfsb_still_within_the_group = ON; 554 do cfsb_inner_loop = 1 to group_info.number_of_columns_to_group 555 while (cfsb_still_within_the_group); 556 if cfsb_most_major_column_changed 557 then call subtotal_break (input_columns_info.columns ( 558 group_info.column_number (cfsb_inner_loop)).output_column); 559 else if substr (current_row_value, 560 table_info.columns.column_index (group_info.column_number (cfsb_inner_loop)), 561 table_info.columns.column_length (group_info.column_number (cfsb_inner_loop))) 562 ^= substr (next_row_value, 563 table_info.columns.column_index (group_info.column_number (cfsb_inner_loop)), 564 table_info.columns.column_length (group_info.column_number (cfsb_inner_loop))) 565 then call subtotal_break (input_columns_info.columns 566 (group_info.column_number (cfsb_inner_loop)).output_column); 567 else; 568 if group_info.column_number (cfsb_inner_loop) = cfsb_column_number 569 then cfsb_still_within_the_group = OFF; 570 end; 571 end; 572 end; 573 end; 574 575 return; 576 577 subtotal_break: proc ( 578 579 sb_output_column_number_parm /* input: number of column that changed */ 580 ); 581 582 dcl sb_output_column_number_parm fixed bin parm; 583 584 /* 585* This subroutine is called when a watch column has changed and it is time 586* to generate a subtotal break. Set the parm to indicate a column has 587* changed. Set the subtotal/subcount output column's editing flag off. If 588* the column that changed isn't being excluded from the page, then set it's 589* editing bit off and if it has an editing request associated with it, set 590* the pointer and length so that the edited result is displayed in that 591* column. 592**/ 593 594 cfsb_column_changed_flag_parm = ON; 595 column_info.flags.outline = OFF; 596 if sb_output_column_number_parm = 0 597 then return; 598 599 cfsb_subtotal_columns_info.columns (sb_output_column_number_parm).flags.outline = OFF; 600 if cfsb_subtotal_columns_info.columns (sb_o_mult_ Rn\AV0227 T=TqAVtape_mult_ ;RnrAV0045 T!T!AV-tape_mult_ RnމAV0045 T8RT8۳AV-tape_mult_ RnI'AV0045 TS*TS;AV-tape_mult_ RnAV0045 TnՎTn_AV-tape_mult_ Ro cAV0045 T$T/AV-tape_mult_ %RoAV0031 Tđ1TĥjdAVtape_mult_ zRoAV0031 TJ$TMAVtape_mult_ Ro27AV0031 T͓IT͙iAVtape_mult_ RpGAV0118 T6TorAVvtape_mult_ RRpAV0118 Tc:TcAVvtape_mult_ #Rq˒AV0118 TT AVvtape_mult_ Rr MAV0118 T6rT6AVvtape_mult_ RrO AV0118 TT6`hTT7lAVvtape_mult_ RslAV0118 TT;AVvtape_mult_ RtEAV0195 TTTTT[AVtape_mult_ Ru>AV0022 TёT AVtape_mult_ )RvUAV0022 T4T4AVtape_mult_ Rv AV0022 Tp3TpAVtape_mult_ RwAV0022 T]TMeAVtape_mult_ RxFAV0022 T~TAVtape_mult_ RxAV0095 T!ʖT!ȲAV_tape_mult_ RxAV0084 T%T%|AVTtape_mult_ *RxTAV0035 T(AKT(AV#tape_mult_ Rx AV0035 TCŵTC AV#tape_mult_ \RxuAV0035 T^ T^AV#tape_mult_ GRx6AV0035 Tyo!Ty|AV#tape_mult_ YRyKAV0035 TxbT}AV#tape_mult_ }RypAV0140 Tƈ3TPAVtape_mult_ Ry"AV0140 TV'T]AVtape_mult_ RyAV0100 TZTakAVdtape_mult_ &Ry_AV0100 TTLAVdtape_mult_ Rz\AV0115 TRC%TvfjAVstape_mult_ RzhAV0115 ThYThgAVstape_mult_ R{ AV0235 T]T] AVtape_mult_ R|"AV0235 TiT֝>AVtape_mult_ R|dAV0235 TYbTYAVtape_mult_ R}AV0235 TAFTAyAVtape_mult_ R}AV0067 TѹT(@AVCtape_mult_ (R}_AV0101 TPTT{AVetape_mult_ R} AV0101 TVTضhAVetape_mult_ yR}xAV0101 T7TtAVetape_mult_ dR}~AV0066 TͩTAVBtape_mult_ 54 755 eas_right_bracket_position = eas_current_inner_position + eas_next_bracket - 1; 756 eas_string_length = eas_right_bracket_position - eas_string_start; 757 eas_string_ptr = addr (substr (eas_active_string_parm, eas_string_start, 1)); 758 time1 = vclock; 759 call ssu_$evaluate_active_string (sci_ptr, null (), eas_string, 760 eas_active_string_type, eas_spare_string, eas_code); 761 time2 = vclock; 762 report_control_info.ssu_evaluate_active_string_time 763 = report_control_info.ssu_evaluate_active_string_time + time2 - time1; 764 if eas_code ^= 0 765 then call ssu_$abort_line (sci_ptr, eas_code); 766 767 eas_result_string_parm = eas_result_string_parm || eas_spare_string; 768 eas_current_position = eas_right_bracket_position + 1; 769 770 if eas_current_position > eas_active_string_parm_length 771 then eas_still_evaluating = OFF; 772 else if search (substr (eas_active_string_parm, eas_current_position), LEFT_OR_RIGHT_BRACKET) = 0 773 then do; 774 eas_result_string_parm = eas_result_string_parm 775 || substr (eas_active_string_parm, eas_current_position); 776 eas_still_evaluating = OFF; 777 end; 778 else; 779 780 end; 781 782 return; 783 784 end evaluate_active_string; 785 786 execute_editing_strings: proc; 787 788 dcl ees_loop fixed bin; 789 790 /* 791* Walk through the list of input columns in the column order specified 792* by the user. If the column has an editing request associated with it, 793* pick up the pointer and length to the original editing request from the 794* input_columns_info array. Have it evaluated. If the column isn't being 795* excluded from the page, then set the editing string ptr and length for 796* it's output column to the result string; if it is then set the same 797* information for the input column. Stash the result string in the temp 798* segment and advance the next available byte index. 799**/ 800 801 editing_strings_next_byte = format_report_info.editing_strings_next_available_byte; 802 803 do ees_loop = 1 to input_columns_info.number_of_columns; 804 column_ip = addr (input_columns_info.columns (input_columns_order (ees_loop))); 805 if column_info.editing 806 then do; 807 editing_string_rl = column_info.editing_string_length; 808 editing_string_rp = column_info.editing_string_ptr; 809 input_string = editing_string_result; 810 call evaluate_active_string (input_string, output_string); 811 if column_info.output_column ^= 0 812 then column_ip = addr (output_columns_info.columns (column_info.output_column)); 813 column_info.editing_string_result_length = length (output_string); 814 column_info.editing_string_result_ptr 815 = addr (editing_strings_temp_seg_as_an_array (editing_strings_next_byte)); 816 substr (editing_strings_temp_seg, editing_strings_next_byte, 817 column_info.editing_string_result_length) = output_string; 818 editing_strings_next_byte 819 = editing_strings_next_byte + column_info.editing_string_result_length; 820 end; 821 end; 822 823 return; 824 825 end execute_editing_strings; 826 827 fit_column: proc ( 828 829 fc_column_value_parm, /* input: actual column value */ 830 fc_output_width_parm, /* input: width to place it into */ 831 fc_output_position_parm, /* input: starting position in template */ 832 fc_alignment_mode_parm, /* input: left, right, center, or both */ 833 fc_decimal_position_parm, /* input: decimal position within width */ TAVtape_mult_ RPAV0124 ThNT[AV|tape_mult_ #RP"AV0012 T HT IRAV tape_mult_ RPAV0012 T$T$ԀAV tape_mult_ RPAAV0012 T?T?AV tape_mult_ &RPdAV0012 TZTZAV tape_mult_ RPπAV0012 TuDRTuAV tape_mult_ *RQ; AV0133 T5TAVtape_mult_ RQAV0133 TpkTdAVtape_mult_ RQQAV0133 TŢ|]TůAVtape_mult_ XRQrAV0133 Tݢ47TݧAVtape_mult_ RQyAV0146 T"{TAVtape_mult_ 7RR8AV0146 T6$T60AVtape_mult_ -RSAV0146 TTtAVtape_mult_ RSVAV0146 T sT AVtape_mult_ RTrAV0146 T'JTT'K.AVtape_mult_ RT=AV0146 Twx5Tw AVtape_mult_ /RUAV0044 T=T3AV,tape_mult_ RUAV0185 TT)AVtape_mult_ %`RU3rAV0085 T9TLaAVUtape_mult_ RUAV0085 Tm(CTyAVUtape_mult_ \RU AV0085 TKȶTU2AVUtape_mult_ +RUuEAV0085 TޔTޟpAVUtape_mult_ RUAV0085 T4T?AVUtape_mult_ 0R`AV0139 Tm <~Tm0AVtape_mult_ RkKAV0230 TTNAVtape_mult_ RkQAV0024 TֳTAVtape_mult_ :RlPAV0024 T%T%'AVtape_mult_ Rl AV0024 Tu΂Tu+AVtape_mult_ RmAV0024 TƤTƥ AVtape_mult_ RnSAV0024 T]T蚪AVtapeent_options.switches.adj_sw = ON; 914 else format_document_options.switches.adj_sw = OFF; 915 916 call format_document_$string (input_string_non_varying, output_string_non_varying, 917 fc_returned_string_length, format_document_options_ptr, fc_code); 918 if fc_code ^= 0 919 then if fc_code ^= error_table_$recoverable_error 920 then call ssu_$abort_line (sci_ptr, fc_code); 921 if fc_returned_string_length = 0 922 then return; 923 924 output_string_redefined.length_word = fc_returned_string_length; 925 926 if fc_alignment_mode_parm = CENTER_ALIGNMENT | fc_alignment_mode_parm = RIGHT_ALIGNMENT 927 then fc_additional_alignment = ON; 928 else fc_additional_alignment = OFF; 929 930 if ^fc_fill_parm 931 then do; 932 call truncate_the_column; 933 return; 934 end; 935 936 /* 937* Walk through the filled string. Find the newline. If the found portion 938* contains any backspaces then send it off to the hardcopy terminal 939* alignment routine. If it doesn't and there is additional alignment then 940* have it done. If it doesn't and there isn't additional alignment then just 941* place it on the page. If we're still filling then advance our current 942* line on the page, check for template already laid down, lay it down and 943* mark it if it hasn't been laid down. 944**/ 945 946 fc_still_filling = ON; 947 fc_current_position = 1; 948 949 do while (fc_still_filling); 950 fc_new_line_position = index (substr (output_string, fc_current_position), NEWLINE); 951 if index (substr (output_string, fc_current_position, fc_new_line_position - 1), BACKSPACE) ^= 0 952 then do; 953 fc_spare_string = substr (output_string, fc_current_position, fc_new_line_position - 1); 954 call align_hardcopy_dependent_string (fc_spare_string); 955 end; 956 else if fc_additional_alignment 957 then do; 958 fc_spare_string = substr (output_string, fc_current_position, fc_new_line_position - 1); 959 call place_column (fc_spare_string); 960 end; 961 else substr (page_defined_as_lines (fc_current_line_on_page), 962 fc_output_position_parm, fc_new_line_position - 1) 963 = substr (output_string, fc_current_position, fc_new_line_position - 1); 964 fc_current_position = fc_current_position + fc_new_line_position; 965 if fc_current_position > output_string_redefined.length_word 966 then fc_still_filling = OFF; 967 else do; 968 fc_current_line_on_page = fc_current_line_on_page + 1; 969 if fc_current_line_on_page > template_map_number_of_bits 970 then do; 971 fc_code_parm = PAGE_OVERFLOW_ERROR_CODE; 972 return; 973 end; 974 if ^template_map (fc_current_line_on_page) 975 then do; 976 page_defined_as_lines (fc_current_line_on_page) = fc_template_parm; 977 template_map (fc_current_line_on_page) = ON; 978 end; 979 end; 980 end; 981 982 return; 983 984 end fill_the_column; 985 986 place_column: proc ( 987 988 pc_column_value_parm /* input: actual column value */ 989 ); 990 991 dcl pc_column_value_parm char (*) varying parm; 992 dcl pc_column_width fixed bin; 993 dcl pc_decimal_position fixed bin; 994 dcl pc_no_of_digits_to_the_left fixed bin; 995 dcl pc_no_of_digits_to_the_right fixed bin; 996 dcl pc_remaining_digits fixed bin; 997 dcl pc_starting_position fixed bin; 998 dcl pc_the_actual_decimal fixed bin; 999 1000 /* 1001* Set the pointer to the output column to the desired spot on the page. 1002* Have the value aligned within the output column based on what the 1003* parm says. 1004**/ 1005 1006 fc_output_column_ptr = addr (page_defined_as_chars ( 1007 ((fc_current_line_on_page - 1) * page_info.width + fc_output_position_parm))); 1008 1009 if fc_alignment_mode_parm = DECIMAL_ALIGNMENT 1010 then call align_decimal_value; 1011 else if fc_alignment_mode_parm = LEFT_ALIGNMENT 1012 then call align_left_value; 1013 else if fc_alignment_mode_parm = RIGHT_ALIGNMENT 1014 then call align_right_value; 1015 else if fc_alignment_mode_parm = CENTER_ALIGNMENT 1016 then call align_center_value; 1017 else call ssu_$abort_line (sci_ptr, error_table_$badcall, 1018 "Unknown alignment mode ^d.", fc_alignment_mode_parm); 1019 1020 return; 1021 1022 align_center_value: proc; 1023 1024 /* 1025* Center the value in the output column. (Centre it for the Canadian users. 1026* This subroutine speaks American and Canadian.) Figure out where it should 1027* start and substring it into place. 1028**/ 1029 1030 pc_column_width = length (pc_column_value_parm); 1031 1032 if (pc_column_width = fc_output_width_parm) | (fc_output_width_parm - pc_column_width) = 1 1033 then pc_starting_position = 1; 1034 else if fc_output_width_parm - pc_column_width = 2 1035 then pc_starting_position = 2; 1036 else do; 1037 pc_starting_position = fc_output_width_parm - pc_column_width; 1038 pc_starting_position = divide (pc_starting_position, 2, 17) + 1; 1039 end; 1040 1041 substr (fc_output_column, pc_starting_position, pc_column_width) = pc_column_value_parm; 1042 1043 return; 1044 1045 end align_center_value; 1046 1047 align_decimal_value: proc; 1048 1049 /* Decimal align it within the output column width, adding the decimal if necessary. */ 1050 1051 pc_column_value = pc_column_value_parm; 1052 pc_column_width = length (pc_column_value); 1053 if fc_decimal_position_parm > fc_output_width_parm 1054 then pc_decimal_position = fc_output_width_parm; 1055 else pc_decimal_position = fc_decimal_position_parm; 1056 pc_no_of_digits_to_the_left = pc_decimal_position - 1; 1057 pc_no_of_digits_to_the_right = fc_output_width_parm - pc_decimal_position; 1058 1059 substr (fc_output_column, pc_decimal_position, 1) = "."; 1060 pc_the_actual_decimal = index (pc_column_value, "."); 1061 if pc_the_actual_decimal = 0 1062 then do; 1063 if pc_column_width = pc_decimal_position 1064 then pc_column_value = substr (pc_column_value, 2) || "."; 1065 else pc_column_value = pc_column_value || "."; 1066 pc_column_width = length (pc_column_value); 1067 pc_the_actual_decimal = pc_column_width; 1068 end; 1069 1070 if pc_the_actual_decimal = pc_decimal_position 1071 then substr (fc_output_column, 1, pc_no_of_digits_to_the_left) 1072 = substr (pc_column_value, 1, pc_no_of_digits_to_the_left); 1073 else if pc_the_actual_decimal - 1 > pc_no_of_digits_to_the_left 1074 then substr (fc_output_column, 1, pc_no_of_digits_to_the_left) 1075 = substr (pc_column_value, pc_the_actual_decimal 1076 - pc_no_of_digits_to_the_left, pc_no_of_digits_to_the_left); 1077 else substr (fc_output_column, pc_no_of_digits_to_the_left 1078 - pc_the_actual_decimal + 2, pc_the_actual_decimal - 1) 1079 = substr (pc_column_value, 1, pc_the_actual_decimal - 1); 1080 1081 if pc_no_of_digits_to_the_right = 0 | pc_the_actual_decimal = pc_column_width 1082 then return; 1083 1084 pc_remaining_digits = pc_column_width - pc_the_actual_decimal; 1085 if pc_no_of_digits_to_the_right = pc_remaining_digits 1086 then substr (fc_output_column, pc_decimal_position + 1) 1087 = substr (pc_column_value, pc_the_actual_decimal + 1); 1088 else if pc_no_of_digits_to_the_right > pc_remaining_digits 1089 then substr (fc_output_column, pc_decimal_position + 1) 1090 = substr (pc_column_value, pc_the_actual_decimal + 1); 1091 else substr (fc_output_column, pc_decimal_position + 1) 1092 = substr (pc_column_value, pc_the_actual_decimal + 1, pc_no_of_digits_to_the_right); 1093 1094 return; 1095 1096 end align_decimal_value; 1097 1098 align_left_value: proc; 1099 1100 /* 1101* An easy alignment task, but probably the most often used. Note that only 1102* the exact number of characters in the parm are what's moved. The template 1103* that was laid down already blanked the rest of the output column. 1104**/ 1105 1106 substr (fc_output_column, 1, length (pc_column_value_parm)) = pc_column_value_parm; 1107 1108 return; 1109 1110 end align_left_value; 1111 1112 align_right_value: proc; 1113 1114 /* 1115* Once again, only the characters in the parm are moved. 1116**/ 1117 1118 substr (fc_output_column, fc_output_width_parm - length (pc_column_value_parm) + 1) 1119 = pc_column_value_parm; 1120 1121 return; 1122 1123 end align_right_value; 1124 1125 end place_column; 1126 1127 align_hardcopy_dependent_string: proc ( 1128 1129 ahds_column_value_parm /* input: actual column value */ 1130 ); 1131 1132 dcl ahds_column_value_parm char (*) varying parm; 1133 dcl ahds_current_input_position fixed bin; 1134 dcl ahds_current_output_position fixed bin; 1135 dcl ahds_loop fixed bin; 1136 dcl ahds_number_of_chars_to_move fixed bin; 1137 dcl ahds_overstrike_index fixed bin; 1138 dcl ahds_still_overstriking bit (1) aligned; 1139 dcl ahds_string_length fixed bin; 1140 dcl ahds_truncate_the_column bit (1) aligned; 1141 dcl ahds_virtual_length fixed bin; 1142 1143 /* 1144* Hopefully all of the hardcopy device support will one day be moved out 1145* of the operating system and applications forever. In the meantime we 1146* continue to bake it into everything written on Multics because that's 1147* the way it was done back in 1965 when Multics was first started. 1148* Fortunately the video system has said "I don't support ugly backspaces, 1149* and if you give me any to write I will refuse and hand you back an error 1150* code." This subroutine pre-processes the data so that the video system 1151* will not give us any error codes, and we can do things more rationally 1152* than they were done back in 1965 and are still being done today many 1153* places in Multics. This is also the key to why this formatter runs *so* 1154* fast when compared with others like compose. It never has to try to 1155* figure out where it really is on a page, because it doesn't have 1156* imbedded hardcopy device motion control characters stuck in the formatted 1157* page. Instead they are moved off to a separate overstrike array, and the 1158* formatter only runs slower for the people who continue to bake hardcopy 1159* device motion control characters in their formatted data. When the page is 1160* being displayed through the video system the page is displayed without 1161* any of the overstruck sequences; when it is being displayed in hardcopy 1162* dependent fashion the overstruck characters are put back in at display 1163* time. 1164**/ 1165 1166 ahds_string_length = length (ahds_column_value_parm); 1167 if ahds_string_length = 0 1168 then return; 1169 1170 ahds_overstrike_index = ((fc_current_line_on_page - 1) * page_info.width) 1171 + fc_output_position_parm; 1172 fc_output_column_ptr = addr (page_defined_as_chars (ahds_overstrike_index)); 1173 1174 ahds_virtual_length = 0; 1175 do ahds_loop = 1 to ahds_string_length; 1176 if substr (ahds_column_value_parm, ahds_loop, 1) ^= BACKSPACE 1177 then ahds_virtual_length = ahds_virtual_length + 1; 1178 else ahds_virtual_length = ahds_virtual_length - 1; 1179 end; 1180 1181 if ^fc_fill_parm 1182 then do; 1183 if ahds_virtual_length > fc_output_width_parm 1184 then do; 1185 ahds_number_of_chars_to_move = fc_output_width_parm - truncation_indicator_length; 1186 ahds_truncate_the_column = ON; 1187 end; 1188 else do; 1189 ahds_number_of_chars_to_move = ahds_virtual_length; 1190 ahds_truncate_the_column = OFF; 1191 end; 1192 if ahds_truncate_the_column 1193 then if fc_output_width_parm <= truncation_indicator_length 1194 then do; 1195 if fc_output_width_parm < truncation_indicator_length 1196 then fc_output_column = substr (format_report_info.truncation_indicator, 1, fc_output_width_parm); 1197 else fc_output_column = format_report_info.truncation_indicator; 1198 return; 1199 end; 1200 else; 1201 else; 1202 end; 1203 else ahds_number_of_chars_to_move = ahds_virtual_length; 1204 1205 if page_info.page_overstrike_info_ptr = null () 1206 then do; 1207 page_info.page_overstrike_info_ptr = page_overstrike_ip; 1208 unspec (page_overstrike_info.bit_map) = OFF; 1209 end; 1210 1211 if ^fc_additional_alignment 1212 then ahds_current_output_position = 1; 1213 else do; 1214 if fc_alignment_mode_parm = RIGHT_ALIGNMENT 1215 then ahds_current_output_position = fc_output_width_parm - ahds_virtual_length + 1; 1216 else do; 1217 if fc_output_width_parm = ahds_virtual_length | fc_output_width_parm - ahds_virtual_length = 1 1218 then ahds_current_output_position = 1; 1219 else if fc_output_width_parm - ahds_virtual_length = 2 1220 then ahds_current_output_position = 2; 1221 else do; 1222 ahds_current_output_position = fc_output_width_parm - ahds_virtual_length; 1223 ahds_current_output_position = divide (ahds_current_output_position, 2, 17) + 1; 1224 end; 1225 end; 1226 end; 1227 ahds_current_input_position = 1; 1228 1229 do ahds_loop = 1 to ahds_number_of_chars_to_move; 1230 substr (fc_output_column, ahds_current_output_position, 1) 1231 = substr (ahds_column_value_parm, ahds_current_input_position, 1); 1232 ahds_current_input_position = ahds_current_input_position + 1; 1233 ahds_still_overstriking = ON; 1234 do while (ahds_still_overstriking); 1235 if ahds_current_input_position < ahds_string_length 1236 then if substr (ahds_column_value_parm, ahds_current_input_position, 1) ^= BACKSPACE 1237 then ahds_still_overstriking = OFF; 1238 else do; 1239 ahds_current_input_position = ahds_current_input_position + 1; 1240 page_overstrike_info.bit_map (ahds_overstrike_index + ahds_current_output_position - 1) = ON; 1241 page_overstrike_info.chars (ahds_overstrike_index + ahds_current_output_position - 1) 1242 = substr (ahds_column_value_parm, ahds_current_input_position, 1); 1243 ahds_current_input_position = ahds_current_input_position + 1; 1244 end; 1245 else ahds_still_overstriking = OFF; 1246 end; 1247 ahds_current_output_position = ahds_current_output_position + 1; 1248 end; 1249 1250 if ^fc_fill_parm 1251 then if ahds_truncate_the_column 1252 then substr (fc_output_column, fc_output_width_parm - truncation_indicator_length + 1) 1253 = format_report_info.truncation_indicator; 1254 else; 1255 else; 1256 1257 return; 1258 1259 end align_hardcopy_dependent_string; 1260 1261 truncate_the_column: proc; 1262 1263 /* 1264* Find out if the character string or the output width is smallest. 1265* Translate any newlines format_document_ may have put in into blanks. 1266* If it contains overstruck characters then have the subroutine which 1267* specializes in that type of stuff do it; else just place the portion 1268* of the character string that fits into the output position. If this 1269* results in truncation then place the truncation indicator to show the 1270* user this has happened. 1271**/ 1272 1273 fc_string_end = min (output_string_redefined.length_word, fc_output_width_parm); 1274 if fc_string_end = 0 1275 then return; 1276 1277 fc_spare_string = substr (output_string, 1, fc_string_end); 1278 fc_spare_string = translate (fc_spare_string, BLANK, NEWLINE); 1279 if search (fc_spare_string, BACKSPACE) ^= 0 1280 then do; 1281 call align_hardcopy_dependent_string (fc_spare_string); 1282 return; 1283 end; 1284 1285 fc_spare_string_length = length (fc_spare_string); 1286 substr (page_defined_as_lines (fc_line_number_parm), fc_output_position_parm, 1287 fc_spare_string_length) = fc_spare_string; 1288 if output_string_redefined.length_word ^> fc_output_width_parm 1289 then return; 1290 1291 if fc_output_width_parm > truncation_indicator_length 1292 then substr (page_defined_as_lines (fc_line_number_parm), 1293 fc_output_position_parm + fc_output_width_parm - truncation_indicator_length, truncation_indicator_length) 1294 = format_report_info.truncation_indicator; 1295 else substr (page_defined_as_lines (fc_line_number_parm), 1296 fc_output_position_parm, fc_output_width_parm) 1297 = substr (format_report_info.truncation_indicator, 1, fc_output_width_parm); 1298 1299 return; 1300 1301 end truncate_the_column; 1302 1303 end fit_column; 1304 1305 format_detail_block: proc; 1306 1307 dcl fdb_code fixed bin (35); 1308 dcl fdb_column_changed_flag bit (1) aligned; 1309 1310 /* 1311* If the detail block won't fit on the page then we are done. Check to make 1312* sure that at least one detail block has been placed on the page. 1313**/ 1314 1315 if (status.number_of_lines_needed_for_detail_block > status.remaining_lines_on_page) 1316 | (format_report_info.flags.page_footer_is_defined & status.remaining_lines_on_page 1317 < status.number_of_lines_needed_for_page_footer + status.number_of_lines_needed_for_detail_block) 1318 then do; 1319 if status.total_number_of_rows_used ^> 0 1320 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_format, 1321 "^/There isn't enough room to place the first row on the page." 1322 || "^/It was row number ^d on page number ^d.", 1323 status.current_row_number, status.current_page_number); 1324 else do; 1325 still_formatting_detail_blocks = OFF; 1326 return; 1327 end; 1328 end; 1329 1330 /* 1331* Check to see if this row has been processed before and backed off the 1332* page. Flag appropriately. If the previous detail block used some lines 1333* then setup the detail_block information so this one can be backed out 1334* properly. 1335**/ 1336 1337 if status.current_row_number > status.highest_row_formatted 1338 then do; 1339 status.highest_row_formatted = status.current_row_number; 1340 status.flags.row_has_been_processed_before = OFF; 1341 end; 1342 else status.flags.row_has_been_processed_before = ON; 1343 1344 if status.flags.detail_block_used_some_lines 1345 then do; 1346 formatted_page_info.number_of_detail_blocks = formatted_page_info.number_of_detail_blocks + 1; 1347 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks) = 0; 1348 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).row_number 1349 = status.current_row_number; 1350 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).beginning_line_number 1351 = status.current_line_on_page; 1352 end; 1353 1354 /* 1355* Mark this block initially as using no lines. Execute the editing requests, 1356* and gather the subtotals, subcounts, totals and counts before formatting 1357* anything. 1358**/ 1359 1360 status.flags.detail_block_used_some_lines = OFF; 1361 1362 if format_report_info.flags.editing_is_defined 1363 then call execute_editing_strings; 1364 1365 if format_report_info.flags.subtotal_is_defined 1366 then call gather_subtotals; 1367 1368 if format_report_info.flags.subcount_is_defined 1369 then call gather_subcounts; 1370 1371 if format_report_info.flags.total_is_defined 1372 then call gather_totals; 1373 1374 if format_report_info.flags.count_is_defined 1375 then call gather_counts; 1376 1377 /* 1378* If a group header and trigger are defined then check to see if it is time 1379* to process it. If one of the trigger columns changed then format the 1380* header, backing it out if necessary. 1381**/ 1382 1383 if format_report_info.flags.group_header_is_defined 1384 & format_report_info.flags.group_header_trigger_is_defined 1385 then do; 1386 call check_for_group_break (format_report_info.group_header_trigger_info_ptr, 1387 LOOK_BEHIND, fdb_column_changed_flag); 1388 if fdb_column_changed_flag 1389 then do; 1390 call format_header (format_report_info.group_header_info_ptr, GROUP_HEADER, 1391 status.current_line_on_page, status.remaining_lines_on_page, 1392 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks) 1393 .group_header_length, fdb_code); 1394 if fdb_code ^= 0 1395 then do; 1396 call backout_detail_block (GROUP_HEADER); 1397 return; 1398 end; 1399 else status.flags.detail_block_used_some_lines = ON; 1400 end; 1401 end; 1402 1403 /* 1404* Next the row header. If it's defined then format it, backing it out if 1405* necessary. 1406**/ 1407 1408 if format_report_info.flags.row_header_is_defined 1409 then do; 1410 call format_header (format_report_info.row_header_info_ptr, ROW_HEADER, 1411 status.current_line_on_page, status.remaining_lines_on_page, 1412 formatted_page_info.detail_blocks (formatted_page_info 1413 .number_of_detail_blocks).row_header_length, fdb_code); 1414 if fdb_code ^= 0 1415 then do; 1416 call backout_detail_block (ROW_HEADER); 1417 return; 1418 end; 1419 else status.flags.detail_block_used_some_lines = ON; 1420 end; 1421 1422 /* 1423* If outlining is defined then outline the columns as appropriate. 1424**/ 1425 1426 if format_report_info.flags.outline_is_defined 1427 then call check_for_outlining; 1428 1429 /* 1430* If all columns haven't been excluded then format the row, backing it out 1431* if necessary. 1432**/ 1433 1434 if format_report_info.flags.row_value_is_defined 1435 then do; 1436 call format_row (ROW_VALUE, output_columns_ip, 1437 row_value_template_ip, GENERATE_ZERO_BLANK_LINES_TRAILER, 1438 status.current_line_on_page, status.remaining_lines_on_page, 1439 formatted_page_info.detail_blocks (formatted_page_info 1440 .number_of_detail_blocks).row_length, fdb_code); 1441 if fdb_code ^= 0 1442 then do; 1443 call backout_detail_block (ROW_VALUE); 1444 return; 1445 end; 1446 else status.flags.detail_block_used_some_lines = ON; 1447 end; 1448 1449 /* 1450* If subtotals are defined then format them if it's time for any of them 1451* to be generated, backing out the block if necessary. 1452**/ 1453 1454 if format_report_info.flags.subtotal_is_defined 1455 then do; 1456 call format_subtotals (subtotal_ip, subtotal_columns_ip, subtotal_generation_ip, ROW_SUBTOTAL, 1457 formatted_page_info.detail_blocks.subtotal_length 1458 (formatted_page_info.number_of_detail_blocks), 1459 status.flags.subtotals_ejection_in_progress, fdb_code); 1460 if fdb_code ^= 0 1461 then do; 1462 call backout_detail_block (ROW_SUBTOTAL); 1463 return; 1464 end; 1465 end; 1466 1467 /* 1468* If subcounts are defined then format them if it's time for any of them 1469* to be generated, backing out the block if necessary. 1470**/ 1471 1472 if format_report_info.flags.subcount_is_defined 1473 then do; 1474 call format_subtotals (subcount_ip, subcount_columns_ip, subcount_generation_ip, ROW_SUBCOUNT, 1475 formatted_page_info.detail_blocks.subcount_length 1476 (formatted_page_info.number_of_detail_blocks), 1477 status.flags.subcounts_ejection_in_progress, fdb_code); 1478 if fdb_code ^= 0 1479 then do; 1480 call backout_detail_block (ROW_SUBCOUNT); 1481 return; 1482 end; 1483 end; 1484 1485 /* 1486* If totals are defined and this is the last row of the report then format 1487* them, backing them out if necessary. 1488**/ 1489 1490 if format_report_info.flags.total_is_defined & status.flags.last_row_of_report 1491 then do; 1492 call format_totals (total_ip, total_columns_ip, ROW_TOTAL, 1493 formatted_page_info.detail_blocks.total_length 1494 (formatted_page_info.number_of_detail_blocks), 1495 status.flags.totals_ejection_in_progress, fdb_code); 1496 if fdb_code ^= 0 1497 then do; 1498 call backout_detail_block (ROW_TOTAL); 1499 return; 1500 end; 1501 end; 1502 1503 /* 1504* If counts are defined and this is the last row of the report then format 1505* them, backing them out if necessary. 1506**/ 1507 1508 if format_report_info.flags.count_is_defined & status.flags.last_row_of_report 1509 then do; 1510 call format_totals (count_ip, count_columns_ip, ROW_COUNT, 1511 formatted_page_info.detail_blocks.count_length 1512 (formatted_page_info.number_of_detail_blocks), 1513 status.flags.counts_ejection_in_progress, fdb_code); 1514 if fdb_code ^= 0 1515 then do; 1516 call backout_detail_block (ROW_COUNT); 1517 return; 1518 end; 1519 end; 1520 1521 /* 1522* If the row footer is defined then format it, backing it out if necessary. 1523**/ 1524 1525 if format_report_info.flags.row_footer_is_defined 1526 then do; 1527 call format_header (format_report_info.row_footer_info_ptr, ROW_FOOTER, 1528 status.current_line_on_page, status.remaining_lines_on_page, 1529 formatted_page_info.detail_blocks (formatted_page_info 1530 .number_of_detail_blocks).row_footer_length, fdb_code); 1531 if fdb_code ^= 0 1532 then do; 1533 call backout_detail_block (ROW_FOOTER); 1534 return; 1535 end; 1536 else status.flags.detail_block_used_some_lines = ON; 1537 end; 1538 1539 /* 1540* If a group footer and trigger are defined then check to see if it is time 1541* to process it. If one of the trigger columns changed then format the 1542* footer, backing it out if necessary. 1543**/ 1544 1545 if format_report_info.flags.group_footer_is_defined 1546 & format_report_info.flags.group_footer_trigger_is_defined 1547 then do; 1548 call check_for_group_break (format_report_info.group_footer_trigger_info_ptr, 1549 LOOK_AHEAD, fdb_column_changed_flag); 1550 if fdb_column_changed_flag 1551 then do; 1552 call format_header (format_report_info.group_footer_info_ptr, GROUP_FOOTER, 1553 status.current_line_on_page, status.remaining_lines_on_page, 1554 formatted_page_info.detail_blocks (formatted_page_info.number_of_detail_blocks).group_footer_length, fdb_code); 1555 if fdb_code ^= 0 1556 then do; 1557 call backout_detail_block (GROUP_FOOTER); 1558 return; 1559 end; 1560 else status.flags.detail_block_used_some_lines = ON; 1561 end; 1562 end; 1563 1564 /* 1565* If we've just formatted the last row, or there isn't enough space 1566* remaining on the page to attempt the next row, then quit formatting 1567* detail blocks. 1568* 1569**/ 1570 1571 status.total_number_of_rows_used = status.total_number_of_rows_used + 1; 1572 status.current_row_number = status.current_row_number + 1; 1573 1574 if (status.current_row_number > report_control_info.no_of_rows_retrieved) 1575 | (status.number_of_lines_needed_for_detail_block > status.remaining_lines_on_page) 1576 | (format_report_info.flags.page_footer_is_defined & status.remaining_lines_on_page 1577 < status.number_of_lines_needed_for_page_footer + status.number_of_lines_needed_for_detail_block) 1578 then status.still_formatting_detail_blocks = OFF; 1579 1580 /* 1581* Adjust status flags and check to see if it's time for a page break. 1582**/ 1583 1584 if report_control_info.table_is_full & status.current_row_number = report_control_info.no_of_rows_retrieved 1585 then status.flags.last_row_of_report = ON; 1586 1587 status.flags.first_row_of_report = OFF; 1588 status.flags.first_row_on_page = OFF; 1589 1590 if format_report_info.flags.page_break_is_defined 1591 then call check_for_page_break; 1592 1593 return; 1594 1595 end format_detail_block; 1596 1597 format_header: proc ( 1598 1599 fh_header_info_ptr_parm, /* input: ptr to header info */ 1600 fh_executing_object_parm, /* input: who's calling */ 1601 fh_current_line_number_parm, /* input/output: current line on page */ 1602 fh_remaining_lines_on_page_parm, /* input/output: number left on page */ 1603 fh_number_of_lines_used_parm, /* output: number of lines used */ 1604 fh_code_parm /* output: success or failure */ 1605 ); 1606 1607 dcl fh_current_line_number fixed bin; 1608 dcl fh_current_line_number_parm fixed bin parm; 1609 dcl fh_code_parm fixed bin (35) parm; 1610 dcl fh_executing_object_parm char (*) varying parm; 1611 dcl fh_header_info_ptr_parm ptr parm; 1612 dcl fh_loop fixed bin; 1613 dcl fh_next_line_number fixed bin; 1614 dcl fh_number_of_lines_used fixed bin; 1615 dcl fh_number_of_lines_used_parm fixed bin parm; 1616 dcl fh_remaining_lines_on_page_parm fixed bin parm; 1617 dcl fh_still_counting_lines bit (1) aligned; 1618 1619 /* 1620* Check to make sure we aren't about to exceed the page length. Repeat the 1621* following sequence for each line of the header/footer. Lay down a template 1622* on the current line and mark it as laid down. For each portion of the 1623* header that's present, have any active requests evaluated and fit the 1624* header portion into it assigned slot on the page. If we've still got 1625* another header line to do then find out where on the page it will begin, 1626* and repeat the loop. When we've evaluated all lines then count how many 1627* we've used, fill in the parms, and return to caller. 1628**/ 1629 1630 header_ip = fh_header_info_ptr_parm; 1631 fh_current_line_number = fh_current_line_number_parm; 1632 fh_number_of_lines_used_parm = 0; 1633 fh_code_parm = 0; 1634 status.flags.header_being_evaluated = ON; 1635 status.object_being_evaluated = fh_executing_object_parm; 1636 1637 if fh_current_line_number > template_map_number_of_bits 1638 then do; 1639 fh_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1640 return; 1641 end; 1642 1643 do status.current_header_line = 1 to header_info.number_of_lines; 1644 1645 page_defined_as_lines (fh_current_line_number) = generic_template; 1646 template_map (fh_current_line_number) = ON; 1647 1648 do status.current_header_part = 1 to header_info.maximum_number_of_parts; 1649 1650 if header_info.lines (status.current_header_line).parts (status.current_header_part).flags.present 1651 then do; 1652 if header_info.lines (status.current_header_line).parts (status.current_header_part).flags.active 1653 then do; 1654 output_string = substr (headers_temp_seg, 1655 header_info.lines (status.current_header_line).parts (status.current_header_part).index, 1656 header_info.lines (status.current_header_line).parts (status.current_header_part).length); 1657 call evaluate_active_string (output_string, input_string); 1658 end; 1659 else input_string = substr (headers_temp_seg, 1660 header_info.lines (status.current_header_line).parts (status.current_header_part).index, 1661 header_info.lines (status.current_header_line).parts (status.current_header_part).length); 1662 call fit_column (input_string, 1663 header_info.lines (status.current_header_line).parts (status.current_header_part).width, 1664 header_info.lines (status.current_header_line).parts (status.current_header_part).starting_position, 1665 header_info.lines (status.current_header_line).parts (status.current_header_part).alignment, 1666 0, generic_template, FILL, fh_current_line_number, fh_code_parm); 1667 if fh_code_parm ^= 0 1668 then return; 1669 end; 1670 1671 end; 1672 1673 if status.current_header_line < header_info.number_of_lines 1674 then do; 1675 if fh_current_line_number < template_map_number_of_bits 1676 then fh_next_line_number = index (substr (template_map_defined_as_a_string, 1677 fh_current_line_number + 1), OFF); 1678 else fh_next_line_number = 0; 1679 if fh_next_line_number = 0 1680 then do; 1681 fh_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1682 return; 1683 end; 1684 else fh_current_line_number = fh_current_line_number + fh_next_line_number; 1685 end; 1686 1687 end; 1688 1689 fh_still_counting_lines = ON; 1690 fh_number_of_lines_used = 0; 1691 1692 do fh_loop = fh_current_line_number_parm to template_map_number_of_bits 1693 while (fh_still_counting_lines); 1694 if template_map (fh_loop) 1695 then fh_number_of_lines_used = fh_number_of_lines_used + 1; 1696 else fh_still_counting_lines = OFF; 1697 end; 1698 1699 fh_number_of_lines_used_parm = fh_number_of_lines_used; 1700 fh_current_line_number_parm = fh_current_line_number_parm + fh_number_of_lines_used; 1701 fh_remaining_lines_on_page_parm = template_map_number_of_bits - fh_current_line_number_parm + 1; 1702 status.flags.header_being_evaluated = OFF; 1703 1704 return; 1705 1706 end format_header; 1707 1708 format_page_footer: proc; 1709 1710 dcl fpf_beginning_line_number fixed bin; 1711 dcl fpf_code fixed bin (35); 1712 dcl fpf_loop fixed bin; 1713 dcl fpf_overstrike_index_1 fixed bin; 1714 dcl fpf_overstrike_index_2 fixed bin; 1715 dcl fpf_overstruck_page bit (1) aligned; 1716 dcl fpf_page_footer_doesnt_fit bit (1) aligned; 1717 1718 /* 1719* Unpaginated reports only have a page footer placed after the last row 1720* of the report. Repeat the following sequence while the footer doesn't 1721* fit. Decrement the current row number so the last row on the page is 1722* available for the footer. Format the footer. If it doesn't fit then 1723* decrement the number of rows used on this page, back out the last 1724* detail block, and repeat the loop. If it does fit then kick out of the 1725* loop. (The proc that does the backing out never allows the first row 1726* of a page to be removed, so it is the governing mechanism in this loop.) 1727**/ 1728 1729 if ^paginated_report & ^status.flags.last_row_of_report 1730 then return; 1731 1732 fpf_page_footer_doesnt_fit = ON; 1733 1734 do while (fpf_page_footer_doesnt_fit); 1735 status.current_row_number = status.current_row_number - 1; 1736 fpf_beginning_line_number = status.current_line_on_page; 1737 call format_header (format_report_info.page_footer_info_ptr, PAGE_FOOTER, 1738 status.current_line_on_page, status.remaining_lines_on_page, 1739 formatted_page_info.page_footer_length, fpf_code); 1740 if fpf_code ^= 0 1741 then do; 1742 status.total_number_of_rows_used = status.total_number_of_rows_used - 1; 1743 call backout_detail_block (PAGE_FOOTER); 1744 end; 1745 else fpf_page_footer_doesnt_fit = OFF; 1746 end; 1747 1748 /* 1749* Adjust the current row number to compensate for when we decremented 1750* it. If there are remaining lines on the page and it's a paginated 1751* report do the following steps. Work the loop from the last line of the 1752* page back up to where we placed the last line of the footer. If we've 1753* just moved up to the point where we originally placed the footer lines 1754* then lay down a generic template to blank out the footer line, mark 1755* the template map, and if it's an overstruck page then show the line 1756* as having no overstrikes. If we haven't arrived at this point yet, then 1757* move the footer line down the page to where it belongs, mark the template 1758* map, and move any overstrike info if it's an overstruck page. 1759**/ 1760 1761 status.current_row_number = status.current_row_number + 1; 1762 1763 if status.remaining_lines_on_page > 0 1764 then if paginated_report 1765 then do; 1766 fpf_overstruck_page = (page_info.page_overstrike_info_ptr ^= null ()); 1767 do fpf_loop = template_map_number_of_bits to fpf_beginning_line_number by -1; 1768 if fpf_loop < template_map_number_of_bits - formatted_page_info.page_footer_length + 1 1769 then do; 1770 page_defined_as_lines (fpf_loop) = generic_template; 1771 template_map (fpf_loop) = ON; 1772 if fpf_overstruck_page 1773 then substr (page_overstrike_info_redefined.bit_map, 1774 ((fpf_loop - 1) * page_info.width) + 1, page_info.width) = OFF; 1775 else; 1776 end; 1777 else do; 1778 page_defined_as_lines (fpf_loop) 1779 = page_defined_as_lines (fpf_loop - status.remaining_lines_on_page); 1780 template_map (fpf_loop) = ON; 1781 if fpf_overstruck_page 1782 then do; 1783 fpf_overstrike_index_1 = ((fpf_loop - 1) * page_info.width) + 1; 1784 fpf_overstrike_index_2 = ((fpf_loop - status.remaining_lines_on_page - 1) * page_info.width) + 1; 1785 substr (page_overstrike_info_redefined.bit_map, 1786 fpf_overstrike_index_1, page_info.width) 1787 = substr (page_overstrike_info_redefined.bit_map, 1788 fpf_overstrike_index_2, page_info.width); 1789 substr (page_overstrike_info_redefined.chars, 1790 fpf_overstrike_index_1, page_info.width) 1791 = substr (page_overstrike_info_redefined.chars, 1792 fpf_overstrike_index_2, page_info.width); 1793 end; 1794 end; 1795 end; 1796 status.current_line_on_page = template_map_number_of_bits; 1797 status.remaining_lines_on_page = 0; 1798 end; 1799 else; 1800 else; 1801 1802 return; 1803 1804 end format_page_footer; 1805 1806 format_page_header: proc; 1807 1808 dcl fph_code fixed bin (35); 1809 1810 /* 1811* Unpaginated reports only have the header placed before the first row. 1812* Format the header and if it doesn't fit shut things down. 1813**/ 1814 1815 if ^paginated_report & ^status.flags.first_row_of_report 1816 then return; 1817 1818 call format_header (format_report_info.page_header_info_ptr, PAGE_HEADER, 1819 status.current_line_on_page, status.remaining_lines_on_page, 1820 formatted_page_info.page_header_length, fph_code); 1821 if fph_code ^= 0 1822 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_format, 1823 "^/There isn't enough room to place the page header on page number ^d.", 1824 status.current_page_number); 1825 1826 return; 1827 1828 end format_page_header; 1829 1830 format_row: proc ( 1831 1832 fr_executing_object_parm, /* input: who's calling */ 1833 fr_output_columns_info_ptr_parm, /* input: ptr to output_columns_info */ 1834 fr_row_template_info_ptr_parm, /* input: ptr to template_info */ 1835 fr_number_of_blank_lines_parm, /* input: # of blank lines after row */ 1836 fr_current_line_number_parm, /* input/output: current line on page */ 1837 fr_remaining_lines_on_page_parm, /* input/output: number left on page */ 1838 fr_number_of_lines_used_parm, /* output: number of lines used */ 1839 fr_code_parm /* output: success or failure */ 1840 ); 1841 1842 dcl fr_current_line_number_parm fixed bin parm; 1843 dcl fr_code_parm fixed bin (35) parm; 1844 dcl fr_current_detail_line fixed bin; 1845 dcl fr_current_line_number fixed bin; 1846 dcl fr_executing_object_parm char (*) varying parm; 1847 dcl fr_loop fixed bin; 1848 dcl fr_next_line_number fixed bin; 1849 dcl fr_number_of_blank_lines_parm fixed bin; 1850 dcl fr_number_of_lines_used fixed bin; 1851 dcl fr_number_of_lines_used_by_prefix fixed bin; 1852 dcl fr_number_of_lines_used_parm fixed bin parm; 1853 dcl 1 fr_output_columns_info like output_columns_info based (fr_output_columns_info_ptr); 1854 dcl fr_output_columns_info_ptr ptr; 1855 dcl fr_output_columns_info_ptr_parm ptr parm; 1856 dcl fr_remaining_lines_on_page_parm fixed bin parm; 1857 dcl 1 fr_row_template_info like template_info based (fr_row_template_info_ptr); 1858 dcl fr_row_template_info_ptr ptr; 1859 dcl fr_row_template_info_ptr_parm ptr parm; 1860 dcl fr_still_counting_lines bit (1) aligned; 1861 1862 /* 1863* Move parms into automatic variables, check to make sure we aren't 1864* about to run off the page, lay down a template on the first line and 1865* mark it. 1866**/ 1867 1868 status.object_being_evaluated = fr_executing_object_parm; 1869 fr_output_columns_info_ptr = fr_output_columns_info_ptr_parm; 1870 fr_row_template_info_ptr = fr_row_template_info_ptr_parm; 1871 fr_current_line_number = fr_current_line_number_parm; 1872 fr_number_of_lines_used_parm = 0; 1873 fr_code_parm = 0; 1874 1875 fr_current_detail_line = 1; 1876 template_ptr = addr (fr_row_template_info.templates (fr_current_detail_line)); 1877 if fr_current_line_number > template_map_number_of_bits 1878 then do; 1879 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1880 return; 1881 end; 1882 page_defined_as_lines (fr_current_line_number) = template; 1883 template_map (fr_current_line_number) = ON; 1884 1885 /* 1886* Repeat the following sequence for each column that isn't being outlined. 1887* If it has a prefix character then expand it to full column width and 1888* have it fit into the output column. If it has an editing request then use 1889* it; else rtrim character column values and rtrim and ltrim all other 1890* column values. Fit the column into the output column. If we're not on 1891* the last column and the next column goes onto a different output line, 1892* then find out where the next output line is and lay down a template also 1893* marking it (making sure it doesn't place us past the end of the page). 1894**/ 1895 1896 do status.current_column_number = 1 to fr_output_columns_info.number_of_columns; 1897 column_ip = addr (fr_output_columns_info.columns (status.current_column_number)); 1898 if ^column_info.flags.outline 1899 then do; 1900 if length (column_info.prefix_character) > 0 1901 then do; 1902 fr_spare_string = copy (column_info.prefix_character, column_info.width); 1903 call fit_column (fr_spare_string, column_info.width, 1904 column_info.starting_position, LEFT_ALIGNMENT, 1905 0, template, FILL, fr_current_line_number, fr_code_parm); 1906 if fr_code_parm ^= 0 1907 then return; 1908 else fr_number_of_lines_used_by_prefix = 1; 1909 end; 1910 else fr_number_of_lines_used_by_prefix = 0; 1911 if column_info.flags.editing 1912 then do; 1913 editing_string_rl = column_info.editing_string_result_length; 1914 editing_string_rp = column_info.editing_string_result_ptr; 1915 input_string = editing_string_result; 1916 end; 1917 else do; 1918 if column_info.subsystem_data_type ^= CHAR_DATA_TYPE 1919 then input_string = ltrim (rtrim (substr (current_row_value, 1920 table_info.columns.column_index (column_info.input_column), 1921 table_info.columns.column_length (column_info.input_column)))); 1922 else input_string = rtrim (substr (current_row_value, 1923 table_info.columns.column_index (column_info.input_column), 1924 table_info.columns.column_length (column_info.input_column))); 1925 end; 1926 call fit_column (input_string, column_info.width, 1927 column_info.starting_position, column_info.alignment, 1928 column_info.decimal_position, template, column_info.folding_is_fill, 1929 fr_current_line_number + fr_number_of_lines_used_by_prefix, fr_code_parm); 1930 if fr_code_parm ^= 0 1931 then return; 1932 end; 1933 else; 1934 if status.current_column_number ^= fr_output_columns_info.number_of_columns 1935 then if fr_output_columns_info.columns (status.current_column_number).output_line 1936 ^= fr_output_columns_info.columns (status.current_column_number + 1).output_line 1937 then do; 1938 if fr_current_line_number < template_map_number_of_bits 1939 then fr_next_line_number = index (substr (template_map_defined_as_a_string, 1940 fr_current_line_number + 1), OFF); 1941 else fr_next_line_number = 0; 1942 if fr_next_line_number = 0 1943 then do; 1944 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1945 return; 1946 end; 1947 fr_current_line_number = fr_current_line_number + fr_next_line_number; 1948 fr_current_detail_line = fr_current_detail_line + 1; 1949 template_ptr = addr (fr_row_template_info.templates (fr_current_detail_line)); 1950 page_defined_as_lines (fr_current_line_number) = template; 1951 template_map (fr_current_line_number) = ON; 1952 end; 1953 end; 1954 1955 /* 1956* Find out how many lines we've used. Add any blank trailer lines requested 1957* by the caller. Set the parms and return to caller. 1958**/ 1959 1960 fr_still_counting_lines = ON; 1961 fr_number_of_lines_used = 0; 1962 1963 do fr_loop = fr_current_line_number_parm to template_map_number_of_bits 1964 while (fr_still_counting_lines); 1965 if template_map (fr_loop) 1966 then fr_number_of_lines_used = fr_number_of_lines_used + 1; 1967 else fr_still_counting_lines = OFF; 1968 end; 1969 1970 if fr_number_of_blank_lines_parm ^= 0 1971 then do; 1972 fr_current_line_number = fr_current_line_number_parm + fr_number_of_lines_used; 1973 do fr_loop = 1 to fr_number_of_blank_lines_parm; 1974 if fr_current_line_number ^> template_map_number_of_bits 1975 then do; 1976 page_defined_as_lines (fr_current_line_number) = generic_template; 1977 template_map (fr_current_line_number) = ON; 1978 fr_current_line_number = fr_current_line_number + 1; 1979 fr_number_of_lines_used = fr_number_of_lines_used + 1; 1980 end; 1981 else do; 1982 fr_code_parm = PAGE_OVERFLOW_ERROR_CODE; 1983 return; 1984 end; 1985 end; 1986 end; 1987 1988 fr_number_of_lines_used_parm = fr_number_of_lines_used; 1989 fr_current_line_number_parm = fr_current_line_number_parm + fr_number_of_lines_used; 1990 fr_remaining_lines_on_page_parm = template_map_number_of_bits - fr_current_line_number_parm + 1; 1991 1992 return; 1993 1994 end format_row; 1995 1996 format_title_block: proc; 1997 1998 dcl ftb_code fixed bin (35); 1999 dcl ftb_current_line_number fixed bin; 2000 dcl ftb_loop fixed bin; 2001 2002 /* 2003* Unpaginated reports only have the title block placed before the first 2004* row of the report. Create the title block if it's our first time and 2005* save it away for future use if it's a paginated report. If it isn't our 2006* first time then just place the title block we've already created. If the 2007* title block contains overstruck characters then they loose this 2008* optimization (the title block is formatted every time it's needed). If 2009* the title block doesn't fit then shut things down. 2010**/ 2011 2012 if (^paginated_report & ^status.flags.first_row_of_report) 2013 then return; 2014 2015 if format_report_info.title_block_info_ptr = null () 2016 then call create_title_block (ftb_code); 2017 else call place_title_block (ftb_code); 2018 2019 if ftb_code ^= 0 2020 then call ssu_$abort_line (sci_ptr, rw_error_$bad_report_format, 2021 "^/There isn't enough room to place the titles on page number ^d.", 2022 status.current_page_number); 2023 2024 return; 2025 2026 create_title_block: proc (ctb_code_parm); 2027 2028 dcl ctb_code_parm fixed bin (35) parm; 2029 2030 /* 2031* Format the title block onto the page. If it's not a paginated report or 2032* it contains overstruck characters then return to caller. Allocate the 2033* title_block_info structure and save away our formatted lines for future 2034* placement on the coming pages. 2035**/ 2036 2037 title_block_columns_ip = format_report_info.title_block_columns_info_ptr; 2038 ftb_current_line_number = status.current_line_on_page; 2039 call format_row (ROW_TITLES, title_block_columns_ip, 2040 row_value_template_ip, GENERATE_ONE_BLANK_LINE_TRAILER, 2041 status.current_line_on_page, status.remaining_lines_on_page, 2042 formatted_page_info.title_block_length, ctb_code_parm); 2043 if ctb_code_parm ^= 0 2044 then return; 2045 2046 if ^paginated_report 2047 then return; 2048 else if page_info.page_overstrike_info_ptr ^= null () 2049 then if index (substr (page_overstrike_info_redefined.bit_map, 2050 ((ftb_current_line_number - 1) * page_info.width) + 1, 2051 page_info.width * formatted_page_info.title_block_length), ON) ^= 0 2052 then return; 2053 2054 tbi_init_line_length = page_info.width; 2055 tbi_init_number_of_lines = formatted_page_info.title_block_length; 2056 allocate title_block_info in (work_area) set (title_block_ip); 2057 2058 do ftb_loop = 1 to formatted_page_info.title_block_length; 2059 title_block_info.lines (ftb_loop) = page_defined_as_lines (ftb_current_line_number); 2060 ftb_current_line_number = ftb_current_line_number + 1; 2061 end; 2062 2063 format_report_info.title_block_info_ptr = title_block_ip; 2064 2065 return; 2066 2067 end create_title_block; 2068 2069 place_title_block: proc (ptb_code_parm); 2070 2071 dcl ptb_code_parm fixed bin (35) parm; 2072 2073 /* 2074* Place the saved away title lines onto the page. Lay down a title line 2075* and mark the template map. Repeat while we have more title lines. Set 2076* the title block length, current line on page, and remaining lines on 2077* page. 2078**/ 2079 2080 ptb_code_parm = 0; 2081 title_block_ip = format_report_info.title_block_info_ptr; 2082 ftb_current_line_number = status.current_line_on_page; 2083 2084 do ftb_loop = 1 to title_block_info.number_of_lines; 2085 if ftb_current_line_number > template_map_number_of_bits 2086 then do; 2087 ptb_code_parm = PAGE_OVERFLOW_ERROR_CODE; 2088 return; 2089 end; 2090 page_defined_as_lines (ftb_current_line_number) = title_block_info.lines (ftb_loop); 2091 template_map (ftb_current_line_number) = ON; 2092 ftb_current_line_number = ftb_current_line_number + 1; 2093 end; 2094 2095 formatted_page_info.title_block_length = title_block_info.number_of_lines; 2096 status.current_line_on_page = status.current_line_on_page + title_block_info.number_of_lines; 2097 status.remaining_lines_on_page = template_map_number_of_bits - status.current_line_on_page + 1; 2098 2099 return; 2100 2101 end place_title_block; 2102 2103 end format_title_block; 2104 2105 format_subtotals: proc ( 2106 2107 fst_subtotal_info_ptr_parm, /* input: ptr to subtotal_info structure */ 2108 fst_subtotal_columns_info_ptr_parm, /* input: ptr to subtotal_columns_info structure */ 2109 fst_subtotal_generation_info_ptr_parm, /* input: ptr to subtotal_generation_info structure */ 2110 fst_caller_parm, /* input: "row subtotal" or "row subcount" */ 2111 fst_number_of_lines_used_parm, /* output: how many lines the block used */ 2112 fst_subtotals_ejection_in_progress_parm, /* output: on when ejection starts, off after ejection complete */ 2113 fst_code_parm /* output: success or failure */ 2114 ); 2115 2116 dcl fst_caller_parm char (*) varying; 2117 dcl fst_code_parm fixed bin (35) parm; 2118 dcl fst_number_of_lines_used fixed bin; 2119 dcl fst_number_of_lines_used_parm fixed bin; 2120 dcl fst_some_column_changed bit (1) aligned; 2121 dcl 1 fst_subtotal_columns_info like subtotal_columns_info based (fst_subtotal_columns_info_ptr_parm); 2122 dcl fst_subtotal_columns_info_ptr_parm ptr parm; 2123 dcl 1 fst_subtotal_generation_info like subtotal_generation_info based (fst_subtotal_generation_info_ptr_parm); 2124 dcl fst_subtotal_generation_info_ptr_parm ptr parm; 2125 dcl 1 fst_subtotal_info like subtotal_info based (fst_subtotal_info_ptr_parm); 2126 dcl fst_subtotal_info_ptr_parm ptr parm; 2127 dcl fst_subtotals_ejection_in_progress_parm bit (1) aligned parm; 2128 dcl fst_subtotals_have_been_backed_up bit (1) aligned; 2129 dcl fst_total_lines_used fixed bin; 2130 2131 /* 2132* Walk through the subtotals level by level. Check the watch columns to see 2133* if any at the current level have changed. If any have, then back up the 2134* subtotals if they haven't been backed up already. Generate subtotals 2135* whose watch columns have changed, returning to caller if they don't fit. 2136* Set our number of lines used parm and return to caller. 2137**/ 2138 2139 fst_code_parm = 0; 2140 fst_number_of_lines_used_parm = 0; 2141 fst_total_lines_used = 0; 2142 fst_subtotals_have_been_backed_up = OFF; 2143 2144 do fst_subtotal_info.current_level = 1 to fst_subtotal_info.highest_level; 2145 call check_for_subtotal_break (fst_subtotal_info_ptr_parm, fst_subtotal_columns_info_ptr_parm, 2146 fst_subtotal_info.current_level, fst_some_column_changed); 2147 if fst_some_column_changed 2148 then do; 2149 if ^fst_subtotals_have_been_backed_up 2150 then call make_backup_of_subtotals; 2151 fst_subtotals_have_been_backed_up = ON; 2152 call generate_subtotals (fst_subtotal_info.current_level, 2153 fst_number_of_lines_used, fst_code_parm); 2154 if fst_code_parm ^= 0 2155 then return; 2156 fst_total_lines_used = fst_total_lines_used + fst_number_of_lines_used; 2157 end; 2158 end; 2159 2160 fst_number_of_lines_used_parm = fst_total_lines_used; 2161 fst_subtotals_ejection_in_progress_parm = OFF; 2162 2163 return; 2164 2165 generate_subtotals: proc ( 2166 2167 gs_level_number_parm, /* input: current subtotal level number */ 2168 gs_number_of_lines_used_parm, /* output: number of lines used */ 2169 gs_code_parm /* output: success or failure */ 2170 ); 2171 2172 dcl gs_code_parm fixed bin (35) parm; 2173 dcl gs_level_number_parm fixed bin; 2174 dcl gs_loop fixed bin; 2175 dcl gs_number_of_lines_used_parm fixed bin parm; 2176 2177 /* 2178* Use the headers temp seg for temporary storage. Walk through all of the 2179* subtotals. For each one at the current level number that isn't being 2180* outlined, format the float dec (59) into character format. Then format 2181* the row. Walk through all of the subtotals again, and for each one at 2182* the current level, restore it's editing flag to what it used to be and 2183* zero any reset subtotals. 2184**/ 2185 2186 headers_next_byte = format_report_info.headers_next_available_byte; 2187 fst_subtotals_ejection_in_progress_parm = ON; 2188 2189 do gs_loop = 1 to fst_subtotal_info.number_of_columns_to_subtotal; 2190 if gs_level_number_parm = fst_subtotal_info.columns (gs_loop).level 2191 then do; 2192 column_ip = addr (fst_subtotal_columns_info.columns 2193 (input_columns_info.columns (fst_subtotal_info.columns (gs_loop).input_column).output_column)); 2194 if ^column_info.flags.outline 2195 then call format_total_or_subtotal_into_character_format ( 2196 fst_subtotal_info.columns.subtotal (gs_loop), fst_subtotal_info.columns.ioa_string (gs_loop)); 2197 end; 2198 end; 2199 2200 call format_row (fst_caller_parm, fst_subtotal_columns_info_ptr_parm, 2201 row_value_template_ip, GENERATE_ONE_BLANK_LINE_TRAILER, 2202 status.current_line_on_page, status.remaining_lines_on_page, 2203 gs_number_of_lines_used_parm, gs_code_parm); 2204 2205 if gs_code_parm = 0 2206 then status.flags.detail_block_used_some_lines = ON; 2207 2208 do gs_loop = 1 to fst_subtotal_info.number_of_columns_to_subtotal; 2209 if gs_level_number_parm = fst_subtotal_info.columns (gs_loop).level 2210 then do; 2211 column_ip = addr (fst_subtotal_columns_info.columns (input_columns_info.columns ( 2212 fst_subtotal_info.columns (gs_loop).input_column).output_column)); 2213 column_info.flags.editing = column_info.flags.restore_editing; 2214 if ^column_info.flags.outline & fst_subtotal_info.columns (gs_loop).flags.reset 2215 then fst_subtotal_info.columns (gs_loop).subtotal = 0; 2216 end; 2217 end; 2218 2219 return; 2220 2221 end generate_subtotals; 2222 2223 make_backup_of_subtotals: proc; 2224 2225 dcl mbos_loop fixed bin; 2226 2227 /* 2228* Advance the current generation block in our circular table. Backup each subtotal. 2229**/ 2230 2231 fst_subtotal_generation_info.current_generation_block 2232 = mod (fst_subtotal_generation_info.current_generation_block + 1, 2233 fst_subtotal_generation_info.maximum_number_of_generation_blocks); 2234 2235 do mbos_loop = 1 to fst_subtotal_generation_info.number_of_subtotals; 2236 fst_subtotal_generation_info.generations 2237 (fst_subtotal_generation_info.current_generation_block).subtotals (mbos_loop) 2238 = fst_subtotal_info.columns (mbos_loop).subtotal; 2239 end; 2240 2241 return; 2242 2243 end make_backup_of_subtotals; 2244 2245 end format_subtotals; 2246 2247 format_total_or_subtotal_into_character_format: proc ( 2248 2249 ftosicf_subtotal_or_total_parm, /* input: the total or subtotal */ 2250 ftosicf_ioa_string_parm /* input: ioa_ string for editing */ 2251 ); 2252 2253 dcl ftosicf_ioa_string_parm char (*) varying parm; 2254 dcl ftosicf_length_doesnt_matter fixed bin (21); 2255 dcl ftosicf_subtotal_or_total_parm float dec (59) parm; 2256 2257 /* 2258* If the subtotal has an editing request then it's already been edited 2259* through it's parent column's editing request be the column_value request. 2260* Pick it up, or in the case of ones that don't have an editing request, 2261* edit them through ioa_ with the supplied string. Set the pointer and 2262* length to this result string, and stash the result string into the headers 2263* temp seg. Advance the next byte index, save the editing bit value, and 2264* turn on the editing bit for this column. 2265**/ 2266 2267 if column_info.flags.editing 2268 then do; 2269 editing_string_rl = column_info.editing_string_length; 2270 editing_string_rp = column_info.editing_string_ptr; 2271 input_string = editing_string_result; 2272 call evaluate_active_string (input_string, output_string); 2273 end; 2274 else call ioa_$rsnnl (ftosicf_ioa_string_parm, output_string, 2275 ftosicf_length_doesnt_matter, ftosicf_subtotal_or_total_parm); 2276 2277 column_info.editing_string_result_length = length (output_string); 2278 column_info.editing_string_result_ptr 2279 = addr (headers_temp_seg_as_an_array (headers_next_byte)); 2280 substr (headers_temp_seg, headers_next_byte, 2281 column_info.editing_string_result_length) = output_string; 2282 headers_next_byte = headers_next_byte + column_info.editing_string_result_length; 2283 column_info.flags.restore_editing = column_info.flags.editing; 2284 column_info.flags.editing = ON; 2285 2286 return; 2287 2288 end format_total_or_subtotal_into_character_format; 2289 2290 format_totals: proc ( 2291 2292 ft_total_info_ptr_parm, /* input: ptr to total_info structure */ 2293 ft_total_columns_info_ptr_parm, /* input: ptr to total_columns_info structure */ 2294 ft_caller_parm, /* input: "row total" or "row count" */ 2295 ft_number_of_lines_used_parm, /* output: number of lines used */ 2296 ft_totals_ejection_in_progress_parm, /* output: on when ejection starts, off after ejection complete */ 2297 ft_code_parm /* output: success or failure */ 2298 ); 2299 2300 dcl ft_caller_parm char (*) varying parm; 2301 dcl ft_code_parm fixed bin (35) parm; 2302 dcl ft_loop fixed bin; 2303 dcl ft_number_of_lines_used_parm fixed bin parm; 2304 dcl 1 ft_total_columns_info like total_columns_info based (ft_total_columns_info_ptr_parm); 2305 dcl ft_total_columns_info_ptr_parm ptr parm; 2306 dcl 1 ft_total_info like total_info based (ft_total_info_ptr_parm); 2307 dcl ft_total_info_ptr_parm ptr parm; 2308 dcl ft_totals_ejection_in_progress_parm bit (1) aligned parm; 2309 2310 /* 2311* Use the headers temp segment for temporary storage. For each total reach 2312* into the total_info array picking up the index to it's input column, 2313* which gives us the index into the input_columns_info array to pick up 2314* the index for the total_columns_info output column. Set the prefix to 2315* "=", turn off the outline bit, and format the total into character format. 2316* Then format the row and restore the editing bit for the columns. 2317**/ 2318 2319 ft_code_parm = 0; 2320 ft_number_of_lines_used_parm = 0; 2321 ft_totals_ejection_in_progress_parm = ON; 2322 2323 headers_next_byte = format_report_info.headers_next_available_byte; 2324 2325 do ft_loop = 1 to ft_total_info.number_of_columns_to_total; 2326 column_ip = addr (ft_total_columns_info.columns (input_columns_info.columns.output_column 2327 (ft_total_info.columns.input_column (ft_loop)))); 2328 column_info.prefix_character = "="; 2329 column_info.flags.outline = OFF; 2330 call format_total_or_subtotal_into_character_format ( 2331 ft_total_info.columns.total (ft_loop), ft_total_info.columns.ioa_string (ft_loop)); 2332 end; 2333 2334 call format_row (ft_caller_parm, ft_total_columns_info_ptr_parm, 2335 row_value_template_ip, GENERATE_ZERO_BLANK_LINES_TRAILER, 2336 status.current_line_on_page, status.remaining_lines_on_page, 2337 ft_number_of_lines_used_parm, ft_code_parm); 2338 2339 if ft_code_parm = 0 2340 then status.flags.detail_block_used_some_lines = ON; 2341 2342 do ft_loop = 1 to ft_total_columns_info.number_of_columns; 2343 ft_total_columns_info.columns (ft_loop).flags.editing 2344 = ft_total_columns_info.columns (ft_loop).flags.restore_editing; 2345 end; 2346 2347 ft_totals_ejection_in_progress_parm = OFF; 2348 2349 return; 2350 2351 end format_totals; 2352 2353 gather_counts: proc; 2354 2355 dcl gc_loop fixed bin; 2356 2357 /* 2358* If the row hasn't been processed before then add one to the count. 2359**/ 2360 2361 if status.flags.row_has_been_processed_before 2362 then return; 2363 2364 do gc_loop = 1 to count_info.number_of_columns_to_total; 2365 count_info.columns (gc_loop).total 2366 = count_info.columns (gc_loop).total + 1; 2367 end; 2368 2369 return; 2370 2371 end gather_counts; 2372 2373 gather_subcounts: proc; 2374 2375 dcl gs_loop fixed bin; 2376 2377 /* 2378* Add one to the subcount. 2379**/ 2380 2381 do gs_loop = 1 to subcount_info.number_of_columns_to_subtotal; 2382 subcount_info.columns.subtotal (gs_loop) 2383 = subcount_info.columns.subtotal (gs_loop) + 1; 2384 end; 2385 2386 return; 2387 2388 end gather_subcounts; 2389 2390 gather_subtotals: proc; 2391 2392 dcl gs_loop fixed bin; 2393 2394 /* 2395* Add in the value of the current column to the subtotal. 2396**/ 2397 2398 do gs_loop = 1 to subtotal_info.number_of_columns_to_subtotal; 2399 subtotal_info.columns (gs_loop).subtotal 2400 = subtotal_info.columns (gs_loop).subtotal 2401 + float (substr (current_row_value, 2402 table_info.columns.column_index (subtotal_info.columns.input_column (gs_loop)), 2403 table_info.columns.column_length (subtotal_info.columns.input_column (gs_loop)))); 2404 end; 2405 2406 return; 2407 2408 end gather_subtotals; 2409 2410 gather_totals: proc; 2411 2412 dcl gt_loop fixed bin; 2413 2414 /* 2415* If the row hasn't been processed before then add the current column's 2416* value into the total. 2417**/ 2418 2419 if status.flags.row_has_been_processed_before 2420 then return; 2421 2422 do gt_loop = 1 to total_info.number_of_columns_to_total; 2423 total_info.columns (gt_loop).total 2424 = total_info.columns (gt_loop).total 2425 + float (substr (current_row_value, 2426 table_info.columns.column_index (total_info.columns.input_column (gt_loop)), 2427 table_info.columns.column_length (total_info.columns.input_column (gt_loop)))); 2428 end; 2429 2430 return; 2431 2432 end gather_totals; 2433 2434 housekeeping: proc; 2435 2436 /* 2437* Move everything we need into automatic variables. 2438**/ 2439 2440 sci_ptr = report_control_info.subsystem_control_info_ptr; 2441 maximum_segment_size = sys_info$max_seg_size * 4; 2442 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 table_control_ip = report_control_info.table_control_info_ptr; 2449 table_segments_ip = table_control_info.table_segments_info_ptr; 2450 2451 input_columns_ip = format_report_info.input_columns_info_ptr; 2452 input_columns_op = format_report_info.input_columns_order_ptr; 2453 output_columns_ip = format_report_info.output_columns_info_ptr; 2454 2455 input_string_ptr = report_control_info.input_string_temp_seg_ptr; 2456 input_string_length = maximum_segment_size - 4; 2457 input_string = ""; 2458 input_string_non_varying_ptr = addrel (input_string_ptr, 1); 2459 input_string_non_varying_length = 0; 2460 2461 output_string_ptr = report_control_info.output_string_temp_seg_ptr; 2462 output_string_length = maximum_segment_size - 4; 2463 output_string = ""; 2464 output_string_non_varying_ptr = addrel (output_string_ptr, 1); 2465 output_string_non_varying_length = output_string_length; 2466 2467 editing_strings_tsp = report_control_info.editing_strings_temp_seg_ptr; 2468 headers_tsp = report_control_info.headers_temp_seg_ptr; 2469 2470 group_ip = format_report_info.group_info_ptr; 2471 outline_ip = format_report_info.outline_info_ptr; 2472 page_break_ip = format_report_info.page_break_info_ptr; 2473 2474 if format_report_info.flags.subtotal_is_defined 2475 then do; 2476 subtotal_ip = format_report_info.subtotal_info_ptr; 2477 subtotal_columns_ip = subtotal_info.columns_info_ptr; 2478 subtotal_generation_ip = subtotal_info.subtotal_generation_info_ptr; 2479 end; 2480 2481 if format_report_info.flags.subcount_is_defined 2482 then do; 2483 subcount_ip = format_report_info.subcount_info_ptr; 2484 subcount_columns_ip = subcount_info.columns_info_ptr; 2485 subcount_generation_ip = subcount_info.subtotal_generation_info_ptr; 2486 end; 2487 2488 if format_report_info.flags.total_is_defined 2489 then do; 2490 total_ip = format_report_info.total_info_ptr; 2491 total_columns_ip = total_info.columns_info_ptr; 2492 end; 2493 2494 if format_report_info.flags.count_is_defined 2495 then do; 2496 count_ip = format_report_info.count_info_ptr; 2497 count_columns_ip = count_info.columns_info_ptr; 2498 end; 2499 2500 format_document_options_ptr = format_report_info.format_document_op; 2501 2502 paginated_report = report_control_info.report_is_paginated; 2503 page_ip = format_report_info.copy_of_page_info_ptr; 2504 page_info = format_report_info.page_info_ptr -> page_info; 2505 page_info.page_overstrike_info_ptr = null (); 2506 page_overstrike_ip = format_report_info.overstrike_info_ptr; 2507 2508 formatted_page_ip = format_report_info.formatted_page_info_ptr; 2509 row_value_template_ip = format_report_info.row_value_template_info_ptr; 2510 template_length = page_info.width; 2511 generic_template_length = template_length; 2512 generic_tp = format_report_info.generic_template_ptr; 2513 2514 template_map_number_of_bits = page_info.length; 2515 template_mp = format_report_info.template_map_ptr; 2516 2517 truncation_indicator_length = length (format_report_info.truncation_indicator); 2518 status_pointer = format_report_info.status_ptr; 2519 2520 code = 0; 2521 2522 return; 2523 2524 end housekeeping; 2525 2526 make_ptr: proc (mp_row_number_parm) returns (ptr); 2527 2528 dcl mp_row_number_parm fixed bin (35) parm; 2529 dcl mp_segment_ptr_index fixed bin (21); 2530 dcl mp_row_ptr_index fixed bin (21); 2531 2532 /* 2533* Make an index for the segment that the row pointer lives in. Make an 2534* index for the row pointer within the segment. Make a pointer to the 2535* segment. Return the pointer for the row. 2536**/ 2537 2538 mp_segment_ptr_index = divide (mp_row_number_parm, 2539 table_segments_info.maximum_number_of_ptrs_per_segment, 21); 2540 if mod (mp_row_number_parm, table_segments_info.maximum_number_of_ptrs_per_segment) ^= 0 2541 then mp_segment_ptr_index = mp_segment_ptr_index + 1; 2542 2543 mp_row_ptr_index = mod (mp_row_number_parm, table_segments_info.maximum_number_of_ptrs_per_segment); 2544 if mp_row_ptr_index = 0 2545 then mp_row_ptr_index = table_segments_info.maximum_number_of_ptrs_per_segment; 2546 2547 row_ptrs_ptr = table_segments_info.segment_ptrs (mp_segment_ptr_index); 2548 2549 return (row_ptrs.row_value_ptr (mp_row_ptr_index)); 2550 2551 end make_ptr; 2552 2553 make_rows_available: proc; 2554 2555 dcl mra_code fixed bin (35); 2556 dcl mra_number_of_rows_needed fixed bin (35); 2557 dcl mra_number_of_rows_retrieved fixed bin (35); 2558 2559 /* 2560* If the table is full, or we have enough rows to do this page then return. 2561* Have the rows loaded and time the operation, removing this time from our 2562* formatting time so the timers are accurate. Bump the number of rows 2563* retrieved and check for end of file on the data base setting appropriate 2564* flags. Shut things down if anything went wrong. 2565**/ 2566 2567 if report_control_info.flags.table_is_full 2568 then return; 2569 2570 mra_number_of_rows_needed = page_info.length + 1; 2571 if report_control_info.no_of_rows_retrieved - status.current_row_number > mra_number_of_rows_needed 2572 then return; 2573 2574 time1 = vclock; 2575 call rw_table_manager$load_rows (report_cip, 2576 mra_number_of_rows_needed, mra_number_of_rows_retrieved, mra_code); 2577 time2 = vclock; 2578 report_control_info.table_loading_time 2579 = report_control_info.table_loading_time + (time2 - time1); 2580 report_control_info.report_formatting_time 2581 = report_control_info.report_formatting_time - (time2 - time1); 2582 2583 if mra_number_of_rows_retrieved ^= 0 2584 then report_control_info.no_of_rows_retrieved 2585 = report_control_info.no_of_rows_retrieved + mra_number_of_rows_retrieved; 2586 if mra_code ^= 0 2587 then if mra_code = error_table_$end_of_info 2588 then do; 2589 report_control_info.flags.table_is_full = ON; 2590 report_control_info.flags.table_has_just_been_loaded = ON; 2591 if status.current_row_number = report_control_info.no_of_rows_retrieved 2592 then status.flags.last_row_of_report = ON; 2593 end; 2594 else call ssu_$abort_line (sci_ptr, mra_code, 2595 "While trying to retrieve ^d rows.", mra_number_of_rows_needed); 2596 else; 2597 2598 return; 2599 2600 end make_rows_available; 2601 2602 make_row_ptrs: proc; 2603 2604 /* 2605* Make pointers to the previous, current and next rows. 2606**/ 2607 2608 status.previous_row_ptr = status.current_row_ptr; 2609 2610 status.current_row_ptr = status.next_row_ptr; 2611 if status.current_row_ptr = null () 2612 then status.current_row_ptr = make_ptr (status.current_row_number); 2613 2614 if status.flags.last_row_of_report 2615 then status.next_row_ptr = null (); 2616 else status.next_row_ptr = make_ptr (status.current_row_number + 1); 2617 2618 return; 2619 2620 end make_row_ptrs; 2621 2622 save_copy_of_page: proc; 2623 2624 dcl scop_code fixed bin (35); 2625 dcl scop_record_key char (256) varying; 2626 dcl scop_record_length fixed bin (21); 2627 dcl scop_record_number fixed bin (21); 2628 2629 /* 2630* Use the page or buffer number as the key for the record. Save a copy 2631* of the formatted page. Append ".page_info" to the page number and save the 2632* page_info structure under that key. Append ".formatted_page_info" to 2633* the page number and save the formatted_page_info structure under that 2634* key. If the page contains overstrikes then append ".page_overstrike_info" 2635* to the page number and save the page_overstrike_info structure under 2636* that key. 2637**/ 2638 2639 scop_record_number = report_control_info.no_of_formatted_pages; 2640 scop_record_key = ltrim (convert (scop_record_key, scop_record_number)); 2641 call iox_$seek_key (format_report_info.report_iocb_ptr, 2642 scop_record_key, scop_record_length, scop_code); 2643 if scop_code ^= error_table_$no_record 2644 then call ssu_$abort_line (sci_ptr, scop_code, 2645 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2646 2647 call iox_$write_record (format_report_info.report_iocb_ptr, 2648 page_info.page_ptr, page_info.total_characters, scop_code); 2649 if scop_code ^= 0 2650 then call ssu_$abort_line (sci_ptr, scop_code, 2651 "Unable to save a copy of page ^d.", scop_record_key); 2652 2653 scop_record_key = scop_record_key || ".page_info"; 2654 call iox_$seek_key (format_report_info.report_iocb_ptr, 2655 scop_record_key, scop_record_length, scop_code); 2656 if scop_code ^= error_table_$no_record 2657 then call ssu_$abort_line (sci_ptr, scop_code, 2658 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2659 2660 call iox_$write_record (format_report_info.report_iocb_ptr, 2661 page_ip, page_info.page_info_size * 4, scop_code); 2662 if scop_code ^= 0 2663 then call ssu_$abort_line (sci_ptr, scop_code, 2664 "Unable to save a copy of page ^d.", scop_record_key); 2665 2666 scop_record_key = before (scop_record_key, ".") || ".formatted_page_info"; 2667 call iox_$seek_key (format_report_info.report_iocb_ptr, 2668 scop_record_key, scop_record_length, scop_code); 2669 if scop_code ^= error_table_$no_record 2670 then call ssu_$abort_line (sci_ptr, scop_code, 2671 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2672 2673 call iox_$write_record (format_report_info.report_iocb_ptr, 2674 formatted_page_ip, currentsize (formatted_page_info) * 4, scop_code); 2675 if scop_code ^= 0 2676 then call ssu_$abort_line (sci_ptr, scop_code, 2677 "Unable to save a copy of page ^d.", scop_record_key); 2678 2679 if page_info.page_overstrike_info_ptr = null () 2680 then return; 2681 2682 scop_record_key = before (scop_record_key, ".") || ".page_overstrike_info"; 2683 call iox_$seek_key (format_report_info.report_iocb_ptr, 2684 scop_record_key, scop_record_length, scop_code); 2685 if scop_code ^= error_table_$no_record 2686 then call ssu_$abort_line (sci_ptr, scop_code, 2687 "Logic error while trying to save a copy of page ^a.", scop_record_key); 2688 2689 call iox_$write_record (format_report_info.report_iocb_ptr, 2690 page_overstrike_ip, currentsize (page_overstrike_info) * 4, scop_code); 2691 if scop_code ^= 0 2692 then call ssu_$abort_line (sci_ptr, scop_code, 2693 "Unable to save a copy of page ^d.", scop_record_key); 2694 2695 return; 2696 2697 end save_copy_of_page; 2698 2699 setup_for_a_page: proc; 2700 2701 /* 2702* Set all of the info needed to begin a new page. 2703**/ 2704 2705 page_ip = format_report_info.copy_of_page_info_ptr; 2706 page_info = format_report_info.page_info_ptr -> page_info; 2707 page_info.page_overstrike_info_ptr = null (); 2708 page_overstrike_ip = format_report_info.overstrike_info_ptr; 2709 2710 formatted_page_info.page_header_length = 0; 2711 formatted_page_info.title_block_length = 0; 2712 formatted_page_info.page_footer_length = 0; 2713 formatted_page_info.number_of_detail_blocks = 0; 2714 unspec (formatted_page_info.detail_blocks) = OFF; 2715 2716 template_map (*) = OFF; 2717 2718 if format_report_info.number_of_formatted_rows = 0 2719 then status.flags.first_row_of_report = ON; 2720 else status.flags.first_row_of_report = OFF; 2721 status.current_row_number = format_report_info.number_of_formatted_rows + 1; 2722 if report_control_info.flags.table_is_full 2723 & report_control_info.no_of_rows_retrieved = status.current_row_number 2724 then status.flags.last_row_of_report = ON; 2725 else status.flags.last_row_of_report = OFF; 2726 status.flags.first_row_on_page = ON; 2727 status.flags.page_overflow = OFF; 2728 status.flags.subtotals_ejection_in_progress = OFF; 2729 status.flags.totals_ejection_in_progress = OFF; 2730 status.flags.header_being_evaluated = OFF; 2731 status.flags.detail_block_used_some_lines = ON; 2732 2733 status.total_number_of_rows_used = 0; 2734 if paginated_report 2735 then status.current_page_number = report_control_info.no_of_formatted_pages + 1; 2736 else status.current_page_number = 1; 2737 status.current_line_on_page = 1; 2738 status.remaining_lines_on_page = page_info.length; 2739 if status.current_row_number ^> status.highest_row_formatted 2740 then status.flags.row_has_been_processed_before = ON; 2741 else status.flags.row_has_been_processed_before = OFF; 2742 2743 return; 2744 2745 end setup_for_a_page; 2746 2747 sub_error_handler: proc; 2748 2749 dcl seh_code fixed bin (35); 2750 2751 /* 2752* Find the sub_error_info structure and if it wasn't format_document_ that 2753* signalled it then continue to signal. Set the ptr to the 2754* format_document_error structure and print the error message with added 2755* information to identify where in the report the error occured. 2756**/ 2757 2758 condition_info_ptr = addr (local_condition_info); 2759 condition_info.version = condition_info_version_1; 2760 call find_condition_info_ (null (), condition_info_ptr, seh_code); 2761 if seh_code ^= 0 2762 then call ssu_$abort_line (sci_ptr, seh_code); 2763 sub_error_info_ptr = condition_info.info_ptr; 2764 if sub_error_info.name ^= "format_document_" 2765 then do; 2766 call continue_to_signal_ (seh_code); 2767 return; 2768 end; 2769 2770 format_document_error_ptr = sub_error_info.info_ptr; 2771 if status.flags.header_being_evaluated 2772 then call ssu_$print_message (sci_ptr, rw_error_$bad_report_format, 2773 "^/Page ^d, ^a (line ^d, ^a).^/^a^x""^a""", 2774 status.current_page_number, status.object_being_evaluated, 2775 status.current_header_line, HEADER_PARTS_LABELS (status.current_header_part), 2776 sub_error_info.header.info_string, format_document_error.text_line); 2777 else call ssu_$print_message (sci_ptr, rw_error_$bad_report_format, 2778 "^/Page ^d, ^a (row ^d, ^a column).^/^a^x""^a""", 2779 status.current_page_number, status.object_being_evaluated, status.current_row_number, 2780 table_info.columns.column_name (output_columns_info.columns.input_column (status.current_column_number)), 2781 sub_error_info.header.info_string, format_document_error.text_line); 2782 2783 return; 2784 2785 end sub_error_handler; 2786 2787 dcl BACKSPACE char (1) static int options (constant) init (""); 2788 dcl BACKSPACE_OR_VERTICAL_TAB_OR_HORIZONTAL_TAB_OR_NL char (4) static int options (constant) init ("  2789 "); 2790 dcl BAR char (1) static int options (constant) init ("|"); 2791 dcl BAR_BAR char (2) static int options (constant) init ("||"); 2792 dcl BLANK char (1) static int options (constant) init (" "); 2793 dcl FILL bit (1) unaligned static int options (constant) init ("1"b); 2794 dcl FORM_FEED char (1) static int options (constant) init (" "); 2795 dcl GENERATE_ONE_BLANK_LINE_TRAILER fixed bin static int options (constant) init (1); 2796 dcl GENERATE_ZERO_BLANK_LINES_TRAILER fixed bin static int options (constant) init (0); 2797 dcl GROUP_FOOTER char (16) varying static int options (constant) init ("group footer"); 2798 dcl GROUP_HEADER char (16) varying static int options (constant) init ("group header"); 2799 dcl HEADER_PARTS_LABELS (3) char (11) varying static int options (constant) init 2800 ("left part", "center part", "right part"); 2801 dcl LEFT_BRACKET char (1) static int options (constant) init ("["); 2802 dcl LEFT_OR_RIGHT_BRACKET char (2) static int options (constant) init ("[]"); 2803 dcl LOOK_AHEAD bit (1) aligned static int options (constant) init ("1"b); 2804 dcl LOOK_BEHIND bit (1) aligned static int options (constant) init ("0"b); 2805 dcl NEWLINE char (1) static int options (constant) init (" 2806 "); 2807 dcl OFF bit (1) aligned int static options (constant) init ("0"b); 2808 dcl ON bit (1) aligned int static options (constant) init ("1"b); 2809 dcl PAGE_FOOTER char (16) varying static int options (constant) init ("page footer"); 2810 dcl PAGE_HEADER char (16) varying static int options (constant) init ("page header"); 2811 dcl PAGE_OVERFLOW_ERROR_CODE fixed bin (35) static int options (constant) init (1); 2812 dcl ROW_COUNT char (16) varying static int options (constant) init ("row count"); 2813 dcl ROW_FOOTER char (16) varying static int options (constant) init ("row footer"); 2814 dcl ROW_HEADER char (16) varying static int options (constant) init ("row header"); 2815 dcl ROW_SUBCOUNT char (16) varying static int options (constant) init ("row subcount"); 2816 dcl ROW_SUBTOTAL char (16) varying static int options (constant) init ("row subtotal"); 2817 dcl ROW_TITLES char (16) varying static int options (constant) init ("row titles"); 2818 dcl ROW_TOTAL char (16) varying static int options (constant) init ("row total"); 2819 dcl ROW_VALUE char (16) varying static int options (constant) init ("row value"); 2820 2821 dcl addr builtin; 2822 dcl addrel builtin; 2823 2824 dcl before builtin; 2825 2826 dcl code fixed bin (35); 2827 dcl copy builtin; 2828 dcl continue_to_signal_ entry (fixed bin(35)); 2829 dcl convert builtin; 2830 dcl currentsize builtin; 2831 2832 dcl divide builtin; 2833 2834 dcl eas_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2835 dcl error_table_$badcall fixed bin(35) ext static; 2836 dcl error_table_$end_of_info fixed bin(35) ext static; 2837 dcl error_table_$no_record fixed bin(35) ext static; 2838 dcl error_table_$recoverable_error fixed bin(35) ext static; 2839 dcl error_table_$unbalanced_brackets fixed bin(35) ext static; 2840 2841 dcl fc_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2842 dcl find_condition_info_ entry (ptr, ptr, fixed bin(35)); 2843 dcl first_time_through_the_detail_block_loop bit (1) aligned; 2844 dcl float builtin; 2845 dcl format_document_$string entry (char(*), char(*), fixed bin(21), ptr, fixed bin(35)); 2846 dcl fr_spare_string char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2847 2848 dcl index builtin; 2849 dcl input_string char (input_string_length) varying based (input_string_ptr); 2850 dcl input_string_length fixed bin (21); 2851 dcl input_string_ptr ptr; 2852 dcl input_string_non_varying char (input_string_non_varying_length) based (input_string_non_varying_ptr); 2853 dcl input_string_non_varying_length fixed bin (21); 2854 dcl input_string_non_varying_ptr ptr; 2855 dcl ioa_$rsnnl entry() options(variable); 2856 dcl iox_$write_record entry (ptr, ptr, fixed bin(21), fixed bin(35)); 2857 dcl iox_$seek_key entry (ptr, char(256) var, fixed bin(21), fixed bin(35)); 2858 2859 dcl length builtin; 2860 dcl 1 local_condition_info like condition_info; 2861 dcl ltrim builtin; 2862 2863 dcl min builtin; 2864 dcl mod builtin; 2865 2866 dcl null builtin; 2867 2868 dcl output_string char (output_string_length) varying based (output_string_ptr); 2869 dcl output_string_length fixed bin (21); 2870 dcl output_string_ptr ptr; 2871 dcl output_string_non_varying char (output_string_non_varying_length) based (output_string_non_varying_ptr); 2872 dcl output_string_non_varying_length fixed bin (21); 2873 dcl output_string_non_varying_ptr ptr; 2874 dcl 1 output_string_redefined based (output_string_ptr), 2875 2 length_word fixed bin (35) aligned, 2876 2 frobus char (output_string_non_varying_length) unaligned; 2877 2878 dcl paginated_report bit (1) aligned; 2879 dcl pc_column_value char (MAXIMUM_OPTION_VALUE_LENGTH) varying; 2880 2881 dcl rtrim builtin; 2882 dcl rw_error_$bad_report_format fixed bin(35) ext static; 2883 dcl rw_table_manager$load_rows entry (ptr, fixed bin (35), fixed bin (35), fixed bin (35)); 2884 2885 dcl search builtin; 2886 dcl sci_ptr ptr; 2887 dcl ssu_$abort_line entry() options(variable); 2888 dcl ssu_$evaluate_active_string entry (ptr, ptr, char(*), fixed bin, char(*) var, fixed bin(35)); 2889 dcl ssu_$print_message entry() options(variable); 2890 dcl sub_error_ condition; 2891 dcl substr builtin; 2892 dcl sys_info$max_seg_size fixed bin(35) ext static; 2893 2894 dcl temp_seg_ptr ptr; 2895 dcl time1 float bin (63); 2896 dcl time2 float bin (63); 2897 dcl translate builtin; 2898 dcl truncation_indicator_length fixed bin; 2899 2900 dcl unspec builtin; 2901 2902 dcl vclock builtin; 2903 2904 dcl work_area area (sys_info$max_seg_size) based (work_area_ptr); 2905 dcl work_area_ptr ptr; 2906 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 */ 2907 2908 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 */ 2909 2910 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 */ 2911 2912 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 */ 2913 2914 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 */ 2915 2916 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 */ 2917 2918 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 */ 2919 2920 8 1 /* BEGIN INCLUDE FILE rw_options_extents.incl.pl1 8 2* 8 3* Extents for the formatting options used for producing reports. 8 4* Kept as a separate include so that some programs may include this 8 5* file without including rw_format_options.incl.pl1 8 6* 8 7* Al Dupuis - August 1983 8 8* 8 9**/ 8 10 /* format: off */ 8 11 8 12 /* The three types of format options that we have. */ 8 13 8 14 dcl GENERAL_REPORT_OPTION fixed bin static int options (constant) init (1); 8 15 dcl GENERAL_COLUMN_OPTION fixed bin static int options (constant) init (2); 8 16 dcl SPECIFIC_COLUMN_OPTION fixed bin static int options (constant) init (3); 8 17 8 18 /* Used to determine how big the tables are without doing a hbound on it. */ 8 19 8 20 dcl NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (15); 8 21 dcl NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE fixed bin static int options (constant) init (9); 8 22 dcl NUMBER_OF_SPECIFIC_COLUMN_OPTIONS_IN_TABLE fixed bin static int options (constant) init (6); 8 23 8 24 /* Used to determine how much space is needed to list them. */ 8 25 8 26 dcl LONGEST_SPECIFIC_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (10); /* -alignment */ 8 27 dcl LONGEST_GENERAL_REPORT_OPTION_NAME_LENGTH fixed bin static int options (constant) init (25); /* -format_document_controls */ 8 28 dcl LONGEST_GENERAL_COLUMN_OPTION_NAME_LENGTH fixed bin static int options (constant) init (21); /* -group_footer_trigger */ 8 29 8 30 /* MAXIMUM_OPTION_IDENTIFIER_LENGTH + MAXIMUM_OPTION_NAME_LENGTH */ 8 31 8 32 dcl MAXIMUM_NORMALIZED_OPTION_NAME_LENGTH fixed bin static int options (constant) init (101); 8 33 8 34 dcl MAXIMUM_OPTION_IDENTIFIER_LENGTH fixed bin static int options (constant) init (69); 8 35 dcl MAXIMUM_OPTION_NAME_LENGTH fixed bin static int options (constant) init (32); 8 36 dcl MAXIMUM_OPTION_VALUE_LENGTH fixed bin static int options (constant) init (4096); 8 37 8 38 /* Used to index into the OPTIONS tables defined in rw_format_options.incl.pl1. */ 8 39 8 40 dcl INDEX_FOR_DELIMITER fixed bin static int options (constant) init (1); 8 41 dcl INDEX_FOR_FORMAT_DOCUMENT_CONTROLS fixed bin static int options (constant) init (2); 8 42 dcl INDEX_FOR_HYPHENATION fixed bin static int options (constant) init (3); 8 43 dcl INDEX_FOR_PAGE_FOOTER_VALUE fixed bin static int options (constant) init (4); 8 44 dcl INDEX_FOR_PAGE_HEADER_VALUE fixed bin static int options (constant) init (5); 8 45 dcl INDEX_FOR_PAGE_LENGTH fixed bin static int options (constant) init (6); 8 46 dcl INDEX_FOR_PAGE_WIDTH fixed bin static int options (constant) init (7); 8 47 dcl INDEX_FOR_TITLE_LINE fixed bin static int options (constant) init (8); 8 48 dcl INDEX_FOR_TRUNCATION fixed bin static int options (constant) init (9); 8 49 8 50 dcl INDEX_FOR_COLUMN_ORDER fixed bin static int options (constant) init (1); 8 51 dcl INDEX_FOR_COUNT fixed bin static int options (constant) init (2); 8 52 dcl INDEX_FOR_EXCLUDE fixed bin static int options (constant) init (3); 8 53 dcl INDEX_FOR_GROUP fixed bin static int options (constant) init (4); 8 54 dcl INDEX_FOR_GROUP_FOOTER_TRIGGER fixed bin static int options (constant) init (5); 8 55 dcl INDEX_FOR_GROUP_FOOTER_VALUE fixed bin static int options (constant) init (6); 8 56 dcl INDEX_FOR_GROUP_HEADER_TRIGGER fixed bin static int options (constant) init (7); 8 57 dcl INDEX_FOR_GROUP_HEADER_VALUE fixed bin static int options (constant) init (8); 8 58 dcl INDEX_FOR_OUTLINE fixed bin static int options (constant) init (9); 8 59 dcl INDEX_FOR_PAGE_BREAK fixed bin static int options (constant) init (10); 8 60 dcl INDEX_FOR_ROW_FOOTER_VALUE fixed bin static int options (constant) init (11); 8 61 dcl INDEX_FOR_ROW_HEADER_VALUE fixed bin static int options (constant) init (12); 8 62 dcl INDEX_FOR_SUBCOUNT fixed bin static int options (constant) init (13); 8 63 dcl INDEX_FOR_SUBTOTAL fixed bin static int options (constant) init (14); 8 64 dcl INDEX_FOR_TOTAL fixed bin static int options (constant) init (15); 8 65 8 66 dcl INDEX_FOR_ALIGNMENT fixed bin static int options (constant) init (1); 8 67 dcl INDEX_FOR_EDITING fixed bin static int options (constant) init (2); 8 68 dcl INDEX_FOR_FOLDING fixed bin static int options (constant) init (3); 8 69 dcl INDEX_FOR_SEPARATOR fixed bin static int options (constant) init (4); 8 70 dcl INDEX_FOR_TITLE fixed bin static int options (constant) init (5); 8 71 dcl INDEX_FOR_WIDTH fixed bin static int options (constant) init (6); 8 72 8 73 /* END INCLUDE FILE rw_options_extents */ 2921 2922 9 1 /* BEGIN INCLUDE FILE rw_page_info.incl.pl1 9 2* 9 3* Written - Al Dupuis - August 1983 9 4**/ 9 5 /* format: off */ 9 6 9 7 dcl 1 formatted_page_info aligned based (formatted_page_ip), 9 8 2 maximum_number_of_detail_blocks fixed bin, /* the most that can appear on a page */ 9 9 2 page_header_length fixed bin, /* page header in lines */ 9 10 2 title_block_length fixed bin, /* titles in lines */ 9 11 2 page_footer_length fixed bin, /* page footer in lines */ 9 12 2 number_of_detail_blocks fixed bin, 9 13 2 detail_blocks (fpi_init_maximum_number_of_detail_blocks 9 14 refer (formatted_page_info.maximum_number_of_detail_blocks)), 9 15 3 row_number fixed bin (35), /* position in the table */ 9 16 3 beginning_line_number fixed bin, /* beginning line on page */ 9 17 3 group_header_length fixed bin, /* group header length in lines */ 9 18 3 row_header_length fixed bin, /* row header in lines */ 9 19 3 row_length fixed bin, /* row value in lines */ 9 20 3 subtotal_length fixed bin, /* subtotal in lines */ 9 21 3 subcount_length fixed bin, /* subcount in lines */ 9 22 3 total_length fixed bin, /* total in lines */ 9 23 3 count_length fixed bin, /* count in lines */ 9 24 3 row_footer_length fixed bin, /* row footer in lines */ 9 25 3 group_footer_length fixed bin; /* group footer length in lines */ 9 26 dcl formatted_page_ip ptr; 9 27 dcl fpi_init_maximum_number_of_detail_blocks fixed bin; 9 28 9 29 dcl 1 page_info aligned based (page_ip), 9 30 2 width fixed bin, /* width in chars */ 9 31 2 length fixed bin, /* length in lines */ 9 32 2 total_characters fixed bin (21), /* width * length */ 9 33 2 page_info_size fixed bin, /* size of this structure in words */ 9 34 2 page_ptr ptr, /* points to the actual page */ 9 35 2 page_overstrike_info_ptr ptr, /* points to the overstrike info */ 9 36 2 formatted_page_info_ptr ptr; /* points to formatted_page_info */ 9 37 9 38 dcl page_defined_as_chars (page_info.total_characters) char (1) based (page_info.page_ptr); 9 39 dcl page_defined_as_lines (page_info.length) char (page_info.width) based (page_info.page_ptr); 9 40 dcl page_defined_as_a_string char (page_info.total_characters) based (page_info.page_ptr); 9 41 dcl page_ip ptr; 9 42 9 43 dcl 1 page_overstrike_info aligned based (page_overstrike_ip), 9 44 2 number_of_bits_or_chars fixed bin (21), /* number of chars in the page */ 9 45 2 bit_map (page_info.total_characters /* on means this char on the page is overstruck */ 9 46 refer (page_overstrike_info.number_of_bits_or_chars)) bit (1) unaligned, 9 47 2 chars (page_info.total_characters /* this is the overstrike character */ 9 48 refer (page_overstrike_info.number_of_bits_or_chars)) char (1) unaligned; 9 49 dcl page_overstrike_ip ptr; 9 50 9 51 dcl 1 page_overstrike_info_redefined aligned based (page_overstrike_ip), 9 52 2 number_of_bits_or_chars fixed bin (21), 9 53 2 bit_map bit (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned, 9 54 2 chars char (page_overstrike_info_redefined.number_of_bits_or_chars) unaligned; 9 55 9 56 /* END INCLUDE FILE rw_page_info.incl.pl1 */ 2923 2924 10 1 /* BEGIN INCLUDE FILE rw_report_info.incl.pl1 10 2* Information needed to control the report environment. 10 3* Al Dupuis - August 1983 10 4**/ 10 5 /* format: off */ 10 6 10 7 dcl 1 report_control_info aligned based (report_cip), 10 8 2 flags, 10 9 3 report_is_paginated bit (1) unaligned, /* paged or one continous stream */ 10 10 3 table_has_been_started bit (1) unaligned, /* table clean up is necessary */ 10 11 3 table_is_full bit (1) unaligned, /* no more retrieves are necessary */ 10 12 3 report_has_been_started bit (1) unaligned, /* report clean up is necessary */ 10 13 3 report_is_formatted bit (1) unaligned, /* no more formatting is necessary */ 10 14 3 permanent_report bit (1) unaligned, /* or disposable */ 10 15 3 permanent_table bit (1) unaligned, /* or disposable */ 10 16 3 report_has_just_been_completed bit (1) unaligned, /* used for printing timers */ 10 17 3 table_has_just_been_loaded bit (1) unaligned, /* used for printing timers */ 10 18 3 multi_pass_mode bit (1) unaligned, /* on if we are to do more than 1 pass */ 10 19 3 available bit (26) unaligned, 10 20 2 format_options_flags, /* used to determine if value is default */ 10 21 3 general_report_default_value (NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE) bit (1) unaligned, 10 22 3 general_column_default_value (NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE) bit (1) unaligned, 10 23 2 value_seg_ptr ptr, /* the options value seg */ 10 24 2 table_information_ptr ptr, /* points to table_info */ 10 25 2 table_control_info_ptr ptr, /* points to table_control_info */ 10 26 2 row_value_temp_segment_ptr ptr, /* points to a segment for the row value */ 10 27 2 general_work_area_ptr ptr, /* a freeing work area */ 10 28 2 name_value_area_ptr ptr, /* area for name-value allocations */ 10 29 2 subsystem_control_info_ptr ptr, /* ptr for ssu_ info structure */ 10 30 2 subsystems_info_ptr ptr, /* points to subsystems info structure */ 10 31 2 name_value_temp_seg_ptr ptr, /* temp seg for name-value space */ 10 32 2 report_temp_seg_ptr ptr, /* report workspace */ 10 33 2 report_work_area_ptr ptr, /* report workspace */ 10 34 2 format_report_info_ptr ptr, /* info needed to create a report */ 10 35 2 input_string_temp_seg_ptr ptr, /* report workspace */ 10 36 2 output_string_temp_seg_ptr ptr, /* report workspace */ 10 37 2 editing_strings_temp_seg_ptr ptr, /* report workspace */ 10 38 2 headers_temp_seg_ptr ptr, /* report workspace */ 10 39 2 display_iocb_ptr ptr, /* report is displayed through this */ 10 40 2 area_info_ptr ptr, /* points to area_info structure */ 10 41 2 table_manager_delete_table_entry variable entry (ptr, fixed bin (35)), /* entry who deletes the table */ 10 42 2 table_manager_get_query_entry variable entry (ptr, ptr, fixed bin (21), fixed bin (35)), /* entry who gets the query */ 10 43 2 table_manager_get_row_entry variable entry (ptr, fixed bin (35)), /* entry who loads rows */ 10 44 2 table_manager_create_table_entry variable entry (ptr, fixed bin (35)), /* entry who makes a new table */ 10 45 2 options_identifier fixed bin, /* current set of options */ 10 46 2 report_identifier fixed bin, /* current report */ 10 47 2 no_of_rows_retrieved fixed bin (35), /* current no of rows */ 10 48 2 no_of_formatted_pages fixed bin (21), /* current no of pages */ 10 49 2 number_of_passes fixed bin, /* number of times report will be formatted */ 10 50 2 table_loading_time float bin (63), 10 51 2 table_sorting_time float bin (63), 10 52 2 table_deletion_time float bin (63), 10 53 2 report_setup_time float bin (63), 10 54 2 report_formatting_time float bin (63), 10 55 2 report_display_time float bin (63), 10 56 2 report_deletion_time float bin (63), 10 57 2 ssu_evaluate_active_string_time float bin (63), 10 58 2 temp_dir_unique_id bit (36), /* uid of temp dir */ 10 59 2 subsystems_ec_suffix char (32), /* suffix for saving and restoring ecs */ 10 60 2 temp_dir_name char (168) unaligned; /* the dir where we place the retrieved table and report */ 10 61 dcl report_cip ptr init (null ()); 10 62 10 63 /* END INCLUDE FILE rw_report_info.incl.pl1 */ 2925 2926 11 1 /* BEGIN INCLUDE FILE rw_report_structures.incl.pl1 11 2* 11 3* Written - Al Dupuis - August 1983 11 4**/ 11 5 /* format: off */ 11 6 11 7 /* Used in column_info.alignment and column_info.subsystem_data_type */ 11 8 11 9 dcl BIT_DATA_TYPE fixed bin static int options (constant) init (1); 11 10 dcl BOTH_ALIGNMENT fixed bin static int options (constant) init (1); 11 11 dcl CENTER_ALIGNMENT fixed bin static int options (constant) init (2); 11 12 dcl CHAR_DATA_TYPE fixed bin static int options (constant) init (2); 11 13 dcl DECIMAL_ALIGNMENT fixed bin static int options (constant) init (3); 11 14 dcl DECIMAL_DATA_TYPE fixed bin static int options (constant) init (3); 11 15 dcl LEFT_ALIGNMENT fixed bin static int options (constant) init (4); 11 16 dcl NUMERIC_DATA_TYPE fixed bin static int options (constant) init (4); 11 17 dcl RIGHT_ALIGNMENT fixed bin static int options (constant) init (5); 11 18 11 19 dcl 1 column_info aligned based (column_ip), 11 20 2 flags, 11 21 3 folding_is_fill bit (1) unaligned, /* fill or truncate */ 11 22 3 outline bit (1) unaligned, /* on means the display has been suppressed */ 11 23 3 editing bit (1) unaligned, /* on means there is an editing request */ 11 24 3 restore_editing bit (1) unaligned, /* used to toggle the editing bit */ 11 25 3 available bit (32) unaligned, 11 26 2 order fixed bin, /* as specified by the user */ 11 27 2 input_column fixed bin, /* # of the column in the table */ 11 28 2 output_column fixed bin, /* # of the column on the page */ 11 29 2 output_line fixed bin, /* within the block */ 11 30 2 starting_position fixed bin, /* within the page width */ 11 31 2 width fixed bin, /* in characters */ 11 32 2 alignment fixed bin, /* set to one of the above alignment constants */ 11 33 2 decimal_position fixed bin, /* only needed for decimal alignment */ 11 34 2 subsystem_data_type fixed bin, /* set to one of the above data type constants */ 11 35 2 editing_string_length fixed bin (21), /* before evaluation */ 11 36 2 editing_string_result_length fixed bin (21), /* after evaluation */ 11 37 2 editing_string_ptr ptr, /* before evaluation */ 11 38 2 editing_string_result_ptr ptr, /* after evaluation */ 11 39 2 prefix_character char (1) varying; /* column prefix */ 11 40 dcl column_ip ptr; 11 41 11 42 dcl 1 columns_info aligned based (columns_ip), /* an array of column_info's */ 11 43 2 number_of_columns fixed bin, 11 44 2 columns (initialize_number_of_columns 11 45 refer (columns_info.number_of_columns)) like column_info; 11 46 dcl columns_ip ptr; 11 47 11 48 dcl 1 column_map (column_map_number_of_columns) aligned based (column_mp), 11 49 2 present bit (1), /* the column is present in the list */ 11 50 2 position fixed bin; /* position where this column was found in the list */ 11 51 dcl column_map_number_of_columns fixed bin; 11 52 dcl column_mp ptr; 11 53 11 54 dcl 1 count_columns_info like columns_info based (count_columns_ip); 11 55 dcl count_columns_ip ptr; 11 56 11 57 dcl 1 count_info like total_info based (count_ip); 11 58 dcl count_ip ptr; 11 59 11 60 /* Used to access the current row from the table */ 11 61 dcl current_row_value char (table_info.row_value_length) based (status.current_row_ptr); 11 62 11 63 /* Used to pick up the value before or after evaluation */ 11 64 dcl editing_string_result char (editing_string_rl) based (editing_string_rp); 11 65 dcl editing_string_rl fixed bin; 11 66 dcl editing_string_rp ptr; 11 67 11 68 dcl editing_strings_next_byte fixed bin (21); 11 69 /* Used to store editing strings before and after evaluation. */ 11 70 dcl editing_strings_temp_seg char (maximum_segment_size) based (editing_strings_tsp); 11 71 dcl editing_strings_temp_seg_as_an_array (maximum_segment_size) char (1) based (editing_strings_tsp); 11 72 dcl editing_strings_tsp ptr; 11 73 11 74 dcl 1 format_report_info aligned based (format_report_ip), 11 75 2 flags, 11 76 3 unlimited_page_length bit (1) unaligned, /* -page_length equal to zero */ 11 77 3 unlimited_page_width bit (1) unaligned, /* -page_width equal to zero */ 11 78 3 page_header_is_defined bit (1) unaligned, /* -page_header_value */ 11 79 3 group_header_is_defined bit (1) unaligned, /* -group_header_value */ 11 80 3 group_header_trigger_is_defined bit (1) unaligned, /* -group_header_trigger */ 11 81 3 title_block_is_defined bit (1) unaligned, /* -title_line */ 11 82 3 row_header_is_defined bit (1) unaligned, /* -row_header_value */ 11 83 3 row_value_is_defined bit (1) unaligned, /* if all of the columns weren't excluded */ 11 84 3 row_footer_is_defined bit (1) unaligned, /* -row_footer_value */ 11 85 3 group_footer_is_defined bit (1) unaligned, /* -group_footer_value */ 11 86 3 group_footer_trigger_is_defined bit (1) unaligned, /* -group_footer_trigger */ 11 87 3 page_footer_is_defined bit (1) unaligned, /* -page_footer_value */ 11 88 3 editing_is_defined bit (1) unaligned, /* -editing */ 11 89 3 exclude_is_defined bit (1) unaligned, /* -exclude */ 11 90 3 group_is_defined bit (1) unaligned, /* -group */ 11 91 3 outline_is_defined bit (1) unaligned, /* -outline */ 11 92 3 page_break_is_defined bit (1) unaligned, /* -page_break */ 11 93 3 subtotal_is_defined bit (1) unaligned, /* -subtotal */ 11 94 3 subcount_is_defined bit (1) unaligned, /* -subcount */ 11 95 3 total_is_defined bit (1) unaligned, /* -total */ 11 96 3 count_is_defined bit (1) unaligned, /* -count */ 11 97 3 available bit (15) unaligned, 11 98 2 page_width fixed bin, /* as given by the user */ 11 99 2 page_length fixed bin, /* as given by the user */ 11 100 2 number_of_formatted_rows fixed bin (35), /* updated at the end of each page */ 11 101 2 editing_strings_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 11 102 2 headers_next_available_byte fixed bin (21), /* beginning of temp space for execution */ 11 103 2 report_iocb_ptr ptr, /* for saving copies of the page */ 11 104 2 table_info_ptr ptr, /* to avoid repetitive calls to rw_table$info */ 11 105 2 format_document_op ptr, /* format_document_options structure */ 11 106 2 page_info_ptr ptr, /* page_info structure */ 11 107 2 copy_of_page_info_ptr ptr, /* version of page_info structure that can be changed */ 11 108 /* after each page */ 11 109 2 formatted_page_info_ptr ptr, /* formatted_page_info structure */ 11 110 2 overstrike_info_ptr ptr, /* page_overstrike_info structure */ 11 111 2 status_ptr ptr, /* status structure */ 11 112 2 template_map_ptr ptr, /* template_map array */ 11 113 2 page_header_info_ptr ptr, /* header_info structure */ 11 114 2 page_footer_info_ptr ptr, /* header_info structure */ 11 115 2 group_header_info_ptr ptr, /* header_info structure */ 11 116 2 group_footer_info_ptr ptr, /* header_info structure */ 11 117 2 group_header_trigger_info_ptr ptr, /* group_info structure */ 11 118 2 group_footer_trigger_info_ptr ptr, /* group_info structure */ 11 119 2 row_header_info_ptr ptr, /* header_info structure */ 11 120 2 row_footer_info_ptr ptr, /* header_info structure */ 11 121 2 title_block_columns_info_ptr ptr, /* title_block_columns_info structure */ 11 122 2 title_block_info_ptr ptr, /* title_block_info structure */ 11 123 2 input_columns_info_ptr ptr, /* input_columns_info structure */ 11 124 2 input_columns_order_ptr ptr, /* input_columns_order array */ 11 125 2 output_columns_info_ptr ptr, /* output_columns_info structure */ 11 126 2 group_info_ptr ptr, /* group_info structure */ 11 127 2 outline_info_ptr ptr, /* outline_info structure */ 11 128 2 page_break_info_ptr ptr, /* page_break_info structure */ 11 129 2 subtotal_info_ptr ptr, /* subtotal_info structure */ 11 130 2 subcount_info_ptr ptr, /* subcount_info structure */ 11 131 2 total_info_ptr ptr, /* total_info structure */ 11 132 2 count_info_ptr ptr, /* count_info structure */ 11 133 2 row_value_template_info_ptr ptr, /* row_value_template_info structure */ 11 134 2 generic_template_ptr ptr, /* generic_template char string */ 11 135 2 header_part_delimiter char (1) unaligned, /* delimits the different portions of a header/footer */ 11 136 2 truncation_indicator char (32) varying unaligned, /* used to indicate that truncation has occured */ 11 137 2 report_directory_name char (168) unaligned, /* dir where we place copies of the page */ 11 138 2 report_entry_name char (32) unaligned; /* entry name portion of above */ 11 139 dcl format_report_ip ptr; 11 140 11 141 /* used to format page/row headers and footers */ 11 142 dcl generic_template char (generic_template_length) based (generic_tp); 11 143 dcl generic_template_length fixed bin; 11 144 dcl generic_tp ptr; 11 145 11 146 /* these columns form a group of rows and are used with outlining, etc. */ 11 147 dcl 1 group_info aligned based (group_ip), 11 148 2 number_of_columns_to_group fixed bin, 11 149 2 column_number (gi_init_number_of_columns_to_group 11 150 refer (group_info.number_of_columns_to_group)) fixed bin; 11 151 dcl gi_init_number_of_columns_to_group fixed bin; 11 152 dcl group_ip ptr; 11 153 11 154 dcl headers_next_byte fixed bin (21); 11 155 /* used to hold the page/row headers/footers, and temp space for totals/subtotals. */ 11 156 dcl headers_temp_seg char (maximum_segment_size) based (headers_tsp); 11 157 dcl headers_temp_seg_as_an_array (maximum_segment_size) char (1) based (headers_tsp); 11 158 dcl headers_tsp ptr; 11 159 11 160 dcl 1 header_info aligned based (header_ip), 11 161 2 number_of_lines fixed bin, /* number of header lines typed in by the user */ 11 162 2 maximum_number_of_parts fixed bin, /* 3 parts maximum (left, right, and center) */ 11 163 2 lines (hi_init_number_of_lines 11 164 refer (header_info.number_of_lines)), 11 165 3 parts (hi_init_maximum_number_of_parts 11 166 refer (header_info.maximum_number_of_parts)), 11 167 4 flags, 11 168 5 present bit (1) unaligned, /* this particular part is defined */ 11 169 5 active bit (1) unaligned, /* and it contains active functions */ 11 170 5 available bit (34) unaligned, 11 171 4 index fixed bin (21), /* before evaluation */ 11 172 4 length fixed bin (21), /* before evaluation */ 11 173 4 starting_position fixed bin, /* within the page width */ 11 174 4 width fixed bin, /* within the page width */ 11 175 4 alignment fixed bin; /* left, right, or center */ 11 176 dcl header_ip ptr; 11 177 dcl hi_init_maximum_number_of_parts fixed bin; 11 178 dcl hi_init_number_of_lines fixed bin; 11 179 11 180 dcl initialize_number_of_columns fixed bin; /* columns_info refer extent */ 11 181 11 182 dcl 1 input_columns_info aligned like columns_info based (input_columns_ip); /* the columns in the table */ 11 183 dcl input_columns_ip ptr; 11 184 11 185 dcl input_columns_order (input_columns_info.number_of_columns) fixed bin based (input_columns_op); 11 186 dcl input_columns_op ptr; 11 187 11 188 dcl maximum_segment_size fixed bin (21); /* in characters */ 11 189 11 190 /* Used to access the next row from the table */ 11 191 dcl next_row_value char (table_info.row_value_length) based (status.next_row_ptr); 11 192 11 193 dcl 1 outline_info aligned based (outline_ip), /* who gets oulining attempted */ 11 194 2 maximum_number_of_single_columns fixed bin, 11 195 2 maximum_number_of_grouping_columns fixed bin, 11 196 2 number_of_single_columns fixed bin, /* columns who are not a member of the group */ 11 197 2 number_of_grouping_columns fixed bin, /* columns who are a member of the group */ 11 198 2 single_columns (oi_init_maximum_number_of_single_columns refer ( 11 199 outline_info.maximum_number_of_single_columns)) fixed bin, 11 200 2 grouping_columns (oi_init_maximum_number_of_grouping_columns refer ( 11 201 outline_info.maximum_number_of_grouping_columns)) fixed bin; 11 202 dcl oi_init_maximum_number_of_grouping_columns fixed bin; 11 203 dcl oi_init_maximum_number_of_single_columns fixed bin; 11 204 dcl outline_ip ptr; 11 205 11 206 dcl 1 output_columns_info like columns_info based (output_columns_ip); /* the columns that will go on the page */ 11 207 dcl output_columns_ip ptr; 11 208 11 209 /* these columns will be checked to determine if a page break is required */ 11 210 dcl 1 page_break_info aligned based (page_break_ip), 11 211 2 number_of_columns fixed bin, 11 212 2 columns (pbi_init_number_of_columns refer ( 11 213 page_break_info.number_of_columns)) bit (1) unaligned; 11 214 dcl page_break_ip ptr; 11 215 dcl pbi_init_number_of_columns fixed bin; 11 216 11 217 /* Used to access the previous row from the table */ 11 218 dcl previous_row_value char (table_info.row_value_length) based (status.previous_row_ptr); 11 219 11 220 /* The templates for the row value (also used for titles, subtotals, and totals.) */ 11 221 dcl 1 row_value_template_info like template_info based (row_value_template_ip); 11 222 dcl row_value_template_ip ptr; 11 223 11 224 /* main execution control structure for rw_fr_build_page */ 11 225 dcl 1 status aligned based (status_pointer), 11 226 2 flags, 11 227 3 still_formatting_detail_blocks bit (1), /* turned on while we are doing detail blocks */ 11 228 3 first_row_of_report bit (1), /* turned on when we are on the first row of a report */ 11 229 3 last_row_of_report bit (1), /* turned on when we are on the last row of a report */ 11 230 3 first_row_on_page bit (1), /* turned on when we are on the 1st row of a page */ 11 231 3 page_overflow bit (1), /* turned on when we are backing up */ 11 232 3 subtotals_ejection_in_progress bit (1), /* turned on when subtotals are being ejected */ 11 233 3 subcounts_ejection_in_progress bit (1), /* turned on when subcounts are being ejected */ 11 234 3 totals_ejection_in_progress bit (1), /* turned on when totals are being ejected */ 11 235 3 counts_ejection_in_progress bit (1), /* turned on when counts are being ejected */ 11 236 3 header_being_evaluated bit (1), /* turned on during header evaluation */ 11 237 3 detail_block_used_some_lines bit (1), /* turned on when a row header/footer/value/subtotal/total uses a line */ 11 238 3 row_has_been_processed_before bit (1), /* turned on when this row has been backed out of the previous page */ 11 239 3 last_pass bit (1), /* true if this is the last pass */ 11 240 2 previous_row_ptr ptr, /* points to the previous row (or null) */ 11 241 2 current_row_ptr ptr, /* points to the current row */ 11 242 2 next_row_ptr ptr, /* points to the next row (or null) */ 11 243 2 total_number_of_rows_used fixed bin, /* total # per page, used to make sure we don't */ 11 244 /* backup over the 1st row */ 11 245 2 current_pass_number fixed bin, /* [display_builtins current_pass_number] */ 11 246 2 current_row_number fixed bin (35), /* [display_builtins current_row_number] */ 11 247 2 current_column_number fixed bin, /* set to the current output column during row evaluation */ 11 248 2 current_page_number fixed bin (21), /* [display_builtins page_number] */ 11 249 2 current_line_on_page fixed bin, /* this is where the next thing is placed on the page */ 11 250 2 remaining_lines_on_page fixed bin, /* used in estimating if something will fit */ 11 251 2 highest_row_formatted fixed bin, /* used to keep track of rows backed out of the page */ 11 252 2 current_header_line fixed bin, /* set to the current header line during header evaluation */ 11 253 2 current_header_part fixed bin, /* set to the current header part during header evaluation */ 11 254 2 number_of_lines_needed_for_detail_block fixed bin, /* sum of row header, footer, and value */ 11 255 2 number_of_lines_needed_for_row_header fixed bin, /* may be zero */ 11 256 2 number_of_lines_needed_for_row_value fixed bin, /* may be zero */ 11 257 2 number_of_lines_needed_for_row_footer fixed bin, /* may be zero */ 11 258 2 number_of_lines_needed_for_page_footer fixed bin, /* may be zero */ 11 259 2 number_of_lines_needed_for_group_header fixed bin, /* may be zero */ 11 260 2 number_of_lines_needed_for_group_footer fixed bin, /* may be zero */ 11 261 2 last_row_number fixed bin (35), /* zero unless multi-pass */ 11 262 2 last_page_number fixed bin, /* zero unless multi-pass mode */ 11 263 2 object_being_evaluated char (16) varying; /* "page header", "row value", etc. */ 11 264 dcl status_pointer ptr; 11 265 11 266 dcl 1 subcount_columns_info like columns_info based (subcount_columns_ip); 11 267 dcl subcount_columns_ip ptr; 11 268 11 269 dcl 1 subcount_generation_info like subtotal_generation_info based (subcount_generation_ip); 11 270 dcl subcount_generation_ip ptr; 11 271 11 272 dcl 1 subcount_info like subtotal_info based (subcount_ip); 11 273 dcl subcount_ip ptr; 11 274 11 275 dcl 1 subtotal_columns_info like columns_info based (subtotal_columns_ip); 11 276 dcl subtotal_columns_ip ptr; 11 277 11 278 /* Used to restore subtotals when backing up on a page. */ 11 279 dcl 1 subtotal_generation_info aligned based (subtotal_generation_ip), 11 280 2 maximum_number_of_generation_blocks fixed bin, /* maximum number of subtotals possibly generated per page + 1 */ 11 281 2 number_of_subtotals fixed bin, /* # of subtotals we're taking */ 11 282 2 current_generation_block fixed bin, /* slot for next subtotal generation */ 11 283 2 generations (0:sgi_init_number_of_generations 11 284 refer (subtotal_generation_info.maximum_number_of_generation_blocks)), 11 285 3 subtotals (sgi_init_number_of_subtotals /* value of the subtotals when the break occured */ 11 286 refer (subtotal_generation_info.number_of_subtotals)) float dec (59); 11 287 dcl sgi_init_number_of_generations fixed bin; 11 288 dcl sgi_init_number_of_subtotals fixed bin; 11 289 dcl subtotal_generation_ip ptr; 11 290 11 291 dcl 1 subtotal_info aligned based (subtotal_ip), 11 292 2 columns_info_ptr ptr, /* points to subtotal_columns_info structure */ 11 293 2 subtotal_generation_info_ptr ptr, /* points to subtotal_generations_info structure */ 11 294 2 number_of_columns_to_subtotal fixed bin, /* the number of subtotals */ 11 295 2 highest_level fixed bin, /* the largest number of different subtotals on a single column */ 11 296 2 current_level fixed bin, /* the current level of subtotals being evaluated */ 11 297 2 columns (si_init_number_of_columns_to_subtotal 11 298 refer (subtotal_info.number_of_columns_to_subtotal)), 11 299 3 flags, 11 300 4 reset bit (1) unaligned, /* reset or running subtotals */ 11 301 4 group_column bit (1) unaligned, /* on means the watch column is a grouping column */ 11 302 4 available bit (34) unaligned, 11 303 3 input_column fixed bin, /* # of the input column for accumulations */ 11 304 3 watch_column fixed bin, /* # of the column to watch for generation */ 11 305 3 level fixed bin, /* different subtotals on the same column receive higher level numbers */ 11 306 3 ioa_string char (5) varying, /* used to edit the "subtotal" field */ 11 307 3 subtotal float dec (59); /* used to hold the subtotal until it needs /* 11 308* /* to be placed on the page */ 11 309 dcl si_init_number_of_columns_to_subtotal fixed bin; 11 310 dcl subtotal_ip ptr; 11 311 11 312 dcl 1 template_info aligned based (template_ip), /* templates that are laid down before the column values */ 11 313 2 template_width fixed bin, /* how wide they are */ 11 314 2 number_of_templates fixed bin, /* how many there are */ 11 315 2 templates (ti_init_number_of_templates refer (template_info.number_of_templates)) /* the templates */ 11 316 char (ti_init_template_width refer (template_info.template_width)); 11 317 dcl ti_init_number_of_templates fixed bin; 11 318 dcl template_ip ptr; 11 319 dcl ti_init_template_width fixed bin; 11 320 11 321 /* used to determine which templates have been placed */ 11 322 dcl template_map (template_map_number_of_bits) bit (1) unaligned based (template_mp); 11 323 dcl template_mp ptr; 11 324 dcl template_map_number_of_bits fixed bin; 11 325 dcl template_map_defined_as_a_string bit (template_map_number_of_bits) based (template_mp); 11 326 11 327 dcl template char (template_length) based (template_ptr); 11 328 dcl template_length fixed bin; 11 329 dcl template_ptr ptr; 11 330 11 331 dcl 1 title_block_columns_info like columns_info based (title_block_columns_ip); /* output columns for the titles */ 11 332 dcl title_block_columns_ip ptr; 11 333 11 334 /* holds the formatted title block after page 1 is finished */ 11 335 dcl 1 title_block_info aligned based (title_block_ip), 11 336 2 number_of_lines fixed bin, /* how many lines there are */ 11 337 2 line_length fixed bin, /* how long the lines are */ 11 338 2 lines (tbi_init_number_of_lines refer ( /* the formatted lines */ 11 339 title_block_info.number_of_lines)) char (tbi_init_line_length refer ( 11 340 title_block_info.line_length)); 11 341 dcl tbi_init_line_length fixed bin; 11 342 dcl tbi_init_number_of_lines fixed bin; 11 343 dcl title_block_ip ptr; 11 344 11 345 dcl 1 total_columns_info like columns_info based (total_columns_ip); /* output_columns_info for totals */ 11 346 dcl total_columns_ip ptr; 11 347 11 348 dcl 1 total_info aligned based (total_ip), 11 349 2 columns_info_ptr ptr, /* points to total_columns_info structure */ 11 350 2 number_of_columns_to_total fixed bin, /* # to total */ 11 351 2 columns (ti_init_number_of_columns_to_total 11 352 refer (total_info.number_of_columns_to_total)), 11 353 3 input_column fixed bin, /* the input column number */ 11 354 3 ioa_string char (5) varying, /* used to edit the "total" field */ 11 355 3 total float dec (59); /* used to hold the total until it's placed on the page */ 11 356 dcl ti_init_number_of_columns_to_total fixed bin; 11 357 dcl total_ip ptr; 11 358 11 359 /* END INCLUDE FILE rw_report_structures.incl.pl1 */ 2927 2928 12 1 /* BEGIN INCLUDE FILE rw_table_info.incl.pl1 12 2* 12 3* Written - Al Dupuis 12 4**/ 12 5 /* format: off */ 12 6 12 7 dcl 1 table_info aligned based (table_ip), 12 8 2 version char (8), 12 9 2 column_count fixed bin, 12 10 2 maximum_column_name_length fixed bin, 12 11 2 maximum_column_value_length fixed bin, 12 12 2 row_value_length fixed bin (21), 12 13 2 row_value_ptr ptr, 12 14 2 columns (ti_init_column_count refer (table_info.column_count)), 12 15 3 column_name char (69) varying, 12 16 3 column_data_type bit (36), 12 17 3 column_length fixed bin (21), 12 18 3 column_index fixed bin (21); 12 19 12 20 dcl table_ip ptr; 12 21 dcl ti_init_column_count fixed bin; 12 22 dcl TABLE_INFO_VERSION_1 char (8) internal static options (constant) init ("rwti_001"); 12 23 12 24 /* END INCLUDE FILE view_master_table_info.incl.pl1 */ 2929 2930 13 1 /* BEGIN INCLUDE FILE rw_table_control_info.incl.pl1 13 2* 13 3* Written - Al Dupuis 13 4**/ 13 5 /* format: off */ 13 6 13 7 dcl 1 row_ptrs aligned based (row_ptrs_ptr), 13 8 2 number_of_ptrs_in_this_segment fixed bin (21), 13 9 2 row_value_ptr (row_ptrs.number_of_ptrs_in_this_segment) ptr unaligned; 13 10 13 11 dcl 1 table_control_info aligned based (table_control_ip), 13 12 2 row_count fixed bin (35), 13 13 2 number_of_components fixed bin, 13 14 2 maximum_number_of_rows_per_segment fixed bin (21), 13 15 2 current_segment_row_count fixed bin (21), 13 16 2 table_information_ptr ptr, 13 17 2 table_segments_info_ptr ptr, 13 18 2 msf_file_control_block_ptr ptr, 13 19 2 current_component_ptr ptr, 13 20 2 general_work_area_ptr ptr, 13 21 2 temp_seg_info_ptr ptr, 13 22 2 subsystem_control_info_ptr ptr, 13 23 2 msf_file_name char (32) unaligned, 13 24 2 msf_directory_name char (168) unaligned; 13 25 13 26 dcl 1 table_segments_info aligned based (table_segments_ip), 13 27 2 maximum_number_of_segments fixed bin, 13 28 2 maximum_number_of_ptrs_per_segment fixed bin (21), 13 29 2 current_number_of_segments fixed bin, 13 30 2 segment_ptrs (tsi_init_maximum_number_of_segments refer 13 31 (table_segments_info.maximum_number_of_segments)) ptr; 13 32 13 33 dcl row_ptrs_ptr ptr; 13 34 dcl table_segments_ip ptr; 13 35 dcl table_control_ip ptr; 13 36 dcl tsi_init_maximum_number_of_segments fixed bin (21); 13 37 13 38 /* END INCLUDE FILE rw_table_control_info.incl.pl1 */ 2931 2932 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 */ 2933 2934 2935 end rw_fr_build_page; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/16/84 1107.5 rw_fr_build_page.pl1 >special_ldd>online>7001-11/16/84>rw_fr_build_page.pl1 2907 1 11/02/83 1845.0 arg_descriptor.incl.pl1 >ldd>include>arg_descriptor.incl.pl1 2909 2 10/23/81 1948.6 arg_list.incl.pl1 >ldd>include>arg_list.incl.pl1 2911 3 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 2913 4 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>include>condition_info_header.incl.pl1 2915 5 09/22/80 1256.7 cp_active_string_types.incl.pl1 >ldd>include>cp_active_string_types.incl.pl1 2917 6 04/13/83 1552.8 format_document_error.incl.pl1 >ldd>include>format_document_error.incl.pl1 2919 7 11/01/84 1514.0 format_document_options.incl.pl1 >ldd>include>format_document_options.incl.pl1 2921 8 11/16/84 1107.8 rw_options_extents.incl.pl1 >special_ldd>online>7001-11/16/84>rw_options_extents.incl.pl1 2923 9 11/16/84 1107.8 rw_page_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_page_info.incl.pl1 2925 10 11/16/84 1107.6 rw_report_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_report_info.incl.pl1 2927 11 11/16/84 1107.8 rw_report_structures.incl.pl1 >special_ldd>online>7001-11/16/84>rw_report_structures.incl.pl1 2929 12 11/16/84 1107.6 rw_table_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_table_info.incl.pl1 2931 13 11/16/84 1107.6 rw_table_control_info.incl.pl1 >special_ldd>online>7001-11/16/84>rw_table_control_info.incl.pl1 2933 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 710 BACKSPACE 015243 constant char(1) initial unaligned dcl 2787 ref 951 1176 1235 1279 BACKSPACE_OR_VERTICAL_TAB_OR_HORIZONTAL_TAB_OR_NL 000111 constant char(4) initial unaligned dcl 2788 ref 884 BAR 015242 constant char(1) initial unaligned dcl 2790 ref 714 718 BAR_BAR 015241 constant char(2) initial unaligned dcl 2791 ref 710 BLANK constant char(1) initial unaligned dcl 2792 ref 1278 BOTH_ALIGNMENT constant fixed bin(17,0) initial dcl 11-10 ref 884 912 CENTER_ALIGNMENT constant fixed bin(17,0) initial dcl 11-11 ref 926 1015 CHAR_DATA_TYPE constant fixed bin(17,0) initial dcl 11-12 ref 1918 DECIMAL_ALIGNMENT constant fixed bin(17,0) initial dcl 11-13 ref 1009 FILL 000110 constant bit(1) initial unaligned dcl 2793 set ref 1662* 1903* FORM_FEED constant char(1) initial unaligned dcl 2794 ref 646 GENERATE_ONE_BLANK_LINE_TRAILER 000147 constant fixed bin(17,0) initial dcl 2795 set ref 2039* 2200* GENERATE_ZERO_BLANK_LINES_TRAILER 000145 constant fixed bin(17,0) initial dcl 2796 set ref 1436* 2334* GROUP_FOOTER 000103 constant varying char(16) initial dcl 2797 set ref 1552* 1557* GROUP_HEADER 000076 constant varying char(16) initial dcl 2798 set ref 1390* 1396* HEADER_PARTS_LABELS 000062 constant varying char(11) initial array dcl 2799 set ref 2771* LEFT_ALIGNMENT 000146 constant fixed bin(17,0) initial dcl 11-15 set ref 1011 1903* LEFT_BRACKET 015240 constant char(1) initial unaligned dcl 2801 ref 704 747 LEFT_OR_RIGHT_BRACKET constant char(2) initial unaligned dcl 2802 ref 688 742 772 LOOK_AHEAD 000110 constant bit(1) initial dcl 2803 set ref 1548* LOOK_BEHIND 000145 constant bit(1) initial dcl 2804 set ref 1386* MAXIMUM_OPTION_VALUE_LENGTH constant fixed bin(17,0) initial dcl 8-36 ref 2834 2841 2846 2879 NEWLINE constant char(1) initial unaligned dcl 2805 ref 950 1278 NORMAL_ACTIVE_STRING constant fixed bin(17,0) initial dcl 5-6 ref 717 722 723 725 NUMBER_OF_GENERAL_COLUMN_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 8-20 ref 114 139 160 628 628 630 762 762 1574 1584 2440 2443 2444 2446 2448 2455 2461 2467 2468 2571 2578 2578 2580 2580 2583 2583 2591 2639 2722 2734 NUMBER_OF_GENERAL_REPORT_OPTIONS_IN_TABLE constant fixed bin(17,0) initial dcl 8-21 ref 114 139 160 628 628 630 762 762 1574 1584 2440 2443 2444 2446 2448 2455 2461 2467 2468 2571 2578 2578 2580 2580 2583 2583 2591 2639 2722 2734 OFF constant bit(1) initial dcl 2807 ref 113 124 158 159 185 189 190 201 202 206 207 209 296 355 377 394 411 421 433 438 462 526 552 568 595 599 638 750 770 776 914 928 965 1190 1208 1235 1245 1325 1340 1360 1574 1587 1588 1675 1696 1702 1745 1772 1938 1967 2142 2161 2329 2347 2714 2716 2720 2725 2727 2728 2729 2730 2741 ON constant bit(1) initial dcl 2808 ref 125 184 289 290 329 387 412 424 432 477 528 550 553 594 632 633 698 736 881 912 926 946 977 1186 1233 1240 1342 1399 1419 1446 1536 1560 1584 1634 1646 1689 1732 1771 1780 1883 1951 1960 1977 2048 2091 2151 2187 2205 2284 2321 2339 2589 2590 2591 2718 2722 2726 2731 2739 PAGE_FOOTER 000055 constant varying char(16) initial dcl 2809 set ref 1737* 1743* PAGE_HEADER 000050 constant varying char(16) initial dcl 2810 set ref 1818* PAGE_OVERFLOW_ERROR_CODE constant fixed bin(35,0) initial dcl 2811 ref 873 971 1639 1681 1879 1944 1982 2087 RIGHT_ALIGNMENT constant fixed bin(17,0) initial dcl 11-17 ref 926 1013 1214 ROW_COUNT 000043 constant varying char(16) initial dcl 2812 set ref 1510* 1516* ROW_FOOTER 000036 constant varying char(16) initial dcl 2813 set ref 1527* 1533* ROW_HEADER 000031 constant varying char(16) initial dcl 2814 set ref 1410* 1416* ROW_SUBCOUNT 000024 constant varying char(16) initial dcl 2815 set ref 1474* 1480* ROW_SUBTOTAL 000017 constant varying char(16) initial dcl 2816 set ref 1456* 1462* ROW_TITLES 000012 constant varying char(16) initial dcl 2817 set ref 2039* ROW_TOTAL 000005 constant varying char(16) initial dcl 2818 set ref 1492* 1498* ROW_VALUE 000000 constant varying char(16) initial dcl 2819 set ref 1436* 1443* TOKENS_ONLY_ACTIVE_STRING constant fixed bin(17,0) initial dcl 5-6 ref 714 718 728 active 2(01) based bit(1) array level 5 packed unaligned dcl 11-160 ref 1652 addr builtin function dcl 2821 ref 385 419 534 757 804 811 814 910 1006 1172 1876 1897 1949 2192 2211 2278 2326 2758 addrel builtin function dcl 2822 ref 910 2458 2464 adj_sw 3(01) based bit(1) level 3 packed unaligned dcl 7-12 set ref 912* 914* ahds_column_value_parm parameter varying char dcl 1132 ref 1127 1166 1176 1230 1235 1241 ahds_current_input_position 000702 automatic fixed bin(17,0) dcl 1133 set ref 1227* 1230 1232* 1232 1235 1235 1239* 1239 1241 1243* 1243 ahds_current_output_position 000703 automatic fixed bin(17,0) dcl 1134 set ref 1211* 1214* 1217* 1219* 1222* 1223* 1223 1230 1240 1241 1247* 1247 ahds_loop 000704 automatic fixed bin(17,0) dcl 1135 set ref 1175* 1176* 1229* ahds_number_of_chars_to_move 000705 automatic fixed bin(17,0) dcl 1136 set ref 1185* 1189* 1203* 1229 ahds_overstrike_index 000706 automatic fixed bin(17,0) dcl 1137 set ref 1170* 1172 1240 1241 ahds_still_overstriking 000707 automatic bit(1) dcl 1138 set ref 1233* 1234 1235* 1245* ahds_string_length 000710 automatic fixed bin(17,0) dcl 1139 set ref 1166* 1167 1175 1235 ahds_truncate_the_column 000711 automatic bit(1) dcl 1140 set ref 1186* 1190* 1192 1250 ahds_virtual_length 000712 automatic fixed bin(17,0) dcl 1141 set ref 1174* 1176* 1176 1178* 1178 1183 1189 1203 1214 1217 1217 1219 1222 alignment 7 based fixed bin(17,0) level 2 in structure "column_info" dcl 11-19 in procedure "rw_fr_build_page" set ref 1926* alignment 7 based fixed bin(17,0) array level 4 in structure "header_info" dcl 11-160 in procedure "rw_fr_build_page" set ref 1662* bdb_object_doing_the_back_out_parm parameter varying char dcl 173 set ref 168 177* before builtin function dcl 2824 ref 2666 2682 beginning_line_number 6 based fixed bin(17,0) array level 3 dcl 9-7 set ref 186 1350* bit_map 1 based bit level 2 in structure "page_overstrike_info_redefined" packed unaligned dcl 9-51 in procedure "rw_fr_build_page" set ref 190* 1772* 1785* 1785 2048 bit_map 1 based bit(1) array level 2 in structure "page_overstrike_info" packed unaligned dcl 9-43 in procedure "rw_fr_build_page" set ref 1208* 1240* bsb_loop 000416 automatic fixed bin(17,0) dcl 218 in procedure "backout_subcount_block" set ref 228* 229 229* 235* 236 236* bsb_loop 000430 automatic fixed bin(17,0) dcl 246 in procedure "backout_subtotal_block" set ref 256* 257 257* 263* 264 264 264 264* cfgb_column_changed_flag_parm parameter bit(1) dcl 320 set ref 313 329* 355* cfgb_column_number 000450 automatic fixed bin(17,0) dcl 321 set ref 335* 336 336 336 336 345 345 345 345 cfgb_group_info based structure level 1 unaligned dcl 322 cfgb_group_info_ptr_parm parameter pointer dcl 323 ref 313 334 335 cfgb_look_ahead_flag_parm parameter bit(1) dcl 324 ref 313 330 330 336 cfgb_loop 000451 automatic fixed bin(17,0) dcl 325 set ref 334* 335* cfo_inner_loop 000462 automatic fixed bin(17,0) dcl 363 set ref 414* 417 419 424 424 424 424 438* cfo_loop 000463 automatic fixed bin(17,0) dcl 364 set ref 381* 383 385 387 387 387 387* 408* 438* cfo_most_major_column_changed 000464 automatic bit(1) dcl 365 set ref 411* 421 432* cfo_still_within_the_group 000465 automatic bit(1) dcl 366 set ref 412* 414 438* cfpb_loop 000500 automatic fixed bin(17,0) dcl 451 set ref 464* 465 467 467 467 467* cfsb_column_changed_flag_parm parameter bit(1) dcl 491 set ref 483 526* 594* cfsb_column_number 000510 automatic fixed bin(17,0) dcl 492 set ref 533* 538 540 540 540 540 540 568 cfsb_inner_loop 000511 automatic fixed bin(17,0) dcl 493 set ref 554* 556 559 559 559 559 559 568* cfsb_level_number 000512 automatic fixed bin(17,0) dcl 494 set ref 527* 531 cfsb_level_number_parm parameter fixed bin(17,0) dcl 495 ref 483 527 cfsb_loop 000513 automatic fixed bin(17,0) dcl 496 set ref 530* 531 533 534 536* cfsb_most_major_column_changed 000514 automatic bit(1) dcl 497 set ref 550* 552* 556 cfsb_still_within_the_group 000515 automatic bit(1) dcl 498 set ref 553* 554 568* cfsb_subtotal_columns_info based structure level 1 unaligned dcl 499 cfsb_subtotal_columns_info_ptr_parm parameter pointer dcl 500 ref 483 528 534 599 600 602 604 cfsb_subtotal_info based structure level 1 unaligned dcl 501 cfsb_subtotal_info_ptr_parm parameter pointer dcl 502 ref 483 530 531 533 534 536 chars based char level 2 in structure "page_overstrike_info_redefined" packed unaligned dcl 9-51 in procedure "rw_fr_build_page" set ref 1789* 1789 chars based char(1) array level 2 in structure "page_overstrike_info" packed unaligned dcl 9-43 in procedure "rw_fr_build_page" set ref 1241* code 000100 automatic fixed bin(35,0) dcl 2826 set ref 307 2520* code_parm parameter fixed bin(35,0) dcl 97 set ref 90 307* column_index 35 based fixed bin(21,0) array level 3 dcl 12-7 ref 264 336 336 345 345 387 387 424 424 467 467 540 540 559 559 1918 1922 2399 2423 column_info based structure level 1 dcl 11-19 column_ip 000220 automatic pointer dcl 11-40 set ref 385* 387 394 419* 421 424 433 534* 595 804* 805 807 808 811 811* 811 813 814 816 818 1897* 1898 1900 1902 1902 1903 1903 1911 1913 1914 1918 1918 1918 1922 1922 1926 1926 1926 1926 1926 2192* 2194 2211* 2213 2213 2214 2267 2269 2270 2277 2278 2280 2282 2283 2283 2284 2326* 2328 2329 column_length 34 based fixed bin(21,0) array level 3 dcl 12-7 ref 264 336 336 345 345 387 387 424 424 467 467 540 540 559 559 1918 1922 2399 2423 column_name 10 based varying char(69) array level 3 dcl 12-7 set ref 2777* column_number 1 based fixed bin(17,0) array level 2 in structure "cfgb_group_info" dcl 322 in procedure "check_for_group_break" ref 335 column_number 1 based fixed bin(17,0) array level 2 in structure "group_info" dcl 11-147 in procedure "rw_fr_build_page" ref 417 419 424 424 424 424 438 556 559 559 559 559 559 568 columns 7 based structure array level 2 in structure "subcount_info" unaligned dcl 11-272 in procedure "rw_fr_build_page" columns 3 based structure array level 2 in structure "count_info" unaligned dcl 11-57 in procedure "rw_fr_build_page" columns 7 based structure array level 2 in structure "fst_subtotal_info" unaligned dcl 2125 in procedure "format_subtotals" columns 3 based structure array level 2 in structure "total_info" dcl 11-348 in procedure "rw_fr_build_page" columns 2 based structure array level 2 in structure "input_columns_info" dcl 11-182 in procedure "rw_fr_build_page" set ref 804 columns 2 based structure array level 2 in structure "output_columns_info" unaligned dcl 11-206 in procedure "rw_fr_build_page" set ref 385 419 811 columns 2 based structure array level 2 in structure "cfsb_subtotal_columns_info" unaligned dcl 499 in procedure "check_for_subtotal_break" set ref 534 columns 7 based structure array level 2 in structure "cfsb_subtotal_info" unaligned dcl 501 in procedure "check_for_subtotal_break" columns 10 based structure array level 2 in structure "table_info" dcl 12-7 in procedure "rw_fr_build_page" columns 2 based structure array level 2 in structure "ft_total_columns_info" unaligned dcl 2304 in procedure "format_totals" set ref 2326 columns 1 based bit(1) array level 2 in structure "page_break_info" packed unaligned dcl 11-210 in procedure "rw_fr_build_page" ref 465 columns 2 based structure array level 2 in structure "fst_subtotal_columns_info" unaligned dcl 2121 in procedure "format_subtotals" set ref 2192 2211 columns 7 based structure array level 2 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" columns 3 based structure array level 2 in structure "ft_total_info" unaligned dcl 2306 in procedure "format_totals" columns 2 based structure array level 2 in structure "fr_output_columns_info" unaligned dcl 1853 in procedure "format_row" set ref 1897 columns_info based structure level 1 dcl 11-42 columns_info_ptr based pointer level 2 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" ref 2477 columns_info_ptr based pointer level 2 in structure "subcount_info" dcl 11-272 in procedure "rw_fr_build_page" ref 2484 columns_info_ptr based pointer level 2 in structure "total_info" dcl 11-348 in procedure "rw_fr_build_page" ref 2491 columns_info_ptr based pointer level 2 in structure "count_info" dcl 11-57 in procedure "rw_fr_build_page" ref 2497 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 2758* 2759 2760* 2763 condition_info_version_1 constant fixed bin(17,0) initial dcl 3-30 ref 2759 continue_to_signal_ 000010 constant entry external dcl 2828 ref 2766 convert builtin function dcl 2829 ref 2640 copy builtin function dcl 2827 ref 1902 copy_of_page_info_ptr 16 based pointer level 2 dcl 11-74 ref 2503 2705 count_columns_ip 000222 automatic pointer dcl 11-55 set ref 1510* 2497* count_info based structure level 1 unaligned dcl 11-57 count_info_ptr 76 based pointer level 2 dcl 11-74 ref 2496 count_ip 000224 automatic pointer dcl 11-58 set ref 155 1510* 2364 2365 2365 2496* 2497 count_is_defined 0(20) based bit(1) level 3 packed unaligned dcl 11-74 ref 155 1374 1508 2494 count_length 15 based fixed bin(17,0) array level 3 dcl 9-7 set ref 1510* counts_ejection_in_progress 10 based bit(1) level 3 dcl 11-225 set ref 206* 1510* ctb_code_parm parameter fixed bin(35,0) dcl 2028 set ref 2026 2039* 2043 current_column_number 27 based fixed bin(17,0) level 2 dcl 11-225 set ref 1896* 1897 1934 1934 1934* 2777 current_generation_block 2 based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 11-269 in procedure "rw_fr_build_page" set ref ###@# # #x!#!#!#!#!#!# ##?#?##c@#g#g#=!#?#B# g#g#0g#H #####H#0#@#0R#"$#q!###R#O TDB#TH?#### J#$#R#!####)##R#!###R#!R#!#\R#!R#!#P#U#d #R# #d###!#######R# R##)!##\J#R#OOB#?#R###R#Z# #!####R#R#6#R#:R#R# R#R# R#R#R#R# R##"R#R#?#R#?#TR###q#d?## #R#2 #p###v#x# @#v#x#f#z##0#i# i#T!#####Ji##?##R#@##)!##J # OTقR#R# 725 728 731 739* 742 744* 747 757 772 774 eas_active_string_parm_length 000544 automatic fixed bin(21,0) dcl 660 set ref 697* 739 770 eas_active_string_type 000545 automatic fixed bin(17,0) dcl 661 set ref 710* 714* 717* 718* 722* 723* 725 728 759* eas_code 000546 automatic fixed bin(35,0) dcl 662 set ref 759* 764 764* eas_current_inner_position 000550 automatic fixed bin(21,0) dcl 664 set ref 734* 735 739 742 747 752* 752 755 eas_current_position 000547 automatic fixed bin(21,0) dcl 663 set ref 696* 704 710 714 718 725 728 731 734 768* 770 772 774 eas_left_bracket_count 000551 automatic fixed bin(17,0) dcl 665 set ref 702* 708* 708 747* 747 750 eas_left_bracket_position 000552 automatic fixed bin(21,0) dcl 666 set ref 704* 705 710 710 714 718 718 725 728 731 734 eas_looking_for_matching_right_bracket 000553 automatic bit(1) dcl 667 set ref 736* 738 750* eas_next_bracket 000554 automatic fixed bin(21,0) dcl 668 set ref 688* 689 742* 744 747 752 755 eas_result_string_parm parameter varying char dcl 669 set ref 653 691* 695* 725* 725 728* 728 731* 731 767* 767 774* 774 eas_right_bracket_count 000555 automatic fixed bin(17,0) dcl 670 set ref 703* 749* 749 750 eas_right_bracket_position 000556 automatic fixed bin(21,0) dcl 671 set ref 755* 756 768 eas_spare_string 000101 automatic varying char dcl 2834 set ref 759* 767 eas_still_evaluating 000557 automatic bit(1) dcl 672 set ref 698* 700 770* 776* eas_string based char unaligned dcl 673 set ref 759* eas_string_length 000560 automatic fixed bin(21,0) dcl 674 set ref 756* 759 759 eas_string_ptr 000562 automatic pointer dcl 675 set ref 757* 759 eas_string_start 000564 automatic fixed bin(21,0) dcl 676 set ref 735* 756 757 editing 2(02) based bit(1) array level 4 in structure "ft_total_columns_info" packed unaligned dcl 2304 in procedure "format_totals" set ref 2343* editing 2(02) based bit(1) array level 4 in structure "cfsb_subtotal_columns_info" packed unaligned dcl 499 in procedure "check_for_subtotal_break" set ref 600 editing 0(02) based bit(1) level 3 in structure "column_info" packed unaligned dcl 11-19 in procedure "rw_fr_build_page" set ref 805 1911 2213* 2267 2283 2284* editing_is_defined 0(12) based bit(1) level 3 packed unaligned dcl 11-74 ref 1362 editing_string_length 12 based fixed bin(21,0) level 2 dcl 11-19 ref 807 2269 editing_string_ptr 14 based pointer level 2 dcl 11-19 ref 808 2270 editing_string_result based char unaligned dcl 11-64 ref 809 1915 2271 editing_string_result_length 13 based fixed bin(21,0) level 2 in structure "column_info" dcl 11-19 in procedure "rw_fr_build_page" set ref 813* 816 818 1913 2277* 2280 2282 editing_string_result_length 15 based fixed bin(21,0) array level 3 in structure "cfsb_subtotal_columns_info" dcl 499 in procedure "check_for_subtotal_break" set ref 604* editing_string_result_length 15 based fixed bin(21,0) array level 3 in structure "output_columns_info" dcl 11-206 in procedure "rw_fr_build_page" set ref 604 editing_string_result_ptr 20 based pointer array level 3 in structure "output_columns_info" dcl 11-206 in procedure "rw_fr_build_page" set ref 602 editing_string_result_ptr 20 based pointer array level 3 in structure "cfsb_subtotal_columns_info" dcl 499 in procedure "check_for_subtotal_break" set ref 602* editing_string_result_ptr 16 based pointer level 2 in structure "column_info" dcl 11-19 in procedure "rw_fr_build_page" set ref 814* 1914 2278* editing_string_rl 000226 automatic fixed bin(17,0) dcl 11-65 set ref 807* 809 1913* 1915 2269* 2271 editing_string_rp 000230 automatic pointer dcl 11-66 set ref 808* 809 1914* 1915 2270* 2271 editing_strings_next_available_byte 4 based fixed bin(21,0) level 2 dcl 11-74 ref 801 editing_strings_next_byte 000232 automatic fixed bin(21,0) dcl 11-68 set ref 801* 814 816 818* 818 editing_strings_temp_seg based char unaligned dcl 11-70 set ref 816* editing_strings_temp_seg_as_an_array based char(1) array unaligned dcl 11-71 set ref 814 editing_strings_temp_seg_ptr based pointer level 2 dcl 10-7 ref 2467 editing_strings_tsp 000234 automatic pointer dcl 11-72 set ref 814 816 2467* ees_loop 000574 automatic fixed bin(17,0) dcl 788 set ref 803* 804* error_table_$badcall 000012 external static fixed bin(35,0) dcl 2835 set ref 1017* error_table_$end_of_info 000014 external static fixed bin(35,0) dcl 2836 ref 2586 error_table_$no_record 000016 external static fixed bin(35,0) dcl 2837 ref 2643 2656 2669 2685 error_table_$recoverable_error 000020 external static fixed bin(35,0) dcl 2838 ref 918 error_table_$unbalanced_brackets 000022 external static fixed bin(35,0) dcl 2839 set ref 705* 739* 744* 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 840 set ref 926* 928* 956 1211 fc_alignment_mode_parm parameter fixed bin(17,0) dcl 841 set ref 827 884 912 926 926 1009 1011 1013 1015 1017* 1214 fc_code 000605 automatic fixed bin(35,0) dcl 842 set ref 916* 918 918 918* fc_code_parm parameter fixed bin(35,0) dcl 843 set ref 827 870* 873* 971* fc_column_value_parm parameter varying char dcl 844 set ref 827 884 884 888* 909 910 fc_current_line_on_page 000606 automatic fixed bin(17,0) dcl 845 set ref 876* 878 880 881 961 968* 968 969 974 976 977 1006 1170 fc_current_position 000607 automatic fixed bin(17,0) dcl 846 set ref 947* 950 951 953 958 961 964* 964 965 fc_decimal_position_parm parameter fixed bin(17,0) dcl 847 ref 827 1053 1055 fc_fill_parm parameter bit(1) unaligned dcl 848 ref 827 930 1181 1250 fc_line_number_parm parameter fixed bin(17,0) dcl 849 ref 827 871 876 1286 1291 1295 fc_new_line_position 000610 automatic fixed bin(17,0) dcl 850 set ref 950* 951 953 958 961 961 964 fc_output_column based char unaligned dcl 851 set ref 1041* 1059* 1070* 1073* 1077* 1085* 1088* 1091* 1106* 1118* 1195* 1197* 1230* 1250* fc_output_column_ptr 000612 automatic pointer dcl 852 set ref 1006* 1041 1059 1070 1073 1077 1085 1088 1091 1106 1118 1172* 1195 1197 1230 1250 fc_output_position_parm parameter fixed bin(17,0) dcl 854 ref 827 961 1006 1170 1286 1291 1295 fc_output_width_parm parameter fixed bin(17,0) dcl 853 ref 827 884 911 1032 1032 1034 1037 1041 1053 1053 1057 1059 1070 1073 1077 1085 1088 1091 1106 1118 1118 1183 1185 1192 1195 1195 1195 1197 1214 1217 1217 1219 1222 1230 1250 1250 1273 1288 1291 1291 1295 1295 fc_returned_string_length 000614 automatic fixed bin(21,0) dcl 855 set ref 916* 921 924 fc_spare_string 000101 automatic varying char dcl 2841 set ref 953* 954* 958* 959* 1277* 1278* 1278 1279 1281* 1285 1286 fc_spare_string_length 000615 automatic fixed bin(17,0) dcl 856 set ref 1285* 1286 fc_still_filling 000616 automatic bit(1) dcl 857 set ref 946* 949 965* fc_string_end 000617 automatic fixed bin(17,0) dcl 858 set ref 1273* 1274 1277 fc_template_parm parameter char unaligned dcl 859 ref 827 880 976 fdb_code 000732 automatic fixed bin(35,0) dcl 1307 set ref 1390* 1394 1410* 1414 1436* 1441 1456* 1460 1474* 1478 1492* 1496 1510* 1514 1527* 1531 1552* 1555 fdb_column_changed_flag 000733 automatic bit(1) dcl 1308 set ref 1386* 1388 1548* 1550 fh_code_parm parameter fixed bin(35,0) dcl 1609 set ref 1597 1633* 1639* 1662* 1667 1681* fh_current_line_number 000742 automatic fixed bin(17,0) dcl 1607 set ref 1631* 1637 1645 1646 1662* 1675 1675 1684* 1684 fh_current_line_number_parm parameter fixed bin(17,0) dcl 1608 set ref 1597 1631 1692 1700* 1700 1701 fh_executing_object_parm parameter varying char dcl 1610 ref 1597 1635 fh_header_info_ptr_parm parameter pointer dcl 1611 ref 1597 1630 fh_loop 000743 automatic fixed bin(17,0) dcl 1612 set ref 1692* 1694* fh_next_line_number 000744 automatic fixed bin(17,0) dcl 1613 set ref 1675* 1678* 1679 1684 fh_number_of_lines_used 000745 automatic fixed bin(17,0) dcl 1614 set ref 1690* 1694* 1694 1699 1700 fh_number_of_lines_used_parm parameter fixed bin(17,0) dcl 1615 set ref 1597 1632* 1699* fh_remaining_lines_on_page_parm parameter fixed bin(17,0) dcl 1616 set ref 1597 1701* fh_still_counting_lines 000746 automatic bit(1) dcl 1617 set ref 1689* 1692 1696* find_condition_info_ 000024 constant entry external dcl 2842 ref 2760 first_row_of_report 1 based bit(1) level 3 dcl 11-225 set ref 330 375 1587* 1815 2012 2718* 2720* first_row_on_page 3 based bit(1) level 3 dcl 11-225 set ref 375 1588* 2726* first_time_through_the_detail_block_loop 000101 automatic bit(1) dcl 2843 set ref 289* 293 296* flags based structure level 2 in structure "column_info" dcl 11-19 in procedure "rw_fr_build_page" flags 2 based structure array level 3 in structure "output_columns_info" packed unaligned dcl 11-206 in procedure "rw_fr_build_page" flags 2 based structure array level 3 in structure "ft_total_columns_info" packed unaligned dcl 2304 in procedure "format_totals" flags 2 based structure array level 3 in structure "cfsb_subtotal_columns_info" packed unaligned dcl 499 in procedure "check_for_subtotal_break" flags 7 based structure array level 3 in structure "cfsb_subtotal_info" packed unaligned dcl 501 in procedure "check_for_subtotal_break" flags based structure level 2 in structure "format_rmeta.forum ؋hH{CvZaZhGCOS8_to_UNIX_migration.forum {CM;>udd>Multics>Hinatsu>meetings>GCOS8_to_UNIX_migration.forum9gcos_mig.forum {&hGozpah}Technical_Writing.forum hRy6Ÿz a~2r9*@h*@hphtw.forum hhH#D a ^jokes.forum #0>user_dir_dir>Multics>Mabey>meetings>jokes.forum9<H1LDMϝafinance.forum 1L.>udd>Multics>Leskiw>meetings_dir>finance.forum9p&]6DDbab<cp6_issues.forum ]6>udd>cp6>mtgs>cp6_issues.forum9D<ycp6i.forum ]6<&]6Dxapcp6_issues_log.forum ]6">udd>cp6>mtgs>cp6_issues_log.forum9xpcp6il.forum ]6p&Dr*aSr&d.forum !>udd>CDC>Smith>meetings>r&d.forum9Research.forum  &EN-aSEI.forum >udd>m>an>meetings>SEI.forum9 sei.forum xHMF^JTaT process_handbook.forum M7>user_dir_dir>Multics>ANeal>mtgs>process_handbook.forum9 pmhb.forum Mjm@hxest.forum e &eGAUjajxnEstimation.forum e#>udd>m>Wright>mtgs>Estimation.forum9x&?GaBMultics_change_log.forum ?$>udd>m>mtgs>Multics_change_log.forum9change.forum ?(HOGjajGCOS_risk_tracking.forum O2>udd>Multics>Elliott>mtgs>GCOS_risk_tracking.forum9<grt.forum O~H H(0pap(sei_org_roles.forum 0>user_dir_dir>Multics>Collin>sei_org_roles.forum90(Sorg_roles.forum (&ߑH^a~dMCR_Packet.forum ߑ!>udd>m>mcrb>mtgs>MCR_Packet.forum9~bmcr.forum ߑ~&ߑH2aMCR_Board.forum ߑ >udd>m>mcrb>mtgs>MCR_Board.forum9smcrb.forum ߑ(&ߑHVa :MCR_Procedures.forum ߑ%>udd 1347 1347 1347 1347 1348 1348 1350 1350 1390 1390 1410 1410 1436 1436 1456 1456 1474 1474 1492 1492 1510 1510 1527 1527 1552 1552 1737 1768 1818 2039 2048 2055 2058 2095 2508* 2673* 2673 2710 2711 2712 2713 2714 fpf_beginning_line_number 000766 automatic fixed bin(17,0) dcl 1710 set ref 1736* 1767 fpf_code 000767 automatic fixed bin(35,0) dcl 1711 set ref 1737* 1740 fpf_loop 000770 automatic fixed bin(17,0) dcl 1712 set ref 1767* 1768 1770 1771 1772 1778 1778 1780 1783 1784* fpf_overstrike_index_1 000771 automatic fixed bin(17,0) dcl 1713 set ref 1783* 1785 1789 fpf_overstrike_index_2 000772 automatic fixed bin(17,0) dcl 1714 set ref 1784* 1785 1789 fpf_overstruck_page 000773 automatic bit(1) dcl 1715 set ref 1766* 1772 1781 fpf_page_footer_doesnt_fit 000774 automatic bit(1) dcl 1716 set ref 1732* 1734 1745* fph_code 001004 automatic fixed bin(35,0) dcl 1808 set ref 1818* 1821 fr_code_parm parameter fixed bin(35,0) dcl 1843 set ref 1830 1873* 1879* 1903* 1906 1926* 1930 1944* 1982* fr_current_detail_line 001014 automatic fixed bin(17,0) dcl 1844 set ref 1875* 1876 1948* 1948 1949 fr_current_line_number 001015 automatic fixed bin(17,0) dcl 1845 set ref 1871* 1877 1882 1883 1903* 1926 1938 1938 1947* 1947 1950 1951 1972* 1974 1976 1977 1978* 1978 fr_current_line_number_parm parameter fixed bin(17,0) dcl 1842 set ref 1830 1871 1963 1972 1989* 1989 1990 fr_executing_object_parm parameter varying char dcl 1846 ref 1830 1868 fr_loop 001016 automatic fixed bin(17,0) dcl 1847 set ref 1963* 1965* 1973* fr_next_line_number 001017 automatic fixed bin(17,0) dcl 1848 set ref 1938* 1941* 1942 1947 fr_number_of_blank_lines_parm parameter fixed bin(17,0) dcl 1849 ref 1830 1970 1973 fr_number_of_lines_used 001020 automatic fixed bin(17,0) dcl 1850 set ref 1961* 1965* 1965 1972 1979* 1979 1988 1989 fr_number_of_lines_used_by_prefix 001021 automatic fixed bin(17,0) dcl 1851 set ref 1908* 1910* 1926 fr_number_of_lines_used_parm parameter fixed bin(17,0) dcl 1852 set ref 1830 1872* 1988* fr_output_columns_info based structure level 1 unaligned dcl 1853 fr_output_columns_info_ptr 001022 automatic pointer dcl 1854 set ref 1869* 1896 1897 1934 1934 1934 fr_output_columns_info_ptr_parm parameter pointer dcl 1855 ref 1830 1869 fr_remaining_lines_on_page_parm parameter fixed bin(17,0) dcl 1856 set ref 1830 1990* fr_row_template_info based structure level 1 unaligned dcl 1857 fr_row_template_info_ptr 001024 automatic pointer dcl 1858 set ref 1870* 1876 1949 fr_row_template_info_ptr_parm parameter pointer dcl 1859 ref 1830 1870 fr_spare_string 000102 automatic varying char dcl 2846 set ref 1902* 1903* fr_still_counting_lines 001026 automatic bit(1) dcl 1860 set ref 1960* 1963 1967* fst_caller_parm parameter varying char dcl 2116 set ref 2105 2200* fst_code_parm parameter fixed bin(35,0) dcl 2117 set ref 2105 2139* 2152* 2154 fst_number_of_lines_used 001076 automatic fixed bin(17,0) dcl 2118 set ref 2152* 2156 fst_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2119 set ref 2105 2140* 2160* fst_some_column_changed 001077 automatic bit(1) dcl 2120 set ref 2145* 2147 fst_subtotal_columns_info based structure level 1 unaligned dcl 2121 fst_subtotal_columns_info_ptr_parm parameter pointer dcl 2122 set ref 2105 2145* 2192 2200* 2211 fst_subtotal_generation_info based structure level 1 unaligned dcl 2123 fst_subtotal_generation_info_ptr_parm parameter pointer dcl 2124 ref 2105 2231 2231 2231 2235 2236 2236 fst_subtotal_info based structure level 1 unaligned dcl 2125 fst_subtotal_info_ptr_parm parameter pointer dcl 2126 set ref 2105 2144 2144 2145* 2145 2152 2189 2190 2192 2194 2194 2208 2209 2211 2214 2214 2236 fst_subtotals_ejection_in_progress_parm parameter bit(1) dcl 2127 set ref 2105 2161* 2187* fst_subtotals_have_been_backed_up 001100 automatic bit(1) dcl 2128 set ref 2142* 2149 2151* fst_total_lines_used 001101 automatic fixed bin(17,0) dcl 2129 set ref 2141* 2156* 2156 2160 ft_caller_parm parameter varying char dcl 2300 set ref 2290 2334* ft_code_parm parameter fixed bin(35,0) dcl 2301 set ref 2290 2319* 2334* 2339 ft_loop 001146 automatic fixed bin(17,0) dcl 2302 set ref 2325* 2326 2330 2330* 2342* 2343 2343* ft_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2303 set ref 2290 2320* 2334* ft_total_columns_info based structure level 1 unaligned dcl 2304 ft_total_columns_info_ptr_parm parameter pointer dcl 2305 set ref 2290 2326 2334* 2342 2343 2343 ft_total_info based structure level 1 unaligned dcl 2306 ft_total_info_ptr_parm parameter pointer dcl 2307 ref 2290 2325 2326 2330 2330 ft_totals_ejection_in_progress_parm parameter bit(1) dcl 2308 set ref 2290 2321* 2347* ftb_code 001044 automatic fixed bin(35,0) dcl 1998 set ref 2015* 2017* 2019 ftb_current_line_number 001045 automatic fixed bin(17,0) dcl 1999 set ref 2038* 2048 2059 2060* 2060 2082* 2085 2090 2091 2092* 2092 ftb_loop 001046 automatic fixed bin(17,0) dcl 2000 set ref 2058* 2059* 2084* 2090* ftosicf_ioa_string_parm parameter varying char dcl 2253 set ref 2247 2274* ftosicf_length_doesnt_matter 001136 automatic fixed bin(21,0) dcl 2254 set ref 2274* ftosicf_subtotal_or_total_parm parameter float dec(59) dcl 2255 set ref 2247 2274* gc_loop 001160 automatic fixed bin(17,0) dcl 2355 set ref 2364* 2365 2365* generations 3 based structure array level 2 in structure "subtotal_generation_info" dcl 11-279 in procedure "rw_fr_build_page" generations 3 based structure array level 2 in structure "fst_subtotal_generation_info" unaligned dcl 2123 in procedure "format_subtotals" generations 3 based structure array level 2 in structure "subcount_generation_info" unaligned dcl 11-269 in procedure "rw_fr_build_page" generic_template based char unaligned dcl 11-142 set ref 1645 1662* 1770 1976 generic_template_length 000240 automatic fixed bin(17,0) dcl 11-143 set ref 1645 1662 1662 1770 1976 2511* generic_template_ptr 102 based pointer level 2 dcl 11-74 ref 2512 generic_tp 000242 automatic pointer dcl 11-144 set ref 1645 1662 1770 1976 2512* group_column 7(01) based bit(1) array level 4 packed unaligned dcl 501 ref 536 group_footer_info_ptr 36 based pointer level 2 dcl 11-74 set ref 1552* group_footer_is_defined 0(09) based bit(1) level 3 packed unaligned dcl 11-74 ref 1545 group_footer_length 17 based fixed bin(17,0) array level 3 dcl 9-7 set ref 1552* group_footer_trigger_info_ptr 42 based pointer level 2 dcl 11-74 set ref 1548* group_footer_trigger_is_defined 0(10) based bit(1) level 3 packed unaligned dcl 11-74 ref 1545 group_header_info_ptr 34 based pointer level 2 dcl 11-74 set ref 1390* group_header_is_defined 0(03) based bit(1) level 3 packed unaligned dcl 11-74 ref 1383 group_header_length 7 based fixed bin(17,0) array level 3 dcl 9-7 set ref 1390* group_header_trigger_info_ptr 40 based pointer level 2 dcl 11-74 set ref 1386* group_header_trigger_is_defined 0(04) based bit(1) level 3 packed unaligned dcl 11-74 ref 1383 group_info based structure level 1 dcl 11-147 group_info_ptr 62 based pointer level 2 dcl 11-74 ref 2470 group_ip 000244 automatic pointer dcl 11-152 set ref 414 417 419 424 424 424 424 438 554 556 559 559 559 559 559 568 2470* grouping_columns based fixed bin(17,0) array level 2 dcl 11-193 ref 438 gs_code_parm parameter fixed bin(35,0) dcl 2172 set ref 2165 2200* 2205 gs_level_number_parm parameter fixed bin(17,0) dcl 2173 ref 2165 2190 2209 gs_loop 001200 automatic fixed bin(17,0) dcl 2392 in procedure "gather_subtotals" set ref 2398* 2399 2399 2399 2399* gs_loop 001114 automatic fixed bin(17,0) dcl 2174 in procedure "generate_subtotals" set ref 2189* 2190 2192 2194 2194* 2208* 2209 2211 2214 2214* gs_loop 001170 automatic fixed bin(17,0) dcl 2375 in procedure "gather_subcounts" set ref 2381* 2382 2382* gs_number_of_lines_used_parm parameter fixed bin(17,0) dcl 2175 set ref 2165 2200* gt_loop 001210 automatic fixed bin(17,0) dcl 2412 set ref 2422* 2423 2423 2423 2423* header based structure level 2 dcl 14-7 header_being_evaluated 11 based bit(1) level 3 dcl 11-225 set ref 1634* 1702* 2730* 2771 header_info based structure level 1 dcl 11-160 header_ip 000252 automatic pointer dcl 11-176 set ref 1630* 1643 1648 1650 1652 1654 1654 1659 1659 1662 1662 1662 1673 headers_next_available_byte 5 based fixed bin(21,0) level 2 dcl 11-74 ref 2186 2323 headers_next_byte 000246 automatic fixed bin(21,0) dcl 11-154 set ref 2186* 2278 2280 2282* 2282 2323* headers_temp_seg based char unaligned dcl 11-156 set ref 1654 1659 2280* headers_temp_seg_as_an_array based char(1) array unaligned dcl 11-157 set ref 2278 headers_temp_seg_ptr based pointer level 2 dcl 10-7 ref 2468 headers_tsp 000250 automatic pointer dcl 11-158 set ref 1654 1659 2278 2280 2468* highest_level 5 based fixed bin(17,0) level 2 dcl 2125 ref 2144 highest_row_formatted 33 based fixed bin(17,0) level 2 dcl 11-225 set ref 140* 1337 1339* 2739 index 3 based fixed bin(21,0) array level 4 in structure "header_info" dcl 11-160 in procedure "rw_fr_build_page" ref 1654 1659 index builtin function dcl 2848 in procedure "rw_fr_build_page" ref 638 704 950 951 1060 1675 1938 2048 info_ptr 14 based pointer level 2 in structure "condition_info" dcl 3-14 in procedure "rw_fr_build_page" ref 2763 info_ptr 116 based pointer level 2 in structure "sub_error_info" dcl 14-7 in procedure "rw_fr_build_page" ref 2770 info_string 3 based varying char(256) level 3 dcl 14-7 set ref 2771* 2777* input_column 10 based fixed bin(17,0) array level 3 in structure "cfsb_subtotal_info" dcl 501 in procedure "check_for_subtotal_break" ref 534 input_column 4 based fixed bin(17,0) array level 3 in structure "output_columns_info" dcl 11-206 in procedure "rw_fr_build_page" set ref 2777 input_column 10 based fixed bin(17,0) array level 3 in structure "fst_subtotal_info" dcl 2125 in procedure "format_subtotals" ref 2192 2211 input_column 2 based fixed bin(17,0) level 2 in structure "column_info" dcl 11-19 in procedure "rw_fr_build_page" ref 1918 1918 1922 1922 input_column 3 based fixed bin(17,0) array level 3 in structure "ft_total_info" dcl 2306 in procedure "format_totals" ref 2326 input_column 10 based fixed bin(17,0) array level 3 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" ref 264 264 2399 2399 input_column 3 based fixed bin(17,0) array level 3 in structure "total_info" dcl 11-348 in procedure "rw_fr_build_page" ref 2423 2423 input_columns_info based structure level 1 dcl 11-182 input_columns_info_ptr 54 based pointer level 2 dcl 11-74 ref 2451 input_columns_ip 000254 automatic pointer dcl 11-183 set ref 383 385 417 419 464 534 538 540 556 559 803 804 2192 2211 2326 2451* input_columns_op 000256 automatic pointer dcl 11-186 set ref 804 2452* input_columns_order based fixed bin(17,0) array dcl 11-185 ref 804 input_columns_order_ptr 56 based pointer level 2 dcl 11-74 ref 2452 input_string based varying char dcl 2849 set ref 809* 810* 1657* 1659* 1662* 1915* 1918* 1922* 1926* 2271* 2272* 2457* input_string_length 000102 automatic fixed bin(21,0) dcl 2850 set ref 809 810 1657 1659 1662 1915 1918 1922 1926 2271 2272 2456* 2457 input_string_non_varying based char unaligned dcl 2852 set ref 916* input_string_non_varying_length 000106 automatic fixed bin(21,0) dcl 2853 set ref 909* 916 916 2459* input_string_non_varying_ptr 000110 automatic pointer dcl 2854 set ref 910* 916 2458* input_string_ptr 000104 automatic pointer dcl 2851 set ref 809 810 1657 1659 1662 1915 1918 1922 1926 2271 2272 2455* 2457 2458 input_string_temp_seg_ptr based pointer level 2 dcl 10-7 ref 2455 ioa_$rsnnl 000030 constant entry external dcl 2855 ref 2274 ioa_string 13 based varying char(5) array level 3 in structure "fst_subtotal_info" dcl 2125 in procedure "format_subtotals" set ref 2194* ioa_string 4 based varying char(5) array level 3 in structure "ft_total_info" dcl 2306 in procedure "format_totals" set ref 2330* iox_$seek_key 000034 constant entry external dcl 2857 ref 2641 2654 2667 2683 iox_$write_record 000032 constant entry external dcl 2856 ref 2647 2660 2673 2689 last_page_number 46 based fixed bin(17,0) level 2 dcl 11-225 set ref 138* last_pass 14 based bit(1) level 3 dcl 11-225 set ref 113* 125* last_row_number 45 based fixed bin(35,0) level 2 dcl 11-225 set ref 139* last_row_of_report 2 based bit(1) level 3 dcl 11-225 set ref 185* 330 538 550 1490 1508 1584* 1729 2591* 2614 2722* 2725* length 4 based fixed bin(21,0) array level 4 in structure "header_info" dcl 11-160 in procedure "rw_fr_build_page" ref 1654 1659 length builtin function dcl 2859 in procedure "rw_fr_build_page" ref 697 813 884 909 1030 1052 1066 1106 1118 1166 1285 1900 2277 2517 length 1 based fixed bin(17,0) level 2 in structure "page_info" dcl 9-29 in procedure "rw_fr_build_page" set ref 638* 639 646 2514 2570 2738 length_word based fixed bin(35,0) level 2 dcl 2874 set ref 924* 965 1273 1288 level 12 based fixed bin(17,0) array level 3 in structure "cfsb_subtotal_info" dcl 501 in procedure "check_for_subtotal_break" ref 531 level 12 based fixed bin(17,0) array level 3 in structure "fst_subtotal_info" dcl 2125 in procedure "format_subtotals" ref 2190 2209 line_length 1 based fixed bin(17,0) level 2 in structure "title_block_info" dcl 11-335 in procedure "rw_fr_build_page" set ref 2056* 2059 2059 2059 2090 2090 2090 line_length 2 based fixed bin(17,0) level 2 in structure "format_document_options" dcl 7-12 in procedure "rw_fr_build_page" set ref 911* lines 2 based char array level 2 in structure "title_block_info" dcl 11-335 in procedure "rw_fr_build_page" set ref 2059* 2090 lines 2 based structure array level 2 in structure "header_info" dcl 11-160 in procedure "rw_fr_build_page" local_condition_info 000112 automatic structure level 1 unaligned dcl 2860 set ref 2758 ltrim builtin function dcl 2861 ref 1918 2640 maximum_number_of_detail_blocks based fixed bin(17,0) level 2 dcl 9-7 ref 2673 2714 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 11-269 in procedure "rw_fr_build_page" ref 225 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "fst_subtotal_generation_info" dcl 2123 in procedure "format_subtotals" ref 2231 maximum_number_of_generation_blocks based fixed bin(17,0) level 2 in structure "subtotal_generation_info" dcl 11-279 in procedure "rw_fr_build_page" ref 253 maximum_number_of_parts 1 based fixed bin(17,0) level 2 dcl 11-160 ref 1648 1650 1650 1652 1652 1654 1654 1654 1654 1659 1659 1659 1659 1662 1662 1662 1662 1662 1662 maximum_number_of_ptrs_per_segment 1 based fixed bin(21,0) level 2 dcl 13-26 ref 2538 2540 2543 2544 maximum_number_of_single_columns based fixed bin(17,0) level 2 dcl 11-193 ref 438 maximum_segment_size 000260 automatic fixed bin(21,0) dcl 11-188 set ref 816 1654 1659 2280 2441* 2456 2462 mbos_loop 001126 automatic fixed bin(17,0) dcl 2225 set ref 2235* 2236 2236* min builtin function dcl 2863 ref 1273 mod builtin function dcl 2864 ref 225 253 2231 2540 2543 mp_row_number_parm parameter fixed bin(35,0) dcl 2528 ref 2526 2538 2540 2543 mp_row_ptr_index 001227 automatic fixed bin(21,0) dcl 2530 set ref 2543* 2544 2544* 2549 mp_segment_ptr_index 001226 automatic fixed bin(21,0) dcl 2529 set ref 2538* 2540* 2540 2547 mra_code 001236 automatic fixed bin(35,0) dcl 2555 set ref 2575* 2586 2586 2594* mra_number_of_rows_needed 001237 automatic fixed bin(35,0) dcl 2556 set ref 2570* 2571 2575* 2594* mra_number_of_rows_retrieved 001240 automatic fixed bin(35,0) dcl 2557 set ref 2575* 2583 2583 multi_pass_mode 0(09) based bit(1) level 3 packed unaligned dcl 10-7 set ref 107 124* 303 name 106 based char(32) level 2 dcl 14-7 ref 2764 next_row_ptr 22 based pointer level 2 dcl 11-225 set ref 136* 193* 264 336 467 540 559 2610 2614* 2616* next_row_value based char unaligned dcl 11-191 ref 264 336 467 540 559 no_of_formatted_pages based fixed bin(21,0) level 2 dcl 10-7 set ref 160* 628* 628 2639 2734 no_of_rows_retrieved based fixed bin(35,0) level 2 dcl 10-7 set ref 139 630 1574 1584 2571 2583* 2583 2591 2722 null builtin function dcl 2866 ref 10-61 134 135 190 195 759 759 1205 1766 2015 2048 2505 2611 2614 2679 2707 2760 2760 number_of_bits_or_chars based fixed bin(21,0) level 2 in structure "page_overstrike_info" dcl 9-43 in procedure "rw_fr_build_page" ref 1208 1241 2689 2689 number_of_bits_or_chars based fixed bin(21,0) level 2 in structure "page_overstrike_info_redefined" dcl 9-51 in procedure "rw_fr_build_page" ref 190 1772 1785 1785 1789 1789 1789 1789 2048 number_of_columns based fixed bin(17,0) level 2 in structure "input_columns_info" dcl 11-182 in procedure "rw_fr_build_page" ref 464 803 number_of_columns based fixed bin(17,0) level 2 in structure "ft_total_columns_info" dcl 2304 in procedure "format_totals" ref 2342 number_of_columns based fixed bin(17,0) level 2 in structure "columns_info" dcl 11-42 in procedure "rw_fr_build_page" ref 377 528 number_of_columns based fixed bin(17,0) level 2 in structure "fr_output_columns_info" dcl 1853 in procedure "format_row" ref 1896 1934 number_of_columns_to_group based fixed bin(17,0) level 2 in structure "group_info" dcl 11-147 in procedure "rw_fr_build_page" ref 414 554 number_of_columns_to_group based fixed bin(17,0) level 2 in structure "cfgb_group_info" dcl 322 in procedure "check_for_group_break" ref 334 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subcount_info" dcl 11-272 in procedure "rw_fr_build_page" ref 235 2381 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "fst_subtotal_info" dcl 2125 in procedure "format_subtotals" ref 2189 2208 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" ref 144 152 263 2398 number_of_columns_to_subtotal 4 based fixed bin(17,0) level 2 in structure "cfsb_subtotal_info" dcl 501 in procedure "check_for_subtotal_break" ref 530 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "count_info" dcl 11-57 in procedure "rw_fr_build_page" ref 2364 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "ft_total_info" dcl 2306 in procedure "format_totals" ref 2325 number_of_columns_to_total 2 based fixed bin(17,0) level 2 in structure "total_info" dcl 11-348 in procedure "rw_fr_build_page" ref 147 155 2422 number_of_detail_blocks 4 based fixed bin(17,0) level 2 dcl 9-7 set ref 186 210* 210 222 250 1346* 1346 1347 1347 1347 1347 1347 1347 1347 1347 1347 1347 1347 1348 1350 1390 1410 1436 1456 1474 1492 1510 1527 1552 2713* number_of_formatted_rows 3 based fixed bin(35,0) level 2 dcl 11-74 set ref 162* 625* 625 630 2718 2721 number_of_grouping_columns 3 based fixed bin(17,0) level 2 dcl 11-193 ref 408 408 number_of_lines based fixed bin(17,0) level 2 in structure "title_block_info" dcl 11-335 in procedure "rw_fr_build_page" set ref 2056* 2084 2095 2096 number_of_lines based fixed bin(17,0) level 2 in structure "header_info" dcl 11-160 in procedure "rw_fr_build_page" ref 1643 1673 number_of_lines_needed_for_detail_block 36 based fixed bin(17,0) level 2 dcl 11-225 ref 1315 1315 1574 1574 number_of_lines_needed_for_page_footer 42 based fixed bin(17,0) level 2 dcl 11-225 ref 1315 1574 number_of_passes based fixed bin(17,0) level 2 dcl 10-7 ref 114 number_of_single_columns 2 based fixed bin(17,0) level 2 dcl 11-193 ref 381 381 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "subtotal_generation_info" dcl 11-279 in procedure "rw_fr_build_page" ref 229 256 257 2236 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "subcount_generation_info" dcl 11-269 in procedure "rw_fr_build_page" ref 228 number_of_subtotals 1 based fixed bin(17,0) level 2 in structure "fst_subtotal_generation_info" dcl 2123 in procedure "format_subtotals" ref 2235 object_being_evaluated 47 based varying char(16) level 2 dcl 11-225 set ref 1635* 1868* 2771* 2777* outline 2(01) based bit(1) array level 4 in structure "cfsb_subtotal_columns_info" packed unaligned l&bqRu>AV0022 TJTНJFAVtape_mult_ CfRvUAV0022 T T AVtape_mult_ ,z/Rv AV0022 Tp\XTpAVtape_mult_ < RwAV0022 TWT AVtape_mult_ ?9RxFAV0022 TE_+TAVtape_mult_ ]$9RxAV0095 T!fT!9UAV_tape_mult_ Y!4RxAV0084 T#o,yT#: XAVTtape_mult_ EHRxTAV0035 T'!T'AV#tape_mult_ f cRx AV0035 TBA|TB AV#tape_mult_ &3RxuAV0035 T]XT]r|AV#tape_mult_ 85Rx6AV0035 TxcTx AV#tape_mult_ 27RyKAV0035 T:/T[AV#tape_mult_ 76RypAV0035 THTVWAV#tape_mult_ *5Ry"AV0140 TȈ!}TAVtape_mult_ ,5RyAV0140 T+T2AVtape_mult_ 25Ry_AV0100 T8oTXAVdtape_mult_ .1qRz\AV0115 TTEk{AVstape_mult_ 07RzhAV0115 Tg2ThmAVstape_mult_ 55R{ AV0115 Tkg)TAVstape_mult_ +-cR|"AV0235 TNOTqAVtape_mult_ 7(R|dAV0235 TY[TYAVtape_mult_ ;9R}AV0235 TAhMTsZAVtape_mult_ S$8R}AV0067 T|T:fAVCtape_mult_ EX+R}_AV0101 T/TTlaAVetape_mult_ D fR} AV0101 T0TXAVetape_mult_ -/R}xAV0101 TޔTAVetape_mult_ -4R}~AV0066 TBT|AVLtape_mult_ Fi/QJm<AV0234 TYTHAVtape_mult_ EVQOzAV0213 Ti*TȿAVtape_mult_ B]FQAV0002 TTDAVtape_mult_ COQ/AV0153 TLP@TLT+AVtape_mult_ O<sWQAV0226 T#5TJAVtape_mult_ J<QQ{AV0155 T\BTAVtape_mult_ @M2QAAV0092 Tij߹Tij-AV\tape_mult_ OkQAV0136 T5JT5XAVtape_mult_ G`Q;AV0004 T@($AVOtape_mult_ azWsREAV0062 Tl3TlSPAV>tape_mult_ PUR AV0112 TUx]TNJAVptape_mult_ z3hR AV0040 TWT ĀAV(tape_mult_ lR AV0215 T TLAVtape_mult_  y!~RAV0172 Tl$ȾTlAVtape_mult_ Nw4RAV0187 TihTifAVtape_mult_ nYtRAV0240 TTAVtape_mult_ KXuR'AV0151 T !T AVtape_mult_ Q\R-AV0060 T kT wAVT>r(AV tape_mult_ 75TRPdAV0012 TY+TYAV tape_mult_ /1cRPπAV0012 Tt8/TtAV tape_mult_ 25TRQ; AV0012 T3TV!AV tape_mult_  RQ; AV0133 T|!T iAVtape_mult_ ?0YRQAV0133 TqT*AVtape_mult_ @?xRQQAV0133 T)FTsAVtape_mult_ 51`RQrAV0133 TܞTAVtape_mult_ )t4^RQyAV0146 TTD,EAVtape_mult_ %t-aRR8AV0146 T4eT5:RT=AV0146 Tv=Tw hAVtape subtotal 16 based float dec(59) array level 3 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" set ref 144* 257* 264* 264 2399* 2399 subtotal_columns_info based structure level 1 unaligned dcl 11-275 subtotal_columns_ip 000302 automatic pointer dcl 11-276 set ref 1456* 2477* subtotal_generation_info based structure level 1 dcl 11-279 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subtotal_info" dcl 11-291 in procedure "rw_fr_build_page" ref 2478 subtotal_generation_info_ptr 2 based pointer level 2 in structure "subcount_info" dcl 11-272 in procedure "rw_fr_build_page" ref 2485 subtotal_generation_ip 000304 automatic pointer dcl 11-289 set ref 145 253 253 253 256 257 257 1456* 2478* subtotal_info based structure level 1 dcl 11-291 subtotal_info_ptr 70 based pointer level 2 dcl 11-74 ref 2476 subtotal_ip 000306 automatic pointer dcl 11-310 set ref 144 257 263 264 264 264 264 1456* 2398 2399 2399 2399 2399 2476* 2477 2478 subtotal_is_defined 0(17) based bit(1) level 3 packed unaligned dcl 11-74 ref 142 199 1365 1454 2474 subtotal_length 12 based fixed bin(17,0) array level 3 dcl 9-7 set ref 250 1456* subtotals 3 based float dec(59) array level 3 in structure "subcount_generation_info" dcl 11-269 in procedure "rw_fr_build_page" ref 229 subtotals 3 based float dec(59) array level 3 in structure "fst_subtotal_generation_info" dcl 2123 in procedure "format_subtotals" set ref 2236* subtotals 3 based float dec(59) array level 3 in structure "subtotal_generation_info" dcl 11-279 in procedure "rw_fr_build_page" ref 257 subtotals_ejection_in_progress 5 based bit(1) level 3 dcl 11-225 set ref 202* 250 1456* 2728* switches 3 based structure level 2 dcl 7-12 sys_info$max_seg_size 000050 external static fixed bin(35,0) dcl 2892 ref 2441 table_control_info based structure level 1 dcl 13-11 table_control_info_ptr based pointer level 2 dcl 10-7 ref 2448 table_control_ip 000336 automatic pointer dcl 13-35 set ref 2448* 2449 table_has_just_been_loaded 0(08) based bit(1) 0Jnf;G3ZRSMultics Storage System Volume root_01 root_01 root 2PmFQbT TT "T oTR#R#&R#R##&#xR#?#R#?##?#Tw ƒR####?## R#R#2 +##i# i#xi# i#r@i# -i# )?#i#a#i# i#Ti# 6i#n###Ji##:a#Pa#HTa#K#"#"i# ( (i#]i###)#"T # ?#?#""#x#?##@c#@R#@R#!!## J#*#R#i#k## #i##Xi#xOi# i#rR#R#X#i#di#R#S?#i# -##:R#^R#1R#i#l#i#R#nR#>i# <R#SR#SR#S?#R#hi# 6i#n## i#n  ##3# ##:?#i# kR#a#HR#R## # #i#i#"R"R(# i## T$# # # # i##D###R#R# !#####R##2# i###listen c#R#@R#O!##JR# #R## N#TR#R###R#Z##"R#7?###i##XR#R#6ace_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 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 rw_table_manager$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_$end_of_info error_table_$no_record error_table_$recoverable_error error_table_$unbalanced_brackets rw_error_$bad_report_format sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 90 000435 2834 000446 2841 000456 2846 000466 2879 000476 1 36 000506 10 61 000510 759 000512 954 000515 959 000520 1281 000523 1903 000526 101 000531 102 000535 103 000536 104 000537 105 000540 107 000556 109 000561 110 000562 113 000563 114 000565 115 000610 116 000613 117 000614 119 000620 120 000621 121 000622 122 000623 124 000626 125 000630 126 000633 128 000634 130 000635 134 000636 135 000641 136 000642 138 000654 139 000657 140 000671 142 000672 144 000675 145 000714 147 000717 150 000740 152 000743 153 000762 155 000765 158 001006 159 001010 160 001012 162 001015 164 001017 168 001020 177 001031 184 001075 185 001100 186 001101 188 001106 189 001112 190 001113 193 001141 194 001143 195 001145 197 001153 199 001171 201 001175 202 001177 204 001200 206 001204 207 001206 209 001207 210 001221 212 001224 216 001225 222 001226 225 001237 228 001244 229 001253 232 001273 235 001275 236 001305 238 001313 240 001315 244 001316 250 001317 253 001330 256 001335 257 001345 260 001365 263 001367 264 001377 269 001431 271 001433 275 001434 284 001435 285 001436 287 001442 289 001446 290 001450 292 001451 293 001454 295 001457 296 001460 297 SiteSA 1Z Q}n&N<Adams Multics KI"iBTT Adleman SiteSA q ɆNf>BnpASmith Multics y8 @O?܂nHarper FSOCOM ]QKD)|Aliff SiteSA akLD`FGuerniot IRT ]KDo8R*Nahon BullSys ]݉ @KE2nJHughes HISLTD Y! @\0QS<^ NMurphy FSO ]HK` pnRLangford DCSEM ]@OKjo*R8JWeiss SiteSA k9}M >h`!GWMay Multics }-t @ObL" tDWeller HDSA f_ L$ԊArmstrong HISCAN ^3@-aK+z`Bartley AUTO ^1K8D@*Krupansky AUTO ^@1K+D}TnEP3 FSOEP `2 @DL!Zahavi FSO ^@;K Pr@DPickett FED {bь Og)'Hlt04453 1077 004466 1081 004474 1084 004502 1085 004505 1088 004523 1091 004540 1094 004550 1098 004551 1106 004552 1108 004562 1112 004563 1118 004564 1121 004604 1127 004605 1166 004616 1167 004622 1170 004624 1172 004632 1174 004640 1175 004641 1176 004651 1178 004661 1179 004663 1181 004665 1183 004673 1185 004676 1186 004701 1187 004703 1189 004704 1190 004705 1192 004706 1195 004713 1197 004722 1198 004730 1202 004731 1203 004732 1205 004734 1207 004741 1208 004743 1211 004750 1214 004755 1217 004766 1219 005002 1222 005007 1223 005012 1227 005015 1229 005017 1230 005027 1232 005037 1233 005040 1234 005042 1235 005044 1239 005057 1240 005060 1241 005066 1243 005101 1244 005102 1245 005103 1246 005104 1247 005105 1248 005106 1250 005110 1257 005134 1261 005135 1273 005136 1274 005144 1277 005147 1278 005160 1279 005176 1281 005212 1282 005222 1285 005223 1286 005225 1288 005244 1291 005251 1295 005267 1299 005274 1305 005275 1315 005276 1319 005310 1325 005346 1326 005347 1337 005350 1339 005354 1340 005355 1341 005356 1342 005357 1344 005361 1346 005363 1347 005365 1348 005424 1350 005431 1360 005433 1362 005434 1365 005440 1368 005444 1371 005450 1374 005454 1383 005460 1386 005464 1388 005477 1390 005502 1394 005544 1396 005546 1397 005551 1399 005552 1408 005555 1410 005560 1414 005622 1416 005624 1417 005627 1419 005630 1426 005633 1434 005637 1436 005642 1441 005711 1443 005713 1444 005716 1446 005717 1454 005722 1456 005725 1460 005771 1462 005773 1463 005776 1472 005777 1474 006002 1478 006046 1480 006050 1481 006053 1490 006054 1492 006062 1496 006122 1498 006124 1499 006127 1508 006130 1510 006136 1514 006176 1516 006200 1517 006203 1525 006204 1527 006207 1531 006251 1533 006253 1534 006256 1536 006257 1545 006262 1548 006266 1550 006301 1552 006304 1555 006346 1557 006350 1558 006353 1560 006354 1571 006357 1572 006361 1574 006365 1584 006413 1587 006423 1588 006424 1590 006425 1593 006431 1597 006432 1630 006443 1631 006447 1632 006451 1633 006452 1634 006453 1635 006456 1637 006467 1639 006472 1640 006474 1643 006475 1645 006510 1646 006531 1648 006536 1650 006552 1652 006570 1654 006574 1657 006610 1658 006633 1659 006634 1662 006650 1667 006747 1671 006753 1673 006756 1675 006762 1678 006776 1679 006777 1681 007001 1682 007004 1684 007005 1687 007006 1689 007011 1690 007013 1692 007014 1694 007027 1696 007036 1697 007037 1699 007041 1700 007044 1701 007045 1702 007051 1704 007053 1708 007054 1729 007055 1732 007063 1734 007065 1735 007070 1736 007077 1737 007101 1740 007135 1742 007137 1743 007142 1744 007145 1745 007146 1746 007147 1761 007150 1763 007155 1766 007161 1767 007167 1768 007177 1770 007205 1771 007226 1772 007233 1776 007244 1778 007245 1780 007274 1781 007301 1783 007303 1784 007310 1785 007315 1789 007322 1795 007343 1796 007346 1797 007351 1802 007352 1806 007353 1815 007354 1818 007362 1821 007417 1826 007452 1830 007453 1868 007464 1869 007477 1870 007502 1871 007505 1872 007507 1873 007510 1875 007511 1876 007513 1877 007527 1879 007532 1880 007534 1882 007535 1883 007556 1896 007563 1897 007576 1898 007604 1900 007607 1902 007611 1903 007627 1906 007702 1908 007706 1909 007710 1910 007711 1911 007712 1913 007715 1914 007720 1915 007722 1916 007732 1918 007733 1922 010011 1926 010042 1930 010122 1934 010126 1938 010140 1941 010154 1942 010155 1944 010157 1945 010162 1947 010163 1948 010164 1949 010165 1950 010202 1951 010223 1953 010230 1960 010233 1961 010235 1963 010236 1965 010251 1967 010260 1968 010261 1970 010263 1972 010266 1973 010271 1974 010301 1976 010304 1977 010325 1978 010332 1979 010333 1980 010334 1982 010335 1983 010340 1985 010341 1988 010343 1989 010346 1990 010347 1992 010353 1996 010354 2012 010355 2015 010363 2017 010373 2019 010375 2024 010430 2026 010431 2037 010433 2038 010436 2039 010441 2043 010503 2046 010507 2048 010512 2054 010537 2055 010541 2056 010544 2058 010563 2059 010573 2060 010625 2061 010626 2063 010630 2065 010633 2069 010634 2080 010636 2081 010637 2082 010642 2084 010645 2085 010655 2087 010660 2088 010663 2090 010664 2091 010717 2092 010724 2093 010725 2095 010727 2096 010732 2097 010735 2099 010741 2105 010742 2139 010753 2140 010755 2141 010756 2142 010757 2144 010760 2145 010774 2147 011013 2149 011016 2151 011021 2152 011023 2154 011040 2156 011044 2158 011046 2160 011051 2161 011054 2163 011055 2165 011056 2186 011060 2187 011063 2189 011066 2190 011077 2192 011110 2194 011121 2198 011144 2200 011146 2205 011212 2208 011220 2209 011233 2211 011245 2213 011256 2214 011263 2217 011277 2219 011301 2223 011302 2231 011303 2235 011313 2236 011323 2239 011347 2241 011351 2247 011352 2267 011363 2269 011366 2270 011371 2271 011373 2272 011403 2273 011426 2274 011427 2277 011462 2278 011465 2280 011473 2282 011504 2283 011505 2284 011512 2286 011514 2290 011515 2319 011526 2320 011530 2321 011531 2323 011533 2325 011536 2326 011547 2328 011565 2329 011571 2330 011573 2332 011613 2334 011615 2339 011660 2342 011666 2343 011677 2345 011710 2347 011712 2349 011714 2353 011715 2361 011716 2364 011722 2365 011733 2367 011741 2369 011743 2373 011744 2381 011745 2382 011755 2384 011763 2386 011765 2390 011766 2398 011767 2399 011777 2404 012031 2406 012033 2410 012034 2419 012035 2422 012041 2423 012051 2428 012103 2430 012105 2434 012106 2440 012107 2441 012120 2443 012125 2444 012130 2446 012133 2447 012136 2448 012140 2449 012143 2451 012145 2452 012147 2453 012151 2455 012153 2456 012156 2457 012160 2458 012161 2459 012164 2461 012165 2462 012170 2463 012173 2464 012174 2465 012177 2467 012200 2468 012203 2470 012206 2471 012211 2472 012214 2474 012217 2476 012222 2477 012225 2478 012227 2481 012232 2483 012235 2484 012240 2485 012242 2488 012245 2490 012250 2491 012253 2494 012255 2496 012260 2497 012263 2500 012265 2502 012270 2503 012273 2504 012276 2505 012303 2506 012306 2508 012310 2509 012312 2510 012314 2511 012316 2512 012317 2514 012321 2515 012324 2517 012326 2518 012330 2520 012332 2522 012333 2526 012334 2538 012336 2540 012342 2543 012347 2544 012353 2547 012356 2549 012362 2553 012366 2567 012367 2570 012373 2571 012377 2574 012422 2575 012426 2577 012443 2578 012447 2580 012502 2583 012506 2586 012515 2589 012522 2590 012524 2591 012526 2593 012535 2594 012536 2598 012564 2602 012565 2608 012566 2610 012572 2611 012574 2614 012610 2616 012616 2618 012632 2622 012633 2639 012634 2640 012645 2641 012675 2643 012713 2647 012746 2649 012765 2653 013017 2654 013031 2656 013047 2660 013102 2662 013124 2666 013156 2667 013205 2669 013224 2673 013257 2675 013302 2679 013334 2682 013342 2683 013371 2685 013410 2689 013443 2691 013472 2695 013524 2699 013525 2705 013526 2706 013531 2707 013536 2708 013541 2710 013543 2711 013545 2712 013546 2713 013547 2714 013550 2716 013560 2718 013575 2720 013604 2721 013606 2722 013612 2725 013633 2726 013634 2727 013636 2728 013637 2729 013640 2730 013641 2731 013642 2733 013643 2734 013644 2736 013654 2737 013656 2738 013660 2739 013663 2741 013671 2743 013672 2747 013673 2758 013674 2759 013700 2760 013702 2761 013717 2763 013737 2764 013744 2766 013750 2767 013757 2770 013760 2771 013762 2777 014044 2783 014131 ----------------------------------------------------------- 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