COMPILATION LISTING OF SEGMENT cobol_mpy3 Compiled by: Multics PL/I Compiler, Release 31b, of April 24, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 05/24/89 0943.6 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(89-04-23,Zimmerman), approve(89-04-23,MCR8060), 12* audit(89-05-05,RWaters), install(89-05-24,MR12.3-1048): 13* MCR8060 cobol_mpy3.pl1 Added Trace statements. 14* END HISTORY COMMENTS */ 15 16 17 /* format: style3 */ 18 19 /* ****************************************************** 20* * * 21* * * 22* * Copyright (c) 1972 by Massachusetts Institute of * 23* * Technology and Honeywell Information Systems, Inc. * 24* * * 25* * * 26* ****************************************************** */ 27 28 /* Modified on 11/16/84 by FCH, [5.3...], trace added */ 29 /* Modified on 10/19/84 by FCH, [4.3-1], BUG563(phx18381), new cobol_addr_tokens.incl.pl1 */ 30 /* Modified since Version 2.0 */ 31 32 33 34 35 36 /*{*/ 37 cobol_mpy3: 38 proc (operand1_ptr, operand2_ptr, result_ptr, opcode_code); 39 40 /* 41*This procedure generates code for the following types of Cobol constructs: 42* 43* 1. MULTIPLY A BY B GIVING C. 44* 2. DIVIDE A BY B GIVING C. 45* 46*This procedure makes one important assumption about the 47*input operands: The operands to be multiplied (or divided) are 48*both represented by data name (type 9) tokens. That is, any 49*conversion of the operands from numeric literal or figurative 50*constant has already been done before this procedure is called. 51* 52**/ 53 54 /* Note that if the "rounded" bit is on in the token pointed at 55*by result_ptr, then the code generated will perform 56*multiplication/division with rounding. */ 57 58 /* DECLARATION OF THE PARAMETERS */ 59 60 dcl operand1_ptr ptr; 61 dcl operand2_ptr ptr; 62 dcl result_ptr ptr; 63 dcl opcode_code fixed bin (35); 64 65 /* 66*operand1_ptr Points to the token for the multiplicand or 67* dividend, depending on whether code is to 68* be generated for multiplication or division, 69* respectively. (input) 70*operand2_ptr Points to the token for the multiplier or 71* divisor, depending on whether code is to be 72* generated for addition or subtraction, 73* respectively. (input) 74*result_ptr Points to the token to receive the product 75* or quotient, depending on whether code it to 76* be generated for multiplication or division, 77* respectively. (input) 78*opcode_code A code that indicates whether code is to be generated 79* for an multiplication or division. (input) 80* 81* opcode_code | meaning 82* ------------------------------------- 83* 1 | multilplication 84* 2 | division 85* 86**/ 87 88 /* DECLARATION OF EXTERNAL ENTRIES */ 89 90 dcl cobol_addr ext entry (ptr, ptr, ptr); 91 dcl cobol_emit ext entry (ptr, ptr, fixed bin); 92 93 94 /* DECLARATION OF INTERNAL STATIC VARIABLES */ 95 96 /* Declaration of internal static variables that contain 97* MP3D and DV3D opcodes */ 98 99 dcl mp3d_op bit (10) int static init ("0100101101"b /*226(1)*/); 100 dcl dv3d_op bit (10) int static init ("0100101111"b /*227(1)*/); 101 102 103 /* DECLARATION OF INTERNAL AUTOMATIC VARIABLES */ 104 105 /* Declaration of buffers used by the addressability utility */ 106 107 /* Relocation info buffer */ 108 dcl reloc_buffer (1:10) fixed bin; 109 110 /* instruction/descriptor buffer */ 111 dcl addr_inst_buffer (1:10) fixed bin; 112 113 /* addressability input buffer */ 114 dcl addr_input_buffer (1:30) fixed bin; 115 dcl dn_ptr ptr; 116 117 118 /**************************************************/ 119 /* START OF EXECUTION */ 120 /* cobol_mpy3 */ 121 /**************************************************/ 122 123 /***..... if Trace_Bit then call cobol_gen_driver_$Tr_Beg(cm3);/**/ 124 125 126 /* Point pointers at the buffers used to establish addressability */ 127 128 reloc_ptr = addr (reloc_buffer (1)); 129 input_ptr = addr (addr_input_buffer (1)); 130 inst_ptr = addr (addr_inst_buffer (1)); 131 132 /* Build the input structure to the addressability utility */ 133 134 input_struc.type = 6; /* eis, 3 input operands, instruction word and 3 descriptors returned */ 135 input_struc.operand_no = 3; 136 input_struc.lock = 0; /* no locks */ 137 138 input_struc.operand.token_ptr (1) = operand1_ptr; 139 input_struc.operand.send_receive (1) = 0; /* sending */ 140 input_struc.operand.size_sw (1) = 0; /* utility worries about size */ 141 142 input_struc.operand.token_ptr (2) = operand2_ptr; 143 input_struc.operand.send_receive (2) = 0; /* sending */ 144 input_struc.operand.size_sw (2) = 0; 145 146 input_struc.operand.token_ptr (3) = result_ptr; 147 input_struc.operand.send_receive (3) = 1; /* receiving */ 148 input_struc.operand.size_sw (3) = 0; 149 150 /* Set the proper opcode into the eis instruction */ 151 if opcode_code = 1 /* mpy */ 152 then inst_struc.fill1_op = mp3d_op; 153 else inst_struc.fill1_op = dv3d_op; 154 155 /* Establish the addresses */ 156 157 call cobol_addr (input_ptr, inst_ptr, reloc_ptr); 158 159 /* Set the rounding bit in the eis instruction if necessary */ 160 if result_ptr -> data_name.rounded 161 then inst_struc.zero3 = "01"b; /* TRUNCATION OFF, ROUNDING ON */ 162 163 /* Emit the eis instruction and 3 descriptors */ 164 165 call cobol_emit (inst_ptr, reloc_ptr, 4); 166 167 /***..... if Trace_Bit then call cobol_gen_driver_$Tr_End(cm3);/**/ 168 169 return; 170 171 /***..... dcl cm3 char(10) init("COBOL_MPY3");/**/ 172 173 /***..... dcl cobol_gen_driver_$Tr_Beg entry(char(*));/**/ 174 /***..... dcl cobol_gen_driver_$Tr_End entry(char(*));/**/ 175 176 /***..... dcl Trace_Bit bit(1) static external;/**/ 177 /***..... dcl Trace_Lev fixed bin static external;/**/ 178 /***..... dcl Trace_Line char(36) static external;/**/ 179 /***..... dcl ioa_ entry options(variable); /**/ 180 181 182 /* INCLUDE FILES USED BY THIS PROCEDURE */ 183 184 185 /***** Declaration for builtin function *****/ 186 187 dcl (substr, mod, binary, fixed, addr, addrel, rel, length, string, unspec, null, index) 188 builtin; 189 190 /***** End of declaration for builtin function *****/ 191 1 1 1 2 /* BEGIN INCLUDE FILE ... cobol_type9.incl.pl1 */ 1 3 /* Last modified on 11/19/76 by ORN */ 1 4 1 5 /* 1 6*A type 9 data name token is entered into the name table by the data 1 7*division syntax phase for each data name described in the data division. 1 8*The replacement phase subsequently replaces type 8 user word references 1 9*to data names in the procedure division minpral file with the corresponding 1 10*type 9 tokens from the name table. 1 11**/ 1 12 1 13 /* dcl dn_ptr ptr; */ 1 14 1 15 /* BEGIN DECLARATION OF TYPE9 (DATA NAME) TOKEN */ 1 16 dcl 1 data_name based (dn_ptr), 2 1 2 2 /* begin include file ... cobol_TYPE9.incl.pl1 */ 2 3 /* Last modified on 06/19/77 by ORN */ 2 4 /* Last modified on 12/28/76 by FCH */ 2 5 2 6 /* header */ 2 7 2 size fixed bin, 2 8 2 line fixed bin, 2 9 2 column fixed bin, 2 10 2 type fixed bin, 2 11 /* body */ 2 12 2 string_ptr ptr, 2 13 2 prev_rec ptr, 2 14 2 searched bit (1), 2 15 2 duplicate bit (1), 2 16 2 saved bit (1), 2 17 2 debug_ind bit (1), 2 18 2 filler2 bit (3), 2 19 2 used_as_sub bit (1), 2 20 2 def_line fixed bin, 2 21 2 level fixed bin, 2 22 2 linkage fixed bin, 2 23 2 file_num fixed bin, 2 24 2 size_rtn fixed bin, 2 25 2 item_length fixed bin(24), 2 26 2 places_left fixed bin, 2 27 2 places_right fixed bin, 2 28 /* description */ 2 29 2 file_section bit (1), 2 30 2 working_storage bit (1), 2 31 2 constant_section bit (1), 2 32 2 linkage_section bit (1), 2 33 2 communication_section bit (1), 2 34 2 report_section bit (1), 2 35 2 level_77 bit (1), 2 36 2 level_01 bit (1), 2 37 2 non_elementary bit (1), 2 38 2 elementary bit (1), 2 39 2 filler_item bit (1), 2 40 2 s_of_rdf bit (1), 2 41 2 o_of_rdf bit (1), 2 42 2 bin_18 bit (1), 2 43 2 bin_36 bit (1), 2 44 2 pic_has_l bit (1), 2 45 2 pic_is_do bit (1), 2 46 2 numeric bit (1), 2 47 2 numeric_edited bit (1), 2 48 2 alphanum bit (1), 2 49 2 alphanum_edited bit (1), 2 50 2 alphabetic bit (1), 2 51 2 alphabetic_edited bit (1), 2 52 2 pic_has_p bit (1), 2 53 2 pic_has_ast bit (1), 2 54 2 item_signed bit(1), 2 55 2 sign_separate bit (1), 2 56 2 display bit (1), 2 57 2 comp bit (1), 2 58 2 ascii_packed_dec_h bit (1), /* as of 8/16/76 this field used for comp8. */ 2 59 2 ascii_packed_dec bit (1), 2 60 2 ebcdic_packed_dec bit (1), 2 61 2 bin_16 bit (1), 2 62 2 bin_32 bit (1), 2 63 2 usage_index bit (1), 2 64 2 just_right bit (1), 2 65 2 compare_argument bit (1), 2 66 2 sync bit (1), 2 67 2 temporary bit (1), 2 68 2 bwz bit (1), 2 69 2 variable_length bit (1), 2 70 2 subscripted bit (1), 2 71 2 occurs_do bit (1), 2 72 2 key_a bit (1), 2 73 2 key_d bit (1), 2 74 2 indexed_by bit (1), 2 75 2 value_numeric bit (1), 2 76 2 value_non_numeric bit (1), 2 77 2 value_signed bit (1), 2 78 2 sign_type bit (3), 2 79 2 pic_integer bit (1), 2 80 2 ast_when_zero bit (1), 2 81 2 label_record bit (1), 2 82 2 sign_clause_occurred bit (1), 2 83 2 okey_dn bit (1), 2 84 2 subject_of_keyis bit (1), 2 85 2 exp_redefining bit (1), 2 86 2 sync_in_rec bit (1), 2 87 2 rounded bit (1), 2 88 2 ad_bit bit (1), 2 89 2 debug_all bit (1), 2 90 2 overlap bit (1), 2 91 2 sum_counter bit (1), 2 92 2 exp_occurs bit (1), 2 93 2 linage_counter bit (1), 2 94 2 rnm_01 bit (1), 2 95 2 aligned bit (1), 2 96 2 not_user_writable bit (1), 2 97 2 database_key bit (1), 2 98 2 database_data_item bit (1), 2 99 2 seg_num fixed bin, 2 100 2 offset fixed bin(24), 2 101 2 initial_ptr fixed bin, 2 102 2 edit_ptr fixed bin, 2 103 2 occurs_ptr fixed bin, 2 104 2 do_rec char(5), 2 105 2 bitt bit (1), 2 106 2 byte bit (1), 2 107 2 half_word bit (1), 2 108 2 word bit (1), 2 109 2 double_word bit (1), 2 110 2 half_byte bit (1), 2 111 2 filler5 bit (1), 2 112 2 bit_offset bit (4), 2 113 2 son_cnt bit (16), 2 114 2 max_red_size fixed bin(24), 2 115 2 name_size fixed bin, 2 116 2 name char(0 refer(data_name.name_size)); 2 117 2 118 2 119 2 120 /* end include file ... cobol_TYPE9.incl.pl1 */ 2 121 1 17 1 18 /* END DECLARATION OF TYPE9 (DATA NAME) TOKEN */ 1 19 1 20 /* END INCLUDE FILE ... cobol_type9.incl.pl1 */ 1 21 192 193 194 3 1 3 2 /* BEGIN INCLUDE FILE ... cobol_addr_tokens.incl.pl1 */ 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(89-04-23,Zimmerman), approve(89-04-23,MCR8058), 3 7* audit(89-05-05,RWaters), install(89-05-24,MR12.3-1048): 3 8* MCR8058 cobol_addr_tokens.incl.pl1 Change array extents to refer to 3 9* constants rather than variables. 3 10* END HISTORY COMMENTS */ 3 11 3 12 3 13 /* Last modified on 10/1/74 by tg */ 3 14 3 15 3 16 /* parameter list */ 3 17 3 18 dcl (input_ptr, inst_ptr, reloc_ptr) ptr; 3 19 3 20 3 21 /* input_struc_basic is used for type 1 addressing */ 3 22 3 23 dcl 1 input_struc_basic based (input_ptr), 3 24 2 type fixed bin, 3 25 2 operand_no fixed bin, 3 26 2 lock fixed bin, 3 27 2 segno fixed bin, 3 28 2 char_offset fixed bin (24), 3 29 2 send_receive fixed bin; 3 30 3 31 3 32 dcl 1 input_struc based (input_ptr), 3 33 2 type fixed bin, 3 34 2 operand_no fixed bin, 3 35 2 lock fixed bin, 3 36 2 operand (0 refer (input_struc.operand_no)), 3 37 3 token_ptr ptr, 3 38 3 send_receive fixed bin, 3 39 3 ic_mod fixed bin, 3 40 3 size_sw fixed bin; 3 41 3 42 /* reloc_struc is used for all types of addressing * all types */ 3 43 3 44 dcl 1 reloc_struc (input_struc.operand_no + 1) based (reloc_ptr), 3 45 2 left_wd bit (5) aligned, 3 46 2 right_wd bit (5) aligned; 3 47 3 48 /* Instruction format for 1 word instruction */ 3 49 3 50 3 51 dcl 1 inst_struc_basic based (inst_ptr) aligned, 3 52 2 y unaligned, 3 53 3 pr bit (3) unaligned, 3 54 3 wd_offset bit (15) unaligned, 3 55 2 fill1_op bit (10) unaligned, 3 56 2 zero1 bit (1) unaligned, 3 57 2 pr_spec bit (1) unaligned, 3 58 2 tm bit (2) unaligned, 3 59 2 td bit (4) unaligned; 3 60 3 61 3 62 /* The detailed definitions of the fields in this structure 3 63* can be found in the GMAP manual section 8 */ 3 64 /* EIS instruction format for 2_4 word instructions */ 3 65 3 66 dcl 1 inst_struc based (inst_ptr) aligned, 3 67 2 inst unaligned, 3 68 3 zero1 bit (2) unaligned, 3 69 3 mf3 unaligned, 3 70 4 pr_spec bit (1) unaligned, 3 71 4 reg_or_length bit (1) unaligned, 3 72 4 zero2 bit (1) unaligned, 3 73 4 reg_mod bit (4) unaligned, 3 74 3 zero3 bit (2) unaligned, 3 75 3 mf2 unaligned, 3 76 4 pr_spec bit (1) unaligned, 3 77 4 reg_or_length bit (1) unaligned, 3 78 4 zero4 bit (1) unaligned, 3 79 4 reg_mod bit (4) unaligned, 3 80 3 fill1_op bit (10) unaligned, 3 81 3 zero5 bit (1) unaligned, 3 82 3 mf1 unaligned, 3 83 4 pr_spec bit (1) unaligned, 3 84 4 reg_or_length bit (1) unaligned, 3 85 4 zero6 bit (1) unaligned, 3 86 4 reg_mod bit (4) unaligned, 3 87 2 desc_ext unaligned, 3 88 3 desc (512) unaligned, 3 89 4 desc_od bit (36) unaligned; 3 90 3 91 /* The detailed definitions of the fields in this structure 3 92* can be found in the GMAP manual section 8. 3 93* The desc_ext is the descriptor extension of this eis 3 94* instruction. The number of descriptors associated with 3 95* this instruction is equavalent to the operand number. 3 96* Depending on operand data type, the descriptor 3 97* can be alphanumeric or numeric. The structures of the 3 98* alphanumeric and the numeric descriptors are defined 3 99* below. */ 3 100 3 101 /* alphanumeric descriptor format */ 3 102 3 103 dcl 1 desc_an based (desc_an_ptr) unaligned, 3 104 2 desc_f (512) unaligned, 3 105 3 y unaligned, 3 106 4 pr bit (3) unaligned, 3 107 4 wd_offset bit (15) unaligned, 3 108 3 char_n bit (3) unaligned, 3 109 3 zero1 bit (1) unaligned, 3 110 3 ta bit (2), 3 111 3 n bit (12) unaligned; 3 112 3 113 3 114 /* The detailed definitions of the fields in this structure can 3 115* be found in the GMAP manual section 8. */ 3 116 /* numeric descriptor format */ 3 117 3 118 dcl desc_nn_ptr ptr; 3 119 dcl desc_an_ptr ptr; 3 120 3 121 3 122 dcl 1 desc_nn based (desc_nn_ptr) unaligned, 3 123 2 desc_f (512) unaligned, 3 124 3 y unaligned, 3 125 4 pr bit (3) unaligned, 3 126 4 wd_offset bit (15) unaligned, 3 127 3 digit_n bit (3) unaligned, 3 128 3 tn bit (1) unaligned, 3 129 3 sign_type bit (2) unaligned, 3 130 3 scal bit (6) unaligned, 3 131 3 n bit (6) unaligned; 3 132 3 133 3 134 /* The detailed definitions of fields in this structure can 3 135* be found in the GMAP manual section 8. */ 3 136 /* END INCLUDE FILE ... cobol_addr_tokens.incl.pl1 */ 3 137 195 196 197 /**************************************************/ 198 /* END OF PROCEDDURE */ 199 /* cobol_add3 */ 200 /*************************************************/ 201 202 end cobol_mpy3; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/24/89 0830.4 cobol_mpy3.pl1 >spec>install>MR12.3-1048>cobol_mpy3.pl1 192 1 03/27/82 0439.9 cobol_type9.incl.pl1 >ldd>include>cobol_type9.incl.pl1 1-17 2 11/11/82 1712.7 cobol_TYPE9.incl.pl1 >ldd>include>cobol_TYPE9.incl.pl1 195 3 05/24/89 0811.7 cobol_addr_tokens.incl.pl1 >spec>install>MR12.3-1048>cobol_addr_tokens.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. addr builtin function dcl 187 ref 128 129 130 addr_input_buffer 000124 automatic fixed bin(17,0) array dcl 114 set ref 129 addr_inst_buffer 000112 automatic fixed bin(17,0) array dcl 111 set ref 130 cobol_addr 000010 constant entry external dcl 90 ref 157 cobol_emit 000012 constant entry external dcl 91 ref 165 data_name based structure level 1 unaligned dcl 1-16 dv3d_op constant bit(10) initial packed unaligned dcl 100 ref 153 fill1_op 0(18) based bit(10) level 3 packed packed unaligned dcl 3-66 set ref 151* 153* input_ptr 000162 automatic pointer dcl 3-18 set ref 129* 134 135 136 138 139 140 142 143 144 146 147 148 157* input_struc based structure level 1 unaligned dcl 3-32 inst based structure level 2 packed packed unaligned dcl 3-66 inst_ptr 000164 automatic pointer dcl 3-18 set ref 130* 151 153 157* 160 165* inst_struc based structure level 1 dcl 3-66 lock 2 based fixed bin(17,0) level 2 dcl 3-32 set ref 136* mp3d_op constant bit(10) initial packed unaligned dcl 99 ref 151 opcode_code parameter fixed bin(35,0) dcl 63 ref 37 151 operand 4 based structure array level 2 unaligned dcl 3-32 operand1_ptr parameter pointer dcl 60 ref 37 138 operand2_ptr parameter pointer dcl 61 ref 37 142 operand_no 1 based fixed bin(17,0) level 2 dcl 3-32 set ref 135* reloc_buffer 000100 automatic fixed bin(17,0) array dcl 108 set ref 128 reloc_ptr 000166 automatic pointer dcl 3-18 set ref 128* 157* 165* result_ptr parameter pointer dcl 62 ref 37 146 160 rounded 22(24) based bit(1) level 2 packed packed unaligned dcl 1-16 ref 160 send_receive 6 based fixed bin(17,0) array level 3 dcl 3-32 set ref 139* 143* 147* size_sw 10 based fixed bin(17,0) array level 3 dcl 3-32 set ref 140* 144* 148* token_ptr 4 based pointer array level 3 dcl 3-32 set ref 138* 142* 146* type based fixed bin(17,0) level 2 dcl 3-32 set ref 134* zero3 0(09) based bit(2) level 3 packed packed unaligned dcl 3-66 set ref 160* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. addrel builtin function dcl 187 binary builtin function dcl 187 desc_an based structure level 1 packed packed unaligned dcl 3-103 desc_an_ptr automatic pointer dcl 3-119 desc_nn based structure level 1 packed packed unaligned dcl 3-122 desc_nn_ptr automatic pointer dcl 3-118 dn_ptr automatic pointer dcl 115 fixed builtin function dcl 187 index builtin function dcl 187 input_struc_basic based structure level 1 unaligned dcl 3-23 inst_struc_basic based structure level 1 dcl 3-51 length builtin function dcl 187 mod builtin function dcl 187 null builtin function dcl 187 rel builtin function dcl 187 reloc_struc based structure array level 1 unaligned dcl 3-44 string builtin function dcl 187 substr builtin function dcl 187 unspec builtin function dcl 187 NAME DECLARED BY EXPLICIT CONTEXT. cobol_mpy3 000007 constant entry external dcl 37 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 166 202 126 176 Length 422 126 14 203 40 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME cobol_mpy3 129 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cobol_mpy3 000100 reloc_buffer cobol_mpy3 000112 addr_inst_buffer cobol_mpy3 000124 addr_input_buffer cobol_mpy3 000162 input_ptr cobol_mpy3 000164 inst_ptr cobol_mpy3 000166 reloc_ptr cobol_mpy3 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cobol_addr cobol_emit NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 37 000002 128 000014 129 000016 130 000020 134 000022 135 000024 136 000026 138 000027 139 000033 140 000034 142 000035 143 000040 144 000041 146 000042 147 000045 148 000047 151 000050 153 000060 157 000064 160 000076 165 000110 169 000125 ----------------------------------------------------------- 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