COMPILATION LISTING OF SEGMENT interpret_bind_map_ Compiled by: Multics PL/I Compiler, Release 28, of March 4, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 04/07/83 1223.7 mst Thu Options: optimize map 1 2 /* ****************************************************** 3* * * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* * * 9* ****************************************************** */ 10 11 12 interpret_bind_map_: procedure(loc_ptr, segname, new_offset, xcode); 13 14 /* initially coded as interpret_bind_map by M. Spier 21 May 1971 */ 15 /* converted to a subroutine by M. Weaver 17 June 1971 */ 16 /* last modified by M. Weaver 27 July 1971 */ 17 18 19 /* DECLARATION OF EXTERNAL ENTRIES */ 20 21 declare get_bound_seg_info_ entry(ptr, fixed bin(24), ptr, ptr, ptr, fixed bin); 22 declare hcs_$status_mins ext entry(ptr, fixed bin(2), fixed bin(24), fixed bin); 23 declare (error_table_$bad_segment, error_table_$name_not_found, error_table_$oldobj) ext fixed bin; 24 declare error_table_$not_bound ext fixed bin; 25 26 declare (addr, addrel, divide, fixed, null, ptr, rel, substr) builtin; 27 28 /* DECLARATION OF AUTOMATIC STORAGE VARIABLES */ 29 30 dcl xcode fixed bin; /* Parameter */ 31 declare (i,j,k,l,value,nargs,nopts,lng,arg_lng,link_offset,m,compsw) fixed bin; 32 declare new_offset fixed bin(18); 33 declare bitcount fixed bin(24); 34 declare type fixed bin(2); 35 declare store_value(2) fixed bin; /* so offsets will be more referenceable in a do loop */ 36 declare (defbase, t_lng, l_lng, s_lng, d_lng) fixed bin; 37 declare noff(2) fixed bin init(0,0); /* indicates whish components offsets are in */ 38 declare (loc_ptr, p, argp, objp, symb_addr, bmp, sblkp) pointer; 39 declare string char(50000) based; /* for looking at symbol table header */ 40 declare segname char(32) aligned; 41 42 dcl codep ptr, 43 (code based(codep), auto_code) fixed bin; 44 45 declare 1 symb_def aligned, 46 2 next_def pointer, 47 2 last_def pointer, 48 2 block_ptr pointer, 49 2 section char(4) aligned, 50 2 offset fixed bin, 51 2 entrypoint fixed bin, 52 2 defname char(32) aligned; 53 54 /* DECLARATION OF BASED STRUCTURES */ 55 56 declare 1 linkheader based aligned, 57 2 defseg fixed bin, 58 2 defoffset bit(18) unaligned, 59 2 dum1 bit(18) unaligned, 60 2 block_thread pointer, 61 2 dum2 pointer, 62 2 link_begin bit(18) unaligned, 63 2 sect_lng bit(18) unaligned; 64 65 declare var_string char(lng) based(p); 66 67 declare 1 symbol_header based aligned, /* structure of symbol table header */ 68 2 com_boff fixed bin aligned, /* offset of compiler name from symbp, in bits */ 69 2 (dum1,com_lng) bit(18) unal, /* length of compiler name, in bits */ 70 2 vers_boff fixed bin aligned, /* offset of version name, in bits */ 71 2 (dum2, vers_lng) bit(18) unal; /* length of version name */ 72 /* there's more but we don't want it here */ 73 /* */ 74 1 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 1 2*coded February 8, 1972 by Michael J. Spier */ 1 3 /* modified May 26, 1972 by M. Weaver */ 1 4 /* modified 15 April, 1975 by M. Weaver */ 1 5 1 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 1 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 1 8 2 textp pointer, /* pointer to beginning of text section */ 1 9 2 defp pointer, /* pointer to beginning of definition section */ 1 10 2 linkp pointer, /* pointer to beginning of linkage section */ 1 11 2 statp pointer, /* pointer to beginning of static section */ 1 12 2 symbp pointer, /* pointer to beginning of symbol section */ 1 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 1 14 2 tlng fixed bin, /* length in words of text section */ 1 15 2 dlng fixed bin, /* length in words of definition section */ 1 16 2 llng fixed bin, /* length in words of linkage section */ 1 17 2 ilng fixed bin, /* length in words of static section */ 1 18 2 slng fixed bin, /* length in words of symbol section */ 1 19 2 blng fixed bin, /* length in words of break map */ 1 20 2 format, /* word containing bit flags about object type */ 1 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 1 22 3 bound bit(1) unaligned, /* on if segment is bound */ 1 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 1 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 1 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 1 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 1 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 1 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 1 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 1 30 3 pad bit(27) unaligned, 1 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 1 32 2 textlinkp pointer, /* ptr to first link in text */ 1 33 1 34 /* LIMIT OF BRIEF STRUCTURE */ 1 35 1 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 1 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 1 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 1 39 2 cvers aligned, /* generator version name in printable char string form */ 1 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 1 41 3 length bit(18) unaligned, /* length of name in characters */ 1 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 1 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 1 44 3 length bit(18) unaligned, /* length of comment in characters */ 1 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 1 46 1 47 /* LIMIT OF DISPLAY STRUCTURE */ 1 48 1 49 2 rel_text pointer, /* pointer to text section relocation info */ 1 50 2 rel_def pointer, /* pointer to definition section relocation info */ 1 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 1 52 2 rel_static pointer, /* pointer to static section relocation info */ 1 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 1 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 1 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 1 56 /* currently not used by system */ 1 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 1 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 1 59 1 60 declare object_info_version_2 fixed bin int static init(2); 1 61 1 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 75 76 77 declare 1 oi structure aligned like object_info; 2 1 /* BEGIN INCLUDE SEGMENT ... symbol_block.incl.pl1 2 2*coded February 8, 1972 by Michael J. Spier */ 2 3 2 4 /* last modified may 3, 1972 by M. Weaver */ 2 5 2 6 declare 1 sb aligned based(sblkp), /* structure describing a standard symbol block */ 2 7 2 decl_vers fixed bin, /* version number of current structure format */ 2 8 2 identifier char(8) aligned, /* symbolic code to define purpose of this symb block */ 2 9 2 gen_version_number fixed bin, /* positive integer designating version of object generator */ 2 10 2 gen_creation_time fixed bin(71), /* clock reading of date/time generator was created */ 2 11 2 obj_creation_time fixed bin(71), /* clock reading of date/time object was generated */ 2 12 2 generator char(8) aligned, /* name of processor which generated segment */ 2 13 2 gen_name_offset bit(18) unaligned, /* offset of generator name in words rel to base of symbol block */ 2 14 2 gen_name_length bit(18) unaligned, /* length of printable generator version name in characters */ 2 15 2 uid_offset bit(18) unaligned, /* offset of creator id in words rel to base of symbol block */ 2 16 2 uid_length bit(18) unaligned, /* length of standard Multics id of object creator in characters */ 2 17 2 comment_offset bit(18) unaligned, /* offset of comment in words relative to base of symbol block */ 2 18 2 comment_length bit(18) unaligned, /* length of printable generator comment in characters */ 2 19 2 tbound bit(18) unaligned, /* specifies mod of text section base boundary */ 2 20 2 stat_bound bit(18) unaligned, /* specifies mod of internal static base boundary */ 2 21 2 source_map bit(18) unaligned, /* offset relative to base of symbol block of source map structure */ 2 22 2 area_ptr bit(18) unaligned, /* offset of block info in words relative to base of symbol block */ 2 23 2 symb_base bit(18) unaligned, /* back pointer (rel to base of symb block) to base of symb section */ 2 24 2 block_size bit(18) unaligned, /* size in words of entire symbol block */ 2 25 2 next_block bit(18) unaligned, /* if ^= "0"b, is thread (rel to base of symb section) to next symb block */ 2 26 2 rel_text bit(18) unaligned, /* offset rel to base of symbol block of text sect relocation info */ 2 27 2 rel_def bit(18) unaligned, /* offset rel to base of symb block of def section relocation info */ 2 28 2 rel_link bit(18) unaligned, /* offset rel to base of symb block of link sect relocation info */ 2 29 2 rel_symb bit(18) unaligned, /* offset rel to base of symb block of symb sect relocation info */ 2 30 2 default_truncate bit(18) unaligned, /* offset RTBOSB for binder to automatically trunc. symb sect. */ 2 31 2 optional_truncate bit(18) unaligned; /* offset RTBOSB for binder to optionally truncate symb section */ 2 32 2 33 /* END INCLUDE SEGMENT ... symbol_block.incl.pl1 */ 78 79 80 /* */ 81 82 83 /* */ 84 3 1 /* BEGIN INCLUDE SEGMENT ... bind_map.incl.pl1 Michael J. Spier, 4/29/71 */ 3 2 /* last modified April, 1972 by M. Weaver */ 3 3 3 4 declare 1 bindmap aligned based(bmp), 3 5 3 6 2 dcl_version fixed bin, /* version number of this structure = 1 */ 3 7 2 n_components fixed bin, /* number of entries in this array */ 3 8 2 component(0 refer(bindmap.n_components)) aligned, 3 9 3 name, /* objectname of component object */ 3 10 4 name_ptr bit(18) unaligned, /* pointer to name string */ 3 11 4 name_lng bit(18) unaligned, /* length of name string */ 3 12 3 comp_name char(8) aligned, /* name of component's compiler */ 3 13 3 text_start bit(18) unaligned, /* text section relocation counter */ 3 14 3 text_lng bit(18) unaligned, /* length of text section */ 3 15 3 stat_start bit(18) unaligned, /* internal static relocation counter */ 3 16 3 stat_lng bit(18) unaligned, /* length of internal static */ 3 17 3 symb_start bit(18) unaligned, /* symbol section relocation counter */ 3 18 3 symb_lng bit(18) unaligned, /* length of symbol section */ 3 19 3 defblock_ptr bit(18) unaligned, /* pointer to components definition block */ 3 20 3 n_blocks bit(18) unaligned, /* number of symbol blocks the component has */ 3 21 2 bf_name aligned, /* name of bindfile */ 3 22 3 bf_name_ptr bit(18) unaligned, /* pointer to name string */ 3 23 3 bf_name_lng bit(18) unaligned, /* length of name string */ 3 24 2 bf_date_up char(24), /* date updated in archive */ 3 25 2 bf_date_mod char(24); /* date last modified */ 3 26 3 27 /* END INCLUDE SEGMENT ... bind_map.incl.pl1 */ 85 86 87 /* */ 88 89 /* new_offset is not initialized to 0 because default_error_handler_ programs expect 90* its value to be changed only if there is something valid to change it to */ 91 compsw = 1; /* only looking for 1 offset */ 92 objp = ptr(loc_ptr,0); /* get ptr to base of object segment */ 93 store_value(1) = fixed(rel(loc_ptr),18); /* get desired offset */ 94 95 codep = addr(xcode); /* Set for proper reference */ 96 97 decode: call hcs_$status_mins(objp, type, bitcount, code); /* get bit count for decode definition */ 98 if code ^= 0 then return; /* can't do anything more */ 99 100 oi.version_number = object_info_version_2; 101 call get_bound_seg_info_(objp, bitcount, addr(oi), bmp, sblkp, code); 102 if code ^= 0 then do; /* 2 offsets are in same proc if seg not bound */ 103 if code = error_table_$not_bound then if compsw = 2 then samesw = "1"b; 104 return; 105 end; 106 107 display: 108 do m = 1 to compsw; /* do twice if comparing */ 109 value = store_value(m); /* use scalar for more speed */ 110 do j = 1 to n_components; /* look at values for each object component */ 111 k = fixed(component(j).text_start, 18); 112 l = fixed(component(j).text_lng, 18); 113 if value >= k then if value < k+l then do; 114 if compsw = 2 then do; /* just comparing */ 115 noff(m) = j; /* save component no. so can compare */ 116 go to end_display; /* don't look at any more now */ 117 end; 118 else do; /* want name */ 119 p = addrel(sblkp, component(j).name_ptr); 120 lng = fixed(component(j).name_lng, 18); 121 segname = var_string; /* copy name into argument */ 122 new_offset = value - k; /* calculate offset also */ 123 return; /* done */ 124 end; 125 end; 126 end; 127 128 code = error_table_$name_not_found; /* can't find component for ptr */ 129 return; 130 131 end_display: end; 132 133 if noff(1) = noff(2) then samesw = "1"b; /* offsets are in same procedure */ 134 return; 135 /* error_table_$different_procs */ 136 137 138 139 140 141 compare_offsets_: entry(object_ptr, off1, off2, samesw); 142 143 /* procedure to see if 2 offsets into the same bound segment belong to the same procedure */ 144 145 declare object_ptr ptr; /* ptr to beginning of bound segment */ 146 declare (off1, off2) fixed bin(18); /* offsets to be compared */ 147 declare samesw bit(1) aligned; /* indicates whether offsets are in same proc */ 148 149 compsw = 2; /* looking for 2 offsets */ 150 samesw = "0"b; /* set it to false until we are sure */ 151 objp = object_ptr; /* copy arg */ 152 store_value(1) = off1; /* save offsets so we can reference them in a do loop */ 153 store_value(2) = off2; 154 155 codep = addr(auto_code); /* no code parameter here */ 156 157 go to decode; /* go do rest */ 158 159 end interpret_bind_map_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/07/83 1051.5 interpret_bind_map_.pl1 >spec>on>pl1-dir>interpret_bind_map_.pl1 75 1 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_info.incl.pl1 78 2 05/06/74 1752.6 symbol_block.incl.pl1 >ldd>include>symbol_block.incl.pl1 85 3 09/18/74 1700.9 bind_map.incl.pl1 >ldd>include>bind_map.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 26 ref 95 101 101 155 addrel builtin function dcl 26 ref 119 auto_code 000130 automatic fixed bin(17,0) dcl 42 set ref 155 bindmap based structure level 1 dcl 3-4 bitcount 000107 automatic fixed bin(24,0) dcl 33 set ref 97* 101* bmp 000122 automatic pointer dcl 38 set ref 101* 110 111 112 119 120 code based fixed bin(17,0) dcl 42 set ref 97* 98 101* 102 103 128* codep 000126 automatic pointer dcl 42 set ref 95* 97 98 101 102 103 128 155* component 2 based structure array level 2 dcl 3-4 compsw 000106 automatic fixed bin(17,0) dcl 31 set ref 91* 103 107 114 149* error_table_$name_not_found 000014 external static fixed bin(17,0) dcl 23 ref 128 error_table_$not_bound 000016 external static fixed bin(17,0) dcl 24 ref 103 fixed builtin function dcl 26 ref 93 111 112 120 get_bound_seg_info_ 000010 constant entry external dcl 21 ref 101 hcs_$status_mins 000012 constant entry external dcl 22 ref 97 j 000100 automatic fixed bin(17,0) dcl 31 set ref 110* 111 112 115 119 120* k 000101 automatic fixed bin(17,0) dcl 31 set ref 111* 113 113 122 l 000102 automatic fixed bin(17,0) dcl 31 set ref 112* 113 lng 000104 automatic fixed bin(17,0) dcl 31 set ref 120* 121 loc_ptr parameter pointer dcl 38 ref 12 92 93 m 000105 automatic fixed bin(17,0) dcl 31 set ref 107* 109 115* n_components 1 based fixed bin(17,0) level 2 dcl 3-4 ref 110 name 2 based structure array level 3 dcl 3-4 name_lng 2(18) based bit(18) array level 4 packed unaligned dcl 3-4 ref 120 name_ptr 2 based bit(18) array level 4 packed unaligned dcl 3-4 ref 119 new_offset parameter fixed bin(18,0) dcl 32 set ref 12 122* noff 000114 automatic fixed bin(17,0) initial array dcl 37 set ref 37* 37* 115* 133 133 object_info based structure level 1 dcl 1-6 object_info_version_2 constant fixed bin(17,0) initial dcl 1-60 ref 100 object_ptr parameter pointer dcl 145 ref 141 151 objp 000120 automatic pointer dcl 38 set ref 92* 97* 101* 151* off1 parameter fixed bin(18,0) dcl 146 ref 141 152 off2 parameter fixed bin(18,0) dcl 146 ref 141 153 oi 000132 automatic structure level 1 dcl 77 set ref 101 101 p 000116 automatic pointer dcl 38 set ref 119* 121 ptr builtin function dcl 26 ref 92 rel builtin function dcl 26 ref 93 samesw parameter bit(1) dcl 147 set ref 103* 133* 141 150* sblkp 000124 automatic pointer dcl 38 set ref 101* 119 segname parameter char(32) dcl 40 set ref 12 121* store_value 000112 automatic fixed bin(17,0) array dcl 35 set ref 93* 109 152* 153* text_lng 5(18) based bit(18) array level 3 packed unaligned dcl 3-4 ref 112 text_start 5 based bit(18) array level 3 packed unaligned dcl 3-4 ref 111 type 000110 automatic fixed bin(2,0) dcl 34 set ref 97* value 000103 automatic fixed bin(17,0) dcl 31 set ref 109* 113 113 122 var_string based char unaligned dcl 65 ref 121 version_number 000132 automatic fixed bin(17,0) level 2 dcl 77 set ref 100* xcode parameter fixed bin(17,0) dcl 30 set ref 12 95 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. arg_lng automatic fixed bin(17,0) dcl 31 argp automatic pointer dcl 38 d_lng automatic fixed bin(17,0) dcl 36 defbase automatic fixed bin(17,0) dcl 36 divide builtin function dcl 26 error_table_$bad_segment external static fixed bin(17,0) dcl 23 error_table_$oldobj external static fixed bin(17,0) dcl 23 i automatic fixed bin(17,0) dcl 31 l_lng automatic fixed bin(17,0) dcl 36 link_offset automatic fixed bin(17,0) dcl 31 linkheader based structure level 1 dcl 56 nargs automatic fixed bin(17,0) dcl 31 nopts automatic fixed bin(17,0) dcl 31 null builtin function dcl 26 s_lng automatic fixed bin(17,0) dcl 36 sb based structure level 1 dcl 2-6 string based char(50000) unaligned dcl 39 substr builtin function dcl 26 symb_addr automatic pointer dcl 38 symb_def automatic structure level 1 dcl 45 symbol_header based structure level 1 dcl 67 t_lng automatic fixed bin(17,0) dcl 36 NAMES DECLARED BY EXPLICIT CONTEXT. compare_offsets_ 000246 constant entry external dcl 141 decode 000047 constant label dcl 97 set ref 157 display 000127 constant label dcl 107 end_display 000230 constant label dcl 131 ref 116 interpret_bind_map_ 000024 constant entry external dcl 12 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 372 412 272 402 Length 634 272 20 206 77 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME interpret_bind_map_ 175 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME interpret_bind_map_ 000100 j interpret_bind_map_ 000101 k interpret_bind_map_ 000102 l interpret_bind_map_ 000103 value interpret_bind_map_ 000104 lng interpret_bind_map_ 000105 m interpret_bind_map_ 000106 compsw interpret_bind_map_ 000107 bitcount interpret_bind_map_ 000110 type interpret_bind_map_ 000112 store_value interpret_bind_map_ 000114 noff interpret_bind_map_ 000116 p interpret_bind_map_ 000120 objp interpret_bind_map_ 000122 bmp interpret_bind_map_ 000124 sblkp interpret_bind_map_ 000126 codep interpret_bind_map_ 000130 auto_code interpret_bind_map_ 000132 oi interpret_bind_map_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_bound_seg_info_ hcs_$status_mins THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$name_not_found error_table_$not_bound LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 37 000006 12 000017 91 000032 92 000034 93 000040 95 000045 97 000047 98 000064 100 000066 101 000070 102 000113 103 000115 104 000126 107 000127 109 000137 110 000141 111 000151 112 000157 113 000162 114 000172 115 000175 116 000200 119 000201 120 000206 121 000211 122 000216 123 000221 126 000222 128 000224 129 000227 131 000230 133 000232 134 000240 141 000241 149 000254 150 000256 151 000260 152 000263 153 000265 155 000267 157 000271 ----------------------------------------------------------- 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