COMPILATION LISTING OF SEGMENT ask_ Compiled by: Multics PL/I Compiler, Release 33a, of May 30, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 06/19/90 1107.2 mdt Tue Options: optimize map 1 /****^ ********************************************************* 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* ********************************************************* */ 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(90-05-28,Blackmore), approve(90-03-10,MCR8163), audit(90-06-04,Vu), 14* install(90-06-19,MR12.4-1015): 15* Fix a problem in ask_ that causes bad interactions with exec_com. 16* END HISTORY COMMENTS */ 17 18 19 ask_: proc (prompt, ans); 20 21 /* Terminal input processor, with goodies. 22* 23* THE PROMPTING ENTRIES: prompt for more input if they don't get whats wanted. 24* 25* . call ask_ (ctl_string, answer, ioa_args ... ) 26* will get a word from user_input. If the current line is empty, 27* the program will format a prompting message, using the first arg as a control string 28* and arguments from the third on as input for conversion. This message will be typed out. 29* 30* . call ask_$ask_int (ctl_string, int, ioa_args) 31* will do the same thing but return an integer. The typed number 32* may be integer or floating, positive or negative. Dollar signs and 33* commas will be ignored. 34* 35* . call ask_$ask_flo (ctl_string, flo, ioa_args ... ) 36* . call ask_$ask_line (ctl_string, line, ioa_args ... ) 37* will return, respectively, a floating number and the rest of the line 38* . call ask_$ask_yn (ctl_string, ans, ioa_args... ) 39* will return either the character string "yes" or "no" 40* . call ask_$ask_nf (ctl_string, ans, ioa_args ... ) 41* will return either the character string "on" or "off" 42* 43* 44*THE CHECKING ENTRIES: return 'flag' to indicate success or failure. 45* 46* . call ask_$ask_c (ans, flag) 47* will set flag nonzero and return into ans if anything is there 48* similarly, 49* . call ask_$ask_cint (int, flag) 50* . call ask_$ask_cflo (flo, flag) 51* . call ask_$ask_cline (line, flag) 52* . call ask_$ask_cyn (ans, flag) 53* . call ask_$ask_cnf (ans, flag) 54* 55* 56*THE PEEKING ENTRIES: don't change current position in input line. 57* 58* . call ask_$ask_n (ans, flag) 59* . call ask_$ask_nline (line, flag) 60* will work like 'ask_c' but leaves the next word there. 61* 62* . call ask_$ask_nflo (flo, flag) 63* . call ask_$ask_nint (int, flag) 64* . call ask_$ask_nyn (ans, flag) 65* . call ask_$ask_nnf (ans, flag) 66* are also peek entries, but will return flag as -1 if there 67* is something on the line but it's not a number (or yes or no, or on or off). 68* 69* 70*OTHER ENTRIES: 71* 72* . call ask_$ask_clr 73* to reset the line buffer to empty, on the first call or in case of error. 74* (note that you don't want to pass int static between progs) 75* 76* . call ask_$ask_prompt (ctl_string, ioa_args ... ) 77* causes a new inputline to be prompted for & read in 78* 79* . call ask_$ask_setline (input) 80* sets the input line. It can have a newline character or not. 81* 82* 83* NOTE: the line buffer, its length and current index, are among the things kept 84* in internal static storage by this subroutine. 85* 86* 87* Initial coding 12/69, THVV 88* Modified 7/70 to call formline_, THVV 89* Modified 9/72 to call general_rs, THVV 90* Modified 8/83 to allow "y" or "n" and add nf entries, Jim Lippard 91* */ 92 93 dcl (addr, index, length, min, rtrim, substr) builtin; 94 95 dcl (line char (128) aligned, /* Line typed by user. */ 96 empty bit (1) init ("1"b), /* TRUE if need another line. */ 97 i fixed bin init (1), /* Index in line. */ 98 nchr fixed bin (21), /* Length of line. */ 99 prompt_len fixed bin, /* length of prompt */ 100 blank char (1) init (" ") aligned, /* Constant blank. */ 101 NL char (1) aligned init (" 102 "), /* Constant newline */ 103 tab char (1) init (" ") aligned) int static; /* Constant tab. */ 104 105 dcl prompt char (*), /* Arg to ask with. */ 106 ans char (*), /* Arg where answer goes. */ 107 flag fixed bin, /* 1 if more on line */ 108 int fixed bin, /* integer return */ 109 flo float bin; /* float return */ 110 111 dcl (start, j, tdg) fixed bin, /* Temps. */ 112 arglistp ptr, /* ptr to argument list */ 113 ftm float bin (63), /* answer for number conversion */ 114 fpm float bin (63), /* fraction part multiplier */ 115 oldi fixed bin, /* what 'i' was at entry. */ 116 fracsw bit (1) aligned, /* TRUE when converting fraction */ 117 tf char (4) aligned, /* temp for yes/no code */ 118 (flosw, intsw, linesw, csw, nsw, ynsw, nfsw, prmsw) bit (1) aligned init ("0"b); 119 120 dcl 1 ll aligned based (addr (line)), /* Overlay structure for line. */ 121 2 ch (0: 127) char (1) unaligned; /* ... as character array. */ 122 123 dcl ioa_$nnl entry options (variable), 124 cu_$arg_list_ptr entry (ptr), 125 iox_$put_chars entry (ptr, ptr, fixed bin(21), fixed bin(35)), 126 iox_$get_line entry (ptr, ptr, fixed bin(21), fixed bin(21), fixed bin(35)), 127 iox_$user_input ptr ext static, 128 iox_$user_output ptr ext static, 129 ioa_$general_rs entry (ptr, fixed bin, fixed bin, char (*) aligned, fixed bin, 130 bit (1) aligned, bit (1) aligned); 131 132 dcl NL_HT_SP char (3) internal static options (constant) init (" 133 "); 134 135 dcl code fixed bin (35); 136 137 /* - - - - - - - */ 138 139 go to join; /* Entry to return symbol. */ 140 141 ask_c: entry (ans, flag); /* entry to see if symbol, get if so */ 142 143 csw = "1"b; 144 go to join; 145 146 ask_int: entry (prompt, int); /* entry to get integer */ 147 148 intsw = "1"b; 149 go to join; 150 151 ask_cint: entry (int, flag); /* entry to get integer if there */ 152 153 intsw, csw = "1"b; 154 go to join; 155 156 ask_flo: entry (prompt, flo); /* entry to get float */ 157 158 flosw = "1"b; 159 go to join; 160 161 ask_cflo: entry (flo, flag); /* entry to get float if there */ 162 163 flosw, csw = "1"b; 164 go to join; 165 166 ask_line: entry (prompt, ans); /* entry to get rest of line */ 167 168 linesw = "1"b; 169 go to join; 170 171 ask_cline: entry (ans, flag); /* entry to get rest of line if there */ 172 173 linesw, csw = "1"b; 174 go to join; 175 176 ask_n: entry (ans, flag); /* peek entry */ 177 178 csw, nsw = "1"b; 179 go to join; 180 181 ask_nint: entry (int, flag); /* Entry to peek at next integer */ 182 183 csw, intsw, nsw = "1"b; 184 go to join; 185 186 ask_nflo: entry (flo, flag); /* Entry to peek at next floating */ 187 188 csw, nsw, flosw = "1"b; 189 go to join; 190 191 ask_nline: entry (ans, flag); /* Entry to peek at rest of line */ 192 193 csw, nsw, linesw = "1"b; 194 go to join; 195 196 ask_prompt: entry (prompt); /* Entry to prompt & fill line */ 197 198 empty, prmsw = "1"b; 199 go to join; 200 201 ask_yn: entry (prompt, ans); 202 203 ynsw = "1"b; 204 go to join; 205 206 ask_cyn: entry (ans, flag); 207 208 csw, ynsw = "1"b; 209 go to join; 210 211 ask_nyn: entry (ans, flag); 212 213 csw, nsw, ynsw = "1"b; 214 go to join; 215 216 ask_nf: entry (prompt, ans); 217 218 nfsw = "1"b; 219 go to join; 220 221 ask_cnf: entry (ans, flag); 222 223 csw, nfsw = "1"b; 224 go to join; 225 226 ask_nnf: entry (ans, flag); 227 228 csw, nsw, nfsw = "1"b; 229 go to join; 230 231 /* - - - - - - - - - - - - begin execution - - - - */ 232 233 join: if empty then do; /* If no line in buffer. */ 234 mt: if csw then do; /* if just looking, */ 235 flag = 0; /* report failure */ 236 return; /* and go */ 237 end; 238 read: prompt_len = 120; /* Construct prompt */ 239 if prmsw then j = 2; /* optional ioa args start at 2 */ 240 else j = 3; /* ... or 3, depending on entry */ 241 call cu_$arg_list_ptr (arglistp); 242 call ioa_$general_rs (arglistp, 1, j, line, prompt_len, "1"b, "0"b); 243 nchr = prompt_len; 244 call iox_$put_chars (iox_$user_output, addr (line), nchr, code); /* Prompt the user. */ 245 reread: 246 line = ""; 247 nchr = 0; 248 call iox_$get_line (iox_$user_input, addr (line), 128, nchr, code); /* Get new line into buffer. */ 249 nchr = length (rtrim (substr (line, 1, nchr), NL_HT_SP)); 250 if nchr = 0 then go to read; /* If line is empty, get another */ 251 empty = "0"b; /* Mark that we have it. */ 252 i = 0; /* Start with char. 1. */ 253 if prmsw then return; /* go home if just prompt & read */ 254 end; 255 oldi = i; /* save starting position, for 'n' ents */ 256 257 findb: if ch (i) ^= tab then if ch (i) ^= blank then go to first; 258 i = i + 1; /* Skip over blank before symbol. */ 259 if i >= nchr then go to mt; /* If chars left, keep looking. */ 260 go to findb; /* Keep looking. */ 261 262 first: start = i; /* Found start of symbol. */ 263 if linesw then do; /* Does user want all of the rest? */ 264 ans = substr (line, start+1, nchr-i); /* yes */ 265 if ^nsw then empty = "1"b; /* Buffer now empty, unless peek */ 266 go to exit; 267 end; 268 finde: if ch (i) = blank then go to last; /* Look for end. */ 269 if ch (i) = tab then go to last; /* ... */ 270 i = i + 1; /* ... */ 271 if i >= nchr then go to last; /* If out of chars, give it out */ 272 go to finde; /* Keep looking. */ 273 274 last: if intsw then go to do_num; /* Found symbol end. Number conversion? */ 275 if flosw then do; /* ... */ 276 do_num: fracsw = "0"b; /* set up */ 277 fpm = 1.0e0; /* ... */ 278 ftm = 0.0e0; /* ... */ 279 if ch (start) = "$" then start = start + 1; /* skip dollar sign */ 280 if ch (start) = "-" then start = start + 1; /* skip minus, come back for it */ 281 282 do j = start to i-1; /* Look at each char in symbol */ 283 if ch (j) = "," then; /* Ignore commas */ 284 else if ch (j) = "." then fracsw = "1"b; /* Decimal point starts fraction */ 285 else do; /* Turn char into digit */ 286 tdg = index ("0123456789", ch (j)) - 1; 287 if tdg < 0 then do; 288 badd: if csw then do; /* If conditional, get out. */ 289 fail: flag = -1; /* something there, but she's no lady */ 290 i = oldi; /* reset buffer index */ 291 return; /* .. and go */ 292 end; 293 call ioa_$nnl ("""^a"" non-numeric. Please retype: ", 294 substr (line, start+1, i-start)); 295 go to reread; /* get fresh line */ 296 end; 297 if fracsw then do; /* OK digit. Fraction? */ 298 fpm = fpm * 10.0e0; /* yes, compute place */ 299 ftm = ftm + tdg/fpm; /* insert digit */ 300 end; 301 else ftm = 10.0e0*ftm + tdg; /* insert integer digit */ 302 end; 303 end; 304 if ch (start-1) = "-" then ftm = -ftm; /* sign control */ 305 if intsw then int = ftm; /* return value */ 306 else flo = ftm; /* ... */ 307 end; 308 else if ynsw then do; /* Insist on yes or no? */ 309 tf = substr (line, start+1, i-start); /* Get answer */ 310 if tf = "yes" | tf = "y" then do; 311 ans = "yes"; 312 go to oky; 313 end; 314 else if tf = "no" | tf = "n" then do; 315 ans = "no"; 316 go to oky; 317 end; 318 if csw then go to fail; /* Answer neither yes nor no. If conditional, exit */ 319 call ioa_$nnl ("""^a"" is not ""yes"" or ""no"". Please retype: ", substr (line, start+1, i-start)); 320 go to reread; 321 end; 322 else if nfsw then do; 323 tf = substr (line, start+1, i-start); 324 if tf = "on" then do; 325 ans = "on"; 326 goto oky; 327 end; 328 else if tf = "off" then do; 329 ans = "off"; 330 goto oky; 331 end; 332 if csw then go to fail; 333 call ioa_$nnl ("""^a"" is not ""on"" or ""off"". Please retype: ", substr (line, start+1, i-start)); 334 go to reread; 335 end; 336 else ans = substr (line, start+1, i-start); /* one symbol wanted */ 337 oky: /* Return symbol. */ 338 339 exit: if csw then flag = 1; /* if conditional, report OK */ 340 if nsw then i = oldi; /* if peeking, reset buffer ptr */ 341 else if i >= nchr then empty = "1"b; /* Not peeking. Is buffer empty? */ 342 return; /* And exit. */ 343 344 /* - - - */ 345 346 ask_clr: entry; /* Entry point to clear switches. */ 347 348 empty = "1"b; /* Force read on next call. */ 349 return; /* Exit. */ 350 351 /* - - - - - - - - - - */ 352 353 ask_setline: entry (input); /* Entry point to set input line */ 354 355 dcl input char (*); 356 357 line = input; /* fill internal static buffer */ 358 nchr = min (length (input), 128); /* now trim the line. start at end */ 359 i = 0; 360 do while (nchr > 0); /* Trim trailing blanks and tabs off line. */ 361 if ch (nchr) ^= blank then if ch (nchr) ^= tab then if ch (nchr) ^= NL then go to sltx; 362 nchr = nchr - 1; 363 end; 364 sltx: if nchr > 0 then empty = "0"b; 365 366 end ask_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 06/19/90 1107.3 ask_.pl1 >spec>install>1015>ask_.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. NL constant char(1) initial dcl 95 ref 361 NL_HT_SP 000000 constant char(3) initial packed unaligned dcl 132 ref 249 addr builtin function dcl 93 ref 244 244 248 248 257 257 268 269 279 280 283 284 286 304 361 361 361 ans parameter char packed unaligned dcl 105 set ref 19 141 166 171 176 191 201 206 211 216 221 226 264* 311* 315* 325* 329* 336* arglistp 000104 automatic pointer dcl 111 set ref 241* 242* blank 002065 constant char(1) initial dcl 95 ref 257 268 361 ch based char(1) array level 2 packed packed unaligned dcl 120 ref 257 257 268 269 279 280 283 284 286 304 361 361 361 code 000125 automatic fixed bin(35,0) dcl 135 set ref 244* 248* csw 000120 automatic bit(1) initial dcl 111 set ref 111* 143* 153* 163* 173* 178* 183* 188* 193* 208* 213* 223* 228* 234 288 318 332 337 cu_$arg_list_ptr 000056 constant entry external dcl 123 ref 241 empty 000050 internal static bit(1) initial packed unaligned dcl 95 set ref 198* 233 251* 265* 341* 348* 364* flag parameter fixed bin(17,0) dcl 105 set ref 141 151 161 171 176 181 186 191 206 211 221 226 235* 289* 337* flo parameter float bin(27) dcl 105 set ref 156 161 186 306* flosw 000115 automatic bit(1) initial dcl 111 set ref 111* 158* 163* 188* 275 fpm 000110 automatic float bin(63) dcl 111 set ref 277* 298* 298 299 fracsw 000113 automatic bit(1) dcl 111 set ref 276* 284* 297 ftm 000106 automatic float bin(63) dcl 111 set ref 278* 299* 299 301* 301 304* 304 305 306 i 000051 internal static fixed bin(17,0) initial dcl 95 set ref 252* 255 257 257 258* 258 259 262 264 268 269 270* 270 271 282 290* 293 293 309 319 319 323 333 333 336 340* 341 359* index builtin function dcl 93 ref 286 input parameter char packed unaligned dcl 355 ref 353 357 358 int parameter fixed bin(17,0) dcl 105 set ref 146 151 181 305* intsw 000116 automatic bit(1) initial dcl 111 set ref 111* 148* 153* 183* 274 305 ioa_$general_rs 000070 constant entry external dcl 123 ref 242 ioa_$nnl 000054 constant entry external dcl 123 ref 293 319 333 iox_$get_line 000062 constant entry external dcl 123 ref 248 iox_$put_chars 000060 constant entry external dcl 123 ref 244 iox_$user_input 000064 external static pointer dcl 123 set ref 248* iox_$user_output 000066 external static pointer dcl 123 set ref 244* j 000101 automatic fixed bin(17,0) dcl 111 set ref 239* 240* 242* 282* 283 284 286* length builtin function dcl 93 ref 249 358 line 000010 internal static char(128) dcl 95 set ref 242* 244 244 245* 248 248 249 257 257 264 268 269 279 280 283 284 286 293 293 304 309 319 319 323 333 333 336 357* 361 361 361 linesw 000117 automatic bit(1) initial dcl 111 set ref 111* 168* 173* 193* 263 ll based structure level 1 dcl 120 min builtin function dcl 93 ref 358 nchr 000052 internal static fixed bin(21,0) dcl 95 set ref 243* 244* 247* 248* 249* 249 250 259 264 271 341 358* 360 361 361 361 362* 362 364 nfsw 000123 automatic bit(1) initial dcl 111 set ref 111* 218* 223* 228* 322 nsw 000121 automatic bit(1) initial dcl 111 set ref 111* 178* 183* 188* 193* 213* 228* 265 340 oldi 000112 automatic fixed bin(17,0) dcl 111 set ref 255* 290 340 prmsw 000124 automatic bit(1) initial dcl 111 set ref 111* 198* 239 253 prompt parameter char packed unaligned dcl 105 ref 19 146 156 166 196 201 216 prompt_len 000053 internal static fixed bin(17,0) dcl 95 set ref 238* 242* 243 rtrim builtin function dcl 93 ref 249 start 000100 automatic fixed bin(17,0) dcl 111 set ref 262* 264 279 279* 279 280 280* 280 282 293 293 293 293 304 309 309 319 319 319 319 323 323 333 333 333 333 336 336 substr builtin function dcl 93 ref 249 264 293 293 309 319 319 323 333 333 336 tab 002064 constant char(1) initial dcl 95 ref 257 269 361 tdg 000102 automatic fixed bin(17,0) dcl 111 set ref 286* 287 299 301 tf 000114 automatic char(4) dcl 111 set ref 309* 310 310 314 314 323* 324 328 ynsw 000122 automatic bit(1) initial dcl 111 set ref 111* 203* 208* 213* 308 NAMES DECLARED BY EXPLICIT CONTEXT. ask_ 000103 constant entry external dcl 19 ask_c 000131 constant entry external dcl 141 ask_cflo 000247 constant entry external dcl 161 ask_cint 000200 constant entry external dcl 151 ask_cline 000314 constant entry external dcl 171 ask_clr 001572 constant entry external dcl 346 ask_cnf 000610 constant entry external dcl 221 ask_cyn 000515 constant entry external dcl 206 ask_flo 000221 constant entry external dcl 156 ask_int 000152 constant entry external dcl 146 ask_line 000266 constant entry external dcl 166 ask_n 000336 constant entry external dcl 176 ask_nf 000562 constant entry external dcl 216 ask_nflo 000400 constant entry external dcl 186 ask_nint 000360 constant entry external dcl 181 ask_nline 000420 constant entry external dcl 191 ask_nnf 000632 constant entry external dcl 226 ask_nyn 000537 constant entry external dcl 211 ask_prompt 000444 constant entry external dcl 196 ask_setline 001606 constant entry external dcl 353 ask_yn 000467 constant entry external dcl 201 badd 001213 constant label dcl 288 do_num 001134 constant label dcl 276 ref 274 exit 001551 constant label dcl 337 ref 266 fail 001215 constant label dcl 289 ref 318 332 findb 001042 constant label dcl 257 ref 260 finde 001107 constant label dcl 268 ref 272 first 001061 constant label dcl 262 ref 257 join 000653 constant label dcl 233 ref 139 144 149 154 159 164 169 174 179 184 189 194 199 204 209 214 219 224 229 last 001130 constant label dcl 274 ref 268 269 271 mt 000656 constant label dcl 234 ref 259 oky 001551 constant label dcl 337 ref 312 316 326 330 read 000663 constant label dcl 238 ref 250 reread 000770 constant label dcl 245 ref 295 320 334 sltx 001660 constant label dcl 364 ref 361 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2350 2442 2072 2360 Length 2674 2072 72 216 256 44 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ask_ 146 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 line ask_ 000050 empty ask_ 000051 i ask_ 000052 nchr ask_ 000053 prompt_len ask_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ask_ 000100 start ask_ 000101 j ask_ 000102 tdg ask_ 000104 arglistp ask_ 000106 ftm ask_ 000110 fpm ask_ 000112 oldi ask_ 000113 fracsw ask_ 000114 tf ask_ 000115 flosw ask_ 000116 intsw ask_ 000117 linesw ask_ 000120 csw ask_ 000121 nsw ask_ 000122 ynsw ask_ 000123 nfsw ask_ 000124 prmsw ask_ 000125 code ask_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 alloc_char_temp call_ext_out_desc call_ext_out return_mac fl2_to_fx1 shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$arg_list_ptr ioa_$general_rs ioa_$nnl iox_$get_line iox_$put_chars THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. iox_$user_input iox_$user_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 111 000065 19 000077 139 000124 141 000125 143 000145 144 000147 146 000150 148 000171 149 000173 151 000174 153 000211 154 000214 156 000215 158 000240 159 000242 161 000243 163 000260 164 000263 166 000264 168 000307 169 000311 171 000312 173 000330 174 000333 176 000334 178 000352 179 000355 181 000356 183 000371 184 000375 186 000376 188 000411 189 000415 191 000416 193 000434 194 000440 196 000441 198 000460 199 000464 201 000465 203 000510 204 000512 206 000513 208 000531 209 000534 211 000535 213 000553 214 000557 216 000560 218 000603 219 000605 221 000606 223 000624 224 000627 226 000630 228 000646 229 000652 233 000653 234 000656 235 000660 236 000662 238 000663 239 000666 240 000673 241 000675 242 000703 243 000747 244 000752 245 000770 247 000774 248 000775 249 001017 250 001032 251 001034 252 001035 253 001036 255 001040 257 001042 258 001054 259 001055 260 001060 262 001061 263 001063 264 001065 265 001102 266 001106 268 001107 269 001117 270 001123 271 001124 272 001127 274 001130 275 001132 276 001134 277 001135 278 001137 279 001141 280 001147 282 001155 283 001165 284 001175 286 001202 287 001212 288 001213 289 001215 290 001220 291 001223 293 001224 295 001255 297 001257 298 001261 299 001264 300 001271 301 001272 303 001300 304 001302 305 001313 306 001321 307 001323 308 001324 309 001326 310 001334 311 001347 312 001357 314 001360 315 001372 316 001402 318 001403 319 001405 320 001433 322 001435 323 001437 324 001445 325 001453 326 001463 328 001464 329 001471 330 001501 332 001502 333 001504 334 001532 336 001534 337 001551 340 001556 341 001563 342 001570 346 001571 348 001600 349 001603 353 001604 357 001622 358 001631 359 001636 360 001637 361 001643 362 001655 363 001657 364 001660 366 001663 ----------------------------------------------------------- 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