COMPILATION LISTING OF SEGMENT write_user_usage_report Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/29/88 0925.9 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(87-11-03,GDixon), approve(88-08-15,MCR7969), 17* audit(88-08-03,Lippard), install(88-08-29,MR12.2-1093): 18* Update grand_total.devices(j) so grand total gets calculated/printed. 19* (phx19300, Answering_Service 487) 20* END HISTORY COMMENTS */ 21 22 23 write_user_usage_report: proc; 24 25 /* Usage report program. This program writes a pretty usage report for each proj. 26* 27* inputs: 28* . sat list of valid projects, and projects deleted during the month 29* . XXX.pdt per-user cpu and console usage for each project XXX 30* . "reqfile" per-account requisition info 31* . "projfile" per-proj disk and misc charges and supervisor name 32* . "miscfile" misc charges detail info for the month 33* . "billing_footnote" constant text added to each summary page of the bill 34* 35* outputs: 36* . "long_bill" stream has one to five sections per proj... 37* . . summary page 38* . . interactive usage 39* . . absentee usage 40* . . io daemon usage 41* . . device usage 42* 43* . "mailing_copy" same as long_bill but with breaker page for mailing before each project. 44* . prices and footnotes on this copy only to save disk space. 45* 46* . "short_bill" stream has summary page as above only (no footnotes) 47* . but does have fancy grand total page. 48* 49* . "both_bills" stream goes on long_bill, mailing_copy, and short_bill 50* 51* . NOTE THAT ALL I/O ATTACHMENTS ARE RESPONSIBILITY OF THE CALLER. 52* 53* THVV 11/69 54* . J. Phillipps -- modified 8/72 to remove translator daemon code and to upgrade to use PDTs instead of Hist. 55* . -- modified 3/73 to upgrade for virtual page fault charging on the 6180. 56* . modified 3/16/76 by TAC to fix bugs: 57* . sorting arrays (u,v,x,y) for projects and users 58* . are now allocated in begin blocks, after their size is known; 59* . computation of lodate is done correctly; 60* . message about inconsistent misc charge figures is correct. 61* . -- modified 6/10/79 by CAH to print usage if charge was zero. 62* . -- modified Feb 1980 by M. B. Armstrong to implement multiple rate structures. 63* -- modified June 1980 by Ricarda McDonald to include page charging. 64* Modified 1984-08-27 BIM for unaligned strings in projfile. 65* */ 66 67 dcl abs_user_count fixed bin, /* count of absentee users processed */ 68 ap ptr, /* argument ptr */ 69 connect_tim (0:7) char (8) aligned, /* connect time in ascii */ 70 memry_usge (0:7) float bin init ((8)0e0), /* memory usage expressed as memory units *K */ 71 cpu_tim (0:7) char (8) aligned, /* cpu time in ascii */ 72 (coxx, dpxx) char (4) aligned, /* junk args to "system_info_" */ 73 (cods, dpds) char (120) aligned, /* Comapny name & department name for header */ 74 device_count fixed bin, 75 dmns fixed bin init (1), /* index of proj start, if we need to go back */ 76 dmnx fixed bin init (0), /* > 0 if proj has daemon usage */ 77 dn char (168) aligned, /* directory name */ 78 ec fixed bin (17), /* file-system error code */ 79 grand_absentee_chg float bin init (0e0), /* grand-total absentee charge: all (users, queues) */ 80 grand_absentee_cpu fixed bin (71) init (0), /* grand-total absentee cpu usage: all (users, queues) */ 81 grand_absentee_jobs fixed bin init (0), /* grand-total number of absentee jobs: all (users, queues) */ 82 grand_absentee_memory fixed bin (71) init (0), /* grand-total absentee memory usage: all (users, queues) */ 83 grand_device_chg float bin init (0e0), /* grand-total device charge: all (users, projects) */ 84 grand_disk_chg float bin init (0e0), /* grand-total disk charge: all (users, projects) */ 85 grand_disk_quota fixed bin init (0), 86 grand_disk_usage fixed bin init (0), /* grand-total disk usage: all (users, projects) */ 87 grand_interactive_chg float bin init (0e0), /* grand-total interactive charge: all (users, shifts) */ 88 grand_interactive_connect fixed bin (71) init (0), /* grand-total connect time: all (users, shifts) */ 89 grand_interactive_memory fixed bin (71) init (0), /* grand-total memory usage: all (users, shifts) */ 90 grand_interactive_cpu fixed bin (71) init (0), /* grand-total interactive cpu usage: all (users, shifts) */ 91 grand_interactive_ioops fixed bin (71) init (0), /* grand-total interactive terminal I/O operations: 92* all users, all shifts */ 93 grand_iod_chg float bin init (0e0), /* grand-total iod charge: all (users, queues) */ 94 grand_iod_lines fixed bin (71) init (0), /* grand-total number of lines printed */ 95 grand_iod_pages fixed bin (71) init (0), /* grand-total number of pages printed */ 96 grand_iod_pieces fixed bin init (0), /* grand-total number of io requests: all (users, queues) */ 97 grand_misc_chg float bin init (0e0), /* grand_total miscellaneous charge:all (users, items) */ 98 grand_pmonths float bin init (0e0), /* grand-total disk page-months */ 99 grand_total_chg float bin init (0e0), 100 grand_registration_chg float bin init (0e0), /* grand-total for registration on system */ 101 hidate char (8) aligned, /* Last date in billing period. */ 102 hidate_bin fixed bin (71) init (0), /* ... */ 103 iod_count fixed bin, /* number of iod users */ 104 (i, ii, j, jj, k, kk, n, r) fixed bin, /* counters */ 105 lin_incrm fixed bin init (0), /* line counter increment */ 106 linct fixed bin (17), /* line counter */ 107 linct_s fixed bin, /* line count for short bill */ 108 lodate char (8) aligned, /* First date in billing period. */ 109 lodate_bin fixed bin (71), /* ... */ 110 m fixed bin, 111 misc_chg float bin init (0e0), 112 miscfilep ptr, /* ptr to "miscfile" */ 113 miscfile_dir char (168) aligned, /* path of dir where miscfile */ 114 miscfile_name char (32) aligned, /* ename of miscfile */ 115 NL char (1) aligned int static init (" 116 "), /* newline, for footnote scan */ 117 named bit (1), 118 nonbill_total float bin init (0e0), /* Total "overhead" charges */ 119 note char (1) aligned, /* star if user deleted */ 120 noted fixed bin, /* count deleted users on project */ 121 notel fixed bin, /* char length of footnote */ 122 notep ptr, /* ptr to "billing_footnote" */ 123 (numproj, numusers) fixed bin init (0), /* total number of projects and users in system */ 124 (ix, oix) fixed bin, /* indices used for formatting subtotal. */ 125 126 trmnl_ioops (0: 7) float bin init ((8)0e0), /* no. of terminal I/O operations, ready for printing */ 127 page fixed bin (17), /* page number */ 128 page_s fixed bin, /* page number, short bill */ 129 pmonths float bin init (0e0), /* disk page-months */ 130 pdt_dir char (168) aligned, /* path of PDT's dir */ 131 pdt_name char (32) aligned, /* ename for a PDT */ 132 pdtep ptr, 133 pdtp ptr, 134 pp ptr, /* ptr to "projfile" */ 135 proj_absentee_chg float bin init (0e0), /* total project absentee charge: all (users, queues) */ 136 proj_absentee_cpu fixed bin (71) init (0), /* total absentee cpu usage for project: all (users, queues) */ 137 proj_absentee_jobs fixed bin init (0), /* total number absentee jobs for project: all (users, queues) */ 138 proj_absentee_memory fixed bin (71) init (0), /* total project absentee memory usage: all (users, queues) */ 139 proj_device_chg float bin init (0e0), /* total project device charge */ 140 proj_disk_chg float bin init (0e0), /* charge for project disk */ 141 proj_disk_quota fixed bin init (0), /* disk temp */ 142 proj_disk_usage fixed bin init (0), /* disk usage for a project */ 143 proj_interactive_chg float bin init (0e0), /* total project interactive charge: all (users, shifts) */ 144 proj_interactive_connect fixed bin (71) init (0), /* total project connect time: all (users, shifts) */ 145 proj_interactive_memory fixed bin (71) init (0), /* total project memory usage: all (users, shifts) */ 146 proj_interactive_cpu fixed bin (71) init (0), /* total project interactive cpu usage: all (users, shifts) */ 147 proj_interactive_ioops fixed bin (71) init (0), /* total project interactive terminal I/O operations: 148* all users, all shifts */ 149 proj_iod_chg float bin init (0e0), /* total project iod charge: all (users, queues) */ 150 proj_iod_lines fixed bin (71) init (0), /* total number of lines printed for project */ 151 proj_iod_pages fixed bin (71) init (0), /* total number of pages printed for project */ 152 proj_iod_pieces fixed bin init (0), /* total project number of io requests: all (users, queues) */ 153 proj_registration_chg float bin init (0e0), /* total registration charge for project */ 154 projfile_dir char (168) aligned, /* path of dir where projfile */ 155 projfile_name char (32) aligned, /* ename of projfile */ 156 proj_total_chg float bin init (0e0), /* total dollars spent for a project */ 157 qp ptr, /* ptr to "reqfile" */ 158 reqdir char (168) aligned, /* path of dir where reqfile */ 159 reqname char (32) aligned, /* ename of reqfile */ 160 rs_count fixed bin, /* number of rate structures defined at this site */ 161 SIXTYMILLION fixed bin (35) internal static init (60000000), 162 sat_dir char (168) aligned, /* path of sat dir */ 163 sat_name char (32) aligned, /* ename of sat */ 164 satep ptr, 165 satp ptr, 166 t1 fixed bin, /* ... */ 167 temp fixed bin (71), 168 tempf float bin, 169 user_absentee_chg float bin init (0e0), 170 user_absentee_cpu fixed bin (71) init (0), 171 user_absentee_jobs fixed bin, 172 user_absentee_memory fixed bin (71) init (0), 173 user_device_chg float bin init (0e0), 174 user_count fixed bin (17), /* number of users in a project */ 175 user_interactive_chg float bin init (0), /* interactive charge per user,all shifts */ 176 user_interactive_connect fixed bin (71) init (0), /* interactive connect time per user */ 177 user_interactive_memory fixed bin (71) init (0), /* interactive memory usage per user */ 178 user_interactive_cpu fixed bin (71) init (0), /* interactive cpu time per user */ 179 user_interactive_ioops fixed bin (71) init (0), /* interactive terminal I/O operations per user */ 180 user_iod_chg float bin init (0e0), /* daemon charge all queues for each user */ 181 user_iod_lines fixed bin (71), /* total number of lines printed, each user, all queues */ 182 user_iod_pages fixed bin (71), /* total number of pages printed, each user, all queues */ 183 user_iod_pieces fixed bin, /* total number of pieces printed, each user, all queues */ 184 user_total_chg float bin init (0e0); /* total dollar charge including reg fee for each user */ 185 186 dcl (addr, divide, fixed, float, hbound, mod, null, substr) builtin; 187 188 dcl lng char (32) int static aligned init ("long_bill"); /* long bill */ 189 dcl sht char (32) int static aligned init ("short_bill"); 190 dcl both char (32) int static aligned init ("both_bills"); 191 dcl mc char (32) int static aligned init ("mailing_copy"); 192 193 dcl 1 notes based (notep) aligned, 194 2 ch (131071) char (1) unal; 195 196 dcl notestr char (131071) based (notep) aligned; 197 198 199 200 /* "format staements" -- control strings for ioa_ */ 201 202 dcl l3 char (48) aligned int static init 203 ("^30xMultics ^a for the period ^a to ^a^/"), 204 l4 char (80) aligned int static init 205 ("^30xProject name: ""^a"", ^52a page ^d^/^/^30xSupervisor:^4x^a; ^a^/^/^/"), 206 dskfmt char (80) aligned int static init 207 ("Disk Storage charge: ^10.2f page-months (quota ^d, current use ^d)"), 208 ptlin char (19) int static aligned init ("^/^10x^99a ^5x^15a"), 209 dash char (120) aligned int static init ((120)"-"), 210 eqllin char (120) aligned int static init ((120)"="); 211 212 dcl format char (50) aligned int static init /* format for interactive shift usage */ 213 ("^10x^24a^8a^1x^8a^4x^8a^5x^11.1f^3x^11.1f^22x^15a"), 214 format1 char (65) aligned int static init /* format for interactive shift usage total */ 215 ("^/^8x^1a^1x^24a^8a^1x^8a^4x^8a^5x^11.1f^3x^11.1f^10d^10d^2x^15a^/"), 216 formatz char (60) aligned int static init /* Format for guy who never logged in. */ 217 ("^8x^1a^1x^24a^7x(no usage)^/"), 218 fmt1 char (60) aligned int static init 219 ("^8x^1a ^25a^15a ^15a ^15a ^15a ^15a ^15a^/"), 220 dmnfmt char (60) aligned int static init 221 ("^10x^24a ^8a^10d^16d^16d^8x^15a"), 222 dmnfmt1 char (60) aligned int static init 223 ("^/^10x^24a ^8a^10d^16d^16d^8x^15a^/"), 224 absfmt char (60) aligned int static init 225 ("^10x^24a ^8a^10d^4x^8a^4x^12.1f^8x^15a"), 226 absfmt1 char (60) aligned int static init 227 ("^/^10x^24a ^8a^10d^4x^8a^4x^12.1f^8x^15a^/"), 228 formatA char (10) aligned int static init 229 ("^/^10x^14a"); 230 231 dcl title1 char (24) aligned int static init ("charge summary"), 232 title2 char (24) aligned int static init ("interactive usage"), 233 title3 char (24) aligned int static init ("absentee usage"), 234 title4 char (24) aligned int static init ("IO Daemon usage"), 235 title5 char (24) aligned int static init ("other charges"); 236 237 dcl total char (8) aligned int static init (" TOTAL:"); 238 239 dcl shift_label (0:7) char (8) aligned int static 240 init ("Shift 0:", "Shift 1:", "Shift 2:", "Shift 3:", "Shift 4:", "Shift 5:", "Shift 6:", "Shift 7:"); 241 242 dcl queue_label (4) char (8) aligned int static 243 init ("Queue 1:", "Queue 2:", "Queue 3:", "Queue 4:"); 244 245 dcl col1 char (120) aligned int static init 246 ("^10xName^25xInteractive^8xAbsentee^7xIO Daemon^4xRegistration^11xOther^11xTotal"), 247 col2 char (120) aligned int static init 248 ("^10xName^34xCPU^5xConnect^4xTerminal I/O^6xMemory*K^4xLogins^3xCrashes^11xCharge"), 249 col3 char (120) aligned int static init 250 ("^10xName^31xRequests^9xCPU^8xMemory*K^17xCharge"), 251 col4 char (120) aligned int static init 252 ("^10xName^31xRequests^11xLines^11xPages^17xCharge"), 253 col5 char (120) aligned int static init 254 ("^10xName^20xDevice^12xCharge"); 255 256 dcl p_header char (14) aligned int static init 257 ("PROJECT TOTALS"); 258 259 dcl 1 prices (0:9), /* array to hold all prices for each rate structure */ 260 2 rs_name char (32), 261 2 abs_cpu_price (1: 4) float bin, /* installation price for absentee cpu time */ 262 2 abs_memory_price (1: 4) float bin, /* installation price for absentee memory usage */ 263 2 connect_price (0: 7) float bin, /* installation price for terminal connect time */ 264 2 core_price (0: 7) float bin, /* installation price for memory usage */ 265 2 devtab_copy (16) aligned, /* device info not really needed as only device_id */ 266 3 device_id char (8), /* used. Put here to be consistent */ 267 3 device_price (0:7) float bin, 268 2 disk_price float bin, /* price for one page-second */ 269 2 interactive_cpu_price (0: 7) float bin, /* installation price for interactive cpu time */ 270 2 ioops_price (0: 7) float bin, /* installation price for I/O operations */ 271 2 lines_price (1: 4) float bin, 272 2 reg_price float bin; /* user registration charge */ 273 274 275 /* procedures called by this procedure */ 276 277 278 dcl com_err_ entry options (variable), /* system error procedure */ 279 cu_$arg_ptr ext entry (fixed bin, ptr, fixed bin, fixed bin), 280 cv_$mwvf ext entry (float bin) returns (char (15) aligned), /* dollar converter */ 281 date_time_ entry (fixed bin (71), char (*) aligned), 282 expand_path_ entry (ptr, fixed bin, ptr, ptr, fixed bin), 283 get_wdir_ entry () returns (char (168) aligned), 284 hcs_$initiate entry (char (*) aligned, char (*) aligned, char (*) aligned, 285 fixed bin, fixed bin, ptr, fixed bin), 286 hcs_$initiate_count entry (char (*) aligned, char (*) aligned, char (*) aligned, 287 fixed bin, fixed bin, ptr, fixed bin), 288 hcs_$terminate_noname entry (ptr, fixed bin), 289 idsort_ entry ((*) char (32) aligned, (*) fixed bin, fixed bin), 290 (ioa_, ioa_$rsnnl) entry options (variable), /* output routines */ 291 ioa_$ioa_stream entry options (variable), /* output on file */ 292 mailing_page_ entry (char (*) aligned, char (*) aligned, char (*) aligned), 293 system_info_$titles entry (char (*) aligned, char (*) aligned, char (*) aligned, char (*) aligned), 294 system_info_$rs_name entry (fixed bin, char (*), fixed bin), 295 system_info_$prices_rs entry (fixed bin, 296 (0: 7) float bin, (0: 7) float bin, (0: 7) float bin, (0: 7) float bin, float bin, float bin), /* Gets interactive installation prices */ 297 system_info_$device_prices_rs entry (fixed bin, fixed bin, ptr), 298 system_info_$io_prices_rs entry (fixed bin, (4) float bin), /* gets daemon installation prices */ 299 system_info_$abs_prices_rs entry (fixed bin, (4) float bin, (4) float bin); 300 301 dcl system_info_$max_rs_number entry (fixed bin); 302 /* gets absentee installation prices */ 303 1 1 /* BEGIN INCLUDE FILE grand_total.incl.pl1 (last modified 3/16/76 by TAC) */ 1 2 1 3 /* Modified May 1981 by E. N. Kittlitz per UNCA. change iod.cpu to pages */ 1 4 1 5 dcl 1 grand_total aligned, 1 6 2 logins fixed bin init (0), /* number of logins */ 1 7 2 crashes fixed bin init (0), /* sessions abnormally terminated */ 1 8 2 interactive (0: 7), /* interactive use, shifts 0-7 */ 1 9 3 charge float bin init ((8)0), /* total dollar charge this shift */ 1 10 3 xxx fixed bin, 1 11 3 cpu fixed bin (71) init ((8)0), /* cpu usage in microseconds */ 1 12 3 core fixed bin (71) init ((8)0), /* core demand in page-microseconds */ 1 13 3 connect fixed bin (71) init ((8)0), /* total console time in microseconds */ 1 14 3 io_ops fixed bin (71) init ((8)0), /* total terminal IO operations */ 1 15 2 absentee (4), /* absentee use, queues 1-4 */ 1 16 3 charge float bin init ((4)0.0e0), /* dollar charge this queue */ 1 17 3 jobs fixed bin init ((4)0), /* number of jobs submitted */ 1 18 3 cpu fixed bin (71) init ((4)0), /* total cpu time in microseconds */ 1 19 3 memory fixed bin (71) init ((4)0), /* total memory usage in milli-vpfs */ 1 20 2 iod (4), /* io daemon use, queues 1-4 */ 1 21 3 charge float bin init ((4)0.0e0), /* dollar charge this queue */ 1 22 3 pieces fixed bin init ((4)0), /* pieces of output requested */ 1 23 3 pad fixed bin (35) init ((4)0), 1 24 3 pages fixed bin (35) init ((4)0), /* number of pages printed */ 1 25 3 lines fixed bin (71) init ((4)0), /* total record count of output */ 1 26 2 devices (16) float bin init ((16)0e0), /* device charges */ 1 27 2 end_pad; 1 28 1 29 /* END INCLUDE FILE grand_total.incl.pl1 */ 304 2 1 /* declaration of the misc charges file */ 2 2 2 3 dcl 1 misc_file based (miscfilep) aligned, 2 4 2 misc_ents fixed bin, 2 5 2 padmisc (7) fixed bin, 2 6 2 misctab (100), 2 7 3 mdate fixed bin (71), 2 8 3 mproj char (12), 2 9 3 mamt float bin, 2 10 3 mpad fixed bin (71), 2 11 3 mdesc char (64); 2 12 2 13 /* end miscfile */ 305 3 1 /* BEGIN INCLUDE FILE ... pdt.incl.pl1 */ 3 2 /* Requires user_attributes.incl.pl1 */ 3 3 3 4 /* Modified 740723 by PG to add AIM info */ 3 5 /* Modified 750604 by T. Casey to add priority scheduler parameters */ 3 6 /* Modified May 1976 by T. Casey to add cutoff warning thresholds and change version to 3 */ 3 7 /* Modified May 1977 by John Gintell to add reqfile, projfile, and SAT to header */ 3 8 /* Modified May 1978 by T. Casey to add pdir_quota to user entry */ 3 9 /* Modified June 1978 by T. Casey to add rel ptr to pdt hash table */ 3 10 /* Modified November 1978 by T. Casey to add max_(fore back)ground, n_(fore back)ground and abs_foreground_cpu_limit */ 3 11 /* Modified October 1979 by T. Casey to add counters for interactive and disconnected processes. */ 3 12 /* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures (UNCA). */ 3 13 /* Modified May 1980 by R. McDonald to use iod cpu time field for page charging (UNCA) */ 3 14 /* Modified December 1981 by E. N. Kittlitz for user_warn fields */ 3 15 /* Modified January 1982 by E. N. Kittlitz for user_attributes.incl.pl1 changes */ 3 16 /* Modified September 1982 by E. N. Kittlitz for default ring. */ 3 17 /* Modified 1984-07-05 BIM for min authorization, version to 4 */ 3 18 3 19 dcl (PDT_version init (4), /* version of this declaration */ 3 20 PDT_header_lth init (256), /* length in words of PDT head */ 3 21 PDT_entry_lth init (256), /* length in words of PDT entry */ 3 22 3 23 PDT_project_name_length init (9), /* proper length of pdt.project_name */ 3 24 PDT_person_id_length init (22) /* proper length of user.person_id */ 3 25 ) fixed bin internal static options (constant); 3 26 3 27 dcl 1 pdt based (pdtp) aligned, 3 28 4 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 4 2 4 3 /* the "author" items must always be the first ones in the table. The 4 4* module which moves the converted table to the System Control process 4 5* fills in these data items and assumes them to be at the head of the segment 4 6* regardless of the specific table's actual declaration. The variables 4 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 4 8* respectively. For tables installed in multiple processes, these 4 9* are to be used to lock out multiple installations. */ 4 10 4 11 /* Lock should be used as a modification lock. Since, in general, 4 12* entries may not be moved in system tables, even by installations, 4 13* it is sufficient for only installers and programs that change threads 4 14* to set or respect the lock. Simply updating data in an entry 4 15* requires no such protection. 4 16* 4 17* Last_install_time is used by readers of system tables to detect 4 18* installations or other serious modifications. By checking it before 4 19* and after copying a block of data, they can be protected against 4 20* modifications. 4 21* 4 22* Modules that set the lock should save proc_group_id, and then 4 23* put their group id there for the time they hold the lock. 4 24* if they do not actually install the, they should restore the group id. 4 25**/ 4 26 4 27 2 author aligned, /* validation data about table's author */ 4 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 4 29 3 lock bit (36), /* installation lock */ 4 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 4 31 3 update_authorization bit (1) unal, /* update only authorizations */ 4 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 4 33 3 pad bit (33) unaligned, 4 34 3 last_install_time fixed bin (71), 4 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 4 36 3 w_dir char (64), /* author's working directory */ 4 37 4 38 /* END INCLUDE FILE author.incl.pl1 */ 3 29 3 30 2 max_size fixed bin, /* max number of entries table can grow */ 3 31 2 current_size fixed bin, /* current size of table (in entries) */ 3 32 2 version fixed bin, /* table version */ 3 33 2 freep fixed bin, /* relptr to begin of free chain */ 3 34 2 n_users fixed bin, /* number of entries actually used */ 3 35 2 project_name char (28), /* name of project */ 3 36 2 project_dir char (64), /* treename of project's directory */ 3 37 2 projfile_version fixed bin, 3 38 2 projentry bit (66*36), 3 39 2 pad3 (5) bit (36) aligned, 3 40 2 reqfile_version fixed bin, 3 41 2 reqentry bit (40*36), 3 42 2 pad4 (9) fixed bin, 3 43 2 sat_version fixed bin, 3 44 2 satentry bit (52*36), /* everything in sat.project from project.at on */ 3 45 2 pad5 (4) bit (36) aligned, 3 46 2 date_reqfile_copied fixed bin (71), 3 47 2 rs_number fixed bin (9) unsigned unaligned, /* rate structure number, easier than looking in satentry */ 3 48 2 pad2l bit (27) unaligned, 3 49 2 pad2 (16) fixed bin, /* make header 256 words long */ 3 50 2 ht_relp fixed bin (18) aligned, /* if nonzero, pdt has hash table at that loc */ 3 51 2 user (1019) aligned, /* the project definition table entries */ 3 52 3 pad (256) bit (36) aligned; /* each entry is 256 words long */ 3 53 3 54 /* The hash table, if there is one, is right after the last user, and is described in hashst.incl.pl1 */ 3 55 3 56 3 57 3 58 dcl 1 user based (pdtep) aligned, /* declaration of a single PDT entry */ 3 59 2 state fixed bin, /* 1 = normal, 2 = deleted 0 = free */ 3 60 2 lock bit (36), /* update lock */ 3 61 2 person_id char (24) aligned, /* login name of user */ 3 62 2 now_in fixed bin, /* count of users logged in on this entry */ 3 63 2 password char (8) aligned, /* password for anonymous user */ 3 64 2 at like user_attributes aligned, /* include user_attributes.incl.pl1 */ 3 65 2 initial_procedure char (64) aligned, /* initproc and subsystem name packed into one string */ 3 66 2 home_dir char (64) aligned, /* user's default working directory */ 3 67 2 bump_grace fixed bin, /* number of minutes he is protected */ 3 68 2 high_ring fixed bin, /* highest ring user may use */ 3 69 2 default_ring fixed bin (17) unal, /* ring user will start in */ 3 70 2 low_ring fixed bin (17) unal, /* lowest ring user may use */ 3 71 2 outer_module char (32), /* outer module used if user is interactive */ 3 72 2 lot_size fixed bin, /* size of linkage offset table */ 3 73 2 kst_size fixed bin, /* size of known segment table */ 3 74 2 cls_size fixed bin, /* size of combined linkage */ 3 75 2 uflags, /* various flags */ 3 76 3 dont_call_init_admin bit (1) unal, /* call overseer direct */ 3 77 3 ip_given bit (1) unal, /* ip_len gives length of initproc packed in initial_procedure */ 3 78 3 ss_given bit (1) unal, /* subsystem name is packed in initial_procedure */ 3 79 3 flagpad bit (33) unal, 3 80 2 ip_len fixed bin (17) unal, /* length of initproc name packed in initial_procedure */ 3 81 2 ss_len fixed bin (17) unal, /* length of subsystem name packed in initial_procedure */ 3 82 2 dollar_limit float bin, 3 83 2 dollar_charge float bin, /* total dollars spent this month */ 3 84 2 shift_limit (0: 7) float bin, 3 85 2 daton fixed bin (71), /* date user added to system */ 3 86 2 datof fixed bin (71), /* date user deleted */ 3 87 2 last_login_time fixed bin (71), /* time of last login */ 3 88 2 last_login_unit char (4), /* terminal id last used */ 3 89 2 last_login_type fixed bin (17) unal, /* terminal type */ 3 90 2 last_login_line_type fixed bin (17) unal, /* terminal line type */ 3 91 2 time_last_bump fixed bin (71), /* for bump-wait */ 3 92 2 last_update fixed bin (71), /* time of last transaction */ 3 93 2 logins fixed bin, /* number of logins */ 3 94 2 crashes fixed bin, /* sessions abnormally terminated */ 3 95 2 interactive (0: 7), /* interactive use, shifts 0-7 */ 3 96 3 charge float bin, /* total dollar charge this shift */ 3 97 3 xxx fixed bin, 3 98 3 cpu fixed bin (71), /* cpu usage in microseconds */ 3 99 3 core fixed bin (71), /* core demand in page-microseconds */ 3 100 3 connect fixed bin (71), /* total console time in microseconds */ 3 101 3 io_ops fixed bin (71), /* total i/o ops on terminal */ 3 102 2 absentee (4), /* absentee use, queues 1-4 */ 3 103 3 charge float bin, /* dollar charge this queue */ 3 104 3 jobs fixed bin, /* number of jobs submitted */ 3 105 3 cpu fixed bin (71), /* total cpu time in microseconds */ 3 106 3 memory fixed bin (71), /* total memory demand */ 3 107 2 iod (4), /* io daemon use, queues 1-4 */ 3 108 3 charge float bin, /* dollar charge this queue */ 3 109 3 pieces fixed bin, /* pieces of output requested */ 3 110 3 pad fixed bin (35), 3 111 3 pages fixed bin (35), /* number of pages output */ 3 112 3 lines fixed bin (71), /* total record count of output */ 3 113 2 devices (16) float bin, /* device charges */ 3 114 2 time_last_reset fixed bin (71), /* time PDT last updated */ 3 115 2 absolute_limit float bin, /* Limit, not reset monthly */ 3 116 2 absolute_spent float bin, /* Spending against this */ 3 117 2 absolute_cutoff fixed bin (71), /* Spending will be reset on this date */ 3 118 2 absolute_increm fixed bin, /* .. time increment code. 0 = don't reset */ 3 119 2 pad_was_authorization bit (72) aligned, 3 120 2 group char (8), /* group for this user (if at.igroup = "1"b) */ 3 121 2 warn_days fixed bin (17) unaligned, /* warn user if less than this many days to cutoff */ 3 122 2 warn_pct fixed bin (17) unaligned, /* warn user if less than this percent of funds left */ 3 123 2 warn_dollars float bin, /* warn user if less than this amount of funds left */ 3 124 2 n_foreground fixed bin (9) unsigned unaligned, /* number of foreground and background processes */ 3 125 2 n_background fixed bin (9) unsigned unaligned, /* that this user has. see limits just below */ 3 126 2 max_foreground fixed bin (9) unsigned unaligned, /* max simultaneous foreground and */ 3 127 2 max_background fixed bin (9) unsigned unaligned, /* background processes that this user can have */ 3 128 2 n_interactive fixed bin (9) unsigned unaligned, /* number of interactive processes that user has */ 3 129 2 n_disconnected fixed bin (9) unsigned unaligned, /* number of disconnected processes that user has */ 3 130 2 pdtupad1 fixed bin (18) unsigned unaligned, 3 131 2 user_warn_days fixed bin (17) unaligned, /* warn user if less than this many days to user cutoff */ 3 132 2 user_warn_pct fixed bin (17) unaligned, /* warn user if less than this percent of user funds left */ 3 133 2 user_warn_dollars float bin, /* warn user if less than this amount of user funds left */ 3 134 2 user_authorization (2) bit (72) aligned, /* range */ 3 135 2 pdtupad (5) fixed bin, 3 136 2 abs_foreground_cpu_limit fixed bin (17) unaligned, /* time limit (sec) on foreground absentee jobs */ 3 137 2 pdir_quota fixed bin (17) unaligned, /* quota to put on user's pdir (0 => use default) */ 3 138 2 chain fixed bin; /* free chain */ 3 139 3 140 /* END INCLUDE FILE ... pdt.incl.pl1 */ 306 5 1 /* BEGIN INCLUDE FILE project_total.incl.pl1 */ 5 2 5 3 /* Modified May 1981 by ENK to alter iod.cpu to iod.pages */ 5 4 5 5 dcl 1 project_total aligned, 5 6 2 logins fixed bin, /* number of logins */ 5 7 2 crashes fixed bin, /* sessions abnormally terminated */ 5 8 2 interactive (0: 7), /* interactive use, shifts 0-7 */ 5 9 3 charge float bin, /* total dollar charge this shift */ 5 10 3 xxx fixed bin, 5 11 3 cpu fixed bin (71), /* cpu usage in microseconds */ 5 12 3 core fixed bin (71), /* core demand in page-microseconds */ 5 13 3 connect fixed bin (71), /* total console time in microseconds */ 5 14 3 io_ops fixed bin (71) init ((8)0), /* total terminal IO Operations */ 5 15 2 absentee (4), /* absentee use, queues 1-4 */ 5 16 3 charge float bin, /* dollar charge this queue */ 5 17 3 jobs fixed bin, /* number of jobs submitted */ 5 18 3 cpu fixed bin (71), /* total cpu time in microseconds */ 5 19 3 memory fixed bin (71) init ((4)0), /* total memory usage in vpfs */ 5 20 2 iod (4), /* io daemon use, queues 1-4 */ 5 21 3 charge float bin, /* dollar charge this queue */ 5 22 3 pieces fixed bin, /* pieces of output requested */ 5 23 3 pad fixed bin (35), 5 24 3 pages fixed bin (35), /* number of pages printed */ 5 25 3 lines fixed bin (71), /* total record count of output */ 5 26 2 devices (16) float bin, /* device charges */ 5 27 2 end_pad; 5 28 5 29 /* END INCLUDE FILE project_total.incl.pl1 */ 307 6 1 /* BEGIN INCLUDE FILE .. projfile.incl.pl1 */ 6 2 /* Modified by T. Casey April 1976 to change disk_infs (obsolete) to dir_disk_use */ 6 3 /* Modified 1984-07-09 BIM for dir_disk_quota, version */ 6 4 /* Modified 1984-09-14 BIM for reasonable array size */ 6 5 6 6 dcl 1 projfile based (pp) aligned, /* Project history file */ 6 7 2 nproj fixed bin (35), /* number of entries */ 6 8 2 version fixed bin, 6 9 2 projfilexx0 (6) bit (36) aligned, 6 10 2 projfiletab (3000), /* in seg limit */ 6 11 3 id char (12) unal, /* project ID */ 6 12 3 title char (52) unal, /* project title */ 6 13 3 inv char (32) unal, /* name of principal investigator */ 6 14 3 inv_addr char (32) unal, /* address */ 6 15 3 sup char (32) unal, /* name of supervisor */ 6 16 3 sup_addr char (32) unal, /* address */ 6 17 3 sup_phone char (16) unal, /* telephone */ 6 18 3 on fixed bin (71), /* date on */ 6 19 3 off fixed bin (71), /* date off */ 6 20 3 disk_psec fixed bin (71), /* project disk page-seconds */ 6 21 3 disk_quota fixed bin (35), /* project disk quota */ 6 22 3 dir_disk_quota fixed bin (35), /* project dir disk quota */ 6 23 3 disk_use fixed bin (35), /* total segment pages used */ 6 24 3 dir_disk_use fixed bin (35), /* total directory pages used */ 6 25 3 misc_charges float bin, /* manuals, etc */ 6 26 3 n_misc fixed bin, /* number of entries */ 6 27 3 processed fixed bin, /* temp for usage-report */ 6 28 3 pad bit (36) aligned; /* out to even number of words */ 6 29 6 30 dcl loph int static fixed bin (17) options (constant) init (8), /* lth of projfile header */ 6 31 lope int static fixed bin (17) options (constant) init (66); /* lth of projflile entry */ 6 32 6 33 dcl PROJFILE_VERSION fixed bin init (3) int static options (constant); 6 34 6 35 /* END INCLUDE FILE ... projfile.incl.pl1 */ 308 7 1 /* Requisition file declaration */ 7 2 /* Modified BIM 1984-07-10 for unaligned strings */ 7 3 /* Modified BIM 1984-09-14 foor 3000 size-array */ 7 4 7 5 dcl 1 reqfile based (qp) aligned, /* MIT accounting data */ 7 6 2 nacts fixed, 7 7 2 version fixed bin, 7 8 2 pad (6) bit (36) aligned, 7 9 2 reqfiletab (3000), /* one entry per Multics account */ 7 10 /* same size as projfile */ 7 11 3 acctid char (12) unal, /* account id. usually same as Proj */ 7 12 3 mitacct char (12) unal, /* MIT account no. */ 7 13 3 reqno char (12) unal, /* requisition or PO no. */ 7 14 3 qflag char (8), /* class & activity */ 7 15 3 procssd fixed bin, /* temp for usage report */ 7 16 3 qdn fixed bin (71), /* date on for account */ 7 17 3 qdf fixed bin (71), /* date off */ 7 18 3 billing_name char (32) unal, /* where to send bill */ 7 19 3 billing_addr char (32) unal, 7 20 3 chg_mo float bin (63), /* charges this month */ 7 21 3 chg_tr float bin (63), /* charges this req */ 7 22 3 req_amt float bin (63), /* req face value */ 7 23 3 cutoff fixed bin (71); /* term date for req */ 7 24 7 25 dcl loqh int static fixed bin (17) init (8), /* length of reqfile head */ 7 26 loqe int static fixed bin (17) init (40); /* lth of reqfile entry */ 7 27 7 28 declare REQFILE_VERSION fixed bin init (2) int static options (constant); 7 29 7 30 /* End include file reqfile.incl.pl1 */ 309 8 1 /* BEGIN INCLUDE FILE ... sat.incl.pl1 */ 8 2 8 3 8 4 8 5 8 6 /****^ HISTORY COMMENTS: 8 7* 1) change(86-09-05,Parisek), approve(87-06-17,MCR7570), 8 8* audit(87-06-15,Hirneisen), install(87-08-06,MR12.1-1066): 8 9* Expand comment line of project.state to include the renamed state (state = 8 10* 3). 8 11* END HISTORY COMMENTS */ 8 12 8 13 8 14 8 15 /* Modified 740723 by PG to add AIM info */ 8 16 /* Modified 750604 by T. Casey to add priority scheduler parameters */ 8 17 /* Modified May 1976 by T. Casey to add project cutoff limits */ 8 18 /* Modified May 1978 by T. Casey to add pdir_quota */ 8 19 /* Modified November 1978 by T. Casey to add max_(fore back)ground and abs_foreground_cpu_limit */ 8 20 /* Modified July 1979 by J. N. R. Barnecut to support multiple rate structures. (UNCA) */ 8 21 /* Modified January 1982 by E. N. Kittlitz for user_attributes.incl.pl1 changes */ 8 22 /* Modified 1984-07-05 BIM range of authorizations, version 3 */ 8 23 8 24 dcl (SAT_version init (3), /* version 2 of this declaration */ 8 25 8 26 SAT_header_lth init (466), /* length in words of SAT header */ 8 27 SAT_entry_lth init (80), /* length in words of SAT entry */ 8 28 8 29 SAT_project_name_length init (9) /* proper length of project.project_id */ 8 30 ) fixed bin internal static options (constant); 8 31 8 32 dcl 1 sat based (satp) aligned, 8 33 9 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 9 2 9 3 /* the "author" items must always be the first ones in the table. The 9 4* module which moves the converted table to the System Control process 9 5* fills in these data items and assumes them to be at the head of the segment 9 6* regardless of the specific table's actual declaration. The variables 9 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 9 8* respectively. For tables installed in multiple processes, these 9 9* are to be used to lock out multiple installations. */ 9 10 9 11 /* Lock should be used as a modification lock. Since, in general, 9 12* entries may not be moved in system tables, even by installations, 9 13* it is sufficient for only installers and programs that change threads 9 14* to set or respect the lock. Simply updating data in an entry 9 15* requires no such protection. 9 16* 9 17* Last_install_time is used by readers of system tables to detect 9 18* installations or other serious modifications. By checking it before 9 19* and after copying a block of data, they can be protected against 9 20* modifications. 9 21* 9 22* Modules that set the lock should save proc_group_id, and then 9 23* put their group id there for the time they hold the lock. 9 24* if they do not actually install the, they should restore the group id. 9 25**/ 9 26 9 27 2 author aligned, /* validation data about table's author */ 9 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 9 29 3 lock bit (36), /* installation lock */ 9 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 9 31 3 update_authorization bit (1) unal, /* update only authorizations */ 9 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 9 33 3 pad bit (33) unaligned, 9 34 3 last_install_time fixed bin (71), 9 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 9 36 3 w_dir char (64), /* author's working directory */ 9 37 9 38 /* END INCLUDE FILE author.incl.pl1 */ 8 34 8 35 2 max_size fixed bin, /* max number of entries table can grow */ 8 36 2 current_size fixed bin, /* current size of table (in entries) */ 8 37 2 version fixed bin, /* version number of table (word 32) */ 8 38 2 freep fixed bin, /* free chain ptr. 0 if no free entries */ 8 39 2 n_projects fixed bin, /* number of entries actually used */ 8 40 2 pad_was_max_users bit (36) aligned, 8 41 2 max_units fixed bin, /* maximum number of login-units per session */ 8 42 2 pad_was_max_prim bit (36) aligned, 8 43 2 uwt_size fixed bin, /* size of User Weight Table */ 8 44 2 uwt (24) aligned, /* User Weight Table */ 8 45 3 initproc char (64) unaligned, /* user's initial procedure */ 8 46 3 units fixed bin, /* weight of initial procedure */ 8 47 2 system_admin (2) char (32) unal, /* system administrator ID */ 8 48 2 pad1 (4) fixed bin, /* padding to 466 wds */ 8 49 2 project (3258), /* The SAT entries. 255K segment. */ 8 50 3 pad (80) fixed bin; /* each entry is 80 words long */ 8 51 8 52 8 53 dcl 1 project based (satep) aligned, /* declaration of a single SAT entry */ 8 54 2 state fixed bin, /* state 1 = normal, 0 = free, 2 = deleted, 3 = renamed */ 8 55 2 project_id char (12) unaligned, /* project's name */ 8 56 2 project_dir char (64) unaligned, /* project's directory */ 8 57 2 pdt_ptr pointer, /* pointer to current PDT */ 8 58 2 max_users fixed bin, /* maximum number of users from project */ 8 59 2 n_users fixed bin, /* current number */ 8 60 2 at like user_attributes aligned, /* include user_attributes.incl.pl1 */ 8 61 2 admin (4) aligned, /* list of project's administrators */ 8 62 3 userid char (30) unal, /* administrator's user-id (personid.projectid) */ 8 63 3 pad char (2) unal, 8 64 2 cutoff char (1), /* if project is cut off, why. */ 8 65 2 min_ring fixed bin, /* lowest ring for project */ 8 66 2 max_ring fixed bin, /* highest ring for project */ 8 67 2 alias char (8) unal, /* project alias */ 8 68 2 group char (8) unal, /* default group for this project */ 8 69 2 grace_max fixed bin, /* maximum bump grace */ 8 70 2 audit bit (36), /* audit flags for project */ 8 71 2 project_authorization (2) bit (72), /* authorization of this project */ 8 72 2 groups (2) char (8) unal, /* authorized groups for this project */ 8 73 2 days_to_cutoff fixed bin (17) unaligned, /* these figures are as of last running of daily_summary */ 8 74 2 pct_balance fixed bin (17) unaligned, /* they are used for warning message printing only */ 8 75 2 dollars_to_cutoff float bin, /* and are not to be taken as up-to-date figures */ 8 76 2 pdir_quota fixed bin (17) unaligned, /* max pdir quota allowed for project */ 8 77 2 max_foreground fixed bin (9) unsigned unaligned, /* max simultaneous foreground and background */ 8 78 2 max_background fixed bin (9) unsigned unaligned, /* processes that a user on this project can have */ 8 79 2 abs_foreground_cpu_limit fixed bin (17) unaligned, /* time limit on foreground absentee jobs */ 8 80 2 rs_number fixed bin (9) unsigned unaligned, /* rate structure number (0=default rates ) */ 8 81 2 satpad1 fixed bin (9) unsigned unaligned, 8 82 2 satpad (1) bit (36) aligned, /* pad to 80 words */ 8 83 2 chain fixed bin; /* if free entry, chain */ 8 84 8 85 /* END INCLUDE FILE ... sat.incl.pl1 */ 310 10 1 /* BEGIN INCLUDE FILE ... user_attributes.incl.pl1 TAC 10/79 */ 10 2 10 3 10 4 /****^ HISTORY COMMENTS: 10 5* 1) change(86-12-11,Brunelle), approve(87-07-13,MCR7741), 10 6* audit(87-04-19,GDixon), install(87-08-04,MR12.1-1056): 10 7* Add incl for abs_attributes.incl.pl1 to automatically include absentee 10 8* attribute switches. 10 9* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 10 10* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 10 11* A) Add USER_ATTRIBUTE_NAMES arrays. attribute_names.incl.pl1 can thereby 10 12* be deleted. 10 13* B) Add constants identifying attributes that can be changed by user at 10 14* login, etc. 10 15* END HISTORY COMMENTS */ 10 16 10 17 10 18 /* Modified 82-01-03 E. N. Kittlitz. to declare a complete level-1 structure */ 10 19 10 20 /* format: style4 */ 10 21 dcl 1 user_attributes aligned based, /* the user user_attributes */ 10 22 (2 administrator bit (1), /* 1 system administrator privileges */ 10 23 2 primary_line bit (1), /* 2 user has primary-line privileges */ 10 24 2 nobump bit (1), /* 2 user cannot be bumped */ 10 25 2 guaranteed_login bit (1), /* 4 user has guaranteed login privileges */ 10 26 2 anonymous bit (1), /* 5 used only in SAT. project may have anon.users */ 10 27 2 nopreempt bit (1), /* 6 used only in PDT. user not preemptable by others 10 28* . of same project (distinct from "nobump") */ 10 29 2 nolist bit (1), /* 7 don't list user on "who" */ 10 30 2 dialok bit (1), /* 8 user may have multiple consoles */ 10 31 2 multip bit (1), /* 9 user may have several processes */ 10 32 2 bumping bit (1), /* 10 in SAT. Can users in project bump each other? */ 10 33 2 brief bit (1), /* 11 no login or logout message */ 10 34 2 vinitproc bit (1), /* 12 user may change initial procedure */ 10 35 2 vhomedir bit (1), /* 13 user may change homedir */ 10 36 2 nostartup bit (1), /* 14 user does not want start_up.ec */ 10 37 2 sb_ok bit (1), /* 15 user may be standby */ 10 38 2 pm_ok bit (1), /* 16 user may be primary */ 10 39 2 eo_ok bit (1), /* 17 user may be edit_only */ 10 40 2 daemon bit (1), /* 18 user may login as daemon */ 10 41 2 vdim bit (1), /* 19 * OBSOLETE * user may change outer mdle */ 10 42 2 no_warning bit (1), /* 20 no warning message */ 10 43 2 igroup bit (1), /* 21 in SAT: this project may give its users individual groups 10 44* . in PDT: this user has an individual load control group */ 10 45 2 save_pdir bit (1), /* 22 save pdir after fatal process error */ 10 46 2 disconnect_ok bit (1), /* 23 ok to save user's disconnected processes */ 10 47 2 save_on_disconnect bit (1), /* 24 save them unless -nosave login arg is given */ 10 48 2 pad bit (12)) unaligned; 10 49 10 50 dcl USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 10 51 ("none", /* 0 */ 10 52 "administrator", /* 1 */ 10 53 "primary_line", /* 2 */ 10 54 "nobump", /* 3 */ 10 55 "guaranteed_login", /* 4 */ 10 56 "anonymous", /* 5 */ 10 57 "nopreempt", /* 6 */ 10 58 "nolist", /* 7 */ 10 59 "dialok", /* 8 */ 10 60 "multip", /* 9 */ 10 61 "bumping", /* 10 */ 10 62 "brief", /* 11 */ 10 63 "vinitproc", /* 12 */ 10 64 "vhomedir", /* 13 */ 10 65 "nostartup", /* 14 */ 10 66 "no_secondary", /* 15 */ 10 67 "no_prime", /* 16 */ 10 68 "no_eo", /* 17 */ 10 69 "daemon", /* 18 */ 10 70 "", /* 19 vdim OBSOLETE */ 10 71 "no_warning", /* 20 */ 10 72 "igroup", /* 21 */ 10 73 "save_pdir", /* 22 */ 10 74 "disconnect_ok", /* 23 */ 10 75 "save_on_disconnect"); /* 24 */ 10 76 10 77 dcl ALT_USER_ATTRIBUTE_NAMES (0:24) char (20) int static options (constant) init 10 78 ("null", /* 0 */ 10 79 "admin", /* 1 */ 10 80 "", "", /* 2 - 3 */ 10 81 "guar", /* 4 */ 10 82 "anon", /* 5 */ 10 83 "", "", /* 6 - 7 */ 10 84 "dial", /* 8 */ 10 85 "multi_login", /* 9 */ 10 86 "preempting", /* 10 */ 10 87 "", /* 11 */ 10 88 "v_process_overseer", /* 12 */ 10 89 "v_home_dir", /* 13 */ 10 90 "no_start_up", /* 14 */ 10 91 "no_sec", /* 15 */ 10 92 "no_primary", /* 16 */ 10 93 "no_edit_only", /* 17 */ 10 94 "op_login", /* 18 */ 10 95 "", /* 19 */ 10 96 "nowarn", /* 20 */ 10 97 "", "", "", /* 21 - 23 */ 10 98 "save"); /* 24 */ 10 99 10 100 dcl USER_ATTRIBUTES_always_allowed bit (36) aligned int static 10 101 options(constant) init("000000000010000000010000000000000000"b); 10 102 /* SAT/PDT attributes not needed for user to give (brief, no_warning) */ 10 103 10 104 dcl USER_ATTRIBUTES_default_in_pdt bit (36) aligned int static 10 105 options(constant) init("000000000010000000010000000000000000"b); 10 106 /* PDT value for (brief, no_warning) is default */ 10 107 10 108 dcl USER_ATTRIBUTES_settable_by_user bit (36) aligned int static 10 109 options(constant) init("000100000110010000010000000000000000"b); 10 110 /* user MIGHT set (bump, ns, brief, guar, no_warning) */ 10 111 11 1 /* BEGIN INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 11 2 11 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 11 4 /* */ 11 5 /* This include file describes the attributes of an absentee job. It is */ 11 6 /* used by user_table_entry.incl.pl1, abs_message_format.incl.pl1 */ 11 7 /* and PIT.incl.pl1. */ 11 8 /* */ 11 9 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 11 10 11 11 /****^ HISTORY COMMENTS: 11 12* 1) change(86-12-08,GDixon), approve(87-07-13,MCR7741), 11 13* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 11 14* Separated abs_attributes from the request structure 11 15* (abs_message_format.incl.pl1) so that the identical structure could be 11 16* used in the ute structure (user_table_entry.incl.pl1). 11 17* 2) change(87-04-19,GDixon), approve(87-07-13,MCR7741), 11 18* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 11 19* Added ABS_ATTRIBUTE_NAMES array. 11 20* 3) change(87-11-11,Parisek), approve(88-02-11,MCR7849), 11 21* audit(88-03-22,Lippard), install(88-07-13,MR12.2-1047): 11 22* Added the no_start_up flag. SCP6367 11 23* END HISTORY COMMENTS */ 11 24 11 25 dcl 1 user_abs_attributes aligned based, 11 26 2 restartable bit (1) unaligned, /* 1 if request may be started over from the beginning */ 11 27 2 user_deferred_until_time bit (1) unaligned, /* 1 if request was specified as deferred */ 11 28 2 proxy bit (1) unaligned, /* 1 if request submitted for someone else */ 11 29 2 set_bit_cnt bit (1) unaligned, /* 1 if should set bit count after every write call */ 11 30 2 time_in_gmt bit (1) unaligned, /* 1 if deferred_time is in GMT */ 11 31 2 user_deferred_indefinitely bit (1) unaligned, /* 1 if operator is to say when to run it */ 11 32 2 secondary_ok bit (1) unaligned, /* 1 if ok to log in as secondary foreground user */ 11 33 2 truncate_absout bit (1) unaligned, /* 1 if .absout is to be truncated */ 11 34 2 restarted bit (1) unaligned, /* 1 if job is restarted */ 11 35 2 no_start_up bit (1) unaligned, /* 1 if requested -ns */ 11 36 2 attributes_pad bit (26) unaligned; 11 37 11 38 dcl ABS_ATTRIBUTE_NAMES (10) char (28) varying int static options(constant) init( 11 39 "restartable", 11 40 "user_deferred_until_time", 11 41 "proxy", 11 42 "set_bit_cnt", 11 43 "time_in_gmt", 11 44 "user_deferred_indefinitely", 11 45 "secondary_ok", 11 46 "truncate_absout", 11 47 "restarted", 11 48 "no_start_up"); 11 49 11 50 /* END INCLUDE FILE ... user_abs_attributes.incl.pl1 */ 11 51 10 112 10 113 10 114 /* END INCLUDE FILE ... user_attributes.incl.pl1 */ 311 312 313 /* ====================================================================================================== */ 314 315 /* INITIALIZATION. Obtain prices, get and check arguments, initiate files. */ 316 317 call cu_$arg_ptr (1, ap, i, ec); /* get pathname of SAT */ 318 if ec ^= 0 then do; 319 aer: call com_err_ (0, "write_user_usage_report", 320 "Argument error. sat pdtdir reqfile projfile miscfile"); 321 return; 322 end; 323 call expand_path_ (ap, i, addr (sat_dir), addr (sat_name), ec); /* dirname and ename for sat */ 324 if ec ^= 0 then go to aer; 325 call hcs_$initiate (sat_dir, sat_name, "", 0, 0, satp, ec); /* make known and get ptr to sat */ 326 if satp = null then do; 327 err: call com_err_ (ec, "write_user_usage_report", "BILLING IS ABORTED"); 328 go to exit; 329 end; 330 331 call cu_$arg_ptr (2, ap, i, ec); /* path of dir where PDTs */ 332 if ec ^= 0 then go to err; 333 call expand_path_ (ap, i, addr (pdt_dir), null, ec); /* get abs path of wh PDTs */ 334 if ec ^= 0 then go to err; 335 336 call cu_$arg_ptr (3, ap, i, ec); /* third arg, path of dir where reqfile */ 337 if ec ^= 0 then go to aer; 338 call expand_path_ (ap, i, addr (reqdir), addr (reqname), ec); 339 if ec ^= 0 then go to aer; 340 call hcs_$initiate (reqdir, reqname, "", 0, 0, qp, ec); /* Initiate reqfile */ 341 if qp = null then go to err; 342 343 call cu_$arg_ptr (4, ap, i, ec); /* get fourth arg, path of projfile */ 344 if ec ^= 0 then go to aer; 345 call expand_path_ (ap, i, addr (projfile_dir), addr (projfile_name), ec); 346 if ec ^= 0 then go to aer; 347 call hcs_$initiate (projfile_dir, projfile_name, "", 0, 0, pp, ec); /* Initiate projfile. */ 348 if pp = null then go to err; 349 350 call cu_$arg_ptr (5, ap, i, ec); /* fifth arg, path of miscfile */ 351 if ec ^= 0 then go to aer; 352 call expand_path_ (ap, i, addr (miscfile_dir), addr (miscfile_name), ec); 353 if ec ^= 0 then go to aer; 354 call hcs_$initiate (miscfile_dir, miscfile_name, "", 0, 0, miscfilep, ec); 355 if miscfilep = null then go to err; 356 357 call hcs_$initiate_count ((get_wdir_ ()), "billing_footnote", "", notel, 1, notep, ec); 358 if notep ^= null then do; /* Will there be a footnote? */ 359 notel = divide (notel, 9, 17, 0); 360 call ioa_ ("""billing_footnote"" will be added to long bill"); 361 end; 362 363 call system_info_$titles (coxx, dpxx, cods, dpds); /* Get installation ID */ 364 call system_info_$max_rs_number (rs_count); /* see how many rate structures site has defined */ 365 do r = 0 to hbound (prices, 1); 366 call system_info_$rs_name ((r), prices (r).rs_name, ec); 367 if ec ^= 0 then prices (r) = prices (0); /* assume default prices if rate not defined */ 368 else do; 369 call system_info_$prices_rs ((r), prices (r).interactive_cpu_price (*), prices (r).connect_price (*), 370 prices (r).ioops_price (*), prices (r).core_price (*), prices (r).disk_price, prices (r).reg_price); 371 call system_info_$abs_prices_rs ((r), prices (r).abs_cpu_price (*), prices (r).abs_memory_price (*)); 372 call system_info_$io_prices_rs ((r), prices (r).lines_price (*)); 373 call system_info_$device_prices_rs ((r), (0), addr (prices (r).devtab_copy (1))); 374 end; 375 end; 376 377 /* Reset "processed" flags for reqfile and projfile */ 378 379 do i = 1 to reqfile.nacts; 380 reqfile.reqfiletab (i).procssd = 0; 381 end; 382 do i = 1 to projfile.nproj; 383 projfile.projfiletab (i).processed = 0; 384 end; 385 386 /* ------------------------------------------------------- */ 387 388 /* Main loop of this program is on the projects listed in the SAT. One report for each project. */ 389 390 begin; /* get stack frame for u and v arrays, big enough to hold all projects */ 391 392 dcl u (sat.current_size) char (32) aligned; 393 dcl v (sat.current_size) fixed bin; 394 395 396 n = 0; 397 do ii = 1 to sat.current_size; 398 satep = addr (sat.project (ii)); /* pick out a project and get ptr */ 399 n = n + 1; 400 u (n) = project.project_id; 401 v (n) = ii; 402 end; 403 call idsort_ (u, v, n); /* Make sorted list of all projects. */ 404 405 /* Begin loop through projects. */ 406 407 do ii = 1 to n; /* loop thru sorted sat to bill all projects */ 408 satep = addr (sat.project (v (ii))); 409 if project.state = 0 then go to endsatloop; /* skip dead entries */ 410 411 /* Locate each project's PDT and its entries in reqfile and projfile */ 412 413 call ioa_$rsnnl ("^a.pdt", pdt_name, k, project.project_id); 414 call hcs_$initiate (pdt_dir, pdt_name, "", 0, 0, pdtp, ec); 415 if pdtp = null then do; /* No bill if not found. */ 416 nonfaterr: call com_err_ (ec, "write_user_usage_report", "Could not initiate ^a", pdt_name); 417 go to endsatloop; 418 end; 419 420 r = project.rs_number; /* establish correct rate structure index */ 421 422 do k = 1 to projfile.nproj; /* look thru projfile for proj title */ 423 if project.project_id = projfile.projfiletab (k).id then go to fpj; 424 end; 425 call ioa_ ("write_user_usage_report: missing ""projfile"" entry for ""^a""", project.project_id); 426 go to exitm1; 427 428 fpj: if projfile.projfiletab (k).processed ^= 0 then do; 429 call ioa_ ("write_user_usage_report: project ^a has been processed twice", project.project_id); 430 end; 431 projfile.projfiletab (k).processed = 1; 432 433 numproj = numproj + 1; /* increase count of processed projects */ 434 do kk = 1 to reqfile.nacts; /* look thru reqfile */ 435 if project.project_id = reqfile.reqfiletab (kk).acctid then go to facc; 436 end; 437 call ioa_ ("write_user_usage_report: missing ""reqfile"" entry for ""^a""", project.project_id); 438 exitm1: call ioa_ ("Billing cannot proceed. Attempting orderly cleanup."); 439 go to exitm; 440 441 facc: if reqfile.reqfiletab (kk).procssd ^= 0 then do; 442 call ioa_ ("write_user_usage_report: req for project ^a has been processed twice", project.project_id); 443 end; 444 reqfile.reqfiletab (kk).procssd = 1; 445 446 if project.project_id ^= pdt.project_name then 447 call ioa_ ("write_user_usage_report: PDT.project_name for ^a is ^a. Proceeding.", 448 project.project_id, pdt.project_name); 449 450 /* initialize project total variables */ 451 452 proj_interactive_chg, proj_absentee_chg, proj_iod_chg, proj_registration_chg = 0e0; 453 proj_device_chg = 0e0; 454 proj_total_chg = 0e0; 455 proj_interactive_cpu, proj_interactive_connect, proj_interactive_memory, proj_interactive_ioops = 0; 456 proj_disk_chg = 0e0; 457 proj_disk_quota, proj_disk_usage = 0; 458 do j = 0 to 7; 459 project_total.interactive (j).charge = 0e0; 460 project_total.interactive (j).cpu = 0; 461 project_total.interactive (j).core = 0; 462 project_total.interactive (j).connect = 0; 463 project_total.interactive (j).io_ops = 0; 464 end; 465 project_total.logins, project_total.crashes = 0; 466 proj_absentee_memory = 0; 467 proj_absentee_jobs, proj_absentee_cpu = 0; 468 abs_user_count = 0; 469 iod_count = 0; 470 noted = 0; 471 user_count = 0; 472 do j = 1 to 4; 473 project_total.absentee (j).charge = 0e0; 474 project_total.absentee (j).jobs = 0; 475 project_total.absentee (j).cpu = 0; 476 project_total.absentee (j).memory = 0e0; 477 project_total.iod (j).charge = 0e0; 478 project_total.iod (j).pieces = 0; 479 project_total.iod (j).lines = 0; 480 project_total.iod (j).pages = 0; 481 end; 482 do j = 1 to 16; 483 project_total.devices (j) = 0e0; 484 end; 485 proj_iod_pieces, proj_iod_lines = 0; 486 proj_iod_pages = 0; 487 488 /* Now set up the "grade" array y, which orders the users in the project alphabetically. */ 489 490 begin; /* get stack frame for x and y arrays, big enough to hold all users on this project */ 491 492 dcl x (pdt.current_size) char (32) aligned; 493 dcl y (pdt.current_size) fixed bin; 494 495 496 m = 0; 497 lodate_bin = 0; /* zero lodate before each project is processed */ 498 do jj = 1 to pdt.current_size; /* copy usage from each PDT */ 499 pdtep = addr (pdt.user (jj)); /* get pointer to user array */ 500 m = m + 1; 501 if user.state = 0 then x (m) = ""; /* if user not active */ 502 else do; 503 if user.person_id = "*" then x (m) = "anonymous users"; 504 else x (m) = user.person_id; /* array of user names in project */ 505 506 if lodate_bin = 0 then /* if we have no nonzero date yet */ 507 lodate_bin = user.time_last_reset; /* pick up this one */ 508 else /* however, if we already have a nonzero date */ 509 if user.time_last_reset > 0 then /* only if this one is nonzero and */ 510 if user.time_last_reset < lodate_bin then /* less than the one we already have */ 511 lodate_bin = user.time_last_reset; /* will we pick up this one */ 512 513 if user.last_update > hidate_bin then hidate_bin = user.last_update; 514 end; 515 y (m) = jj; /* index array of users in project */ 516 skip1: end; 517 call date_time_ (hidate_bin, hidate); /* Set up dates for report. */ 518 call date_time_ (lodate_bin, lodate); /* ... */ 519 call idsort_ (x, y, m); 520 521 /* First page of bill for each project is summary of charges. Goes on long and short bills */ 522 523 call mailing_page_ (mc, (projfile.sup (k)), (projfile.sup_addr (k))); 524 page, page_s = 1; 525 call projhead (lng, title1, col1, page, linct); 526 call projhead (sht, title1, col1, page_s, linct_s); 527 528 do jj = 1 to m; 529 pdtep = addr (pdt.user (y (jj))); 530 if x (y (jj)) = "" then go to endsloop; 531 532 user_interactive_chg = 0e0; 533 user_absentee_chg = 0e0; 534 user_iod_chg = 0e0; 535 user_device_chg = 0e0; 536 537 if user.state = 2 then do; /* User deleted during month? */ 538 noted = noted + 1; 539 note = "*"; 540 end; 541 else note = ""; 542 user_total_chg = 0e0; /* initialize $charge for each user */ 543 do j = 0 to 7; 544 user_interactive_chg = user_interactive_chg + user.interactive (j).charge; 545 project_total.interactive (j).charge 546 = project_total.interactive (j).charge + user.interactive (j).charge; 547 proj_interactive_chg = proj_interactive_chg + user.interactive (j).charge; 548 grand_total.interactive (j).charge 549 = grand_total.interactive (j).charge + user.interactive (j).charge; 550 grand_interactive_chg = grand_interactive_chg + user.interactive (j).charge; 551 end; 552 do j = 1 to 4; 553 user_absentee_chg = user_absentee_chg + user.absentee (j).charge; 554 project_total.absentee (j).charge = project_total.absentee (j).charge + user.absentee (j).charge; 555 proj_absentee_chg = proj_absentee_chg + user.absentee (j).charge; 556 grand_total.absentee (j).charge = grand_total.absentee (j).charge + user.absentee (j).charge; 557 grand_absentee_chg = grand_absentee_chg + user.absentee (j).charge; 558 user_iod_chg = user_iod_chg + user.iod (j).charge; 559 project_total.iod (j).charge = project_total.iod (j).charge + user.iod (j).charge; 560 proj_iod_chg = proj_iod_chg + user.iod (j).charge; 561 grand_total.iod (j).charge = grand_total.iod (j).charge + user.iod (j).charge; 562 grand_iod_chg = grand_iod_chg + user.iod (j).charge; 563 end; 564 do j = 1 to 16; 565 proj_device_chg = proj_device_chg + user.devices (j); 566 grand_device_chg = grand_device_chg + user.devices (j); 567 user_device_chg = user_device_chg + user.devices (j); 568 project_total.devices (j) = project_total.devices (j) + user.devices (j); 569 grand_total.devices (j) = grand_total.devices (j) + user.devices(j); 570 end; 571 user_total_chg = prices (r).reg_price + user.dollar_charge; /* compute $charge each user */ 572 proj_total_chg = proj_total_chg + user_total_chg; 573 grand_total_chg = grand_total_chg + user_total_chg; 574 proj_registration_chg = proj_registration_chg + prices (r).reg_price; 575 grand_registration_chg = grand_registration_chg + prices (r).reg_price; 576 user_count = user_count + 1; /* count number of users in the project */ 577 numusers = numusers + 1; /* count number of users in the system */ 578 call ioa_$ioa_stream (both, fmt1, note, x (y (jj)), 579 cv_$mwvf (user_interactive_chg), cv_$mwvf (user_absentee_chg), cv_$mwvf (user_iod_chg), 580 cv_$mwvf (prices (r).reg_price), cv_$mwvf (user_device_chg), cv_$mwvf (user_total_chg)); 581 linct = linct + 2; 582 linct_s = linct_s + 2; 583 if linct > 50 then call projhead (lng, title1, col1, page, linct); 584 if linct_s > 50 then call projhead (sht, title1, col1, page_s, linct_s); 585 endsloop: 586 end; 587 588 589 /* Now put out bottom lines of charge summary page. */ 590 591 if linct > 46 then call projhead (lng, title1, col1, page, linct); 592 if linct_s > 46 then call projhead (sht, title1, col1, page_s, linct_s); 593 call ioa_$ioa_stream (both, "^10x^a^/", dash); 594 if user_count = 1 then dn = "1 user"; 595 else call ioa_$rsnnl ("^d users", dn, t1, user_count); 596 call ioa_$ioa_stream (both, fmt1, "", dn, 597 cv_$mwvf (proj_interactive_chg), cv_$mwvf (proj_absentee_chg), cv_$mwvf (proj_iod_chg), 598 cv_$mwvf (proj_registration_chg), cv_$mwvf (proj_device_chg), cv_$mwvf (proj_total_chg)); 599 600 call subtotal; 601 602 /* Interactive usage summary page. Long bill only */ 603 604 if proj_interactive_chg > 0e0 then do; /* if proj active during month, bill */ 605 /* if no interactive charge, go to check absentee charge */ 606 call projhead (lng, title2, col2, page, linct); 607 do jj = 1 to m; /* Loop on all PDT entries for interactive use */ 608 pdtep = addr (pdt.user (y (jj))); 609 if x (y (jj)) = "" then go to enduloop; 610 611 user_interactive_chg = 0e0; 612 user_interactive_cpu = 0; 613 user_interactive_memory = 0; 614 user_interactive_connect = 0; 615 user_interactive_ioops = 0; 616 617 note = ""; 618 if user.state = 2 then note = "*"; 619 do j = 0 to 7; /* charge usage on all shifts */ 620 user_interactive_cpu = user_interactive_cpu + user.interactive (j).cpu; 621 user_interactive_chg = user_interactive_chg + user.interactive (j).charge; 622 cpu_tim (j) = cvt (user.interactive (j).cpu); /* convert time to print */ 623 user_interactive_memory = user_interactive_memory + user.interactive (j).core; 624 memry_usge (j) = float ((user.interactive (j).core)/1e6); /* print format memry usage */ 625 user_interactive_connect = user_interactive_connect + user.interactive (j).connect; 626 connect_tim (j) = cvt (user.interactive (j).connect); 627 user_interactive_ioops = user_interactive_ioops + user.interactive (j).io_ops; 628 trmnl_ioops (j) = float ((user.interactive (j).io_ops)/ 1e3); /* divide for printing */ 629 /* increase proj totals */ 630 project_total.interactive (j).cpu 631 = project_total.interactive (j).cpu + user.interactive (j).cpu; 632 project_total.interactive (j).core 633 = project_total.interactive (j).core + user.interactive (j).core; 634 project_total.interactive (j).connect 635 = project_total.interactive (j).connect + user.interactive (j).connect; 636 project_total.interactive (j).io_ops 637 = project_total.interactive (j).io_ops + user.interactive (j).io_ops; 638 proj_interactive_cpu = proj_interactive_cpu + user.interactive (j).cpu; 639 proj_interactive_connect = proj_interactive_connect + user.interactive (j).connect; 640 proj_interactive_ioops = proj_interactive_ioops + user.interactive (j).io_ops; 641 proj_interactive_memory = proj_interactive_memory + user.interactive (j).core; 642 /* increase grand totals */ 643 grand_total.interactive (j).cpu 644 = grand_total.interactive (j).cpu + user.interactive (j).cpu; 645 grand_total.interactive (j).core 646 = grand_total.interactive (j).core + user.interactive (j).core; 647 grand_total.interactive (j).connect 648 = grand_total.interactive (j).connect + user.interactive (j).connect; 649 grand_total.interactive (j).io_ops 650 = grand_total.interactive (j).io_ops + user.interactive (j).io_ops; 651 grand_interactive_cpu = grand_interactive_cpu + user.interactive (j).cpu; 652 grand_interactive_connect = grand_interactive_connect + user.interactive (j).connect; 653 grand_interactive_ioops = grand_interactive_ioops + user.interactive (j).io_ops; 654 grand_interactive_memory = grand_interactive_memory + user.interactive (j).core; 655 end; 656 project_total.logins = project_total.logins + user.logins; 657 grand_total.logins = grand_total.logins + user.logins; 658 project_total.crashes = project_total.crashes + user.crashes; 659 grand_total.crashes = grand_total.crashes + user.crashes; 660 661 /* write one line on interactive charge page */ 662 663 lin_incrm = 3; 664 do j = 0 to 7; 665 if user.interactive (j).charge > 0e0 666 | user.interactive (j).cpu > 0 667 | user.interactive (j).connect > 0 668 | user.interactive (j).io_ops > 0 669 | user.interactive (j).core > 0 670 then do; 671 672 call ioa_$ioa_stream (lng, format, x (y (jj)), shift_label (j), 673 cpu_tim (j), connect_tim (j), 674 trmnl_ioops (j), memry_usge (j), 675 cv_$mwvf (user.interactive (j).charge)); 676 lin_incrm = lin_incrm + 1; 677 end; 678 end; 679 linct = linct + lin_incrm; 680 681 if user.logins = 0 then call ioa_$ioa_stream (lng, formatz, note, x (y (jj))); 682 else call ioa_$ioa_stream (lng, format1, note, x (y (jj)), total, 683 cvt (user_interactive_cpu), 684 cvt (user_interactive_connect), 685 float (user_interactive_ioops/1e3), float (user_interactive_memory/1e6), 686 user.logins, user.crashes, cv_$mwvf (user_interactive_chg)); 687 if linct > 48 then call projhead (lng, title2, col2, page, linct); 688 enduloop: end; 689 690 /* Total line for interactive usage page */ 691 692 if user_count > 1 then do; /* omit total if one user */ 693 do j = 0 to 7; /* Convert project totals to ASCII. */ 694 cpu_tim (j) = cvt (project_total.interactive (j).cpu); 695 connect_tim (j) = cvt (project_total.interactive (j).connect); 696 trmnl_ioops (j) = float ((project_total.interactive (j).io_ops)/1e3); 697 /* terminal i/o operations ready for printing */ 698 memry_usge (j) = float ((project_total.interactive (j).core)/1e6); 699 end; 700 call ioa_$ioa_stream (lng, "^10x^a^/", dash); 701 702 call ioa_$ioa_stream (lng, formatA, p_header); 703 linct = linct + 3; 704 if linct > 46 then call projhead (lng, title2, col2, page, linct); 705 do j = 0 to 7; 706 if project_total.interactive (j).charge > 0e0 then do; 707 call ioa_$ioa_stream (lng, format, "", shift_label (j), cpu_tim (j), connect_tim (j), 708 trmnl_ioops (j), memry_usge (j), 709 cv_$mwvf (project_total.interactive (j).charge)); 710 end; 711 end; 712 call ioa_$rsnnl ("^d users", dn, j, user_count); 713 call ioa_$ioa_stream (lng, format1, "", dn, total, cvt (proj_interactive_cpu), 714 cvt (proj_interactive_connect), 715 float (proj_interactive_ioops/1e3), float (proj_interactive_memory/1e6), project_total.logins, 716 project_total.crashes, cv_$mwvf (proj_interactive_chg)); 717 end; 718 end; 719 720 /* Absentee usage report page comes next. Long bill only */ 721 722 if proj_absentee_chg > 0e0 then do; /* if proj had any absentee charge for month, bill */ 723 /* else go check io usage */ 724 call projhead (lng, title3, col3, page, linct); 725 do jj = 1 to m; /* Loop through PDT again, for absentee use */ 726 pdtep = addr (pdt.user (y (jj))); 727 if x (y (jj)) = "" then go to endaloop; 728 729 user_absentee_chg = 0e0; 730 user_absentee_cpu = 0; 731 user_absentee_jobs = 0; 732 user_absentee_memory = 0; 733 734 do j = 1 to 4; 735 user_absentee_chg = user_absentee_chg + user.absentee (j).charge; 736 user_absentee_cpu = user_absentee_cpu + user.absentee (j).cpu; 737 user_absentee_jobs = user_absentee_jobs + user.absentee (j).jobs; 738 user_absentee_memory = user_absentee_memory + user.absentee (j).memory; 739 project_total.absentee (j).jobs = project_total.absentee (j).jobs + user.absentee (j).jobs; 740 project_total.absentee (j).cpu = project_total.absentee (j).cpu + user.absentee (j).cpu; 741 project_total.absentee (j).memory = project_total.absentee (j).memory + user.absentee (j).memory; 742 proj_absentee_cpu = proj_absentee_cpu + user.absentee (j).cpu; 743 proj_absentee_memory = proj_absentee_memory + user.absentee (j).memory; 744 proj_absentee_jobs = proj_absentee_jobs + user.absentee (j).jobs; 745 grand_total.absentee (j).jobs = grand_total.absentee (j).jobs + user.absentee (j).jobs; 746 grand_total.absentee (j).cpu = grand_total.absentee (j).cpu + user.absentee (j).cpu; 747 grand_total.absentee (j).memory = grand_total.absentee (j).memory + user.absentee (j).memory; 748 grand_absentee_cpu = grand_absentee_cpu + user.absentee (j).cpu; 749 grand_absentee_memory = grand_absentee_memory + user.absentee (j).memory; 750 grand_absentee_jobs = grand_absentee_jobs + user.absentee (j).jobs; 751 cpu_tim (j) = cvt (user.absentee (j).cpu); 752 memry_usge (j) = float ((user.absentee (j).memory)/1e6); 753 skip: end; 754 if user_absentee_cpu = 0 then go to endaloop; 755 abs_user_count = abs_user_count + 1; /* count of absentee users */ 756 lin_incrm = 3; 757 do j = 1 to 4; 758 if user.absentee (j).charge > 0e0 then do; 759 call ioa_$ioa_stream (lng, absfmt, x (y (jj)), queue_label (j), user.absentee (j).jobs, 760 cpu_tim (j), memry_usge (j), cv_$mwvf (user.absentee (j).charge)); 761 lin_incrm = lin_incrm + 1; 762 end; 763 end; 764 765 linct = linct + lin_incrm; 766 call ioa_$ioa_stream (lng, absfmt1, x (y (jj)), total, user_absentee_jobs, 767 cvt (user_absentee_cpu), float (user_absentee_memory/1e6), cv_$mwvf (user_absentee_chg)); 768 if linct > 48 then call projhead (lng, title3, col3, page, linct); 769 endaloop: end; 770 if abs_user_count > 1 then do; /* if more than one absentee users per proj */ 771 if linct > 46 then call projhead (lng, title3, col3, page, linct); 772 call ioa_$ioa_stream (lng, "^10x^a^/", dash); 773 call ioa_$ioa_stream (lng, formatA, p_header); 774 do j = 1 to 4; 775 if project_total.absentee (j).charge > 0e0 then do; 776 call ioa_$ioa_stream (lng, absfmt, "", queue_label (j), 777 project_total.absentee (j).jobs, 778 cvt (project_total.absentee (j).cpu), float (project_total.absentee (j).memory/1e6), 779 cv_$mwvf (project_total.absentee (j).charge)); 780 end; 781 end; 782 call ioa_$ioa_stream (lng, absfmt1, project.project_id, "Total", proj_absentee_jobs, 783 cvt (proj_absentee_cpu), float (proj_absentee_memory/1e6), cv_$mwvf (proj_absentee_chg)); 784 end; 785 end; 786 787 /* IO Daemon usage page. Long bill only */ 788 789 if proj_iod_chg > 0e0 then do; 790 call projhead (lng, title4, col4, page, linct); 791 do jj = 1 to m; /* Final trip through PDT for daemon usage */ 792 pdtep = addr (pdt.user (y (jj))); 793 if x (y (jj)) = "" then go to endiloop; 794 795 user_iod_chg = 0e0; 796 user_iod_pieces = 0; 797 user_iod_lines = 0; 798 user_iod_pages = 0; 799 800 do j = 1 to 4; 801 user_iod_chg = user_iod_chg + user.iod (j).charge; 802 user_iod_pieces = user_iod_pieces + user.iod (j).pieces; 803 user_iod_lines = user_iod_lines + user.iod (j).lines; 804 user_iod_pages = user_iod_pages + user.iod (j).pages; 805 project_total.iod (j).pieces = project_total.iod (j).pieces + user.iod (j).pieces; 806 project_total.iod (j).lines = project_total.iod (j).lines + user.iod (j).lines; 807 project_total.iod (j).pages = project_total.iod (j).pages + user.iod (j).pages; 808 proj_iod_pieces = proj_iod_pieces + user.iod (j).pieces; 809 proj_iod_lines = proj_iod_lines + user.iod (j).lines; 810 proj_iod_pages = proj_iod_pages + user.iod (j).pages; 811 grand_total.iod (j).pieces = grand_total.iod (j).pieces + user.iod (j).pieces; 812 grand_total.iod (j).lines = grand_total.iod (j).lines + user.iod (j).lines; 813 grand_total.iod (j).pages = grand_total.iod (j).pages + user.iod (j).pages; 814 grand_iod_pieces = grand_iod_pieces + user.iod (j).pieces; 815 grand_iod_lines = grand_iod_lines + user.iod (j).lines; 816 grand_iod_pages = grand_iod_pages + user.iod (j).pages; 817 end; 818 if user_iod_chg = 0e0 then go to endiloop; 819 iod_count = iod_count + 1; 820 lin_incrm = 3; 821 do j = 1 to 4; 822 if user.iod (j).charge > 0e0 then do; 823 call ioa_$ioa_stream (lng, dmnfmt, x (y (jj)), queue_label (j), user.iod (j).pieces, 824 fixed (user.iod (j).lines, 35), 825 fixed (user.iod (j).pages, 35), 826 cv_$mwvf (user.iod (j).charge)); 827 lin_incrm = lin_incrm + 1; 828 end; 829 end; 830 linct = linct + lin_incrm; 831 call ioa_$ioa_stream (lng, dmnfmt1, x (y (jj)), total, user_iod_pieces, 832 fixed (user_iod_lines, 35), fixed (user_iod_pages, 35), cv_$mwvf (user_iod_chg)); 833 if linct > 48 then call projhead (lng, title4, col4, page, linct); 834 endiloop: end; 835 if iod_count > 1 then do; 836 if linct > 46 then call projhead (lng, title4, col4, page, linct); 837 call ioa_$ioa_stream (lng, "^10x^a^/", dash); 838 call ioa_$ioa_stream (lng, formatA, p_header); 839 do j = 1 to 4; 840 if project_total.iod (j).charge > 0e0 then do; 841 call ioa_$ioa_stream (lng, dmnfmt, "", queue_label (j), project_total.iod (j).pieces, 842 fixed (project_total.iod (j).lines, 35), 843 fixed (project_total.iod (j).pages, 35), 844 cv_$mwvf (project_total.iod (j).charge)); 845 end; 846 end; 847 call ioa_$ioa_stream (lng, dmnfmt1, project.project_id, total, 848 proj_iod_pieces, fixed (proj_iod_lines, 35), fixed (proj_iod_pages, 35), 849 cv_$mwvf (proj_iod_chg)); 850 end; 851 end; 852 853 /* Device usage page. */ 854 855 if proj_device_chg > 0e0 then do; 856 call projhead (lng, title5, col5, page, linct); 857 device_count = 0; 858 do jj = 1 to m; 859 pdtep = addr (pdt.user (y (jj))); 860 if x (y (jj)) = "" then go to enddloop; 861 named = "0"b; 862 do j = 1 to 16; 863 if user.devices (j) ^= 0e0 then do; 864 device_count = device_count + 1; 865 if ^named then do; 866 named = "1"b; 867 call ioa_$ioa_stream (lng, "^/^10x^22a ^8a ^15a", 868 x (y (jj)), prices (r).devtab_copy.device_id (j), cv_$mwvf (user.devices (j))); 869 linct = linct + 2; 870 end; 871 else do; 872 call ioa_$ioa_stream (lng, "^34x^8a ^15a", 873 prices (r).devtab_copy.device_id (j), cv_$mwvf (user.devices (j))); 874 linct = linct + 1; 875 end; 876 if linct > 55 then call projhead (lng, title5, col5, page, linct); 877 end; 878 end; 879 enddloop: end; 880 if device_count > 1 then do; 881 if linct > 55 then call projhead (lng, title5, col5, page, linct); 882 call ioa_$ioa_stream (lng, "^/^10x^a^/", dash); 883 call ioa_$ioa_stream (lng, "^10x^9a^24x^15a", project.project_id, cv_$mwvf (proj_device_chg)); 884 end; 885 end; 886 887 call hcs_$terminate_noname (pdtp, ec); /* terminate each pdt as you finish billing project */ 888 889 end; /* END BEGIN BLOCK for PDT size */ 890 891 endsatloop: end; /* end of this project. */ 892 893 894 /* End of main loop on projects. */ 895 896 end; /* END BEGIN BLOCK for SAT size */ 897 898 899 /* -------------------------------------------------------- */ 900 901 /* Check for and process any projects which had no SAT entry but are active in reqfile or projfile. */ 902 903 exitm: noted = 0; 904 r = 0; /* establish default rate structure index */ 905 do k = 1 to projfile.nproj; 906 if projfile.projfiletab (k).processed = 0 907 then if projfile.projfiletab (k).n_misc > 0 | projfile.projfiletab (k).disk_psec > 0 then do; 908 call ioa_ ("write_user_usage_report: projfile entry ""^a"" had no users.", projfile.projfiletab (k).id); 909 projfile.projfiletab (k).processed = 1; 910 numproj = numproj + 1; 911 tempf = 0e0; 912 do kk = 1 to reqfile.nacts; 913 if projfile.projfiletab (k).id = reqfile.reqfiletab (kk).acctid then do; 914 reqfile.reqfiletab (kk).procssd = 1; 915 tempf = reqfile.reqfiletab (kk).chg_mo; 916 go to fpj1; 917 end; 918 end; 919 call ioa_ ("^25xreqfile entry missing"); 920 fpj1: proj_total_chg = tempf - projfile.projfiletab (k).misc_charges 921 - prices (r).disk_price * projfile.projfiletab (k).disk_psec; /* Subtract out because subtotal adds back in */ 922 page, page_s = 1; 923 call projhead (lng, title1, col1, page, linct); 924 call projhead (sht, title1, col1, page_s, linct_s); 925 call subtotal; 926 end; 927 end; 928 929 do kk = 1 to reqfile.nacts; 930 if reqfile.reqfiletab (kk).procssd = 0 then if reqfile.reqfiletab (kk).chg_mo > 0e0 then do; 931 call ioa_ ("write_user_usage_report: reqfile entry ""^a"" $^.2f, 0 PDT charge", 932 reqfile.reqfiletab (kk).acctid, reqfile.reqfiletab (kk).chg_mo); 933 reqfile.reqfiletab (kk).procssd = 1; 934 end; 935 end; 936 937 /* All finished. Put out final grand total page. */ 938 939 call ioa_$ioa_stream (sht, "^|^20x^a^/", cods); /* Put out heading for grand total page. */ 940 call ioa_$ioa_stream (sht, "^30x^a^/", dpds); 941 call ioa_$ioa_stream (sht, l3, "Grand Total", lodate, hidate); 942 call ioa_$ioa_stream (sht, "^/^10xInteractive usage^/"); 943 call ioa_$ioa_stream (sht, col2); 944 do j = 0 to 7; 945 if grand_total.interactive (j).charge > 0e0 then 946 call ioa_$ioa_stream (sht, format, "", shift_label (j), 947 cvt (grand_total.interactive (j).cpu), cvt (grand_total.interactive (j).connect), 948 float (grand_total.interactive (j).io_ops/1e3), float (grand_total.interactive (j).core/1e6), 949 cv_$mwvf (grand_total.interactive (j).charge)); 950 end; 951 call ioa_$ioa_stream (sht, format1, "", "", "Total", /* Write usage total line */ 952 cvt (grand_interactive_cpu), cvt (grand_interactive_connect), float (grand_interactive_ioops/1e3), 953 float (grand_interactive_memory/1e6), grand_total.logins, grand_total.crashes, cv_$mwvf (grand_interactive_chg)); 954 call ioa_$ioa_stream (sht, "^10x^a^/", dash); 955 call ioa_$ioa_stream (sht, "^/^10xAbsentee usage^/"); 956 call ioa_$ioa_stream (sht, col3); 957 do j = 1 to 4; 958 call ioa_$ioa_stream (sht, absfmt, "", queue_label (j), 959 grand_total.absentee (j).jobs, cvt (grand_total.absentee (j).cpu), 960 float (grand_total.absentee (j).memory/1e6), cv_$mwvf (grand_total.absentee (j).charge)); 961 end; 962 call ioa_$ioa_stream (sht, absfmt1, "", "Total", 963 grand_absentee_jobs, cvt (grand_absentee_cpu), (grand_absentee_memory)/1e6, 964 cv_$mwvf (grand_absentee_chg)); 965 call ioa_$ioa_stream (sht, "^10x^a^/", dash); 966 call ioa_$ioa_stream (sht, "^/^10xIO Daemon^/"); 967 call ioa_$ioa_stream (sht, col4); 968 do j = 1 to 4; 969 call ioa_$ioa_stream (sht, dmnfmt, "", queue_label (j), 970 grand_total.iod (j).pieces, 971 fixed (grand_total.iod (j).lines, 35), 972 fixed (grand_total.iod (j).pages, 35), 973 cv_$mwvf (grand_total.iod (j).charge)); 974 end; 975 call ioa_$ioa_stream (sht, dmnfmt1, "", "Total", 976 grand_iod_pieces, fixed (grand_iod_lines, 35), fixed (grand_iod_pages, 35), 977 cv_$mwvf (grand_iod_chg)); 978 call ioa_$ioa_stream (sht, "^10x^a^/", dash); 979 if grand_device_chg > 0e0 then do; 980 call ioa_$ioa_stream (sht, "^/^10xOther Usage^/"); 981 call ioa_$ioa_stream (sht, col5); 982 do j = 1 to 16; 983 if grand_total.devices (j) ^= 0e0 then 984 call ioa_$ioa_stream (sht, "^34x^8a ^15a", prices (r).devtab_copy.device_id (j), cv_$mwvf (grand_total.devices (j))); 985 end; 986 call ioa_$ioa_stream (sht, "^/^34xTotal^4x^15a^/", cv_$mwvf (grand_device_chg)); 987 call ioa_$ioa_stream (sht, "^10x^a^/", dash); 988 end; 989 call ioa_$ioa_stream (sht, col1); 990 call ioa_$rsnnl ("^d users, ^d projects", dn, i, numusers, numproj); 991 call ioa_$ioa_stream (sht, fmt1, "", dn, 992 cv_$mwvf (grand_interactive_chg), cv_$mwvf (grand_absentee_chg), cv_$mwvf (grand_iod_chg), 993 cv_$mwvf (grand_registration_chg), cv_$mwvf (grand_device_chg), cv_$mwvf (grand_total_chg)); 994 call ioa_$rsnnl (dskfmt, dn, j, grand_pmonths, grand_disk_quota, grand_disk_usage); 995 call ioa_$ioa_stream (sht, ptlin, dn, cv_$mwvf (grand_disk_chg)); /* write out disk line */ 996 grand_total_chg = grand_total_chg + grand_disk_chg; /* Get final charge. */ 997 call ioa_$ioa_stream (sht, ptlin, "Total miscellaneous", cv_$mwvf (grand_misc_chg)); 998 grand_total_chg = grand_total_chg + grand_misc_chg; /* increase by total misc charges */ 999 call ioa_$ioa_stream (sht, "^/^10x^a", eqllin); 1000 call ioa_$ioa_stream (sht, ptlin, "Total non-billable", cv_$mwvf (nonbill_total)); 1001 call ioa_$rsnnl ("Total billable from ^a to ^a", dn, j, lodate, hidate); 1002 call ioa_$ioa_stream (sht, ptlin, dn, cv_$mwvf (grand_total_chg - nonbill_total)); 1003 call ioa_ ("End of user usage report. Grand total ^a", cv_$mwvf (grand_total_chg - nonbill_total)); 1004 1005 exit: call hcs_$terminate_noname (satp, ec); /* Terminate sat. */ 1006 call hcs_$terminate_noname (pp, ec); /* Terminate projfile. */ 1007 call hcs_$terminate_noname (qp, ec); /* Terminate reqfile. */ 1008 call hcs_$terminate_noname (miscfilep, ec); /* Terminate miscfile */ 1009 1010 return; /* FINAL EXIT */ 1011 1012 /* ================================================================================================ */ 1013 1014 /* Internal procedures. */ 1015 1016 /* Subtotal for each project in usage report. */ 1017 1018 subtotal: proc; 1019 if linct > 35 then call projhead (lng, title1, col1, page, linct); /* Check page bottom */ 1020 if linct_s > 44 then call projhead (sht, title1, col1, page_s, linct_s); 1021 temp = projfile.projfiletab (k).disk_psec; /* compute proj disk in page-secs */ 1022 pmonths = temp / 2592e3; /* compute page-months */ 1023 proj_disk_chg = prices (r).disk_price * temp; /* compute disk charge per-proj. */ 1024 grand_disk_chg = grand_disk_chg + proj_disk_chg; /* total disk charge for all projects. */ 1025 grand_pmonths = grand_pmonths + pmonths; /* ... and total page-months for all projects. */ 1026 proj_disk_quota = projfile.projfiletab (k).disk_quota; /* get proj quota from projfile */ 1027 proj_disk_usage = projfile.projfiletab (k).disk_use; /* get proj disk use */ 1028 grand_disk_quota = grand_disk_quota + proj_disk_quota; /* total quota for all projects. */ 1029 grand_disk_usage = grand_disk_usage + proj_disk_usage; /* total disk usage for all projects */ 1030 call ioa_$rsnnl (dskfmt, dn, j, pmonths, proj_disk_quota, proj_disk_usage); 1031 call ioa_$ioa_stream (both, ptlin, dn, cv_$mwvf (proj_disk_chg)); /* Write disk total line. */ 1032 proj_total_chg = proj_total_chg + proj_disk_chg; /* Increase proj use by disk charge */ 1033 1034 process_misc_charges: 1035 if projfile.projfiletab (k).n_misc > 0 then do; /* any misc charges? */ 1036 misc_chg = 0e0; 1037 do j = 1 to misc_file.misc_ents; /* search journal */ 1038 if misc_file.misctab (j).mproj = projfile.projfiletab (k).id then do; 1039 misc_chg = misc_chg + misc_file.misctab (j).mamt; 1040 call ioa_$ioa_stream 1041 (both, ptlin, misc_file.misctab (j).mdesc, cv_$mwvf (misc_file.misctab (j).mamt)); 1042 end; 1043 end; 1044 if misc_chg ^= projfile.projfiletab (k).misc_charges then /* Check journal against summary */ 1045 call ioa_ ("write_user_usage_report: total for ""^a"" from ""miscfile"" is $^.2f, projfile has $^.2f", 1046 projfile.projfiletab (k).id, misc_chg, projfile.projfiletab (k).misc_charges); 1047 /* We will use the number from projfile */ 1048 proj_total_chg = proj_total_chg + projfile.projfiletab (k).misc_charges; 1049 /* increase proj total by misc chgs */ 1050 grand_misc_chg = grand_misc_chg + projfile.projfiletab (k).misc_charges; 1051 end; 1052 1053 call ioa_$ioa_stream (both, "^/^10xAccount number ^a, requsition ^a", 1054 reqfile.reqfiletab (kk).mitacct, reqfile.reqfiletab (kk).reqno); 1055 if reqfile.reqfiletab (kk).mitacct = "nonbill" then do; 1056 nonbill_total = nonbill_total + proj_total_chg; 1057 tempf = 0e0; /* avoid discrepancy comment */ 1058 end; 1059 else tempf = proj_total_chg - reqfile.reqfiletab (kk).chg_mo; 1060 /* Calculate difference between pdt charge and reqfile */ 1061 if tempf < 0.005e0 then if tempf > -0.005e0 then go to ok; /* Check to make sure billing ok. */ 1062 call ioa_ ("write_user_usage_report: total for ""^a"" in ""reqfile"" is $^.2f, PDT total $^.2f", 1063 reqfile.reqfiletab (kk).acctid, reqfile.reqfiletab (kk).chg_mo, proj_total_chg); /* Gripe */ 1064 proj_total_chg = reqfile.reqfiletab (kk).chg_mo; /* But tell him what he was really charged */ 1065 1066 ok: call ioa_$ioa_stream (both, "^/^10x^a", eqllin); 1067 1068 call ioa_$rsnnl ("Charge for ""^a""", dn, j, projfile.projfiletab (k).id); 1069 call ioa_$ioa_stream (both, ptlin, dn, cv_$mwvf (proj_total_chg)); /* write proj total */ 1070 1071 if noted > 0 then /* Were any users deleted? */ 1072 call ioa_$ioa_stream (both, "^/^8x* user deleted during the month"); 1073 1074 /* list installation resource prices */ 1075 1076 call ioa_$ioa_stream (mc, "^/^/^20xThe following prices are used: "); 1077 if rs_count > 0 then /* if site has multiple rate structures */ 1078 call ioa_$ioa_stream (both, "^/^/^20xRate structure: ^a", prices (r).rs_name); /* print this one's name */ 1079 call ioa_$ioa_stream (mc, "^/^25xInteractive: "); 1080 call ioa_$ioa_stream (mc, "^/^35xCPU^12xConnect^12xTerminal I/O^14xMemory"); 1081 do ix = 0 to 7; 1082 if prices (r).interactive_cpu_price (ix) + prices (r).connect_price (ix) > 0e0 then 1083 call ioa_$ioa_stream (mc, "^12xshift ^1d ^15a/hr ^15a/hr ^15a/K lines ^15a/Kmu", 1084 ix, cv_$mwvf (prices (r).interactive_cpu_price (ix)), cv_$mwvf (prices (r).connect_price (ix)), cv_$mwvf (prices (r).ioops_price (ix)), 1085 cv_$mwvf (prices (r).core_price (ix))); 1086 end; 1087 call ioa_$ioa_stream (mc, "^/^28xAbsentee:^25xIO Daemon:"); 1088 call ioa_$ioa_stream (mc, "^/^35xCPU^14xMemory^18xPrint"); 1089 do ix = 1 to 4; 1090 call ioa_$ioa_stream (mc, "^12xqueue ^1d ^15a/hr ^15a/Kmu^15a/K lines", 1091 ix, cv_$mwvf (prices (r).abs_cpu_price (ix)), cv_$mwvf (prices (r).abs_memory_price (ix)), 1092 cv_$mwvf (prices (r).lines_price (ix))); 1093 end; 1094 call ioa_$ioa_stream (mc, "^/^20x^a/month registration fee per user", cv_$mwvf (prices (r).reg_price)); 1095 call ioa_$ioa_stream (mc, "^20x^a/disk page per month (^f per page-second)", 1096 cv_$mwvf (prices (r).disk_price*30*24*3600), prices (r).disk_price); 1097 call ioa_$ioa_stream (mc, "^/^10xAll usage is shown truncated up to the next highest minute."); 1098 1099 /* Footnote processing */ 1100 1101 if notep ^= null then do; 1102 call ioa_$ioa_stream (mc, ""); /* blank line before */ 1103 oix = 1; 1104 do ix = 1 to notel; 1105 if notes.ch (ix) = NL then do; 1106 dn = substr (notestr, oix, ix-oix); 1107 call ioa_$ioa_stream (mc, "^a", dn); 1108 oix = ix+1; 1109 end; 1110 end; 1111 end; 1112 1113 return; 1114 end subtotal; 1115 1116 /* ------------------------------- */ 1117 1118 projhead: proc (stream, ttitle, colhd, pagno, lct); 1119 1120 /* procedure for making project headers */ 1121 1122 dcl (stream, ttitle, colhd) char (*) aligned, 1123 (pagno, lct) fixed bin; 1124 1125 call ioa_$ioa_stream (stream, "^|^20x^a^/", cods); /* put out heading */ 1126 call ioa_$ioa_stream (stream, "^30x^a^/", dpds); /* ... */ 1127 call ioa_$ioa_stream (stream, l3, ttitle, lodate, hidate); 1128 call ioa_$ioa_stream (stream, l4, projfile.projfiletab (k).id, projfile.projfiletab (k).title, pagno, 1129 sup (k), sup_addr (k)); 1130 call ioa_$ioa_stream (stream, colhd); 1131 call ioa_$ioa_stream (stream, "^10x^a^/", dash); 1132 pagno = pagno + 1; 1133 lct = 18; 1134 end projhead; 1135 1136 /* ---------------------------------- */ 1137 1138 cvt: proc (time) returns (char (8) aligned); 1139 1140 /* procedure to convert time from fixed bin (71) to a nice formatted string of hrs: mins */ 1141 1142 dcl time fixed bin (71), 1143 j fixed bin, 1144 hours fixed bin, 1145 minutes fixed bin, 1146 answer char (8) aligned; 1147 1148 if time = 0 then return (" "); 1149 minutes = divide ((time+SIXTYMILLION-1), SIXTYMILLION, 35, 0); 1150 hours = divide (minutes, 60, 35, 0); 1151 minutes = mod (minutes, 60); /* get rid of the remainder */ 1152 1153 call ioa_$rsnnl ("^5d:^2d", answer, j, hours, minutes); 1154 if substr (answer, 7, 1) = " " then substr (answer, 7, 1) = "0"; 1155 /* if less than 10 minutes, tidy up format */ 1156 1157 return (answer); 1158 end; 1159 1160 end write_user_usage_report; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/29/88 0858.7 write_user_usage_report.pl1 >spec>install>1093>write_user_usage_report.pl1 304 1 07/28/81 2248.2 grand_total.incl.pl1 >ldd>include>grand_total.incl.pl1 305 2 05/06/74 1742.4 miscfile.incl.pl1 >ldd>include>miscfile.incl.pl1 306 3 09/13/84 0921.6 pdt.incl.pl1 >ldd>include>pdt.incl.pl1 3-29 4 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 307 5 07/28/81 2248.2 project_total.incl.pl1 >ldd>include>project_total.incl.pl1 308 6 09/20/84 0925.7 projfile.incl.pl1 >ldd>include>projfile.incl.pl1 309 7 09/20/84 0925.7 reqfile.incl.pl1 >ldd>include>reqfile.incl.pl1 310 8 08/06/87 1416.6 sat.incl.pl1 >ldd>include>sat.incl.pl1 8-34 9 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 311 10 08/06/87 0913.6 user_attributes.incl.pl1 >ldd>include>user_attributes.incl.pl1 10-112 11 07/14/88 2015.0 user_abs_attributes.incl.pl1 >ldd>include>user_abs_attributes.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. NL 016552 constant char(1) initial dcl 67 ref 1105 SIXTYMILLION 000000 constant fixed bin(35,0) initial dcl 67 ref 1149 1149 abs_cpu_price 10 001162 automatic float bin(27) array level 2 dcl 259 set ref 371* 1090* 1090* abs_memory_price 14 001162 automatic float bin(27) array level 2 dcl 259 set ref 371* 1090* 1090* abs_user_count 000100 automatic fixed bin(17,0) dcl 67 set ref 468* 755* 755 770 absentee 122 005542 automatic structure array level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" absentee 244 based structure array level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" absentee 122 005316 automatic structure array level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" absfmt 000367 internal static char(60) initial dcl 212 set ref 759* 776* 958* absfmt1 000406 internal static char(60) initial dcl 212 set ref 766* 782* 962* acctid 10 based char(12) array level 3 packed packed unaligned dcl 7-5 set ref 435 913 931* 1062* addr builtin function dcl 186 ref 323 323 323 323 333 333 338 338 338 338 345 345 345 345 352 352 352 352 373 373 398 408 499 529 608 726 792 859 answer 000104 automatic char(8) dcl 1142 set ref 1153* 1154 1154* 1157 ap 000102 automatic pointer dcl 67 set ref 317* 323* 331* 333* 336* 338* 343* 345* 350* 352* both 000030 internal static char(32) initial dcl 190 set ref 578* 593* 596* 1031* 1040* 1053* 1066* 1069* 1071* 1077* ch based char(1) array level 2 packed packed unaligned dcl 193 ref 1105 charge 244 based float bin(27) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 553 554 555 556 557 735 758 759* 759* charge 152 005542 automatic float bin(27) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 477* 559* 559 840 841* 841* charge 122 005542 automatic float bin(27) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 473* 554* 554 775 776* 776* charge 124 based float bin(27) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 544 545 547 548 550 621 665 672* 672* charge 122 005316 automatic float bin(27) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 958* 958* 1-5* 1-5* 1-5* 1-5* 556* 556 charge 152 005316 automatic float bin(27) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 969* 969* 1-5* 1-5* 1-5* 1-5* 561* 561 charge 2 005542 automatic float bin(27) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 459* 545* 545 706 707* 707* charge 2 005316 automatic float bin(27) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 945 945* 945* 1-5* 548* 548 charge 274 based float bin(27) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 558 559 560 561 562 801 822 823* 823* chg_mo 50 based float bin(63) array level 3 dcl 7-5 set ref 915 930 931* 1059 1062* 1064 cods 000156 automatic char(120) dcl 67 set ref 363* 939* 1125* col1 000520 internal static char(120) initial dcl 245 set ref 525* 526* 583* 584* 591* 592* 923* 924* 989* 1019* 1020* col2 000556 internal static char(120) initial dcl 245 set ref 606* 687* 704* 943* col3 000614 internal static char(120) initial dcl 245 set ref 724* 768* 771* 956* col4 000652 internal static char(120) initial dcl 245 set ref 790* 833* 836* 967* col5 000710 internal static char(120) initial dcl 245 set ref 856* 876* 881* 981* colhd parameter char dcl 1122 set ref 1118 1130* com_err_ 000752 constant entry external dcl 278 ref 319 327 416 connect 132 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 625 626* 634 639 647 652 665 connect 10 005542 automatic fixed bin(71,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 462* 634* 634 695* connect 10 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 945* 945* 1-5* 647* 647 connect_price 20 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 1082 1082* 1082* connect_tim 000104 automatic char(8) array dcl 67 set ref 626* 672* 695* 707* core 130 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 623 624 632 641 645 654 665 core 6 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 945 945 1-5* 645* 645 core 6 005542 automatic fixed bin(71,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 461* 632* 632 698 core_price 30 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 1082* 1082* coxx 000154 automatic char(4) dcl 67 set ref 363* cpu 124 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 958* 958* 1-5* 1-5* 1-5* 1-5* 746* 746 cpu 124 005542 automatic fixed bin(71,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 475* 740* 740 776* 776* cpu 126 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 620 622* 630 638 643 651 665 cpu 4 005542 automatic fixed bin(71,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 460* 630* 630 694* cpu 246 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 736 740 742 746 748 751* cpu 4 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 945* 945* 1-5* 643* 643 cpu_tim 000134 automatic char(8) array dcl 67 set ref 622* 672* 694* 707* 751* 759* crashes 123 based fixed bin(17,0) level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 658 659 682* crashes 1 005542 automatic fixed bin(17,0) level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 465* 658* 658 713* crashes 1 005316 automatic fixed bin(17,0) initial level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 951* 1-5* 659* 659 cu_$arg_ptr 000754 constant entry external dcl 278 ref 317 331 336 343 350 current_size 36 based fixed bin(17,0) level 2 in structure "sat" dcl 8-32 in procedure "write_user_usage_report" ref 392 393 397 current_size 36 based fixed bin(17,0) level 2 in structure "pdt" dcl 3-27 in procedure "write_user_usage_report" ref 492 493 498 cv_$mwvf 000756 constant entry external dcl 278 ref 578 578 578 578 578 578 578 578 578 578 578 578 596 596 596 596 596 596 596 596 596 596 596 596 672 672 682 682 707 707 713 713 759 759 766 766 776 776 782 782 823 823 831 831 841 841 847 847 867 867 872 872 883 883 945 945 951 951 958 958 962 962 969 969 975 975 983 983 986 986 991 991 991 991 991 991 991 991 991 991 991 991 995 995 997 997 1000 1000 1002 1002 1003 1003 1031 1031 1040 1040 1069 1069 1082 1082 1082 1082 1082 1082 1082 1082 1090 1090 1090 1090 1090 1090 1094 1094 1095 1095 dash 000141 internal static char(120) initial dcl 202 set ref 593* 700* 772* 837* 882* 954* 965* 978* 987* 1131* date_time_ 000760 constant entry external dcl 278 ref 517 518 device_count 000252 automatic fixed bin(17,0) dcl 67 set ref 857* 864* 864 880 device_id 40 001162 automatic char(8) array level 3 dcl 259 set ref 867* 872* 983* devices 324 based float bin(27) array level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 565 566 567 568 569 863 867* 867* 872* 872* devices 202 005316 automatic float bin(27) initial array level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 983 983* 983* 1-5* 569* 569 devices 202 005542 automatic float bin(27) array level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 483* 568* 568 devtab_copy 40 001162 automatic structure array level 2 dcl 259 set ref 373 373 disk_price 300 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 920 1023 1095 1095 1095* disk_psec 100 based fixed bin(71,0) array level 3 dcl 6-6 ref 906 920 1021 disk_quota 102 based fixed bin(35,0) array level 3 dcl 6-6 ref 1026 disk_use 104 based fixed bin(35,0) array level 3 dcl 6-6 ref 1027 divide builtin function dcl 186 ref 359 1149 1150 dmnfmt 000331 internal static char(60) initial dcl 212 set ref 823* 841* 969* dmnfmt1 000350 internal static char(60) initial dcl 212 set ref 831* 847* 975* dmns 000253 automatic fixed bin(17,0) initial dcl 67 set ref 67* dmnx 000254 automatic fixed bin(17,0) initial dcl 67 set ref 67* dn 000255 automatic char(168) dcl 67 set ref 594* 595* 596* 712* 713* 990* 991* 994* 995* 1001* 1002* 1030* 1031* 1068* 1069* 1106* 1107* dollar_charge 75 based float bin(27) level 2 dcl 3-58 ref 571 dpds 000214 automatic char(120) dcl 67 set ref 363* 940* 1126* dpxx 000155 automatic char(4) dcl 67 set ref 363* dskfmt 000110 internal static char(80) initial dcl 202 set ref 994* 1030* ec 000327 automatic fixed bin(17,0) dcl 67 set ref 317* 318 323* 324 325* 327* 331* 332 333* 334 336* 337 338* 339 340* 343* 344 345* 346 347* 350* 351 352* 353 354* 357* 366* 367 414* 416* 887* 1005* 1006* 1007* 1008* eqllin 000177 internal static char(120) initial dcl 202 set ref 999* 1066* expand_path_ 000762 constant entry external dcl 278 ref 323 333 338 345 352 fixed builtin function dcl 186 ref 823 823 823 823 831 831 831 831 841 841 841 841 847 847 847 847 969 969 969 969 975 975 975 975 float builtin function dcl 186 ref 624 628 682 682 682 682 696 698 713 713 713 713 752 766 766 776 776 782 782 945 945 945 945 951 951 951 951 958 958 fmt1 000312 internal static char(60) initial dcl 212 set ref 578* 596* 991* format 000235 internal static char(50) initial dcl 212 set ref 672* 707* 945* format1 000252 internal static char(65) initial dcl 212 set ref 682* 713* 951* formatA 000425 internal static char(10) initial dcl 212 set ref 702* 773* 838* formatz 000273 internal static char(60) initial dcl 212 set ref 681* get_wdir_ 000764 constant entry external dcl 278 ref 357 grand_absentee_chg 000330 automatic float bin(27) initial dcl 67 set ref 67* 557* 557 962* 962* 991* 991* grand_absentee_cpu 000332 automatic fixed bin(71,0) initial dcl 67 set ref 67* 748* 748 962* 962* grand_absentee_jobs 000334 automatic fixed bin(17,0) initial dcl 67 set ref 67* 750* 750 962* grand_absentee_memory 000336 automatic fixed bin(71,0) initial dcl 67 set ref 67* 749* 749 962 grand_device_chg 000340 automatic float bin(27) initial dcl 67 set ref 67* 566* 566 979 986* 986* 991* 991* grand_disk_chg 000341 automatic float bin(27) initial dcl 67 set ref 67* 995* 995* 996 1024* 1024 grand_disk_quota 000342 automatic fixed bin(17,0) initial dcl 67 set ref 67* 994* 1028* 1028 grand_disk_usage 000343 automatic fixed bin(17,0) initial dcl 67 set ref 67* 994* 1029* 1029 grand_interactive_chg 000344 automatic float bin(27) initial dcl 67 set ref 67* 550* 550 951* 951* 991* 991* grand_interactive_connect 000346 automatic fixed bin(71,0) initial dcl 67 set ref 67* 652* 652 951* 951* grand_interactive_cpu 000352 automatic fixed bin(71,0) initial dcl 67 set ref 67* 651* 651 951* 951* grand_interactive_ioops 000354 automatic fixed bin(71,0) initial dcl 67 set ref 67* 653* 653 951 951 grand_interactive_memory 000350 automatic fixed bin(71,0) initial dcl 67 set ref 67* 654* 654 951 951 grand_iod_chg 000356 automatic float bin(27) initial dcl 67 set ref 67* 562* 562 975* 975* 991* 991* grand_iod_lines 000360 automatic fixed bin(71,0) initial dcl 67 set ref 67* 815* 815 975 975 grand_iod_pages 000362 automatic fixed bin(71,0) initial dcl 67 set ref 67* 816* 816 975 975 grand_iod_pieces 000364 automatic fixed bin(17,0) initial dcl 67 set ref 67* 814* 814 975* grand_misc_chg 000365 automatic float bin(27) initial dcl 67 set ref 67* 997* 997* 998 1050* 1050 grand_pmonths 000366 automatic float bin(27) initial dcl 67 set ref 67* 994* 1025* 1025 grand_registration_chg 000370 automatic float bin(27) initial dcl 67 set ref 67* 575* 575 991* 991* grand_total 005316 automatic structure level 1 dcl 1-5 grand_total_chg 000367 automatic float bin(27) initial dcl 67 set ref 67* 573* 573 991* 991* 996* 996 998* 998 1002 1002 1003 1003 hbound builtin function dcl 186 ref 365 hcs_$initiate 000766 constant entry external dcl 278 ref 325 340 347 354 414 hcs_$initiate_count 000770 constant entry external dcl 278 ref 357 hcs_$terminate_noname 000772 constant entry external dcl 278 ref 887 1005 1006 1007 1008 hidate 000372 automatic char(8) dcl 67 set ref 517* 941* 1001* 1127* hidate_bin 000374 automatic fixed bin(71,0) initial dcl 67 set ref 67* 513 513* 517* hours 000101 automatic fixed bin(17,0) dcl 1142 set ref 1150* 1153* i 000377 automatic fixed bin(17,0) dcl 67 set ref 317* 323* 331* 333* 336* 338* 343* 345* 350* 352* 379* 380* 382* 383* 990* id 10 based char(12) array level 3 packed packed unaligned dcl 6-6 set ref 423 908* 913 1038 1044* 1068* 1128* idsort_ 000774 constant entry external dcl 278 ref 403 519 ii 000400 automatic fixed bin(17,0) dcl 67 set ref 397* 398 401* 407* 408* interactive 124 based structure array level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" interactive 2 005542 automatic structure array level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" interactive 2 005316 automatic structure array level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" interactive_cpu_price 301 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 1082 1082* 1082* io_ops 12 005542 automatic fixed bin(71,0) initial array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 5-5* 463* 636* 636 696 io_ops 134 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 627 628 636 640 649 653 665 io_ops 12 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 945 945 1-5* 649* 649 ioa_ 000776 constant entry external dcl 278 ref 360 425 429 437 438 442 446 908 919 931 1003 1044 1062 ioa_$ioa_stream 001002 constant entry external dcl 278 ref 578 593 596 672 681 682 700 702 707 713 759 766 772 773 776 782 823 831 837 838 841 847 867 872 882 883 939 940 941 942 943 945 951 954 955 956 958 962 965 966 967 969 975 978 980 981 983 986 987 989 991 995 997 999 1000 1002 1031 1040 1053 1066 1069 1071 1076 1077 1079 1080 1082 1087 1088 1090 1094 1095 1097 1102 1107 1125 1126 1127 1128 1130 1131 ioa_$rsnnl 001000 constant entry external dcl 278 ref 413 595 712 990 994 1001 1030 1068 1153 iod 152 005316 automatic structure array level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" iod 274 based structure array level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" iod 152 005542 automatic structure array level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" iod_count 000376 automatic fixed bin(17,0) dcl 67 set ref 469* 819* 819 835 ioops_price 311 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 1082* 1082* ix 000516 automatic fixed bin(17,0) dcl 67 set ref 1081* 1082 1082 1082* 1082 1082 1082 1082 1082 1082 1082 1082* 1089* 1090* 1090 1090 1090 1090 1090 1090* 1104* 1105 1106 1108* j 000100 automatic fixed bin(17,0) dcl 1142 in procedure "cvt" set ref 1153* j 000401 automatic fixed bin(17,0) dcl 67 in procedure "write_user_usage_report" set ref 458* 459 460 461 462 463* 472* 473 474 475 476 477 478 479 480* 482* 483* 543* 544 545 545 545 547 548 548 548 550* 552* 553 554 554 554 555 556 556 556 557 558 559 559 559 560 561 561 561 562* 564* 565 566 567 568 568 568 569 569 569* 619* 620 621 622 622 623 624 624 625 626 626 627 628 628 630 630 630 632 632 632 634 634 634 636 636 636 638 639 640 641 643 643 643 645 645 645 647 647 647 649 649 649 651 652 653 654* 664* 665 665 665 665 665 672 672 672 672 672 672 672* 693* 694 694 695 695 696 696 698 698* 705* 706 707 707 707 707 707 707 707* 712* 734* 735 736 737 738 739 739 739 740 740 740 741 741 741 742 743 744 745 745 745 746 746 746 747 747 747 748 749 750 751 751 752 752* 757* 758 759 759 759 759 759 759* 774* 775 776 776 776 776 776 776 776 776* 800* 801 802 803 804 805 805 805 806 806 806 807 807 807 808 809 810 811 811 811 812 812 812 813 813 813 814 815 816* 821* 822 823 823 823 823 823 823 823 823* 839* 840 841 841 841 841 841 841 841 841* 862* 863 867 867 867 872 872 872* 944* 945 945 945 945 945 945 945 945 945 945 945 945* 957* 958 958 958 958 958 958 958 958* 968* 969 969 969 969 969 969 969 969* 982* 983 983 983 983* 994* 1001* 1030* 1037* 1038 1039 1040 1040 1040* 1068* jj 000402 automatic fixed bin(17,0) dcl 67 set ref 498* 499 515* 528* 529 530 578* 607* 608 609 672 681 682* 725* 726 727 759 766* 791* 792 793 823 831* 858* 859 860 867* jobs 123 005316 automatic fixed bin(17,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 958* 1-5* 1-5* 1-5* 1-5* 745* 745 jobs 123 005542 automatic fixed bin(17,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 474* 739* 739 776* jobs 245 based fixed bin(17,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 737 739 744 745 750 759* k 000403 automatic fixed bin(17,0) dcl 67 set ref 413* 422* 423* 428 431 523 523 905* 906 906 906 908 909 913 920 920* 1021 1026 1027 1034 1038 1044 1044 1044 1048 1050 1068 1128 1128 1128 1128 kk 000404 automatic fixed bin(17,0) dcl 67 set ref 434* 435* 441 444 912* 913 914 915* 929* 930 930 931 931 933* 1053 1053 1055 1059 1062 1062 1064 l3 000050 internal static char(48) initial dcl 202 set ref 941* 1127* l4 000064 internal static char(80) initial dcl 202 set ref 1128* last_update 120 based fixed bin(71,0) level 2 dcl 3-58 ref 513 513 lct parameter fixed bin(17,0) dcl 1122 set ref 1118 1133* lin_incrm 000407 automatic fixed bin(17,0) initial dcl 67 set ref 67* 663* 676* 676 679 756* 761* 761 765 820* 827* 827 830 linct 000410 automatic fixed bin(17,0) dcl 67 set ref 525* 581* 581 583 583* 591 591* 606* 679* 679 687 687* 703* 703 704 704* 724* 765* 765 768 768* 771 771* 790* 830* 830 833 833* 836 836* 856* 869* 869 874* 874 876 876* 881 881* 923* 1019 1019* linct_s 000411 automatic fixed bin(17,0) dcl 67 set ref 526* 582* 582 584 584* 592 592* 924* 1020 1020* lines 156 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 969 969 1-5* 1-5* 1-5* 1-5* 812* 812 lines 156 005542 automatic fixed bin(71,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 479* 806* 806 841 841 lines 300 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 803 806 809 812 815 823 823 lines_price 321 001162 automatic float bin(27) array level 2 dcl 259 set ref 372* 1090* 1090* lng 000010 internal static char(32) initial dcl 188 set ref 525* 583* 591* 606* 672* 681* 682* 687* 700* 702* 704* 707* 713* 724* 759* 766* 768* 771* 772* 773* 776* 782* 790* 823* 831* 833* 836* 837* 838* 841* 847* 856* 867* 872* 876* 881* 882* 883* 923* 1019* lodate 000412 automatic char(8) dcl 67 set ref 518* 941* 1001* 1127* lodate_bin 000414 automatic fixed bin(71,0) dcl 67 set ref 497* 506 506* 508 508* 518* logins 122 based fixed bin(17,0) level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 656 657 681 682* logins 005316 automatic fixed bin(17,0) initial level 2 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 951* 1-5* 657* 657 logins 005542 automatic fixed bin(17,0) level 2 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 465* 656* 656 713* m 000416 automatic fixed bin(17,0) dcl 67 set ref 496* 500* 500 501 503 504 515 519* 528 607 725 791 858 mailing_page_ 001004 constant entry external dcl 278 ref 523 mamt 15 based float bin(27) array level 3 dcl 2-3 set ref 1039 1040* 1040* mc 000040 internal static char(32) initial dcl 191 set ref 523* 1076* 1079* 1080* 1082* 1087* 1088* 1090* 1094* 1095* 1097* 1102* 1107* mdesc 20 based char(64) array level 3 dcl 2-3 set ref 1040* memory 126 005316 automatic fixed bin(71,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 958 958 1-5* 1-5* 1-5* 1-5* 747* 747 memory 250 based fixed bin(71,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 738 741 743 747 749 752 memory 126 005542 automatic fixed bin(71,0) initial array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 5-5* 5-5* 5-5* 5-5* 476* 741* 741 776 776 memry_usge 000124 automatic float bin(27) initial array dcl 67 set ref 67* 624* 672* 698* 707* 752* 759* minutes 000102 automatic fixed bin(17,0) dcl 1142 set ref 1149* 1150 1151* 1151 1153* misc_charges 106 based float bin(27) array level 3 dcl 6-6 set ref 920 1044 1044* 1048 1050 misc_chg 000417 automatic float bin(27) initial dcl 67 set ref 67* 1036* 1039* 1039 1044 1044* misc_ents based fixed bin(17,0) level 2 dcl 2-3 ref 1037 misc_file based structure level 1 dcl 2-3 miscfile_dir 000422 automatic char(168) dcl 67 set ref 352 352 354* miscfile_name 000474 automatic char(32) dcl 67 set ref 352 352 354* miscfilep 000420 automatic pointer dcl 67 set ref 354* 355 1008* 1037 1038 1039 1040 1040 1040 misctab 10 based structure array level 2 dcl 2-3 mitacct 13 based char(12) array level 3 packed packed unaligned dcl 7-5 set ref 1053* 1055 mod builtin function dcl 186 ref 1151 mproj 12 based char(12) array level 3 dcl 2-3 ref 1038 n 000405 automatic fixed bin(17,0) dcl 67 set ref 396* 399* 399 400 401 403* 407 n_misc 107 based fixed bin(17,0) array level 3 dcl 6-6 ref 906 1034 nacts based fixed bin(17,0) level 2 dcl 7-5 ref 379 434 912 929 named 000504 automatic bit(1) packed unaligned dcl 67 set ref 861* 865 866* nonbill_total 000505 automatic float bin(27) initial dcl 67 set ref 67* 1000* 1000* 1002 1002 1003 1003 1056* 1056 note 000506 automatic char(1) dcl 67 set ref 539* 541* 578* 617* 618* 681* 682* noted 000507 automatic fixed bin(17,0) dcl 67 set ref 470* 538* 538 903* 1071 notel 000510 automatic fixed bin(17,0) dcl 67 set ref 357* 359* 359 1104 notep 000512 automatic pointer dcl 67 set ref 357* 358 1101 1105 1106 notes based structure level 1 dcl 193 notestr based char(131071) dcl 196 ref 1106 nproj based fixed bin(35,0) level 2 dcl 6-6 ref 382 422 905 null builtin function dcl 186 ref 326 333 333 341 348 355 358 415 1101 numproj 000514 automatic fixed bin(17,0) initial dcl 67 set ref 67* 433* 433 910* 910 990* numusers 000515 automatic fixed bin(17,0) initial dcl 67 set ref 67* 577* 577 990* oix 000517 automatic fixed bin(17,0) dcl 67 set ref 1103* 1106 1106 1108* p_header 000746 internal static char(14) initial dcl 256 set ref 702* 773* 838* pad 154 005316 automatic fixed bin(35,0) initial array level 3 dcl 1-5 set ref 1-5* 1-5* 1-5* 1-5* page 000530 automatic fixed bin(17,0) dcl 67 set ref 524* 525* 583* 591* 606* 687* 704* 724* 768* 771* 790* 833* 836* 856* 876* 881* 922* 923* 1019* page_s 000531 automatic fixed bin(17,0) dcl 67 set ref 524* 526* 584* 592* 922* 924* 1020* pages 155 005542 automatic fixed bin(35,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 480* 807* 807 841 841 pages 155 005316 automatic fixed bin(35,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 969 969 1-5* 1-5* 1-5* 1-5* 813* 813 pages 277 based fixed bin(35,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 804 807 810 813 816 823 823 pagno parameter fixed bin(17,0) dcl 1122 set ref 1118 1128* 1132* 1132 pdt based structure level 1 dcl 3-27 pdt_dir 000533 automatic char(168) dcl 67 set ref 333 333 414* pdt_name 000605 automatic char(32) dcl 67 set ref 413* 414* 416* pdtep 000616 automatic pointer dcl 67 set ref 499* 501 503 504 506 508 508 508 513 513 529* 537 544 545 547 548 550 553 554 555 556 557 558 559 560 561 562 565 566 567 568 569 571 608* 618 620 621 622 623 624 625 626 627 628 630 632 634 636 638 639 640 641 643 645 647 649 651 652 653 654 656 657 658 659 665 665 665 665 665 672 672 681 682 682 726* 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 758 759 759 759 792* 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 822 823 823 823 823 823 823 823 859* 863 867 867 872 872 pdtp 000620 automatic pointer dcl 67 set ref 414* 415 446 446 492 493 498 499 529 608 726 792 859 887* person_id 2 based char(24) level 2 dcl 3-58 ref 503 504 pieces 153 005542 automatic fixed bin(17,0) array level 3 in structure "project_total" dcl 5-5 in procedure "write_user_usage_report" set ref 478* 805* 805 841* pieces 153 005316 automatic fixed bin(17,0) initial array level 3 in structure "grand_total" dcl 1-5 in procedure "write_user_usage_report" set ref 969* 1-5* 1-5* 1-5* 1-5* 811* 811 pieces 275 based fixed bin(17,0) array level 3 in structure "user" dcl 3-58 in procedure "write_user_usage_report" set ref 802 805 808 811 814 823* pmonths 000532 automatic float bin(27) initial dcl 67 set ref 67* 1022* 1025 1030* pp 000622 automatic pointer dcl 67 set ref 347* 348 382 383 422 423 428 431 523 523 905 906 906 906 908 909 913 920 920 1006* 1021 1026 1027 1034 1038 1044 1044 1044 1048 1050 1068 1128 1128 1128 1128 prices 001162 automatic structure array level 1 unaligned dcl 259 set ref 365 367* 367 processed 110 based fixed bin(17,0) array level 3 dcl 6-6 set ref 383* 428 431* 906 909* procssd 23 based fixed bin(17,0) array level 3 dcl 7-5 set ref 380* 441 444* 914* 930 933* proj_absentee_chg 000624 automatic float bin(27) initial dcl 67 set ref 67* 452* 555* 555 596* 596* 722 782* 782* proj_absentee_cpu 000626 automatic fixed bin(71,0) initial dcl 67 set ref 67* 467* 742* 742 782* 782* proj_absentee_jobs 000630 automatic fixed bin(17,0) initial dcl 67 set ref 67* 467* 744* 744 782* proj_absentee_memory 000632 automatic fixed bin(71,0) initial dcl 67 set ref 67* 466* 743* 743 782 782 proj_device_chg 000634 automatic float bin(27) initial dcl 67 set ref 67* 453* 565* 565 596* 596* 855 883* 883* proj_disk_chg 000635 automatic float bin(27) initial dcl 67 set ref 67* 456* 1023* 1024 1031* 1031* 1032 proj_disk_quota 000636 automatic fixed bin(17,0) initial dcl 67 set ref 67* 457* 1026* 1028 1030* proj_disk_usage 000637 automatic fixed bin(17,0) initial dcl 67 set ref 67* 457* 1027* 1029 1030* proj_interactive_chg 000640 automatic float bin(27) initial dcl 67 set ref 67* 452* 547* 547 596* 596* 604 713* 713* proj_interactive_connect 000642 automatic fixed bin(71,0) initial dcl 67 set ref 67* 455* 639* 639 713* 713* proj_interactive_cpu 000646 automatic fixed bin(71,0) initial dcl 67 set ref 67* 455* 638* 638 713* 713* proj_interactive_ioops 000650 automatic fixed bin(71,0) initial dcl 67 set ref 67* 455* 640* 640 713 713 proj_interactive_memory 000644 automatic fixed bin(71,0) initial dcl 67 set ref 67* 455* 641* 641 713 713 proj_iod_chg 000652 automatic float bin(27) initial dcl 67 set ref 67* 452* 560* 560 596* 596* 789 847* 847* proj_iod_lines 000654 automatic fixed bin(71,0) initial dcl 67 set ref 67* 485* 809* 809 847 847 proj_iod_pages 000656 automatic fixed bin(71,0) initial dcl 67 set ref 67* 486* 810* 810 847 847 proj_iod_pieces 000660 automatic fixed bin(17,0) initial dcl 67 set ref 67* 485* 808* 808 847* proj_registration_chg 000661 automatic float bin(27) initial dcl 67 set ref 67* 452* 574* 574 596* 596* proj_total_chg 000744 automatic float bin(27) initial dcl 67 set ref 67* 454* 572* 572 596* 596* 920* 1032* 1032 1048* 1048 1056 1059 1062* 1064* 1069* 1069* project 722 based structure array level 2 in structure "sat" dcl 8-32 in procedure "write_user_usage_report" set ref 398 408 project based structure level 1 dcl 8-53 in procedure "write_user_usage_report" project_id 1 based char(12) level 2 packed packed unaligned dcl 8-53 set ref 400 413* 423 425* 429* 435 437* 442* 446 446* 782* 847* 883* project_name 42 based char(28) level 2 dcl 3-27 set ref 446 446* project_total 005542 automatic structure level 1 dcl 5-5 projfile based structure level 1 dcl 6-6 projfile_dir 000662 automatic char(168) dcl 67 set ref 345 345 347* projfile_name 000734 automatic char(32) dcl 67 set ref 345 345 347* projfiletab 10 based structure array level 2 dcl 6-6 ptlin 000134 internal static char(19) initial dcl 202 set ref 995* 997* 1000* 1002* 1031* 1040* 1069* qp 000746 automatic pointer dcl 67 set ref 340* 341 379 380 434 435 441 444 912 913 914 915 929 930 930 931 931 933 1007* 1053 1053 1055 1059 1062 1062 1064 queue_label 000510 internal static char(8) initial array dcl 242 set ref 759* 776* 823* 841* 958* 969* r 000406 automatic fixed bin(17,0) dcl 67 set ref 365* 366 366 367 369 369 369 369 369 369 369 371 371 371 372 372 373 373 373* 420* 571 574 575 578 578 867 872 904* 920 983 1023 1077 1082 1082 1082 1082 1082 1082 1082 1082 1082 1082 1090 1090 1090 1090 1090 1090 1094 1094 1095 1095 1095 reg_price 325 001162 automatic float bin(27) array level 2 dcl 259 set ref 369* 571 574 575 578* 578* 1094* 1094* reqdir 000750 automatic char(168) dcl 67 set ref 338 338 340* reqfile based structure level 1 dcl 7-5 reqfiletab 10 based structure array level 2 dcl 7-5 reqname 001022 automatic char(32) dcl 67 set ref 338 338 340* reqno 16 based char(12) array level 3 packed packed unaligned dcl 7-5 set ref 1053* rs_count 001032 automatic fixed bin(17,0) dcl 67 set ref 364* 1077 rs_name 001162 automatic char(32) array level 2 packed packed unaligned dcl 259 set ref 366* 1077* rs_number 115(18) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 8-53 ref 420 sat based structure level 1 dcl 8-32 sat_dir 001033 automatic char(168) dcl 67 set ref 323 323 325* sat_name 001105 automatic char(32) dcl 67 set ref 323 323 325* satep 001116 automatic pointer dcl 67 set ref 398* 400 408* 409 413 420 423 425 429 435 437 442 446 446 782 847 883 satp 001120 automatic pointer dcl 67 set ref 325* 326 392 393 397 398 408 1005* shift_label 000470 internal static char(8) initial array dcl 239 set ref 672* 707* 945* sht 000020 internal static char(32) initial dcl 189 set ref 526* 584* 592* 924* 939* 940* 941* 942* 943* 945* 951* 954* 955* 956* 958* 962* 965* 966* 967* 969* 975* 978* 980* 981* 983* 986* 987* 989* 991* 995* 997* 999* 1000* 1002* 1020* state based fixed bin(17,0) level 2 in structure "user" dcl 3-58 in procedure "write_user_usage_report" ref 501 537 618 state based fixed bin(17,0) level 2 in structure "project" dcl 8-53 in procedure "write_user_usage_report" ref 409 stream parameter char dcl 1122 set ref 1118 1125* 1126* 1127* 1128* 1130* 1131* substr builtin function dcl 186 set ref 1106 1154 1154* sup 50 based char(32) array level 3 packed packed unaligned dcl 6-6 set ref 523 1128* sup_addr 60 based char(32) array level 3 packed packed unaligned dcl 6-6 set ref 523 1128* system_info_$abs_prices_rs 001020 constant entry external dcl 278 ref 371 system_info_$device_prices_rs 001014 constant entry external dcl 278 ref 373 system_info_$io_prices_rs 001016 constant entry external dcl 278 ref 372 system_info_$max_rs_number 001022 constant entry external dcl 301 ref 364 system_info_$prices_rs 001012 constant entry external dcl 278 ref 369 system_info_$rs_name 001010 constant entry external dcl 278 ref 366 system_info_$titles 001006 constant entry external dcl 278 ref 363 t1 001122 automatic fixed bin(17,0) dcl 67 set ref 595* temp 001124 automatic fixed bin(71,0) dcl 67 set ref 1021* 1022 1023 tempf 001126 automatic float bin(27) dcl 67 set ref 911* 915* 920 1057* 1059* 1061 1061 time parameter fixed bin(71,0) dcl 1142 ref 1138 1148 1149 time_last_reset 344 based fixed bin(71,0) level 2 dcl 3-58 ref 506 508 508 508 title 13 based char(52) array level 3 packed packed unaligned dcl 6-6 set ref 1128* title1 000430 internal static char(24) initial dcl 231 set ref 525* 526* 583* 584* 591* 592* 923* 924* 1019* 1020* title2 000436 internal static char(24) initial dcl 231 set ref 606* 687* 704* title3 000444 internal static char(24) initial dcl 231 set ref 724* 768* 771* title4 000452 internal static char(24) initial dcl 231 set ref 790* 833* 836* title5 000460 internal static char(24) initial dcl 231 set ref 856* 876* 881* total 000466 internal static char(8) initial dcl 237 set ref 682* 713* 766* 831* 847* trmnl_ioops 000520 automatic float bin(27) initial array dcl 67 set ref 67* 628* 672* 696* 707* ttitle parameter char dcl 1122 set ref 1118 1127* u 000100 automatic char(32) array dcl 392 set ref 400* 403* user 400 based structure array level 2 in structure "pdt" dcl 3-27 in procedure "write_user_usage_report" set ref 499 529 608 726 792 859 user based structure level 1 dcl 3-58 in procedure "write_user_usage_report" user_absentee_chg 001127 automatic float bin(27) initial dcl 67 set ref 67* 533* 553* 553 578* 578* 729* 735* 735 766* 766* user_absentee_cpu 001130 automatic fixed bin(71,0) initial dcl 67 set ref 67* 730* 736* 736 754 766* 766* user_absentee_jobs 001132 automatic fixed bin(17,0) dcl 67 set ref 731* 737* 737 766* user_absentee_memory 001134 automatic fixed bin(71,0) initial dcl 67 set ref 67* 732* 738* 738 766 766 user_attributes based structure level 1 dcl 10-21 user_count 001137 automatic fixed bin(17,0) dcl 67 set ref 471* 576* 576 594 595* 692 712* user_device_chg 001136 automatic float bin(27) initial dcl 67 set ref 67* 535* 567* 567 578* 578* user_interactive_chg 001140 automatic float bin(27) initial dcl 67 set ref 67* 532* 544* 544 578* 578* 611* 621* 621 682* 682* user_interactive_connect 001142 automatic fixed bin(71,0) initial dcl 67 set ref 67* 614* 625* 625 682* 682* user_interactive_cpu 001146 automatic fixed bin(71,0) initial dcl 67 set ref 67* 612* 620* 620 682* 682* user_interactive_ioops 001150 automatic fixed bin(71,0) initial dcl 67 set ref 67* 615* 627* 627 682 682 user_interactive_memory 001144 automatic fixed bin(71,0) initial dcl 67 set ref 67* 613* 623* 623 682 682 user_iod_chg 001152 automatic float bin(27) initial dcl 67 set ref 67* 534* 558* 558 578* 578* 795* 801* 801 818 831* 831* user_iod_lines 001154 automatic fixed bin(71,0) dcl 67 set ref 797* 803* 803 831 831 user_iod_pages 001156 automatic fixed bin(71,0) dcl 67 set ref 798* 804* 804 831 831 user_iod_pieces 001160 automatic fixed bin(17,0) dcl 67 set ref 796* 802* 802 831* user_total_chg 001161 automatic float bin(27) initial dcl 67 set ref 67* 542* 571* 572 573 578* 578* v 000100 automatic fixed bin(17,0) array dcl 393 set ref 401* 403* 408 x 000100 automatic char(32) array dcl 492 set ref 501* 503* 504* 519* 530 578* 609 672* 681* 682* 727 759* 766* 793 823* 831* 860 867* y 000100 automatic fixed bin(17,0) array dcl 493 set ref 515* 519* 529 530 578 608 609 672 681 682 726 727 759 766 792 793 823 831 859 860 867 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABS_ATTRIBUTE_NAMES internal static varying char(28) initial array dcl 11-38 ALT_USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 10-77 PDT_entry_lth internal static fixed bin(17,0) initial dcl 3-19 PDT_header_lth internal static fixed bin(17,0) initial dcl 3-19 PDT_person_id_length internal static fixed bin(17,0) initial dcl 3-19 PDT_project_name_length internal static fixed bin(17,0) initial dcl 3-19 PDT_version internal static fixed bin(17,0) initial dcl 3-19 PROJFILE_VERSION internal static fixed bin(17,0) initial dcl 6-33 REQFILE_VERSION internal static fixed bin(17,0) initial dcl 7-28 SAT_entry_lth internal static fixed bin(17,0) initial dcl 8-24 SAT_header_lth internal static fixed bin(17,0) initial dcl 8-24 SAT_project_name_length internal static fixed bin(17,0) initial dcl 8-24 SAT_version internal static fixed bin(17,0) initial dcl 8-24 USER_ATTRIBUTES_always_allowed internal static bit(36) initial dcl 10-100 USER_ATTRIBUTES_default_in_pdt internal static bit(36) initial dcl 10-104 USER_ATTRIBUTES_settable_by_user internal static bit(36) initial dcl 10-108 USER_ATTRIBUTE_NAMES internal static char(20) initial array packed unaligned dcl 10-50 lope internal static fixed bin(17,0) initial dcl 6-30 loph internal static fixed bin(17,0) initial dcl 6-30 loqe internal static fixed bin(17,0) initial dcl 7-25 loqh internal static fixed bin(17,0) initial dcl 7-25 user_abs_attributes based structure level 1 dcl 11-25 NAMES DECLARED BY EXPLICIT CONTEXT. aer 001721 constant label dcl 319 ref 324 337 339 344 346 351 353 cvt 016452 constant entry internal dcl 1138 ref 622 626 682 682 682 682 694 695 713 713 713 713 751 766 766 776 776 782 782 945 945 945 945 951 951 951 951 958 958 962 962 endaloop 007536 constant label dcl 769 ref 727 754 enddloop 011430 constant label dcl 879 ref 860 endiloop 010576 constant label dcl 834 ref 793 818 endsatloop 011600 constant label dcl 891 ref 409 417 endsloop 005024 constant label dcl 585 ref 530 enduloop 006277 constant label dcl 688 ref 609 err 002047 constant label dcl 327 ref 332 334 341 348 355 exit 014340 constant label dcl 1005 ref 328 exitm 011604 constant label dcl 903 ref 439 exitm1 003504 constant label dcl 438 ref 426 facc 003523 constant label dcl 441 ref 435 fpj 003405 constant label dcl 428 ref 423 fpj1 011730 constant label dcl 920 ref 916 nonfaterr 003270 constant label dcl 416 ok 015142 constant label dcl 1066 set ref 1061 process_misc_charges 014646 constant label dcl 1034 projhead 016175 constant entry internal dcl 1118 ref 525 526 583 584 591 592 606 687 704 724 768 771 790 833 836 856 876 881 923 924 1019 1020 skip 007236 constant label dcl 753 skip1 004076 constant label dcl 516 subtotal 014406 constant entry internal dcl 1018 ref 600 925 write_user_usage_report 001023 constant entry external dcl 23 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 17036 20062 16555 17046 Length 20756 16555 1024 660 260 742 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME write_user_usage_report 3316 external procedure is an external procedure. begin block on line 390 152 begin block uses auto adjustable storage. begin block on line 490 272 begin block uses auto adjustable storage. subtotal 176 internal procedure is called by several nonquick procedures. projhead 140 internal procedure is called by several nonquick procedures. cvt 94 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 lng write_user_usage_report 000020 sht write_user_usage_report 000030 both write_user_usage_report 000040 mc write_user_usage_report 000050 l3 write_user_usage_report 000064 l4 write_user_usage_report 000110 dskfmt write_user_usage_report 000134 ptlin write_user_usage_report 000141 dash write_user_usage_report 000177 eqllin write_user_usage_report 000235 format write_user_usage_report 000252 format1 write_user_usage_report 000273 formatz write_user_usage_report 000312 fmt1 write_user_usage_report 000331 dmnfmt write_user_usage_report 000350 dmnfmt1 write_user_usage_report 000367 absfmt write_user_usage_report 000406 absfmt1 write_user_usage_report 000425 formatA write_user_usage_report 000430 title1 write_user_usage_report 000436 title2 write_user_usage_report 000444 title3 write_user_usage_report 000452 title4 write_user_usage_report 000460 title5 write_user_usage_report 000466 total write_user_usage_report 000470 shift_label write_user_usage_report 000510 queue_label write_user_usage_report 000520 col1 write_user_usage_report 000556 col2 write_user_usage_report 000614 col3 write_user_usage_report 000652 col4 write_user_usage_report 000710 col5 write_user_usage_report 000746 p_header write_user_usage_report STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 390 000100 u begin block on line 390 000100 v begin block on line 390 begin block on line 490 000100 y begin block on line 490 000100 x begin block on line 490 cvt 000100 j cvt 000101 hours cvt 000102 minutes cvt 000104 answer cvt write_user_usage_report 000100 abs_user_count write_user_usage_report 000102 ap write_user_usage_report 000104 connect_tim write_user_usage_report 000124 memry_usge write_user_usage_report 000134 cpu_tim write_user_usage_report 000154 coxx write_user_usage_report 000155 dpxx write_user_usage_report 000156 cods write_user_usage_report 000214 dpds write_user_usage_report 000252 device_count write_user_usage_report 000253 dmns write_user_usage_report 000254 dmnx write_user_usage_report 000255 dn write_user_usage_report 000327 ec write_user_usage_report 000330 grand_absentee_chg write_user_usage_report 000332 grand_absentee_cpu write_user_usage_report 000334 grand_absentee_jobs write_user_usage_report 000336 grand_absentee_memory write_user_usage_report 000340 grand_device_chg write_user_usage_report 000341 grand_disk_chg write_user_usage_report 000342 grand_disk_quota write_user_usage_report 000343 grand_disk_usage write_user_usage_report 000344 grand_interactive_chg write_user_usage_report 000346 grand_interactive_connect write_user_usage_report 000350 grand_interactive_memory write_user_usage_report 000352 grand_interactive_cpu write_user_usage_report 000354 grand_interactive_ioops write_user_usage_report 000356 grand_iod_chg write_user_usage_report 000360 grand_iod_lines write_user_usage_report 000362 grand_iod_pages write_user_usage_report 000364 grand_iod_pieces write_user_usage_report 000365 grand_misc_chg write_user_usage_report 000366 grand_pmonths write_user_usage_report 000367 grand_total_chg write_user_usage_report 000370 grand_registration_chg write_user_usage_report 000372 hidate write_user_usage_report 000374 hidate_bin write_user_usage_report 000376 iod_count write_user_usage_report 000377 i write_user_usage_report 000400 ii write_user_usage_report 000401 j write_user_usage_report 000402 jj write_user_usage_report 000403 k write_user_usage_report 000404 kk write_user_usage_report 000405 n write_user_usage_report 000406 r write_user_usage_report 000407 lin_incrm write_user_usage_report 000410 linct write_user_usage_report 000411 linct_s write_user_usage_report 000412 lodate write_user_usage_report 000414 lodate_bin write_user_usage_report 000416 m write_user_usage_report 000417 misc_chg write_user_usage_report 000420 miscfilep write_user_usage_report 000422 miscfile_dir write_user_usage_report 000474 miscfile_name write_user_usage_report 000504 named write_user_usage_report 000505 nonbill_total write_user_usage_report 000506 note write_user_usage_report 000507 noted write_user_usage_report 000510 notel write_user_usage_report 000512 notep write_user_usage_report 000514 numproj write_user_usage_report 000515 numusers write_user_usage_report 000516 ix write_user_usage_report 000517 oix write_user_usage_report 000520 trmnl_ioops write_user_usage_report 000530 page write_user_usage_report 000531 page_s write_user_usage_report 000532 pmonths write_user_usage_report 000533 pdt_dir write_user_usage_report 000605 pdt_name write_user_usage_report 000616 pdtep write_user_usage_report 000620 pdtp write_user_usage_report 000622 pp write_user_usage_report 000624 proj_absentee_chg write_user_usage_report 000626 proj_absentee_cpu write_user_usage_report 000630 proj_absentee_jobs write_user_usage_report 000632 proj_absentee_memory write_user_usage_report 000634 proj_device_chg write_user_usage_report 000635 proj_disk_chg write_user_usage_report 000636 proj_disk_quota write_user_usage_report 000637 proj_disk_usage write_user_usage_report 000640 proj_interactive_chg write_user_usage_report 000642 proj_interactive_connect write_user_usage_report 000644 proj_interactive_memory write_user_usage_report 000646 proj_interactive_cpu write_user_usage_report 000650 proj_interactive_ioops write_user_usage_report 000652 proj_iod_chg write_user_usage_report 000654 proj_iod_lines write_user_usage_report 000656 proj_iod_pages write_user_usage_report 000660 proj_iod_pieces write_user_usage_report 000661 proj_registration_chg write_user_usage_report 000662 projfile_dir write_user_usage_report 000734 projfile_name write_user_usage_report 000744 proj_total_chg write_user_usage_report 000746 qp write_user_usage_report 000750 reqdir write_user_usage_report 001022 reqname write_user_usage_report 001032 rs_count write_user_usage_report 001033 sat_dir write_user_usage_report 001105 sat_name write_user_usage_report 001116 satep write_user_usage_report 001120 satp write_user_usage_report 001122 t1 write_user_usage_report 001124 temp write_user_usage_report 001126 tempf write_user_usage_report 001127 user_absentee_chg write_user_usage_report 001130 user_absentee_cpu write_user_usage_report 001132 user_absentee_jobs write_user_usage_report 001134 user_absentee_memory write_user_usage_report 001136 user_device_chg write_user_usage_report 001137 user_count write_user_usage_report 001140 user_interactive_chg write_user_usage_report 001142 user_interactive_connect write_user_usage_report 001144 user_interactive_memory write_user_usage_report 001146 user_interactive_cpu write_user_usage_report 001150 user_interactive_ioops write_user_usage_report 001152 user_iod_chg write_user_usage_report 001154 user_iod_lines write_user_usage_report 001156 user_iod_pages write_user_usage_report 001160 user_iod_pieces write_user_usage_report 001161 user_total_chg write_user_usage_report 001162 prices write_user_usage_report 005316 grand_total write_user_usage_report 005542 project_total write_user_usage_report THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. enter_begin_block leave_begin_block call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 alloc_auto_adj mdfx1 ext_entry int_entry int_entry_desc divide_fx3 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_ptr cv_$mwvf date_time_ expand_path_ get_wdir_ hcs_$initiate hcs_$initiate_count hcs_$terminate_noname idsort_ ioa_ ioa_$ioa_stream ioa_$rsnnl mailing_page_ 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_$titles NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 23 001022 67 001030 1 5 001202 5 5 001630 317 001700 318 001717 319 001721 321 001754 323 001755 324 002000 325 002002 326 002043 327 002047 328 002101 331 002102 332 002121 333 002123 334 002146 336 002150 337 002167 338 002171 339 002214 340 002216 341 002257 343 002263 344 002302 345 002304 346 002327 347 002331 348 002372 350 002376 351 002415 352 002417 353 002442 354 002444 355 002505 357 002511 358 002565 359 002571 360 002574 363 002610 364 002633 365 002642 366 002647 367 002672 369 002702 371 002730 372 002746 373 002762 375 003003 379 003005 380 003015 381 003020 382 003022 383 003031 384 003034 390 003036 392 003041 393 003051 403 003055 396 003075 397 003076 398 003106 399 003112 400 003113 401 003122 402 003126 403 003130 407 003151 408 003162 409 003170 413 003172 414 003221 415 003263 416 003270 417 003331 420 003332 422 003337 423 003350 424 003361 425 003363 426 003404 428 003405 429 003410 431 003430 433 003437 434 003440 435 003450 436 003461 437 003463 438 003504 439 003520 441 003523 442 003526 444 003546 446 003553 452 003605 453 003613 454 003614 455 003615 456 003622 457 003624 458 003626 459 003634 460 003640 461 003642 462 003643 463 003644 464 003645 465 003647 466 003651 467 003653 468 003655 469 003656 470 003657 471 003660 472 003661 473 003670 474 003674 475 003675 476 003702 477 003703 478 003705 479 003706 480 003713 481 003714 482 003716 483 003724 484 003727 485 003731 486 003734 490 003735 492 003740 493 003751 519 003755 578 003775 496 003777 497 004000 498 004002 499 004013 500 004016 501 004017 503 004031 504 004045 506 004054 508 004061 513 004066 515 004072 516 004076 517 004100 518 004115 519 004134 523 004157 524 004214 525 004221 526 004252 528 004305 529 004321 530 004326 532 004337 533 004341 534 004342 535 004343 537 004344 538 004347 539 004350 540 004352 541 004353 542 004355 543 004357 544 004365 545 004373 547 004376 548 004401 550 004404 551 004407 552 004411 553 004421 554 004427 555 004432 556 004435 557 004440 558 004443 559 004446 560 004451 561 004454 562 004457 563 004462 564 004464 565 004473 566 004500 567 004503 568 004506 569 004511 570 004514 571 004516 572 004525 573 004527 574 004532 575 004535 576 004540 577 004541 578 004542 581 004725 582 004731 583 004732 584 004766 585 005024 591 005030 592 005064 593 005122 594 005145 595 005156 596 005204 600 005360 604 005365 606 005371 607 005422 608 005435 609 005442 611 005453 612 005455 613 005457 614 005460 615 005461 617 005462 618 005464 619 005471 620 005477 621 005505 622 005510 623 005524 624 005535 625 005545 626 005550 627 005562 628 005573 630 005603 632 005606 634 005611 636 005614 638 005617 639 005622 640 005625 641 005630 643 005633 645 005636 647 005641 649 005644 651 005647 652 005652 653 005655 654 005660 655 005663 656 005665 657 005670 658 005672 659 005674 663 005676 664 005700 665 005707 672 005725 676 006024 678 006027 679 006031 681 006033 682 006071 687 006241 688 006277 692 006303 693 006306 694 006315 695 006333 696 006351 698 006366 699 006375 700 006377 702 006422 703 006443 704 006447 705 006503 706 006513 707 006517 711 006611 712 006615 713 006643 722 007005 724 007011 725 007042 726 007055 727 007062 729 007073 730 007075 731 007077 732 007100 734 007101 735 007111 736 007117 737 007122 738 007124 739 007132 740 007134 741 007142 742 007145 743 007150 744 007153 745 007155 746 007162 747 007170 748 007173 749 007176 750 007201 751 007203 752 007221 753 007236 754 007240 755 007242 756 007243 757 007245 758 007255 759 007262 761 007361 763 007364 765 007366 766 007370 768 007500 769 007536 770 007542 771 007545 772 007601 773 007624 774 007645 775 007657 776 007663 781 007776 782 010002 789 010107 790 010113 791 010144 792 010157 793 010164 795 010175 796 010177 797 010200 798 010202 800 010203 801 010213 802 010221 803 010223 804 010231 805 010234 806 010236 807 010244 808 010250 809 010252 810 010260 811 010263 812 010265 813 010273 814 010277 815 010301 816 010307 817 010312 818 010314 819 010316 820 010317 821 010321 822 010331 823 010336 827 010437 829 010442 830 010444 831 010446 833 010540 834 010576 835 010602 836 010605 837 010641 838 010664 839 010705 840 010717 841 010723 846 011014 847 011020 855 011104 856 011110 857 011141 858 011144 859 011155 860 011162 861 011173 862 011174 863 011203 864 011206 865 011207 866 011211 867 011213 869 011302 870 011306 872 011307 874 011365 876 011370 878 011424 879 011430 880 011432 881 011435 882 011471 883 011516 887 011564 889 011577 891 011600 896 011603 903 011604 904 011605 905 011606 906 011615 908 011627 909 011647 910 011653 911 011654 912 011656 913 011665 914 011703 915 011707 916 011711 918 011712 919 011714 920 011730 922 011750 923 011753 924 012003 925 012033 927 012037 929 012041 930 012051 931 012061 933 012105 935 012111 939 012113 940 012141 941 012164 942 012220 943 012240 944 012255 945 012261 950 012414 951 012416 954 012550 955 012573 956 012616 957 012633 958 012641 961 012747 962 012751 965 013050 966 013073 967 013116 968 013133 969 013141 974 013232 975 013234 978 013317 979 013342 980 013344 981 013364 982 013401 983 013407 985 013465 986 013467 987 013527 989 013552 990 013567 991 013624 994 013762 995 014015 996 014053 997 014056 998 014116 999 014121 1000 014144 1001 014210 1002 014243 1003 014304 1005 014340 1006 014351 1007 014362 1008 014373 1010 014404 1018 014405 1019 014413 1020 014447 1021 014504 1022 014513 1023 014523 1024 014530 1025 014532 1026 014535 1027 014537 1028 014543 1029 014545 1030 014547 1031 014602 1032 014642 1034 014646 1036 014653 1037 014655 1038 014666 1039 014702 1040 014706 1043 014750 1044 014753 1048 015011 1050 015021 1053 015024 1055 015057 1056 015067 1057 015073 1058 015075 1059 015076 1061 015102 1062 015106 1064 015136 1066 015142 1068 015165 1069 015222 1071 015262 1076 015305 1077 015325 1079 015356 1080 015401 1081 015421 1082 015430 1086 015557 1087 015562 1088 015602 1089 015622 1090 015632 1093 015736 1094 015741 1095 016001 1097 016053 1101 016073 1102 016100 1103 016115 1104 016120 1105 016130 1106 016135 1107 016142 1108 016165 1110 016171 1113 016173 1118 016174 1125 016222 1126 016251 1127 016277 1128 016332 1130 016400 1131 016417 1132 016444 1133 016446 1134 016450 1138 016451 1148 016457 1149 016467 1150 016477 1151 016501 1153 016505 1154 016535 1157 016544 ----------------------------------------------------------- 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