COMPILATION LISTING OF SEGMENT gfms_header_label_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 12/10/84 1143.6 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 gfms_header_label_: proc; 7 8 /* Process the tape header label. 9* 10* Author: Dave Ward 10/17/80 11* Change: Dave Ward 01/27/81 signal gfms_return if attach fails. 12* Change: Dave Ward 02/23/82 completed tape density algorithm (modeled after read_tape_and_query) 13* Change: Ron Barstad 84-11-21 fixed subsequent tape density checking and reel sequence check 14**/ 15 close, detach = "0"b; /* Assume failure. */ 16 call attach; 17 detach = "1"b; /* detach allowed, attach completed. */ 18 call open; 19 close = "1"b; /* close allowed, open completed. */ 20 call get_density (); 21 call iox_$read_record ( 22 cbp /* (input) pointer to control block. */ 23 , addr (tape_label) /* (input) record buffer. */ 24 , size (tape_label)*4 /* (input) buffer length in bytes. */ 25 , nbr /* (output) number of bytes read. */ 26 , code /* (output) I/O system status. */ 27 ); 28 if code ^= 0 then do; 29 call com_err_ ( 30 code 31 , "gfms_header_label_" 32 , "Attempting to read tape header label file." 33 ||"^/Tape status ^4.3b" 34 ||"^/buffer length ^i (bytes)." 35 ||"^/bytes read ^i." 36 ||"^/attach description ""^a""" 37 , gfms_tape_status_ (cbp) 38 , size (tape_label)*4 39 , nbr 40 , attach_description 41 ); 42 fail: ; 43 call gfms_dump_rec_ ( 44 addr (tape_label) 45 , divide (nbr+3, 4, 17) 46 ); 47 signal cond (gfms_fail); 48 end; 49 50 if label_identifier ^= GE__600_BTL_ then do; 51 call com_err_ ( 52 0 53 , "gfms_header_label_" 54 , "Label identifier ""^12a"" not ""GE 600 BTL """ 55 , gfms_ascii_ ((label_identifier)) 56 ); 57 goto fail; 58 end; 59 60 prn = gfms_ascii_ ((prverr)); /* Previous reel number in error. */ 61 reel_serial = gfms_ascii_ ((reel_serial_number)); 62 file_serial = gfms_ascii_ ((file_serial_number)); 63 reel_sequence = gfms_ascii_ ((reel_sequence_number)); 64 65 if file_serial_num = " " then do; /* Initialize saved label information. */ 66 reel_serial_num = reel_serial; 67 file_serial_num = file_serial; 68 reel_sequence_num = (6)"0"; 69 end; 70 call validate_label; 71 72 call ioa ("^|HEADER LABEL INFORMATION:"); 73 call ioa ("label_identifier^6(.^) ""GE 600 BTL """); 74 call ioa ("installation_id^7(.^) ^a", gfms_ascii_ ((installation_id))); 75 call ioa ("reel_serial_number^4(.^) ^a", reel_serial); 76 call ioa ("file_serial_number^4(.^) ^a", file_serial); 77 call ioa ("reel_sequence_number^2(.^) ^a", reel_sequence); 78 string (yyddd) = gfms_ascii_ ((creation_date)); 79 call ioa ("creation_date^9(.^) year "||year||" day-of-year "||day_of_year); 80 call ioa ("retention_days^8(.^) ^a", gfms_ascii_ ((retention_days))); 81 call ioa ("file_name^13(.^) ^a", gfms_ascii_ ((file_name))); 82 call ioa ("user_info^13(.^) ^a", gfms_ascii_ ((user_info))); 83 call ioa ("prverr^16(.^) ^a", prn); 84 85 /* Position to the file after the label file. */ 86 call iox_$control ( 87 cbp /* (input) pointer to I/O switch. */ 88 , "forward_file" /* (input) control order. */ 89 , null () /* (input) NOT USED FOR THIS ORDER. */ 90 , code /* (output) I/O status code. */ 91 ); 92 if code ^= 0 then do; 93 call com_err_ ( 94 code 95 , "gfms" 96 , "positioning to file after header label. description^/^c" 97 , attach_description 98 ); 99 goto fail; 100 end; 101 return; 102 103 attach: proc; 104 105 /* Attach I/O switch "gfms_input" to I/O module tape_nstd_. 106**/ 107 call iox_$attach_name ( 108 "gfms_input" /* (input) I/O switch name. */ 109 , cbp /* (output) pointer to switch's control block. */ 110 , attach_description /* (input) attach description. */ 111 , null () /* (input) usual search rules to find tape_nstd_. */ 112 , code /* (output) I/O system status code. */ 113 ); 114 if code = 0 then return; 115 call com_err_ ( 116 code 117 , "gfms" 118 , "attaching with description^/^a" 119 , attach_description 120 ); 121 signal cond (gfms_return); 122 123 dcl code fixed bin(35); 124 dcl iox_$attach_name entry (char(*), ptr, char(*), ptr, fixed bin(35)); 125 dcl null builtin; 126 end attach; 127 128 get_density: proc; 129 130 /* Determine the density of the input tape 131* by successively trying tape densities until 132* successful. 133* If failure report, close and detach. 134**/ 135 ad = ""; 136 do i = ftd to ltd; 137 ad = ad||tape_densities (i); 138 call iox_$control ( 139 cbp /* (input) pointer to I/O switch. */ 140 , "d"||tape_densities (i) /* (input) set tape density control order. */ 141 , null () /* (input) NOT USED FOR THIS ORDER. */ 142 , code /* (output) I/O status code. */ 143 ); 144 if code = 0 then do; /* Able to open at density d(i). */ 145 call iox_$read_record ( /* Attempt to read at the density set. */ 146 cbp /* (input) pointer to control block. */ 147 , addr (tape_label) /* (input) record buffer. */ 148 , size (tape_label)*4 /* (input) buffer length in bytes. */ 149 , nbr /* (output) number of bytes read. */ 150 , code /* (output) I/O system status. */ 151 ); 152 call iox_$control ( /* Rewind the tape. */ 153 cbp 154 , "rewind" 155 , null () 156 , (0) /* Status code. Ignored. */ 157 ); 158 if code = 0 then /* Able to read at the density. */ 159 return; /* Success. */ 160 end; 161 end; 162 call com_err_ ( 163 code 164 , "gfms" 165 , "unable to set any density (^a) description^/^a" 166 , ad 167 , attach_description 168 ); 169 call gfms_close_; 170 call gfms_detach_; 171 goto fail; 172 173 dcl ad char(25)var; 174 dcl code fixed bin(35); 175 dcl i fixed bin; 176 dcl iox_$control entry (ptr, char(*), ptr, fixed bin(35)); 177 1 1 /* BEGIN INCLUDE FILE gfms_tape_densities.incl.pl1 (Wardd Multics) 10/18/80 1059.7 mst Sat */ 1 2 dcl tape_densities (5)char(5)static int options(constant)init("6250","1600","800","556","200"); 1 3 1 4 /* END INCLUDE FILE gfms_tape_densities.incl.pl1 */ 178 179 end get_density; 180 181 open: proc; 182 183 /* Open I/O switch. 184**/ 185 call iox_$open ( 186 cbp /* (input) pointer to control block. */ 187 , 4 /* (input) sequential input. */ 188 , "0"b /* (input) UNUSED. */ 189 , code 190 ); 191 if code = 0 then return; 192 call com_err_ ( 193 code 194 , "gfms" 195 , "sequential input opening for attach description^/^a" 196 , attach_description 197 ); 198 call gfms_detach_; 199 goto fail; 200 201 dcl code fixed bin(35); 202 dcl iox_$open entry (ptr, fixed bin, bit(1) aligned, fixed bin(35)); 203 end open; 204 205 validate_label: proc; 206 207 /* Validate that label is consistant with previous label. */ 208 if file_serial ^= file_serial_num then do; 209 call com_err_ ( 210 0 211 , "gfms_header_label_" 212 , "Current reel ^a, sequence number ^a, in file ^a" 213 ||"^/Expecting file ^a(reel ^a, sequence ^a)." 214 , file_serial 215 , reel_sequence 216 , reel_serial 217 , file_serial_num 218 , reel_serial_num 219 , reel_sequence_num 220 ); 221 goto fail; 222 end; 223 if verify (ltrim (reel_sequence), "0123456789")>0 then do; 224 call com_err_ ( 225 0 226 , "gfms_header_label_" 227 , "Reel sequence number ""^a"" not all numeric." 228 , reel_sequence 229 ); 230 goto fail; 231 end; 232 if prn = " " then /* preceding EOR label not erroneous. */ 233 if fixed (substr(reel_sequence,2), 17) ^= (fixed (substr(reel_sequence_num,2), 17)+1) then do; 234 call com_err_ ( 235 0 236 , "gfms_header_label_" 237 , "Reel ^a (file ^a) out of sequence." 238 ||"^/last sequence ^a, current sequence ^a." 239 , reel_serial 240 , file_serial 241 , reel_sequence_num 242 , reel_sequence 243 ); 244 goto fail; 245 end; 246 else 247 if reel_serial ^= reel_serial_num then do; 248 call com_err_ ( 249 0 250 , "gfms_header_label_" 251 , "File ^a sequence number ^a reel serial ^a, expected reel serial ^a." 252 , file_serial 253 , reel_sequence 254 , reel_serial 255 , reel_serial_num 256 ); 257 call command_query_$yes_no (yes, 0, "gcos_fms", 258 "Do you want to ignore the reel serial mismatch and process the mounted tape next?", 259 "Ignore?"); 260 if ^yes then goto fail; 261 end; 262 return; 263 end validate_label; 264 265 /* Variables for gfms_header_label_: */ 266 /* IDENTIFIER ATTRIBUTES */ 267 dcl code fixed bin(35); 268 dcl com_err_ entry() options(variable); 269 dcl command_query_$yes_no entry() options(variable); 270 dcl divide builtin; 271 dcl file_serial char(6); 272 dcl GE__600_BTL_ bit(72)static int options(constant)init("272520200600002022634320"b3); 273 dcl gfms_ascii_ entry(bit(*))returns(char(*)); 274 dcl gfms_close_ entry; 275 dcl gfms_detach_ entry; 276 dcl gfms_dump_rec_ entry (ptr, fixed bin); 277 dcl gfms_fail condition ext; 278 dcl gfms_return condition ext; 279 dcl gfms_tape_status_ entry (ptr) returns(bit(12)); 280 dcl ioa_ entry() options(variable); 281 dcl iox_$control entry (ptr, char(*), ptr, fixed bin(35)); 282 dcl iox_$read_record entry (ptr, ptr, fixed bin(21), fixed bin(21), fixed bin(35)); 283 dcl nbr fixed bin(21); 284 dcl prn char(6); 285 dcl reel_sequence char(6); 286 dcl reel_serial char(6); 287 dcl size builtin; 288 dcl yes bit(1); 289 290 /* See DD07 (April 1974) FILE AND RECORD CONTROL 291* Page 11-2 standard label format. 292**/ 293 dcl 1 tape_label aligned 294 , 3 label_identifier bit(72) 295 , 3 installation_id bit(36) 296 , 3 reel_serial_number bit(36) 297 , 3 file_serial_number bit(36) 298 , 3 reel_sequence_number bit(36) 299 , 3 creation_date bit(36) 300 , 3 retention_days bit(36) 301 , 3 file_name bit(72) 302 , 3 user_info bit(108) 303 , 3 prverr bit(36) 304 ; 305 306 dcl 1 yyddd aligned 307 , 3 blank char(1)unal 308 , 3 year char(2)unal 309 , 3 day_of_year char(3)unal 310 ; 311 2 1 /* BEGIN INCLUDE FILE gfms_ext.incl.pl1 (Wardd Multics) 10/07/80 2142.2 mst Tue */ 2 2 /* Modified by: S. C. Akers 02/08/82 Add gfms_ext$working_dir, 2 3* mapping_rule, 2 4* umc_name 2 5* Modified Ron Barstad 83-06-03 attach_desc from 40 to 80 char 2 6**/ 2 7 2 8 dcl 1 gfms_ext$print_routines aligned ext 2 9 , 3 ioa entry variable options(variable) 2 10 , 3 ioa_nnl entry variable options(variable) 2 11 ; 2 12 2 13 dcl 1 gfms_ext$temp_segs aligned ext 2 14 , 3 dtp ptr 2 15 , 3 nlp ptr 2 16 , 3 inp ptr 2 17 ; 2 18 2 19 dcl 1 gfms_ext$tape_file aligned ext 2 20 , 3 cbp ptr 2 21 , 3 attach_description char(80)unal 2 22 , 3 density 2 23 , 4 ftd fixed bin /* First tape density to attempt. */ 2 24 , 4 ltd fixed bin /* Last tape density to attempt. */ 2 25 , 3 tape_reel_information 2 26 , 4 reel_serial_num char(6) 2 27 , 4 file_serial_num char(6) 2 28 , 4 reel_sequence_num char(6) 2 29 ; 2 30 2 31 dcl 1 gfms_ext$options aligned ext 2 32 , 3 close bit(1)unal /* perform iox close. */ 2 33 , 3 detach bit(1)unal /* perform iox detach. */ 2 34 , 3 dump bit(1)unal /* dump tape records/information. */ 2 35 , 3 gf bit(1)unal /* provide gtss file attributes. */ 2 36 , 3 prfn bit(1)unal /* print file names. */ 2 37 , 3 scan_ss bit(1)unal /* scan substructure, display, quit. */ 2 38 , 3 tll bit(1)unal /* print totals of llinks. */ 2 39 , 3 unload bit(1)unal /* unload files. */ 2 40 , 3 NOT_IN_USE bit(28)unal 2 41 ; 2 42 2 43 dcl gfms_ext$working_dir char (168) var ext static; /* Where to restore the files. 2 44* It may be the user's working 2 45* directory, or the UMC or SMC directory. */ 2 46 2 47 dcl gfms_ext$mapping_rule char(3) external static; 2 48 2 49 dcl gfms_ext$umc_name char(12) external static; 2 50 2 51 /* END INCLUDE FILE gfms_ext.incl.pl1 */ 312 313 end gfms_header_label_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/10/84 1022.4 gfms_header_label_.pl1 >spec>on>7105>gfms_header_label_.pl1 178 1 03/27/82 0424.8 gfms_tape_densities.incl.pl1 >ldd>include>gfms_tape_densities.incl.pl1 312 2 10/24/83 1642.4 gfms_ext.incl.pl1 >ldd>include>gfms_ext.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. GE__600_BTL_ 000010 constant bit(72) initial unaligned dcl 272 ref 50 ad 000170 automatic varying char(25) dcl 173 set ref 135* 137* 137 162* attach_description 2 000034 external static char(80) level 2 packed unaligned dcl 2-19 set ref 29* 93* 107* 115* 162* 192* cbp 000034 external static pointer level 2 dcl 2-19 set ref 21* 29* 29* 86* 107* 138* 145* 152* 185* close 000036 external static bit(1) level 2 packed unaligned dcl 2-31 set ref 15* 19* code 000100 automatic fixed bin(35,0) dcl 267 in procedure "gfms_header_label_" set ref 21* 28 29* 86* 92 93* code 000212 automatic fixed bin(35,0) dcl 201 in procedure "open" set ref 185* 191 192* code 000200 automatic fixed bin(35,0) dcl 174 in procedure "get_density" set ref 138* 144 145* 158 162* code 000152 automatic fixed bin(35,0) dcl 123 in procedure "attach" set ref 107* 114 115* com_err_ 000010 constant entry external dcl 268 ref 29 51 93 115 162 192 209 224 234 248 command_query_$yes_no 000012 constant entry external dcl 269 ref 257 creation_date 6 000123 automatic bit(36) level 2 dcl 293 set ref 78 day_of_year 0(27) 000142 automatic char(3) level 2 packed unaligned dcl 306 set ref 79 density 26 000034 external static structure level 2 dcl 2-19 detach 0(01) 000036 external static bit(1) level 2 packed unaligned dcl 2-31 set ref 15* 17* divide builtin function dcl 270 ref 43 43 file_name 10 000123 automatic bit(72) level 2 dcl 293 set ref 81 file_serial 000102 automatic char(6) unaligned dcl 271 set ref 62* 67 76* 208 209* 234* 248* file_serial_num 32 000034 external static char(6) level 3 dcl 2-19 set ref 65 67* 208 209* file_serial_number 4 000123 automatic bit(36) level 2 dcl 293 set ref 62 ftd 26 000034 external static fixed bin(17,0) level 3 dcl 2-19 ref 136 gfms_ascii_ 000014 constant entry external dcl 273 ref 51 60 61 62 63 74 78 80 81 82 gfms_close_ 000016 constant entry external dcl 274 ref 169 gfms_detach_ 000020 constant entry external dcl 275 ref 170 198 gfms_dump_rec_ 000022 constant entry external dcl 276 ref 43 gfms_ext$options 000036 external static structure level 1 dcl 2-31 gfms_ext$print_routines 000032 external static structure level 1 dcl 2-8 gfms_ext$tape_file 000034 external static structure level 1 dcl 2-19 gfms_fail 000104 stack reference condition dcl 277 ref 47 gfms_return 000000 stack reference condition dcl 278 ref 121 gfms_tape_status_ 000024 constant entry external dcl 279 ref 29 29 i 000201 automatic fixed bin(17,0) dcl 175 set ref 136* 137 138* installation_id 2 000123 automatic bit(36) level 2 dcl 293 set ref 74 ioa 000032 external static entry variable level 2 dcl 2-8 ref 72 73 74 75 76 77 79 80 81 82 83 iox_$attach_name 000040 constant entry external dcl 124 ref 107 iox_$control 000026 constant entry external dcl 281 in procedure "gfms_header_label_" ref 86 iox_$control 000042 constant entry external dcl 176 in procedure "get_density" ref 138 152 iox_$open 000044 constant entry external dcl 202 ref 185 iox_$read_record 000030 constant entry external dcl 282 ref 21 145 label_identifier 000123 automatic bit(72) level 2 dcl 293 set ref 50 51 ltd 27 000034 external static fixed bin(17,0) level 3 dcl 2-19 ref 136 nbr 000112 automatic fixed bin(21,0) dcl 283 set ref 21* 29* 43 43 145* null builtin function dcl 125 ref 107 107 prn 000114 automatic char(6) unaligned dcl 284 set ref 60* 83* 232 prverr 15 000123 automatic bit(36) level 2 dcl 293 set ref 60 reel_sequence 000116 automatic char(6) unaligned dcl 285 set ref 63* 77* 209* 223 224* 232 234* 248* reel_sequence_num 34 000034 external static char(6) level 3 dcl 2-19 set ref 68* 209* 232 234* reel_sequence_number 5 000123 automatic bit(36) level 2 dcl 293 set ref 63 reel_serial 000120 automatic char(6) unaligned dcl 286 set ref 61* 66 75* 209* 234* 246 248* reel_serial_num 30 000034 external static char(6) level 3 dcl 2-19 set ref 66* 209* 246 248* reel_serial_number 3 000123 automatic bit(36) level 2 dcl 293 set ref 61 retention_days 7 000123 automatic bit(36) level 2 dcl 293 set ref 80 size builtin function dcl 287 ref 21 29 145 tape_densities 000000 constant char(5) initial array unaligned dcl 1-2 ref 137 138 tape_label 000123 automatic structure level 1 dcl 293 set ref 21 21 21 29 43 43 145 145 145 tape_reel_information 30 000034 external static structure level 2 dcl 2-19 user_info 12 000123 automatic bit(108) level 2 dcl 293 set ref 82 year 0(09) 000142 automatic char(2) level 2 packed unaligned dcl 306 set ref 79 yes 000122 automatic bit(1) unaligned dcl 288 set ref 257* 260 yyddd 000142 automatic structure level 1 dcl 306 set ref 78* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. gfms_ext$mapping_rule external static char(3) unaligned dcl 2-47 gfms_ext$temp_segs external static structure level 1 dcl 2-13 gfms_ext$umc_name external static char(12) unaligned dcl 2-49 gfms_ext$working_dir external static varying char(168) dcl 2-43 ioa_ 000000 constant entry external dcl 280 NAMES DECLARED BY EXPLICIT CONTEXT. attach 001703 constant entry internal dcl 103 ref 16 fail 000655 constant label dcl 42 ref 57 99 171 199 221 230 244 260 get_density 002006 constant entry internal dcl 128 ref 20 gfms_header_label_ 000523 constant entry external dcl 6 open 002227 constant entry internal dcl 181 ref 18 validate_label 002315 constant entry internal dcl 205 ref 70 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 21 21 43 43 145 145 fixed builtin function ref 232 232 ltrim builtin function ref 223 null builtin function ref 86 86 138 138 152 152 string builtin function ref 78 substr builtin function ref 232 232 verify builtin function ref 223 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3322 3370 3132 3332 Length 3650 3132 46 244 167 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gfms_header_label_ 602 external procedure is an external procedure. attach internal procedure shares stack frame of external procedure gfms_header_label_. get_density internal procedure shares stack frame of external procedure gfms_header_label_. open internal procedure shares stack frame of external procedure gfms_header_label_. validate_label internal procedure shares stack frame of external procedure gfms_header_label_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gfms_header_label_ 000100 code gfms_header_label_ 000102 file_serial gfms_header_label_ 000112 nbr gfms_header_label_ 000114 prn gfms_header_label_ 000116 reel_sequence gfms_header_label_ 000120 reel_serial gfms_header_label_ 000122 yes gfms_header_label_ 000123 tape_label gfms_header_label_ 000142 yyddd gfms_header_label_ 000152 code attach 000170 ad get_density 000200 code get_density 000201 i get_density 000212 code open THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_var_desc call_ext_out_desc call_ext_out return signal shorten_stack ext_entry any_to_any_tr THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ command_query_$yes_no gfms_ascii_ gfms_close_ gfms_detach_ gfms_dump_rec_ gfms_tape_status_ iox_$attach_name iox_$control iox_$control iox_$open iox_$read_record THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. gfms_ext$options gfms_ext$print_routines gfms_ext$tape_file LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 6 000522 15 000530 16 000534 17 000535 18 000540 19 000541 20 000544 21 000545 28 000570 29 000572 42 000655 43 000656 47 000675 50 000700 51 000704 57 000756 60 000760 61 001010 62 001041 63 001072 65 001123 66 001140 67 001144 68 001150 70 001153 72 001154 73 001170 74 001204 75 001246 76 001267 77 001307 78 001327 79 001357 80 001414 81 001457 82 001523 83 001566 86 001612 92 001644 93 001646 99 001701 101 001702 103 001703 107 001704 114 001744 115 001747 121 002002 126 002005 128 002006 135 002007 136 002010 137 002021 138 002035 144 002072 145 002074 152 002117 158 002150 161 002153 162 002155 169 002214 170 002221 171 002226 181 002227 185 002230 191 002251 192 002254 198 002307 199 002314 205 002315 208 002316 209 002330 221 002403 223 002404 224 002430 230 002463 232 002464 234 002533 244 002602 246 002603 248 002615 257 002662 260 002723 262 002726 ----------------------------------------------------------- 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