COMPILATION LISTING OF SEGMENT rcp_unassign_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 0941.9 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 rcp_unassign_: procedure; 14 15 /* This program implements the RCP unassignment entry points. 16* * Created on 12/05/74 by Bill Silver. 17* * Modified 6/79 by Michael R. Jordan for MR7.0R. 18* * Modified early 1985 by Maria Pozzo for B2 access operations. 19* * 20* * This program has the following entry points: 21* * 1. unassign - Unassign a resource given an RCP ID. 22* * 2. unassign_device - Unassign a device given its name. 23**/ 24 25 /* ARGUMENT DATA */ 26 27 dcl arg_comment char (*); /* (I) Caller's comment. */ 28 dcl arg_device_name char (*); /* (I) name of device to be unassigned. */ 29 dcl arg_disposition bit (*); /* (I) Reservation disposition - not used. */ 30 dcl arg_ecode fixed bin (35); /* (O) error_table_ code. */ 31 dcl arg_rcp_id bit (36) aligned; /* (I) ID used to identify RCS entry. */ 32 33 34 /* AUTOMATIC DATA */ 35 36 dcl device_offset bit (18) aligned; /* Needed by rcp_control_. */ 37 dcl process_id bit (36) aligned; /* Process id of process amking request of rcp_control_. */ 38 dcl rcp_id bit (36) aligned; /* Used to copy rcp_id argument. */ 39 dcl rcse_off bit (18); /* Offset of an RCS entry. */ 40 dcl volume_offset bit (18) aligned; /* Needed by rcp_control_. */ 41 42 dcl comment char (64); /* Used to copy comment. */ 43 dcl device_name char (32); /* Name of device to unassign. */ 44 dcl operation bit (36) aligned; /* Operation being requested of rcp_control_. */ 45 46 dcl caller_level fixed bin; /* Caller's validation level. */ 47 dcl ecode fixed bin (35); /* error_table_ code. */ 48 dcl error_count fixed bin (17); /* Error count for device attachments */ 49 50 dcl arcse_ptr ptr; /* Pointer to attachment RCS entry. */ 51 52 53 /* BASED DATA */ 54 55 dcl 1 arcse based (arcse_ptr) like rcse aligned; /* Used to reference attachment RCS entry. */ 56 57 58 /* EXTERNAL ENTRIES CALLED */ 59 60 dcl cleanup condition; /* Used to set up cleanup handler. */ 61 62 dcl (addr, ptr) builtin; 63 64 dcl error_table_$bad_arg fixed bin (35) ext static; 65 dcl error_table_$resource_unassigned fixed bin (35) ext static; 66 67 dcl access_operations_$rcp_unassign bit (36) aligned ext static; 68 69 dcl cu_$level_get entry (fixed bin); 70 dcl cu_$level_set entry (fixed bin); 71 dcl get_ring_ entry returns (fixed bin); 72 dcl rcp_comment_ entry (ptr); 73 dcl rcp_detach_$detach entry (bit (36) aligned, bit (*), fixed bin, char (*), fixed bin (35)); 74 dcl rcp_find_$device entry (char (*), bit (18)); 75 dcl rcp_control_ entry (bit (36) aligned, bit (18) aligned, bit (18) aligned, char (*), 76 fixed bin (17), bit (36) aligned, fixed bin (35)); 77 dcl rcp_pointers_$com_seg entry returns (ptr); 78 dcl rcp_rcse_$free entry (ptr, fixed bin (35)); 79 dcl rcp_validate_ entry (bit (36) aligned, fixed bin, ptr, fixed bin (35)); 80 1 1 /* Begin include file ... rcp_com_seg.incl.pl1 1 2* * 1 3* * Created on 11/20/74 by Bill Silver. 1 4* * Modified on 09/19/77 by R.J.C. Kissel to add label authentication bits. 1 5* * Modified on 12/09/78 by Michael R. Jordan to add removable media bit and label_type. 1 6* * Modified 1/79 by R.J.C. Kissel to add disk label authentication bits. 1 7* * Modified 2/79 by Michael R. Jordan to add volume_density. 1 8* * Modified 11/84 by Paul Farley to add fips flag. 1 9* * Modified 1/3/85 by Fawcett to allow room for mca device type 1 10* * Modified 02/85 by Paul Farley to add no_protect and opr_int_available flags. 1 11* * This include file defines the Resource Control Package communication segment. 1 12* * This segment is used to communicate requests between the various internal 1 13* * parts of RCP. 1 14**/ 1 15 1 16 /****^ HISTORY COMMENTS: 1 17* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 1 18* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 1 19* Support MCA and FIPS. 1 20* END HISTORY COMMENTS */ 1 21 1 22 dcl lock_info_ptr ptr; /* Pointer to lock info structure. */ 1 23 dcl rcs_ptr ptr; /* Pointer to base of RCS. */ 1 24 dcl rcse_ptr ptr; /* Pointer to an RCS entry. */ 1 25 1 26 dcl 1 based_rcp_id based aligned, /* Overlay of an rcp_id. */ 1 27 (2 id_count fixed bin (17), /* Unique count index. */ 1 28 2 rcse_off bit (18)) unaligned; /* Offset of rcp_com_seg entry. */ 1 29 1 30 dcl 1 rcs based (rcs_ptr) aligned, /* Begin at word zero of rcp_com_seg. */ 1 31 2 lock_info like lock_info, /* Data used to lock this segment. */ 1 32 2 ws_maxs (8) fixed bin (19), /* Max IOI workspace size in words. */ 1 33 2 ws_pmaxs (8) fixed bin (19), /* Max IOI workspace size for priv attachments. */ 1 34 2 to_maxs (8) fixed bin (71), /* Max IOI time-out intervals in microseconds. */ 1 35 2 sys_directory char (32), /* Directory used to define a system process. */ 1 36 2 sys_acs char (32), /* Entry name used to define a system process. */ 1 37 2 acs_directory char (32), /* Directory containing device ACSs. */ 1 38 2 id_count fixed bin (35), /* Counter used to form rcp_id. */ 1 39 2 max_entries fixed bin, /* Maximum number of entries allowed. */ 1 40 2 num_entries fixed bin, /* Total number of entries. */ 1 41 2 first_free_off bit (18), /* Offset of first free entry. */ 1 42 2 entry (0 refer (rcs.num_entries)) /* Array of request entries. */ 1 43 like rcse, /* See structure below. */ 1 44 2 end bit (36); /* End of rcp_com_seg. */ 1 45 1 46 dcl 1 lock_info based (lock_info_ptr) aligned, /* Used to meter locking. */ 1 47 2 lock bit (36), /* The lock itself. */ 1 48 2 num_locks fixed bin (35), /* Number of times locked. */ 1 49 2 num_lock_waits fixed bin (35), /* Number of lock waits. */ 1 50 2 time_of_lock fixed bin (71), /* Time of last lock. */ 1 51 2 tot_lock_time fixed bin (71), /* Total time locked. */ 1 52 2 tot_wait_time fixed bin (71), /* Total time waiting for lock. */ 1 53 2 starting_time fixed bin (71); /* Time metering started. */ 1 54 1 55 dcl 1 rcse based (rcse_ptr) aligned, /* Up to state must = rcpd.device. */ 1 56 2 device_name char (8), /* Name of device associated with this entry. */ 1 57 2 volume_name char (32), /* Volume name. Blank => no volume. */ 1 58 2 dtypex fixed bin, /* Device type index. */ 1 59 2 model fixed bin, /* Device model number. */ 1 60 2 num_qualifiers fixed bin, /* Number of device qualifiers. */ 1 61 2 qualifiers (4) fixed bin (35), /* Device qualifiers. */ 1 62 2 state_time fixed bin (71), /* Time device put into current state. */ 1 63 2 state fixed bin, /* 0 - free 1 - assigning 2 - assigned */ 1 64 /* 3 - attaching 4 - attached 5 - completed. */ 1 65 1 66 /* * * * * ** Following fields are unique to RCS entry. */ 1 67 2 kind fixed bin, /* 1 => attach, 2 => assign */ 1 68 2 free_off bit (18), /* Offset of next free entry. 0 => not free. */ 1 69 2 user_off bit (18), /* Offset of next entry in user list. */ 1 70 2 device_off bit (18), /* Offset of device entry in RCPD. */ 1 71 2 volume_off bit (18), /* Offset of volume entry in RCPD. */ 1 72 2 rcse_off bit (18), /* Offset of associated RCS entry. */ 1 73 2 caller_level fixed bin, /* Caller's validation level. */ 1 74 2 disposition bit (1), /* ON => retain, OFF => unassign. */ 1 75 2 flags, /* Special info flags. */ 1 76 (3 device bit (1), /* ON => assigning a specific device. */ 1 77 3 priv bit (1), /* ON => attached with IOI privilege. */ 1 78 3 system bit (1), /* ON => assigned to a system process. */ 1 79 3 t_and_d bit (1), /* ON => T&D attachment. */ 1 80 3 volume bit (1), /* ON => volume associated with this device. */ 1 81 3 writing bit (1), /* ON => writing on volume. */ 1 82 3 have_auth bit (1), /* ON => tape volume authenticated. */ 1 83 3 need_auth bit (1), /* ON => tape volume needs authentication. */ 1 84 3 auth_set bit (1), /* ON => "have_auth" has been set. */ 1 85 3 preload_allowed bit (1), /* ON => preloading of volumes is allowed. */ 1 86 3 preloaded bit (1), /* ON => volume may be loaded on device. */ 1 87 3 not_removable_media bit (1), /* ON => cannot remove volume from device. */ 1 88 3 disk_ss_pack bit (1), /* ON => disk is a storage system volume. */ 1 89 3 disk_copy_of_ss_pack bit (1), /* ON => disk is a copy of a storage system volume. */ 1 90 3 disk_io_pack bit (1), /* ON => disk has label but is not storage system. */ 1 91 3 disk_unregistered bit (1), /* ON => disk is unregistered storage system volume. */ 1 92 3 disk_unreadable bit (1), /* ON => io error reading disk label. */ 1 93 3 must_auto_register bit (1), /* ON => unregistered volume requested */ 1 94 3 fips bit (1), /* ON => FIPS device. */ 1 95 3 no_protect bit (1), /* ON => device has no protect sw. */ 1 96 3 opr_int_available bit (1), /* ON => device connected to MPC with OI button. */ 1 97 3 unused bit (6), 1 98 3 volume_density_index fixed bin (3) unsigned, /* Density of volume */ 1 99 3 label_type fixed bin (6) unsigned)unaligned, /* Type of label read by RCP. */ 1 100 2 rcp_id bit (36), /* ID of this entry. */ 1 101 2 event_id fixed bin (71), /* Caller's event channel ID. */ 1 102 2 process_id bit (36), /* ID of calling process. */ 1 103 2 group_id char (32), /* Group ID of calling process. */ 1 104 2 ecode fixed bin (35), /* Assignment error code. */ 1 105 2 version_num fixed bin, /* Device info version number. */ 1 106 2 workspace_max fixed bin (19), /* Max size of IOI workspace buffer. */ 1 107 2 timeout_max fixed bin (71), /* Max IOI time-out interval. */ 1 108 2 ioi_index fixed bin, /* IOI device index. */ 1 109 2 workspace_ptr ptr, /* Pointer to IOI workspace buffer. */ 1 110 2 caller_comment char (64); /* Caller's comment. */ 1 111 1 112 /* End of include file ... rcp_com_seg.incl.pl1 */ 81 82 83 unassign: entry (arg_rcp_id, arg_disposition, arg_comment, arg_ecode); 84 85 /* This entry is called to unassign a resource. The rcp_id is used 86* * to generate a pointer to the RCS entry that is associated with 87* * the assignment of this resource. Currently only resources that are 88* * devices may be unassigned via this entry. If the rcp_id is valid we will 89* * perform the unassignment regardless of the current state of the assignment. 90**/ 91 92 call SETUP; 93 94 call cu_$level_get (caller_level); /* Get caller's validation level. */ 95 on cleanup begin; /* Cleanup if any trouble. */ 96 call cu_$level_set (caller_level); /* Reset validation level to caller level. */ 97 end; 98 call cu_$level_set (get_ring_ ()); /* Set validation level to RCP level. */ 99 100 rcp_id = arg_rcp_id; /* Copy arguments. */ 101 comment = arg_comment; 102 103 call rcp_validate_ (rcp_id, caller_level, rcse_ptr, ecode); 104 if ecode ^= 0 /* Is rcp_id OK? */ 105 then goto UNASSIGN_RETURN; /* No. */ 106 107 if rcse.kind ^= 2 /* Is this an assignment entry? */ 108 then do; /* No. */ 109 ecode = error_table_$bad_arg; 110 goto UNASSIGN_RETURN; 111 end; 112 113 call UNASSIGN_DEVICE; /* Now unassign this device. */ 114 115 UNASSIGN_RETURN: 116 arg_ecode = ecode; 117 call cu_$level_set (caller_level); 118 return; 119 120 unassign_device: entry (arg_device_name, arg_disposition, arg_comment, arg_ecode); 121 122 /* This entry is called to unassign a device given its name. 123* * We will call rcp_find_ to see if a device with this name is 124* * assigned to this process. If so we will unassign it. 125**/ 126 127 call SETUP; 128 129 call cu_$level_get (caller_level); 130 on cleanup begin; 131 call cu_$level_set (caller_level); 132 end; 133 call cu_$level_set (get_ring_ ()); 134 135 device_name = arg_device_name; /* Copy arguments. */ 136 comment = arg_comment; 137 138 call rcp_find_$device (device_name, rcse_off); 139 140 if rcse_off = "0"b /* Did we find the device? */ 141 then ecode = error_table_$resource_unassigned; 142 else do; /* Yes, unassign it. */ 143 rcse_ptr = ptr (rcp_pointers_$com_seg (), rcse_off); 144 call UNASSIGN_DEVICE; 145 end; 146 147 arg_ecode = ecode; /* Return results. */ 148 call cu_$level_set (caller_level); 149 return; 150 151 SETUP: procedure; 152 153 device_offset = ""b; 154 process_id = ""b; 155 volume_offset = ""b; 156 device_name = ""; 157 error_count = 0; 158 159 end SETUP; 160 161 UNASSIGN_DEVICE: procedure; 162 163 /* This procedure is called to unassign the device referenced by 164* * the specified RCS entry. If this device is attached then we will 165* * detach it. 166**/ 167 rcse.disposition = "0"b; /* Explicit request => always unassign. */ 168 169 if rcse.rcse_off ^= "0"b /* Is device attached? */ 170 then do; /* Yes, let rcp_detach_ do everything. */ 171 arcse_ptr = ptr (rcse_ptr, rcse.rcse_off); 172 call rcp_detach_$detach (arcse.rcp_id, "0"b, 0, comment, ecode); 173 return; 174 end; 175 176 if rcse.device_off = "0"b /* Not attached, was it ever assigned? */ 177 then goto FREE_RCSE; 178 179 /* Device was assigned by rcp_control_. We must unassign it. 180* * This involves calling rcp_control_ to update RCPD to reflect 181* * the unassignment of this device. We must also free the RCS entry 182* * used for this assignment. 183**/ 184 operation = access_operations_$rcp_unassign; 185 volume_offset = "0"b; 186 device_offset = rcse.device_off; 187 error_count = 0; 188 call rcp_control_ (operation, volume_offset, device_offset, 189 device_name, error_count, process_id, ecode); 190 191 192 rcse.caller_comment = comment; /* Put comment in RCS entry. */ 193 call rcp_comment_ (rcse_ptr); /* Type caller's comment. */ 194 195 FREE_RCSE: /* Free this RCS entry. */ 196 call rcp_rcse_$free (rcse_ptr, ecode); 197 198 end UNASSIGN_DEVICE; 199 200 end rcp_unassign_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0805.9 rcp_unassign_.pl1 >spec>install>1111>rcp_unassign_.pl1 81 1 03/27/86 1120.0 rcp_com_seg.incl.pl1 >ldd>include>rcp_com_seg.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. access_operations_$rcp_unassign 000014 external static bit(36) dcl 67 ref 184 arcse based structure level 1 dcl 55 arcse_ptr 000142 automatic pointer dcl 50 set ref 171* 172 arg_comment parameter char packed unaligned dcl 27 ref 83 101 120 136 arg_device_name parameter char packed unaligned dcl 28 ref 120 135 arg_disposition parameter bit packed unaligned dcl 29 ref 83 120 arg_ecode parameter fixed bin(35,0) dcl 30 set ref 83 115* 120 147* arg_rcp_id parameter bit(36) dcl 31 ref 83 100 caller_comment 64 based char(64) level 2 dcl 1-55 set ref 192* caller_level 000136 automatic fixed bin(17,0) dcl 46 set ref 94* 96* 103* 117* 129* 131* 148* cleanup 000144 stack reference condition dcl 60 ref 95 130 comment 000105 automatic char(64) packed unaligned dcl 42 set ref 101* 136* 172* 192 cu_$level_get 000016 constant entry external dcl 69 ref 94 129 cu_$level_set 000020 constant entry external dcl 70 ref 96 98 117 131 133 148 device_name 000125 automatic char(32) packed unaligned dcl 43 set ref 135* 138* 156* 188* device_off 30 based bit(18) level 2 dcl 1-55 ref 176 186 device_offset 000100 automatic bit(18) dcl 36 set ref 153* 186* 188* disposition 34 based bit(1) level 2 dcl 1-55 set ref 167* ecode 000137 automatic fixed bin(35,0) dcl 47 set ref 103* 104 109* 115 140* 147 172* 188* 195* error_count 000140 automatic fixed bin(17,0) dcl 48 set ref 157* 187* 188* error_table_$bad_arg 000010 external static fixed bin(35,0) dcl 64 ref 109 error_table_$resource_unassigned 000012 external static fixed bin(35,0) dcl 65 ref 140 get_ring_ 000022 constant entry external dcl 71 ref 98 98 133 133 kind 25 based fixed bin(17,0) level 2 dcl 1-55 ref 107 lock_info based structure level 1 dcl 1-46 operation 000135 automatic bit(36) dcl 44 set ref 184* 188* process_id 000101 automatic bit(36) dcl 37 set ref 154* 188* ptr builtin function dcl 62 ref 143 171 rcp_comment_ 000024 constant entry external dcl 72 ref 193 rcp_control_ 000032 constant entry external dcl 75 ref 188 rcp_detach_$detach 000026 constant entry external dcl 73 ref 172 rcp_find_$device 000030 constant entry external dcl 74 ref 138 rcp_id 000102 automatic bit(36) dcl 38 in procedure "rcp_unassign_" set ref 100* 103* rcp_id 36 based bit(36) level 2 in structure "arcse" dcl 55 in procedure "rcp_unassign_" set ref 172* rcp_pointers_$com_seg 000034 constant entry external dcl 77 ref 143 rcp_rcse_$free 000036 constant entry external dcl 78 ref 195 rcp_validate_ 000040 constant entry external dcl 79 ref 103 rcse based structure level 1 dcl 1-55 rcse_off 32 based bit(18) level 2 in structure "rcse" dcl 1-55 in procedure "rcp_unassign_" ref 169 171 rcse_off 000103 automatic bit(18) packed unaligned dcl 39 in procedure "rcp_unassign_" set ref 138* 140 143 rcse_ptr 000152 automatic pointer dcl 1-24 set ref 103* 107 143* 167 169 171 171 176 186 192 193* 195* volume_offset 000104 automatic bit(18) dcl 40 set ref 155* 185* 188* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. addr builtin function dcl 62 based_rcp_id based structure level 1 dcl 1-26 lock_info_ptr automatic pointer dcl 1-22 rcs based structure level 1 dcl 1-30 rcs_ptr automatic pointer dcl 1-23 NAMES DECLARED BY EXPLICIT CONTEXT. FREE_RCSE 000532 constant label dcl 195 ref 176 SETUP 000372 constant entry internal dcl 151 ref 92 127 UNASSIGN_DEVICE 000403 constant entry internal dcl 161 ref 113 144 UNASSIGN_RETURN 000164 constant label dcl 115 ref 104 110 rcp_unassign_ 000017 constant entry external dcl 13 unassign 000032 constant entry external dcl 83 unassign_device 000204 constant entry external dcl 120 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 770 1032 544 1000 Length 1246 544 42 200 224 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_unassign_ 196 external procedure is an external procedure. on unit on line 95 68 on unit on unit on line 130 68 on unit SETUP internal procedure shares stack frame of external procedure rcp_unassign_. UNASSIGN_DEVICE internal procedure shares stack frame of external procedure rcp_unassign_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_unassign_ 000100 device_offset rcp_unassign_ 000101 process_id rcp_unassign_ 000102 rcp_id rcp_unassign_ 000103 rcse_off rcp_unassign_ 000104 volume_offset rcp_unassign_ 000105 comment rcp_unassign_ 000125 device_name rcp_unassign_ 000135 operation rcp_unassign_ 000136 caller_level rcp_unassign_ 000137 ecode rcp_unassign_ 000140 error_count rcp_unassign_ 000142 arcse_ptr rcp_unassign_ 000152 rcse_ptr rcp_unassign_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$level_get cu_$level_set get_ring_ rcp_comment_ rcp_control_ rcp_detach_$detach rcp_find_$device rcp_pointers_$com_seg rcp_rcse_$free rcp_validate_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. access_operations_$rcp_unassign error_table_$bad_arg error_table_$resource_unassigned LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000016 83 000024 92 000052 94 000053 95 000062 96 000076 97 000105 98 000106 100 000124 101 000127 103 000134 104 000151 107 000153 109 000157 110 000162 113 000163 115 000164 117 000167 118 000176 120 000177 127 000231 129 000232 130 000241 131 000255 132 000264 133 000265 135 000303 136 000311 138 000316 140 000333 143 000342 144 000356 147 000357 148 000362 149 000371 151 000372 153 000373 154 000374 155 000375 156 000376 157 000401 159 000402 161 000403 167 000404 169 000406 171 000410 172 000413 173 000447 176 000450 184 000452 185 000455 186 000456 187 000460 188 000461 192 000517 193 000523 195 000532 198 000543 ----------------------------------------------------------- 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