COMPILATION LISTING OF SEGMENT linus_qedx_the_query Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 07/29/86 0958.3 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 /* format: off */ 7 8 /* This is the subroutine called by requests to implement the 9* qedx'ing of the current query. Description and usage follows. 10* 11* Description: 12* 13* This subroutine takes the current query and calls qedx_ with it in 14* a buffer, or calls qedx with an empty buffer depending on the setting 15* of the second parameter. Unless the user did a quit_force the edited 16* query replaces the original. 17* 18* Usage: call linus_qedx_the_query (lcb_ptr, new_query_flag); 19* 20* lcb_ptr - input - pointer to linus control block structure 21* new_query_flag - input - on means start a new query, off means use the old 22* 23* Known Bugs: 24* 25* Other Problems: 26* 27* History: 28* 29* Written - Al Dupuis - August 1983 30* 31**/ 32 33 linus_qedx_the_query: proc ( 34 35 lcb_ptr_parm, /* input: ptr to the linus control block info structure */ 36 new_flag_parm /* input: on if caller wants to start with a new query */ 37 ); 38 39 dcl lcb_ptr_parm ptr parm; 40 dcl new_flag_parm bit (1) aligned parm; 41 42 /* 43* Mainline Processing Overview: 44* 45* (1) Get the current query placed in a temp segment, or get an empty 46* temp segment if there is no current query. Set the temp segment 47* length to zero if a new query was requested. 48* 49* (2) Fill in the qedx_information structure. 50* 51* (3) Call qedx and let the user do some editing. 52* 53* (4) If user didn't do a quit force then make the result of editing 54* the current query. 55**/ 56 57 call initialize; 58 call call_qedx; 59 if query_should_be_replaced 60 then do; 61 call linus_query_mgr$put (lcb_ptr, query_segment_ptr, 62 qedx_information.buffers (1).region_final_lth, code); 63 if code ^= 0 64 then call ssu_$abort_line (sci_ptr, code); 65 else; 66 end; 67 else; 68 69 return; 70 71 call_qedx: proc; 72 73 query_should_be_replaced = OFF; 74 call qedx_ (addr (qedx_information), code); 75 if code ^= 0 76 then if code = error_table_$fatal_error 77 then call ssu_$abort_line (sci_ptr, 0); 78 else if code = error_table_$recoverable_error 79 then if qedx_information.flags.quit_forced 80 then return; 81 else; 82 else call ssu_$abort_line (sci_ptr, 0); 83 else; 84 85 query_should_be_replaced = ON; 86 87 return; 88 89 end call_qedx; 90 91 initialize: proc; 92 93 lcb_ptr = lcb_ptr_parm; 94 new_query = new_flag_parm; 95 sci_ptr = lcb.subsystem_control_info_ptr; 96 97 call linus_query_mgr$get (lcb_ptr, query_segment_ptr, 98 query_segment_length, code); 99 if code ^= 0 100 then if code = linus_error_$no_current_query 101 then; 102 else call ssu_$abort_line (sci_ptr, code); 103 else; 104 105 if new_query 106 then query_segment_length = 0; 107 108 qedx_information.header.version = QEDX_INFO_VERSION_1; 109 qedx_information.editor_name = "linus (qedx)"; 110 unspec (qedx_information.header.flags) = OFF; 111 qedx_information.header.flags.query_if_modified = ON; 112 qedx_information.n_buffers = 1; 113 114 qedx_information.buffers (1).buffer_name = "0"; 115 qedx_information.buffers (1).buffer_pathname = ""; 116 qedx_information.buffers (1).region_ptr = query_segment_ptr; 117 qedx_information.buffers (1).region_max_lth = sys_info$max_seg_size * 4; 118 qedx_information.buffers (1).region_initial_lth = query_segment_length; 119 120 unspec (qedx_information.buffers (1).flags) = OFF; 121 qedx_information.buffers (1).flags.read_write_region = ON; 122 qedx_information.buffers (1).flags.locked_pathname = ON; 123 qedx_information.buffers (1).flags.default_read_ok = ON; 124 qedx_information.buffers (1).flags.default_write_ok = ON; 125 126 return; 127 128 end initialize; 129 130 dcl OFF bit (1) aligned static internal options (constant) init ("0"b); 131 dcl ON bit (1) aligned static internal options (constant) init ("1"b); 132 133 dcl addr builtin; 134 135 dcl code fixed bin (35); 136 137 dcl error_table_$fatal_error fixed bin(35) ext static; 138 dcl error_table_$recoverable_error fixed bin(35) ext static; 139 140 dcl fixed builtin; 141 142 dcl linus_error_$no_current_query fixed bin(35) ext static; 143 dcl linus_query_mgr$get entry (ptr, ptr, fixed bin(21), fixed bin(35)); 144 dcl linus_query_mgr$put entry (ptr, ptr, fixed bin(21), fixed bin(35)); 145 146 dcl new_query bit (1) aligned; 147 148 dcl qedx_ entry (ptr, fixed bin(35)); 149 dcl 1 qedx_information aligned, 150 2 header like qedx_info.header, 151 2 buffers (1) like qedx_info.buffers; 152 dcl query_segment_ptr ptr; 153 dcl query_segment_length fixed bin (21); 154 dcl query_should_be_replaced bit (1) aligned; 155 156 dcl rel builtin; 157 158 dcl sci_ptr ptr; 159 dcl ssu_$abort_line entry() options(variable); 160 dcl sys_info$max_seg_size fixed bin(35) ext static; 161 162 dcl unspec builtin; 163 1 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 1 7* install(86-07-29,MR12.0-1106): 1 8* Added general_work_area_ptr and renamed sfr_ptr to 1 9* force_retrieve_scope_ptr. 1 10* END HISTORY COMMENTS */ 1 11 1 12 1 13 /* HISTORY: 1 14* 1 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 1 16* 1 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 1 18* a part of the attribute level control work. 1 19* 1 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 1 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 1 22* scope information. 1 23* 1 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 1 25* retaining various vcpu times to be collected when in timing mode. The 1 26* times to be collected are: LINUS parsing time, LINUS processing time, and 1 27* MRDS processing time. 1 28* 1 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 1 30* part of the line numbering implementation. This allows for possible later 1 31* LINUS control of the build defaults. 1 32* 1 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 1 34* information is now retained by ssu_. Removed parse_timer as no longer 1 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 1 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 1 37* 1 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 1 39* subsystem_invocation_level, and selection_expression_identifier. 1 40* 1 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 1 42* table_control_info_ptr. 1 43* 1 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 1 45* 1 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 1 47* 1 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 1 49* 1 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 1 51**/ 1 52 1 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 1 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 1 55 2 rb_len fixed bin (21), /* length of request buffer */ 1 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 1 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 1 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 1 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 1 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 1 61 2 test_flag bit (1) unal, /* on if in test mode */ 1 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 1 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 1 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 1 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 1 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 1 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 1 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 1 69 2 reserved bit (27) unal, 1 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 1 71 2 rb_ptr ptr, /* ptr to request buffer */ 1 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 1 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 1 74 2 ttn_ptr ptr, /* pointer to table info structure */ 1 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 1 76 2 lv_ptr ptr, /* pointer linus variables */ 1 77 2 si_ptr ptr, /* pointer to select_info structure */ 1 78 2 setfi_ptr ptr, /* pointer to set function information */ 1 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 1 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 1 81 2 lit_ptr ptr, /* pointer to literal pool */ 1 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 1 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 1 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 1 85* (MR7.0) */ 1 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 1 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 1 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 1 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 1 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 1 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 1 92* for current lila expression */ 1 93 2 unused_timer float bin (63), /* future expansion */ 1 94 2 request_time float bin (63), /* How much request time was spent 1 95* in LINUS. (-1 = user has just enabled 1 96* timing, do not report) */ 1 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 1 98 2 build_increment fixed bin, /* default increment for build mode */ 1 99 2 build_start fixed bin, /* default start count for build mode */ 1 100 2 linus_version char (4), /* current version of LINUS */ 1 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 1 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 1 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 1 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 1 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 1 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 1 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 1 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 1 109 2 word_pad (6) bit (36) unal, 1 110 /* procedures that will be optionally */ 1 111 /* replaced by the user. Saved so they */ 1 112 /* can be reinstated if desired. */ 1 113 2 ssu_abort_line entry options (variable), 1 114 2 ssu_post_request_line variable entry (ptr), 1 115 2 ssu_pre_request_line variable entry (ptr), 1 116 1 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 1 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 1 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 1 120 1 121 dcl lcb_ptr ptr; 1 122 1 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 164 165 2 1 /* BEGIN INCLUDE FILE ... qedx_info.incl.pl1 */ 2 2 /* Created: January 1983 by G. Palter */ 2 3 2 4 /* Data structure which supplies input/output arguments to qedx_ subroutine */ 2 5 2 6 dcl 1 qedx_info aligned based (qedx_info_ptr), 2 7 2 header, /* allows use of like to build automatic version */ 2 8 3 version character (8), 2 9 3 editor_name character (72) unaligned, 2 10 3 buffer_io entry (pointer, bit (1) aligned), /* procedure invoked to read/write an editor buffer */ 2 11 3 flags, 2 12 4 no_rw_path bit (1) unaligned, /* ON => no r/w may use a pathname and R/W are illegal */ 2 13 4 query_if_modified bit (1) unaligned, /* ON => query on exit if modified buffers exist */ 2 14 4 caller_does_io bit (1) unaligned, /* ON => caller does actual work of read/write requests */ 2 15 4 quit_forced bit (1) unaligned, /* set ON => user used Q or asked to punt modified buffers */ 2 16 4 buffers_truncated bit (1) unaligned, /* set ON => some editing lost when written */ 2 17 4 pad bit (29) unaligned, 2 18 3 n_buffers fixed binary, /* # of buffers supplied by caller */ 2 19 2 buffers (qedx_info_n_buffers refer (qedx_info.n_buffers)), 2 20 3 buffer_name character (16) unaligned, /* name of the buffer */ 2 21 3 buffer_pathname character (256) unaligned, /* initial default pathname of buffer */ 2 22 3 region_ptr pointer, /* -> caller's optional region */ 2 23 3 region_max_lth fixed binary (21), /* # of characters which will fit in caller's region */ 2 24 3 region_initial_lth fixed binary (21), /* # of characters in caller's region for initial read */ 2 25 3 region_final_lth fixed binary (21), /* set to # of characters placed in caller's region on exit */ 2 26 3 flags, 2 27 4 read_write_region bit (1) unaligned, /* ON => use caller's region as default for read/write; 2 28* OFF => use file specified by pathname as default */ 2 29 4 locked_pathname bit (1) unaligned, /* ON => read/write will never change default pathname or 2 30* prevent qedx from trusting the default path; 2 31* OFF => read with pathname sets ^trusted and write with 2 32* pathname changes the default */ 2 33 4 execute_buffer bit (1) unaligned, /* ON => execute it's contents before reading from terminal */ 2 34 /*** following switches apply only when read_write_region is ON ... */ 2 35 4 default_read_ok bit (1) unaligned, /* ON => r without explicit pathname is OK */ 2 36 4 default_write_ok bit (1) unaligned, /* ON => w without explicit pathname is OK */ 2 37 4 auto_write bit (1) unaligned, /* ON => automatically write buffer contents on "q" */ 2 38 4 truncated bit (1) unaligned, /* set ON => edited version is too long for caller's region */ 2 39 4 pad bit (29) unaligned; 2 40 2 41 dcl qedx_info_ptr pointer; 2 42 dcl qedx_info_n_buffers fixed binary; /* needed to allocate above structure */ 2 43 2 44 dcl QEDX_INFO_VERSION_1 character (8) static options (constant) initial ("qxi_01.1"); 2 45 2 46 /* END INCLUDE FILE ... qedx_info.incl.pl1 */ 166 167 168 end linus_qedx_the_query; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/29/86 0939.7 linus_qedx_the_query.pl1 >special_ldd>install>MR12.0-1106>linus_qedx_the_query.pl1 164 1 07/29/86 0937.8 linus_lcb.incl.pl1 >special_ldd>install>MR12.0-1106>linus_lcb.incl.pl1 166 2 05/04/83 1118.0 qedx_info.incl.pl1 >ldd>include>qedx_info.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. OFF constant bit(1) initial dcl 130 ref 73 110 120 ON constant bit(1) initial dcl 131 ref 85 111 121 122 123 124 QEDX_INFO_VERSION_1 000000 constant char(8) initial unaligned dcl 2-44 ref 108 addr builtin function dcl 133 ref 74 74 buffer_name 32 000102 automatic char(16) array level 3 packed unaligned dcl 149 set ref 114* buffer_pathname 36 000102 automatic char(256) array level 3 packed unaligned dcl 149 set ref 115* buffers 32 based structure array level 2 in structure "qedx_info" dcl 2-6 in procedure "linus_qedx_the_query" buffers 32 000102 automatic structure array level 2 in structure "qedx_information" dcl 149 in procedure "linus_qedx_the_query" code 000100 automatic fixed bin(35,0) dcl 135 set ref 61* 63 63* 74* 75 75 78 97* 99 99 102* default_read_ok 143(03) 000102 automatic bit(1) array level 4 packed unaligned dcl 149 set ref 123* default_write_ok 143(04) 000102 automatic bit(1) array level 4 packed unaligned dcl 149 set ref 124* editor_name 2 000102 automatic char(72) level 3 packed unaligned dcl 149 set ref 109* error_table_$fatal_error 000010 external static fixed bin(35,0) dcl 137 ref 75 error_table_$recoverable_error 000012 external static fixed bin(35,0) dcl 138 ref 78 flags 143 000102 automatic structure array level 3 in structure "qedx_information" dcl 149 in procedure "linus_qedx_the_query" set ref 120* flags 30 000102 automatic structure level 3 in structure "qedx_information" dcl 149 in procedure "linus_qedx_the_query" set ref 110* header 000102 automatic structure level 2 in structure "qedx_information" dcl 149 in procedure "linus_qedx_the_query" header based structure level 2 in structure "qedx_info" dcl 2-6 in procedure "linus_qedx_the_query" lcb based structure level 1 dcl 1-53 lcb_ptr 000254 automatic pointer dcl 1-121 set ref 61* 93* 95 97* lcb_ptr_parm parameter pointer dcl 39 ref 33 93 linus_error_$no_current_query 000014 external static fixed bin(35,0) dcl 142 ref 99 linus_query_mgr$get 000016 constant entry external dcl 143 ref 97 linus_query_mgr$put 000020 constant entry external dcl 144 ref 61 locked_pathname 143(01) 000102 automatic bit(1) array level 4 packed unaligned dcl 149 set ref 122* n_buffers 31 000102 automatic fixed bin(17,0) level 3 dcl 149 set ref 112* new_flag_parm parameter bit(1) dcl 40 ref 33 94 new_query 000101 automatic bit(1) dcl 146 set ref 94* 105 qedx_ 000022 constant entry external dcl 148 ref 74 qedx_info based structure level 1 dcl 2-6 qedx_information 000102 automatic structure level 1 dcl 149 set ref 74 74 query_if_modified 30(01) 000102 automatic bit(1) level 4 packed unaligned dcl 149 set ref 111* query_segment_length 000250 automatic fixed bin(21,0) dcl 153 set ref 97* 105* 118 query_segment_ptr 000246 automatic pointer dcl 152 set ref 61* 97* 116 query_should_be_replaced 000251 automatic bit(1) dcl 154 set ref 59 73* 85* quit_forced 30(03) 000102 automatic bit(1) level 4 packed unaligned dcl 149 set ref 78 read_write_region 143 000102 automatic bit(1) array level 4 packed unaligned dcl 149 set ref 121* region_final_lth 142 000102 automatic fixed bin(21,0) array level 3 dcl 149 set ref 61* region_initial_lth 141 000102 automatic fixed bin(21,0) array level 3 dcl 149 set ref 118* region_max_lth 140 000102 automatic fixed bin(21,0) array level 3 dcl 149 set ref 117* region_ptr 136 000102 automatic pointer array level 3 dcl 149 set ref 116* sci_ptr 000252 automatic pointer dcl 158 set ref 63* 75* 82* 95* 102* ssu_$abort_line 000024 constant entry external dcl 159 ref 63 75 82 102 subsystem_control_info_ptr 102 based pointer level 2 dcl 1-53 ref 95 sys_info$max_seg_size 000026 external static fixed bin(35,0) dcl 160 ref 117 unspec builtin function dcl 162 set ref 110* 120* version 000102 automatic char(8) level 3 dcl 149 set ref 108* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. fixed builtin function dcl 140 qedx_info_n_buffers automatic fixed bin(17,0) dcl 2-42 qedx_info_ptr automatic pointer dcl 2-41 rel builtin function dcl 156 NAMES DECLARED BY EXPLICIT CONTEXT. call_qedx 000067 constant entry internal dcl 71 ref 58 initialize 000156 constant entry internal dcl 91 ref 57 linus_qedx_the_query 000021 constant entry external dcl 33 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 426 456 275 436 Length 702 275 30 207 130 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_qedx_the_query 226 external procedure is an external procedure. call_qedx internal procedure shares stack frame of external procedure linus_qedx_the_query. initialize internal procedure shares stack frame of external procedure linus_qedx_the_query. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_qedx_the_query 000100 code linus_qedx_the_query 000101 new_query linus_qedx_the_query 000102 qedx_information linus_qedx_the_query 000246 query_segment_ptr linus_qedx_the_query 000250 query_segment_length linus_qedx_the_query 000251 query_should_be_replaced linus_qedx_the_query 000252 sci_ptr linus_qedx_the_query 000254 lcb_ptr linus_qedx_the_query THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. linus_query_mgr$get linus_query_mgr$put qedx_ ssu_$abort_line THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$fatal_error error_table_$recoverable_error linus_error_$no_current_query sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 33 000015 57 000026 58 000027 59 000030 61 000032 63 000047 69 000066 71 000067 73 000070 74 000071 75 000104 78 000127 81 000135 82 000136 85 000153 87 000155 91 000156 93 000157 94 000163 95 000166 97 000170 99 000205 102 000213 105 000227 108 000232 109 000234 110 000237 111 000240 112 000242 114 000244 115 000247 116 000252 117 000254 118 000260 120 000262 121 000263 122 000265 123 000267 124 000271 126 000273 ----------------------------------------------------------- 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