COMPILATION LISTING OF SEGMENT rcp_check_assign_ 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 0952.2 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 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 14 rcp_check_assign_: 15 procedure (arg_rcp_id, arg_device_info_ptr, arg_comment, arg_statex, arg_ecode); 16 17 /* This program implements the rcp_$check_assign entry point. 18* * Created on 12/04/74 by Bill Silver. 19* * 20* * The rcp_id is used to generate a pointer to the RCS entry that is associated 21* * with this assignment request. We will look in this RCS entry to obtain 22* * the information that describes the results of the assignment operation. 23* * In the current implementation the assignment is actually performed by the 24* * assign call. If everything in the RCS entry is OK we will declare the 25* * assignment to be completed and will return the device information to 26* * the caller. 27**/ 28 29 /* ARGUMENT DATA */ 30 31 dcl arg_comment char (*); /* (O) RCP comment. */ 32 dcl arg_device_info_ptr ptr; /* (I) Pointer to device info structure. */ 33 dcl arg_ecode fixed bin (35); /* (O) Return error_table_ code. */ 34 dcl arg_rcp_id bit (36) aligned; /* (I) RCP ID. */ 35 dcl arg_statex fixed bin; /* (O) State of assignment check. */ 36 37 38 /* AUTOMATIC DATA */ 39 40 dcl caller_level fixed bin; /* Caller's validation level. */ 41 dcl dcode fixed bin (35); /* Dummy error code. */ 42 dcl ecode fixed bin (35); /* error_table_ code. */ 43 dcl rcp_id bit (36) aligned; /* Used to copy rcp_id argument. */ 44 dcl save_ecode fixed bin (35); /* Dummy error code. */ 45 46 47 /* EXTERNAL ENTRIES CALLED */ 48 49 dcl cleanup condition; /* Used to set up a cleanup handler. */ 50 51 dcl ( 52 error_table_$bad_arg, 53 error_table_$invalid_state, 54 error_table_$out_of_sequence 55 ) fixed bin (35) external; 56 57 dcl clock_ entry returns (fixed bin (71)); 58 dcl cu_$level_get entry (fixed bin); 59 dcl cu_$level_set entry (fixed bin); 60 dcl get_ring_ entry returns (fixed bin); 61 dcl rcp_comment_ entry (ptr); 62 dcl rcp_device_info_$set entry (ptr, ptr, fixed bin (35)); 63 dcl rcp_unassign_$unassign entry (bit (36) aligned, bit (*), char (*), fixed bin (35)); 64 dcl rcp_validate_ entry (bit (36) aligned, fixed bin, ptr, fixed bin (35)); 65 66 call cu_$level_get (caller_level); /* Save caller's validation level. */ 67 on cleanup 68 begin; /* If trouble cleanup. */ 69 call cu_$level_set (caller_level); /* Reset validation level. */ 70 end; 71 call cu_$level_set (get_ring_ ()); /* Set validation level to RCP level. */ 72 73 rcp_id = arg_rcp_id; /* Copy arguments. */ 74 device_info_ptr = arg_device_info_ptr; 75 call rcp_validate_ (rcp_id, caller_level, rcse_ptr, ecode); 76 if ecode ^= 0 /* Is RCP ID OK? */ 77 then 78 goto ERROR; /* No, rcse_ptr is not valid. */ 79 80 if rcse.kind ^= 2 /* Is this a device assignment RCS entry? */ 81 then do; /* No, leave attachment alone. */ 82 ecode = error_table_$bad_arg; 83 goto ERROR; 84 end; 85 86 ecode = rcse.ecode; /* Get code generated by rcp_initializer_. */ 87 if ecode ^= 0 /* Was there an error assigning the device? */ 88 then 89 goto ERROR; 90 91 if rcse.state ^= 2 /* We should be in the ASSIGNED state. */ 92 then do; /* But we are not. */ 93 ecode = error_table_$invalid_state; 94 goto ERROR; 95 end; 96 97 /* Return the information about the assigned device in the info structure. 98**/ 99 /**** Passing a copy of device_info_ptr is OK since the pointer is used to base 100* a write-only structure, so nothing the caller is doing can throw us. ****/ 101 call rcp_device_info_$set (device_info_ptr, rcse_ptr, ecode); 102 if ecode ^= 0 /* Is device info structure valid? */ 103 then 104 goto ERROR; /* Abort assignment. */ 105 106 call rcp_comment_ (rcse_ptr); /* Type caller's comment. */ 107 108 rcse.state = 5; /* Assignment now complete. */ 109 rcse.state_time = clock_ (); 110 111 arg_comment = ""; /* No comments returned by this version of RCP. */ 112 arg_statex, /* Tell caller that assignment completed OK. */ 113 arg_ecode = 0; 114 call cu_$level_set (caller_level); /* Reset caller's validation level. */ 115 return; 116 117 ERROR: /* Abort assignment. */ 118 call rcp_unassign_$unassign (rcp_id, "0"b, "", dcode); 119 arg_statex = 3; /* Tell caller there was an error. */ 120 arg_ecode = ecode; /* Return error code. */ 121 call cu_$level_set (caller_level); /* Reset validation level. */ 122 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 */ 123 124 2 1 /* START OF: rcp_device_info_structs.incl.pl1 * * * * * * * * * * * * * * * * */ 2 2 2 3 /****^ HISTORY COMMENTS: 2 4* 1) change(85-09-09,Fawcett), approve(85-09-09,MCR6979), 2 5* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 2 6* Support of MCA. 2 7* END HISTORY COMMENTS */ 2 8 2 9 /* Written 03/04/85 by Chris Jones. */ 2 10 2 11 /* This include file obsoletes the following include files: rcp_device_info, rcp_disk_info, 2 12* rcp_printer_info, and rcp_tape_info. */ 2 13 /* Modified May 1985 by Rich Fawcett to add the 8th device MCA */ 2 14 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 2 15 2 16 dcl device_info_ptr ptr; 2 17 2 18 dcl 1 device_info aligned based (device_info_ptr), 2 19 2 common like device_info_common, 2 20 2 qualifiers (4) fixed bin (35); /* per device type info */ 2 21 2 22 dcl 1 device_info_common aligned based, 2 23 2 version_num fixed bin, /* Version number of this structure. */ 2 24 2 usage_time fixed bin, /* Number of minutes device will/may be used. */ 2 25 2 wait_time fixed bin, /* Number of minutes user will/must wait. */ 2 26 2 system_flag bit (1), /* ON => user wants to be a system process. */ 2 27 2 device_name char (8), /* Device name. */ 2 28 2 model fixed bin; /* Device model number. */ 2 29 2 30 dcl 1 tape_info based (device_info_ptr) aligned, 2 31 2 common like device_info_common, 2 32 2 tracks fixed bin, /* 7 or 9 track */ 2 33 2 density bit (36), /* density capabilities: 200, 556, 800, 1600, 6250 */ 2 34 2 speed bit (36), /* speed: 75, 125, 200 */ 2 35 2 pad bit (36), 2 36 2 volume_name char (32), /* Tape reel name. */ 2 37 2 write_flag bit (1), /* ON => writing on tape reel. */ 2 38 2 position_index fixed bin (35), /* Counter used to determine tape reel position. */ 2 39 /* Limit of version 2 structure, info below returned if version 3 or greater */ 2 40 2 volume_type fixed bin, /* Use rcp_volume_formats.incl.pl1 for decodes */ 2 41 2 volume_density fixed bin, /* 1 - 5 = 200, 556, 800, 1600, or 6250 BPI */ 2 42 2 opr_auth bit (1); /* "1"b => Operator Authentication was required */ 2 43 2 44 dcl tape_info_version_2 fixed bin internal static options (constant) init (2); 2 45 dcl tape_info_version_3 fixed bin internal static options (constant) init (3); 2 46 2 47 dcl 1 disk_info based (device_info_ptr) aligned, 2 48 2 common like device_info_common, 2 49 2 volume_name char (32), /* disk volume name */ 2 50 2 write_flag bit (1); /* on => write_allowed */ 2 51 2 52 dcl 1 printer_info based (device_info_ptr) aligned, 2 53 2 common like device_info_common, 2 54 2 print_train fixed bin, /* print train type */ 2 55 2 line_length fixed bin; /* line length (-1 => not specified */ 2 56 2 57 dcl device_info_size (8) fixed bin static options (constant) init 2 58 (24, 16, 7, 9, 7, 7, 7, 7); 2 59 2 60 dcl RCP_MAX_DEVICE_INFO_SIZE 2 61 fixed bin static options (constant) init (24); 2 62 2 63 /* END OF: rcp_device_info_structs.incl.pl1 * * * * * * * * * * * * * * * * */ 125 126 127 end rcp_check_assign_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0805.9 rcp_check_assign_.pl1 >spec>install>1111>rcp_check_assign_.pl1 123 1 03/27/86 1120.0 rcp_com_seg.incl.pl1 >ldd>include>rcp_com_seg.incl.pl1 125 2 03/27/86 1120.0 rcp_device_info_structs.incl.pl1 >ldd>include>rcp_device_info_structs.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. arg_comment parameter char packed unaligned dcl 31 set ref 14 111* arg_device_info_ptr parameter pointer dcl 32 ref 14 74 arg_ecode parameter fixed bin(35,0) dcl 33 set ref 14 112* 120* arg_rcp_id parameter bit(36) dcl 34 ref 14 73 arg_statex parameter fixed bin(17,0) dcl 35 set ref 14 112* 119* caller_level 000100 automatic fixed bin(17,0) dcl 40 set ref 66* 69* 75* 114* 121* cleanup 000104 stack reference condition dcl 49 ref 67 clock_ 000014 constant entry external dcl 57 ref 109 cu_$level_get 000016 constant entry external dcl 58 ref 66 cu_$level_set 000020 constant entry external dcl 59 ref 69 71 114 121 dcode 000101 automatic fixed bin(35,0) dcl 41 set ref 117* device_info_common based structure level 1 dcl 2-22 device_info_ptr 000114 automatic pointer dcl 2-16 set ref 74* 101* ecode 000102 automatic fixed bin(35,0) dcl 42 in procedure "rcp_check_assign_" set ref 75* 76 82* 86* 87 93* 101* 102 120 ecode 53 based fixed bin(35,0) level 2 in structure "rcse" dcl 1-55 in procedure "rcp_check_assign_" ref 86 error_table_$bad_arg 000010 external static fixed bin(35,0) dcl 51 ref 82 error_table_$invalid_state 000012 external static fixed bin(35,0) dcl 51 ref 93 get_ring_ 000022 constant entry external dcl 60 ref 71 71 kind 25 based fixed bin(17,0) level 2 dcl 1-55 ref 80 lock_info based structure level 1 dcl 1-46 rcp_comment_ 000024 constant entry external dcl 61 ref 106 rcp_device_info_$set 000026 constant entry external dcl 62 ref 101 rcp_id 000103 automatic bit(36) dcl 43 set ref 73* 75* 117* rcp_unassign_$unassign 000030 constant entry external dcl 63 ref 117 rcp_validate_ 000032 constant entry external dcl 64 ref 75 rcse based structure level 1 dcl 1-55 rcse_ptr 000112 automatic pointer dcl 1-24 set ref 75* 80 86 91 101* 106* 108 109 state 24 based fixed bin(17,0) level 2 dcl 1-55 set ref 91 108* state_time 22 based fixed bin(71,0) level 2 dcl 1-55 set ref 109* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. RCP_MAX_DEVICE_INFO_SIZE internal static fixed bin(17,0) initial dcl 2-60 based_rcp_id based structure level 1 dcl 1-26 device_info based structure level 1 dcl 2-18 device_info_size internal static fixed bin(17,0) initial array dcl 2-57 disk_info based structure level 1 dcl 2-47 error_table_$out_of_sequence external static fixed bin(35,0) dcl 51 lock_info_ptr automatic pointer dcl 1-22 printer_info based structure level 1 dcl 2-52 rcs based structure level 1 dcl 1-30 rcs_ptr automatic pointer dcl 1-23 save_ecode automatic fixed bin(35,0) dcl 44 tape_info based structure level 1 dcl 2-30 tape_info_version_2 internal static fixed bin(17,0) initial dcl 2-44 tape_info_version_3 internal static fixed bin(17,0) initial dcl 2-45 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR 000227 constant label dcl 117 set ref 76 83 87 94 102 rcp_check_assign_ 000017 constant entry external dcl 14 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 440 474 273 450 Length 720 273 34 207 145 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_check_assign_ 114 external procedure is an external procedure. on unit on line 67 68 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_check_assign_ 000100 caller_level rcp_check_assign_ 000101 dcode rcp_check_assign_ 000102 ecode rcp_check_assign_ 000103 rcp_id rcp_check_assign_ 000112 rcse_ptr rcp_check_assign_ 000114 device_info_ptr rcp_check_assign_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. clock_ cu_$level_get cu_$level_set get_ring_ rcp_comment_ rcp_device_info_$set rcp_unassign_$unassign rcp_validate_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$invalid_state LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 14 000012 66 000032 67 000040 69 000054 70 000063 71 000064 73 000102 74 000105 75 000110 76 000125 80 000127 82 000133 83 000136 86 000137 87 000141 91 000142 93 000145 94 000150 101 000151 102 000164 106 000166 108 000175 109 000200 111 000207 112 000215 114 000217 115 000226 117 000227 119 000256 120 000261 121 000263 127 000272 ----------------------------------------------------------- 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