COMPILATION LISTING OF SEGMENT system_monthly_report Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/09/85 1327.3 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: style3 */ 11 12 system_monthly_report: 13 procedure options (variable); 14 15 /* SYSTEM_MONTHLY_REPORT - Generate Multics system usage statistics. */ 16 17 /* Modified by T. Casey, March 75, to add checks for zero values of 18* previous month data, to avoid division by zero in percent computations. */ 19 /* Modified 1984-08-31 BIM for version 3 use_totals */ 20 21 dcl dn char (168), /* Directory name */ 22 en char (32), /* Entry name */ 23 datstr char (24), /* Formatted date of start */ 24 datstr1 char (24), /* Formatted date end */ 25 (i, j, k, l, m, n) fixed bin, /* indices */ 26 conn fixed bin (71), /* total connect time in microseconds today */ 27 nlogins fixed bin, /* # sessions today */ 28 ncshd fixed bin, /* # crashed sessions today */ 29 nabs fixed bin, /* # abs jobs today */ 30 fract float bin, /* used in percent calculation */ 31 (tnlogins, tncsh, tnabs, tqta, tusage, tnproj, tnusers) 32 fixed bin init (0), 33 (xtnlogins, xtncsh, xtnabs, xtqta, xtusage, xtnproj, xtnusers) 34 fixed bin init (0), 35 xconn fixed bin (71), 36 (char10a, char10b) char (10), 37 (pct, xpct) float bin, 38 (totmemu, xtotmemu) fixed bin (71) init (0), 39 (totprt, xtotprt) fixed bin (71) init (0), 40 (totdk, xtotdk) fixed bin (71) init (0), 41 (totrev, xtotrev) float bin init (0e0), 42 (disk_capy, xdisk_capy) 43 fixed bin (35), 44 xtconn fixed bin (71) init (0), 45 tconn fixed bin (71) init (0), 46 dummy char (10), /* dummy title */ 47 comp char (120), /* company title */ 48 dept char (120), /* department title */ 49 ap ptr, /* ptr to arg */ 50 al fixed bin (21), /* lth of arg */ 51 bchr char (al) unaligned based (ap), 52 /* access struc for arg */ 53 ec fixed bin (35), /* err code */ 54 totp ptr, /* ptr to today's data */ 55 xtotp ptr; /* prt to last month's data. */ 56 dcl arg_count fixed bin; 57 58 dcl bt fixed bin (71), /* boot time */ 59 ztime fixed bin (71), /* random sample time */ 60 qlim fixed bin, 61 (xcpu, xmem) fixed bin, 62 (daycrash, daystarts, dayconfigs, dayunits) 63 fixed bin, 64 (mcrash, mstarts, munits, mconfigs) 65 fixed bin, 66 daysystem char (8); 67 68 dcl C1 fixed bin (71) int static init (3600000000); 69 /* Convert clock time to hours. */ 70 dcl C2 fixed bin (71) int static init (1800000000); 71 /* Half-hour for rounding. */ 72 73 dcl formatd char (32) int static init ("^5a ^3a^7d^8d^17d^16.1f ^8a"), 74 formatdt char (32) int static init ("^/^4d days^7d^8d^17d^16.1f"); 75 76 dcl heading char (120) int static 77 init ( 78 "Group^25xCharge Logins Crashed Abs Jobs Connect^4xQuota^5xUsed Projects Users^/"); 79 80 dcl (addr, null, substr, index, unspec, length, bit, fixed, divide, mod, abs) 81 builtin; 82 83 dcl error_table_$unimplemented_version 84 fixed bin (35) ext static; 85 86 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 87 dcl system_info_$titles entry (char (*), char (*), char (*), char (*)); 88 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 89 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 90 dcl com_err_$suppress_name 91 entry () options (variable); 92 dcl expand_pathname_$add_suffix 93 entry (character (*), character (*), character (*), character (*), fixed binary (35)); 94 dcl ioa_ entry options (variable); 95 dcl ioa_$rsnnl entry options (variable); 96 dcl date_time_ entry (fixed bin (71), char (*)); 97 dcl com_err_ entry options (variable); 98 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)) 99 ; 100 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 101 102 dcl cleanup condition; 103 dcl ME char (32) init ("system_monthly_report") int static options (constant); 104 105 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 106 2 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 2 2 /* format: style2,^inddcls,idind32 */ 2 3 2 4 declare 1 terminate_file_switches based, 2 5 2 truncate bit (1) unaligned, 2 6 2 set_bc bit (1) unaligned, 2 7 2 terminate bit (1) unaligned, 2 8 2 force_write bit (1) unaligned, 2 9 2 delete bit (1) unaligned; 2 10 2 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 2 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 2 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 2 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 2 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 2 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 2 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 2 18 2 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 107 3 1 /* BEGIN INCLUDE FILE ... use_totals.incl.pl1 */ 3 2 /* format: style3 */ 3 3 3 4 /* Modified Feb 1980 by M. B. Armstrong to implement multiple rate structures. (UNCA) 3 5* Modified May 1980 by R. McDonald to include printer page charge, replaces cpu time in iod. (UNCA) 3 6* Modified July 1981 by C. Hornig to eliminate rs_number and master_proj from bin, 3 7* - split it into sub-structures for convenience in conversion, 3 8* - and make version a character string. 3 9* Modified August 1981 by T. Casey to put back rs_number in bin. 3 10* Modified 1984-08-31 BIM for half-year billing cycles, which is all 3 11* that will fit in a segment. 3 12**/ 3 13 3 14 dcl use_totals_ptr pointer; 3 15 dcl 1 use_totals based (use_totals_ptr) aligned, 3 16 2 meters, 3 17 3 generated fixed bin (71), /* Time usage data generated. */ 3 18 3 period_begin fixed bin (71), /* Earliest time covered */ 3 19 3 period_end fixed bin (71), /* Latest time */ 3 20 3 disk_available 3 21 fixed bin (35), /* Total disk capacity in MULT partition. */ 3 22 3 disk_left fixed bin (35), /* Total disk unused.. */ 3 23 3 version char (8), /* revision of this include file */ 3 24 3 pad1 (6) fixed bin, /* Gross system statistics, determined from answering service meters. */ 3 25 3 uptime fixed bin (71), /* Time system has been on the air. */ 3 26 3 sys_starts fixed bin, /* Number of bootloads */ 3 27 3 sys_crash fixed bin, /* Number of crashes */ 3 28 3 cpu_avail fixed bin (71), /* CPU time available. >= uptime by two-cpu time */ 3 29 3 idle fixed bin (71), /* Total idle for all causes */ 3 30 3 initializer fixed bin (71), /* Initializer usage */ 3 31 3 total_cpu fixed bin (71), /* Total VIRTUAL cpu from bins - so get overhead */ 3 32 3 zidle fixed bin (71), /* Total zero idle. */ 3 33 3 mpidle fixed bin (71), /* Total MP idle */ 3 34 3 pad2 (6) fixed bin (71), /* variables used while reading answering service meters */ 3 35 3 zidle_since_boot 3 36 fixed bin (71), /* Zero idle since boot */ 3 37 3 mpidle_since_boot 3 38 fixed bin (71), /* MP idle since boot */ 3 39 3 time_last_boot 3 40 fixed bin (71), /* Time of last bootload */ 3 41 3 time_last_sample 3 42 fixed bin (71), /* Time of last 15-minute sample */ 3 43 3 uptime_since_boot 3 44 fixed bin (71), /* Time system on air since last boot */ 3 45 3 cpu_avail_since_boot 3 46 fixed bin (71), /* CPU available since boot */ 3 47 3 idle_since_boot 3 48 fixed bin (71), /* Idle time since boot */ 3 49 3 last_sysid char (8), /* Current system ID */ 3 50 3 n_users_on fixed bin, /* Users on at last sample */ 3 51 3 n_stat_gaps fixed bin, /* Number of times we missed getting all data */ 3 52 /* Statistics by day, for black and white chart. */ 3 53 2 b_and_w, 3 54 3 origin fixed bin (71), /* Base time for slot 1 */ 3 55 3 max_day_log fixed bin, /* Highest used day. */ 3 56 3 max_qhour fixed bin, /* Highest quarter in highest day */ 3 57 3 daylog (190), /* array of days. */ 3 58 4 qh (96), /* Quarter-hour within the day. */ 3 59 5 time fixed bin (71), /* Time of sample. */ 3 60 5 sysid char (8), /* System ID */ 3 61 5 dump_number 3 62 fixed (18) unsigned unaligned, 3 63 5 flags unaligned, 3 64 6 shutdown 3 65 bit (1), 3 66 6 pad bit (17), 3 67 5 cpu fixed bin (5) unsigned unaligned, 3 68 5 nunits fixed bin (13) unsigned unaligned, 3 69 /* Number of load units */ 3 70 5 kmem fixed bin (18) unsigned unaligned, 3 71 5 starttime fixed bin (71), /* Boot time */ 3 72 5 crashtime fixed bin (71), /* Time of crash */ 3 73 /**** User-classification info, loaded once a month. defines usage bins. bin 1 is always "other" */ 3 74 2 bins, 3 75 3 ntypes fixed bin, /* Number of valid bins */ 3 76 3 n_select fixed bin, /* Number of selectors */ 3 77 3 bin_data (3258) aligned, 3 78 4 select_proj char (12) aligned, /* Project ID - same number as in sat */ 3 79 4 select_ut fixed bin, /* Bin number for the project */ 3 80 /* Usage bins for each usage type. Determined from summarizing the PDT's. 3 81* * Note - bin "use_totals.ut (use_totals.ntypes+1)" is a zeroed bin which can be used to represent non-existent bins. 3 82* * e.g. Last month's use_totals seg has a bin that has been removed from this month's use_totals seg. 3 83**/ 3 84 3 ut (301), /* array usage by project type */ 3 85 4 utype char (24), /* Label for usage bin */ 3 86 4 dollar_charge 3 87 float bin, /* total dollars spent this month */ 3 88 4 logins fixed bin, /* number of logins */ 3 89 4 crashes fixed bin, /* sessions abnormally terminated */ 3 90 4 nproj fixed bin, /* projects in this class */ 3 91 4 nusers fixed bin, /* users in this class */ 3 92 4 disk_psec fixed bin (71), /* Total page-seconds */ 3 93 4 disk_quota fixed bin (35), /* Total quota */ 3 94 4 disk_usage fixed bin (35), /* Disk occupancy */ 3 95 4 misc float bin, /* Miscellaneous charges */ 3 96 4 flag char (4), /* paying categories = "$" */ 3 97 4 flag1 char (4), /* used to control reporting of categories */ 3 98 4 pad1a (3) fixed bin (35), 3 99 4 rs_number fixed bin, /* rate structure number for all projects in this bin */ 3 100 4 pad1b (14) fixed bin (35), 3 101 4 interactive (0:7), /* interactive use, shifts 0-7 */ 3 102 5 charge float bin, /* total dollar charge this shift */ 3 103 5 pad1 fixed bin, 3 104 5 cpu fixed bin (71), /* cpu usage in microseconds */ 3 105 5 core fixed bin (71), /* core demand in page-microseconds */ 3 106 5 connect fixed bin (71), /* total console time in microseconds */ 3 107 5 io_ops fixed bin (71), /* total terminal i/o ops */ 3 108 4 absentee (4), /* absentee use, queues 1-4 */ 3 109 5 charge float bin, /* dollar charge this queue */ 3 110 5 jobs fixed bin, /* number of jobs submitted */ 3 111 5 cpu fixed bin (71), /* total cpu time in microseconds */ 3 112 5 memory fixed bin (71), /* total memory usage in mu */ 3 113 4 iod (4), /* io daemon use, queues 1-4 */ 3 114 5 charge float bin, /* dollar charge this queue */ 3 115 5 pieces fixed bin, /* pieces of output requested */ 3 116 5 pad2 fixed bin, 3 117 5 pages fixed bin, /* number of pages output */ 3 118 5 lines fixed bin (71), /* total record count of output */ 3 119 4 devices (16) float bin; /* device charges */ 3 120 3 121 dcl USE_TOTALS_VERSION_2 3 122 char (8) static options (constant) initial ("usetot_2"); 3 123 dcl USE_TOTALS_VERSION_3 3 124 char (8) static options (constant) initial ("usetot_3"); 3 125 3 126 /* END INCLUDE FILE ... use_totals.incl.pl1 */ 108 109 110 111 use_totals_ptr, xtotp = null (); 112 on cleanup call clean_up; 113 call cu_$arg_count (arg_count, ec); 114 if ec ^= 0 115 then do; 116 call com_err_ (ME, ec); 117 return; 118 end; 119 if arg_count ^= 2 120 then do; 121 call com_err_$suppress_name (0, ME, 122 "Usage: system_monthly_report today.use_totals yesterday.use_totals"); 123 return; 124 end; 125 call cu_$arg_ptr (1, ap, al, (0)); 126 call expand_pathname_$add_suffix (bchr, "use_totals", dn, en, ec); 127 if ec ^= 0 128 then 129 PN_ERROR: 130 do; 131 call com_err_ (ec, ME, "Invalid use totals pathname ^a.", bchr); 132 go to ERROR; 133 end; 134 135 call initiate_file_ (dn, en, R_ACCESS, use_totals_ptr, (0), ec); 136 if ec ^= 0 137 then 138 INITIATE_ERROR: 139 do; 140 call com_err_ (ec, ME, "^a", pathname_ (dn, en)); 141 go to ERROR; 142 end; 143 144 if use_totals.version ^= USE_TOTALS_VERSION_3 145 then 146 UT_VERSION_ERROR: 147 do; 148 call com_err_ (error_table_$unimplemented_version, ME, "^a is not version 3", pathname_ (dn, en)); 149 go to ERROR; 150 end; 151 152 call cu_$arg_ptr (2, ap, al, (0)); 153 call expand_pathname_$add_suffix (bchr, "use_totals", dn, en, ec); 154 if ec ^= 0 155 then go to PN_ERROR; 156 157 call initiate_file_ (dn, en, R_ACCESS, xtotp, (0), ec); 158 if ec ^= 0 159 then go to INITIATE_ERROR; 160 if xtotp -> use_totals.version ^= USE_TOTALS_VERSION_3 161 then go to UT_VERSION_ERROR; 162 163 164 call system_info_$titles (dummy, dummy, comp, dept); 165 /* Get report titles */ 166 167 call ioa_ ("^-^a^/^/^-^-^a", comp, dept); /* Start report */ 168 call date_time_ (use_totals.period_begin, datstr);/* Make printable date */ 169 call date_time_ (use_totals.period_end, datstr1); 170 call ioa_ ("^/Multics usage report from ^a^/^23xto ^a", datstr, datstr1); 171 172 disk_capy = use_totals.disk_available; /* Get total disk on system. */ 173 if disk_capy = 0 174 then disk_capy = 1; /* Can't be zero. */ 175 xdisk_capy = xtotp -> use_totals.disk_available; /* .. */ 176 if xdisk_capy = 0 177 then xdisk_capy = disk_capy; /* Fix so no installation problems. */ 178 179 call ioa_ ("^/^9xStarts Crashes^6xUptime CPU avail.^6x%Idle %Overhead"); 180 call ioa_ ("^/^8x^7d ^7d^5x^7a^5x^7a^5x^7.1f^4x^7.1f", sys_starts, sys_crash, 181 /* Write month-to-date totals */ 182 tcv (uptime), tcv (cpu_avail), (idle * 1e2) / cpu_avail, 183 ((cpu_avail - idle - total_cpu) * 1e2) / cpu_avail); 184 call ioa_ ("^/^3xCurrent system: ^8a^20xMTBF: ^7a^/", last_sysid, tcv (divide (uptime, sys_crash + 1, 71, 0))); 185 call ioa_ ("^3xCurrent disk capacity: ^10d recs, ^5.1f% full^/", disk_capy, 186 ((disk_capy - use_totals.disk_left) * 1e2) / disk_capy); 187 188 call ioa_ (heading); /* Now user statistics part of report */ 189 do i = 2 to ntypes, 1; /* Put paying customers at bottom of report */ 190 nlogins = logins (i); 191 tnlogins = tnlogins + nlogins; 192 ncshd = crashes (i); 193 tncsh = tncsh + ncshd; 194 conn = 0; /* Must add up connect time in each shift */ 195 do j = 0 to 7; /* Loop on shifts */ 196 conn = conn + connect (i, j); 197 totmemu = totmemu + core (i, j); 198 end; 199 tconn = tconn + conn; 200 nabs = 0; /* Get count of abs jobs */ 201 do j = 1 to 4; /* Loop on queues */ 202 nabs = nabs + absentee.jobs (i, j); 203 totprt = totprt + iod.lines (i, j); 204 totmemu = totmemu + absentee.memory (i, j); 205 end; 206 tnabs = tnabs + nabs; 207 totdk = totdk + disk_psec (i); 208 tqta = tqta + disk_quota (i); 209 tusage = tusage + disk_usage (i); 210 tnproj = tnproj + nproj (i); 211 tnusers = tnusers + nusers (i); 212 if flag (i) = "$" 213 then totrev = totrev + dollar_charge (i); 214 call ioa_ ("^24a ^10.2f ^5d ^7d ^8d ^7a ^7d ^7d ^8d ^5d", utype (i), dollar_charge (i), nlogins, 215 ncshd, nabs, tcv (conn), disk_quota (i), disk_usage (i), nproj (i), nusers (i)); 216 nlogins = xtotp -> use_totals.logins (i); 217 xtnlogins = xtnlogins + nlogins; 218 ncshd = xtotp -> use_totals.crashes (i); 219 xtncsh = xtncsh + ncshd; 220 conn = 0; /* Must add up connect time in each shift */ 221 do j = 0 to 7; /* Loop on shifts */ 222 conn = conn + xtotp -> use_totals.connect (i, j); 223 xtotmemu = xtotmemu + xtotp -> use_totals.ut (i).interactive (j).core; 224 end; 225 xtconn = xtconn + conn; 226 nabs = 0; /* Get count of abs jobs */ 227 do j = 1 to 4; /* Loop on queues */ 228 nabs = nabs + xtotp -> use_totals.absentee.jobs (i, j); 229 xtotprt = xtotprt + xtotp -> use_totals.iod.lines (i, j); 230 xtotmemu = xtotmemu + xtotp -> use_totals.absentee.memory (i, j); 231 end; 232 xtnabs = xtnabs + nabs; 233 xtotdk = xtotdk + xtotp -> use_totals.disk_psec (i); 234 xtqta = xtqta + xtotp -> use_totals.disk_quota (i); 235 xtusage = xtusage + xtotp -> use_totals.disk_usage (i); 236 xtnproj = xtnproj + xtotp -> use_totals.nproj (i); 237 xtnusers = xtnusers + xtotp -> use_totals.nusers (i); 238 if xtotp -> use_totals.flag (i) = "$" 239 then xtotrev = xtotrev + xtotp -> use_totals.dollar_charge (i); 240 end; 241 call ioa_ ("^/TOTAL^33x^5d ^7d ^8d ^7a ^7d ^7d ^8d ^5d", tnlogins, tncsh, tnabs, tcv (tconn), tqta, 242 tusage, tnproj, tnusers); 243 244 if totrev = 0e0 245 then totrev = use_totals.dollar_charge (1); 246 if xtotrev = 0e0 247 then xtotrev = xtotp -> use_totals.dollar_charge (1); 248 249 /* Now compare this month with last month. */ 250 251 call ioa_ ("^/^/^44xLast Month This Month Change^/"); 252 call ioa_ ("^20xSystem hours up ^10d ^10d^2x^8a", divide (xtotp -> use_totals.uptime + C2, C1, 35, 0), 253 divide (use_totals.uptime + C2, C1, 35, 0), pctstr ((use_totals.uptime), (xtotp -> use_totals.uptime))); 254 conn = use_totals.cpu_avail - use_totals.uptime; 255 xconn = xtotp -> use_totals.cpu_avail - xtotp -> use_totals.uptime; 256 call ioa_ ("^20x Two CPU hours ^10d ^10d^2x^8a", divide (xconn + C2, C1, 35, 0), 257 divide (conn + C2, C1, 35, 0), pctstr ((conn), (xconn))); 258 conn = divide (use_totals.uptime, use_totals.sys_crash + 1, 71, 0); 259 xconn = divide (xtotp -> use_totals.uptime, xtotp -> use_totals.sys_crash + 1, 71, 0); 260 char10a = (3)" " || tcv (conn); 261 char10b = (3)" " || tcv (xconn); 262 call ioa_ ("^20xMTBF (hours) ^10a ^10a^2x^8a", char10b, char10a, pctstr ((conn), (xconn))); 263 call ioa_ ("^20xCPU charged (hours) ^10d ^10d^2x^8a", 264 divide (xtotp -> use_totals.total_cpu + C2, C1, 35, 0), divide (use_totals.total_cpu + C2, C1, 35, 0), 265 pctstr ((use_totals.total_cpu), (xtotp -> use_totals.total_cpu))); 266 call ioa_ ("^20xMemory units (Million) ^10.1f ^10.1f^2x^8a", xtotmemu / 1e9, totmemu / 1e9, 267 pctstr ((totmemu), (xtotmemu))); 268 call ioa_ ("^20xPrint lines (Million) ^10.1f ^10.1f^2x^8a", xtotprt / 1e6, totprt / 1e6, 269 pctstr ((totprt), (xtotprt))); 270 call ioa_ ("^20xTerminal hours ^10d ^10d^2x^8a", divide (xtconn + C2, C1, 35, 0), 271 divide (tconn + C2, C1, 35, 0), pctstr ((tconn), (xtconn))); 272 call ioa_ ("^20xLogins ^10d ^10d^2x^8a", xtnlogins, tnlogins, 273 pctstr ((tnlogins), (xtnlogins))); 274 call ioa_ ("^20xAbsentee jobs ^10d ^10d^2x^8a", xtnabs, tnabs, pctstr ((tnabs), (xtnabs))); 275 call ioa_ ("^20xDisk usage (page-months)^10d ^10d^2x^8a", fixed (xtotdk / 2592e3, 35), 276 fixed (totdk / 2592e3, 35), pctstr ((totdk), (xtotdk))); 277 call ioa_ ("^20xProjects ^10d ^10d^2x^8a", xtnproj, tnproj, pctstr ((tnproj), (xtnproj))); 278 call ioa_ ("^20xUsers ^10d ^10d^2x^8a", xtnusers, tnusers, pctstr ((tnusers), (xtnusers))); 279 280 call ioa_ (""); 281 282 call ioa_ ("^20xRevenue ^10d ^10d^2x^8a", fixed (xtotrev, 35), fixed (totrev, 35), 283 pctstr (totrev, xtotrev)); 284 call ioa_ ("^20xCrashed sessions ^10d ^10d^2x^8a", xtncsh, tncsh, pctstr ((tncsh), (xtncsh))); 285 pct = (tncsh * 1e2) / (tnlogins + tnabs); 286 if (xtnlogins + xtnabs) <= 0e0 287 then xpct = 0e0; 288 else xpct = (xtncsh * 1e2) / (xtnlogins + xtnabs); 289 call ioa_ ("^20x Percentage crashed ^10.1f ^10.1f^2x^8a", xpct, pct, pctstr (pct, xpct)); 290 291 call ioa_ (""); 292 293 if xtotp -> use_totals.cpu_avail <= 0e0 294 then xpct = 0e0; 295 else xpct = xtotp -> use_totals.zidle * 1e2 / xtotp -> use_totals.cpu_avail; 296 pct = use_totals.zidle * 1e2 / use_totals.cpu_avail; 297 call ioa_ ("^20xZero idle ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 298 if xtotp -> use_totals.cpu_avail <= 0e0 299 then xpct = 0e0; 300 else xpct = xtotp -> use_totals.mpidle * 1e2 / xtotp -> use_totals.cpu_avail; 301 pct = use_totals.mpidle * 1e2 / use_totals.cpu_avail; 302 call ioa_ ("^20xMP idle ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 303 conn = use_totals.idle - use_totals.zidle - use_totals.mpidle; 304 xconn = xtotp -> use_totals.idle - xtotp -> use_totals.zidle - xtotp -> use_totals.mpidle; 305 if xtotp -> use_totals.cpu_avail <= 0e0 306 then xpct = 0e0; 307 else xpct = xconn * 1e2 / xtotp -> use_totals.cpu_avail; 308 pct = conn * 1e2 / use_totals.cpu_avail; 309 call ioa_ ("^20xNMP idle ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 310 conn = use_totals.cpu_avail - use_totals.total_cpu - use_totals.idle; 311 xconn = xtotp -> use_totals.cpu_avail - xtotp -> use_totals.total_cpu - xtotp -> use_totals.idle; 312 if xtotp -> use_totals.cpu_avail <= 0e0 313 then xpct = 0e0; 314 else xpct = xconn * 1e2 / xtotp -> use_totals.cpu_avail; 315 pct = conn * 1e2 / use_totals.cpu_avail; 316 call ioa_ ("^20xOverhead ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 317 if xtotp -> use_totals.cpu_avail <= 0e0 318 then xpct = 0e0; 319 else xpct = xtotp -> use_totals.total_cpu * 1e2 / xtotp -> use_totals.cpu_avail; 320 pct = use_totals.total_cpu * 1e2 / use_totals.cpu_avail; 321 call ioa_ ("^20xCharged ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 322 323 call ioa_ (""); 324 325 call ioa_ ("^20xTotal quota ^10d ^10d^2x^8a", xtqta, tqta, pctstr ((tqta), (xtqta))); 326 call ioa_ ("^20xDisk available ^10d ^10d^2x^8a", xdisk_capy, disk_capy, 327 pctstr ((disk_capy), (xdisk_capy))); 328 pct = 1e2 * use_totals.disk_left / disk_capy; 329 if xdisk_capy <= 0e0 330 then xpct = 0e0; 331 else xpct = 1e2 * xtotp -> use_totals.disk_left / xdisk_capy; 332 call ioa_ ("^20x unused ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 333 pct = (1e2 * (tusage)) / disk_capy; 334 if xdisk_capy <= 0e0 335 then xpct = 0e0; 336 else xpct = (1e2 * (xtusage)) / xdisk_capy; 337 call ioa_ ("^20x paying ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 338 pct = (1e2 * (disk_capy - tusage - use_totals.disk_left)) / disk_capy; 339 if xdisk_capy <= 0e0 340 then xpct = 0e0; 341 else xpct = (1e2 * (xdisk_capy - xtusage - xtotp -> use_totals.disk_left)) / xdisk_capy; 342 call ioa_ ("^20x system use ^10.1f% ^10.1f% ^8a", xpct, pct, pctstr (pct, xpct)); 343 344 /* Now put out the summary by day. */ 345 346 call ioa_ ("^|Multics usage report from ^a^/^23xto ^a^/^/^10xSummary by day", datstr, datstr1); 347 348 call ioa_ ("^/^/Date^6xStarts Crashes Reconfigurations Max load units Sysid^/"); 349 350 mcrash, munits = 0; 351 mstarts = -1; 352 bt = -1; 353 xcpu, xmem = -1; 354 mconfigs, dayconfigs = -1; 355 356 do i = 1 to use_totals.max_day_log; 357 358 daystarts = 0; 359 daycrash = 0; 360 daysystem = ""; 361 dayunits = 0; 362 363 if i = use_totals.max_day_log 364 then qlim = use_totals.max_qhour; 365 else qlim = 96; 366 367 ztime = 0; 368 do j = 1 to qlim; 369 if use_totals.daylog (i).qh (j).time = 0 370 then go to skip; 371 ztime = use_totals.daylog (i).qh (j).time; 372 if use_totals.daylog (i).qh (j).starttime ^= bt 373 then do; 374 daystarts = daystarts + 1; 375 mstarts = mstarts + 1; 376 bt = use_totals.daylog (i).qh (j).starttime; 377 end; 378 if use_totals.daylog (i).qh (j).crashtime ^= 0 379 then if use_totals.daylog (i).qh (j).dump_number ^= 0 380 then do; 381 daycrash = daycrash + 1; 382 mcrash = mcrash + 1; 383 end; 384 if use_totals.daylog (i).qh (j).sysid > "" 385 then daysystem = use_totals.daylog (i).qh (j).sysid; 386 if use_totals.daylog (i).qh (j).cpu = xcpu 387 then if use_totals.daylog (i).qh (j).kmem = xmem 388 then go to sameconf; 389 if use_totals.daylog (i).qh (j).cpu = 0 390 then go to sameconf; 391 dayconfigs = dayconfigs + 1; 392 mconfigs = mconfigs + 1; 393 xcpu = use_totals.daylog (i).qh (j).cpu; 394 xmem = use_totals.daylog (i).qh (j).kmem; 395 sameconf: 396 if use_totals.daylog (i).qh (j).nunits > dayunits 397 then dayunits = use_totals.daylog (i).qh (j).nunits; 398 if use_totals.daylog (i).qh (j).nunits > munits 399 then munits = use_totals.daylog (i).qh (j).nunits; 400 skip: 401 end; 402 if ztime = 0 403 then go to skip1; 404 call date_time_ (ztime, datstr); 405 call ioa_ (formatd, substr (datstr, 1, 5), substr (datstr, 22, 3), daystarts, daycrash, dayconfigs, 406 dayunits / 1e1, daysystem); 407 if substr (datstr, 22, 3) = "Sun" 408 then call ioa_ (""); 409 dayconfigs = 0; 410 skip1: 411 end; 412 413 call ioa_ (formatdt, use_totals.max_day_log, mstarts, mcrash, mconfigs, munits / 1e1); 414 415 ERROR: 416 call clean_up; 417 418 return; 419 420 /* internal procedure to format time for printing */ 421 422 tcv: 423 proc (x) returns (char (7)); 424 425 dcl x fixed bin (71); 426 427 dcl (a, b, c, d) fixed bin (35), 428 cc char (7); 429 430 a = divide (x, 1000000, 35, 0); 431 b = divide (a, 60, 35, 0); 432 a = mod (a, 60); 433 c = divide (b, 60, 35, 0); 434 b = mod (b, 60); 435 call ioa_$rsnnl ("^4d:^2d", cc, d, c, b); 436 if substr (cc, 6, 1) = " " 437 then substr (cc, 6, 1) = "0"; 438 return (cc); 439 440 end tcv; 441 442 /* internal procedure to format percentage changes for printing (including checks for zero */ 443 444 pctstr: 445 proc (this_month_value, last_month_value) returns (char (8)); 446 447 dcl (this_month_value, last_month_value) 448 float bin, 449 cc char (8), 450 n fixed bin; 451 452 if last_month_value = 0e0 453 then cc = " - "; 454 else call ioa_$rsnnl ("^7.1f%", cc, n, (this_month_value - last_month_value) * 1e2 / last_month_value); 455 return (cc); 456 end pctstr; 457 clean_up: 458 procedure; 459 460 if use_totals_ptr ^= null () 461 then call terminate_file_ (use_totals_ptr, (0), TERM_FILE_TERM, (0)); 462 if xtotp ^= null () 463 then call terminate_file_ (xtotp, (0), TERM_FILE_TERM, (0)); 464 return; 465 end clean_up; 466 467 end system_monthly_report; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1133.6 system_monthly_report.pl1 >special_ldd>online>41-15-04/10/85>system_monthly_report.pl1 106 1 04/09/85 1109.7 access_mode_values.incl.pl1 >special_ldd>online>41-15-04/10/85>access_mode_values.incl.pl1 107 2 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 108 3 12/07/84 1102.2 use_totals.incl.pl1 >ldd>include>use_totals.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. C1 000016 constant fixed bin(71,0) initial dcl 68 ref 252 252 252 252 256 256 256 256 263 263 263 263 270 270 270 270 C2 000014 constant fixed bin(71,0) initial dcl 70 ref 252 252 252 252 256 256 256 256 263 263 263 263 270 270 270 270 ME 000003 constant char(32) initial unaligned dcl 103 set ref 116* 121* 131* 140* 148* R_ACCESS 000040 constant bit(3) initial unaligned dcl 1-11 set ref 135* 157* TERM_FILE_TERM 000002 constant bit(3) initial unaligned dcl 2-14 set ref 460* 462* USE_TOTALS_VERSION_3 000000 constant char(8) initial unaligned dcl 3-123 ref 144 160 a 000440 automatic fixed bin(35,0) dcl 427 set ref 430* 431 432* 432 absentee 576042 based structure array level 4 dcl 3-15 al 000364 automatic fixed bin(21,0) dcl 21 set ref 125* 126 126 131 131 152* 153 153 ap 000362 automatic pointer dcl 21 set ref 125* 126 131 152* 153 arg_count 000370 automatic fixed bin(17,0) dcl 56 set ref 113* 119 b 000441 automatic fixed bin(35,0) dcl 427 set ref 431* 433 434* 434 435* b_and_w 76 based structure level 2 dcl 3-15 bchr based char unaligned dcl 21 set ref 126* 131* 153* bins 544302 based structure level 2 dcl 3-15 bt 000372 automatic fixed bin(71,0) dcl 58 set ref 352* 372 376* c 000442 automatic fixed bin(35,0) dcl 427 set ref 433* 435* cc 000444 automatic char(7) unaligned dcl 427 in procedure "tcv" set ref 435* 436 436* 438 cc 000454 automatic char(8) unaligned dcl 447 in procedure "pctstr" set ref 452* 454* 455 char10a 000226 automatic char(10) unaligned dcl 21 set ref 260* 262* char10b 000231 automatic char(10) unaligned dcl 21 set ref 261* 262* cleanup 000414 stack reference condition dcl 102 ref 112 com_err_ 000112 constant entry external dcl 97 ref 116 131 140 148 com_err_$suppress_name 000100 constant entry external dcl 90 ref 121 comp 000265 automatic char(120) unaligned dcl 21 set ref 164* 167* conn 000200 automatic fixed bin(71,0) dcl 21 set ref 194* 196* 196 199 214* 214* 220* 222* 222 225 254* 256 256 256 256 258* 260* 262 262 303* 308 310* 315 connect 575730 based fixed bin(71,0) array level 5 dcl 3-15 ref 196 222 core 575726 based fixed bin(71,0) array level 5 dcl 3-15 ref 197 223 cpu 107 based fixed bin(5,0) array level 5 packed unsigned unaligned dcl 3-15 ref 386 389 393 cpu_avail 24 based fixed bin(71,0) level 3 dcl 3-15 set ref 180* 180* 180 180 180 254 255 293 295 296 298 300 301 305 307 308 310 311 312 314 315 317 319 320 crashes 575664 based fixed bin(17,0) array level 4 dcl 3-15 ref 192 218 crashtime 112 based fixed bin(71,0) array level 5 dcl 3-15 ref 378 cu_$arg_count 000074 constant entry external dcl 88 ref 113 cu_$arg_ptr 000076 constant entry external dcl 89 ref 125 152 d 000443 automatic fixed bin(35,0) dcl 427 set ref 435* date_time_ 000110 constant entry external dcl 96 ref 168 169 404 datstr 000162 automatic char(24) unaligned dcl 21 set ref 168* 170* 346* 404* 405 405 405 405 407 datstr1 000170 automatic char(24) unaligned dcl 21 set ref 169* 170* 346* dayconfigs 000403 automatic fixed bin(17,0) dcl 58 set ref 354* 391* 391 405* 409* daycrash 000401 automatic fixed bin(17,0) dcl 58 set ref 359* 381* 381 405* daylog 102 based structure array level 3 dcl 3-15 daystarts 000402 automatic fixed bin(17,0) dcl 58 set ref 358* 374* 374 405* daysystem 000412 automatic char(8) unaligned dcl 58 set ref 360* 384* 405* dayunits 000404 automatic fixed bin(17,0) dcl 58 set ref 361* 395 395* 405 dept 000323 automatic char(120) unaligned dcl 21 set ref 164* 167* disk_available 6 based fixed bin(35,0) level 3 dcl 3-15 ref 172 175 disk_capy 000254 automatic fixed bin(35,0) dcl 21 set ref 172* 173 173* 176 185* 185 185 326* 326 326 328 333 338 338 disk_left 7 based fixed bin(35,0) level 3 dcl 3-15 ref 185 328 331 338 341 disk_psec 575670 based fixed bin(71,0) array level 4 dcl 3-15 ref 207 233 disk_quota 575672 based fixed bin(35,0) array level 4 dcl 3-15 set ref 208 214* 234 disk_usage 575673 based fixed bin(35,0) array level 4 dcl 3-15 set ref 209 214* 235 divide builtin function dcl 80 ref 184 184 184 184 252 252 252 252 256 256 256 256 258 259 263 263 263 263 270 270 270 270 430 431 433 dn 000100 automatic char(168) unaligned dcl 21 set ref 126* 135* 140* 140* 148* 148* 153* 157* dollar_charge 575662 based float bin(27) array level 4 dcl 3-15 set ref 212 214* 238 244 246 dummy 000262 automatic char(10) unaligned dcl 21 set ref 164* 164* dump_number 106 based fixed bin(18,0) array level 5 packed unsigned unaligned dcl 3-15 ref 378 ec 000365 automatic fixed bin(35,0) dcl 21 set ref 113* 114 116* 126* 127 131* 135* 136 140* 153* 154 157* 158 en 000152 automatic char(32) unaligned dcl 21 set ref 126* 135* 140* 140* 148* 148* 153* 157* error_table_$unimplemented_version 000066 external static fixed bin(35,0) dcl 83 set ref 148* expand_pathname_$add_suffix 000102 constant entry external dcl 92 ref 126 153 fixed builtin function dcl 80 ref 275 275 275 275 282 282 282 282 flag 575675 based char(4) array level 4 dcl 3-15 ref 212 238 formatd 000010 internal static char(32) initial unaligned dcl 73 set ref 405* formatdt 000020 internal static char(32) initial unaligned dcl 73 set ref 413* heading 000030 internal static char(120) initial unaligned dcl 76 set ref 188* i 000176 automatic fixed bin(17,0) dcl 21 set ref 189* 190 192 196 197 202 203 204 207 208 209 210 211 212 212 214 214 214 214 214 214 216 218 222 223 228 229 230 233 234 235 236 237 238 238* 356* 363 369 371 372 376 378 378 384 384 386 386 389 393 394 395 395 398 398* idle 26 based fixed bin(71,0) level 3 dcl 3-15 ref 180 180 303 304 310 311 initiate_file_ 000114 constant entry external dcl 98 ref 135 157 interactive 575722 based structure array level 4 dcl 3-15 ioa_ 000104 constant entry external dcl 94 ref 167 170 179 180 184 185 188 214 241 251 252 256 262 263 266 268 270 272 274 275 277 278 280 282 284 289 291 297 302 309 316 321 323 325 326 332 337 342 346 348 405 407 413 ioa_$rsnnl 000106 constant entry external dcl 95 ref 435 454 iod 576072 based structure array level 4 dcl 3-15 j 000177 automatic fixed bin(17,0) dcl 21 set ref 195* 196 197* 201* 202 203 204* 221* 222 223* 227* 228 229 230* 368* 369 371 372 376 378 378 384 384 386 386 389 393 394 395 395 398 398* jobs 576043 based fixed bin(17,0) array level 5 dcl 3-15 ref 202 228 kmem 107(18) based fixed bin(18,0) array level 5 packed unsigned unaligned dcl 3-15 ref 386 394 last_month_value parameter float bin(27) dcl 447 ref 444 452 454 454 last_sysid 72 based char(8) level 3 dcl 3-15 set ref 184* lines 576076 based fixed bin(71,0) array level 5 dcl 3-15 ref 203 229 logins 575663 based fixed bin(17,0) array level 4 dcl 3-15 ref 190 216 max_day_log 100 based fixed bin(17,0) level 3 dcl 3-15 set ref 356 363 413* max_qhour 101 based fixed bin(17,0) level 3 dcl 3-15 ref 363 mconfigs 000410 automatic fixed bin(17,0) dcl 58 set ref 354* 392* 392 413* mcrash 000405 automatic fixed bin(17,0) dcl 58 set ref 350* 382* 382 413* memory 576046 based fixed bin(71,0) array level 5 dcl 3-15 ref 204 230 meters based structure level 2 dcl 3-15 mod builtin function dcl 80 ref 432 434 mpidle 36 based fixed bin(71,0) level 3 dcl 3-15 ref 300 301 303 304 mstarts 000406 automatic fixed bin(17,0) dcl 58 set ref 351* 375* 375 413* munits 000407 automatic fixed bin(17,0) dcl 58 set ref 350* 398 398* 413 n 000456 automatic fixed bin(17,0) dcl 447 set ref 454* nabs 000204 automatic fixed bin(17,0) dcl 21 set ref 200* 202* 202 206 214* 226* 228* 228 232 ncshd 000203 automatic fixed bin(17,0) dcl 21 set ref 192* 193 214* 218* 219 nlogins 000202 automatic fixed bin(17,0) dcl 21 set ref 190* 191 214* 216* 217 nproj 575665 based fixed bin(17,0) array level 4 dcl 3-15 set ref 210 214* 236 ntypes 544302 based fixed bin(17,0) level 3 dcl 3-15 ref 189 null builtin function dcl 80 ref 111 460 462 nunits 107(05) based fixed bin(13,0) array level 5 packed unsigned unaligned dcl 3-15 ref 395 395 398 398 nusers 575666 based fixed bin(17,0) array level 4 dcl 3-15 set ref 211 214* 237 pathname_ 000070 constant entry external dcl 86 ref 140 140 148 148 pct 000234 automatic float bin(27) dcl 21 set ref 285* 289* 289* 289* 296* 297* 297* 297* 301* 302* 302* 302* 308* 309* 309* 309* 315* 316* 316* 316* 320* 321* 321* 321* 328* 332* 332* 332* 333* 337* 337* 337* 338* 342* 342* 342* period_begin 2 based fixed bin(71,0) level 3 dcl 3-15 set ref 168* period_end 4 based fixed bin(71,0) level 3 dcl 3-15 set ref 169* qh 102 based structure array level 4 dcl 3-15 qlim 000376 automatic fixed bin(17,0) dcl 58 set ref 363* 365* 368 starttime 110 based fixed bin(71,0) array level 5 dcl 3-15 ref 372 376 substr builtin function dcl 80 set ref 405 405 405 405 407 436 436* sys_crash 23 based fixed bin(17,0) level 3 dcl 3-15 set ref 180* 184 184 184 184 258 259 sys_starts 22 based fixed bin(17,0) level 3 dcl 3-15 set ref 180* sysid 104 based char(8) array level 5 dcl 3-15 ref 384 384 system_info_$titles 000072 constant entry external dcl 87 ref 164 tconn 000260 automatic fixed bin(71,0) initial dcl 21 set ref 21* 199* 199 241* 241* 270 270 270 270 terminate_file_ 000116 constant entry external dcl 100 ref 460 462 this_month_value parameter float bin(27) dcl 447 ref 444 454 time 102 based fixed bin(71,0) array level 5 dcl 3-15 ref 369 371 tnabs 000207 automatic fixed bin(17,0) initial dcl 21 set ref 21* 206* 206 241* 274* 274 274 285 tncsh 000206 automatic fixed bin(17,0) initial dcl 21 set ref 21* 193* 193 241* 284* 284 284 285 tnlogins 000205 automatic fixed bin(17,0) initial dcl 21 set ref 21* 191* 191 241* 272* 272 272 285 tnproj 000212 automatic fixed bin(17,0) initial dcl 21 set ref 21* 210* 210 241* 277* 277 277 tnusers 000213 automatic fixed bin(17,0) initial dcl 21 set ref 21* 211* 211 241* 278* 278 278 total_cpu 32 based fixed bin(71,0) level 3 dcl 3-15 ref 180 263 263 263 263 263 263 263 263 310 311 319 320 totdk 000246 automatic fixed bin(71,0) initial dcl 21 set ref 21* 207* 207 275 275 275 275 totmemu 000236 automatic fixed bin(71,0) initial dcl 21 set ref 21* 197* 197 204* 204 266 266 266 totprt 000242 automatic fixed bin(71,0) initial dcl 21 set ref 21* 203* 203 268 268 268 totrev 000252 automatic float bin(27) initial dcl 21 set ref 21* 212* 212 244 244* 282 282 282* 282* tqta 000210 automatic fixed bin(17,0) initial dcl 21 set ref 21* 208* 208 241* 325* 325 325 tusage 000211 automatic fixed bin(17,0) initial dcl 21 set ref 21* 209* 209 241* 333 338 uptime 20 based fixed bin(71,0) level 3 dcl 3-15 set ref 180* 180* 184 184 184 184 252 252 252 252 252 252 252 252 254 255 258 259 use_totals based structure level 1 dcl 3-15 use_totals_ptr 000422 automatic pointer dcl 3-14 set ref 111* 135* 144 168 169 172 180 180 180 180 180 180 180 180 180 180 180 180 184 184 184 184 184 184 184 184 184 185 189 190 192 196 197 202 203 204 207 208 209 210 211 212 212 214 214 214 214 214 214 244 252 252 252 252 254 254 258 258 263 263 263 263 296 296 301 301 303 303 303 308 310 310 310 315 320 320 328 338 356 363 363 369 371 372 376 378 378 384 384 386 386 389 393 394 395 395 398 398 413 460 460* ut 575654 based structure array level 3 dcl 3-15 utype 575654 based char(24) array level 4 dcl 3-15 set ref 214* version 10 based char(8) level 3 dcl 3-15 ref 144 160 x parameter fixed bin(71,0) dcl 425 ref 422 430 xconn 000224 automatic fixed bin(71,0) dcl 21 set ref 255* 256 256 256 256 259* 261* 262 262 304* 307 311* 314 xcpu 000377 automatic fixed bin(17,0) dcl 58 set ref 353* 386 393* xdisk_capy 000255 automatic fixed bin(35,0) dcl 21 set ref 175* 176 176* 326* 326 326 329 331 334 336 339 341 341 xmem 000400 automatic fixed bin(17,0) dcl 58 set ref 353* 386 394* xpct 000235 automatic float bin(27) dcl 21 set ref 286* 288* 289* 289* 289* 293* 295* 297* 297* 297* 298* 300* 302* 302* 302* 305* 307* 309* 309* 309* 312* 314* 316* 316* 316* 317* 319* 321* 321* 321* 329* 331* 332* 332* 332* 334* 336* 337* 337* 337* 339* 341* 342* 342* 342* xtconn 000256 automatic fixed bin(71,0) initial dcl 21 set ref 21* 225* 225 270 270 270 270 xtnabs 000216 automatic fixed bin(17,0) initial dcl 21 set ref 21* 232* 232 274* 274 274 286 288 xtncsh 000215 automatic fixed bin(17,0) initial dcl 21 set ref 21* 219* 219 284* 284 284 288 xtnlogins 000214 automatic fixed bin(17,0) initial dcl 21 set ref 21* 217* 217 272* 272 272 286 288 xtnproj 000221 automatic fixed bin(17,0) initial dcl 21 set ref 21* 236* 236 277* 277 277 xtnusers 000222 automatic fixed bin(17,0) initial dcl 21 set ref 21* 237* 237 278* 278 278 xtotdk 000250 automatic fixed bin(71,0) initial dcl 21 set ref 21* 233* 233 275 275 275 275 xtotmemu 000240 automatic fixed bin(71,0) initial dcl 21 set ref 21* 223* 223 230* 230 266 266 266 xtotp 000366 automatic pointer dcl 21 set ref 111* 157* 160 175 216 218 222 223 228 229 230 233 234 235 236 237 238 238 246 252 252 252 252 255 255 259 259 263 263 263 263 293 295 295 298 300 300 304 304 304 305 307 311 311 311 312 314 317 319 319 331 341 462 462* xtotprt 000244 automatic fixed bin(71,0) initial dcl 21 set ref 21* 229* 229 268 268 268 xtotrev 000253 automatic float bin(27) initial dcl 21 set ref 21* 238* 238 246 246* 282 282 282* 282* xtqta 000217 automatic fixed bin(17,0) initial dcl 21 set ref 21* 234* 234 325* 325 325 xtusage 000220 automatic fixed bin(17,0) initial dcl 21 set ref 21* 235* 235 336 341 zidle 34 based fixed bin(71,0) level 3 dcl 3-15 ref 295 296 303 304 ztime 000374 automatic fixed bin(71,0) dcl 58 set ref 367* 371* 402 404* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS internal static bit(3) initial unaligned dcl 1-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 TERM_FILE_BC internal static bit(2) initial unaligned dcl 2-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 2-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 2-16 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 2-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 2-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 2-15 USE_TOTALS_VERSION_2 internal static char(8) initial unaligned dcl 3-121 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 abs builtin function dcl 80 addr builtin function dcl 80 bit builtin function dcl 80 fract automatic float bin(27) dcl 21 index builtin function dcl 80 k automatic fixed bin(17,0) dcl 21 l automatic fixed bin(17,0) dcl 21 length builtin function dcl 80 m automatic fixed bin(17,0) dcl 21 n automatic fixed bin(17,0) dcl 21 terminate_file_switches based structure level 1 packed unaligned dcl 2-4 totp automatic pointer dcl 21 unspec builtin function dcl 80 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR 005525 constant label dcl 415 ref 132 141 149 INITIATE_ERROR 001360 constant label dcl 136 ref 158 PN_ERROR 001264 constant label dcl 127 ref 154 UT_VERSION_ERROR 001435 constant label dcl 144 ref 160 clean_up 005675 constant entry internal dcl 457 ref 112 415 pctstr 005623 constant entry internal dcl 444 ref 252 252 256 256 262 262 263 263 266 266 268 268 270 270 272 272 274 274 275 275 277 277 278 278 282 282 284 284 289 289 297 297 302 302 309 309 316 316 321 321 325 325 326 326 332 332 337 337 342 342 sameconf 005336 constant label dcl 395 ref 386 389 skip 005350 constant label dcl 400 ref 369 skip1 005464 constant label dcl 410 ref 402 system_monthly_report 001033 constant entry external dcl 12 tcv 005532 constant entry internal dcl 422 ref 180 180 180 180 184 184 214 214 241 241 260 261 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6314 6434 6113 6324 Length 6750 6113 120 277 201 56 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME system_monthly_report 544 external procedure is an external procedure. on unit on line 112 64 on unit tcv internal procedure shares stack frame of external procedure system_monthly_report. pctstr internal procedure shares stack frame of external procedure system_monthly_report. clean_up 84 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 formatd system_monthly_report 000020 formatdt system_monthly_report 000030 heading system_monthly_report STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME system_monthly_report 000100 dn system_monthly_report 000152 en system_monthly_report 000162 datstr system_monthly_report 000170 datstr1 system_monthly_report 000176 i system_monthly_report 000177 j system_monthly_report 000200 conn system_monthly_report 000202 nlogins system_monthly_report 000203 ncshd system_monthly_report 000204 nabs system_monthly_report 000205 tnlogins system_monthly_report 000206 tncsh system_monthly_report 000207 tnabs system_monthly_report 000210 tqta system_monthly_report 000211 tusage system_monthly_report 000212 tnproj system_monthly_report 000213 tnusers system_monthly_report 000214 xtnlogins system_monthly_report 000215 xtncsh system_monthly_report 000216 xtnabs system_monthly_report 000217 xtqta system_monthly_report 000220 xtusage system_monthly_report 000221 xtnproj system_monthly_report 000222 xtnusers system_monthly_report 000224 xconn system_monthly_report 000226 char10a system_monthly_report 000231 char10b system_monthly_report 000234 pct system_monthly_report 000235 xpct system_monthly_report 000236 totmemu system_monthly_report 000240 xtotmemu system_monthly_report 000242 totprt system_monthly_report 000244 xtotprt system_monthly_report 000246 totdk system_monthly_report 000250 xtotdk system_monthly_report 000252 totrev system_monthly_report 000253 xtotrev system_monthly_report 000254 disk_capy system_monthly_report 000255 xdisk_capy system_monthly_report 000256 xtconn system_monthly_report 000260 tconn system_monthly_report 000262 dummy system_monthly_report 000265 comp system_monthly_report 000323 dept system_monthly_report 000362 ap system_monthly_report 000364 al system_monthly_report 000365 ec system_monthly_report 000366 xtotp system_monthly_report 000370 arg_count system_monthly_report 000372 bt system_monthly_report 000374 ztime system_monthly_report 000376 qlim system_monthly_report 000377 xcpu system_monthly_report 000400 xmem system_monthly_report 000401 daycrash system_monthly_report 000402 daystarts system_monthly_report 000403 dayconfigs system_monthly_report 000404 dayunits system_monthly_report 000405 mcrash system_monthly_report 000406 mstarts system_monthly_report 000407 munits system_monthly_report 000410 mconfigs system_monthly_report 000412 daysystem system_monthly_report 000422 use_totals_ptr system_monthly_report 000440 a tcv 000441 b tcv 000442 c tcv 000443 d tcv 000444 cc tcv 000454 cc pctstr 000456 n pctstr THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 call_ext_out_desc call_ext_out call_int_this call_int_other return fl2_to_fx1 mod_fx1 enable ext_entry int_entry divide_fx3 divide_fx4 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_$suppress_name cu_$arg_count cu_$arg_ptr date_time_ expand_pathname_$add_suffix initiate_file_ ioa_ ioa_$rsnnl pathname_ system_info_$titles terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 12 001032 21 001040 111 001073 112 001076 113 001120 114 001131 116 001133 117 001150 119 001151 121 001154 123 001201 125 001202 126 001222 127 001262 131 001264 132 001317 135 001320 136 001356 140 001360 141 001427 144 001430 148 001435 149 001505 152 001506 153 001526 154 001566 157 001570 158 001626 160 001630 164 001635 167 001657 168 001705 169 001723 170 001741 172 001764 173 001767 175 001772 176 001775 179 002000 180 002014 184 002122 185 002162 188 002224 189 002235 190 002251 191 002260 192 002261 193 002263 194 002264 195 002266 196 002273 197 002310 198 002313 199 002315 200 002320 201 002321 202 002327 203 002342 204 002345 205 002350 206 002352 207 002354 208 002365 209 002371 210 002375 211 002377 212 002401 214 002411 216 002500 217 002507 218 002510 219 002512 220 002513 221 002515 222 002521 223 002536 224 002541 225 002543 226 002546 227 002547 228 002555 229 002570 230 002573 231 002576 232 002600 233 002602 234 002613 235 002617 236 002623 237 002625 238 002627 240 002637 241 002647 244 002717 246 002725 251 002733 252 002747 254 003025 255 003031 256 003035 258 003110 259 003121 260 003132 261 003142 262 003152 263 003213 266 003271 268 003350 270 003427 272 003503 274 003542 275 003601 277 003662 278 003721 280 003760 282 003771 284 004030 285 004067 286 004100 288 004110 289 004115 291 004146 293 004157 295 004170 296 004176 297 004211 298 004242 300 004253 301 004261 302 004274 303 004325 304 004332 305 004337 307 004347 308 004355 309 004367 310 004420 311 004425 312 004432 314 004442 315 004450 316 004462 317 004513 319 004524 320 004532 321 004545 323 004576 325 004607 326 004646 328 004705 329 004716 331 004725 332 004733 333 004764 334 004774 336 005003 337 005010 338 005041 339 005062 341 005071 342 005107 346 005140 348 005163 350 005177 351 005201 352 005203 353 005205 354 005210 356 005212 358 005223 359 005224 360 005225 361 005227 363 005230 365 005237 367 005241 368 005243 369 005253 371 005265 372 005266 374 005272 375 005273 376 005274 378 005275 381 005302 382 005303 384 005304 386 005315 389 005326 391 005330 392 005331 393 005332 394 005333 395 005336 398 005345 400 005350 402 005352 404 005354 405 005371 407 005446 409 005463 410 005464 413 005466 415 005525 418 005531 422 005532 430 005534 431 005541 432 005543 433 005547 434 005552 435 005555 436 005606 438 005615 444 005623 452 005625 454 005632 455 005666 457 005674 460 005702 462 005735 464 005771 ----------------------------------------------------------- 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