COMPILATION LISTING OF SEGMENT quotaw Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1008.6 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 quotaw: proc; 15 16 /* RE Mullen, v2pl1, oct 1973 */ 17 /* Modified by Bernard Greenberg, 04/28/75 for New Storage System */ 18 /* Modified by Bernard Greenberg, 02/18/77 for online quota reconstructor */ 19 /* Modified by David Spector, 02/18/79 for 18 bit quota */ 20 /* Modified by Keith Loepere, 12/13/84 to count dirs pages against its own dir quota. */ 21 22 dcl (a_astep, a_astep2) ptr, 23 a_t fixed bin (1), 24 (csw, a_csw) fixed bin (2); 25 dcl a_q fixed bin (18); 26 dcl a_code fixed bin (17); 27 dcl a_uc fixed bin (18); 28 29 dcl (addr, fixed, ptr) builtin; 30 31 dcl (astpp, astep1, astep2, ptwp) ptr, 32 (uchange, tchange, qchange, quota) fixed bin (34), 33 code fixed bin, 34 (tsw, ct, nt, qt) fixed bin (1), 35 (a_osu, osu, a_odu, odu, a_nsu, nsu, a_ndu, ndu) fixed bin (34), 36 new_quota fixed bin (34), 37 pcsw bit (1), 38 a_qt bit (1) aligned, 39 pds$processid ext bit (36), 40 pds$quota_inhib ext fixed bin (17), 41 oldmask fixed bin (71), 42 privileged_mode_ut$lock_ptl ext entry (fixed bin (71), ptr), 43 privileged_mode_ut$unlock_ptl ext entry (fixed bin (71), ptr); 44 45 /* BEGIN INCLUDE FILE ...aste.incl.pl1 ... */ 1 2 1 3 /* Template for an AST entry. Length = 12 words. */ 1 4 1 5 /* Words 0 to 7, and 11 are read by PC; they are read and modified by SC. 1 6* Words 8, 9 and 10 are modified by PC; they should never be modified without locking the PC lock */ 1 7 /* Modified January 1985 by Keith Loepere for multi_class. */ 1 8 1 9 dcl astep ptr; 1 10 1 11 dcl 1 aste based (astep) aligned, 1 12 1 13 (2 fp bit (18), /* forward used list rel pointer */ 1 14 2 bp bit (18), /* backward used list rel pointer */ 1 15 1 16 2 infl bit (18), /* ptr to NEXT in list of ASTE's of my brothers */ 1 17 2 infp bit (18), /* ptr to FIRST in list of ASTE's of my children */ 1 18 1 19 2 strp bit (18), /* rel pointer to process trailer */ 1 20 2 par_astep bit (18), /* rel pointer to parent aste */ 1 21 1 22 2 uid bit (36), /* segment unique id */ 1 23 1 24 2 msl bit (9), /* maximum segment length in 1024 word units */ 1 25 2 pvtx fixed bin (8), /* physical volume table index */ 1 26 2 vtocx fixed bin (17), /* vtoc entry index */ 1 27 1 28 2 usedf bit (1), /* ast entry is being used if non-zero */ 1 29 2 init bit (1), /* used bit - insure 1 lap */ 1 30 2 gtus bit (1), /* global transparent usage switch */ 1 31 2 gtms bit (1), /* global transparent modified switch */ 1 32 2 hc bit (1), /* hard core segment */ 1 33 2 hc_sdw bit (1), /* aste with sdw for hardcore seg if non-zero */ 1 34 2 any_access_on bit (1), /* any sdw allows access, unless write_access_on */ 1 35 2 write_access_on bit (1), /* any sdw allows write access */ 1 36 2 inhibit_cache bit (1), /* flag not to reset above bits */ 1 37 2 explicit_deact_ok bit (1), /* set if user can deactivate seg */ 1 38 2 deact_error bit (1), /* set if error occurred while deactivating */ 1 39 2 hc_part bit (1), /* set if pages are in a hardcore partition */ 1 40 2 fm_damaged bit (1), /* set if filemap checksum was ever bad */ 1 41 2 multi_class bit (1), /* set if page_control should watch state changes to this segment */ 1 42 2 pad1 bit (2), /* OO */ 1 43 2 dius bit (1), /* dumper in use switch */ 1 44 2 nid bit (1), /* if on prevents addtion to incremental dump map */ 1 45 2 dmpr_pad bit (1), 1 46 2 ehs bit (1), /* entry hold switch */ 1 47 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */ 1 48 2 dirsw bit (1), /* directory switch */ 1 49 2 master_dir bit (1), /* master dir - a root for the log volume */ 1 50 2 volmap_seg bit (1), /* volmap_seg for some volume */ 1 51 2 tqsw (0:1) bit (1), /* terminal quota switch - (0) for non dir pages */ 1 52 2 pad_ic bit (10), /* Used to be aste.ic */ 1 53 1 54 2 dtu bit (36), /* date and time segment last used */ 1 55 1 56 2 dtm bit (36), /* date and time segment last modified */ 1 57 1 58 1 59 2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */ 1 60 1 61 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */ 1 62 1 63 2 csl bit (9), /* current segment length in 1024 words units */ 1 64 2 fmchanged bit (1), /* turned on by page if file map changed */ 1 65 2 fms bit (1), /* file modified switch */ 1 66 2 npfs bit (1), /* no page fault switch */ 1 67 2 gtpd bit (1), /* global transparent paging device switch */ 1 68 2 dnzp bit (1), /* don't null out if zero page switch */ 1 69 2 per_process bit (1), /* use master quota for this entry */ 1 70 2 ddnp bit (1), /* don't deposit nulled pages */ 1 71 2 pad2 bit (2), 1 72 2 records bit (9), /* number of records used by the seg in sec storage */ 1 73 2 np bit (9), /* number of pages in core */ 1 74 1 75 1 76 2 ht_fp bit (18), /* hash table forward rel pointer */ 1 77 2 fmchanged1 bit (1), /* value of "fmchanged" saved by pc$get_file_map */ 1 78 2 damaged bit (1), /* PC declared segment unusable */ 1 79 2 pack_ovfl bit (1), /* page fault on seg would cause pack overflow */ 1 80 2 synchronized bit (1), /* Data Management synchronized segment */ 1 81 2 pad3 bit (6), /* OOOOOOOOO */ 1 82 2 ptsi bit (2), /* page table size index */ 1 83 2 marker bit (6)) unaligned; /* marker to indicate last word of ASTE */ 1 84 1 85 1 86 dcl asta (0 : 8000) bit (36*12 /* sst-> sst.astsize */) based aligned; 1 87 1 88 1 89 dcl 1 aste_part aligned based (astep), 1 90 1 91 2 one bit (36) unaligned, /* fp and bp */ 1 92 2 two bit (36*11 - 8) unaligned, /* part that has to be zeroed when ASTE is freed */ 1 93 2 three bit (8) unaligned; /* ptsi and marker */ 1 94 1 95 1 96 dcl 1 seg_aste based (astep) aligned, /* Overlay because quota is only for dirs */ 1 97 2 pad1 bit (8*36), 1 98 2 usage fixed bin (35), /* page fault count: overlays quota */ 1 99 2 pad2 bit (3*36); 1 100 1 101 /* END INCLUDE FILE ... aste.incl.pl1 */ 45 46 47 declare sst$rqover fixed bin (35) external static; 48 declare sst_seg$ external static; 49 declare sstp pointer; 50 51 /* entry to changed used records for an active account */ 52 53 cu: entry (a_astep, a_uc, a_qt, a_csw, a_code); 54 csw = a_csw; /* check switch: = 1 check only, = 0 check and make change */ 55 /* 2 = make change and dont complain */ 56 pcsw = "0"b; 57 go to cum; 58 cu_for_pc: entry (a_astep, a_uc, a_qt); 59 /* Special side-door for pc$truncate */ 60 pcsw = "1"b; 61 csw = 0; /* Do it */ 62 cum: 63 64 65 astep = a_astep; /* ptr to AST entry of dir in which file resides */ 66 uchange = a_uc; /* change to used */ 67 qt = fixed (a_qt, 1); /* quota type, 0 = segs, 1 = dirs */ 68 code = 0; 69 70 sstp = addr (sst_seg$); 71 if ^pcsw then call privileged_mode_ut$lock_ptl (oldmask, ptwp); /* lock, switch_stack and mask */ 72 73 cu1: astpp = astep; 74 cu2: if csw ^= 1 75 then astpp -> aste.used (qt) = astpp -> aste.used (qt) + uchange; 76 if csw = 2 then do; 77 if uchange > 0 & astpp -> aste.used (qt) > aste.quota (qt) 78 then code = sst$rqover; 79 go to finish; 80 end; 81 if astpp -> aste.tqsw (qt) = "0"b then do; 82 astpp = ptr (sstp, astpp -> aste.par_astep); /* loop over parents */ 83 go to cu2; 84 end; 85 if pds$quota_inhib ^= 0 86 then go to finish; /* Patch for reloader, etc */ 87 if code ^= 0 88 then go to finish; /* second time thru the loop */ 89 if uchange <= 0 then go to finish; /* don't check quota when decreasing */ 90 if csw = 1 91 then tchange = uchange; /* change has not been added in */ 92 else tchange = 0; /* change has been added in */ 93 if astpp -> aste.quota (qt) < (astpp -> aste.used (qt) + tchange) 94 then do; /* change is not ok */ 95 uchange = -uchange; /* prepare to remove change */ 96 code = sst$rqover; 97 if csw = 0 98 then go to cu1; /* loop thru and undo change if any */ 99 end; 100 101 finish: if pcsw then return; 102 call privileged_mode_ut$unlock_ptl (oldmask, ptwp); /* unlock, switch back and unmask */ 103 a_code = code; 104 return; 105 106 107 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 108 109 /* entry to set a quota and change the terminal state of an active AST */ 110 111 sq: entry (a_astep, a_q, a_qt, a_t); 112 113 114 astep = a_astep; /* ptr to ast entry to set quota on */ 115 quota = a_q; /* new quota */ 116 qt = fixed (a_qt, 1); 117 tsw = a_t; /* = 1 if quota is being changed from non-term to term */ 118 /* = 0 if quota is being changed from term to non-term */ 119 sstp = addr (sst_seg$); 120 121 call privileged_mode_ut$lock_ptl (oldmask, ptwp); /* mask, switch stack and lock */ 122 123 if tsw = 1 124 then uchange = astep -> aste.used (qt); /* used records that will no longer be carried up */ 125 else uchange = -astep -> aste.used (qt); /* used records will be added sup acct */ 126 astpp = astep; 127 sq1: astpp = ptr (sstp, astpp -> aste.par_astep); /* loop to find terminal account */ 128 astpp -> aste.used (qt) = astpp -> aste.used (qt) - uchange; /* subtract used from parents */ 129 if astpp -> aste.tqsw (qt) = "0"b 130 then go to sq1; 131 132 astep -> aste.quota (qt) = quota; 133 astep -> aste.tqsw (qt) = (tsw = 1); 134 135 call privileged_mode_ut$unlock_ptl (oldmask, ptwp); /* unlock, switch back and unmask */ 136 137 return; 138 139 /* * * * * * * * * * * * * * * * * * */ 140 141 /* entry to move quota from parent ast (ast1) to inferior ast (ast2) */ 142 143 mq: entry (a_astep, a_astep2, a_q, a_qt, a_code); 144 145 146 astep1 = a_astep; /* ptr to parent ast entry */ 147 astep2 = a_astep2; /* ptr to target ast entry */ 148 qchange = a_q; /* amount of quota to be moved from ast1 to ast2 */ 149 qt = fixed (a_qt, 1); 150 code = 0; 151 sstp = addr (sst_seg$); 152 153 call privileged_mode_ut$lock_ptl (oldmask, ptwp); /* mask, switch stack and lock */ 154 155 ct = fixed (astep2 -> aste.tqsw (qt), 1); /* ct = 1 if ast2 currently has term quota */ 156 if astep2 -> aste.quota (qt) + qchange ^= 0 157 then do; /* ast2 will have terminal quota */ 158 nt = 1; 159 if astep2 -> aste.quota (qt) + qchange < astep2 -> aste.used (qt) 160 then go to error; 161 /* new quota must cover used */ 162 if ct = 0 163 then uchange = -astep2 -> aste.used (qt); /* subtract used from current terminal quota */ 164 else uchange = 0; /* no change from terminal state */ 165 end; 166 else do; /* ast2 will not have terminal quota */ 167 nt = 0; 168 if ct = 1 169 then uchange = astep2 -> aste.used (qt); /* add used into new terminal quota */ 170 else uchange = 0; 171 end; 172 new_quota = astep1 -> aste.quota (qt) - qchange; 173 if new_quota <= 0 then go to error; /* Insure no zero terminal quota */ 174 if new_quota < astep1 -> aste.used (qt)+uchange then go to error; 175 astep1 -> aste.quota (qt) = new_quota; /* Change quota */ 176 astep1 -> aste.used (qt) = astep1 -> aste.used (qt)+uchange; /* change parent used */ 177 astep2 -> aste.quota (qt) = astep2 -> aste.quota (qt)+qchange; /* change target quota */ 178 astep2 -> aste.tqsw (qt) = (nt = 1); 179 180 mqfinish: 181 call privileged_mode_ut$unlock_ptl (oldmask, ptwp); /* unlock, switch back and unmask */ 182 183 a_code = code; 184 return; 185 186 error: code = sst$rqover; 187 go to mqfinish; 188 189 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 190 191 rvq: entry (a_astep, a_osu, a_odu, a_nsu, a_ndu); 192 193 /* Entry to determine active inferior and current active quota totals for revalidator */ 194 195 astep = a_astep; 196 197 sstp = addr (sst_seg$); 198 199 call privileged_mode_ut$lock_ptl (oldmask, ptwp); /* mask, lock */ 200 201 osu = aste.used (0); 202 odu = aste.used (1); /* Copy current, incorrect totals */ 203 nsu = 0; /* Zero totals to be accumulated */ 204 ndu = fixed (aste.records, 9); /* dirs records count towards itself */ 205 206 do astep = ptr (sstp, aste.infp) repeat ptr (sstp, aste.infl) while (astep ^= sstp); 207 /* Map over inferiors */ 208 if aste.dirsw then do; 209 if ^aste.tqsw (0) then nsu = nsu + aste.used (0); /* Add inferior dir totals */ 210 if ^aste.tqsw (1) then ndu = ndu + aste.used (1); /* records of dir already counted in quota used */ 211 end; 212 else nsu = nsu + fixed (aste.records, 9); /* Account to right place */ 213 end; 214 215 call privileged_mode_ut$unlock_ptl (oldmask, ptwp); 216 217 a_osu = osu; /* Copy out answers */ 218 a_odu = odu; 219 a_nsu = nsu; 220 a_ndu = ndu; 221 222 return; 223 end quotaw; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0804.7 quotaw.pl1 >spec>install>1111>quotaw.pl1 45 1 01/30/85 1523.9 aste.incl.pl1 >ldd>include>aste.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. a_astep parameter pointer dcl 22 ref 53 58 62 111 114 143 146 191 195 a_astep2 parameter pointer dcl 22 ref 143 147 a_code parameter fixed bin(17,0) dcl 26 set ref 53 103* 143 183* a_csw parameter fixed bin(2,0) dcl 22 ref 53 54 a_ndu parameter fixed bin(34,0) dcl 31 set ref 191 220* a_nsu parameter fixed bin(34,0) dcl 31 set ref 191 219* a_odu parameter fixed bin(34,0) dcl 31 set ref 191 218* a_osu parameter fixed bin(34,0) dcl 31 set ref 191 217* a_q parameter fixed bin(18,0) dcl 25 ref 111 115 143 148 a_qt parameter bit(1) dcl 31 ref 53 58 67 111 116 143 149 a_t parameter fixed bin(1,0) dcl 22 ref 111 117 a_uc parameter fixed bin(18,0) dcl 27 ref 53 58 66 addr builtin function dcl 29 ref 70 119 151 197 aste based structure level 1 dcl 1-11 astep 000134 automatic pointer dcl 1-9 set ref 62* 73 77 114* 123 125 126 132 133 195* 201 202 204 206* 206 206* 208 209 209 210 210 212* 213 astep1 000104 automatic pointer dcl 31 set ref 146* 172 174 175 176 176 astep2 000106 automatic pointer dcl 31 set ref 147* 155 156 159 159 162 168 177 177 178 astpp 000102 automatic pointer dcl 31 set ref 73* 74 74 77 81 82* 82 93 93 126* 127* 127 128 128 129 code 000116 automatic fixed bin(17,0) dcl 31 set ref 68* 77* 87 96* 103 150* 183 186* csw 000100 automatic fixed bin(2,0) dcl 22 set ref 54* 61* 74 76 90 97 ct 000120 automatic fixed bin(1,0) dcl 31 set ref 155* 162 168 dirsw 5(21) based bit(1) level 2 packed packed unaligned dcl 1-11 ref 208 fixed builtin function dcl 29 ref 67 116 149 155 204 212 infl 1 based bit(18) level 2 packed packed unaligned dcl 1-11 ref 213 infp 1(18) based bit(18) level 2 packed packed unaligned dcl 1-11 ref 206 ndu 000126 automatic fixed bin(34,0) dcl 31 set ref 204* 210* 210 220 new_quota 000127 automatic fixed bin(34,0) dcl 31 set ref 172* 173 174 175 nsu 000125 automatic fixed bin(34,0) dcl 31 set ref 203* 209* 209 212* 212 219 nt 000121 automatic fixed bin(1,0) dcl 31 set ref 158* 167* 178 odu 000124 automatic fixed bin(34,0) dcl 31 set ref 202* 218 oldmask 000132 automatic fixed bin(71,0) dcl 31 set ref 71* 102* 121* 135* 153* 180* 199* 215* osu 000123 automatic fixed bin(34,0) dcl 31 set ref 201* 217 par_astep 2(18) based bit(18) level 2 packed packed unaligned dcl 1-11 ref 82 127 pcsw 000130 automatic bit(1) packed unaligned dcl 31 set ref 56* 60* 71 101 pds$quota_inhib 000010 external static fixed bin(17,0) dcl 31 ref 85 privileged_mode_ut$lock_ptl 000012 constant entry external dcl 31 ref 71 121 153 199 privileged_mode_ut$unlock_ptl 000014 constant entry external dcl 31 ref 102 135 180 215 ptr builtin function dcl 29 ref 82 127 206 213 ptwp 000110 automatic pointer dcl 31 set ref 71* 102* 121* 135* 153* 180* 199* 215* qchange 000114 automatic fixed bin(34,0) dcl 31 set ref 148* 156 159 172 177 qt 000122 automatic fixed bin(1,0) dcl 31 set ref 67* 74 74 77 77 81 93 93 116* 123 125 128 128 129 132 133 149* 155 156 159 159 162 168 172 174 175 176 176 177 177 178 quota 000115 automatic fixed bin(34,0) dcl 31 in procedure "quotaw" set ref 115* 132 quota 10 based fixed bin(18,0) array level 2 in structure "aste" packed packed unsigned unaligned dcl 1-11 in procedure "quotaw" set ref 77 93 132* 156 159 172 175* 177* 177 records 12(18) based bit(9) level 2 packed packed unaligned dcl 1-11 ref 204 212 sst$rqover 000016 external static fixed bin(35,0) dcl 47 ref 77 96 186 sst_seg$ 000020 external static fixed bin(17,0) dcl 48 set ref 70 119 151 197 sstp 000136 automatic pointer dcl 49 set ref 70* 82 119* 127 151* 197* 206 206 213 tchange 000113 automatic fixed bin(34,0) dcl 31 set ref 90* 92* 93 tqsw 5(24) based bit(1) array level 2 packed packed unaligned dcl 1-11 set ref 81 129 133* 155 178* 209 210 tsw 000117 automatic fixed bin(1,0) dcl 31 set ref 117* 123 133 uchange 000112 automatic fixed bin(34,0) dcl 31 set ref 66* 74 77 89 90 95* 95 123* 125* 128 162* 164* 168* 170* 174 176 used 11 based fixed bin(18,0) array level 2 packed packed unsigned unaligned dcl 1-11 set ref 74* 74 77 93 123 125 128* 128 159 162 168 174 176* 176 201 202 209 210 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. asta based bit(432) array dcl 1-86 aste_part based structure level 1 dcl 1-89 pds$processid external static bit(36) packed unaligned dcl 31 seg_aste based structure level 1 dcl 1-96 NAMES DECLARED BY EXPLICIT CONTEXT. cu 000023 constant entry external dcl 53 cu1 000106 constant label dcl 73 ref 97 cu2 000110 constant label dcl 74 ref 83 cu_for_pc 000044 constant entry external dcl 58 cum 000057 constant label dcl 62 ref 57 error 000700 constant label dcl 186 ref 159 173 174 finish 000247 constant label dcl 101 ref 79 85 87 89 mq 000452 constant entry external dcl 143 mqfinish 000663 constant label dcl 180 ref 187 quotaw 000010 constant entry external dcl 14 rvq 000711 constant entry external dcl 191 sq 000273 constant entry external dcl 111 sq1 000364 constant label dcl 127 ref 129 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1154 1176 1040 1164 Length 1376 1040 22 164 114 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME quotaw 108 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME quotaw 000100 csw quotaw 000102 astpp quotaw 000104 astep1 quotaw 000106 astep2 quotaw 000110 ptwp quotaw 000112 uchange quotaw 000113 tchange quotaw 000114 qchange quotaw 000115 quota quotaw 000116 code quotaw 000117 tsw quotaw 000120 ct quotaw 000121 nt quotaw 000122 qt quotaw 000123 osu quotaw 000124 odu quotaw 000125 nsu quotaw 000126 ndu quotaw 000127 new_quota quotaw 000130 pcsw quotaw 000132 oldmask quotaw 000134 astep quotaw 000136 sstp quotaw THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. privileged_mode_ut$lock_ptl privileged_mode_ut$unlock_ptl THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. pds$quota_inhib sst$rqover sst_seg$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000007 53 000015 54 000033 56 000036 57 000037 58 000040 60 000054 61 000056 62 000057 66 000063 67 000065 68 000070 70 000071 71 000074 73 000106 74 000110 76 000132 77 000135 79 000165 81 000166 82 000174 83 000201 85 000202 87 000205 89 000207 90 000211 92 000217 93 000220 95 000241 96 000243 97 000245 101 000247 102 000251 103 000262 104 000265 111 000266 114 000305 115 000311 116 000313 117 000316 119 000320 121 000323 123 000333 125 000350 126 000363 127 000364 128 000372 129 000410 132 000415 133 000424 135 000433 137 000444 143 000445 146 000464 147 000470 148 000473 149 000475 150 000500 151 000501 153 000504 155 000514 156 000524 158 000537 159 000541 162 000551 164 000557 165 000560 167 000561 168 000562 170 000575 172 000576 173 000607 174 000610 175 000620 176 000626 177 000641 178 000654 180 000663 183 000674 184 000677 186 000700 187 000703 191 000704 195 000716 197 000722 199 000725 201 000735 202 000741 203 000744 204 000745 206 000751 208 000762 209 000766 210 000774 211 001002 212 001003 213 001007 215 001015 217 001026 218 001031 219 001033 220 001035 222 001037 ----------------------------------------------------------- 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