COMPILATION LISTING OF SEGMENT gcos_library_summary Compiled by: Multics PL/I Compiler, Release 28b, of April 11, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 09/09/83 1058.9 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 gcos_library_summary: gcls: summary: proc; 7 8 /* This procedure prints a summary of the contents of a GCOS tape-format 9* system-loadable file, or a simulator format software library, or 10* a gcos format system-loadable file. 11* 12* USAGE: gcls pathname {-control_args} 13* -control_args are: -brief | -preface | -no_catalog | -gcos 14* 15* If no control arguments are given, the file is assumed to begin with a 16* catalog (containing the name and offset of each module in the file), and the 17* catalog is printed. If -preface is given, a catalog is assumed to be present, 18* and it is skipped over, and the preface record at the beginning of each 19* module is printed. If -no_catalog is given, the file is assumed to begin 20* with the first preface record, and the preface records are printed. If -brief 21* is given, only the names of the modules are printed, whether catalog or 22* preface record printing was specified. -gcos arg will cause the pathname 23* to be interpreted as a Gcos format file and its contents will be listed. 24* 25* Written by Dick Snyder .... 1971 26* Modified by T. Casey JUNE 1974, AUGUST 1974 27* Modified: Ron Barstad 02/04/83 To work on Gcos format files with -gcos arg 28* Add version indicator, start with 2.0 29* 30* */ 31 32 33 34 /* D E C L A R A T I O N S */ 35 36 37 /* External Entries */ 38 39 40 dcl ios_$detach ext entry (char (*), char (*), char (*), bit (72) aligned); 41 dcl ios_$read ext entry (char (*), pointer, fixed bin(24), fixed bin(24), fixed bin(24), bit (72) aligned); 42 dcl (ioa_, ioa_$nnl, com_err_) ext entry options (variable); 43 dcl ios_$attach ext entry (char (*), char (*), char (*), char (*), bit (72) aligned); 44 dcl ios_$setsize ext entry (char (*), fixed bin(24), bit (72) aligned); 45 dcl ios_$seek ext entry (char (*), char (*), char (*), fixed bin(24), bit (72) aligned); 46 dcl gcos_cv_gebcd_ascii_ ext entry (pointer, fixed bin(24), pointer, fixed bin(24)); 47 dcl cu_$arg_count ext entry (fixed bin); 48 dcl cu_$arg_ptr ext entry (fixed bin(24), ptr, fixed bin(24), fixed bin(35)); 49 50 /* Work Variables */ 51 52 53 dcl nargs fixed bin(17); 54 dcl argp ptr; 55 dcl argl fixed bin(24); 56 dcl arg char (argl) based (argp); 57 dcl argno fixed bin(24); 58 59 dcl cleanup condition; 60 61 dcl err_msg char (200) varying; 62 63 dcl (i1, i2, i3, i4) fixed bin(24); 64 dcl (i, j, k, word_no) fixed bin(24); /* temps */ 65 dcl doff fixed bin(24)init (0); 66 dcl string char (6); 67 dcl word_one fixed bin (35); /* first word of input file */ 68 69 dcl st bit (72) aligned ; /* ios status */ 70 dcl seek_save fixed bin(24); /* holds seek offset */ 71 72 dcl 1 status aligned based (addr (st)), /* overlay for ios_ status */ 73 2 code fixed bin (35), /* standard error code */ 74 2 fill bit (9) unaligned, 75 2 eof bit (1) unaligned; /* eof bit */ 76 77 dcl 1 preface aligned based (prefp), /* model of preface record */ 78 2 data_check fixed bin(24), /* checksum of following data words */ 79 2 rel_check fixed bin(24), /* checksum of following reloc. words */ 80 2 rel_abs fixed bin(24), /* 0=absolute|^0=relocatable */ 81 2 name bit (36) unaligned, /* name of pgm */ 82 2 entry bit (18) unaligned, /* entry address */ 83 2 origin bit (18) unaligned, /* origin */ 84 2 reloc_words fixed bin (17) unaligned, /* no. of relocation words */ 85 2 data_words fixed bin (17) unaligned, /* no. of data words */ 86 2 dcws (ndcw) bit (36) unaligned; /* dcw(s) to load following data records */ 87 dcl prefp pointer; 88 dcl ndcw fixed bin(24); 89 dcl 1 catalog based (prefp), 90 2 fill fixed bin(24), 91 2 no_ent fixed bin(24), 92 2 elements (499), 93 3 name bit (36) aligned, 94 3 address fixed bin(24); 95 96 dcl me char (20) init ("gcos_library_summary"); 97 dcl version char (4) init ("2.1"); 98 99 dcl (briefsw /* print names only */ 100 , prefsw /* skip over catalog and print preface records */ 101 , nocatsw /* no catalog - print preface records */ 102 , usage_sw /* print usage message if error on command line */ 103 ) bit (1) aligned init ("0"b); 104 105 dcl pathname char (168) init (""); 106 107 dcl (error_table_$badopt, error_table_$noarg) ext fixed bin (35); 108 109 dcl (addr, divide, fixed, mod, substr) builtin; 110 111 dcl 1 gcatlog aligned based (prefp), 112 2 gav fixed bin (17) unal, 113 2 gcat fixed bin (17) unal, 114 2 g2fil bit(36) unal, 115 2 gentry (15) unal, 116 3 gname bit(36), 117 3 gfill (3) bit (36), 118 2 g3fill bit (36) unal; 119 dcl gcosw bit (1) init ("0"b); 120 /* NOTE: Declaration of buffer should be last declaration in case */ 121 /* buffer should overflow. */ 122 123 dcl buffer bit (131400); /* preface and relocation blk buffer */ 124 125 /* P R O C E D U R E */ 126 127 call ioa_ ("^a (^a)",me,version); 128 129 on condition (cleanup) call cleanup_proc; 130 131 call cu_$arg_count (nargs); 132 133 /* IF NO ARGS, PRINT USAGE MESSAGE AND QUIT */ 134 135 if nargs = 0 then do; 136 print_usage: call ioa_ ("Usage: gcls PATH {-control_args}"); 137 return; 138 end; 139 140 arg_loop: do argno = 1 to nargs; 141 142 call cu_$arg_ptr (argno, argp, argl, code); 143 144 if code ^= 0 then do; 145 err_msg = arg; 146 call_com_err: call com_err_ (code, me, err_msg); 147 call cleanup_proc; 148 if usage_sw then goto print_usage; 149 return; 150 end; 151 152 if substr (arg, 1, 1) ^= "-" then do; 153 if pathname ^= "" then do; 154 err_msg = "unidentified non-control argument: " || arg; 155 goto call_com_err; 156 end; 157 158 err_msg, 159 pathname = arg; /* don't bother with expand_path_ since file dim does */ 160 end; 161 162 else if arg = "-bf" | arg = "-brief" then 163 briefsw = "1"b; 164 165 else if arg = "-preface" then 166 prefsw = "1"b; 167 168 else if arg = "-no_catalog" then /* ignored */ 169 nocatsw = "1"b; 170 171 else if arg = "-gc" | arg = "-gcos" then do; 172 gcosw = "1"b; 173 end; 174 else do; 175 code = error_table_$badopt; 176 err_msg = arg; 177 goto call_com_err; 178 end; 179 180 end arg_loop; 181 182 if pathname = "" then do; /* complain if pathname not given */ 183 code = error_table_$noarg; 184 err_msg = ""; 185 usage_sw = "1"b; /* print usage message after complaining */ 186 goto call_com_err; 187 end; 188 189 prefp = addr (buffer); 190 call ios_$attach ("gcls_input", "file_", pathname, "r", st); 191 if status.code ^= 0 then do; 192 err_msg = err_msg || " from ios_$attach"; 193 goto call_com_err; 194 end; 195 196 call ios_$setsize ("gcls_input", 36, st); 197 if status.code ^= 0 then do; 198 err_msg = err_msg || " from ios_$setsize"; 199 goto call_com_err; 200 end; 201 202 203 /* gcos ** file */ 204 if gcosw then do; 205 call ioa_ ("Gcos ** file catalog list for ^a", pathname); 206 get_nextg: call ios_$read ("gcls_input", prefp, 0, 64, j, st); 207 if status.code ^= 0 then do; 208 err_msg = err_msg || " from GCOS ios_$read"; 209 go to call_com_err; 210 end; 211 do j = 1 to 15; 212 if gcatlog.gentry (j).gname ^= "000000000000000000"b then do; 213 call gcos_cv_gebcd_ascii_ (addr (gcatlog.gentry (j).gname), 6, addr (string), i); 214 call ioa_ ("^a", string); 215 end; 216 end; 217 if gcatlog.gcat = 0 then do; 218 call ioa_ ("^/end of catalog."); 219 call cleanup_proc; 220 return; 221 end; 222 call ios_$seek ("gcls_input", "read", "first", gcatlog.gcat * 64, st); 223 if status.code ^= 0 then do; 224 err_msg = err_msg || " from GCOS ios_$seek"; 225 go to call_com_err; 226 end; 227 go to get_nextg; 228 end; 229 230 /* determine if the input file has a catalog: 231* if the first word of the file =0 then this is a simulator file with a catalog 232* if the first word not=0 then this is a native GCOS file without a catalog 233**/ 234 call ios_$seek ("gcls_input", "read", "first", 0, st); 235 if code ^= 0 then do; 236 err_msg = "from ios_$seek read first word: ^a"; 237 goto call_com_err; 238 end; 239 240 call ios_$read ("gcls_input", addr(word_one), 0, 1, j, st); 241 if code ^= 0 then do; 242 err_msg = "from ios_$read of word one: ^a"; 243 goto call_com_err; 244 end; 245 246 if word_one = 0 247 then nocatsw = "0"b; /* has catalog */ 248 else nocatsw = "1"b; 249 250 call ios_$seek ("gcls_input", "read", "first", 0, st); 251 if code ^= 0 then do; 252 err_msg = "from ios_$seek read first word: ^a"; 253 goto call_com_err; 254 end; 255 256 /* not gcos ** file */ 257 if ^nocatsw then do; /* if file has a catalog (the default) */ 258 if ^prefsw then do; /* and we were not requested to print preface records */ 259 /* then print the catalog */ 260 261 262 call ios_$read ("gcls_input", prefp, 0, 1000, j, st); /* read catalog */ 263 if status.code ^= 0 then do; 264 err_msg = err_msg || " from ios_$read"; 265 goto call_com_err; 266 end; 267 268 do j = 1 to catalog.no_ent; 269 call gcos_cv_gebcd_ascii_ (addr (catalog.elements (j).name), 6, addr (string), i); 270 /* get name in ascii */ 271 if briefsw 272 then call ioa_ ("^a", string); /* print name only, if -brief given */ 273 else 274 call ioa_ ("^a^-^o", string, catalog.elements (j).address); /* else print name and offset */ 275 end; 276 call ioa_ ("^/end of catalog"); 277 278 call cleanup_proc; 279 return; 280 end; /* END OF "PRINT CATALOG" DO GROUP */ 281 282 else /* we want to skip over the catalog */ 283 doff = 1000; /* which is exactly 1000 words long */ 284 285 end; /* END OF "THERE IS A CATALOG" DO GROUP */ 286 287 else doff = 0; /* no catalog to skip over */ 288 289 k = 0; /* offset of first preface record (relative to doff) */ 290 291 seek_preface: 292 call ios_$seek ("gcls_input", "read", "first", k+doff, st); /* seek to start of next preface record */ 293 if status.code ^= 0 then do; /* error ? */ 294 err_msg = err_msg || " from ios_$seek"; 295 goto call_com_err; 296 end; 297 298 if status.eof then do; 299 call ioa_ ("^/end of file"); 300 call cleanup_proc; 301 return; 302 end; 303 304 read: call ios_$read ("gcls_input", prefp, 0, 3650, j, st); /* read preface record */ 305 if status.code ^= 0 then do; 306 err_msg = err_msg || " from ios_$read"; 307 goto call_com_err; 308 end; 309 310 /* Count DCWs, by looking for one with action code = "000"b */ 311 312 do ndcw = 1 to 58 /* there may be up to 58 of them in a block */ 313 while (substr (preface.dcws (ndcw), 22, 3) ^= "000"b); 314 end; 315 316 call gcos_cv_gebcd_ascii_ (addr (preface.name), 6, addr (string), i); /* convert prog name to ascii */ 317 if briefsw then do; /* if -brief given, print name only - 318* and not rest of contents of preface record */ 319 call ioa_ ("^a", string); 320 goto next_preface; 321 end; 322 call ioa_ ("preface of ^a", string); 323 i1 = fixed (preface.entry, 18); 324 i2 = fixed (preface.origin, 18); /* convert interesting data */ 325 i3 = preface.reloc_words; 326 i4 = preface.data_words; 327 328 call ioa_ ("entry ^w, origin ^w, reloc_words ^w, data_words, ^w", i1, i2, i3, i4); 329 330 do i = 1 to ndcw; /* loop to print dcws */ 331 332 i1 = fixed (preface.dcws (i)); 333 call ioa_$nnl ("^w ", i1); 334 end; 335 336 call ioa_ ("^2/"); 337 338 339 /* get offset of next preface record and seek to it */ 340 341 next_preface: 342 343 k = k+6+ndcw+preface.data_words+preface.reloc_words; /* offset of next preface block */ 344 345 goto seek_preface; /* go seek to it */ 346 347 cleanup_proc: proc; 348 349 call ios_$detach ("gcls_input", "", "", st); 350 return; 351 end cleanup_proc; 352 353 end gcos_library_summary; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/09/83 1006.5 gcos_library_summary.pl1 >spec>on>09/07/83-gcos>gcos_library_summary.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. addr builtin function dcl 109 ref 142 144 146 175 183 189 191 197 207 213 213 213 213 223 235 240 240 241 251 263 269 269 269 269 293 298 305 316 316 316 316 address 3 based fixed bin(24,0) array level 3 dcl 89 set ref 273* arg based char unaligned dcl 56 ref 145 152 154 158 162 162 165 168 171 171 176 argl 000104 automatic fixed bin(24,0) dcl 55 set ref 142* 145 152 154 158 162 162 165 168 171 171 176 argno 000105 automatic fixed bin(24,0) dcl 57 set ref 140* 142* argp 000102 automatic pointer dcl 54 set ref 142* 145 152 154 158 162 162 165 168 171 171 176 briefsw 000227 automatic bit(1) initial dcl 99 set ref 99* 162* 271 317 buffer 000306 automatic bit(131400) unaligned dcl 123 set ref 189 catalog based structure level 1 unaligned dcl 89 cleanup 000106 stack reference condition dcl 59 ref 129 code based fixed bin(35,0) level 2 dcl 72 set ref 142* 144 146* 175* 183* 191 197 207 223 235 241 251 263 293 305 com_err_ 000020 constant entry external dcl 42 ref 146 cu_$arg_count 000032 constant entry external dcl 47 ref 131 cu_$arg_ptr 000034 constant entry external dcl 48 ref 142 data_words 5(18) based fixed bin(17,0) level 2 packed unaligned dcl 77 ref 326 341 dcws 6 based bit(36) array level 2 packed unaligned dcl 77 ref 312 332 doff 000206 automatic fixed bin(24,0) initial dcl 65 set ref 65* 282* 287* 291 elements 2 based structure array level 2 unaligned dcl 89 entry 4 based bit(18) level 2 packed unaligned dcl 77 ref 323 eof 1(09) based bit(1) level 2 packed unaligned dcl 72 ref 298 err_msg 000114 automatic varying char(200) dcl 61 set ref 145* 146* 154* 158* 176* 184* 192* 192 198* 198 208* 208 224* 224 236* 242* 252* 264* 264 294* 294 306* 306 error_table_$badopt 000036 external static fixed bin(35,0) dcl 107 ref 175 error_table_$noarg 000040 external static fixed bin(35,0) dcl 107 ref 183 fixed builtin function dcl 109 ref 323 324 332 gcat 0(18) based fixed bin(17,0) level 2 packed unaligned dcl 111 ref 217 222 gcatlog based structure level 1 dcl 111 gcos_cv_gebcd_ascii_ 000030 constant entry external dcl 46 ref 213 269 316 gcosw 000305 automatic bit(1) initial unaligned dcl 119 set ref 119* 172* 204 gentry 2 based structure array level 2 packed unaligned dcl 111 gname 2 based bit(36) array level 3 packed unaligned dcl 111 set ref 212 213 213 i 000203 automatic fixed bin(24,0) dcl 64 set ref 213* 269* 316* 330* 332* i1 000177 automatic fixed bin(24,0) dcl 63 set ref 323* 328* 332* 333* i2 000200 automatic fixed bin(24,0) dcl 63 set ref 324* 328* i3 000201 automatic fixed bin(24,0) dcl 63 set ref 325* 328* i4 000202 automatic fixed bin(24,0) dcl 63 set ref 326* 328* ioa_ 000014 constant entry external dcl 42 ref 127 136 205 214 218 271 273 276 299 319 322 328 336 ioa_$nnl 000016 constant entry external dcl 42 ref 333 ios_$attach 000022 constant entry external dcl 43 ref 190 ios_$detach 000010 constant entry external dcl 40 ref 349 ios_$read 000012 constant entry external dcl 41 ref 206 240 262 304 ios_$seek 000026 constant entry external dcl 45 ref 222 234 250 291 ios_$setsize 000024 constant entry external dcl 44 ref 196 j 000204 automatic fixed bin(24,0) dcl 64 set ref 206* 211* 212 213 213* 240* 262* 268* 269 269 273* 304* k 000205 automatic fixed bin(24,0) dcl 64 set ref 289* 291 341* 341 me 000221 automatic char(20) initial unaligned dcl 96 set ref 96* 127* 146* name 2 based bit(36) array level 3 in structure "catalog" dcl 89 in procedure "summary" set ref 269 269 name 3 based bit(36) level 2 in structure "preface" packed unaligned dcl 77 in procedure "summary" set ref 316 316 nargs 000100 automatic fixed bin(17,0) dcl 53 set ref 131* 135 140 ndcw 000220 automatic fixed bin(24,0) dcl 88 set ref 312* 312* 330 341 no_ent 1 based fixed bin(24,0) level 2 dcl 89 ref 268 nocatsw 000231 automatic bit(1) initial dcl 99 set ref 99* 168* 246* 248* 257 origin 4(18) based bit(18) level 2 packed unaligned dcl 77 ref 324 pathname 000233 automatic char(168) initial unaligned dcl 105 set ref 105* 153 158* 182 190* 205* preface based structure level 1 dcl 77 prefp 000216 automatic pointer dcl 87 set ref 189* 206* 212 213 213 217 222 262* 268 269 269 273 304* 312 316 316 323 324 325 326 332 341 341 prefsw 000230 automatic bit(1) initial dcl 99 set ref 99* 165* 258 reloc_words 5 based fixed bin(17,0) level 2 packed unaligned dcl 77 ref 325 341 st 000214 automatic bit(72) dcl 69 set ref 142 144 146 175 183 190* 191 196* 197 206* 207 222* 223 234* 235 240* 241 250* 251 262* 263 291* 293 298 304* 305 349* status based structure level 1 dcl 72 string 000210 automatic char(6) unaligned dcl 66 set ref 213 213 214* 269 269 271* 273* 316 316 319* 322* substr builtin function dcl 109 ref 152 312 usage_sw 000232 automatic bit(1) initial dcl 99 set ref 99* 148 185* version 000226 automatic char(4) initial unaligned dcl 97 set ref 97* 127* word_one 000212 automatic fixed bin(35,0) dcl 67 set ref 240 240 246 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. divide builtin function dcl 109 mod builtin function dcl 109 seek_save automatic fixed bin(24,0) dcl 70 word_no automatic fixed bin(24,0) dcl 64 NAMES DECLARED BY EXPLICIT CONTEXT. arg_loop 000374 constant label dcl 140 call_com_err 000435 constant label dcl 146 ref 155 177 186 193 199 209 225 237 243 253 265 295 307 cleanup_proc 002335 constant entry internal dcl 347 ref 129 147 219 278 300 gcls 000263 constant entry external dcl 6 gcos_library_summary 000273 constant entry external dcl 6 get_nextg 001007 constant label dcl 206 ref 227 next_preface 002315 constant label dcl 341 ref 320 print_usage 000357 constant label dcl 136 ref 148 read 002014 constant label dcl 304 seek_preface 001704 constant label dcl 291 ref 345 summary 000253 constant entry external dcl 6 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2570 2632 2374 2600 Length 3044 2374 42 175 173 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME summary 3927 external procedure is an external procedure. on unit on line 129 64 on unit cleanup_proc 88 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME summary 000100 nargs summary 000102 argp summary 000104 argl summary 000105 argno summary 000114 err_msg summary 000177 i1 summary 000200 i2 summary 000201 i3 summary 000202 i4 summary 000203 i summary 000204 j summary 000205 k summary 000206 doff summary 000210 string summary 000212 word_one summary 000214 st summary 000216 prefp summary 000220 ndcw summary 000221 me summary 000226 version summary 000227 briefsw summary 000230 prefsw summary 000231 nocatsw summary 000232 usage_sw summary 000233 pathname summary 000305 gcosw summary 000306 buffer summary THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_count cu_$arg_ptr gcos_cv_gebcd_ascii_ ioa_ ioa_$nnl ios_$attach ios_$detach ios_$read ios_$seek ios_$setsize THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$noarg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 65 000232 96 000233 97 000236 99 000240 105 000244 119 000247 6 000252 127 000301 129 000324 131 000346 135 000355 136 000357 137 000373 140 000374 142 000403 144 000420 145 000424 146 000435 147 000456 148 000462 149 000464 152 000465 153 000472 154 000476 155 000517 158 000521 160 000541 162 000543 165 000557 168 000566 171 000575 172 000605 173 000607 175 000610 176 000613 177 000623 180 000624 182 000626 183 000632 184 000635 185 000636 186 000640 189 000641 190 000643 191 000704 192 000706 193 000720 196 000721 197 000750 198 000752 199 000764 204 000765 205 000767 206 001007 207 001051 208 001053 209 001065 211 001066 212 001073 213 001077 214 001122 216 001141 217 001143 218 001150 219 001167 220 001173 222 001174 223 001240 224 001242 225 001254 227 001255 234 001256 235 001320 236 001322 237 001327 240 001330 241 001374 242 001376 243 001403 246 001404 248 001410 250 001412 251 001454 252 001456 253 001463 257 001464 258 001466 262 001470 263 001532 264 001534 265 001546 268 001547 269 001557 271 001603 273 001625 275 001653 276 001655 278 001672 279 001676 282 001677 285 001701 287 001702 289 001703 291 001704 293 001750 294 001754 295 001766 298 001767 299 001772 300 002007 301 002013 304 002014 305 002056 306 002060 307 002072 312 002073 314 002105 316 002107 317 002133 319 002135 320 002154 322 002155 323 002176 324 002202 325 002205 326 002210 328 002214 330 002245 332 002255 333 002261 334 002300 336 002302 341 002315 345 002333 347 002334 349 002342 350 002372 ----------------------------------------------------------- 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