COMPILATION LISTING OF SEGMENT apl_display_map Compiled by: Experimental PL/I Compiler of Friday, July 31, 1981 at 13:16 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 08/08/81 1947.7 mst Sat Options: optimize map 1 /* ****************************************************** 2* * * 3* * * 4* * Copyright (c) 1972 by Massachusetts Institute of * 5* * Technology and Honeywell Information Systems, Inc. * 6* * * 7* * * 8* ****************************************************** */ 9 10 apl_display_map: 11 adm: 12 procedure; 13 14 /* This program dumps out the apl storage system data. */ 15 16 /* Written 750905 by PG to track down hideous re-used storage bug */ 17 /* Modified 790327 by PG to rename from apl_dump_map, and to print more info */ 18 19 /* automatic */ 20 21 declare global_storage_system_data_pointer 22 ptr, 23 segx fixed bin; 24 25 /* builtins */ 26 27 declare (binary, divide, hbound, lbound, mod, null, string, unspec) 28 builtin; 29 30 /* entries */ 31 32 declare com_err_ entry options (variable), 33 ioa_ entry options (variable); 34 35 /* internal static */ 36 37 declare ( 38 my_name char (15) initial ("apl_display_map"), 39 type_names dim (4) char (12) varying initial ("available", "value stack", "little seg", "big seg") 40 ) internal static options (constant); 41 42 /* include files */ 43 1 1 /* ====== BEGIN INCLUDE SEGMENT apl_number_data.incl.pl1 ================================== */ 1 2 1 3 /* 1 4* This include file contains information about the machine representation of numbers. 1 5* In all programs numbers should simply be declared 'float'. 1 6* All default statements should be in this include file. 1 7* 1 8* This is the binary version. The manifest constant Binary should be used by programs 1 9* that need to know whether we are using binary or decimal. 1 10* */ 1 11 1 12 /* format: style3,initlm0,idind30 */ 1 13 1 14 default (float & ^decimal & ^binary & ^precision & ^constant) float binary (63); 1 15 1 16 declare ( 1 17 TheBiggestNumberWeveGot float initial (0.1701411834604692317e+39), 1 18 TheSmallestNumberWeveGot float initial (.1469367938527859385e-38), 1 19 Binary bit (1) aligned initial ("1"b) 1 20 ) internal static options (constant); 1 21 1 22 /* Number of characters in a number datum entry; used for copying float number arrays as strings. 1 23* (Obsolete! use array copies!) */ 1 24 1 25 declare NumberSize fixed binary precision (4) internal static initial (8); 1 26 1 27 /* ------ END INCLUDE SEGMENT apl_number_data.incl.pl1 ---------------------------------- */ 44 2 1 /* ====== BEGIN INCLUDE SEGMENT apl_ws_info.incl.pl1 ====================================== */ 2 2 2 3 /* This structure contains all of the global data (or pointers to it) for the APL subsystem */ 2 4 2 5 /* automatic */ 2 6 2 7 declare ws_info_ptr ptr initial (apl_static_$ws_info_ptr.static_ws_info_ptr); 2 8 2 9 /* external static */ 2 10 2 11 declare 1 apl_static_$ws_info_ptr external static aligned structure, 2 12 2 static_ws_info_ptr unaligned pointer; 2 13 2 14 /* based */ 2 15 2 16 declare 1 ws_info aligned based (ws_info_ptr), 2 17 2 version_number fixed bin, /* version of this structure (3) */ 2 18 2 switches unaligned, /* mainly ws parameters */ 2 19 3 long_error_mode bit, /* if 1, long Multics format, else APL/360 format */ 2 20 3 debug_mode bit, /* if 1, system error causes escape to command level */ 2 21 3 canonicalize_mode bit, /* if 1, the editor canonicalizes user input */ 2 22 3 restrict_exec_command bit, /* if 1, the )EXEC command may not be used */ 2 23 3 restrict_debug_command bit, /* if 1, the )DEBUG command may not be used */ 2 24 3 restrict_external_functions 2 25 bit, /* if 1, the )ZFN, )MFN, and )DFN commands may not be used */ 2 26 3 restrict_load bit, /* if 1, the )LOAD and )COPY commands may not be used */ 2 27 3 restrict_load_directory bit, /* if 1, no directory allowed in )LOAD or )COPY pathnames */ 2 28 3 restrict_save bit, /* if 1, the )SAVE command may not be used */ 2 29 3 restrict_save_directory bit, /* if 1, no directory allowed in )SAVE pathnames */ 2 30 3 off_hold bit, /* if 1, )OFF HOLD was typed, else just )OFF */ 2 31 3 transparent_to_signals bit, /* if 1, any conditions slip right past APL */ 2 32 3 meter_mode bit, /* if 1, metering may be done, else speed is all-important */ 2 33 3 restrict_msg_command bit, /* if 1, the )MSG command may not be used. */ 2 34 3 compatibility_check_mode 2 35 bit, /* if 1, check for incompatible operators */ 2 36 3 no_quit_handler bit, /* if 1, do not trap QUITs. */ 2 37 /* remaining 20 bits not presently used */ 2 38 2 39 2 values, /* attributes of the workspace */ 2 40 3 digits fixed bin, /* number of digits of precision printed on output */ 2 41 3 width fixed bin, /* line length for formatted output */ 2 42 3 index_origin fixed bin, /* the index origin (0 or 1) */ 2 43 3 random_link fixed bin(35), /* seed for random number generator */ 2 44 3 fuzz float, /* comparison tolerance (relative fuzz) */ 2 45 3 float_index_origin float, /* the index origin in floating point */ 2 46 3 number_of_symbols fixed bin, /* the number of symbol_beads currently in existence */ 2 47 3 maximum_value_stack_size 2 48 fixed bin (18), /* maximum number of words in one segment of value stack */ 2 49 2 50 2 pointers, /* pointers to various internal tables */ 2 51 3 symbol_table_ptr unaligned pointer, /* -> symbol_table (apl_symbol_table.incl.pl1) */ 2 52 3 current_parse_frame_ptr unaligned pointer, /* -> topmost parse frame */ 2 53 3 value_stack_ptr unaligned pointer, /* -> next free location on value stack */ 2 54 3 alloc_free_info_ptr unaligned pointer, /* -> apl_storage_mngr_ data (apl_storage_system_data.incl.pl1) */ 2 55 2 56 2 time_invoked fixed bin(71), /* clock time that APL was entered */ 2 57 2 integer_fuzz float, /* the absolute fuzz used in checking for integers */ 2 58 2 user_number fixed bin(35), /* number under which the user is signed on */ 2 59 2 latent_expression unaligned pointer, /* -> value_bead for QuadLX */ 2 60 2 lock char(32), /* the lock currently set on this workspace (password) */ 2 61 2 wsid char(100), /* the workspace identification: name, number name, or clear ws */ 2 62 2 last_error_code fixed bin(35), /* last code passed to apl_error_ */ 2 63 2 signoff_lock character (32), 2 64 2 65 2 interrupt_info aligned, /* bits used by apl_interpreter_ to tell when to abort */ 2 66 3 dont_interrupt_parse bit, /* if 1, don't do a dirty stop because the parser is running */ 2 67 3 dont_interrupt_operator bit, /* if 1, don't do a dirty stop because an operator is running */ 2 68 3 dont_interrupt_storage_manager /* if 1, don't stop because apl_storage_mngr_ is */ 2 69 bit, /* munging his tables */ 2 70 3 unused_interrupt_bit bit, /* not presently used */ 2 71 3 dont_interrupt_command bit, 2 72 3 can_be_interrupted bit, /* if 1, OK to do a clean stop (we are between lines, reading) */ 2 73 3 clean_interrupt_pending bit, /* interrupt occured, break cleanly (between lines) */ 2 74 3 dirty_interrupt_pending bit, /* interrupt occured, break as soon as not inhibited */ 2 75 2 76 2 user_name char (32), /* process group id of user */ 2 77 2 immediate_input_prompt char (32) varying, /* normal input */ 2 78 2 evaluated_input_prompt char (32) varying, /* quad input */ 2 79 2 character_input_prompt char (32) varying, /* quad-quote input */ 2 80 2 vcpu_time aligned, 2 81 3 total fixed bin (71), 2 82 3 setup fixed bin (71), 2 83 3 parse fixed bin (71), 2 84 3 lex fixed bin (71), 2 85 3 operator fixed bin (71), 2 86 3 storage_manager fixed bin (71), 2 87 2 output_info aligned, /* data pertaining to output buffer */ 2 88 3 output_buffer_ptr unal ptr, /* ptr to output buffer */ 2 89 3 output_buffer_len fixed bin (21), /* length (bytes) of output buffer */ 2 90 3 output_buffer_pos fixed bin (21), /* index of next byte to write in */ 2 91 3 output_buffer_ll fixed bin (21), /* print positions used up so far */ 2 92 2 tab_width fixed bin (21); /* number of columns a tabs moves cursor */ 2 93 2 94 declare output_buffer char (ws_info.output_buffer_len) based (ws_info.output_buffer_ptr); 2 95 2 96 /* internal static */ 2 97 2 98 declare max_parse_stack_depth fixed bin int static init(64536); 2 99 2 100 /* ------ END INCLUDE SEGMENT apl_ws_info.incl.pl1 -------------------------------------- */ 45 3 1 /* ====== BEGIN INCLUDE SEGMENT apl_storage_system_data.incl.pl1 ========================== */ 3 2 3 3 /* 3 4* * This include file contains a declaration of the data structure 3 5* * kept in the "map segment" by the apl_storage_mngr_ 3 6* * 3 7* * Written July 1973 by DAM 3 8* * Modified Dec 1973 to change spelling of structure name from stroage to storage by PG 3 9* */ 3 10 3 11 /* data in the map seg */ 3 12 3 13 declare 3 14 1 global_storage_system_data aligned based (global_storage_system_data_pointer), 3 15 2 seg_map_hash_table(0:88), /* hash table for finding seg_list entry given pointer */ 3 16 3 seg_baseno bit(18) unaligned, /* 0 if empty, or segment number */ 3 17 3 seg_list_idx fixed bin(17) unaligned, /* 0 if empty, or index into seg_list for this seg */ 3 18 2 last_map unaligned pointer, /* -> last seg_map in the storage_system_data segment */ 3 19 2 current_little_bead_seg fixed bin, /* 0 or index in seg_list of little bead allocation seg. */ 3 20 2 current_big_bead_seg fixed bin, /* 0 or index in seg_list of big bead allocation seg. */ 3 21 2 current_little_scan_pos fixed bin, /* next map entry to scan in current_little_bead_seg */ 3 22 2 current_big_scan_pos fixed bin, /* next map entry to scan in current_big_bead_seg */ 3 23 2 seg_list (30), /* <--- one entry for each segment in use by storage mngr */ 3 24 3 words_free fixed bin(18), /* total number of unallocated words in the segment */ 3 25 3 pointer unaligned pointer, /* -> seg if usage = 1 or 2, else -> seg_map */ 3 26 3 usage fixed bin, /* 0 = entry free, 1 = seg not currently in use, 3 27* 2 = value_stack seg, 3 = little bead seg, 4 = big bead seg */ 3 28 3 29 2 metric, /* METERING DATA, governed by ws_info.meter_mode */ 3 30 3 31 3 big_seg_balance, /* meters for balancing of big-bead segs */ 3 32 4 count fixed bin, /* number of times a balance occurred */ 3 33 4 thrown_away fixed bin, /* number of times a bead had to be thrown away */ 3 34 4 amt_thrown_away fixed bin, /* total number of words that had to be thrown away */ 3 35 4 time_spent_balancing fixed bin(71), /* time spent balancing */ 3 36 4 space_left fixed bin(30), /* sum of amounts space left in use by maps after balances */ 3 37 3 little_seg_balance, /* same meters for balancing of little-bead segs */ 3 38 4 count fixed bin, 3 39 4 thrown_away fixed bin, 3 40 4 space_left fixed bin(30), 3 41 4 amt_thrown_away fixed bin, 3 42 4 time_spent_balancing fixed bin(71), 3 43 3 get_next_value_stack_seg_calls fixed bin, /* number of times new value stack seg was needed */ 3 44 3 copy_apl_value_calls fixed bin, /* number of values copied */ 3 45 3 copy_apl_value_time fixed bin(71), /* amount of time spent copying values */ 3 46 3 47 3 range(16), /* alloc-free meters by size range */ 3 48 4 size fixed bin(18), /* number of words have to be as big as to fit in range */ 3 49 4 free_count fixed bin, /* number beads this size freed */ 3 50 4 map_free_count fixed bin, /* number times freeing required search of map */ 3 51 4 free_time fixed bin(71), /* amount of time spent freeing beads this size */ 3 52 4 words_freed fixed bin(24), /* total number of words freed in beads this size */ 3 53 3 54 4 alloc_count fixed bin, /* number beads this size allocated */ 3 55 4 alloc_end_count fixed bin, /* number times allocated from end of segment */ 3 56 4 alloc_new_count fixed bin, /* number times had to switch to a new segment */ 3 57 4 alloc_time fixed bin(71), /* total time spent allocating */ 3 58 4 words_alloced fixed bin(24), /* total number of words in beads alloc'ed this size */ 3 59 3 60 3 61 2 first_seg_map; /* first seg_map is created at this address */ 3 62 3 63 3 64 dcl 1 seg_map aligned based(seg_map_p), /* there is one of these for each segment in APL heap-space */ 3 65 2 seg_ptr pointer unaligned, /* -> base of segment */ 3 66 2 smallest_piece fixed bin(18), /* minimum permissible size for a free bead */ 3 67 2 number_of_entries fixed bin, /* size of map */ 3 68 2 last_entry_used fixed bin, /* size of non-zero portion of map, used to speed up allocate */ 3 69 2 amount_of_seg_used fixed bin(18), /* number of words in segment covered by the map */ 3 70 2 map (map_size refer (seg_map.number_of_entries)), /* one entry per free bead, in binary tree form */ 3 71 3 size bit (18) unaligned, /* 0 if not a free bead, else number of words in free bead */ 3 72 3 rel_loc bit (18) unaligned; /* 0 if not a free bead, else position in segment of free bead */ 3 73 3 74 /* pointers to above data */ 3 75 3 76 dcl seg_map_p pointer; 3 77 3 78 /* ------ END INCLUDE SEGMENT apl_storage_system_data.incl.pl1 -------------------------- */ 46 47 48 /* program */ 49 50 if ws_info_ptr = null 51 then do; 52 call com_err_ (0, my_name, "No active workspace."); 53 return; 54 end; 55 global_storage_system_data_pointer = ws_info.alloc_free_info_ptr; 56 57 call ioa_ ("storage map at ^p, size = ^d", global_storage_system_data_pointer, binary (rel (last_map), 18)); 58 call ioa_ ("last_map = ^p", global_storage_system_data.last_map); 59 call ioa_ ("cur_little_seg = ^d", current_little_bead_seg); 60 call ioa_ ("cur_little_scan = ^d", current_little_scan_pos); 61 call ioa_ ("cur_big_seg = ^d", current_big_bead_seg); 62 call ioa_ ("cur_big_scan = ^d", current_big_scan_pos); 63 64 do segx = lbound (seg_list, 1) to hbound (seg_list, 1); 65 if seg_list (segx).usage > 0 66 then call dump_map (segx); 67 end; 68 69 return; 70 71 dump_map: 72 procedure (bv_seg_index); 73 74 /* parameters */ 75 76 declare bv_seg_index fixed bin; 77 78 /* automatic */ 79 80 declare (fatherx, mapx, segx, type) 81 fixed bin; 82 declare message char (16); 83 84 /* program */ 85 86 segx = bv_seg_index; 87 type = seg_list.usage (segx); 88 89 if (type = 1) | (type = 2) 90 then do; 91 call ioa_ ("^/map ^2d for ^p, ^a", segx, seg_list.pointer (segx), type_names (type)); 92 return; 93 end; 94 95 seg_map_p = seg_list.pointer (segx); 96 97 call ioa_ ("^/map ^2d for ^p, ^a", segx, seg_map.seg_ptr, type_names (type)); 98 call ioa_ ("map_ptr = ^p^/smallest_piece = ^d", seg_map_p, seg_map.smallest_piece); 99 call ioa_ ("num_entries = ^d^/last_entry = ^d", seg_map.number_of_entries, seg_map.last_entry_used); 100 call ioa_ ("amount_used = ^d^/words_free = ^d", seg_map.amount_of_seg_used, seg_list (segx).words_free); 101 102 do mapx = lbound (seg_map.map, 1) to seg_map.last_entry_used; 103 if string (map (mapx)) ^= ""b 104 then do; /* check that this entry is in proper relation to dad */ 105 message = ""; /* assume all ok */ 106 fatherx = divide (mapx, 2, 17, 0); 107 if (fatherx ^= mapx) & (fatherx ^= 0) 108 then do; 109 if string (map (fatherx)) = ""b 110 /* not good...tree is unconnected... */ 111 then message = "no father"; 112 else if mod (mapx, 2) = 1/* mapx ODD means it is RIGHT son */ 113 then if map.rel_loc (fatherx) ^< map.rel_loc (mapx) 114 then message = "father ^< son"; 115 /* dum da dum dum */ 116 else ; 117 else if map.rel_loc (fatherx) ^> map.rel_loc (mapx) 118 then message = "father ^> son"; 119 else ; 120 121 end; 122 call ioa_ ("^3d ^6o ^6o ^a", mapx, binary (map.size (mapx)), binary (map.rel_loc (mapx)), message); 123 end; 124 end; 125 126 end; 127 128 end /* apl_display_map */; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/08/81 1558.8 apl_display_map.pl1 >dumps>old_dumps>on>MIB-073181>apl_display_map.pl1 44 1 08/08/81 1935.2 apl_number_data.incl.pl1 >dumps>old_dumps>on>MIB-073181>apl_number_data.incl.pl1 45 2 08/08/81 1935.4 apl_ws_info.incl.pl1 >dumps>old_dumps>on>MIB-073181>apl_ws_info.incl.pl1 46 3 08/08/81 1935.4 apl_storage_system_data.incl.pl1 >dumps>old_dumps>on>MIB-073181>apl_storage_system_data.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. alloc_free_info_ptr 17 based pointer level 3 packed unaligned dcl 2-16 ref 55 amount_of_seg_used 4 based fixed bin(18,0) level 2 dcl 3-64 set ref 100* apl_static_$ws_info_ptr 000014 external static structure level 1 dcl 2-11 binary builtin function dcl 27 ref 57 57 122 122 122 122 bv_seg_index parameter fixed bin(17,0) dcl 76 ref 71 86 com_err_ 000010 constant entry external dcl 32 ref 52 current_big_bead_seg 133 based fixed bin(17,0) level 2 dcl 3-13 set ref 61* current_big_scan_pos 135 based fixed bin(17,0) level 2 dcl 3-13 set ref 62* current_little_bead_seg 132 based fixed bin(17,0) level 2 dcl 3-13 set ref 59* current_little_scan_pos 134 based fixed bin(17,0) level 2 dcl 3-13 set ref 60* divide builtin function dcl 27 ref 106 fatherx 000116 automatic fixed bin(17,0) dcl 80 set ref 106* 107 107 109 112 117 global_storage_system_data based structure level 1 dcl 3-13 global_storage_system_data_pointer 000100 automatic pointer dcl 21 set ref 55* 57* 57 57 58 59 60 61 62 64 64 65 87 91 95 100 hbound builtin function dcl 27 ref 64 ioa_ 000012 constant entry external dcl 32 ref 57 58 59 60 61 62 91 97 98 99 100 122 last_entry_used 3 based fixed bin(17,0) level 2 dcl 3-64 set ref 99* 102 last_map 131 based pointer level 2 packed unaligned dcl 3-13 set ref 57 57 58* lbound builtin function dcl 27 ref 64 102 map 5 based structure array level 2 dcl 3-64 ref 102 103 109 mapx 000117 automatic fixed bin(17,0) dcl 80 set ref 102* 103 106 107 112 112 117 122* 122 122 122 122* message 000122 automatic char(16) unaligned dcl 82 set ref 105* 109* 112* 117* 122* mod builtin function dcl 27 ref 112 my_name 000020 constant char(15) initial unaligned dcl 37 set ref 52* null builtin function dcl 27 ref 50 number_of_entries 2 based fixed bin(17,0) level 2 dcl 3-64 set ref 99* pointer 137 based pointer array level 3 packed unaligned dcl 3-13 set ref 91* 95 pointers 14 based structure level 2 dcl 2-16 rel_loc 5(18) based bit(18) array level 3 packed unaligned dcl 3-64 ref 112 112 117 117 122 122 seg_list 136 based structure array level 2 dcl 3-13 set ref 64 64 seg_map based structure level 1 dcl 3-64 seg_map_p 000106 automatic pointer dcl 3-76 set ref 95* 97 98* 98 99 99 100 102 102 103 109 112 112 117 117 122 122 122 122 seg_ptr based pointer level 2 packed unaligned dcl 3-64 set ref 97* segx 000102 automatic fixed bin(17,0) dcl 21 in procedure "adm" set ref 64* 65 65* segx 000120 automatic fixed bin(17,0) dcl 80 in procedure "dump_map" set ref 86* 87 91* 91 95 97* 100 size 5 based bit(18) array level 3 packed unaligned dcl 3-64 ref 122 122 smallest_piece 1 based fixed bin(18,0) level 2 dcl 3-64 set ref 98* static_ws_info_ptr 000014 external static pointer level 2 packed unaligned dcl 2-11 ref 2-7 string builtin function dcl 27 ref 103 109 type 000121 automatic fixed bin(17,0) dcl 80 set ref 87* 89 89 91 97 type_names 000000 constant varying char(12) initial array dcl 37 set ref 91* 97* usage 140 based fixed bin(17,0) array level 3 dcl 3-13 ref 65 87 words_free 136 based fixed bin(18,0) array level 3 dcl 3-13 set ref 100* ws_info based structure level 1 dcl 2-16 ws_info_ptr 000104 automatic pointer initial dcl 2-7 set ref 50 55 2-7* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Binary internal static bit(1) initial dcl 1-16 NumberSize internal static fixed bin(4,0) initial dcl 1-25 TheBiggestNumberWeveGot internal static float bin(63) initial dcl 1-16 TheSmallestNumberWeveGot internal static float bin(63) initial dcl 1-16 max_parse_stack_depth internal static fixed bin(17,0) initial dcl 2-98 output_buffer based char unaligned dcl 2-94 unspec builtin function dcl 27 NAMES DECLARED BY EXPLICIT CONTEXT. adm 000201 constant entry external dcl 10 apl_display_map 000211 constant entry external dcl 10 dump_map 000462 constant entry internal dcl 71 ref 65 NAME DECLARED BY CONTEXT OR IMPLICATION. rel builtin function ref 57 57 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1114 1132 1037 1124 Length 1404 1037 16 236 55 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME adm 190 external procedure is an external procedure. dump_map internal procedure shares stack frame of external procedure adm. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME adm 000100 global_storage_system_data_pointer adm 000102 segx adm 000104 ws_info_ptr adm 000106 seg_map_p adm 000116 fatherx dump_map 000117 mapx dump_map 000120 segx dump_map 000121 type dump_map 000122 message dump_map THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc return mod_fx1 ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ ioa_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. apl_static_$ws_info_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 2 7 000173 10 000200 50 000217 52 000223 53 000250 55 000251 57 000254 58 000303 59 000327 60 000353 61 000374 62 000420 64 000444 65 000451 67 000457 69 000461 71 000462 86 000464 87 000466 89 000473 91 000477 92 000532 95 000533 97 000536 98 000570 99 000615 100 000641 102 000670 103 000700 105 000703 106 000706 107 000710 109 000714 112 000722 116 000743 117 000744 122 000761 124 001026 126 001030 ----------------------------------------------------------- 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