COMPILATION LISTING OF SEGMENT system_total 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.7 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_total: 13 procedure options (variable); 14 15 /* SYSTEM_TOTAL - this program scans the system samples from "stat_seg" and puts them in "use_totals". 16* 17* stat_seg was created by the initializer process, which samples the system statistics every 15 minutes 18* and saves the SST header, the TC_DATA header, and several other magic numbers, such as the configuration. 19* These meters are kept in "stat_seg" and copied by "copy_as_meters" once a day. 20* This program is then run to extract figures of lasting interest and to record them in "use_totals" 21* for use by various reporting programs. 22* 23* THVV */ 24 /* modified 4/77 to use hardcore defs THVV */ 25 /* Modified 1984-08-31 BIM for v2 use_totals */ 26 27 dcl dn char (168), 28 en char (32), 29 statp ptr, 30 (tcmp, tcdp) ptr, 31 tot_dir char (168), 32 tot_ename char (32), 33 meter_time float bin, 34 cpu_time float bin, 35 time float bin, 36 upt fixed bin (71) init (0), 37 dayx fixed bin init (0), 38 (qlo, qhi) fixed bin, 39 last_dump fixed bin (18), 40 last_shutdown bit (1) aligned, 41 (fday, fqh) fixed bin, 42 (i, j, n) fixed bin, 43 ap ptr, 44 al fixed bin (21), 45 bchr char (al) unaligned based (ap), 46 double fixed bin (71) aligned based, 47 ec fixed bin (35); 48 dcl arg_count fixed bin; 49 50 dcl TCMidle_loc fixed bin (18); 51 dcl TCMinitialize_time_loc 52 fixed bin (18); 53 dcl TCMlast_time_loc fixed bin (18); 54 dcl TCMmp_idle_loc fixed bin (18); 55 dcl TCMprocessor_time_loc 56 fixed bin (18); 57 dcl TCMzero_idle_loc fixed bin (18); 58 dcl offset fixed bin (18); 59 60 dcl (mm, dd, yy, hh, min, ss, absda, wkd, shf, qtr) 61 fixed bin; 62 63 dcl error_table_$unimplemented_version 64 fixed bin (35) ext static; 65 66 dcl datebin_ entry (fixed bin (71), fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, 67 fixed bin, fixed bin, fixed bin); 68 dcl datebin_$revert entry (fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, fixed bin (71)); 69 dcl ring0_get_$segptr entry (char (*), char (*), ptr, fixed bin (35)); 70 dcl ring0_get_$definition 71 entry (ptr, char (*), char (*), fixed bin (18), fixed bin, fixed bin (35)); 72 dcl disk_left_ entry (fixed bin (35), fixed bin (35)); 73 74 dcl cv_dec_check_ entry (character (*), fixed binary (35)) returns (fixed binary (35)); 75 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 76 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 77 dcl expand_pathname_$add_suffix 78 entry (character (*), character (*), character (*), character (*), fixed binary (35)); 79 dcl com_err_$suppress_name 80 entry () options (variable); 81 dcl com_err_ entry options (variable); 82 83 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)) 84 ; 85 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 86 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 87 dcl (addr, addrel, null, substr, divide, mod) 88 builtin; 89 90 dcl ME char (32) init ("system_total") int static options (constant); 91 92 dcl cleanup condition; 93 94 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 */ 95 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 */ 96 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 */ 97 4 1 /* BEGIN INCLUDE FILE ... stat_seg.incl.pl1 - answering service statistics */ 4 2 4 3 dcl 1 statistics based (statp) aligned, /* Filled in by "as_meter_" periodically. */ 4 4 2 time_of fixed bin (71), /* Time of sample. */ 4 5 2 index fixed bin, /* Index of current slot */ 4 6 2 wrapped fixed bin, /* Incremented every time we wrap around */ 4 7 2 pad (4) fixed bin, 4 8 2 array (652), /* Array of sample bins */ 4 9 3 time fixed bin (71), /* Sample time */ 4 10 3 sysid char (8), /* Current system ID */ 4 11 3 uptime fixed bin (71), /* Time of bootload */ 4 12 3 units fixed bin, /* Number of load units */ 4 13 3 users fixed bin, /* Number of users */ 4 14 3 erfno char (8), /* ERF number from last crash */ 4 15 3 crashtime fixed bin (71), /* Time of crash. */ 4 16 3 ncpu fixed bin (5) unal, /* Current # of CPU's */ 4 17 3 pad2 bit (30) unal, 4 18 3 kmem fixed bin (17) unal, /* Current # of pages of main core */ 4 19 3 kbulk fixed bin (17) unal, /* Current # of pages of paging dev */ 4 20 3 system_virtual_time fixed bin (71), /* Cumulative virtual cpu time */ 4 21 3 tcdata_contents (256) fixed bin, /* Copy of header of ring 0 tc_data */ 4 22 3 sst_contents (128) fixed bin; /* Copy of header of ring 0 sst */ 4 23 4 24 dcl STAT_header_lth fixed bin int static init (8); /* Lth in words for stat_seg header. */ 4 25 dcl STAT_entry_lth fixed bin int static init (400); /* Length in words for stat_seg entry. */ 4 26 4 27 /* END INCLUDE FILE ... stat_seg.incl.pl1 */ 98 99 100 101 call cu_$arg_count (arg_count, ec); 102 if ec ^= 0 103 then do; 104 call com_err_ (ec, ME); 105 return; 106 end; 107 if arg_count ^= 2 108 then do; 109 call com_err_$suppress_name (0, ME, "Usage: system_total METER_DATA USE_TOTALS"); 110 return; 111 end; 112 113 statp, use_totals_ptr = null (); 114 on cleanup call clean_up; 115 116 call cu_$arg_ptr (1, ap, al, (0)); 117 call expand_pathname_$add_suffix (bchr, "", dn, en, ec); 118 if ec ^= 0 119 then do; 120 call com_err_ (ec, ME, "Invalid meter data pathname ^a.", bchr); 121 return; 122 end; 123 call initiate_file_ (dn, en, R_ACCESS, statp, (0), ec); 124 if ec ^= 0 125 then do; 126 call com_err_ (ec, ME, "^a", pathname_ (dn, en)); 127 return; 128 end; 129 130 call cu_$arg_ptr (2, ap, al, (0)); 131 call expand_pathname_$add_suffix (bchr, "use_totals", tot_dir, tot_ename, ec); 132 if ec ^= 0 133 then do; 134 call com_err_ (ec, ME, "Invalid use_totals pathname ^a.", bchr); 135 go to ERROR; 136 end; 137 call initiate_file_ (tot_dir, tot_ename, RW_ACCESS, use_totals_ptr, (0), ec); 138 if ec ^= 0 139 then do; 140 call com_err_ (ec, ME, "^a", pathname_ (tot_dir, tot_ename)); 141 go to ERROR; 142 end; 143 144 if use_totals.version ^= USE_TOTALS_VERSION_3 145 then do; 146 call com_err_ (error_table_$unimplemented_version, ME, "^a is not version 3.", 147 pathname_ (tot_dir, tot_ename)); 148 go to ERROR; 149 end; 150 151 /* Obtain a pointer to the ring 0 segment tc_data, and use its definitions */ 152 153 call ring0_get_$segptr ("", "tc_data", tcdp, ec); 154 if ec ^= 0 155 then call error ("tc_data"); 156 call ring0_get_$definition (tcdp, "", "last_time", offset, (0), ec); 157 if ec ^= 0 158 then call error ("tcm.last_time"); 159 TCMlast_time_loc = offset; 160 call ring0_get_$definition (tcdp, "", "idle", offset, (0), ec); 161 if ec ^= 0 162 then call error ("tcm.idle"); 163 TCMidle_loc = offset; 164 call ring0_get_$definition (tcdp, "", "initialize_time", offset, (0), ec); 165 if ec ^= 0 166 then call error ("tcm.initialize_time"); 167 TCMinitialize_time_loc = offset; 168 call ring0_get_$definition (tcdp, "", "processor_time", offset, (0), ec); 169 if ec ^= 0 170 then call error ("tcm.processor_time"); 171 TCMprocessor_time_loc = offset; 172 call ring0_get_$definition (tcdp, "", "zero_idle", offset, (0), ec); 173 if ec ^= 0 174 then call error ("tcm.zero_idle"); 175 TCMzero_idle_loc = offset; 176 call ring0_get_$definition (tcdp, "", "mp_idle", offset, (0), ec); 177 if ec ^= 0 178 then call error ("tcm.mp_idle"); 179 TCMmp_idle_loc = offset; 180 181 n = statistics.index; 182 fday = use_totals.max_day_log; 183 fqh = use_totals.max_qhour; 184 i = 0; 185 redoit: 186 i = i + 1; 187 if i > n 188 then go to exit; 189 tcmp = addr (statistics.tcdata_contents (i, 1)); 190 191 if statistics.uptime (i) < clock () 192 then do; /* Check validity */ 193 if statistics.uptime (i) > use_totals.time_last_boot 194 then do; 195 use_totals.uptime_since_boot = 0; 196 use_totals.cpu_avail_since_boot = 0; 197 use_totals.idle_since_boot = 0; 198 use_totals.zidle_since_boot = 0; 199 use_totals.mpidle_since_boot = 0; 200 if use_totals.n_users_on > 0 201 then use_totals.sys_crash = use_totals.sys_crash + 1; 202 use_totals.sys_starts = use_totals.sys_starts + 1; 203 end; 204 use_totals.time_last_boot = statistics.uptime (i); 205 use_totals.time_last_sample = statistics.time (i); 206 use_totals.last_sysid = statistics.sysid (i); 207 end; 208 use_totals.n_users_on = statistics.users (i); 209 meter_time = addrel (tcmp, TCMlast_time_loc) -> double - addrel (tcmp, TCMinitialize_time_loc) -> double; 210 use_totals.uptime = use_totals.uptime + (meter_time - use_totals.uptime_since_boot); 211 use_totals.uptime_since_boot = meter_time; 212 cpu_time = addrel (tcmp, TCMprocessor_time_loc) -> double; 213 use_totals.cpu_avail = use_totals.cpu_avail + (cpu_time - use_totals.cpu_avail_since_boot); 214 use_totals.cpu_avail_since_boot = cpu_time; 215 time = addrel (tcmp, TCMidle_loc) -> double; 216 use_totals.idle = use_totals.idle + (time - use_totals.idle_since_boot); 217 use_totals.idle_since_boot = time; 218 time = addrel (tcmp, TCMzero_idle_loc) -> double; 219 use_totals.zidle = use_totals.zidle + (time - use_totals.zidle_since_boot); 220 use_totals.zidle_since_boot = time; 221 time = addrel (tcmp, TCMmp_idle_loc) -> double; 222 use_totals.mpidle = use_totals.mpidle + (time - use_totals.mpidle_since_boot); 223 use_totals.mpidle_since_boot = time; 224 if statistics.time (i) < clock () 225 then do; /* Don't die if oprs set clock wrong. */ 226 call datebin_ (statistics.time (i), absda, mm, dd, yy, hh, min, ss, wkd, shf); 227 qtr = hh * 4 + divide (min, 15, 17, 0) + 1; 228 if use_totals.origin = 0 229 then do; 230 call datebin_$revert (mm, dd, yy, 0, 0, 0, use_totals.origin); 231 dayx = 1; 232 end; 233 else do; 234 qtr = divide (statistics.time (i) - use_totals.origin, 900000000, 35, 0); 235 dayx = divide (qtr, 96, 35, 0) + 1; 236 qtr = mod (qtr, 96) + 1; 237 end; 238 239 if dayx > hbound (use_totals.daylog, 1) 240 then do; 241 call com_err_ (0, ME, 242 "Billing cycle is greater than maximum ^d. No more usage statistics can be recorded.", 243 hbound (use_totals.daylog, 1)); 244 go to ERROR; 245 end; 246 247 use_totals.max_day_log = dayx; 248 use_totals.max_qhour = qtr; 249 use_totals.daylog (dayx).qh (qtr).time = statistics.time (i); 250 use_totals.daylog (dayx).qh (qtr).sysid = statistics.sysid (i); 251 use_totals.daylog (dayx).qh (qtr).cpu = statistics.ncpu (i); 252 use_totals.daylog (dayx).qh (qtr).kmem = statistics.kmem (i); 253 use_totals.daylog (dayx).qh (qtr).nunits = statistics.units (i); 254 use_totals.daylog (dayx).qh (qtr).dump_number = cv_dec_check_ ((statistics.erfno (i)), ec); 255 if ec ^= 0 256 then use_totals.daylog (dayx).qh (qtr).dump_number = 0; 257 use_totals.daylog (dayx).qh (qtr).starttime = statistics.uptime (i); 258 use_totals.daylog (dayx).qh (qtr).crashtime = statistics.crashtime (i); 259 end; 260 go to redoit; 261 262 exit: 263 if fday = 0 264 then fday = 1; 265 if fqh = 0 266 then fqh = 1; 267 last_dump = 0; 268 last_shutdown = "0"b; 269 call check ("fday", fday, 1, hbound (use_totals.daylog, 1), 1); 270 call check ("dayx", dayx, 1, hbound (use_totals.daylog, 1), hbound (use_totals.daylog, 1)); 271 do i = fday to dayx; 272 if i = fday 273 then qlo = fqh; 274 else qlo = 1; 275 if i = dayx 276 then qhi = qtr; 277 else qhi = 96; 278 call check ("qlo", qlo, 1, hbound (use_totals.daylog.qh, 2), 1); 279 call check ("qhi", qhi, 1, hbound (use_totals.daylog.qh, 2), hbound (use_totals.daylog.qh, 2)); 280 do j = qlo to qhi; 281 if use_totals.daylog (i).qh (j).time = 0 282 then do; 283 use_totals.daylog (i).qh (j).dump_number = last_dump; 284 use_totals.daylog (i).qh (j).shutdown = last_shutdown; 285 end; 286 else if use_totals.daylog (i).qh (j).nunits = 0 287 then do; 288 use_totals.daylog (i).qh (j).shutdown = "1"b; 289 use_totals.daylog (i).qh (j).dump_number = 0; 290 end; 291 else do; 292 last_dump = use_totals.daylog (i).qh (j).dump_number; 293 last_shutdown = use_totals.daylog (i).qh (j).shutdown; 294 end; 295 end; 296 end; 297 298 /* Obtain the amount of disk available and left. */ 299 300 call disk_left_ (use_totals.disk_available, use_totals.disk_left); 301 ERROR: 302 call clean_up; 303 304 error: 305 proc (x); 306 307 dcl x char (*); 308 309 call com_err_ (ec, ME, "cannot locate ^a", x); 310 go to ERROR; 311 312 end error; 313 314 check: 315 proc (varn, var, lo, hi, dft); 316 317 dcl varn char (*); 318 dcl (var, lo, hi, dft) fixed bin; 319 320 if var >= lo & var <= hi 321 then return; 322 call com_err_ (0, ME, "range err: ^a = ^d, not ^d-^d. set to ^d", varn, var, lo, hi, dft); 323 var = dft; 324 325 end check; 326 327 clean_up: 328 procedure; 329 330 if statp ^= null () 331 then call terminate_file_ (statp, (0), TERM_FILE_TERM, (0)); 332 if use_totals_ptr ^= null () 333 then call terminate_file_ (use_totals_ptr, (0), TERM_FILE_TERM, (0)); 334 return; 335 end clean_up; 336 337 end system_total; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1133.6 system_total.pl1 >special_ldd>online>41-15-04/10/85>system_total.pl1 95 1 04/09/85 1109.7 access_mode_values.incl.pl1 >special_ldd>online>41-15-04/10/85>access_mode_values.incl.pl1 96 2 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 97 3 12/07/84 1102.2 use_totals.incl.pl1 >ldd>include>use_totals.incl.pl1 98 4 07/23/81 1735.0 stat_seg.incl.pl1 >ldd>include>stat_seg.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. ME 000004 constant char(32) initial unaligned dcl 90 set ref 104* 109* 120* 126* 134* 140* 146* 241* 309* 322* RW_ACCESS 000003 constant bit(3) initial unaligned dcl 1-11 set ref 137* R_ACCESS 000017 constant bit(3) initial unaligned dcl 1-11 set ref 123* TCMidle_loc 000277 automatic fixed bin(18,0) dcl 50 set ref 163* 215 TCMinitialize_time_loc 000300 automatic fixed bin(18,0) dcl 51 set ref 167* 209 TCMlast_time_loc 000301 automatic fixed bin(18,0) dcl 53 set ref 159* 209 TCMmp_idle_loc 000302 automatic fixed bin(18,0) dcl 54 set ref 179* 221 TCMprocessor_time_loc 000303 automatic fixed bin(18,0) dcl 55 set ref 171* 212 TCMzero_idle_loc 000304 automatic fixed bin(18,0) dcl 57 set ref 175* 218 TERM_FILE_TERM 000002 constant bit(3) initial unaligned dcl 2-14 set ref 330* 332* USE_TOTALS_VERSION_3 000000 constant char(8) initial unaligned dcl 3-123 ref 144 absda 000314 automatic fixed bin(17,0) dcl 60 set ref 226* addr builtin function dcl 87 ref 189 addrel builtin function dcl 87 ref 209 209 212 215 218 221 al 000274 automatic fixed bin(21,0) dcl 27 set ref 116* 117 117 120 120 130* 131 131 134 134 ap 000272 automatic pointer dcl 27 set ref 116* 117 120 130* 131 134 arg_count 000276 automatic fixed bin(17,0) dcl 48 set ref 101* 107 array 10 based structure array level 2 dcl 4-3 b_and_w 76 based structure level 2 dcl 3-15 bchr based char unaligned dcl 27 set ref 117* 120* 131* 134* cleanup 000320 stack reference condition dcl 92 ref 114 com_err_ 000036 constant entry external dcl 81 ref 104 120 126 134 140 146 241 309 322 com_err_$suppress_name 000034 constant entry external dcl 79 ref 109 cpu 107 based fixed bin(5,0) array level 5 packed unsigned unaligned dcl 3-15 set ref 251* cpu_avail 24 based fixed bin(71,0) level 3 dcl 3-15 set ref 213* 213 cpu_avail_since_boot 66 based fixed bin(71,0) level 3 dcl 3-15 set ref 196* 213 214* cpu_time 000253 automatic float bin(27) dcl 27 set ref 212* 213 214 crashtime 112 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "system_total" set ref 258* crashtime 22 based fixed bin(71,0) array level 3 in structure "statistics" dcl 4-3 in procedure "system_total" ref 258 cu_$arg_count 000026 constant entry external dcl 75 ref 101 cu_$arg_ptr 000030 constant entry external dcl 76 ref 116 130 cv_dec_check_ 000024 constant entry external dcl 74 ref 254 datebin_ 000012 constant entry external dcl 66 ref 226 datebin_$revert 000014 constant entry external dcl 68 ref 230 daylog 102 based structure array level 3 dcl 3-15 set ref 239 241 241 269 269 270 270 270 270 dayx 000260 automatic fixed bin(17,0) initial dcl 27 set ref 27* 231* 235* 239 247 249 250 251 252 253 254 255 257 258 270* 271 275 dd 000307 automatic fixed bin(17,0) dcl 60 set ref 226* 230* dft parameter fixed bin(17,0) dcl 318 set ref 314 322* 323 disk_available 6 based fixed bin(35,0) level 3 dcl 3-15 set ref 300* disk_left 7 based fixed bin(35,0) level 3 dcl 3-15 set ref 300* disk_left_ 000022 constant entry external dcl 72 ref 300 divide builtin function dcl 87 ref 227 234 235 dn 000100 automatic char(168) unaligned dcl 27 set ref 117* 123* 126* 126* double based fixed bin(71,0) dcl 27 ref 209 209 212 215 218 221 dump_number 106 based fixed bin(18,0) array level 5 packed unsigned unaligned dcl 3-15 set ref 254* 255* 283* 289* 292 ec 000275 automatic fixed bin(35,0) dcl 27 set ref 101* 102 104* 117* 118 120* 123* 124 126* 131* 132 134* 137* 138 140* 153* 154 156* 157 160* 161 164* 165 168* 169 172* 173 176* 177 254* 255 309* en 000152 automatic char(32) unaligned dcl 27 set ref 117* 123* 126* 126* erfno 20 based char(8) array level 3 dcl 4-3 ref 254 error_table_$unimplemented_version 000010 external static fixed bin(35,0) dcl 63 set ref 146* expand_pathname_$add_suffix 000032 constant entry external dcl 77 ref 117 131 fday 000265 automatic fixed bin(17,0) dcl 27 set ref 182* 262 262* 269* 271 272 flags 106(18) based structure array level 5 packed unaligned dcl 3-15 fqh 000266 automatic fixed bin(17,0) dcl 27 set ref 183* 265 265* 272 hh 000311 automatic fixed bin(17,0) dcl 60 set ref 226* 227 hi parameter fixed bin(17,0) dcl 318 set ref 314 320 322* i 000267 automatic fixed bin(17,0) dcl 27 set ref 184* 185* 185 187 189 191 193 204 205 206 208 224 226 234 249 250 251 252 253 254 257 258 271* 272 275 281 283 284 286 288 289 292 293* idle 26 based fixed bin(71,0) level 3 dcl 3-15 set ref 216* 216 idle_since_boot 70 based fixed bin(71,0) level 3 dcl 3-15 set ref 197* 216 217* index 2 based fixed bin(17,0) level 2 dcl 4-3 ref 181 initiate_file_ 000040 constant entry external dcl 83 ref 123 137 j 000270 automatic fixed bin(17,0) dcl 27 set ref 280* 281 283 284 286 288 289 292 293* kmem 25 based fixed bin(17,0) array level 3 in structure "statistics" packed unaligned dcl 4-3 in procedure "system_total" ref 252 kmem 107(18) based fixed bin(18,0) array level 5 in structure "use_totals" packed unsigned unaligned dcl 3-15 in procedure "system_total" set ref 252* last_dump 000263 automatic fixed bin(18,0) dcl 27 set ref 267* 283 292* last_shutdown 000264 automatic bit(1) dcl 27 set ref 268* 284 293* last_sysid 72 based char(8) level 3 dcl 3-15 set ref 206* lo parameter fixed bin(17,0) dcl 318 set ref 314 320 322* max_day_log 100 based fixed bin(17,0) level 3 dcl 3-15 set ref 182 247* max_qhour 101 based fixed bin(17,0) level 3 dcl 3-15 set ref 183 248* meter_time 000252 automatic float bin(27) dcl 27 set ref 209* 210 211 meters based structure level 2 dcl 3-15 min 000312 automatic fixed bin(17,0) dcl 60 set ref 226* 227 mm 000306 automatic fixed bin(17,0) dcl 60 set ref 226* 230* mod builtin function dcl 87 ref 236 mpidle 36 based fixed bin(71,0) level 3 dcl 3-15 set ref 222* 222 mpidle_since_boot 56 based fixed bin(71,0) level 3 dcl 3-15 set ref 199* 222 223* n 000271 automatic fixed bin(17,0) dcl 27 set ref 181* 187 n_users_on 74 based fixed bin(17,0) level 3 dcl 3-15 set ref 200 208* ncpu 24 based fixed bin(5,0) array level 3 packed unaligned dcl 4-3 ref 251 null builtin function dcl 87 ref 113 330 332 nunits 107(05) based fixed bin(13,0) array level 5 packed unsigned unaligned dcl 3-15 set ref 253* 286 offset 000305 automatic fixed bin(18,0) dcl 58 set ref 156* 159 160* 163 164* 167 168* 171 172* 175 176* 179 origin 76 based fixed bin(71,0) level 3 dcl 3-15 set ref 228 230* 234 pathname_ 000042 constant entry external dcl 85 ref 126 126 140 140 146 146 qh 102 based structure array level 4 dcl 3-15 set ref 278 278 279 279 279 279 qhi 000262 automatic fixed bin(17,0) dcl 27 set ref 275* 277* 279* 280 qlo 000261 automatic fixed bin(17,0) dcl 27 set ref 272* 274* 278* 280 qtr 000317 automatic fixed bin(17,0) dcl 60 set ref 227* 234* 235 236* 236 248 249 250 251 252 253 254 255 257 258 275 ring0_get_$definition 000020 constant entry external dcl 70 ref 156 160 164 168 172 176 ring0_get_$segptr 000016 constant entry external dcl 69 ref 153 shf 000316 automatic fixed bin(17,0) dcl 60 set ref 226* shutdown 106(18) based bit(1) array level 6 packed unaligned dcl 3-15 set ref 284* 288* 293 ss 000313 automatic fixed bin(17,0) dcl 60 set ref 226* starttime 110 based fixed bin(71,0) array level 5 dcl 3-15 set ref 257* statistics based structure level 1 dcl 4-3 statp 000162 automatic pointer dcl 27 set ref 113* 123* 181 189 191 193 204 205 206 208 224 226 234 249 250 251 252 253 254 257 258 330 330* sys_crash 23 based fixed bin(17,0) level 3 dcl 3-15 set ref 200* 200 sys_starts 22 based fixed bin(17,0) level 3 dcl 3-15 set ref 202* 202 sysid 12 based char(8) array level 3 in structure "statistics" dcl 4-3 in procedure "system_total" ref 206 250 sysid 104 based char(8) array level 5 in structure "use_totals" dcl 3-15 in procedure "system_total" set ref 250* tcdata_contents 30 based fixed bin(17,0) array level 3 dcl 4-3 set ref 189 tcdp 000166 automatic pointer dcl 27 set ref 153* 156* 160* 164* 168* 172* 176* tcmp 000164 automatic pointer dcl 27 set ref 189* 209 209 212 215 218 221 terminate_file_ 000044 constant entry external dcl 86 ref 330 332 time 102 based fixed bin(71,0) array level 5 in structure "use_totals" dcl 3-15 in procedure "system_total" set ref 249* 281 time 10 based fixed bin(71,0) array level 3 in structure "statistics" dcl 4-3 in procedure "system_total" set ref 205 224 226* 234 249 time 000254 automatic float bin(27) dcl 27 in procedure "system_total" set ref 215* 216 217 218* 219 220 221* 222 223 time_last_boot 60 based fixed bin(71,0) level 3 dcl 3-15 set ref 193 204* time_last_sample 62 based fixed bin(71,0) level 3 dcl 3-15 set ref 205* tot_dir 000170 automatic char(168) unaligned dcl 27 set ref 131* 137* 140* 140* 146* 146* tot_ename 000242 automatic char(32) unaligned dcl 27 set ref 131* 137* 140* 140* 146* 146* units 16 based fixed bin(17,0) array level 3 dcl 4-3 ref 253 upt 000256 automatic fixed bin(71,0) initial dcl 27 set ref 27* uptime 14 based fixed bin(71,0) array level 3 in structure "statistics" dcl 4-3 in procedure "system_total" ref 191 193 204 257 uptime 20 based fixed bin(71,0) level 3 in structure "use_totals" dcl 3-15 in procedure "system_total" set ref 210* 210 uptime_since_boot 64 based fixed bin(71,0) level 3 dcl 3-15 set ref 195* 210 211* use_totals based structure level 1 dcl 3-15 use_totals_ptr 000326 automatic pointer dcl 3-14 set ref 113* 137* 144 182 183 193 195 196 197 198 199 200 200 200 202 202 204 205 206 208 210 210 210 211 213 213 213 214 216 216 216 217 219 219 219 220 222 222 222 223 228 230 234 239 241 241 247 248 249 250 251 252 253 254 255 257 258 269 269 270 270 270 270 278 278 279 279 279 279 281 283 284 286 288 289 292 293 300 300 332 332* users 17 based fixed bin(17,0) array level 3 dcl 4-3 ref 208 var parameter fixed bin(17,0) dcl 318 set ref 314 320 320 322* 323* varn parameter char unaligned dcl 317 set ref 314 322* version 10 based char(8) level 3 dcl 3-15 ref 144 wkd 000315 automatic fixed bin(17,0) dcl 60 set ref 226* x parameter char unaligned dcl 307 set ref 304 309* yy 000310 automatic fixed bin(17,0) dcl 60 set ref 226* 230* zidle 34 based fixed bin(71,0) level 3 dcl 3-15 set ref 219* 219 zidle_since_boot 54 based fixed bin(71,0) level 3 dcl 3-15 set ref 198* 219 220* 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_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 STAT_entry_lth internal static fixed bin(17,0) initial dcl 4-25 STAT_header_lth internal static fixed bin(17,0) initial dcl 4-24 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 substr builtin function dcl 87 terminate_file_switches based structure level 1 packed unaligned dcl 2-4 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR 002550 constant label dcl 301 ref 135 141 148 244 310 check 002622 constant entry internal dcl 314 ref 269 270 278 279 clean_up 002716 constant entry internal dcl 327 ref 114 301 error 002555 constant entry internal dcl 304 ref 154 157 161 165 169 173 177 exit 002340 constant label dcl 262 ref 187 redoit 001603 constant label dcl 185 ref 260 system_total 000252 constant entry external dcl 12 NAMES DECLARED BY CONTEXT OR IMPLICATION. clock builtin function ref 191 224 hbound builtin function ref 239 241 241 269 269 270 270 270 270 278 278 279 279 279 279 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3426 3474 3211 3436 Length 4006 3211 46 275 214 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME system_total 436 external procedure is an external procedure. on unit on line 114 64 on unit error internal procedure shares stack frame of external procedure system_total. check internal procedure shares stack frame of external procedure system_total. clean_up 84 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME system_total 000100 dn system_total 000152 en system_total 000162 statp system_total 000164 tcmp system_total 000166 tcdp system_total 000170 tot_dir system_total 000242 tot_ename system_total 000252 meter_time system_total 000253 cpu_time system_total 000254 time system_total 000256 upt system_total 000260 dayx system_total 000261 qlo system_total 000262 qhi system_total 000263 last_dump system_total 000264 last_shutdown system_total 000265 fday system_total 000266 fqh system_total 000267 i system_total 000270 j system_total 000271 n system_total 000272 ap system_total 000274 al system_total 000275 ec system_total 000276 arg_count system_total 000277 TCMidle_loc system_total 000300 TCMinitialize_time_loc system_total 000301 TCMlast_time_loc system_total 000302 TCMmp_idle_loc system_total 000303 TCMprocessor_time_loc system_total 000304 TCMzero_idle_loc system_total 000305 offset system_total 000306 mm system_total 000307 dd system_total 000310 yy system_total 000311 hh system_total 000312 min system_total 000313 ss system_total 000314 absda system_total 000315 wkd system_total 000316 shf system_total 000317 qtr system_total 000326 use_totals_ptr system_total THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return fl2_to_fx2 mod_fx1 enable ext_entry int_entry divide_fx3 clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_$suppress_name cu_$arg_count cu_$arg_ptr cv_dec_check_ datebin_ datebin_$revert disk_left_ expand_pathname_$add_suffix initiate_file_ pathname_ ring0_get_$definition ring0_get_$segptr 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 000251 27 000257 101 000262 102 000272 104 000274 105 000311 107 000312 109 000315 110 000342 113 000343 114 000346 116 000370 117 000410 118 000444 120 000446 121 000501 123 000502 124 000540 126 000542 127 000611 130 000612 131 000632 132 000673 134 000675 135 000730 137 000731 138 000767 140 000771 141 001040 144 001041 146 001046 148 001121 153 001122 154 001151 156 001160 157 001222 159 001233 160 001235 161 001275 163 001304 164 001306 165 001350 167 001360 168 001362 169 001424 171 001437 172 001441 173 001504 175 001515 176 001517 177 001557 179 001570 181 001572 182 001575 183 001600 184 001602 185 001603 187 001604 189 001607 191 001613 193 001621 195 001625 196 001627 197 001630 198 001631 199 001632 200 001633 202 001636 204 001637 205 001641 206 001643 208 001647 209 001652 210 001665 211 001701 212 001704 213 001713 214 001727 215 001732 216 001741 217 001755 218 001760 219 001767 220 002003 221 002006 222 002015 223 002031 224 002034 226 002040 227 002071 228 002101 230 002104 231 002132 232 002134 234 002135 235 002146 236 002153 239 002160 241 002163 244 002216 247 002217 248 002221 249 002223 250 002240 251 002244 252 002251 253 002255 254 002262 255 002322 257 002327 258 002335 260 002337 262 002340 265 002344 267 002350 268 002351 269 002352 270 002365 271 002377 272 002407 274 002414 275 002416 277 002424 278 002426 279 002441 280 002453 281 002463 283 002475 284 002502 285 002507 286 002510 288 002515 289 002517 290 002522 292 002523 293 002526 295 002532 296 002534 300 002536 301 002550 337 002554 304 002555 309 002566 310 002621 314 002622 320 002633 322 002642 323 002711 325 002714 327 002715 330 002723 332 002756 334 003012 ----------------------------------------------------------- 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