COMPILATION LISTING OF SEGMENT usage_and_revenue Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/09/85 1331.4 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: style3 */ 11 12 /* This command prints out a "Multics Usage and Revenue Report." */ 13 /* Coded October 1975 by Jim Homan 14* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures. 15* Modified August 1981 by T. Casey to eliminate reference to master_proj in bin, 16* - and change all declarations of rs_number to eliminate "(9) unsigned unaligned". 17* Modified 1984-08-31 BIM for V3 use_totals, usage message. 18**/ 19 20 usage_and_revenue: 21 proc; 22 dcl ( 23 xtotp, /* pointer to old use_totals segment */ 24 cptr, /* pointer to control file */ 25 gptr, /* pointer to groups structure */ 26 arg_list_ptr 27 ) ptr, /* pointer to argument list for usage_and_revenue */ 28 null builtin, 29 ( 30 ngroups, /* # of groups in report, # of elements in groups structure */ 31 clen, /* # of groups in report, # of elements in groups structure */ 32 i, 33 j 34 ) fixed bin, 35 rate_ix fixed bin, 36 ec fixed bin (35), /* error code */ 37 daily bit (1), /* Is this daily or monthly report? */ 38 OK bit (1), /* Is it OK to continue? */ 39 first_time bit (1) init ("1"b), 40 short_date char (8), 41 size condition, 42 sysprint file output stream print; /* All output goes to sysprint */ 43 dcl 1 titles, /* Titles for first page */ 44 2 company char (120), /* Company name, double spaced */ 45 2 dept char (120), /* department name, double spaced */ 46 2 report_title char (50), /* ...usage and revenue report */ 47 2 time_span char (42), /* For mm/dd/yy hhmm dddto mm/dd/yy hhmm ddd */ 48 2 system char (24); /* Current System: xxx */ 49 50 51 declare max_rs_number fixed bin; 52 declare P_ptr pointer; 53 dcl 1 P (0:max_rs_number) based (P_ptr), 54 /* all the prices for all rate structures */ 55 2 rs_name char (32), /* name for this rate */ 56 2 abs_cpu_rates (1:4) float bin, /* installation price for absentee cpu time ($/hr) */ 57 2 abs_memory_rates 58 (1:4) float bin, /* installation price for absentee memory usage ($/Kmu) */ 59 2 connect_rates (0:7) float bin, /* installation price for terminal connect time ($/hr) */ 60 2 memory_rates (0:7) float bin, /* installation price for memory usage ($/Kmu) */ 61 2 disk_rates float bin, /* installation price for disk storage ($/page-sec) */ 62 2 cpu_rates (0:7) float bin, /* installation price for interactive cpu time ($/hr) */ 63 2 lines_rates (1:4) float bin, /* installation price for line printer lines ($/K-lines) */ 64 2 ioops_rates (0:7) float bin, /* installation price for I/O operations ($/K) */ 65 2 reg_rates float bin, /* user registration charge ($/month) */ 66 2 device_table aligned, 67 3 ndevices fixed bin, /* number of devices used */ 68 3 dvt (16), 69 4 device_id char (8), 70 4 device_rates 71 (0:7) float bin; /* $/hr */ 72 dcl shift_table (336) fixed bin; /* table of shift #'s for each half hour in week */ 73 dcl cu_$arg_list_ptr entry (ptr); /* multics subroutine */ 74 dcl com_err_ entry options (variable); 75 dcl system_info_$rs_name 76 entry (fixed bin, char (*), fixed bin (35)); 77 dcl system_info_$max_rs_number 78 entry (fixed binary); 79 dcl system_info_$shift_table 80 entry ((336) fixed bin); 81 82 dcl (addr, bin, divide, hbound, index, length, lineno, max, min, mod, multiply, onloc, pageno, reverse, sign, 83 substr, sum, verify) 84 builtin; 85 86 /* the groups structure is filled in by the procedures parse_control_file, initial, add_bins and conversions_and_sums. */ 87 88 /* structure to hold everything that gets printed in the report */ 89 90 dcl 1 groups (ngroups) based (gptr), 91 2 bins (301) fixed bin, /* the usage bins specified in control file for this group */ 92 2 groups (9) fixed bin, /* the other groups specified in control file for this group */ 93 2 all_bins (301) fixed bin, /* all the usage bins which go into this group */ 94 2 title char (24), /* the title for this group, as specified in control file */ 95 2 title_line_1 char (12), /* first part of the title */ 96 2 title_line_2 char (12), /* second part of the title */ 97 2 projects fixed bin, /* number of projects included in this group */ 98 2 users fixed bin, /* number of users included in this group */ 99 2 devices$ float bin, /* device charges */ 100 2 misc_dollars float bin, /* miscellaneous charges */ 101 2 disk, /* disk statistics */ 102 3 page_days float bin, 103 3 page_days$ float bin, /* charge for disk storage */ 104 3 quota fixed bin (35), /* normal storage quota */ 105 3 usage fixed bin (35), /* pages of normal storage */ 106 2 interactive, /* interactive usage statistics */ 107 3 shifts (0:7), 108 4 cpu float bin, /* cpu hours */ 109 4 cpu_dollars float bin, /* charge for cpu time */ 110 4 memory float bin, /* memory units */ 111 4 memory_dollars 112 float bin, /* charge for memory */ 113 4 connect float bin, /* connect hours */ 114 4 connect_dollars 115 float bin, /* charge for connect time */ 116 4 ioops float bin, /* terminal io ops */ 117 4 ioops_dollars 118 float bin, /* total charges for shift */ 119 4 total_dollars 120 float bin, /* total charges for shift */ 121 4 dollars_per_hour 122 float bin, /* average cost per connect hour */ 123 3 total like groups.interactive.shifts, 124 /* total for all shifts */ 125 3 sessions fixed bin, /* number of logins */ 126 3 dollars_per_session 127 float bin, /* dollars per connect hour */ 128 3 hours_per_session 129 float bin, /* average session length */ 130 2 absentee, /* absentee usage statistics */ 131 3 queues (4), 132 4 cpu float bin, /* cpu hours */ 133 4 cpu_dollars float bin, /* charge for cpu time */ 134 4 memory float bin, /* memory units */ 135 4 memory_dollars 136 float bin, /* charge for memory */ 137 4 jobs fixed bin, /* number of absentee jobs */ 138 4 total_dollars 139 float bin, /* total charges for queue */ 140 4 dollars_per_job 141 float bin, /* average cost per absentee job */ 142 3 total like groups.absentee.queues, /* dtotal for all queues */ 143 2 iod, /* IO Daemon statistics */ 144 3 queues (4), 145 4 lines float bin, /* number of lines printed */ 146 4 lines_dollars 147 float bin, /* print charges */ 148 3 total like groups.iod.queues, /* total for all queues */ 149 2 total, /* overall totals */ 150 3 cpu float bin, /* cpu hours */ 151 3 cpu_dollars float bin, /* charge for cpu time */ 152 3 memory float bin, /* memory units */ 153 3 memory_dollars 154 float bin, /* charge for memory use */ 155 3 today_dollars float bin, /* total charges today */ 156 3 month_dollars float bin; /* total charges for month */ 157 158 declare ME char (32) init ("usage_and_revenue") int static options (constant); 159 160 declare cleanup condition; 161 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 162 2 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 2 2 /* format: style2,^inddcls,idind32 */ 2 3 2 4 declare 1 terminate_file_switches based, 2 5 2 truncate bit (1) unaligned, 2 6 2 set_bc bit (1) unaligned, 2 7 2 terminate bit (1) unaligned, 2 8 2 force_write bit (1) unaligned, 2 9 2 delete bit (1) unaligned; 2 10 2 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 2 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 2 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 2 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 2 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 2 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 2 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 2 18 2 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 163 164 3 1 /* BEGIN INCLUDE FILE ... use_totals.incl.pl1 */ 3 2 /* format: style3 */ 3 3 3 4 /* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures. (UNCA) 3 5* Modified May 1980 by R. McDonald to include printer page charge, replaces cpu time in iod. (UNCA) 3 6* Modified July 1981 by C. Hornig to eliminate rs_number and master_proj from bin, 3 7* - split it into sub-structures for convenience in conversion, 3 8* - and make version a character string. 3 9* Modified August 1981 by T. Casey to put back rs_number in bin. 3 10* Modified 1984-08-31 BIM for half-year billing cycles, which is all 3 11* that will fit in a segment. 3 12**/ 3 13 3 14 dcl use_totals_ptr pointer; 3 15 dcl 1 use_totals based (use_totals_ptr) aligned, 3 16 2 meters, 3 17 3 generated fixed bin (71), /* Time usage data generated. */ 3 18 3 period_begin fixed bin (71), /* Earliest time covered */ 3 19 3 period_end fixed bin (71), /* Latest time */ 3 20 3 disk_available 3 21 fixed bin (35), /* Total disk capacity in MULT partition. */ 3 22 3 disk_left fixed bin (35), /* Total disk unused.. */ 3 23 3 version char (8), /* revision of this include file */ 3 24 3 pad1 (6) fixed bin, /* Gross system statistics, determined from answering service meters. */ 3 25 3 uptime fixed bin (71), /* Time system has been on the air. */ 3 26 3 sys_starts fixed bin, /* Number of bootloads */ 3 27 3 sys_crash fixed bin, /* Number of crashes */ 3 28 3 cpu_avail fixed bin (71), /* CPU time available. >= uptime by two-cpu time */ 3 29 3 idle fixed bin (71), /* Total idle for all causes */ 3 30 3 initializer fixed bin (71), /* Initializer usage */ 3 31 3 total_cpu fixed bin (71), /* Total VIRTUAL cpu from bins - so get overhead */ 3 32 3 zidle fixed bin (71), /* Total zero idle. */ 3 33 3 mpidle fixed bin (71), /* Total MP idle */ 3 34 3 pad2 (6) fixed bin (71), /* variables used while reading answering service meters */ 3 35 3 zidle_since_boot 3 36 fixed bin (71), /* Zero idle since boot */ 3 37 3 mpidle_since_boot 3 38 fixed bin (71), /* MP idle since boot */ 3 39 3 time_last_boot 3 40 fixed bin (71), /* Time of last bootload */ 3 41 3 time_last_sample 3 42 fixed bin (71), /* Time of last 15-minute sample */ 3 43 3 uptime_since_boot 3 44 fixed bin (71), /* Time system on air since last boot */ 3 45 3 cpu_avail_since_boot 3 46 fixed bin (71), /* CPU available since boot */ 3 47 3 idle_since_boot 3 48 fixed bin (71), /* Idle time since boot */ 3 49 3 last_sysid char (8), /* Current system ID */ 3 50 3 n_users_on fixed bin, /* Users on at last sample */ 3 51 3 n_stat_gaps fixed bin, /* Number of times we missed getting all data */ 3 52 /* Statistics by day, for black and white chart. */ 3 53 2 b_and_w, 3 54 3 origin fixed bin (71), /* Base time for slot 1 */ 3 55 3 max_day_log fixed bin, /* Highest used day. */ 3 56 3 max_qhour fixed bin, /* Highest quarter in highest day */ 3 57 3 daylog (190), /* array of days. */ 3 58 4 qh (96), /* Quarter-hour within the day. */ 3 59 5 time fixed bin (71), /* Time of sample. */ 3 60 5 sysid char (8), /* System ID */ 3 61 5 dump_number 3 62 fixed (18) unsigned unaligned, 3 63 5 flags unaligned, 3 64 6 shutdown 3 65 bit (1), 3 66 6 pad bit (17), 3 67 5 cpu fixed bin (5) unsigned unaligned, 3 68 5 nunits fixed bin (13) unsigned unaligned, 3 69 /* Number of load units */ 3 70 5 kmem fixed bin (18) unsigned unaligned, 3 71 5 starttime fixed bin (71), /* Boot time */ 3 72 5 crashtime fixed bin (71), /* Time of crash */ 3 73 /**** User-classification info, loaded once a month. defines usage bins. bin 1 is always "other" */ 3 74 2 bins, 3 75 3 ntypes fixed bin, /* Number of valid bins */ 3 76 3 n_select fixed bin, /* Number of selectors */ 3 77 3 bin_data (3258) aligned, 3 78 4 select_proj char (12) aligned, /* Project ID - same number as in sat */ 3 79 4 select_ut fixed bin, /* Bin number for the project */ 3 80 /* Usage bins for each usage type. Determined from summarizing the PDT's. 3 81* * Note - bin "use_totals.ut (use_totals.ntypes+1)" is a zeroed bin which can be used to represent non-existent bins. 3 82* * e.g. Last month's use_totals seg has a bin that has been removed from this month's use_totals seg. 3 83**/ 3 84 3 ut (301), /* array usage by project type */ 3 85 4 utype char (24), /* Label for usage bin */ 3 86 4 dollar_charge 3 87 float bin, /* total dollars spent this month */ 3 88 4 logins fixed bin, /* number of logins */ 3 89 4 crashes fixed bin, /* sessions abnormally terminated */ 3 90 4 nproj fixed bin, /* projects in this class */ 3 91 4 nusers fixed bin, /* users in this class */ 3 92 4 disk_psec fixed bin (71), /* Total page-seconds */ 3 93 4 disk_quota fixed bin (35), /* Total quota */ 3 94 4 disk_usage fixed bin (35), /* Disk occupancy */ 3 95 4 misc float bin, /* Miscellaneous charges */ 3 96 4 flag char (4), /* paying categories = "$" */ 3 97 4 flag1 char (4), /* used to control reporting of categories */ 3 98 4 pad1a (3) fixed bin (35), 3 99 4 rs_number fixed bin, /* rate structure number for all projects in this bin */ 3 100 4 pad1b (14) fixed bin (35), 3 101 4 interactive (0:7), /* interactive use, shifts 0-7 */ 3 102 5 charge float bin, /* total dollar charge this shift */ 3 103 5 pad1 fixed bin, 3 104 5 cpu fixed bin (71), /* cpu usage in microseconds */ 3 105 5 core fixed bin (71), /* core demand in page-microseconds */ 3 106 5 connect fixed bin (71), /* total console time in microseconds */ 3 107 5 io_ops fixed bin (71), /* total terminal i/o ops */ 3 108 4 absentee (4), /* absentee use, queues 1-4 */ 3 109 5 charge float bin, /* dollar charge this queue */ 3 110 5 jobs fixed bin, /* number of jobs submitted */ 3 111 5 cpu fixed bin (71), /* total cpu time in microseconds */ 3 112 5 memory fixed bin (71), /* total memory usage in mu */ 3 113 4 iod (4), /* io daemon use, queues 1-4 */ 3 114 5 charge float bin, /* dollar charge this queue */ 3 115 5 pieces fixed bin, /* pieces of output requested */ 3 116 5 pad2 fixed bin, 3 117 5 pages fixed bin, /* number of pages output */ 3 118 5 lines fixed bin (71), /* total record count of output */ 3 119 4 devices (16) float bin; /* device charges */ 3 120 3 121 dcl USE_TOTALS_VERSION_2 3 122 char (8) static options (constant) initial ("usetot_2"); 3 123 dcl USE_TOTALS_VERSION_3 3 124 char (8) static options (constant) initial ("usetot_3"); 3 125 3 126 /* END INCLUDE FILE ... use_totals.incl.pl1 */ 165 166 167 168 use_totals_ptr, xtotp, gptr, P_ptr = null (); 169 on cleanup 170 begin; 171 call clean_up (use_totals_ptr, xtotp, gptr); 172 end; 173 call system_info_$max_rs_number (max_rs_number); 174 allocate P set (P_ptr); 175 close file (sysprint); 176 open file (sysprint) linesize (300) pagesize (66);/* open sysprint with a big linesize and a pagesize 177* larger than any of the pages in the report */ 178 call cu_$arg_list_ptr (arg_list_ptr); /* get pointer to argument list */ 179 call process_args (arg_list_ptr, use_totals_ptr, xtotp, daily, cptr, clen, OK); 180 if ^OK 181 then do; 182 call clean_up (use_totals_ptr, xtotp, null); 183 return; 184 end; 185 call parse_control_file (cptr, clen, OK); 186 if ^OK 187 then do; 188 call clean_up (use_totals_ptr, xtotp, gptr); 189 error: 190 return; 191 end; 192 call system_info_$shift_table (shift_table); 193 do rate_ix = 0 to hbound (P, 1); /* get all the prices */ 194 call system_info_$rs_name (rate_ix, P (rate_ix).rs_name, ec); 195 if ec ^= 0 196 then do; 197 P (rate_ix) = P (0); /* assumes default will not cause an error */ 198 P (rate_ix).rs_name = ""; 199 end; 200 else call get_prices (rate_ix, P (rate_ix)); 201 end; 202 call make_titles (daily, titles, short_date); 203 do i = 1 to ngroups; 204 call initial (i); 205 do j = 1 to hbound (groups.all_bins, 2) while (groups (i).all_bins (j) ^= 0); 206 call add_bins (i, groups (i).all_bins (j), daily, 207 P (use_totals.ut (groups (i).all_bins (j)).rs_number)); 208 end; 209 end; 210 call conversions_and_sums; 211 on size 212 begin; /* Handle size condition on output as gracefully as possible */ 213 call clean_up (use_totals_ptr, xtotp, gptr); 214 call com_err_ (0, ME, "Number too big for output format. Error occurred in routine ^a.", onloc ()); 215 go to error; 216 end; 217 call revenue_summary (daily, titles); 218 call interactive_summary (short_date); 219 call absentee_summary (short_date); 220 call iod_summary (short_date); 221 call system_stats (daily, short_date); 222 call disk_stats (); 223 if daily 224 then call times_available (); 225 if ^daily 226 then call group_composition (short_date); 227 if ^daily 228 then do rate_ix = 0 to hbound (P, 1); 229 if P (rate_ix).rs_name ^= "" 230 then call rates_and_shifts (P (rate_ix), shift_table, short_date); 231 end; 232 233 call footnote (short_date); 234 revert size; 235 call clean_up (use_totals_ptr, xtotp, gptr); 236 237 process_args: 238 proc (ap, use_totals_ptr, xtotp, daily, cptr, clen, OK); 239 240 /* This procedure processes the arguments to usage_and_revenue. 241* Parameters: 242* ap - input - Pointer to usage_and_revenue argument list. 243* use_totals_ptr - output - Pointer to current use_totals segment. 244* xtotp - output - Pointer to old use_totals segment. 245* daily - output -"1"b if daily report, "0"b if monthly report. 246* cptr - output - Pointer to control file. 247* clen - output - Length of control file (number of characters). 248* OK - output - "1"b if everything ok, "0"b if error was detected and com_err_ called. */ 249 250 dcl (use_totals_ptr, xtotp, cptr, ap) 251 ptr, 252 count fixed bin (24), 253 clen fixed bin, 254 (daily, OK) bit (1), 255 dn char (168), 256 en char (32), 257 ec fixed bin (35), /* error code returned from multics subroutines */ 258 argptr ptr, /* ptr to usage_and_revenue argument */ 259 arglen fixed bin (21), /* length of usage_and_revenue argument */ 260 arg char (arglen) based (argptr), /* usage_and_revenue argument */ 261 null builtin; 262 dcl arg_count fixed bin; 263 dcl error_table_$unimplemented_version 264 external fixed bin (35); 265 dcl com_err_ entry options (variable), 266 cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 267 dcl cu_$arg_count_rel entry (fixed bin, ptr, fixed bin (35)); 268 dcl com_err_$suppress_name 269 entry () options (variable); 270 271 call cu_$arg_count_rel (arg_count, ap, ec); 272 if ec ^= 0 273 then do; 274 call com_err_ (ec, ME); 275 OK = "0"b; 276 return; 277 end; 278 if arg_count < 2 279 then do; 280 call com_err_$suppress_name (0, ME, 281 "Usage: usage_and_revenue Control_File Current_Use_Totals.use_totals {Previous_Use_Totals.use_totals}" 282 ); 283 OK = "0"b; 284 return; 285 end; 286 287 OK = "1"b; 288 call get_seg_from_arg (1, ap, "control", cptr, count, dn, en, OK); 289 if ^OK 290 then return; 291 clen = divide (count, 9, 17, 0); 292 call get_seg_from_arg (2, ap, "use_totals", use_totals_ptr, count, dn, en, OK); 293 if ^OK 294 then return; 295 if use_totals.version ^= USE_TOTALS_VERSION_3 296 then do; 297 bad_version: 298 call com_err_ (error_table_$unimplemented_version, ME, "For seg ^a>^a. 299 Use convert_MR10_2_use_totals to convert to version 3.", dn, en); 300 OK = "0"b; 301 return; 302 end; 303 call cu_$arg_ptr_rel (3, argptr, arglen, ec, ap); 304 if ec = 0 305 then do; 306 call get_seg_from_arg (3, ap, "use_totals", xtotp, count, dn, en, OK); 307 if ^OK 308 then return; 309 if xtotp -> use_totals.version ^= USE_TOTALS_VERSION_3 310 then goto bad_version; 311 end; 312 if xtotp = null 313 then daily = "0"b; 314 else daily = "1"b; 315 316 317 get_seg_from_arg: 318 proc (argno, ap, suffix, p, count, dn, en, OK); 319 320 /* This procedure gets the pathname of a segment from an argument list and 321* returns a pointer to the segment and its bit count. 322* Parameters: 323* argno - input - The number of the argument to be used as pathname 324* ap - input - Pointer to the argument list. 325* suffix - input - required suffix on segment. 326* count - output - Bit count of the segment. 327* p - output - Pointer to the segment. 328* OK - output - "0"b if error was detected and com_err_ called. "1"b if everything was ok. */ 329 330 dcl argno fixed bin, 331 count fixed bin (24), 332 OK bit (1), 333 (ap, p) ptr, 334 ec fixed bin (35), /* error code returned from multics subroutines */ 335 argptr ptr, /* ptr to usage_and_revenue argument */ 336 arglen fixed bin (21), /* length of usage_and_revenue argument */ 337 arg char (arglen) based (argptr), /* usage_and_revenue argument */ 338 dn char (*), /* directory name */ 339 en char (*), /* entry name */ 340 null builtin; 341 dcl suffix char (*); 342 343 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 344 dcl expand_pathname_$add_suffix 345 entry (character (*), character (*), character (*), character (*), fixed binary (35)); 346 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)) 347 ; 348 dcl com_err_ entry options (variable); 349 OK = "1"b; 350 call cu_$arg_ptr_rel (argno, argptr, arglen, ec, ap); 351 /* get the argument */ 352 if ec ^= 0 353 then do; 354 call com_err_ (ec, ME); /* couldn't find the argument */ 355 OK = "0"b; 356 return; 357 end; 358 call expand_pathname_$add_suffix (arg, suffix, dn, en, ec); 359 if ec ^= 0 360 then do; 361 call com_err_ (ec, ME, "^a", arg); 362 OK = "0"b; 363 return; 364 end; 365 call initiate_file_ (dn, en, R_ACCESS, p, count, ec); 366 if ec ^= 0 367 then do; 368 call com_err_ (ec, ME, "^a>^a", dn, en); 369 OK = "0"b; 370 return; 371 end; 372 end get_seg_from_arg; 373 end process_args; 374 375 get_prices: 376 proc (rs_number, P); 377 378 /* This procedure calls the different system_info_ entry points to get all the system rate 379* and shift info. 380* Parameters: 381* are all input parameters */ 382 383 dcl rs_number fixed bin; /* rate structure to use */ 384 dcl 1 P, 385 2 rs_name char (32), /* name for this rate */ 386 2 abs_cpu_rates (1:4) float bin, /* installation price for absentee cpu time ($/hr) */ 387 2 abs_memory_rates 388 (1:4) float bin, /* installation price for absentee memory usage ($/Kmu) */ 389 2 connect_rates (0:7) float bin, /* installation price for terminal connect time ($/hr) */ 390 2 memory_rates (0:7) float bin, /* installation price for memory usage ($/Kmu) */ 391 2 disk_rates float bin, /* installation price for disk storage ($/page-sec) */ 392 2 cpu_rates (0:7) float bin, /* installation price for interactive cpu time ($/hr) */ 393 2 lines_rates (1:4) float bin, /* installation price for line printer lines ($/K-lines) */ 394 2 ioops_rates (0:7) float bin, /* installation price for I/O operations ($/K) */ 395 2 reg_rates float bin, /* user registration charge ($/month) */ 396 2 device_table aligned, 397 3 ndevices fixed bin, /* number of devices used */ 398 3 dvt (16), 399 4 device_id char (8), 400 4 device_rates 401 (0:7) float bin; /* $/hr */ 402 403 dcl system_info_$prices_rs 404 entry (fixed bin, (0:7) float bin, (0:7) float bin, (0:7) float bin, (0:7) float bin, 405 float bin, float bin), /* Gets interactive installation prices */ 406 system_info_$io_prices_rs 407 entry (fixed bin, (4) float bin), 408 /* gets daemon installation prices */ 409 system_info_$abs_prices_rs 410 entry (fixed bin, (4) float bin, (4) float bin), 411 /* gets absentee installation prices */ 412 system_info_$device_prices_rs 413 entry (fixed bin, fixed bin, ptr); 414 415 call system_info_$prices_rs (rs_number, P.cpu_rates, P.connect_rates, P.ioops_rates, P.memory_rates, 416 P.disk_rates, P.reg_rates); 417 call system_info_$abs_prices_rs (rs_number, P.abs_cpu_rates, P.abs_memory_rates); 418 call system_info_$io_prices_rs (rs_number, P.lines_rates); 419 call system_info_$device_prices_rs (rs_number, P.device_table.ndevices, addr (P.device_table.dvt (1))); 420 end get_prices; 421 422 parse_control_file: 423 proc (cptr, clen, OK); 424 425 /* This procedure reads through the control file, determines the number of 426* groups (=ngroups), allocates the groups structure and for each element in the groups structure it fills in 427* bins,groups,all_bins,title,title_line_1 and title_line_2. 428* Parameters: 429* cptr - input - pointer to the control file segment 430* clen - input - length of the control file segment 431* OK - output - "0"b if error has been detected and com_err_ called. "1"b if everything ok */ 432 433 dcl (i, j, k, m, n) fixed bin, 434 clen fixed bin, 435 cptr ptr, 436 OK bit (1), 437 all_done bit (1), 438 ec fixed bin (35); 439 dcl com_err_ entry options (variable); 440 dcl get_temp_segment_ entry (character (*), pointer, fixed binary (35)); 441 442 dcl bin bit (1); 443 dcl (start1, start2) fixed bin; 444 dcl (end_of_line, end_of_file) 445 bit (1); 446 dcl control char (clen) based (cptr); 447 dcl line char (400) var, 448 title char (24); 449 dcl 1 more_groups (9), 450 2 all_processed bit (1) init ((9) (1)"0"b), 451 2 group_titles (9) char (24) aligned init ((81) (1)""), 452 2 group_numbers (9) fixed bin init ((81) 0), 453 2 nbins fixed bin, 454 2 ng fixed bin, 455 2 nall_bins fixed bin; 456 call get_temp_segment_ (ME, gptr, ec); 457 if ec ^= 0 458 then do; 459 call com_err_ (ec, ME); 460 OK = "0"b; 461 return; 462 end; 463 start1 = 1; 464 call get_line (control, start1, line, end_of_file); 465 if end_of_file 466 then do; 467 call com_err_ (0, ME, "No valid lines in control file"); 468 OK = "0"b; 469 return; 470 end; 471 ngroups = 0; 472 do while (^end_of_file); 473 ngroups = ngroups + 1; 474 if ngroups > 9 475 then do; 476 call com_err_ (0, ME, "More than 9 groups specified in control file."); 477 OK = "0"b; 478 return; 479 end; 480 groups (ngroups).bins (*) = 0; 481 start2 = 1; 482 call get_group_title (line, start2, title, end_of_line); 483 if end_of_line 484 then do; 485 call com_err_ (0, ME, "^a:^a", "Bad line in control file", line); 486 OK = "0"b; 487 return; 488 end; 489 groups (ngroups).title = title; 490 call split_title (groups (ngroups).title, groups (ngroups).title_line_1, groups (ngroups).title_line_2); 491 call get_bin_title (line, start2, title, bin, end_of_line); 492 if end_of_line 493 then do; 494 call com_err_ (0, ME, "^a:^a", "Bad line in control file", line); 495 OK = "0"b; 496 return; 497 end; 498 do while (^end_of_line); 499 if bin 500 then do; 501 i = 1; 502 do while (use_totals.ut (i).utype ^= title & i <= use_totals.ntypes); 503 i = i + 1; 504 end; 505 if i > use_totals.ntypes 506 then do; 507 call com_err_ (0, ME, "Line contains an invalid bin name: ^a", line); 508 OK = "0"b; 509 return; 510 end; 511 else do; 512 j = 1; 513 do while (groups (ngroups).bins (j) ^= 0 & j <= hbound (groups.bins, 2)); 514 j = j + 1; 515 end; 516 if j > hbound (groups.bins, 2) 517 then do; 518 call com_err_ (0, ME, 519 "Too many bins specified in control file line: ^a", line); 520 OK = "0"b; 521 return; 522 end; 523 else groups (ngroups).bins (j) = i; 524 end; 525 end; 526 else do; 527 i = 1; 528 do while (more_groups (ngroups).group_titles (i) ^= "" & i <= 9); 529 i = i + 1; 530 end; 531 if i > 9 532 then do; 533 call com_err_ (0, ME, "Too many groups specified in control file line: ^a", line); 534 OK = "0"b; 535 return; 536 end; 537 else more_groups (ngroups).group_titles (i) = title; 538 end; 539 call get_bin_title (line, start2, title, bin, end_of_line); 540 end; 541 call get_line (control, start1, line, end_of_file); 542 end; 543 groups (*).all_bins (*) = 0; 544 groups (*).groups (*) = 0; 545 do i = 1 to ngroups; 546 groups (i).all_bins (*) = groups (i).bins (*); 547 j = 1; 548 do while (groups (i).all_bins (j) > 0); 549 j = j + 1; 550 end; 551 more_groups (i).nbins, more_groups (i).nall_bins = j - 1; 552 do j = 1 to 9 while (more_groups (i).group_titles (j) ^= ""); 553 k = 1; 554 do while (more_groups (i).group_titles (j) ^= groups (k).title & k <= ngroups); 555 k = k + 1; 556 end; 557 if k > ngroups 558 then do; 559 call com_err_ (0, ME, 560 "Reference to group ""^a"" in control file, but no group by that title exists", 561 more_groups (i).group_titles (j)); 562 OK = "0"b; 563 return; 564 end; 565 else do; 566 more_groups (i).group_numbers (j) = k; 567 groups (i).groups (j) = k; 568 end; 569 end; 570 more_groups (i).ng = j - 1; 571 if more_groups (i).ng = 0 572 then more_groups (i).all_processed = "1"b; 573 end; 574 all_done = "0"b; 575 do i = 1 to 9 while (^all_done); 576 all_done = "1"b; 577 do j = 1 to ngroups; 578 if ^more_groups (j).all_processed 579 then do k = 1 to 9; 580 n = more_groups (j).group_numbers (k); 581 if n > 0 582 then if more_groups (n).all_processed 583 then do; 584 if more_groups (n).nall_bins + more_groups (j).nall_bins 585 > hbound (groups.bins, 2) 586 then do; 587 call com_err_ (0, ME, "Too many bins specified for group ^a", 588 groups (j).title); 589 OK = "0"b; 590 return; 591 end; 592 do m = 1 to more_groups (n).nall_bins; 593 groups (j).all_bins (m + more_groups (j).nall_bins) = 594 groups (n).all_bins (m); 595 end; 596 more_groups (j).nall_bins = 597 more_groups (j).nall_bins + more_groups (n).nall_bins; 598 more_groups (j).group_numbers (k) = 0; 599 end; 600 else all_done = "0"b; 601 end; 602 if sum (more_groups (j).group_numbers (*)) = 0 603 then more_groups (j).all_processed = "1"b; 604 end; 605 end; 606 if ^all_done 607 then do; 608 call com_err_ (0, ME, "There is a circular reference to groups in the control file."); 609 OK = "0"b; 610 return; 611 end; 612 split_title: 613 proc (title, line1, line2); 614 615 /* This procedure takes a group title and breaks it into 2 lines 616* Parameters: 617* title - input - group title 618* line1,line2 - output - the 2 shorter lines */ 619 620 dcl title char (24), 621 (line1, line2) char (12), 622 t char (24) var, 623 (i, j, m, l1, s2, l2, m1, m2) 624 fixed bin; 625 626 line1, line2 = ""; 627 t = substr (title, 1, min (length (title), length (title) - verify (reverse (title), " ") + 1)); 628 m = length (t) / 2; 629 i = index (reverse (substr (t, 1, m)), " "); 630 j = index (substr (t, m + 1), " "); 631 if i = 0 & j = 0 632 then do; 633 if length (t) < 12 634 then substr (line2, 13 - length (t)) = t; 635 else do; 636 line1 = substr (t, 1, 12); 637 line2 = substr (t, 13); 638 end; 639 end; 640 else if (i > 0 & j = 0) | (i > 0 & j > 0 & i < j) 641 then do; 642 l1 = m - i; 643 s2 = l1 + 2; 644 l2 = length (t) - l1 - 1; 645 m2 = max (1, 12 - l2 + 1); 646 m1 = m2 + (l2 - l1 + 1) / 2; 647 substr (line1, m1) = substr (t, 1, l1); 648 substr (line2, m2) = substr (t, s2); 649 end; 650 else if (j > 0 & i = 0) | (j > 0 & i > 0 & j < i) 651 then do; 652 l1 = m + j - 1; 653 s2 = l1 + 2; 654 l2 = length (t) - l1 - 1; 655 m1 = max (1, 12 - l1 + 1); 656 m2 = m1 + (l1 - l2 + 1) / 2; 657 substr (line1, m1) = substr (t, 1, l1); 658 substr (line2, m2) = substr (t, s2); 659 end; 660 end split_title; 661 get_line: 662 proc (c, s, l, eof); 663 664 /* This procedure gets the next line from the control file. 665* Parameters: 666* c - input - the control file 667* s - input,output - the current position in the control file 668* l - output - the next line 669* eof - output - "1"b if there are no more lines in file */ 670 671 dcl c char (*), 672 l char (*) var, 673 (s, i) fixed bin, 674 eof bit (1), 675 NL char (1) init (" 676 "); 677 678 if s > length (c) 679 then eof = "1"b; 680 else do; 681 i = index (substr (c, s), NL); 682 if i = 0 683 then eof = "1"b; 684 else do; 685 i = i + s; 686 l = substr (c, s, i - s - 1); 687 s = i; 688 eof = "0"b; 689 if substr (l, 1, 1) = "*" 690 then /* ignore comment lines */ 691 call get_line (c, s, l, end_of_file); 692 end; 693 end; 694 end get_line; 695 get_group_title: 696 proc (l, s, t, eol); 697 698 /* This procedure extracts the group title from the beginning of a control fileline. 699* Parameters: 700* l - input - the control file line 701* s - input,output - the current position within the line 702* t - output - the group title 703* eol - output - "1"b if there is no group title in line */ 704 705 dcl l char (*) var, 706 t char (*), 707 eol bit (1), 708 (s, i) fixed bin; 709 710 i = index (substr (l, s), ":"); 711 if i = 0 712 then eol = "1"b; 713 else do; 714 t = substr (l, s, i - s); 715 eol = "0"b; 716 s = i + 1; 717 end; 718 end get_group_title; 719 get_bin_title: 720 proc (l, s, t, b, eol); 721 722 /* This procedure extracts bin or group titles from a control file line. 723* Parameters: 724* l - input - the control file line 725* s - input,output - the current position within the line 726* t - output - the next bin or group title 727* b - output - "1"b if bin title, "0"b if group title 728* eol - output - "1"b if there are no more titles in the line */ 729 730 dcl l char (*) var, 731 t char (*), 732 (s, i) fixed bin, 733 eol bit (1), 734 b bit (1); 735 736 if s > length (l) 737 then do; 738 eol = "1"b; 739 return; 740 end; 741 eol = "0"b; 742 i = index (substr (l, s), ","); 743 if i = 0 744 then i = length (l) + 2; 745 else i = i + s; 746 if substr (l, s, 1) = """" & substr (l, i - 2, 1) = """" 747 then do; 748 t = substr (l, s + 1, i - s - 3); 749 b = "0"b; 750 end; 751 else do; 752 t = substr (l, s, i - s - 1); 753 b = "1"b; 754 end; 755 s = i; 756 end get_bin_title; 757 end parse_control_file; 758 759 make_titles: 760 proc (daily, titles, short_date); 761 762 /* This procedure sets up the titles for the report. 763* Parameters: 764* daily - input - "1"b if daily report, "0"b if monthly report 765* titles - output - the titles for the report 766* short_date - output - date to be printed in top left corner of pages */ 767 768 dcl daily bit (1); 769 dcl 1 titles, /* Titles for 1st and last pages */ 770 2 company char (120), /* Company name, double spaced */ 771 2 dept char (120), /* department name, double spaced */ 772 2 report_title char (50), /* ...usage and revenue report */ 773 2 time_span char (42), /* For mm/dd/yy hhmm dddto mm/dd/yy hhmm ddd */ 774 2 system char (24); /* Current System: xxx */ 775 dcl short_date char (8); 776 dcl dummy char (1); 777 dcl system_info_$titles entry (char (*), char (*), char (*), char (*)); 778 call system_info_$titles (dummy, dummy, titles.company, titles.dept); 779 if daily 780 then titles.report_title = "Multics Usage and Revenue Report"; 781 else titles.report_title = "**** Monthly Multics Usage and Revenue Report ****"; 782 if daily 783 then titles.time_span = 784 "For " || format_time (xtotp -> use_totals.period_end) || " to " 785 || format_time (use_totals.period_end); 786 else titles.time_span = 787 "For " || format_time (use_totals.period_begin) || " to " || format_time (use_totals.period_end); 788 short_date = substr (format_time (use_totals.period_end), 1, 8); 789 titles.system = "Current System: " || use_totals.last_sysid; 790 end make_titles; 791 792 initial: 793 proc (n); 794 795 /* This procedure zeroes out the data in one element of the groups structure. 796* Parameters: 797* n - input - the element to be zeroed out */ 798 799 dcl n fixed bin; 800 801 groups (n).devices$ = 0; 802 groups (n).misc_dollars = 0; 803 groups (n).disk = 0; 804 groups (n).interactive = 0; 805 groups (n).absentee = 0; 806 groups (n).iod = 0; 807 groups (n).total = 0; 808 end initial; 809 810 add_bins: 811 proc (out, in, daily, P); 812 813 /* This procedure takes data from one bin of use_totals and adds it to one element of groups 814* plus calculates the charges for those items that use the "get_prices" charges. 815* Parameters: 816* out -input - the element of groups to to the data 817* in - input - the bin from which data comes 818* daily - input - is this daily or monthly report? 819* P - input - is the prices for the rate to be used for bin "in" 820**/ 821 822 dcl (out, in) fixed bin, 823 daily bit (1); 824 dcl 1 P, /* all the prices for one rate structure */ 825 2 rs_name char (32), /* name for this rate */ 826 2 abs_cpu_rates (1:4) float bin, /* installation price for absentee cpu time ($/hr) */ 827 2 abs_memory_rates 828 (1:4) float bin, /* installation price for absentee memory usage ($/Kmu) */ 829 2 connect_rates (0:7) float bin, /* installation price for terminal connect time ($/hr) */ 830 2 memory_rates (0:7) float bin, /* installation price for memory usage ($/Kmu) */ 831 2 disk_rates float bin, /* installation price for disk storage ($/page-sec) */ 832 2 cpu_rates (0:7) float bin, /* installation price for interactive cpu time ($/hr) */ 833 2 lines_rates (1:4) float bin, /* installation price for line printer lines ($/K-lines) */ 834 2 ioops_rates (0:7) float bin, /* installation price for I/O operations ($/K) */ 835 2 reg_rates float bin, /* user registration charge ($/month) */ 836 2 device_table aligned, 837 3 ndevices fixed bin, /* number of devices used */ 838 3 dvt (16), 839 4 device_id char (8), 840 4 device_rates 841 (0:7) float bin; /* $/hr */ 842 843 /* add the data from current use_totals */ 844 groups (out).projects = groups (out).projects + use_totals.ut (in).nproj; 845 groups (out).users = groups (out).users + use_totals.ut (in).nusers; 846 groups (out).devices$ = groups (out).devices$ + sum (use_totals.ut (in).devices (*)); 847 groups (out).misc_dollars = groups (out).misc_dollars + use_totals.ut (in).misc; 848 groups (out).disk.page_days = groups (out).disk.page_days + use_totals.ut (in).disk_psec; 849 groups (out).disk.page_days$ = groups (out).disk.page_days$ + P.disk_rates * use_totals.ut (in).disk_psec; 850 groups (out).disk.quota = groups (out).disk.quota + use_totals.ut (in).disk_quota; 851 groups (out).disk.usage = groups (out).disk.usage + use_totals.ut (in).disk_usage; 852 groups (out).interactive.shifts (*).cpu = 853 groups (out).interactive.shifts (*).cpu + use_totals.ut (in).interactive (*).cpu; 854 groups (out).interactive.shifts (*).cpu_dollars = 855 groups (out).interactive.shifts (*).cpu_dollars 856 + P.cpu_rates (*) * use_totals.ut (in).interactive (*).cpu / 3.6e9; 857 groups (out).interactive.shifts (*).memory = 858 groups (out).interactive.shifts (*).memory + use_totals.ut (in).interactive (*).core; 859 groups (out).interactive.shifts (*).memory_dollars = 860 groups (out).interactive.shifts (*).memory_dollars 861 + P.memory_rates (*) * use_totals.ut (in).interactive (*).core / 1e6; 862 groups (out).interactive.shifts (*).connect = 863 groups (out).interactive.shifts (*).connect + use_totals.ut (in).interactive (*).connect; 864 groups (out).interactive.shifts (*).ioops = 865 groups (out).interactive.shifts (*).ioops + use_totals.ut (in).interactive (*).io_ops; 866 groups (out).interactive.shifts (*).ioops_dollars = 867 groups (out).interactive.shifts (*).ioops_dollars 868 + P.ioops_rates (*) * use_totals.ut (in).interactive (*).io_ops; 869 groups (out).interactive.shifts (*).total_dollars = 870 groups (out).interactive.shifts (*).total_dollars + use_totals.ut (in).interactive (*).charge; 871 groups (out).interactive.sessions = groups (out).interactive.sessions + use_totals.ut (in).logins; 872 groups (out).absentee.queues (*).cpu = 873 groups (out).absentee.queues (*).cpu + use_totals.ut (in).absentee (*).cpu; 874 groups (out).absentee.queues (*).cpu_dollars = 875 groups (out).absentee.queues (*).cpu_dollars 876 + P.abs_cpu_rates (*) * use_totals.ut (in).absentee (*).cpu / 3.6e9; 877 groups (out).absentee.queues (*).memory = 878 groups (out).absentee.queues (*).memory + use_totals.ut (in).absentee (*).memory; 879 groups (out).absentee.queues (*).memory_dollars = 880 groups (out).absentee.queues (*).memory_dollars 881 + P.abs_memory_rates (*) * use_totals.ut (in).absentee (*).memory / 1e6; 882 groups (out).absentee.queues (*).jobs = 883 groups (out).absentee.queues (*).jobs + use_totals.ut (in).absentee (*).jobs; 884 groups (out).absentee.queues (*).total_dollars = 885 groups (out).absentee.queues (*).total_dollars + use_totals.ut (in).absentee (*).charge; 886 groups (out).iod.queues (*).lines = groups (out).iod.queues (*).lines + use_totals.ut (in).iod (*).lines; 887 groups (out).iod.queues (*).lines_dollars = 888 groups (out).iod.queues (*).lines_dollars + P.lines_rates (*) * use_totals.ut (in).iod (*).lines / 1e3; 889 groups (out).total.today_dollars = 890 groups (out).total.today_dollars + use_totals.ut (in).dollar_charge + use_totals.ut (in).misc; 891 groups (out).total.month_dollars = 892 groups (out).total.month_dollars + use_totals.ut (in).dollar_charge + use_totals.ut (in).misc; 893 894 /* for daily report, subtract off data from old use_totals */ 895 if daily 896 then do; 897 groups (out).devices$ = groups (out).devices$ - sum (xtotp -> use_totals.ut (in).devices (*)); 898 groups (out).misc_dollars = groups (out).misc_dollars - xtotp -> use_totals.ut (in).misc; 899 groups (out).disk.page_days = groups (out).disk.page_days - xtotp -> use_totals.ut (in).disk_psec; 900 groups (out).disk.page_days$ = 901 groups (out).disk.page_days$ - P.disk_rates * xtotp -> use_totals.ut (in).disk_psec; 902 groups (out).interactive.shifts (*).cpu = 903 groups (out).interactive.shifts (*).cpu - xtotp -> use_totals.ut (in).interactive (*).cpu; 904 groups (out).interactive.shifts (*).cpu_dollars = 905 groups (out).interactive.shifts (*).cpu_dollars 906 - P.cpu_rates (*) * xtotp -> use_totals.ut (in).interactive (*).cpu / 3.6e9; 907 groups (out).interactive.shifts (*).memory = 908 groups (out).interactive.shifts (*).memory - xtotp -> use_totals.ut (in).interactive (*).core; 909 groups (out).interactive.shifts (*).memory_dollars = 910 groups (out).interactive.shifts (*).memory_dollars 911 - P.memory_rates (*) * xtotp -> use_totals.ut (in).interactive (*).core / 1e6; 912 groups (out).interactive.shifts (*).connect = 913 groups (out).interactive.shifts (*).connect 914 - xtotp -> use_totals.ut (in).interactive (*).connect; 915 groups (out).interactive.shifts (*).ioops = 916 groups (out).interactive.shifts (*).ioops - xtotp -> use_totals.ut (in).interactive (*).io_ops; 917 groups (out).interactive.shifts (*).ioops_dollars = 918 groups (out).interactive.shifts (*).ioops_dollars 919 - P.ioops_rates (*) * xtotp -> use_totals.ut (in).interactive (*).io_ops; 920 groups (out).interactive.shifts (*).total_dollars = 921 groups (out).interactive.shifts (*).total_dollars 922 - xtotp -> use_totals.ut (in).interactive (*).charge; 923 groups (out).interactive.sessions = 924 groups (out).interactive.sessions - xtotp -> use_totals.ut (in).logins; 925 groups (out).absentee.queues (*).cpu = 926 groups (out).absentee.queues (*).cpu - xtotp -> use_totals.ut (in).absentee (*).cpu; 927 groups (out).absentee.queues (*).cpu_dollars = 928 groups (out).absentee.queues (*).cpu_dollars 929 - P.abs_cpu_rates (*) * xtotp -> use_totals.ut (in).absentee (*).cpu / 3.6e9; 930 groups (out).absentee.queues (*).memory = 931 groups (out).absentee.queues (*).memory - xtotp -> use_totals.ut (in).absentee (*).memory; 932 groups (out).absentee.queues (*).memory_dollars = 933 groups (out).absentee.queues (*).memory_dollars 934 - P.abs_memory_rates (*) * xtotp -> use_totals.ut (in).absentee (*).memory / 1e6; 935 groups (out).absentee.queues (*).jobs = 936 groups (out).absentee.queues (*).jobs - xtotp -> use_totals.ut (in).absentee (*).jobs; 937 groups (out).absentee.queues (*).total_dollars = 938 groups (out).absentee.queues (*).total_dollars - xtotp -> use_totals.ut (in).absentee (*).charge; 939 groups (out).iod.queues (*).lines = 940 groups (out).iod.queues (*).lines - xtotp -> use_totals.ut (in).iod (*).lines; 941 groups (out).iod.queues (*).lines_dollars = 942 groups (out).iod.queues (*).lines_dollars 943 - P.lines_rates (*) * xtotp -> use_totals.ut (in).iod (*).lines / 1e3; 944 groups (out).total.today_dollars = 945 groups (out).total.today_dollars - xtotp -> use_totals.ut (in).dollar_charge 946 - xtotp -> use_totals.ut (in).misc; 947 end; 948 end add_bins; 949 950 conversions_and_sums: 951 proc; 952 953 /* This procedure adds up totals, makes units conversions, calculates the breakdown of charges, 954* calculates some averages, and "rounds" everything for printing. 955* Parameters: 956* all parameters are input */ 957 958 dcl (i, j) fixed bin; 959 960 /* first get the totals for all shifts, all queues, etc. */ 961 do i = 1 to ngroups; 962 groups (i).interactive.total.cpu = sum (groups (i).interactive.shifts (*).cpu); 963 groups (i).interactive.total.memory = sum (groups (i).interactive.shifts (*).memory); 964 groups (i).interactive.total.connect = sum (groups (i).interactive.shifts (*).connect); 965 groups (i).interactive.total.ioops = sum (groups (i).interactive.shifts (*).ioops); 966 groups (i).interactive.total.total_dollars = sum (groups (i).interactive.shifts (*).total_dollars); 967 groups (i).absentee.total.cpu = sum (groups (i).absentee.queues (*).cpu); 968 groups (i).absentee.total.memory = sum (groups (i).absentee.queues (*).memory); 969 groups (i).absentee.total.jobs = sum (groups (i).absentee.queues (*).jobs); 970 groups (i).absentee.total.total_dollars = sum (groups (i).absentee.queues (*).total_dollars); 971 groups (i).iod.total.lines = sum (groups (i).iod.queues (*).lines); 972 end; 973 974 /* now make units conversions. Convert cpu and connect time from microseconds to hours, 975* memory from milli-mu to kmu, and page-seconds to page-days */ 976 groups (*).disk.page_days = groups (*).disk.page_days / (60 * 60 * 24); 977 groups (*).interactive.shifts (*).cpu = groups (*).interactive.shifts (*).cpu / 3.6e9; 978 groups (*).interactive.total.cpu = groups (*).interactive.total.cpu / 3.6e9; 979 groups (*).interactive.shifts (*).connect = groups (*).interactive.shifts (*).connect / 3.6e9; 980 groups (*).interactive.total.connect = groups (*).interactive.total.connect / 3.6e9; 981 groups (*).interactive.shifts (*).memory = groups (*).interactive.shifts (*).memory / 1e6; 982 groups (*).interactive.total.memory = groups (*).interactive.total.memory / 1e6; 983 groups (*).absentee.queues (*).cpu = groups (*).absentee.queues (*).cpu / 3.6e9; 984 groups (*).absentee.total.cpu = groups (*).absentee.total.cpu / 3.6e9; 985 groups (*).absentee.queues (*).memory = groups (*).absentee.queues (*).memory / 1e6; 986 groups (*).absentee.total.memory = groups (*).absentee.total.memory / 1e6; 987 groups (*).total.cpu = groups (*).total.cpu / 3.6e9; 988 groups (*).total.memory = groups (*).total.memory / 1e6; 989 990 /* now calculate the remaining breakdown of charges (those not done by add_bins) */ 991 /* note that because consoleless daemons have connect usage, but do not have 992* connect charges, connect charges are not simply usage*rates. connect charges are 993* therefore calculated by subtracting all other interactive charges from the total 994* interactive charges */ 995 996 do i = 1 to ngroups; 997 groups (i).interactive.total.cpu_dollars = sum (groups (i).interactive.shifts (*).cpu_dollars); 998 groups (i).interactive.total.memory_dollars = sum (groups (i).interactive.shifts (*).memory_dollars); 999 groups (i).interactive.total.ioops_dollars = sum (groups (i).interactive.shifts (*).ioops_dollars); 1000 groups (i).interactive.shifts (*).connect_dollars = 1001 groups (i).interactive.shifts (*).total_dollars - groups (i).interactive.shifts (*).cpu_dollars 1002 - groups (i).interactive.shifts (*).memory_dollars - groups (i).interactive.shifts (*).ioops_dollars; 1003 groups (i).interactive.total.connect_dollars = 1004 groups (i).interactive.total.total_dollars - groups (i).interactive.total.cpu_dollars 1005 - groups (i).interactive.total.memory_dollars - groups (i).interactive.total.ioops_dollars; 1006 groups (i).absentee.total.cpu_dollars = sum (groups (i).absentee.queues (*).cpu_dollars); 1007 groups (i).absentee.total.memory_dollars = sum (groups (i).absentee.queues (*).memory_dollars); 1008 groups (i).iod.total.lines_dollars = sum (groups (i).iod.queues (*).lines_dollars); 1009 end; 1010 1011 /* now get a few more totals */ 1012 groups (*).total.cpu = groups (*).interactive.total.cpu + groups (*).absentee.total.cpu; 1013 groups (*).total.cpu_dollars = groups (*).interactive.total.cpu_dollars + groups (*).absentee.total.cpu_dollars; 1014 groups (*).total.memory = groups (*).interactive.total.memory + groups (*).absentee.total.memory; 1015 groups (*).total.memory_dollars = 1016 groups (*).interactive.total.memory_dollars + groups (*).absentee.total.memory_dollars; 1017 1018 /* calculate a few averages, being careful to avoid zerodivide */ 1019 do i = 1 to ngroups; 1020 do j = 0 to 7; 1021 if groups (i).interactive.shifts (j).connect > 0 1022 then do; 1023 groups (i).interactive.shifts (j).dollars_per_hour = 1024 groups (i).interactive.shifts (j).total_dollars 1025 / groups (i).interactive.shifts (j).connect; 1026 groups (i).interactive.total.dollars_per_hour = 1027 groups (i).interactive.total.total_dollars / groups (i).interactive.total.connect; 1028 end; 1029 end; 1030 if groups (i).interactive.sessions > 0 1031 then do; 1032 groups (i).interactive.dollars_per_session = 1033 groups (i).interactive.total.total_dollars / groups (i).interactive.sessions; 1034 groups (i).interactive.hours_per_session = 1035 groups (i).interactive.total.connect / groups (i).interactive.sessions; 1036 end; 1037 do j = 1 to 4; 1038 if groups (i).absentee.queues (j).jobs > 0 1039 then groups (i).absentee.queues (j).dollars_per_job = 1040 groups (i).absentee.queues (j).total_dollars / groups (i).absentee.queues (j).jobs; 1041 end; 1042 if groups (i).absentee.total.jobs > 0 1043 then groups (i).absentee.total.dollars_per_job = 1044 groups (i).absentee.total.total_dollars / groups (i).absentee.total.jobs; 1045 end; 1046 1047 /* "Round" */ 1048 groups (*).devices$ = groups (*).devices$ + sign (groups (*).devices$) * 5e-3; 1049 groups (*).misc_dollars = groups (*).misc_dollars + sign (groups (*).misc_dollars) * 5e-3; 1050 groups (*).interactive = groups (*).interactive + sign (groups (*).interactive) * 5e-3; 1051 groups (*).disk = groups (*).disk + sign (groups (*).disk) * 5e-3; 1052 groups (*).absentee = groups (*).absentee + sign (groups (*).absentee) * 5e-3; 1053 groups (*).iod = groups (*).iod + sign (groups (*).iod) * 5e-3; 1054 groups (*).total = groups (*).total + sign (groups (*).total) * 5e-3; 1055 groups (*).disk.page_days = groups (*).disk.page_days + sign (groups (*).disk.page_days) * .495e0; 1056 1057 /* et voil'a, ready to be printed */ 1058 end conversions_and_sums; 1059 1060 revenue_summary: 1061 proc (daily, titles); 1062 1063 /* This procedure prints the Revenue Summary portion of the report. 1064* Parameters: 1065* daily - input - "1"b if daily report, "0"b if monthly report 1066* titles - input - the titles to be printed at beginning of report */ 1067 dcl i fixed bin, 1068 daily bit (1); 1069 dcl 1 titles, /* Titles for 1st page */ 1070 2 company char (120), /* Company name, double spaced */ 1071 2 dept char (120), /* department name, double spaced */ 1072 2 report_title char (50), /* ...usage and revenue report */ 1073 2 time_span char (42), /* For mm/dd/yy hhmm dddto mm/dd/yy hhmm ddd */ 1074 2 system char (24); /* Current System: xxx */ 1075 dcl usage format; /* this is used to select the formats for either the daily or monthly report */ 1076 1077 /* formats for monthly report */ 1078 f1: 1079 format (skip, col (20), a (7), x (9), a (3), x (8), a (6), x (5), a (8), x (8), a (4), x (8), a (4), x (35), 1080 a (5)); 1081 f2: 1082 format (skip, col (21), a (5), x (9), a (5), x (9), a (3), x (9), a (3), x (8), a (7), x (4), a (9), x (6), 1083 a (7), x (8), a (5), x (6), a (7)); 1084 f3: 1085 format (skip, col (2), a (5), x (7), 3 p "zz,zzz,zz9.v99", 3 p "z,zzz,zzz,zz9v"); 1086 f4: 1087 format (skip, col (2), a (8), x (4), 9 p "--,---,--9.v99"); 1088 1089 /* formats for daily report */ 1090 f5: 1091 format (skip, col (18), a (7), x (8), a (3), x (7), a (6), x (4), a (8), x (7), a (4), x (7), a (4), x (32), 1092 a (5), x (7), a (5)); 1093 f6: 1094 format (skip, col (19), a (5), x (8), a (5), x (8), a (3), x (8), a (3), x (7), a (7), x (3), a (9), x (5), 1095 a (7), x (7), a (5), x (5), a (7), x (5), a (7)); 1096 f7: 1097 format (skip, col (2), a (5), x (6), 3 p "z,zzz,zz9.v99", 3 p "zzzz,zzz,zz9v"); 1098 f8: 1099 format (skip, col (2), a (8), x (3), 10 p "-,---,--9.v99"); 1100 1101 1102 /* print titles for 1st page */ 1103 call print_centered (23 - 2 * ngroups, titles.company); 1104 call print_centered (2, titles.dept); 1105 call print_centered (2, titles.report_title); 1106 call print_centered (2, titles.time_span); 1107 call print_centered (2, titles.system); 1108 call print_centered (2, "R__e_v_e_n_u_e S__u_m_m_a_r_y"); 1109 if daily 1110 then do; /* assign formats and print headers for daily report */ 1111 usage = f7; 1112 put skip (2) edit ("Connect", "CPU", "Memory", "Terminal", "Unit", "Disk", "Total", "Month") (r (f5)); 1113 put edit ("Hours", "Hours", "Kmu", "I/O", "Records", "Page-Days", "Devices", "Misc.", "Charges", 1114 "Charges") (r (f6)); 1115 end; 1116 else do; /* assign formats and print headers for monthly report */ 1117 usage = f3; 1118 put skip (2) edit ("Connect", "CPU", "Memory", "Terminal", "Unit", "Disk", "Total") (r (f1)); 1119 put edit ("Hours", "Hours", "Kmu", "I/O", "Records", "Page-Days", "Devices", "Misc.", "Charges") 1120 (r (f2)); 1121 end; 1122 do i = 1 to ngroups; 1123 put edit (groups (i).title) (skip (2), a); 1124 put edit ("Usage", groups (i).total.connect, groups (i).total.cpu, groups (i).total.memory, 1125 groups (i).interactive.total.ioops, groups (i).iod.total.lines, groups (i).disk.page_days) (r (usage)) 1126 ; 1127 if daily 1128 then put edit ("$Charges", groups (i).total.connect_dollars, groups (i).total.cpu_dollars, 1129 groups (i).total.memory_dollars, groups (i).interactive.total.ioops_dollars, 1130 groups (i).iod.total.lines_dollars, groups (i).disk.page_days$, groups (i).devices$, 1131 groups (i).misc_dollars, groups (i).total.today_dollars, groups (i).total.month_dollars) (r (f8)) 1132 ; 1133 else put edit ("$Charges", groups (i).total.connect_dollars, groups (i).total.cpu_dollars, 1134 groups (i).total.memory_dollars, groups (i).interactive.total.ioops_dollars, 1135 groups (i).iod.total.lines_dollars, groups (i).disk.page_days$, groups (i).devices$, 1136 groups (i).misc_dollars, groups (i).total.today_dollars) (r (f4)); 1137 end; 1138 end revenue_summary; 1139 1140 interactive_summary: 1141 proc (short_date); 1142 1143 /* This procedure prints the Interactive Summary portion of the report. 1144* Parameter: 1145* short_date - input - the date to be printed at top of each page */ 1146 dcl shift_used (0:7) fixed bin; 1147 dcl nshifts fixed bin; 1148 dcl short_date char (8); 1149 dcl i fixed bin, 1150 shift_names (0:7) char (8) 1151 init ("Shift 0:", "Shift 1:", "Shift 2:", "Shift 3:", "Shift 4:", "Shift 5:", "Shift 6:", 1152 "Shift 7:"); 1153 1154 f0: 1155 format (page, a (8), col (127), a (4), p "z9"); 1156 f1: 1157 format (skip, x (76 - 6 * ngroups), 9 a (12)); 1158 f2: 1159 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "z,zzz,zz9.v99"); 1160 f3: 1161 format (skip, x (66 - 6 * ngroups), a (10), 9 p "-,---,--9.v99"); 1162 f4: 1163 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "zzzz,zzz,zz9v"); 1164 f5: 1165 format (skip, x (66 - 6 * ngroups), a (10), 9 p "----,---,--9v"); 1166 1167 shift_used = 0; 1168 do i = 0 to 7; 1169 if sum (groups (*).interactive.shifts (i).cpu) > 0 1170 then shift_used (i) = 1; 1171 end; 1172 nshifts = sum (shift_used); 1173 if nshifts > 0 1174 then do; 1175 put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1176 call print_centered (1, "I__n_t_e_r_a_c_t_i_v_e S__u_m_m_a_r_y:_ C_P_U_ H__o_u_r_s"); 1177 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1178 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1179 do i = 0 to 7; 1180 if shift_used (i) > 0 1181 then put file (sysprint) 1182 edit (shift_names (i), "Usage", groups (*).interactive.shifts (i).cpu) (r (f2)) 1183 ("$Charges", groups (*).interactive.shifts (i).cpu_dollars) (r (f3)); 1184 end; 1185 put file (sysprint) 1186 edit ("Total:", "Usage", groups (*).interactive.total.cpu) (r (f2)) 1187 ("$Charges", groups (*).interactive.total.cpu_dollars) (r (f3)); 1188 end; 1189 shift_used = 0; 1190 do i = 0 to 7; 1191 if sum (groups (*).interactive.shifts (i).connect) > 0 1192 then shift_used (i) = 1; 1193 end; 1194 nshifts = sum (shift_used); 1195 if nshifts > 0 1196 then do; 1197 if lineno (sysprint) > 50 - 3 * nshifts 1198 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1199 else put file (sysprint) skip (3); 1200 call print_centered (1, "I__n_t_e_r_a_c_t_i_v_e S__u_m_m_a_r_y:_ C__o_n_n_e_c_t H__o_u_r_s"); 1201 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1202 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1203 do i = 0 to 7; 1204 if shift_used (i) > 0 1205 then put file (sysprint) 1206 edit (shift_names (i), "Usage", groups (*).interactive.shifts (i).connect) (r (f2)) 1207 ("$Charges", groups (*).interactive.shifts (i).connect_dollars) (r (f3)); 1208 end; 1209 put file (sysprint) 1210 edit ("Total:", "Usage", groups (*).interactive.total.connect) (r (f2)) 1211 ("$Charges", groups (*).interactive.total.connect_dollars) (r (f3)); 1212 end; 1213 shift_used = 0; 1214 do i = 0 to 7; 1215 if sum (groups (*).interactive.shifts (i).memory) > 0 1216 then shift_used (i) = 1; 1217 end; 1218 nshifts = sum (shift_used); 1219 if nshifts > 0 1220 then do; 1221 if lineno (sysprint) > 50 - 3 * nshifts 1222 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1223 else put file (sysprint) skip (3); 1224 call print_centered (1, "I__n_t_e_r_a_c_t_i_v_e S__u_m_m_a_r_y:_ M__e_m_o_r_y K__m_u"); 1225 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1226 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1227 do i = 0 to 7; 1228 if shift_used (i) > 0 1229 then put file (sysprint) 1230 edit (shift_names (i), "Usage", groups (*).interactive.shifts (i).memory) (r (f2)) 1231 ("$Charges", groups (*).interactive.shifts (i).memory_dollars) (r (f3)); 1232 end; 1233 put file (sysprint) 1234 edit ("Total:", "Usage", groups (*).interactive.total.memory) (r (f2)) 1235 ("$Charges", groups (*).interactive.total.memory_dollars) (r (f3)); 1236 end; 1237 shift_used = 0; 1238 do i = 0 to 7; 1239 if sum (groups (*).interactive.shifts (i).ioops) > 0 1240 then shift_used (i) = 1; 1241 end; 1242 nshifts = sum (shift_used); 1243 if nshifts > 0 1244 then do; 1245 if lineno (sysprint) > 50 - 3 * nshifts 1246 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1247 else put file (sysprint) skip (3); 1248 call print_centered (1, "I__n_t_e_r_a_c_t_i_v_e S__u_m_m_a_r_y:_ T__e_r_m_i_n_a_l I_/_O_"); 1249 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1250 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1251 do i = 0 to 7; 1252 if shift_used (i) > 0 1253 then put file (sysprint) 1254 edit (shift_names (i), "Usage", groups (*).interactive.shifts (i).ioops) (r (f4)) 1255 ("$Charges", groups (*).interactive.shifts (i).ioops_dollars) (r (f3)); 1256 end; 1257 put file (sysprint) 1258 edit ("Total:", "Usage", groups (*).interactive.total.ioops) (r (f2)) 1259 ("$Charges", groups (*).interactive.total.ioops_dollars) (r (f3)); 1260 end; 1261 shift_used = 0; 1262 do i = 0 to 7; 1263 if sum (groups (*).interactive.shifts (i).total_dollars) > 0 1264 then shift_used (i) = 1; 1265 end; 1266 nshifts = sum (shift_used); 1267 if nshifts > 0 1268 then do; 1269 if lineno (sysprint) > 47 - 3 * nshifts 1270 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1271 else put file (sysprint) skip (3); 1272 call print_centered (1, "I__n_t_e_r_a_c_t_i_v_e S__u_m_m_a_r_y: T__o_t_a_l I__n_t_e_r_a_c_t_i_v_e C__h_a_r_g_e_s"); 1273 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1274 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1275 do i = 0 to 7; 1276 if shift_used (i) > 0 1277 then put file (sysprint) 1278 edit (shift_names (i), "$Charges", groups (*).interactive.shifts (i).total_dollars) 1279 (r (f2)) ("$/Hour", groups (*).interactive.shifts (i).dollars_per_hour) (r (f3)); 1280 end; 1281 put file (sysprint) 1282 edit ("Total:", "$Charges", groups (*).interactive.total.total_dollars) (r (f2)) 1283 ("$/Hour", groups (*).interactive.total.dollars_per_hour) (r (f3)) 1284 ("Sessions", groups (*).interactive.sessions) (r (f5)) 1285 ("$/Session", groups (*).interactive.dollars_per_session) (r (f3)) 1286 ("Hr/Session", groups (*).interactive.hours_per_session) (r (f3)); 1287 end; 1288 end interactive_summary; 1289 1290 absentee_summary: 1291 proc (short_date); 1292 1293 /* this procedure prints the Absentee Summary portion of the report. 1294* Parameter: 1295* short_date - input - the date to print at top of each page */ 1296 dcl short_date char (8); 1297 dcl queue_used (4) fixed bin; 1298 dcl nqueues fixed bin; 1299 dcl i fixed bin, 1300 queue_names (4) char (8) init ("Queue 1:", "Queue 2:", "Queue 3:", "Queue 4:"); 1301 1302 f0: 1303 format (page, a (8), col (127), a (4), p "z9"); 1304 f1: 1305 format (skip, x (76 - 6 * ngroups), 9 a (12)); 1306 f2: 1307 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "z,zzz,zz9.v99"); 1308 f3: 1309 format (skip, x (66 - 6 * ngroups), a (10), 9 p "-,---,--9.v99"); 1310 f4: 1311 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "zzzz,zzz,zz9v"); 1312 f5: 1313 format (skip, x (66 - 6 * ngroups), a (10), 9 p "----,---,--9v"); 1314 1315 queue_used = 0; 1316 do i = 1 to 4; 1317 if sum (groups (*).absentee.queues (i).cpu) > 0 1318 then queue_used (i) = 1; 1319 end; 1320 nqueues = sum (queue_used); 1321 if nqueues > 0 1322 then do; 1323 put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1324 call print_centered (1, "A__b_s_e_n_t_e_e S__u_m_m_a_r_y:_ C_P_U_ H__o_u_r_s"); 1325 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1326 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1327 do i = 1 to 4; 1328 if queue_used (i) > 0 1329 then put file (sysprint) 1330 edit (queue_names (i), "Usage", groups (*).absentee.queues (i).cpu) (r (f2)) 1331 ("$Charges", groups (*).absentee.queues (i).cpu_dollars) (r (f3)); 1332 end; 1333 put file (sysprint) 1334 edit ("Total:", "Usage", groups (*).absentee.total.cpu) (r (f2)) 1335 ("$Charges", groups (*).absentee.total.cpu_dollars) (r (f3)); 1336 end; 1337 queue_used = 0; 1338 do i = 1 to 4; 1339 if sum (groups (*).absentee.queues (i).memory) > 0 1340 then queue_used (i) = 1; 1341 end; 1342 nqueues = sum (queue_used); 1343 if nqueues > 0 1344 then do; 1345 if lineno (sysprint) > 50 - 3 * nqueues 1346 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1347 else put file (sysprint) skip (3); 1348 call print_centered (1, "A__b_s_e_n_t_e_e S__u_m_m_a_r_y:_ M__e_m_o_r_y K__m_u"); 1349 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1350 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1351 do i = 1 to 4; 1352 if queue_used (i) > 0 1353 then put file (sysprint) 1354 edit (queue_names (i), "Usage", groups (*).absentee.queues (i).memory) (r (f2)) 1355 ("$Charges", groups (*).absentee.queues (i).memory_dollars) (r (f3)); 1356 end; 1357 put file (sysprint) 1358 edit ("Total", "Usage", groups (*).absentee.total.memory) (r (f2)) 1359 ("$Charges", groups (*).absentee.total.memory_dollars) (r (f3)); 1360 end; 1361 do i = 1 to 4; 1362 if sum (groups (*).absentee.queues (i).total_dollars) > 0 1363 then queue_used (i) = 1; 1364 end; 1365 nqueues = sum (queue_used); 1366 if nqueues > 0 1367 then do; 1368 if lineno (sysprint) > 49 - 3 * nqueues 1369 then put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1370 else put file (sysprint) skip (3); 1371 call print_centered (1, "A__b_s_e_n_t_e_e S__u_m_m_a_r_y: T__o_t_a_l A__b_s_e_n_t_e_e C__h_a_r_g_e_s"); 1372 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1373 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1374 do i = 1 to 4; 1375 if queue_used (i) > 0 1376 then put file (sysprint) 1377 edit (queue_names (i), "$Charges", groups (*).absentee.queues (i).total_dollars) 1378 (r (f2)) ("Jobs", groups (*).absentee.queues (i).jobs) (r (f5)) 1379 ("$/Job", groups (*).absentee.queues (i).dollars_per_job) (r (f3)); 1380 end; 1381 put file (sysprint) 1382 edit ("Total:", "$Charges", groups (*).absentee.total.total_dollars) (r (f2)) 1383 ("Jobs", groups (*).absentee.total.jobs) (r (f5)) 1384 ("$/Job", groups (*).absentee.total.dollars_per_job) (r (f3)); 1385 end; 1386 end absentee_summary; 1387 1388 iod_summary: 1389 proc (short_date); 1390 1391 /* This procedure prints the IO Daemon Summary portion of the report. 1392* Parameter: 1393* short_date - input - the date to be printed at top of each page */ 1394 dcl queue_used (4) fixed bin; 1395 dcl nqueues fixed bin; 1396 dcl short_date char (8); 1397 dcl i fixed bin, 1398 queue_names (4) char (8) init ("Queue 1:", "Queue 2:", "Queue 3:", "Queue 4:"); 1399 1400 f0: 1401 format (page, a (8), col (127), a (4), p "z9"); 1402 f1: 1403 format (skip, x (76 - 6 * ngroups), 9 a (12)); 1404 f2: 1405 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "z,zzz,zz9.v99"); 1406 f3: 1407 format (skip, x (66 - 6 * ngroups), a (10), 9 p "-,---,--9.v99"); 1408 f4: 1409 format (skip (2), x (56 - 6 * ngroups), a (8), x (2), a (10), 9 p "zzzz,zzz,zz9v"); 1410 f5: 1411 format (skip, x (66 - 6 * ngroups), a (10), 9 p "----,---,--9v"); 1412 1413 queue_used = 0; 1414 do i = 1 to 4; 1415 if sum (groups (*).iod.queues (i).lines) > 0 1416 then queue_used (i) = 1; 1417 end; 1418 nqueues = sum (queue_used); 1419 if nqueues > 0 1420 then do; 1421 put file (sysprint) edit (short_date, "Page", pageno (sysprint)) (r (f0)); 1422 call print_centered (1, "I_/_O_ D__a_e_m_o_n S__u_m_m_a_r_y:_ L__i_n_e_s"); 1423 put file (sysprint) edit (groups (*).title_line_1) (skip, r (f1)); 1424 put file (sysprint) edit (groups (*).title_line_2) (r (f1)); 1425 do i = 1 to 4; 1426 if queue_used (i) > 0 1427 then put file (sysprint) 1428 edit (queue_names (i), "Usage", groups (*).iod.queues (i).lines) (r (f4)) 1429 ("$Charges", groups (*).iod.queues (i).lines_dollars) (r (f3)); 1430 end; 1431 put file (sysprint) 1432 edit ("Total:", "Usage", groups (*).iod.total.lines) (r (f4)) 1433 ("$Charges", groups (*).iod.total.lines_dollars) (r (f3)); 1434 end; 1435 end iod_summary; 1436 1437 system_stats: 1438 proc (daily, short_date); 1439 1440 /* This procedure extracts system usage info from use_totals and prints the System Statistics 1441* portion of the report. 1442* Parameters: 1443* daily - input - "1"b if daily report, "0"b if monthly 1444* short_date - input - date to be printed at top of pages */ 1445 dcl (day_units, total_units) 1446 float bin, 1447 (i, j) fixed bin, 1448 daily bit (1), 1449 short_date char (8); 1450 dcl days float bin, 1451 (xcpu, xmem) fixed bin; 1452 dcl 1 sys_stats (3), /* today,average,month */ 1453 ( 2 starts, 1454 2 crashes, 1455 2 mtbf, 1456 2 hrs_avail, 1457 2 cpu_avail, 1458 2 two_cpu, 1459 2 cpu_billed, 1460 2 overhead, 1461 2 idle, 1462 2 zidle, 1463 2 mpidle, 1464 2 nmpidle, 1465 2 max_units, 1466 2 reconfigs 1467 ) float bin; 1468 1469 /* daily formats */ 1470 f0: 1471 format (skip (2), col (76), a (5), x (6), a (5)); 1472 f1: 1473 format (skip, x (40), a (29), p "zzz,zzz,zz9v", p "zzz,zzz,zz9v"); 1474 f2: 1475 format (skip, x (40), a (29), p "zzzz,zz9.v99", p "zzzz,zz9.v99"); 1476 f3: 1477 format (skip, x (42), a (27), p "zzzz,zz9.v99", p "zzzz,zz9.v99"); 1478 1479 /* monthly formats */ 1480 1481 f4: 1482 format (skip, x (40), a (29), p "zzzz,zz9.v99", p "zzz,zzz,zz9v"); 1483 f5: 1484 format (skip, x (40), a (29), x (11), p "zzzz,zz9.v99"); 1485 f6: 1486 format (skip, x (40), a (29), 2 p "zzzz,zz9.v99"); 1487 f7: 1488 format (skip, x (42), a (27), x (11), p "zzzz,zz9.v99"); 1489 f8: 1490 format (skip (3), col (75), a (5), col (74), a (7), x (6), a (5)); 1491 1492 sys_stats (3).starts = use_totals.sys_starts; 1493 sys_stats (3).crashes = use_totals.sys_crash; 1494 sys_stats (3).hrs_avail = use_totals.uptime; 1495 sys_stats (3).cpu_avail = use_totals.cpu_avail; 1496 sys_stats (3).cpu_billed = use_totals.total_cpu; 1497 sys_stats (3).idle = use_totals.idle; 1498 sys_stats (3).zidle = use_totals.zidle; 1499 sys_stats (3).mpidle = use_totals.mpidle; 1500 1501 if daily 1502 then do; 1503 sys_stats (1).starts = sys_stats (3).starts - xtotp -> use_totals.sys_starts; 1504 sys_stats (1).crashes = sys_stats (3).crashes - xtotp -> use_totals.sys_crash; 1505 sys_stats (1).hrs_avail = sys_stats (3).hrs_avail - xtotp -> use_totals.uptime; 1506 sys_stats (1).cpu_avail = sys_stats (3).cpu_avail - xtotp -> use_totals.cpu_avail; 1507 sys_stats (1).cpu_billed = sys_stats (3).cpu_billed - xtotp -> use_totals.total_cpu; 1508 sys_stats (1).idle = sys_stats (3).idle - xtotp -> use_totals.idle; 1509 sys_stats (1).zidle = sys_stats (3).zidle - xtotp -> use_totals.zidle; 1510 sys_stats (1).mpidle = sys_stats (3).mpidle - xtotp -> use_totals.mpidle; 1511 end; 1512 xcpu, xmem = -1; 1513 sys_stats (3).reconfigs = -1; 1514 sys_stats (1).reconfigs = 0; 1515 sys_stats (1).max_units, sys_stats (3).max_units = 0; 1516 day_units, total_units = 0; 1517 do i = 1 to use_totals.max_day_log; 1518 do j = 1 1519 to 96 * bin (i ^= use_totals.max_day_log) + use_totals.max_qhour * bin (i = use_totals.max_day_log); 1520 if ^(use_totals.daylog (i).qh (j).cpu = xcpu & use_totals.daylog (i).qh (j).kmem = xmem) 1521 & use_totals.daylog (i).qh (j).cpu ^= 0 1522 then do; 1523 sys_stats (3).reconfigs = sys_stats (3).reconfigs + 1; 1524 if daily 1525 then if use_totals.daylog (i).qh (j).time > xtotp -> use_totals.period_end 1526 then sys_stats (1).reconfigs = sys_stats (1).reconfigs + 1; 1527 xcpu = use_totals.daylog (i).qh (j).cpu; 1528 xmem = use_totals.daylog (i).qh (j).kmem; 1529 end; 1530 if daily 1531 then if use_totals.daylog (i).qh (j).time > xtotp -> use_totals.period_end 1532 then if use_totals.daylog (i).qh (j).nunits > sys_stats (1).max_units 1533 then sys_stats (1).max_units = use_totals.daylog (i).qh (j).nunits; 1534 if use_totals.daylog (i).qh (j).nunits > sys_stats (3).max_units 1535 then sys_stats (3).max_units = use_totals.daylog (i).qh (j).nunits; 1536 if use_totals.daylog (i).qh (j).nunits > day_units 1537 then day_units = use_totals.daylog (i).qh (j).nunits; 1538 end; 1539 total_units = total_units + day_units; 1540 day_units = 0; 1541 end; 1542 sys_stats (3).mtbf = sys_stats (3).hrs_avail / (sys_stats (3).crashes + 1); 1543 sys_stats (3).two_cpu = sys_stats (3).cpu_avail - sys_stats (3).hrs_avail; 1544 if daily 1545 then do; 1546 sys_stats (1).mtbf = sys_stats (1).hrs_avail / (sys_stats (1).crashes + 1); 1547 sys_stats (1).two_cpu = sys_stats (1).cpu_avail - sys_stats (1).hrs_avail; 1548 end; 1549 if sys_stats (3).cpu_avail > 0 1550 then do; 1551 sys_stats (3).overhead = 1552 (sys_stats (3).cpu_avail - sys_stats (3).cpu_billed - sys_stats (3).idle) 1553 / sys_stats (3).cpu_avail * 100e0; 1554 sys_stats (3).idle = sys_stats (3).idle / sys_stats (3).cpu_avail * 100e0; 1555 sys_stats (3).zidle = sys_stats (3).zidle / sys_stats (3).cpu_avail * 100e0; 1556 sys_stats (3).mpidle = sys_stats (3).mpidle / sys_stats (3).cpu_avail * 100e0; 1557 sys_stats (3).nmpidle = sys_stats (3).idle - sys_stats (3).zidle - sys_stats (3).mpidle; 1558 end; 1559 if daily 1560 then if sys_stats (1).cpu_avail > 0 1561 then do; 1562 sys_stats (1).overhead = 1563 (sys_stats (1).cpu_avail - sys_stats (1).cpu_billed - sys_stats (1).idle) 1564 / sys_stats (1).cpu_avail * 100e0; 1565 sys_stats (1).idle = sys_stats (1).idle / sys_stats (1).cpu_avail * 100e0; 1566 sys_stats (1).zidle = sys_stats (1).zidle / sys_stats (1).cpu_avail * 100e0; 1567 sys_stats (1).mpidle = sys_stats (1).mpidle / sys_stats (1).cpu_avail * 100e0; 1568 sys_stats (1).nmpidle = sys_stats (1).idle - sys_stats (1).zidle - sys_stats (1).mpidle; 1569 end; 1570 sys_stats (3).hrs_avail = sys_stats (3).hrs_avail / 3.6e9; 1571 sys_stats (3).cpu_avail = sys_stats (3).cpu_avail / 3.6e9; 1572 sys_stats (3).cpu_billed = sys_stats (3).cpu_billed / 3.6e9; 1573 sys_stats (3).two_cpu = sys_stats (3).two_cpu / 3.6e9; 1574 sys_stats (3).mtbf = sys_stats (3).mtbf / 3.6e9; 1575 sys_stats (3).max_units = sys_stats (3).max_units / 10e0; 1576 if daily 1577 then do; 1578 sys_stats (1).hrs_avail = sys_stats (1).hrs_avail / 3.6e9; 1579 sys_stats (1).cpu_avail = sys_stats (1).cpu_avail / 3.6e9; 1580 sys_stats (1).cpu_billed = sys_stats (1).cpu_billed / 3.6e9; 1581 sys_stats (1).two_cpu = sys_stats (1).two_cpu / 3.6e9; 1582 sys_stats (1).mtbf = sys_stats (1).mtbf / 3.6e9; 1583 sys_stats (1).max_units = sys_stats (1).max_units / 10e0; 1584 end; 1585 if ^daily 1586 then do; 1587 days = use_totals.period_end - use_totals.period_begin; 1588 days = days / 8.64e10; 1589 sys_stats (2).starts = sys_stats (3).starts / days; 1590 sys_stats (2).crashes = sys_stats (3).crashes / days; 1591 sys_stats (2).hrs_avail = sys_stats (3).hrs_avail / days; 1592 sys_stats (2).cpu_avail = sys_stats (3).cpu_avail / days; 1593 sys_stats (2).two_cpu = sys_stats (3).two_cpu / days; 1594 sys_stats (2).cpu_billed = sys_stats (3).cpu_billed / days; 1595 sys_stats (2).reconfigs = sys_stats (3).reconfigs / days; 1596 sys_stats (2).max_units = total_units / (days * 10e0); 1597 end; 1598 1599 /* "Round" */ 1600 sys_stats = sys_stats + 5e-3; 1601 1602 put edit (short_date, "Page", pageno (sysprint)) (page, a (8), col (127), a (4), p "z9"); 1603 if ^daily 1604 then put skip (6); 1605 call print_centered (4, "S__y_s_t_e_m P__e_r_f_o_r_m_a_n_c_e _a_n_d A__v_a_i_l_a_b_i_l_i_t_y"); 1606 1607 if daily 1608 then do; 1609 put edit ("Today", "Month") (r (f0)); 1610 put skip; 1611 put edit ("Starts", (sys_stats (i).starts do i = 1, 3)) (r (f1)); 1612 put edit ("Crashes", (sys_stats (i).crashes do i = 1, 3)) (r (f1)); 1613 put edit ("Mean Time Between Failures", (sys_stats (i).mtbf do i = 1, 3)) (r (f2)); 1614 put edit ("Hours Available", (sys_stats (i).hrs_avail do i = 1, 3)) (r (f2)); 1615 put edit ("CPU Hours", (sys_stats (i).cpu_avail do i = 1, 3)) (r (f2)); 1616 put edit ("Two-CPU Hours", (sys_stats (i).two_cpu do i = 1, 3)) (r (f2)); 1617 put edit ("Virtual CPU Hours Billed", (sys_stats (i).cpu_billed do i = 1, 3)) (r (f2)); 1618 put edit ("% CPU Overhead", (sys_stats (i).overhead do i = 1, 3)) (r (f2)); 1619 put edit ("% Idle", (sys_stats (i).idle do i = 1, 3)) (r (f2)); 1620 put edit ("% Zero Idle", (sys_stats (i).zidle do i = 1, 3)) (r (f3)); 1621 put edit ("% Multiprogramming Idle", (sys_stats (i).mpidle do i = 1, 3)) (r (f3)); 1622 put edit ("% Nonmultiprogramming Idle", (sys_stats (i).nmpidle do i = 1, 3)) (r (f3)); 1623 put edit ("Maximum Load Units", (sys_stats (i).max_units do i = 1, 3)) (r (f2)); 1624 put edit ("Reconfigurations", (sys_stats (i).reconfigs do i = 1, 3)) (r (f1)); 1625 end; 1626 else do; 1627 put edit ("Daily", "Average", "Month") (r (f8)); 1628 put skip; 1629 put edit ("Starts", (sys_stats (i).starts do i = 2, 3)) (r (f4)); 1630 put edit ("Crashes", (sys_stats (i).crashes do i = 2, 3)) (r (f4)); 1631 put edit ("Mean Time Between Failures", sys_stats (3).mtbf) (r (f5)); 1632 put edit ("Hours Available", (sys_stats (i).hrs_avail do i = 2, 3)) (r (f6)); 1633 put edit ("CPU Hours", (sys_stats (i).cpu_avail do i = 2, 3)) (r (f6)); 1634 put edit ("Two-CPU Hours", (sys_stats (i).two_cpu do i = 2, 3)) (r (f6)); 1635 put edit ("Virtual CPU Hours Billed", (sys_stats (i).cpu_billed do i = 2, 3)) (r (f6)); 1636 put edit ("% CPU Overhead", sys_stats (3).overhead) (r (f5)); 1637 put edit ("% Idle", sys_stats (3).idle) (r (f5)); 1638 put edit ("% Zero Idle", sys_stats (3).zidle) (r (f7)); 1639 put edit ("% Multiprogramming Idle", sys_stats (3).mpidle) (r (f7)); 1640 put edit ("% Nonmultiprogramming Idle", sys_stats (3).nmpidle) (r (f7)); 1641 put edit ("Maximum Load Units", (sys_stats (i).max_units do i = 2, 3)) (r (f6)); 1642 put edit ("Reconfigurations", (sys_stats (i).reconfigs do i = 2, 3)) (r (f4)); 1643 end; 1644 end system_stats; 1645 1646 disk_stats: 1647 proc (); 1648 1649 /* this procedure prints out the Disk Statistics portion of the report. */ 1650 dcl i fixed bin; 1651 1652 call print_centered (3, "D__i_s_k S__t_a_t_i_s_t_i_c_s: U__s_e _o_f >__u_d_d S__t_o_r_a_g_e"); 1653 put edit ("Quota", "Used") (skip (2), x (73), a (5), x (7), a (4)); 1654 put skip; 1655 do i = 1 to ngroups; 1656 put edit (groups (i).title, groups (i).disk.quota, groups (i).disk.usage) 1657 (skip, x (43), a (24), 2 p "zzz,zzz,zz9v"); 1658 end; 1659 end disk_stats; 1660 1661 times_available: 1662 proc; 1663 1664 /* This procedure extracts data from the daylog portion of use_totals and prints 1665* the Times Available section of the report. */ 1666 dcl (i, j) fixed bin, 1667 (from, to) char (17), 1668 (lup, ldown) char (14), 1669 (ctime, stime) fixed bin (71), 1670 reason char (12); 1671 1672 call print_centered (3, "T__i_m_e_s A__v_a_i_l_a_b_l_e T__o_d_a_y"); 1673 put edit ("Length of", "Length of") (skip (2), x (68), a (9), x (21), a (9)); 1674 put edit ("From", "To", "Uptime", "Reason Down", "Downtime") 1675 (skip, x (32), a (4), x (17), a (2), x (15), a (6), x (5), a (13), x (5), a (8)); 1676 put skip; 1677 ctime = 0; 1678 do i = 1 to use_totals.max_day_log; 1679 do j = 1 1680 to 96 * bin (i ^= use_totals.max_day_log) + use_totals.max_qhour * bin (i = use_totals.max_day_log); 1681 if use_totals.daylog (i).qh (j).crashtime > xtotp -> use_totals.period_end 1682 & use_totals.daylog (i).qh (j).crashtime < use_totals.period_end 1683 & use_totals.daylog (i).qh (j).time ^= 0 1684 then do; 1685 reason = ""; 1686 if use_totals.daylog (i).qh (j).dump_number ^= 0 1687 then reason = ltrim (char (use_totals.daylog (i).qh (j).dump_number)); 1688 else if j = 96 1689 then if use_totals.daylog (i + 1).qh (1).dump_number ^= 0 1690 then reason = ltrim (char (use_totals.daylog (i + 1).qh (1).dump_number)); 1691 else ; 1692 else if use_totals.daylog (i).qh (j + 1).dump_number ^= 0 1693 then reason = ltrim (char (use_totals.daylog (i).qh (j + 1).dump_number)); 1694 if reason ^= "shutdown" & reason ^= "crash" & reason ^= "" 1695 then reason = "crash #" || reason; 1696 if ctime > 0 1697 then do; 1698 call elapsed_time (use_totals.daylog (i).qh (j).starttime - ctime, ldown); 1699 put edit (ldown) (x (1), a (14)); 1700 end; 1701 ctime = use_totals.daylog (i).qh (j).crashtime; 1702 to = format_time (use_totals.daylog (i).qh (j).crashtime); 1703 from = format_time (use_totals.daylog (i).qh (j).starttime); 1704 call elapsed_time (use_totals.daylog (i).qh (j).crashtime 1705 - use_totals.daylog (i).qh (j).starttime, lup); 1706 put edit (from, to, lup, reason) 1707 (skip, x (26), a (17), x (3), a (17), x (1), a (14), x (3), a (12)); 1708 end; 1709 end; 1710 end; 1711 if use_totals.daylog (max_day_log).qh (max_qhour).time > 0 1712 then stime = use_totals.daylog (max_day_log).qh (max_qhour).starttime; 1713 else stime = use_totals.period_end; 1714 if ctime > 0 1715 then do; 1716 call elapsed_time (stime - ctime, ldown); 1717 put edit (ldown) (x (1), a (14)); 1718 end; 1719 if stime > ctime 1720 then do; 1721 from = format_time (stime); 1722 put edit (from) (skip, x (26), a (17)); 1723 end; 1724 elapsed_time: 1725 proc (time, string); 1726 1727 /* This procedure converts a time in microseconds into a character string repesenting the 1728* time in hours and minutes 1729* Parameters: 1730* time - input - the time in microseconds 1731* string - output - character representation of the time */ 1732 /* 1 min = 60,000,000 microseconds 1733* 1 hour = 3,600,000,000 microseconds */ 1734 1735 dcl (time, temp, temp2) fixed bin (71), 1736 string char (*), 1737 minutes pic "z9", 1738 hours pic "zzz9"; 1739 1740 if time <= 0 1741 then do; 1742 string = ""; 1743 return; 1744 end; 1745 temp = time; 1746 temp2 = divide (temp, 3600000000, 71, 0); 1747 hours = min (temp2, 9999); 1748 temp = temp - multiply (temp2, 3600000000, 71, 0); 1749 temp2 = divide (temp + 30000000, 60000000, 71, 0); 1750 minutes = temp2; 1751 if hours > 0 1752 then string = hours || " Hr " || minutes || " Min"; 1753 else string = " " || minutes || " Min"; 1754 end elapsed_time; 1755 end times_available; 1756 1757 group_composition: 1758 proc (short_date); 1759 1760 /* This procedure prints out the group composition section of the report 1761* Parameter: 1762* short_date - input - date to be printed at top of each page */ 1763 dcl (total, ll, i, j, k, m, n) 1764 fixed bin, 1765 temp char (12), 1766 short_date char (8), 1767 s char (24) var, 1768 bin_used (hbound (groups.bins, 2)) fixed bin init ((hbound (groups.bins, 2)) 0), 1769 ioa_$rsnnl entry options (variable); 1770 1771 put edit (short_date, "Page", pageno (sysprint)) (page, a (8), col (127), a (4), p "z9"); 1772 call print_centered (1, "C__o_m_p_o_s_i_t_i_o_n _o_f _t_h_e G__r_o_u_p_s _i_n _t_h_i_s R_e__p_o_r_t"); 1773 do i = 1 to ngroups; 1774 call ioa_$rsnnl ("^a", s, m, groups (i).title); 1775 put edit ("""", s, """ consists of ") (skip (2), x (30), a (1), a, a (14)); 1776 ll = 21 + m; 1777 call ioa_$rsnnl ("^d", s, m, groups (i).projects); 1778 if groups (i).projects > 1 1779 then do; 1780 put edit (s, " projects with ") (a, a (15)); 1781 ll = ll + 15 + m; 1782 end; 1783 else do; 1784 put edit (s, " project with ") (a, a (14)); 1785 ll = ll + 14 + m; 1786 end; 1787 call ioa_$rsnnl ("^d", s, m, groups (i).users); 1788 if groups (i).projects > 1 1789 then do; 1790 put edit (s, " users. The projects are") (a, a (25)); 1791 ll = ll + 25 + m; 1792 end; 1793 else do; 1794 put edit (s, " users. The project is") (a, a (23)); 1795 ll = ll + 23 + m; 1796 end; 1797 total = 0; 1798 do j = 1 to hbound (groups.bins, 2) while (groups (i).bins (j) > 0); 1799 bin_used (groups (i).bins (j)) = 1; 1800 n = 0; 1801 do k = 1 to use_totals.n_select; 1802 if use_totals.select_ut (k) = groups (i).bins (j) 1803 then n = n + 1; 1804 end; 1805 if n = 0 1806 then total = total + 1; 1807 else total = total + n; 1808 end; 1809 n = 0; 1810 do j = 1 to hbound (groups.bins, 2) while (groups (i).bins (j) > 0); 1811 do k = 1 to use_totals.n_select; 1812 if use_totals.select_ut (k) = groups (i).bins (j) 1813 then do; 1814 n = n + 1; 1815 temp = use_totals.select_proj (k); 1816 call print (n, total, ll, temp); 1817 end; 1818 end; 1819 end; 1820 if n < total 1821 then do; 1822 n = n + 1; 1823 call print (n, total, ll, "all projects not otherwise specified"); 1824 end; 1825 if sum (groups (i).groups (*)) > 0 1826 then do; 1827 call print (n, total, ll, "those projects included in the group(s)"); 1828 total = 0; 1829 do j = 1 to 9 while (groups (i).groups (j) > 0); 1830 total = total + 1; 1831 end; 1832 do j = 1 to 9 while (groups (i).groups (j) > 0); 1833 call print (j, total, ll, groups (groups (i).groups (j)).title); 1834 end; 1835 end; 1836 put edit (".") (a (1)); 1837 end; 1838 if sum (bin_used) < ntypes 1839 then do; 1840 total, m, n = 0; 1841 do j = 1 to ntypes; 1842 if bin_used (j) = 0 1843 then do; 1844 n = n + use_totals.ut (j).nproj; 1845 m = m + use_totals.ut (j).nusers; 1846 do k = 1 to use_totals.n_select; 1847 if use_totals.select_ut (k) = j 1848 then total = total + 1; 1849 end; 1850 end; 1851 end; 1852 if n ^= 0 1853 then do; 1854 call ioa_$rsnnl ("^d", s, k, n); 1855 put edit (s, " projects with ") (skip (2), x (30), a, a (15)); 1856 ll = 20 + k; 1857 call ioa_$rsnnl ("^d", s, k, m); 1858 put edit (s, " users are not included in this report. The projects are") (a, a (57)); 1859 ll = k + 56; 1860 n = 0; 1861 do j = 1 to ntypes; 1862 if bin_used (j) = 0 1863 then do; 1864 n = n + 1; 1865 do k = 1 to use_totals.n_select; 1866 if use_totals.select_ut (k) = j 1867 then do; 1868 n = n + 1; 1869 temp = use_totals.select_proj (k); 1870 call print (n, total, ll, temp); 1871 end; 1872 end; 1873 end; 1874 end; 1875 put edit (".") (a (1)); 1876 end; 1877 end; 1878 print: 1879 proc (n, total, ll, title); 1880 1881 /* This procedure is called to print each item in the list of projects belonging to a group. 1882* It determines what to put between items (, or and) and where to break lines. 1883* Parameters: 1884* n - input - the position of the item in the list 1885* total - input - the total number of items in the list 1886* ll - input,output - the column position within the current output line 1887* title - input - the item to be printed */ 1888 1889 dcl (n, total, ll) fixed bin, 1890 title char (*), 1891 s char (120) var, 1892 m fixed bin; 1893 1894 call ioa_$rsnnl ("^a", s, m, title); 1895 if ll + m > 85 1896 then do; 1897 if n > 1 1898 then if n < total 1899 then put edit (",", s) (a, skip, x (26), a); 1900 else put edit (" and", s) (a, skip, x (26), a); 1901 else put edit (s) (skip, x (26), a); 1902 ll = m; 1903 end; 1904 else do; 1905 if n > 1 1906 then if n < total 1907 then put edit (", ", s) (a, a); 1908 else put edit (" and ", s) (a, a); 1909 else put edit (s) (x (1), a); 1910 ll = ll + m + 2; 1911 end; 1912 end print; 1913 end group_composition; 1914 1915 rates_and_shifts: 1916 proc (P, shift_table, short_date); 1917 1918 /* This procedure prints the Rates portion of the report. 1919* Parameters: 1920* are all input parameters */ 1921 1922 dcl 1 P, /* all the prices for one rate structure */ 1923 2 rs_name char (32), /* name for this rate */ 1924 2 abs_cpu_rates (1:4) float bin, /* installation price for absentee cpu time ($/hr) */ 1925 2 abs_memory_rates 1926 (1:4) float bin, /* installation price for absentee memory usage ($/Kmu) */ 1927 2 connect_rates (0:7) float bin, /* installation price for terminal connect time ($/hr) */ 1928 2 memory_rates (0:7) float bin, /* installation price for memory usage ($/Kmu) */ 1929 2 disk_rates float bin, /* installation price for disk storage ($/page-sec) */ 1930 2 cpu_rates (0:7) float bin, /* installation price for interactive cpu time ($/hr) */ 1931 2 lines_rates (1:4) float bin, /* installation price for line printer lines ($/K-lines) */ 1932 2 ioops_rates (0:7) float bin, /* installation price for I/O operations ($/K) */ 1933 2 reg_rates float bin, /* user registration charge ($/month) */ 1934 2 device_table aligned, 1935 3 ndevices fixed bin, /* number of devices used */ 1936 3 dvt (16), 1937 4 device_id char (8), 1938 4 device_rates 1939 (0:7) float bin; /* $/hr */ 1940 dcl shift_table (336) fixed bin, /* table of shift #'s for each half hour in week */ 1941 shifts (7, 0:47) fixed bin def (shift_table), 1942 day_names (7) char (3) init ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), 1943 (shift, start_time, end_time, day, day2, time, time2, cur_shft) 1944 fixed bin, 1945 (match, this_shift_used) 1946 bit (1); 1947 dcl nn (4) fixed bin, 1948 (i, j, k, l, n) fixed bin, 1949 s char (8) var, 1950 yes bit (1), 1951 ioa_$rsnnl entry options (variable); 1952 dcl short_date char (8); 1953 1954 1955 put edit (short_date, "Page", pageno (sysprint)) (page, a (8), col (127), a (4), p "z9"); 1956 call print_centered (1, "The following prices are currently in effect for rate structure - " || rs_name); 1957 call print_centered (2, "I__n_t_e_r_a_c_t_i_v_e R__a_t_e_s"); 1958 put edit ("CPU", "Connect", "Memory", "Terminal I/O") 1959 (skip (2), x (53), a (3), x (8), a (7), x (9), a (6), x (3), a (12)); 1960 put skip; 1961 do i = 0 to 7; 1962 if cpu_rates (i) > 0 | memory_rates (i) > 0 | connect_rates (i) > 0 | ioops_rates (i) > 0 1963 then put edit ("Shift", i, ":", cpu_rates (i) + 5e-3, "/Hr", connect_rates (i) + 5e-3, "/Hr", 1964 memory_rates (i) + 5e-3, "/Kmu", ioops_rates (i) + 5e-3, "/K") 1965 (skip, x (33), a (5), p "z9", a (1), 2 (p "$,$$$,$$9.v99", a (3)), p "$$$$,$$9.v99", a (4), 1966 p "$$,$$$,$$9.v99", a (2)); 1967 end; 1968 call print_centered (2, "A__b_s_e_n_t_e_e R__a_t_e_s"); 1969 put edit ("CPU", "Memory") (skip (2), x (68), a (3), x (9), a (6)); 1970 put skip; 1971 do i = 1 to 4; 1972 if abs_cpu_rates (i) > 0 | abs_memory_rates (i) > 0 1973 then put edit ("Queue", i, ":", abs_cpu_rates (i) + 5e-3, "/Hr", abs_memory_rates (i) + 5e-3, "/Kmu") 1974 (skip, x (49), a (5), p "z9", a (1), p "$$$$,$$9.v99", a (3), p "$$$$,$$9.v99", a (4)); 1975 end; 1976 call print_centered (2, "I_/_O_ D__a_e_m_o_n R__a_t_e_s"); 1977 put edit ("Lines") (skip (2), x (72), a (5)); 1978 put skip; 1979 do i = 1 to 4; 1980 if lines_rates (i) > 0 1981 then put edit ("Queue", i, ":", lines_rates (i) + 5e-3, "/K") 1982 (skip, x (55), a (5), p "z9", a (1), p "$,$$$,$$9.v99", a (2)); 1983 end; 1984 yes = "0"b; 1985 do i = 1 to ndevices; 1986 if sum (dvt (i).device_rates (*)) > 0 1987 then yes = "1"b; 1988 end; 1989 if yes 1990 then do; 1991 call print_centered (2, "D__e_v_i_c_e R__a_t_e_s"); 1992 i = 1; 1993 do while (i <= ndevices); 1994 nn = 0; 1995 n = 1; 1996 do while (n <= 4 & i <= ndevices); 1997 if sum (dvt (i).device_rates (*)) > 0 1998 then do; 1999 nn (n) = i; 2000 n = n + 1; 2001 end; 2002 i = i + 1; 2003 end; 2004 n = n - 1; 2005 if n > 0 2006 then do; 2007 call ioa_$rsnnl ("^a", s, l, dvt (nn (1)).device_id); 2008 put edit (s) (skip (2), x ((156 - n * 15) / 2), x (8 - l), a); 2009 do j = 2 to n; 2010 call ioa_$rsnnl ("^a", s, l, dvt (nn (j)).device_id); 2011 put edit (s) (x (7), x (8 - l), a); 2012 end; 2013 put skip; 2014 do j = 0 to 7; 2015 yes = "0"b; 2016 do k = 1 to n while (^yes); 2017 if dvt (nn (k)).device_rates (j) > 0 2018 then yes = "1"b; 2019 end; 2020 if yes 2021 then do; 2022 put edit ("Shift", j, ":") 2023 (skip, x ((126 - n * 15) / 2), a (5), p "z9", a (1)); 2024 do k = 1 to n; 2025 put edit (dvt (nn (k)).device_rates (j) + 5e-3, "/Hr") 2026 (p "$,$$$,$$9.v99", a (3)); 2027 end; 2028 end; 2029 end; 2030 end; 2031 end; 2032 end; 2033 if reg_rates > 0 | disk_rates > 0 2034 then do; 2035 call print_centered (2, "O__t_h_e_r R__a_t_e_s"); 2036 put skip; 2037 if disk_rates > 0 2038 then put edit (disk_rates * 2592e3 + 5e-3, "/disk-page per month (", disk_rates, "/page-second )") 2039 (skip, x (35), p "$$$,$$9.v99", a, e (16), a); 2040 if reg_rates > 0 2041 then put edit (reg_rates, " per month registration fee per user") (skip, x (42), p "$$$,$$9.v99", a); 2042 end; 2043 call print_centered (3, "The current shift schedule is:"); 2044 put edit ("Shift", "Hours", "Days") (skip (2), x (44), a (5), x (3), a (5), x (5), a (4)); 2045 put skip; 2046 do shift = 0 to 7; 2047 this_shift_used = "0"b; 2048 do day = 1 to 7; 2049 cur_shft = -2; 2050 do time = 0 to 47; 2051 if shifts (day, time) = shift & cur_shft ^= shift 2052 then do; 2053 start_time = time; 2054 cur_shft = shift; 2055 end; 2056 if (shifts (day, time) ^= shift | time = 47) & cur_shft = shift 2057 then do; 2058 if shifts (day, time) = shift 2059 then end_time = time; 2060 else end_time = time - 1; 2061 cur_shft = -2; 2062 do time2 = start_time to end_time; 2063 shifts (day, time2) = -1; 2064 end; 2065 if ^this_shift_used 2066 then do; 2067 this_shift_used = "1"b; 2068 put edit (shift) (skip, x (46), p "9"); 2069 end; 2070 put edit (start_time / 2, mod (start_time, 2) * 30, "-", (end_time + 1) / 2, 2071 mod (end_time + 1, 2) * 30) (col (51), 2 p "99", a (1), 2 p "99"); 2072 put edit (day_names (day)) (x (3), a); 2073 do day2 = day + 1 to 7; 2074 match = "1"b; 2075 do time2 = start_time to end_time; 2076 if shifts (day2, time2) ^= shift 2077 then match = "0"b; 2078 end; 2079 if match 2080 then if start_time ^= 0 2081 then if shifts (day2, start_time - 1) = shift 2082 then match = "0"b; 2083 if match 2084 then if end_time ^= 47 2085 then if shifts (day2, end_time + 1) = shift 2086 then match = "0"b; 2087 if match 2088 then do; 2089 put edit (",", day_names (day2)) (a, a); 2090 do time2 = start_time to end_time; 2091 shifts (day2, time2) = -1; 2092 end; 2093 end; 2094 end; 2095 end; 2096 end; 2097 end; 2098 end; 2099 end rates_and_shifts; 2100 2101 footnote: 2102 proc (short_date); 2103 2104 /* this procedure checks to see if a segment named usage_and_revenue_footnote exists in the working directory. 2105* If it does, its contents are printed following the report. 2106* Parameter: 2107* short_date - input - date to be printed at top of each page. */ 2108 dcl null builtin; 2109 dcl note char (nl) based (np), 2110 nl fixed bin, 2111 np ptr, 2112 (i, j) fixed bin, 2113 bit_count fixed bin (24), 2114 ec fixed bin (35), 2115 short_date char (8), 2116 NL char (1) init (" 2117 "); 2118 dcl get_wdir_ entry returns (char (168)); 2119 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)) 2120 ; 2121 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 2122 2123 call initiate_file_ (get_wdir_ (), "usage_and_revenue_footnote", R_ACCESS, np, bit_count, ec); 2124 if ec ^= 0 2125 then return; 2126 nl = divide (bit_count, 9, 17, 0); 2127 put edit (short_date, "Page", pageno (sysprint)) (page, a (8), col (127), a (4), p "z9"); 2128 put skip (3); 2129 j = 1; 2130 do i = 1 to nl; 2131 if substr (note, i, 1) = NL 2132 then do; 2133 put edit (substr (note, j, i - j)) (skip, x (15), a (i - j)); 2134 j = i + 1; 2135 end; 2136 else if i - j > 100 2137 then do; 2138 put edit (substr (note, j, i - j + 1)) (skip, x (15), a (i - j + 1)); 2139 j = i; 2140 end; 2141 end; 2142 call terminate_file_ (np, (0), TERM_FILE_TERM, (0)); 2143 end; 2144 2145 clean_up: 2146 proc (use_totals_ptr, xtotp, gptr); 2147 2148 /* This procedure terminates the use_totals segments, deletes the temporary 2149* segment used for groups and prints a final CR. 2150* Parameters: 2151* use_totals_ptr,xtotp - input - pointer to use_totals segment to be terminated 2152* gptr - input - pointer to temporary segment to be deleted */ 2153 2154 dcl (use_totals_ptr, xtotp, gptr) 2155 ptr; 2156 2157 dcl ec fixed bin (35); 2158 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 2159 dcl release_temp_segment_ 2160 entry (character (*), pointer, fixed binary (35)); 2161 2162 if use_totals_ptr ^= null () 2163 then call terminate_file_ (use_totals_ptr, (0), TERM_FILE_TERM, ec); 2164 if xtotp ^= null () 2165 then call terminate_file_ (xtotp, (0), TERM_FILE_TERM, ec); 2166 if gptr ^= null () 2167 then call release_temp_segment_ (ME, gptr, ec); 2168 if P_ptr ^= null () 2169 then free P; 2170 P_ptr = null (); 2171 put file (sysprint) skip; 2172 close file (sysprint); 2173 end clean_up; 2174 2175 format_time: 2176 proc (time) returns (char (*)); 2177 2178 /* this procedure returns a character representation of the time, formatted slightly differently from the way 2179* that date_time_ formats it. 2180* Parameter: 2181* time -input - system clock time */ 2182 2183 dcl time fixed bin (71), 2184 date_time_str char (24), 2185 date char (9) def date_time_str pos (1), 2186 stime char (4) def date_time_str pos (11), 2187 day char (4) def date_time_str pos (21); 2188 dcl date_time_ entry (fixed bin (71), char (*)); 2189 2190 call date_time_ (time, date_time_str); 2191 return (date || stime || day); 2192 end format_time; 2193 2194 print_centered: 2195 proc (skips, string); 2196 2197 /* print_centered prints one line which consists of the input parameter "string" centered on a 2198* 132-character line with "skips" NL's at the beginning of the line. 2199* Parameters: 2200* skips - input - # of NL's 2201* string - input - string to be centered and printed */ 2202 2203 dcl string char (*), /* input parameter */ 2204 skips fixed bin; 2205 dcl (i, j, k, l) fixed bin; 2206 dcl (verify, length, reverse, translate) 2207 builtin; 2208 2209 dcl BS char (1) init (""); /* backspace */ 2210 dcl non_print char (32) /* All control characters from octal 0 to octal 40 except 2211* backspace */ init (" 2212  "); 2213 2214 2215 i = verify (string, non_print); /* ignore leading blanks and control characters */ 2216 if i = 0 2217 then do; /* if there are no printable characters then print 2218* a blank line and return */ 2219 put file (sysprint) skip (skips); 2220 return; 2221 end; 2222 j = length (string) - verify (reverse (string), non_print) + 1; 2223 l = j - i + 1; /* length of string without leading and trailing blanks and 2224* control characters */ 2225 do k = i to j; 2226 if substr (string, k, 1) = BS 2227 then l = l - 2; /* subtract 2 from length for each backspace in the string */ 2228 end; /* print the line, substituting blanks for all 2229* control characters in the string */ 2230 put file (sysprint) skip (skips) 2231 edit (translate (substr (string, i, j - i + 1), "", non_print)) (x (66 - l / 2), a); 2232 end print_centered; 2233 end usage_and_revenue; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1133.7 usage_and_revenue.pl1 >special_ldd>online>41-15-04/10/85>usage_and_revenue.pl1 162 1 04/09/85 1109.7 access_mode_values.incl.pl1 >special_ldd>online>41-15-04/10/85>access_mode_values.incl.pl1 163 2 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 165 3 12/07/84 1102.2 use_totals.incl.pl1 >ldd>include>use_totals.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. BS 000104 automatic char(1) initial unaligned dcl 2209 set ref 2209* 2226 ME 000002 constant char(32) initial unaligned dcl 158 set ref 214* 274* 280* 297* 354* 361* 368* 456* 459* 467* 476* 485* 494* 507* 518* 533* 559* 587* 608* 2166* NL 000101 automatic char(1) initial unaligned dcl 671 in procedure "get_line" set ref 671* 681 NL 000110 automatic char(1) initial unaligned dcl 2109 in procedure "footnote" set ref 2109* 2131 OK parameter bit(1) unaligned dcl 330 in procedure "get_seg_from_arg" set ref 317 349* 355* 362* 369* OK parameter bit(1) unaligned dcl 250 in procedure "process_args" set ref 237 275* 283* 287* 288* 289 292* 293 300* 306* 307 OK parameter bit(1) unaligned dcl 433 in procedure "parse_control_file" set ref 422 460* 468* 477* 486* 495* 508* 520* 534* 562* 589* 609* OK 000117 automatic bit(1) unaligned dcl 22 in procedure "usage_and_revenue" set ref 179* 180 185* 186 P based structure array level 1 unaligned dcl 53 in procedure "usage_and_revenue" set ref 174 193 197* 197 200* 206* 227 229* 2168 P parameter structure level 1 unaligned dcl 1922 in procedure "rates_and_shifts" set ref 1915 P parameter structure level 1 unaligned dcl 824 in procedure "add_bins" ref 810 P parameter structure level 1 unaligned dcl 384 in procedure "get_prices" set ref 375 P_ptr 000264 automatic pointer dcl 52 set ref 168* 174* 193 194 197 197 198 200 206 227 229 229 2168 2168 2170* R_ACCESS 000176 constant bit(3) initial unaligned dcl 1-11 set ref 365* 2123* TERM_FILE_TERM 001223 constant bit(3) initial unaligned dcl 2-14 set ref 2142* 2162* 2164* USE_TOTALS_VERSION_3 000000 constant char(8) initial unaligned dcl 3-123 ref 295 309 abs_cpu_rates 10 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 417* abs_cpu_rates 10 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1972 1972 abs_cpu_rates 10 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 874 927 abs_memory_rates 14 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 879 932 abs_memory_rates 14 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 417* abs_memory_rates 14 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1972 1972 absentee 1324 based structure array level 2 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" set ref 805* 1052* 1052 1052 absentee 576042 based structure array level 4 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" addr builtin function dcl 82 ref 419 419 all_bins 466 based fixed bin(17,0) array level 2 dcl 90 set ref 205 205 206* 206 543* 546* 548 593* 593 all_done 001253 automatic bit(1) unaligned dcl 433 set ref 574* 575 576* 600* 606 all_processed 001435 automatic bit(1) initial array level 2 packed unaligned dcl 449 set ref 449* 571* 578 581 602* ap parameter pointer dcl 330 in procedure "get_seg_from_arg" set ref 317 350* ap parameter pointer dcl 250 in procedure "process_args" set ref 237 271* 288* 292* 303* 306* arg based char unaligned dcl 330 set ref 358* 361* arg_count 001215 automatic fixed bin(17,0) dcl 262 set ref 271* 278 arg_list_ptr 000106 automatic pointer dcl 22 set ref 178* 179* arglen 001214 automatic fixed bin(21,0) dcl 250 in procedure "process_args" set ref 303* arglen 001230 automatic fixed bin(21,0) dcl 330 in procedure "get_seg_from_arg" set ref 350* 358 358 361 361 argno parameter fixed bin(17,0) dcl 330 set ref 317 350* argptr 001226 automatic pointer dcl 330 in procedure "get_seg_from_arg" set ref 350* 358 361 argptr 001212 automatic pointer dcl 250 in procedure "process_args" set ref 303* b parameter bit(1) unaligned dcl 730 set ref 719 749* 753* b_and_w 76 based structure level 2 dcl 3-15 bin builtin function dcl 82 in procedure "usage_and_revenue" ref 1518 1518 1679 1679 bin 001255 automatic bit(1) unaligned dcl 442 in procedure "parse_control_file" set ref 491* 499 539* bin_data 544304 based structure array level 3 dcl 3-15 bin_used 000121 automatic fixed bin(17,0) initial array dcl 1763 set ref 1763* 1799* 1838 1842 1862 bins 544302 based structure level 2 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" bins based fixed bin(17,0) array level 2 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 480* 513 513 516 523* 546 584 1763 1763 1798 1798 1799 1802 1810 1810 1812 bit_count 000106 automatic fixed bin(24,0) dcl 2109 set ref 2123* 2126 c parameter char unaligned dcl 671 set ref 661 678 681 686 689* charge 576042 based float bin(27) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 884 937 charge 575722 based float bin(27) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 869 920 cleanup 001006 stack reference condition dcl 160 ref 169 clen parameter fixed bin(17,0) dcl 433 in procedure "parse_control_file" ref 422 464 464 541 541 clen 000111 automatic fixed bin(17,0) dcl 22 in procedure "usage_and_revenue" set ref 179* 185* clen parameter fixed bin(17,0) dcl 250 in procedure "process_args" set ref 237 291* com_err_ 000070 constant entry external dcl 439 in procedure "parse_control_file" ref 459 467 476 485 494 507 518 533 559 587 608 com_err_ 000024 constant entry external dcl 74 in procedure "usage_and_revenue" ref 214 com_err_ 000056 constant entry external dcl 348 in procedure "get_seg_from_arg" ref 354 361 368 com_err_ 000040 constant entry external dcl 265 in procedure "process_args" ref 274 297 com_err_$suppress_name 000046 constant entry external dcl 268 ref 280 company parameter char(120) level 2 in structure "titles" packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1103* company parameter char(120) level 2 in structure "titles" packed unaligned dcl 769 in procedure "make_titles" set ref 778* connect 1313 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 964* 980* 980 1026 1034 1124 1209 connect 1173 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 862* 862 912* 912 964 979* 979 1021 1023 1191 1204 connect 575730 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 862 912 connect_dollars 1174 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1000* 1204 connect_dollars 1314 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1003* 1127 1133 1209 connect_rates 20 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* connect_rates 20 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1962 1962 control based char unaligned dcl 446 set ref 464* 541* core 575726 based fixed bin(71,0) array level 5 dcl 3-15 ref 857 859 907 909 count 001126 automatic fixed bin(24,0) dcl 250 in procedure "process_args" set ref 288* 291 292* 306* count parameter fixed bin(24,0) dcl 330 in procedure "get_seg_from_arg" set ref 317 365* cptr 000102 automatic pointer dcl 22 in procedure "usage_and_revenue" set ref 179* 185* cptr parameter pointer dcl 250 in procedure "process_args" set ref 237 288* cptr parameter pointer dcl 433 in procedure "parse_control_file" ref 422 464 541 cpu 575724 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 852 854 902 904 cpu 576044 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 872 874 925 927 cpu 1324 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 872* 872 925* 925 967 983* 983 1317 1328 cpu 1401 based float bin(27) array level 3 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 987* 987 1012* 1124 cpu 1167 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 852* 852 902* 902 962 977* 977 1169 1180 cpu 1360 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 967* 984* 984 1012 1333 cpu 107 based fixed bin(5,0) array level 5 in structure "use_totals" packed unsigned unaligned dcl 3-15 in procedure "usage_and_revenue" ref 1520 1520 1527 cpu 1307 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 962* 978* 978 1012 1185 cpu_avail 24 based fixed bin(71,0) level 3 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 1495 1506 cpu_avail 4 000107 automatic float bin(27) array level 2 in structure "sys_stats" dcl 1452 in procedure "system_stats" set ref 1495* 1506* 1506 1543 1547 1549 1551 1551 1554 1555 1556 1559 1562 1562 1565 1566 1567 1571* 1571 1579* 1579 1592* 1592 1615 1633 cpu_billed 6 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1496* 1507* 1507 1551 1562 1572* 1572 1580* 1580 1594* 1594 1617 1635 cpu_dollars 1402 based float bin(27) array level 3 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1013* 1127 1133 cpu_dollars 1361 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1006* 1013 1333 cpu_dollars 1310 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 997* 1003 1013 1185 cpu_dollars 1170 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 854* 854 904* 904 997 1000 1180 cpu_dollars 1325 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 874* 874 927* 927 1006 1328 cpu_rates 41 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1962 1962 cpu_rates 41 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 854 904 cpu_rates 41 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* crashes 1 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1493* 1504* 1504 1542 1546 1590* 1590 1612 1630 crashtime 112 based fixed bin(71,0) array level 5 dcl 3-15 set ref 1681 1681 1701 1702* 1704 ctime 000124 automatic fixed bin(71,0) dcl 1666 set ref 1677* 1696 1698 1701* 1714 1716 1719 cu_$arg_count_rel 000044 constant entry external dcl 267 ref 271 cu_$arg_list_ptr 000022 constant entry external dcl 73 ref 178 cu_$arg_ptr_rel 000042 constant entry external dcl 265 in procedure "process_args" ref 303 cu_$arg_ptr_rel 000050 constant entry external dcl 343 in procedure "get_seg_from_arg" ref 350 cur_shft 000115 automatic fixed bin(17,0) dcl 1940 set ref 2049* 2051 2054* 2056 2061* daily parameter bit(1) unaligned dcl 822 in procedure "add_bins" ref 810 895 daily parameter bit(1) unaligned dcl 768 in procedure "make_titles" ref 759 779 782 daily 000116 automatic bit(1) unaligned dcl 22 in procedure "usage_and_revenue" set ref 179* 202* 206* 217* 221* 223 225 227 daily parameter bit(1) unaligned dcl 1445 in procedure "system_stats" ref 1437 1501 1524 1530 1544 1559 1576 1585 1603 1607 daily parameter bit(1) unaligned dcl 1067 in procedure "revenue_summary" ref 1060 1109 1127 daily parameter bit(1) unaligned dcl 250 in procedure "process_args" set ref 237 312* 314* date defined char(9) unaligned dcl 2183 ref 2191 date_time_ 000114 constant entry external dcl 2188 ref 2190 date_time_str 000100 automatic char(24) unaligned dcl 2183 set ref 2190* 2191 2191 2191 2191 2191 2191 day 000111 automatic fixed bin(17,0) dcl 1940 in procedure "rates_and_shifts" set ref 2048* 2051 2056 2058 2063 2072 2073* day defined char(4) unaligned dcl 2183 in procedure "format_time" ref 2191 day2 000112 automatic fixed bin(17,0) dcl 1940 set ref 2073* 2076 2079 2083 2089 2091* day_names 000100 automatic char(3) initial array unaligned dcl 1940 set ref 1940* 1940* 1940* 1940* 1940* 1940* 1940* 2072 2089 day_units 000100 automatic float bin(27) dcl 1445 set ref 1516* 1536 1536* 1539 1540* daylog 102 based structure array level 3 dcl 3-15 days 000104 automatic float bin(27) dcl 1450 set ref 1587* 1588* 1588 1589 1590 1591 1592 1593 1594 1595 1596 dept 36 parameter char(120) level 2 in structure "titles" packed unaligned dcl 769 in procedure "make_titles" set ref 778* dept 36 parameter char(120) level 2 in structure "titles" packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1104* device_id 67 parameter char(8) array level 4 dcl 1922 set ref 2007* 2010* device_rates 71 parameter float bin(27) array level 4 dcl 1922 ref 1986 1997 2017 2025 device_table 66 parameter structure level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" device_table 66 parameter structure level 2 in structure "P" dcl 384 in procedure "get_prices" devices 576122 based float bin(27) array level 4 dcl 3-15 ref 846 897 devices$ 1161 based float bin(27) array level 2 dcl 90 set ref 801* 846* 846 897* 897 1048* 1048 1048 1127 1133 disk 1163 based structure array level 2 unaligned dcl 90 set ref 803* 1051* 1051 1051 disk_psec 575670 based fixed bin(71,0) array level 4 dcl 3-15 ref 848 849 899 900 disk_quota 575672 based fixed bin(35,0) array level 4 dcl 3-15 ref 850 disk_rates 40 parameter float bin(27) level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* disk_rates 40 parameter float bin(27) level 2 in structure "P" dcl 824 in procedure "add_bins" ref 849 900 disk_rates 40 parameter float bin(27) level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 2033 2037 2037 2037 disk_usage 575673 based fixed bin(35,0) array level 4 dcl 3-15 ref 851 divide builtin function dcl 82 ref 291 1746 1749 2126 dn 001127 automatic char(168) unaligned dcl 250 in procedure "process_args" set ref 288* 292* 297* 306* dn parameter char unaligned dcl 330 in procedure "get_seg_from_arg" set ref 317 358* 365* 368* dollar_charge 575662 based float bin(27) array level 4 dcl 3-15 ref 889 891 944 dollars_per_hour 1320 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1026* 1281 dollars_per_hour 1200 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1023* 1276 dollars_per_job 1332 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1038* 1375 dollars_per_job 1366 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1042* 1381 dollars_per_session 1322 based float bin(27) array level 3 dcl 90 set ref 1032* 1281 dummy 002672 automatic char(1) unaligned dcl 776 set ref 778* 778* dump_number 106 based fixed bin(18,0) array level 5 packed unsigned unaligned dcl 3-15 ref 1686 1686 1688 1688 1692 1692 dvt 67 parameter structure array level 3 in structure "P" dcl 384 in procedure "get_prices" set ref 419 419 dvt 67 parameter structure array level 3 in structure "P" dcl 1922 in procedure "rates_and_shifts" ec 001211 automatic fixed bin(35,0) dcl 250 in procedure "process_args" set ref 271* 272 274* 303* 304 ec 001254 automatic fixed bin(35,0) dcl 433 in procedure "parse_control_file" set ref 456* 457 459* ec 000100 automatic fixed bin(35,0) dcl 2157 in procedure "clean_up" set ref 2162* 2164* 2166* ec 001224 automatic fixed bin(35,0) dcl 330 in procedure "get_seg_from_arg" set ref 350* 352 354* 358* 359 361* 365* 366 368* ec 000107 automatic fixed bin(35,0) dcl 2109 in procedure "footnote" set ref 2123* 2124 ec 000115 automatic fixed bin(35,0) dcl 22 in procedure "usage_and_revenue" set ref 194* 195 en parameter char unaligned dcl 330 in procedure "get_seg_from_arg" set ref 317 358* 365* 368* en 001201 automatic char(32) unaligned dcl 250 in procedure "process_args" set ref 288* 292* 297* 306* end_of_file 001261 automatic bit(1) unaligned dcl 444 set ref 464* 465 472 541* 689* end_of_line 001260 automatic bit(1) unaligned dcl 444 set ref 482* 483 491* 492 498 539* end_time 000110 automatic fixed bin(17,0) dcl 1940 set ref 2058* 2060* 2062 2070 2070 2075 2083 2083 2090 eof parameter bit(1) unaligned dcl 671 set ref 661 678* 682* 688* eol parameter bit(1) unaligned dcl 705 in procedure "get_group_title" set ref 695 711* 715* eol parameter bit(1) unaligned dcl 730 in procedure "get_bin_title" set ref 719 738* 741* error_table_$unimplemented_version 000036 external static fixed bin(35,0) dcl 263 set ref 297* expand_pathname_$add_suffix 000052 constant entry external dcl 344 ref 358 first_time 000120 automatic bit(1) initial unaligned dcl 22 set ref 22* from 000102 automatic char(17) unaligned dcl 1666 set ref 1703* 1706 1721* 1722 get_temp_segment_ 000072 constant entry external dcl 440 ref 456 get_wdir_ 000102 constant entry external dcl 2118 ref 2123 2123 gptr 000104 automatic pointer dcl 22 in procedure "usage_and_revenue" set ref 168* 171* 188* 205 205 206 206 213* 235* 456* 480 489 490 490 490 513 513 516 523 543 544 546 546 548 554 567 584 587 593 593 801 802 803 804 805 806 807 844 844 845 845 846 846 847 847 848 848 849 849 850 850 851 851 852 852 854 854 857 857 859 859 862 862 864 864 866 866 869 869 871 871 872 872 874 874 877 877 879 879 882 882 884 884 886 886 887 887 889 889 891 891 897 897 898 898 899 899 900 900 902 902 904 904 907 907 909 909 912 912 915 915 917 917 920 920 923 923 925 925 927 927 930 930 932 932 935 935 937 937 939 939 941 941 944 944 962 962 963 963 964 964 965 965 966 966 967 967 968 968 969 969 970 970 971 971 976 976 977 977 978 978 979 979 980 980 981 981 982 982 983 983 984 984 985 985 986 986 987 987 988 988 997 997 998 998 999 999 1000 1000 1000 1000 1000 1003 1003 1003 1003 1003 1006 1006 1007 1007 1008 1008 1012 1012 1012 1013 1013 1013 1014 1014 1014 1015 1015 1015 1021 1023 1023 1023 1026 1026 1026 1030 1032 1032 1032 1034 1034 1034 1038 1038 1038 1038 1042 1042 1042 1042 1048 1048 1048 1049 1049 1049 1050 1050 1050 1051 1051 1051 1052 1052 1052 1053 1053 1053 1054 1054 1054 1055 1055 1055 1123 1124 1124 1124 1124 1124 1124 1127 1127 1127 1127 1127 1127 1127 1127 1127 1127 1133 1133 1133 1133 1133 1133 1133 1133 1133 1169 1177 1178 1180 1180 1185 1185 1191 1201 1202 1204 1204 1209 1209 1215 1225 1226 1228 1228 1233 1233 1239 1249 1250 1252 1252 1257 1257 1263 1273 1274 1276 1276 1281 1281 1281 1281 1281 1317 1325 1326 1328 1328 1333 1333 1339 1349 1350 1352 1352 1357 1357 1362 1372 1373 1375 1375 1375 1381 1381 1381 1415 1423 1424 1426 1426 1431 1431 1656 1656 1656 1763 1763 1774 1777 1778 1787 1788 1798 1798 1799 1802 1810 1810 1812 1825 1829 1832 1833 1833 gptr parameter pointer dcl 2154 in procedure "clean_up" set ref 2145 2166 2166* group_numbers 67 001435 automatic fixed bin(17,0) initial array level 2 dcl 449 set ref 449* 566* 580 598* 602 group_titles 1 001435 automatic char(24) initial array level 2 dcl 449 set ref 449* 528 537* 552 554 559* groups 455 based fixed bin(17,0) array level 2 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 544* 567* 1825 1829 1832 1833 groups based structure array level 1 unaligned dcl 90 in procedure "usage_and_revenue" hbound builtin function dcl 82 ref 193 205 227 513 516 584 1763 1763 1798 1810 hours 000425 automatic picture(4) unaligned dcl 1735 set ref 1747* 1751 1751 hours_per_session 1323 based float bin(27) array level 3 dcl 90 set ref 1034* 1281 hrs_avail 3 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1494* 1505* 1505 1542 1543 1546 1547 1570* 1570 1578* 1578 1591* 1591 1614 1632 i 002662 automatic fixed bin(17,0) dcl 730 in procedure "get_bin_title" set ref 742* 743 743* 745* 745 746 748 752 755 i 000105 automatic fixed bin(17,0) dcl 1299 in procedure "absentee_summary" set ref 1316* 1317 1317* 1327* 1328 1328 1328 1328* 1338* 1339 1339* 1351* 1352 1352 1352 1352* 1361* 1362 1362* 1374* 1375 1375 1375 1375 1375* i 000102 automatic fixed bin(17,0) dcl 1445 in procedure "system_stats" set ref 1517* 1518 1518 1520 1520 1520 1524 1527 1528 1530 1530 1530 1534 1534 1536 1536* 1611* 1611* 1612* 1612* 1613* 1613* 1614* 1614* 1615* 1615* 1616* 1616* 1617* 1617* 1618* 1618* 1619* 1619* 1620* 1620* 1621* 1621* 1622* 1622* 1623* 1623* 1624* 1624* 1629* 1629* 1630* 1630* 1632* 1632* 1633* 1633* 1634* 1634* 1635* 1635* 1641* 1641* 1642* 1642* i 000112 automatic fixed bin(17,0) dcl 22 in procedure "usage_and_revenue" set ref 203* 204* 205 206* 206 206* i 002724 automatic fixed bin(17,0) dcl 958 in procedure "conversions_and_sums" set ref 961* 962 962 963 963 964 964 965 965 966 966 967 967 968 968 969 969 970 970 971 971* 996* 997 997 998 998 999 999 1000 1000 1000 1000 1000 1003 1003 1003 1003 1003 1006 1006 1007 1007 1008 1008* 1019* 1021 1023 1023 1023 1026 1026 1026 1030 1032 1032 1032 1034 1034 1034 1038 1038 1038 1038 1042 1042 1042 1042* i 002633 automatic fixed bin(17,0) dcl 620 in procedure "split_title" set ref 629* 631 640 640 640 642 650 650 650 i 000111 automatic fixed bin(17,0) dcl 1149 in procedure "interactive_summary" set ref 1168* 1169 1169* 1179* 1180 1180 1180 1180* 1190* 1191 1191* 1203* 1204 1204 1204 1204* 1214* 1215 1215* 1227* 1228 1228 1228 1228* 1238* 1239 1239* 1251* 1252 1252 1252 1252* 1262* 1263 1263* 1275* 1276 1276 1276 1276* i 002652 automatic fixed bin(17,0) dcl 705 in procedure "get_group_title" set ref 710* 711 714 716 i 000102 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1773* 1774 1777 1778 1787 1788 1798 1799 1802 1810 1812 1825 1829 1832 1833* i 000124 automatic fixed bin(17,0) dcl 1947 in procedure "rates_and_shifts" set ref 1961* 1962 1962 1962 1962 1962 1962 1962 1962 1962* 1971* 1972 1972 1972 1972 1972* 1979* 1980 1980 1980* 1985* 1986* 1992* 1993 1996 1997 1999 2002* 2002 i 001246 automatic fixed bin(17,0) dcl 433 in procedure "parse_control_file" set ref 501* 502 502 503* 503 505 523 527* 528 528 529* 529 531 537 545* 546 546 548 551 551 552 554 559 566 567 570 571 571* 575* i 000104 automatic fixed bin(17,0) dcl 2109 in procedure "footnote" set ref 2130* 2131 2133 2133 2134 2136 2138 2138 2139* i 000100 automatic fixed bin(17,0) dcl 1067 in procedure "revenue_summary" set ref 1122* 1123 1124 1124 1124 1124 1124 1124 1127 1127 1127 1127 1127 1127 1127 1127 1127 1127 1133 1133 1133 1133 1133 1133 1133 1133 1133* i 000105 automatic fixed bin(17,0) dcl 1397 in procedure "iod_summary" set ref 1414* 1415 1415* 1425* 1426 1426 1426 1426* i 000100 automatic fixed bin(17,0) dcl 1650 in procedure "disk_stats" set ref 1655* 1656 1656 1656* i 000100 automatic fixed bin(17,0) dcl 671 in procedure "get_line" set ref 681* 682 685* 685 686 687 i 000100 automatic fixed bin(17,0) dcl 2205 in procedure "print_centered" set ref 2215* 2216 2223 2225 2230 2230 i 000100 automatic fixed bin(17,0) dcl 1666 in procedure "times_available" set ref 1678* 1679 1679 1681 1681 1681 1686 1686 1688 1688 1692 1692 1698 1701 1702 1703 1704 1704* idle 10 000107 automatic float bin(27) array level 2 in structure "sys_stats" dcl 1452 in procedure "system_stats" set ref 1497* 1508* 1508 1551 1554* 1554 1557 1562 1565* 1565 1568 1619 1637 idle 26 based fixed bin(71,0) level 3 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 1497 1508 in parameter fixed bin(17,0) dcl 822 ref 810 844 845 846 847 848 849 850 851 852 854 857 859 862 864 866 869 871 872 874 877 879 882 884 886 887 889 889 891 891 897 898 899 900 902 904 907 909 912 915 917 920 923 925 927 930 932 935 937 939 941 944 944 index builtin function dcl 82 ref 629 630 681 710 742 initiate_file_ 000104 constant entry external dcl 2119 in procedure "footnote" ref 2123 initiate_file_ 000054 constant entry external dcl 346 in procedure "get_seg_from_arg" ref 365 interactive 575722 based structure array level 4 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" interactive 1167 based structure array level 2 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" set ref 804* 1050* 1050 1050 io_ops 575732 based fixed bin(71,0) array level 5 dcl 3-15 ref 864 866 915 917 ioa_$rsnnl 000076 constant entry external dcl 1763 in procedure "group_composition" ref 1774 1777 1787 1854 1857 1894 ioa_$rsnnl 000100 constant entry external dcl 1947 in procedure "rates_and_shifts" ref 2007 2010 iod 576072 based structure array level 4 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" iod 1367 based structure array level 2 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" set ref 806* 1053* 1053 1053 ioops 1315 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 965* 1124 1257 ioops 1175 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 864* 864 915* 915 965 1239 1252 ioops_dollars 1316 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 999* 1003 1127 1133 1257 ioops_dollars 1176 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 866* 866 917* 917 999 1000 1252 ioops_rates 55 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 866 917 ioops_rates 55 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1962 1962 ioops_rates 55 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* j 000113 automatic fixed bin(17,0) dcl 22 in procedure "usage_and_revenue" set ref 205* 205* 206 206* j 000103 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1798* 1798* 1799 1802* 1810* 1810* 1812* 1829* 1829* 1832* 1832* 1833* 1833* 1841* 1842 1844 1845 1847* 1861* 1862 1866* j 000101 automatic fixed bin(17,0) dcl 2205 in procedure "print_centered" set ref 2222* 2223 2225 2230 j 000105 automatic fixed bin(17,0) dcl 2109 in procedure "footnote" set ref 2129* 2133 2133 2133 2134* 2136 2138 2138 2138 2139* j 002634 automatic fixed bin(17,0) dcl 620 in procedure "split_title" set ref 630* 631 640 640 640 650 650 650 652 j 000125 automatic fixed bin(17,0) dcl 1947 in procedure "rates_and_shifts" set ref 2009* 2010* 2014* 2017 2022 2025* j 002725 automatic fixed bin(17,0) dcl 958 in procedure "conversions_and_sums" set ref 1020* 1021 1023 1023 1023* 1037* 1038 1038 1038 1038* j 001247 automatic fixed bin(17,0) dcl 433 in procedure "parse_control_file" set ref 512* 513 513 514* 514 516 523 547* 548 549* 549 551 552* 552* 554 559 566 567* 570 577* 578 580 584 587 593 593 596 596 598 602 602* j 000101 automatic fixed bin(17,0) dcl 1666 in procedure "times_available" set ref 1679* 1681 1681 1681 1686 1686 1688 1692 1692 1698 1701 1702 1703 1704 1704* j 000103 automatic fixed bin(17,0) dcl 1445 in procedure "system_stats" set ref 1518* 1520 1520 1520 1524 1527 1528 1530 1530 1530 1534 1534 1536 1536* jobs 576043 based fixed bin(17,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 882 935 jobs 1330 based fixed bin(17,0) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 882* 882 935* 935 969 1038 1038 1375 jobs 1364 based fixed bin(17,0) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 969* 1042 1042 1381 k 000104 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1801* 1802* 1811* 1812 1815* 1846* 1847* 1854* 1856 1857* 1859 1865* 1866 1869* k 001250 automatic fixed bin(17,0) dcl 433 in procedure "parse_control_file" set ref 553* 554 554 555* 555 557 566 567 578* 580 598* k 000126 automatic fixed bin(17,0) dcl 1947 in procedure "rates_and_shifts" set ref 2016* 2017* 2024* 2025* k 000102 automatic fixed bin(17,0) dcl 2205 in procedure "print_centered" set ref 2225* 2226* kmem 107(18) based fixed bin(18,0) array level 5 packed unsigned unaligned dcl 3-15 ref 1520 1528 l parameter varying char dcl 730 in procedure "get_bin_title" ref 719 736 742 743 746 746 748 752 l 000103 automatic fixed bin(17,0) dcl 2205 in procedure "print_centered" set ref 2223* 2226* 2226 2230 l parameter varying char dcl 705 in procedure "get_group_title" ref 695 710 714 l 000127 automatic fixed bin(17,0) dcl 1947 in procedure "rates_and_shifts" set ref 2007* 2008 2010* 2011 l parameter varying char dcl 671 in procedure "get_line" set ref 661 686* 689 689* l1 002636 automatic fixed bin(17,0) dcl 620 set ref 642* 643 644 646 647 652* 653 654 655 656 657 l2 002640 automatic fixed bin(17,0) dcl 620 set ref 644* 645 646 654* 656 last_sysid 72 based char(8) level 3 dcl 3-15 ref 789 ldown 000120 automatic char(14) unaligned dcl 1666 set ref 1698* 1699 1716* 1717 length builtin function dcl 2206 in procedure "print_centered" ref 2222 length builtin function dcl 82 in procedure "usage_and_revenue" ref 627 627 628 633 633 644 654 678 736 743 line 001262 automatic varying char(400) dcl 447 set ref 464* 482* 485* 491* 494* 507* 518* 533* 539* 541* line1 parameter char(12) unaligned dcl 620 set ref 612 626* 636* 647* 657* line2 parameter char(12) unaligned dcl 620 set ref 612 626* 633* 637* 648* 658* lineno builtin function dcl 82 ref 1197 1221 1245 1269 1345 1368 lines 576076 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 886 887 939 941 lines 1367 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 886* 886 939* 939 971 1415 1426 lines 1377 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 971* 1124 1431 lines_dollars 1400 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1008* 1127 1133 1431 lines_dollars 1370 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 887* 887 941* 941 1008 1426 lines_rates 51 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 418* lines_rates 51 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 887 941 lines_rates 51 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1980 1980 ll 000101 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1776* 1781* 1781 1785* 1785 1791* 1791 1795* 1795 1816* 1823* 1827* 1833* 1856* 1859* 1870* ll parameter fixed bin(17,0) dcl 1889 in procedure "print" set ref 1878 1895 1902* 1910* 1910 logins 575663 based fixed bin(17,0) array level 4 dcl 3-15 ref 871 923 lup 000114 automatic char(14) unaligned dcl 1666 set ref 1704* 1706 m 000137 automatic fixed bin(17,0) dcl 1889 in procedure "print" set ref 1894* 1895 1902 1910 m 001251 automatic fixed bin(17,0) dcl 433 in procedure "parse_control_file" set ref 592* 593 593* m 002635 automatic fixed bin(17,0) dcl 620 in procedure "split_title" set ref 628* 629 630 642 652 m 000105 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1774* 1776 1777* 1781 1785 1787* 1791 1795 1840* 1845* 1845 1857* m1 002641 automatic fixed bin(17,0) dcl 620 set ref 646* 647 655* 656 657 m2 002642 automatic fixed bin(17,0) dcl 620 set ref 645* 646 648 656* 658 match 000116 automatic bit(1) unaligned dcl 1940 set ref 2074* 2076* 2079 2079* 2083 2083* 2087 max builtin function dcl 82 ref 645 655 max_day_log 100 based fixed bin(17,0) level 3 dcl 3-15 ref 1517 1518 1518 1678 1679 1679 1711 1711 max_qhour 101 based fixed bin(17,0) level 3 dcl 3-15 ref 1518 1679 1711 1711 max_rs_number 000263 automatic fixed bin(17,0) dcl 51 set ref 173* 174 193 227 2168 max_units 14 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1515* 1515* 1530 1530* 1534 1534* 1575* 1575 1583* 1583 1596* 1623 1641 memory 1362 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 968* 986* 986 1014 1357 memory 1403 based float bin(27) array level 3 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 988* 988 1014* 1124 memory 1326 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 877* 877 930* 930 968 985* 985 1339 1352 memory 1171 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 857* 857 907* 907 963 981* 981 1215 1228 memory 1311 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 963* 982* 982 1014 1233 memory 576046 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 877 879 930 932 memory_dollars 1312 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 998* 1003 1015 1233 memory_dollars 1363 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1007* 1015 1357 memory_dollars 1327 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 879* 879 932* 932 1007 1352 memory_dollars 1172 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 859* 859 909* 909 998 1000 1228 memory_dollars 1404 based float bin(27) array level 3 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 1015* 1127 1133 memory_rates 30 parameter float bin(27) array level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1962 1962 memory_rates 30 parameter float bin(27) array level 2 in structure "P" dcl 824 in procedure "add_bins" ref 859 909 memory_rates 30 parameter float bin(27) array level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* meters based structure level 2 dcl 3-15 min builtin function dcl 82 ref 627 1747 minutes 000424 automatic picture(2) unaligned dcl 1735 set ref 1750* 1751 1753 misc 575674 based float bin(27) array level 4 dcl 3-15 ref 847 889 891 898 944 misc_dollars 1162 based float bin(27) array level 2 dcl 90 set ref 802* 847* 847 898* 898 1049* 1049 1049 1127 1133 mod builtin function dcl 82 ref 2070 2070 month_dollars 1406 based float bin(27) array level 3 dcl 90 set ref 891* 891 1127 more_groups 001435 automatic structure array level 1 unaligned dcl 449 mpidle 12 000107 automatic float bin(27) array level 2 in structure "sys_stats" dcl 1452 in procedure "system_stats" set ref 1499* 1510* 1510 1556* 1556 1557 1567* 1567 1568 1621 1639 mpidle 36 based fixed bin(71,0) level 3 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 1499 1510 mtbf 2 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1542* 1546* 1574* 1574 1582* 1582 1613 1631 multiply builtin function dcl 82 ref 1748 n 000106 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1800* 1802* 1802 1805 1807 1809* 1814* 1814 1816* 1820 1822* 1822 1823* 1827* 1840* 1844* 1844 1852 1854* 1860* 1864* 1864 1868* 1868 1870* n parameter fixed bin(17,0) dcl 1889 in procedure "print" ref 1878 1897 1897 1905 1905 n 000130 automatic fixed bin(17,0) dcl 1947 in procedure "rates_and_shifts" set ref 1995* 1996 1999 2000* 2000 2004* 2004 2005 2008 2009 2016 2022 2024 n parameter fixed bin(17,0) dcl 799 in procedure "initial" ref 792 801 802 803 803 803 803 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 804 805 805 805 805 805 805 805 805 805 805 805 805 805 805 805 806 806 806 806 806 807 807 807 807 807 807 n 001252 automatic fixed bin(17,0) dcl 433 in procedure "parse_control_file" set ref 580* 581 581 584 592 593 596 n_select 544303 based fixed bin(17,0) level 3 dcl 3-15 ref 1801 1811 1846 1865 nall_bins 102 001435 automatic fixed bin(17,0) array level 2 dcl 449 set ref 551* 584 584 592 593 596* 596 596 nbins 100 001435 automatic fixed bin(17,0) array level 2 dcl 449 set ref 551* ndevices 66 parameter fixed bin(17,0) level 3 in structure "P" dcl 384 in procedure "get_prices" set ref 419* ndevices 66 parameter fixed bin(17,0) level 3 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 1985 1993 1996 ng 101 001435 automatic fixed bin(17,0) array level 2 dcl 449 set ref 570* 571 ngroups 000110 automatic fixed bin(17,0) dcl 22 set ref 203 471* 473* 473 474 480 489 490 490 490 513 523 528 537 543 544 545 554 557 577 961 976 976 977 977 978 978 979 979 980 980 981 981 982 982 983 983 984 984 985 985 986 986 987 987 988 988 996 1012 1012 1012 1013 1013 1013 1014 1014 1014 1015 1015 1015 1019 1048 1048 1048 1049 1049 1049 1050 1050 1050 1051 1051 1051 1052 1052 1052 1053 1053 1053 1054 1054 1054 1055 1055 1055 1103 1122 1156 1158 1160 1162 1164 1169 1177 1178 1180 1180 1185 1185 1191 1201 1202 1204 1204 1209 1209 1215 1225 1226 1228 1228 1233 1233 1239 1249 1250 1252 1252 1257 1257 1263 1273 1274 1276 1276 1281 1281 1281 1281 1281 1304 1306 1308 1310 1312 1317 1325 1326 1328 1328 1333 1333 1339 1349 1350 1352 1352 1357 1357 1362 1372 1373 1375 1375 1375 1381 1381 1381 1402 1404 1406 1408 1410 1415 1423 1424 1426 1426 1431 1431 1655 1773 nl 000100 automatic fixed bin(17,0) dcl 2109 set ref 2126* 2130 2131 2133 2138 nmpidle 13 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1557* 1568* 1622 1640 nn 000120 automatic fixed bin(17,0) array dcl 1947 set ref 1994* 1999* 2007 2010 2017 2025 non_print 000105 automatic char(32) initial unaligned dcl 2210 set ref 2210* 2215 2222 2230 note based char unaligned dcl 2109 ref 2131 2133 2138 np 000102 automatic pointer dcl 2109 set ref 2123* 2131 2133 2138 2142* nproj 575665 based fixed bin(17,0) array level 4 dcl 3-15 ref 844 1844 nqueues 000104 automatic fixed bin(17,0) dcl 1395 in procedure "iod_summary" set ref 1418* 1419 nqueues 000104 automatic fixed bin(17,0) dcl 1298 in procedure "absentee_summary" set ref 1320* 1321 1342* 1343 1345 1365* 1366 1368 nshifts 000110 automatic fixed bin(17,0) dcl 1147 set ref 1172* 1173 1194* 1195 1197 1218* 1219 1221 1242* 1243 1245 1266* 1267 1269 ntypes 544302 based fixed bin(17,0) level 3 dcl 3-15 ref 502 505 1838 1841 1861 null builtin function dcl 250 in procedure "process_args" ref 312 null builtin function dcl 22 in procedure "usage_and_revenue" ref 168 182 182 2162 2164 2166 2168 2170 nunits 107(05) based fixed bin(13,0) array level 5 packed unsigned unaligned dcl 3-15 ref 1530 1530 1534 1534 1536 1536 nusers 575666 based fixed bin(17,0) array level 4 dcl 3-15 ref 845 1845 onloc builtin function dcl 82 ref 214 out parameter fixed bin(17,0) dcl 822 ref 810 844 844 845 845 846 846 847 847 848 848 849 849 850 850 851 851 852 852 854 854 857 857 859 859 862 862 864 864 866 866 869 869 871 871 872 872 874 874 877 877 879 879 882 882 884 884 886 886 887 887 889 889 891 891 897 897 898 898 899 899 900 900 902 902 904 904 907 907 909 909 912 912 915 915 917 917 920 920 923 923 925 925 927 927 930 930 932 932 935 935 937 937 939 939 941 941 944 944 overhead 7 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1551* 1562* 1618 1636 p parameter pointer dcl 330 set ref 317 365* page_days 1163 based float bin(27) array level 3 dcl 90 set ref 848* 848 899* 899 976* 976 1055* 1055 1055 1124 page_days$ 1164 based float bin(27) array level 3 dcl 90 set ref 849* 849 900* 900 1127 1133 pageno builtin function dcl 82 ref 1175 1197 1221 1245 1269 1323 1345 1368 1421 1602 1771 1955 2127 period_begin 2 based fixed bin(71,0) level 3 dcl 3-15 set ref 786* 1587 period_end 4 based fixed bin(71,0) level 3 dcl 3-15 set ref 782* 782* 786* 788* 1524 1530 1587 1681 1681 1713 projects 1157 based fixed bin(17,0) array level 2 dcl 90 set ref 844* 844 1777* 1778 1788 qh 102 based structure array level 4 dcl 3-15 queue_names 000106 automatic char(8) initial array unaligned dcl 1299 in procedure "absentee_summary" set ref 1299* 1299* 1299* 1299* 1328 1352 1375 queue_names 000106 automatic char(8) initial array unaligned dcl 1397 in procedure "iod_summary" set ref 1397* 1397* 1397* 1397* 1426 queue_used 000100 automatic fixed bin(17,0) array dcl 1394 in procedure "iod_summary" set ref 1413* 1415* 1418 1426 queue_used 000100 automatic fixed bin(17,0) array dcl 1297 in procedure "absentee_summary" set ref 1315* 1317* 1320 1328 1337* 1339* 1342 1352 1362* 1365 1375 queues 1324 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" queues 1367 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" quota 1165 based fixed bin(35,0) array level 3 dcl 90 set ref 850* 850 1656 rate_ix 000114 automatic fixed bin(17,0) dcl 22 set ref 193* 194* 194 197 198 200* 200* 227* 229 229* reason 000130 automatic char(12) unaligned dcl 1666 set ref 1685* 1686* 1688* 1692* 1694 1694 1694 1694* 1694 1706 reconfigs 15 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1513* 1514* 1523* 1523 1524* 1524 1595* 1595 1624 1642 reg_rates 65 parameter float bin(27) level 2 in structure "P" dcl 384 in procedure "get_prices" set ref 415* reg_rates 65 parameter float bin(27) level 2 in structure "P" dcl 1922 in procedure "rates_and_shifts" ref 2033 2040 2040 release_temp_segment_ 000112 constant entry external dcl 2159 ref 2166 report_title 74 parameter char(50) level 2 in structure "titles" packed unaligned dcl 769 in procedure "make_titles" set ref 779* 781* report_title 74 parameter char(50) level 2 in structure "titles" packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1105* reverse builtin function dcl 82 in procedure "usage_and_revenue" ref 627 629 reverse builtin function dcl 2206 in procedure "print_centered" ref 2222 rs_name parameter char(32) level 2 in structure "P" packed unaligned dcl 1922 in procedure "rates_and_shifts" ref 1956 rs_name based char(32) array level 2 in structure "P" packed unaligned dcl 53 in procedure "usage_and_revenue" set ref 194* 198* 229 rs_number parameter fixed bin(17,0) dcl 383 in procedure "get_prices" set ref 375 415* 417* 418* 419* rs_number 575702 based fixed bin(17,0) array level 4 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 206 s parameter fixed bin(17,0) dcl 730 in procedure "get_bin_title" set ref 719 736 742 745 746 748 748 752 752 755* s parameter fixed bin(17,0) dcl 671 in procedure "get_line" set ref 661 678 681 685 686 686 687* 689* s 000100 automatic varying char(120) dcl 1889 in procedure "print" set ref 1894* 1897 1900 1901 1905 1908 1909 s parameter fixed bin(17,0) dcl 705 in procedure "get_group_title" set ref 695 710 714 714 716* s 000112 automatic varying char(24) dcl 1763 in procedure "group_composition" set ref 1774* 1775 1777* 1780 1784 1787* 1790 1794 1854* 1855 1857* 1858 s 000131 automatic varying char(8) dcl 1947 in procedure "rates_and_shifts" set ref 2007* 2008 2010* 2011 s2 002637 automatic fixed bin(17,0) dcl 620 set ref 643* 648 653* 658 select_proj 544304 based char(12) array level 4 dcl 3-15 ref 1815 1869 select_ut 544307 based fixed bin(17,0) array level 4 dcl 3-15 ref 1802 1812 1847 1866 sessions 1321 based fixed bin(17,0) array level 3 dcl 90 set ref 871* 871 923* 923 1030 1032 1034 1281 shift 000106 automatic fixed bin(17,0) dcl 1940 set ref 2046* 2051 2051 2054 2056 2056 2058 2068 2076 2079 2083* shift_names 000112 automatic char(8) initial array unaligned dcl 1149 set ref 1149* 1149* 1149* 1149* 1149* 1149* 1149* 1149* 1180 1204 1228 1252 1276 shift_table 000266 automatic fixed bin(17,0) array dcl 72 in procedure "usage_and_revenue" set ref 192* 229* shift_table parameter fixed bin(17,0) array dcl 1940 in procedure "rates_and_shifts" set ref 1915 2051 2051 2056 2056 2058 2058 2063* 2063 2076 2076 2079 2079 2083 2083 2091* 2091 shift_used 000100 automatic fixed bin(17,0) array dcl 1146 set ref 1167* 1169* 1172 1180 1189* 1191* 1194 1204 1213* 1215* 1218 1228 1237* 1239* 1242 1252 1261* 1263* 1266 1276 shifts defined fixed bin(17,0) array dcl 1940 in procedure "rates_and_shifts" set ref 2051 2056 2058 2063* 2076 2079 2083 2091* shifts 1167 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" short_date 000122 automatic char(8) unaligned dcl 22 in procedure "usage_and_revenue" set ref 202* 218* 219* 220* 221* 225* 229* 233* short_date parameter char(8) unaligned dcl 1148 in procedure "interactive_summary" ref 1140 1175 1197 1221 1245 1269 short_date parameter char(8) unaligned dcl 2109 in procedure "footnote" ref 2101 2127 short_date parameter char(8) unaligned dcl 1296 in procedure "absentee_summary" ref 1290 1323 1345 1368 short_date parameter char(8) unaligned dcl 1952 in procedure "rates_and_shifts" ref 1915 1955 short_date parameter char(8) unaligned dcl 775 in procedure "make_titles" set ref 759 788* short_date parameter char(8) unaligned dcl 1445 in procedure "system_stats" ref 1437 1602 short_date parameter char(8) unaligned dcl 1763 in procedure "group_composition" ref 1757 1771 short_date parameter char(8) unaligned dcl 1396 in procedure "iod_summary" ref 1388 1421 sign builtin function dcl 82 ref 1048 1049 1050 1051 1052 1053 1054 1055 size 000124 stack reference condition dcl 22 ref 211 234 skips parameter fixed bin(17,0) dcl 2203 ref 2194 2219 2230 start1 001256 automatic fixed bin(17,0) dcl 443 set ref 463* 464* 541* start2 001257 automatic fixed bin(17,0) dcl 443 set ref 481* 482* 491* 539* start_time 000107 automatic fixed bin(17,0) dcl 1940 set ref 2053* 2062 2070 2070 2075 2079 2079 2090 starts 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1492* 1503* 1503 1589* 1589 1611 1629 starttime 110 based fixed bin(71,0) array level 5 dcl 3-15 set ref 1698 1703* 1704 1711 stime defined char(4) unaligned dcl 2183 in procedure "format_time" ref 2191 stime 000126 automatic fixed bin(71,0) dcl 1666 in procedure "times_available" set ref 1711* 1713* 1716 1719 1721* string parameter char unaligned dcl 2203 in procedure "print_centered" ref 2194 2215 2222 2222 2226 2230 string parameter char unaligned dcl 1735 in procedure "elapsed_time" set ref 1724 1742* 1751* 1753* substr builtin function dcl 82 set ref 627 629 630 633* 636 637 647* 647 648* 648 657* 657 658* 658 681 686 689 710 714 742 746 746 748 752 788 2131 2133 2138 2226 2230 suffix parameter char unaligned dcl 341 set ref 317 358* sum builtin function dcl 82 ref 602 846 897 962 963 964 965 966 967 968 969 970 971 997 998 999 1006 1007 1008 1169 1172 1191 1194 1215 1218 1239 1242 1263 1266 1317 1320 1339 1342 1362 1365 1415 1418 1825 1838 1986 1997 sys_crash 23 based fixed bin(17,0) level 3 dcl 3-15 ref 1493 1504 sys_starts 22 based fixed bin(17,0) level 3 dcl 3-15 ref 1492 1503 sys_stats 000107 automatic structure array level 1 unaligned dcl 1452 set ref 1600* 1600 sysprint 000020 constant file print output stream dcl 22 set ref 175 176* 1112 1113 1118 1119 1123 1124 1127 1133 1175 1175 1177 1178 1180 1185 1197 1197 1197 1199 1201 1202 1204 1209 1221 1221 1221 1223 1225 1226 1228 1233 1245 1245 1245 1247 1249 1250 1252 1257 1269 1269 1269 1271 1273 1274 1276 1281 1323 1323 1325 1326 1328 1333 1345 1345 1345 1347 1349 1350 1352 1357 1368 1368 1368 1370 1372 1373 1375 1381 1421 1421 1423 1424 1426 1431 1602 1602 1603 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1653 1654 1656 1673 1674 1676 1699 1706 1717 1722 1771 1771 1775 1780 1784 1790 1794 1836 1855 1858 1875 1897 1900 1901 1905 1908 1909 1955 1955 1958 1960 1962 1969 1970 1972 1977 1978 1980 2008 2011 2013 2022 2025 2036 2037 2040 2044 2045 2068 2070 2072 2089 2127 2127 2128 2133 2138 2171 2172 2219 2230 system 123 parameter char(24) level 2 in structure "titles" packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1107* system 123 parameter char(24) level 2 in structure "titles" packed unaligned dcl 769 in procedure "make_titles" set ref 789* system_info_$abs_prices_rs 000064 constant entry external dcl 403 ref 417 system_info_$device_prices_rs 000066 constant entry external dcl 403 ref 419 system_info_$io_prices_rs 000062 constant entry external dcl 403 ref 418 system_info_$max_rs_number 000030 constant entry external dcl 77 ref 173 system_info_$prices_rs 000060 constant entry external dcl 403 ref 415 system_info_$rs_name 000026 constant entry external dcl 75 ref 194 system_info_$shift_table 000032 constant entry external dcl 79 ref 192 system_info_$titles 000074 constant entry external dcl 777 ref 778 t parameter char unaligned dcl 730 in procedure "get_bin_title" set ref 719 748* 752* t 002624 automatic varying char(24) dcl 620 in procedure "split_title" set ref 627* 628 629 630 633 633 633 636 637 644 647 648 654 657 658 t parameter char unaligned dcl 705 in procedure "get_group_title" set ref 695 714* temp 000107 automatic char(12) unaligned dcl 1763 in procedure "group_composition" set ref 1815* 1816* 1869* 1870* temp 000420 automatic fixed bin(71,0) dcl 1735 in procedure "elapsed_time" set ref 1745* 1746 1748* 1748 1749 temp2 000422 automatic fixed bin(71,0) dcl 1735 set ref 1746* 1747 1748 1749* 1750 terminate_file_ 000110 constant entry external dcl 2158 in procedure "clean_up" ref 2162 2164 terminate_file_ 000106 constant entry external dcl 2121 in procedure "footnote" ref 2142 this_shift_used 000117 automatic bit(1) unaligned dcl 1940 set ref 2047* 2065 2067* time 102 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 1524 1530 1681 1711 time parameter fixed bin(71,0) dcl 1735 in procedure "elapsed_time" ref 1724 1740 1745 time parameter fixed bin(71,0) dcl 2183 in procedure "format_time" set ref 2175 2190* time 000113 automatic fixed bin(17,0) dcl 1940 in procedure "rates_and_shifts" set ref 2050* 2051 2053 2056 2056 2058 2058 2060* time2 000114 automatic fixed bin(17,0) dcl 1940 set ref 2062* 2063* 2075* 2076* 2090* 2091* time_span 110(18) parameter char(42) level 2 in structure "titles" packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1106* time_span 110(18) parameter char(42) level 2 in structure "titles" packed unaligned dcl 769 in procedure "make_titles" set ref 782* 786* title 1143 based char(24) array level 2 in structure "groups" packed unaligned dcl 90 in procedure "usage_and_revenue" set ref 489* 490* 554 587* 1123 1656 1774* 1833* title parameter char(24) unaligned dcl 620 in procedure "split_title" ref 612 627 627 627 627 title parameter char unaligned dcl 1889 in procedure "print" set ref 1878 1894* title 001427 automatic char(24) unaligned dcl 447 in procedure "parse_control_file" set ref 482* 489 491* 502 537 539* title_line_1 1151 based char(12) array level 2 packed unaligned dcl 90 set ref 490* 1177 1201 1225 1249 1273 1325 1349 1372 1423 title_line_2 1154 based char(12) array level 2 packed unaligned dcl 90 set ref 490* 1178 1202 1226 1250 1274 1326 1350 1373 1424 titles 000132 automatic structure level 1 packed unaligned dcl 43 in procedure "usage_and_revenue" set ref 202* 217* titles parameter structure level 1 packed unaligned dcl 769 in procedure "make_titles" set ref 759 titles parameter structure level 1 packed unaligned dcl 1069 in procedure "revenue_summary" set ref 1060 to 000107 automatic char(17) unaligned dcl 1666 set ref 1702* 1706 today_dollars 1405 based float bin(27) array level 3 dcl 90 set ref 889* 889 944* 944 1127 1133 total 1377 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" total 1307 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" total parameter fixed bin(17,0) dcl 1889 in procedure "print" ref 1878 1897 1905 total 1401 based structure array level 2 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" set ref 807* 1054* 1054 1054 total 1360 based structure array level 3 in structure "groups" unaligned dcl 90 in procedure "usage_and_revenue" total 000100 automatic fixed bin(17,0) dcl 1763 in procedure "group_composition" set ref 1797* 1805* 1805 1807* 1807 1816* 1820 1823* 1827* 1828* 1830* 1830 1833* 1840* 1847* 1847 1870* total_cpu 32 based fixed bin(71,0) level 3 dcl 3-15 ref 1496 1507 total_dollars 1317 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 966* 1003 1026 1032 1281 total_dollars 1177 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 869* 869 920* 920 966 1000 1023 1263 1276 total_dollars 1365 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 970* 1042 1381 total_dollars 1331 based float bin(27) array level 4 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 884* 884 937* 937 970 1038 1362 1375 total_units 000101 automatic float bin(27) dcl 1445 set ref 1516* 1539* 1539 1596 translate builtin function dcl 2206 ref 2230 two_cpu 5 000107 automatic float bin(27) array level 2 dcl 1452 set ref 1543* 1547* 1573* 1573 1581* 1581 1593* 1593 1616 1634 uptime 20 based fixed bin(71,0) level 3 dcl 3-15 ref 1494 1505 usage 1166 based fixed bin(35,0) array level 3 in structure "groups" dcl 90 in procedure "usage_and_revenue" set ref 851* 851 1656 usage 000102 automatic format variable dcl 1075 in procedure "revenue_summary" set ref 1111* 1117* 1124 use_totals based structure level 1 dcl 3-15 use_totals_ptr parameter pointer dcl 2154 in procedure "clean_up" set ref 2145 2162 2162* use_totals_ptr 001014 automatic pointer dcl 3-14 in procedure "usage_and_revenue" set ref 168* 171* 179* 182* 188* 206 213* 235* 295 502 502 505 782 786 786 788 789 844 845 846 847 848 849 850 851 852 854 857 859 862 864 866 869 871 872 874 877 879 882 884 886 887 889 889 891 891 1492 1493 1494 1495 1496 1497 1498 1499 1517 1518 1518 1518 1520 1520 1520 1524 1527 1528 1530 1530 1530 1534 1534 1536 1536 1587 1587 1678 1679 1679 1679 1681 1681 1681 1681 1686 1686 1688 1688 1692 1692 1698 1701 1702 1703 1704 1704 1711 1711 1711 1711 1711 1711 1713 1801 1802 1811 1812 1815 1838 1841 1844 1845 1846 1847 1861 1865 1866 1869 use_totals_ptr parameter pointer dcl 250 in procedure "process_args" set ref 237 292* users 1160 based fixed bin(17,0) array level 2 dcl 90 set ref 845* 845 1787* ut 575654 based structure array level 3 dcl 3-15 utype 575654 based char(24) array level 4 dcl 3-15 ref 502 verify builtin function dcl 82 in procedure "usage_and_revenue" ref 627 verify builtin function dcl 2206 in procedure "print_centered" ref 2215 2222 version 10 based char(8) level 3 dcl 3-15 ref 295 309 xcpu 000105 automatic fixed bin(17,0) dcl 1450 set ref 1512* 1520 1527* xmem 000106 automatic fixed bin(17,0) dcl 1450 set ref 1512* 1520 1528* xtotp parameter pointer dcl 2154 in procedure "clean_up" set ref 2145 2164 2164* xtotp 000100 automatic pointer dcl 22 in procedure "usage_and_revenue" set ref 168* 171* 179* 182* 188* 213* 235* 782 897 898 899 900 902 904 907 909 912 915 917 920 923 925 927 930 932 935 937 939 941 944 944 1503 1504 1505 1506 1507 1508 1509 1510 1524 1530 1681 xtotp parameter pointer dcl 250 in procedure "process_args" set ref 237 306* 309 312 yes 000134 automatic bit(1) unaligned dcl 1947 set ref 1984* 1986* 1989 2015* 2016 2017* 2020 zidle 11 000107 automatic float bin(27) array level 2 in structure "sys_stats" dcl 1452 in procedure "system_stats" set ref 1498* 1509* 1509 1555* 1555 1557 1566* 1566 1568 1620 1638 zidle 34 based fixed bin(71,0) level 3 in structure "use_totals" dcl 3-15 in procedure "usage_and_revenue" ref 1498 1509 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS internal static bit(3) initial unaligned dcl 1-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 TERM_FILE_BC internal static bit(2) initial unaligned dcl 2-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 2-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 2-16 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 2-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 2-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 2-15 USE_TOTALS_VERSION_2 internal static char(8) initial unaligned dcl 3-121 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 arg based char unaligned dcl 250 null builtin function dcl 330 in procedure "get_seg_from_arg" null builtin function dcl 2108 in procedure "footnote" terminate_file_switches based structure level 1 packed unaligned dcl 2-4 NAMES DECLARED BY EXPLICIT CONTEXT. absentee_summary 025052 constant entry internal dcl 1290 ref 219 add_bins 012773 constant entry internal dcl 810 ref 206 bad_version 006675 constant label dcl 297 ref 309 clean_up 041707 constant entry internal dcl 2145 ref 171 182 188 213 235 conversions_and_sums 015144 constant entry internal dcl 950 ref 210 disk_stats 032757 constant entry internal dcl 1646 ref 222 elapsed_time 034217 constant entry internal dcl 1724 ref 1698 1704 1716 error 006002 constant label dcl 189 ref 215 f0 004504 constant format ref 1323 1345 1368 f0 005063 constant format ref 1175 1197 1221 1245 1269 f0 004040 constant format ref 1609 f0 004225 constant format ref 1421 f1 004214 constant format ref 1177 1178 1201 1202 1225 1226 1249 1250 1273 1274 f1 004214 constant format ref 1325 1326 1349 1350 1372 1373 f1 005521 constant format ref 1118 f1 004021 constant format ref 1611 1612 1624 f1 004214 constant format ref 1423 1424 f2 005040 constant format ref 1180 1185 1204 1209 1228 1233 1257 1276 1281 f2 004461 constant format ref 1328 1333 1352 1357 1375 1381 f2 004002 constant format ref 1613 1614 1615 1616 1617 1618 1619 1623 f2 005430 constant format ref 1119 f3 004155 constant format ref 1426 1431 f3 005024 constant format ref 1180 1185 1204 1209 1228 1233 1252 1257 1276 1281 1281 1281 f3 003763 constant format ref 1620 1621 1622 f3 005406 constant format ref 1117 f3 004445 constant format ref 1328 1333 1352 1357 1375 1381 f4 004132 constant format ref 1426 1431 f4 003744 constant format ref 1629 1630 1642 f4 005367 constant format ref 1133 f4 005001 constant format ref 1252 f5 003725 constant format ref 1631 1636 1637 f5 004406 constant format ref 1375 1381 f5 005304 constant format ref 1112 f5 004765 constant format ref 1281 f6 003711 constant format ref 1632 1633 1634 1635 1641 f6 005205 constant format ref 1113 f7 003672 constant format ref 1638 1639 1640 f7 005163 constant format ref 1111 f8 003644 constant format ref 1627 f8 005144 constant format ref 1127 footnote 041353 constant entry internal dcl 2101 ref 233 format_time 042070 constant entry internal dcl 2175 ref 782 782 786 786 788 1702 1703 1721 get_bin_title 012111 constant entry internal dcl 719 ref 491 539 get_group_title 012026 constant entry internal dcl 695 ref 482 get_line 011667 constant entry internal dcl 661 ref 464 541 689 get_prices 007370 constant entry internal dcl 375 ref 200 get_seg_from_arg 007067 constant entry internal dcl 317 ref 288 292 306 group_composition 034374 constant entry internal dcl 1757 ref 225 initial 012563 constant entry internal dcl 792 ref 204 interactive_summary 021357 constant entry internal dcl 1140 ref 218 iod_summary 027166 constant entry internal dcl 1388 ref 220 make_titles 012237 constant entry internal dcl 759 ref 202 parse_control_file 007467 constant entry internal dcl 422 ref 185 print 036064 constant entry internal dcl 1878 ref 1816 1823 1827 1833 1870 print_centered 042137 constant entry internal dcl 2194 ref 1103 1104 1105 1106 1107 1108 1176 1200 1224 1248 1272 1324 1348 1371 1422 1605 1652 1672 1772 1956 1957 1968 1976 1991 2035 2043 process_args 006421 constant entry internal dcl 237 ref 179 rates_and_shifts 036367 constant entry internal dcl 1915 ref 229 revenue_summary 017540 constant entry internal dcl 1060 ref 217 split_title 011323 constant entry internal dcl 612 ref 490 system_stats 027740 constant entry internal dcl 1437 ref 221 times_available 033163 constant entry internal dcl 1661 ref 223 usage_and_revenue 005577 constant entry external dcl 20 NAMES DECLARED BY CONTEXT OR IMPLICATION. char builtin function ref 1686 1688 1692 ltrim builtin function ref 1686 1688 1692 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 43322 43440 42554 43332 Length 44206 42554 116 531 546 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME usage_and_revenue 2160 external procedure is an external procedure. on unit on line 169 74 on unit on unit on line 211 112 on unit process_args internal procedure shares stack frame of external procedure usage_and_revenue. get_seg_from_arg internal procedure shares stack frame of external procedure usage_and_revenue. get_prices internal procedure shares stack frame of external procedure usage_and_revenue. parse_control_file internal procedure shares stack frame of external procedure usage_and_revenue. split_title internal procedure shares stack frame of external procedure usage_and_revenue. get_line 90 internal procedure calls itself recursively. get_group_title internal procedure shares stack frame of external procedure usage_and_revenue. get_bin_title internal procedure shares stack frame of external procedure usage_and_revenue. make_titles internal procedure shares stack frame of external procedure usage_and_revenue. initial internal procedure shares stack frame of external procedure usage_and_revenue. add_bins internal procedure shares stack frame of external procedure usage_and_revenue. conversions_and_sums internal procedure shares stack frame of external procedure usage_and_revenue. revenue_summary 336 internal procedure contains a format statement, and uses I/O statements. interactive_summary 518 internal procedure contains a format statement, and uses I/O statements. absentee_summary 432 internal procedure contains a format statement, and uses I/O statements. iod_summary 318 internal procedure contains a format statement, and uses I/O statements. system_stats 538 internal procedure contains a format statement, and uses I/O statements. disk_stats 288 internal procedure contains a format statement, and uses I/O statements. times_available 340 internal procedure contains a format statement, and uses I/O statements. elapsed_time internal procedure shares stack frame of internal procedure times_available. group_composition 358 internal procedure uses auto adjustable storage, contains a format statement, and uses I/O statements. print 310 internal procedure contains a format statement, and uses I/O statements. rates_and_shifts 434 internal procedure contains a format statement, and uses I/O statements. footnote 344 internal procedure contains a format statement, and uses I/O statements. clean_up 138 internal procedure uses I/O statements. format_time 80 internal procedure uses returns(char(*)) or returns(bit(*)), and is called during a stack extension. print_centered 260 internal procedure contains a format statement, and uses I/O statements. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME absentee_summary 000100 queue_used absentee_summary 000104 nqueues absentee_summary 000105 i absentee_summary 000106 queue_names absentee_summary clean_up 000100 ec clean_up disk_stats 000100 i disk_stats footnote 000100 nl footnote 000102 np footnote 000104 i footnote 000105 j footnote 000106 bit_count footnote 000107 ec footnote 000110 NL footnote format_time 000100 date_time_str format_time get_line 000100 i get_line 000101 NL get_line group_composition 000100 total group_composition 000101 ll group_composition 000102 i group_composition 000103 j group_composition 000104 k group_composition 000105 m group_composition 000106 n group_composition 000107 temp group_composition 000112 s group_composition 000121 bin_used group_composition interactive_summary 000100 shift_used interactive_summary 000110 nshifts interactive_summary 000111 i interactive_summary 000112 shift_names interactive_summary iod_summary 000100 queue_used iod_summary 000104 nqueues iod_summary 000105 i iod_summary 000106 queue_names iod_summary print 000100 s print 000137 m print print_centered 000100 i print_centered 000101 j print_centered 000102 k print_centered 000103 l print_centered 000104 BS print_centered 000105 non_print print_centered rates_and_shifts 000100 day_names rates_and_shifts 000106 shift rates_and_shifts 000107 start_time rates_and_shifts 000110 end_time rates_and_shifts 000111 day rates_and_shifts 000112 day2 rates_and_shifts 000113 time rates_and_shifts 000114 time2 rates_and_shifts 000115 cur_shft rates_and_shifts 000116 match rates_and_shifts 000117 this_shift_used rates_and_shifts 000120 nn rates_and_shifts 000124 i rates_and_shifts 000125 j rates_and_shifts 000126 k rates_and_shifts 000127 l rates_and_shifts 000130 n rates_and_shifts 000131 s rates_and_shifts 000134 yes rates_and_shifts revenue_summary 000100 i revenue_summary 000102 usage revenue_summary system_stats 000100 day_units system_stats 000101 total_units system_stats 000102 i system_stats 000103 j system_stats 000104 days system_stats 000105 xcpu system_stats 000106 xmem system_stats 000107 sys_stats system_stats times_available 000100 i times_available 000101 j times_available 000102 from times_available 000107 to times_available 000114 lup times_available 000120 ldown times_available 000124 ctime times_available 000126 stime times_available 000130 reason times_available 000420 temp elapsed_time 000422 temp2 elapsed_time 000424 minutes elapsed_time 000425 hours elapsed_time usage_and_revenue 000100 xtotp usage_and_revenue 000102 cptr usage_and_revenue 000104 gptr usage_and_revenue 000106 arg_list_ptr usage_and_revenue 000110 ngroups usage_and_revenue 000111 clen usage_and_revenue 000112 i usage_and_revenue 000113 j usage_and_revenue 000114 rate_ix usage_and_revenue 000115 ec usage_and_revenue 000116 daily usage_and_revenue 000117 OK usage_and_revenue 000120 first_time usage_and_revenue 000122 short_date usage_and_revenue 000132 titles usage_and_revenue 000263 max_rs_number usage_and_revenue 000264 P_ptr usage_and_revenue 000266 shift_table usage_and_revenue 001014 use_totals_ptr usage_and_revenue 001126 count process_args 001127 dn process_args 001201 en process_args 001211 ec process_args 001212 argptr process_args 001214 arglen process_args 001215 arg_count process_args 001224 ec get_seg_from_arg 001226 argptr get_seg_from_arg 001230 arglen get_seg_from_arg 001246 i parse_control_file 001247 j parse_control_file 001250 k parse_control_file 001251 m parse_control_file 001252 n parse_control_file 001253 all_done parse_control_file 001254 ec parse_control_file 001255 bin parse_control_file 001256 start1 parse_control_file 001257 start2 parse_control_file 001260 end_of_line parse_control_file 001261 end_of_file parse_control_file 001262 line parse_control_file 001427 title parse_control_file 001435 more_groups parse_control_file 002624 t split_title 002633 i split_title 002634 j split_title 002635 m split_title 002636 l1 split_title 002637 s2 split_title 002640 l2 split_title 002641 m1 split_title 002642 m2 split_title 002652 i get_group_title 002662 i get_bin_title 002672 dummy make_titles 002724 i conversions_and_sums 002725 j conversions_and_sums THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_g_a r_e_as r_ne_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return fl2_to_fx1 tra_ext alloc_auto_adj sign mpfx2 mod_fx1 enable shorten_stack ext_entry int_entry int_entry_desc put_end stream_io open close trunc_fx2 set_cs_eis return_chars_eis put_edit_eis verify_eis real_to_real_rd real_to_real_tr unpack_pic edit_pic divide_fx1 divide_fx3 translate_3 put_field put_field_chk put_control alloc_based_storage free_based verify_reverse_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_ com_err_ com_err_ com_err_$suppress_name cu_$arg_count_rel cu_$arg_list_ptr cu_$arg_ptr_rel cu_$arg_ptr_rel date_time_ expand_pathname_$add_suffix get_temp_segment_ get_wdir_ initiate_file_ initiate_file_ ioa_$rsnnl ioa_$rsnnl on_data_$get_onloc plio2_$get_lineno plio2_$get_pageno release_temp_segment_ system_info_$abs_prices_rs system_info_$device_prices_rs system_info_$io_prices_rs system_info_$max_rs_number system_info_$prices_rs system_info_$rs_name system_info_$shift_table system_info_$titles terminate_file_ terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$unimplemented_version sysprint sysprint.fsb LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 005576 22 005607 168 005625 169 005632 171 005646 172 005662 173 005663 174 005672 175 005700 176 005705 178 005722 179 005731 180 005733 182 005736 183 005752 185 005753 186 005765 188 005770 189 006002 192 006003 193 006012 194 006021 195 006046 197 006050 198 006057 199 006063 200 006064 201 006076 202 006100 203 006102 204 006111 205 006113 206 006130 208 006152 209 006154 210 006156 211 006157 213 006173 214 006207 215 006251 217 006255 218 006265 219 006273 220 006301 221 006307 222 006317 223 006323 225 006332 227 006343 229 006355 231 006375 233 006377 234 006405 235 006406 2233 006420 237 006421 271 006423 272 006437 274 006441 275 006456 276 006463 278 006464 280 006467 283 006514 284 006521 287 006522 288 006527 289 006576 291 006605 292 006610 293 006661 295 006670 297 006675 300 006730 301 006735 303 006736 304 006757 306 006761 307 007033 309 007042 312 007050 314 007062 373 007066 317 007067 349 007112 350 007117 352 007136 354 007140 355 007155 356 007162 358 007163 359 007221 361 007223 362 007255 363 007262 365 007263 366 007322 368 007324 369 007361 370 007366 372 007367 375 007370 415 007372 417 007417 418 007434 419 007447 420 007466 422 007467 449 007471 456 007635 457 007656 459 007660 460 007675 461 007702 463 007703 464 007705 465 007736 467 007741 468 007766 469 007773 471 007774 472 007775 473 010001 474 010002 476 010005 477 010032 478 010037 480 010040 481 010053 482 010055 483 010060 485 010063 486 010122 487 010127 489 010130 490 010140 491 010152 492 010155 494 010160 495 010217 496 010224 498 010225 499 010231 501 010234 502 010236 503 010254 504 010255 505 010256 507 010263 508 010314 509 010321 512 010322 513 010324 514 010336 515 010337 516 010340 518 010343 520 010374 521 010401 523 010402 525 010405 527 010406 528 010410 529 010427 530 010430 531 010431 533 010434 534 010465 535 010472 537 010473 539 010500 540 010503 541 010504 542 010535 543 010536 544 010557 545 010601 546 010611 547 010646 548 010650 549 010656 550 010657 551 010660 552 010671 553 010712 554 010714 555 010740 556 010741 557 010742 559 010745 562 010776 563 011003 566 011004 567 011011 569 011020 570 011022 571 011030 573 011034 574 011036 575 011037 576 011047 577 011051 578 011061 580 011073 581 011101 584 011107 587 011114 589 011152 590 011157 592 011160 593 011171 595 011211 596 011213 598 011222 599 011227 600 011230 601 011231 602 011233 604 011261 605 011263 606 011265 608 011267 609 011314 610 011321 757 011322 612 011323 626 011325 627 011335 628 011365 629 011374 630 011405 631 011421 633 011431 636 011451 637 011454 639 011460 640 011461 642 011500 643 011503 644 011505 645 011511 646 011520 647 011533 648 011544 649 011564 650 011565 652 011577 653 011603 654 011605 655 011611 656 011620 657 011633 658 011645 660 011665 661 011666 671 011707 678 011711 681 011722 682 011741 685 011747 686 011751 687 011764 688 011766 689 011772 694 012025 695 012026 710 012044 711 012065 714 012073 715 012101 716 012105 718 012110 719 012111 736 012127 738 012134 739 012140 741 012141 742 012145 743 012163 745 012170 746 012172 748 012203 749 012213 750 012217 752 012220 753 012230 755 012234 756 012236 759 012237 778 012241 779 012266 781 012302 782 012306 786 012416 788 012525 789 012551 790 012562 792 012563 801 012565 802 012573 803 012574 804 012600 805 012660 806 012734 807 012764 808 012772 810 012773 844 012775 845 013007 846 013017 847 013052 848 013062 849 013070 850 013075 851 013101 852 013105 854 013141 857 013203 859 013237 862 013301 864 013335 866 013371 869 013430 871 013463 872 013470 874 013524 877 013566 879 013622 882 013664 884 013715 886 013752 887 014006 889 014050 891 014064 895 014070 897 014075 898 014126 899 014133 900 014142 902 014150 904 014204 907 014246 909 014302 912 014344 915 014400 917 014434 920 014473 923 014527 925 014534 927 014571 930 014635 932 014673 935 014737 937 014771 939 015026 941 015063 944 015127 948 015143 950 015144 961 015145 962 015155 963 015207 964 015237 965 015267 966 015317 967 015347 968 015376 969 015424 970 015452 971 015500 972 015526 976 015530 977 015545 978 015576 979 015613 980 015644 981 015661 982 015712 983 015727 984 015757 985 015775 986 016025 987 016043 988 016061 996 016077 997 016107 998 016141 999 016171 1000 016221 1003 016273 1006 016301 1007 016330 1008 016356 1009 016404 1012 016406 1013 016423 1014 016441 1015 016457 1019 016475 1020 016505 1021 016511 1023 016523 1026 016526 1029 016532 1030 016534 1032 016542 1034 016547 1037 016552 1038 016557 1041 016575 1042 016577 1045 016611 1048 016613 1049 016634 1050 016654 1051 017122 1052 017174 1053 017357 1054 017437 1055 017516 1058 017536 1060 017537 1103 017552 1104 017577 1105 017620 1106 017641 1107 017664 1108 017705 1109 017727 1111 017735 1112 017740 1113 020041 1115 020151 1117 020152 1118 020155 1119 020247 1122 020354 1123 020365 1124 020415 1127 020505 1133 021045 1137 021353 1138 021355 1140 021356 1149 021371 1167 021463 1168 021474 1169 021501 1171 021533 1172 021535 1173 021554 1175 021555 1176 021632 1177 021654 1178 021710 1179 021744 1180 021751 1184 022064 1185 022066 1189 022164 1190 022174 1191 022201 1193 022233 1194 022235 1195 022254 1197 022255 1199 022353 1200 022365 1201 022407 1202 022442 1203 022476 1204 022503 1208 022616 1209 022620 1213 022716 1214 022726 1215 022733 1217 022765 1218 022767 1219 023006 1221 023007 1223 023105 1224 023117 1225 023141 1226 023174 1227 023230 1228 023235 1232 023350 1233 023352 1237 023450 1238 023460 1239 023465 1241 023517 1242 023521 1243 023540 1245 023541 1247 023637 1248 023651 1249 023673 1250 023726 1251 023762 1252 023767 1256 024102 1257 024104 1261 024202 1262 024212 1263 024217 1265 024251 1266 024253 1267 024272 1269 024273 1271 024371 1272 024403 1273 024425 1274 024460 1275 024514 1276 024521 1280 024634 1281 024636 1288 025050 1290 025051 1299 025064 1315 025121 1316 025132 1317 025137 1319 025171 1320 025173 1321 025212 1323 025213 1324 025270 1325 025312 1326 025346 1327 025402 1328 025407 1332 025522 1333 025524 1337 025622 1338 025632 1339 025637 1341 025671 1342 025673 1343 025712 1345 025713 1347 026011 1348 026023 1349 026045 1350 026100 1351 026134 1352 026141 1356 026254 1357 026256 1361 026352 1362 026357 1364 026411 1365 026413 1366 026432 1368 026433 1370 026531 1371 026543 1372 026565 1373 026620 1374 026654 1375 026661 1380 027032 1381 027034 1386 027164 1388 027165 1397 027200 1413 027235 1414 027246 1415 027253 1417 027305 1418 027307 1419 027326 1421 027327 1422 027404 1423 027426 1424 027462 1425 027516 1426 027523 1430 027636 1431 027640 1435 027736 1437 027737 1492 027752 1493 027757 1494 027762 1495 027766 1496 027772 1497 027776 1498 030002 1499 030006 1501 030012 1503 030020 1504 030026 1505 030033 1506 030041 1507 030047 1508 030055 1509 030063 1510 030071 1512 030077 1513 030102 1514 030104 1515 030106 1516 030110 1517 030112 1518 030123 1520 030156 1523 030206 1524 030211 1527 030226 1528 030230 1530 030232 1534 030256 1536 030271 1538 030277 1539 030301 1540 030304 1541 030306 1542 030310 1543 030314 1544 030317 1546 030326 1547 030332 1549 030335 1551 030337 1554 030344 1555 030350 1556 030354 1557 030360 1559 030364 1562 030370 1565 030375 1566 030401 1567 030405 1568 030411 1570 030415 1571 030420 1572 030423 1573 030426 1574 030431 1575 030434 1576 030437 1578 030441 1579 030444 1580 030447 1581 030452 1582 030455 1583 030460 1585 030463 1587 030465 1588 030474 1589 030476 1590 030500 1591 030503 1592 030506 1593 030511 1594 030514 1595 030517 1596 030522 1600 030526 1602 030611 1603 030666 1605 030706 1607 030730 1609 030736 1610 030772 1611 031004 1612 031044 1613 031104 1614 031144 1615 031204 1616 031244 1617 031304 1618 031344 1619 031404 1620 031444 1621 031504 1622 031544 1623 031604 1624 031644 1625 031704 1627 031705 1628 031747 1629 031761 1630 032021 1631 032061 1632 032133 1633 032173 1634 032233 1635 032273 1636 032333 1637 032405 1638 032457 1639 032531 1640 032603 1641 032655 1642 032715 1644 032755 1646 032756 1652 032771 1653 033013 1654 033047 1655 033061 1656 033071 1658 033157 1659 033161 1661 033162 1672 033175 1673 033217 1674 033253 1676 033333 1677 033345 1678 033347 1679 033361 1681 033414 1685 033436 1686 033441 1688 033502 1691 033542 1692 033543 1694 033607 1696 033637 1698 033642 1699 033650 1701 033673 1702 033706 1703 033733 1704 033771 1706 034011 1709 034060 1710 034062 1711 034064 1713 034103 1714 034105 1716 034107 1717 034115 1719 034140 1721 034143 1722 034170 1755 034216 1724 034217 1740 034230 1742 034233 1743 034240 1745 034241 1746 034242 1747 034246 1748 034263 1749 034271 1750 034276 1751 034306 1753 034345 1754 034371 1757 034373 1763 034406 1771 034426 1772 034503 1773 034525 1774 034535 1775 034572 1776 034626 1777 034631 1778 034667 1780 034675 1781 034720 1782 034724 1784 034725 1785 034750 1787 034754 1788 035012 1790 035020 1791 035043 1792 035047 1794 035050 1795 035073 1797 035077 1798 035100 1799 035115 1800 035122 1801 035123 1802 035135 1804 035154 1805 035156 1807 035162 1808 035163 1809 035165 1810 035166 1811 035202 1812 035213 1814 035231 1815 035232 1816 035240 1818 035262 1819 035264 1820 035266 1822 035271 1823 035272 1825 035317 1827 035343 1828 035370 1829 035371 1830 035406 1831 035407 1832 035411 1833 035427 1834 035456 1836 035460 1837 035500 1838 035502 1840 035526 1841 035531 1842 035541 1844 035544 1845 035554 1846 035556 1847 035567 1849 035577 1851 035601 1852 035603 1854 035605 1855 035633 1856 035664 1857 035667 1858 035715 1859 035740 1860 035743 1861 035744 1862 035757 1864 035762 1865 035763 1866 035775 1868 036005 1869 036006 1870 036014 1872 036036 1874 036040 1875 036042 1913 036062 1878 036063 1894 036104 1895 036133 1897 036140 1900 036175 1901 036227 1902 036254 1903 036257 1905 036260 1908 036311 1909 036335 1910 036360 1912 036365 1915 036366 1940 036401 1955 036454 1956 036530 1957 036557 1958 036601 1960 036651 1961 036663 1962 036667 1967 037105 1968 037107 1969 037131 1970 037165 1971 037177 1972 037205 1975 037337 1976 037341 1977 037363 1978 037411 1979 037423 1980 037431 1983 037530 1984 037532 1985 037533 1986 037545 1988 037576 1989 037600 1991 037602 1992 037624 1993 037626 1994 037633 1995 037644 1996 037646 1997 037656 1999 037704 2000 037707 2002 037710 2003 037711 2004 037712 2005 037714 2007 037716 2008 037751 2009 040014 2010 040023 2011 040056 2012 040105 2013 040107 2014 040121 2015 040125 2016 040126 2017 040137 2019 040150 2020 040152 2022 040154 2024 040230 2025 040237 2027 040307 2029 040311 2031 040313 2033 040314 2035 040322 2036 040344 2037 040356 2040 040461 2043 040533 2044 040555 2045 040616 2046 040630 2047 040635 2048 040636 2049 040643 2050 040645 2051 040651 2053 040665 2054 040667 2056 040671 2058 040703 2060 040711 2061 040714 2062 040716 2063 040725 2064 040735 2065 040737 2067 040741 2068 040743 2070 041000 2072 041137 2073 041170 2074 041177 2075 041201 2076 041211 2078 041222 2079 041224 2083 041244 2087 041265 2089 041267 2090 041317 2091 041327 2092 041337 2094 041341 2096 041343 2097 041345 2098 041347 2099 041351 2101 041352 2109 041365 2123 041367 2124 041435 2126 041437 2127 041442 2128 041517 2129 041531 2130 041533 2131 041543 2133 041550 2134 041604 2135 041610 2136 041611 2138 041614 2139 041651 2141 041654 2142 041656 2143 041705 2145 041706 2162 041717 2164 041751 2166 042004 2168 042032 2170 042044 2171 042047 2172 042061 2173 042066 2175 042067 2190 042075 2191 042112 2194 042136 2209 042157 2210 042161 2215 042164 2216 042172 2219 042173 2220 042204 2222 042205 2223 042214 2225 042217 2226 042227 2228 042237 2230 042241 2232 042322 ----------------------------------------------------------- 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