COMPILATION LISTING OF SEGMENT rcp_message_ 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 0947.7 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 14 15 /****^ HISTORY COMMENTS: 16* 1) change(86-05-13,GJohnson), approve(86-05-13,MCR7387), 17* audit(86-05-13,Martinson), install(86-05-14,MR12.0-1056): 18* Correct error message documentation. 19* END HISTORY COMMENTS */ 20 21 22 rcp_message_: procedure; 23 24 /* This program implements the RCP message entry points. 25** Created on 04/25/75 by Bill Silver. 26** 27** This program has the following entry points: 28** 1. priv - Allows privileged users to send messages to the operator 29** that involve an attached device. 30** 2. tape - Generates a tape mount message. 31**/ 32 33 dcl arg_comment char(*); /* (I) Privileged comment. */ 34 dcl arg_ecode fixed bin(35); /* (O) error_table_ code. */ 35 dcl arg_rcp_id bit(36) aligned; /* (I) RCP ID. */ 36 dcl arg_volume_name char(*); /* (I) Name of reel to be mounted. */ 37 dcl arg_ring_flag bit(1); /* (I) ON => mount with write ring. */ 38 39 dcl caller_level fixed bin; /* Caller's validation level. */ 40 dcl ecode fixed bin(35); /* error_table_ code. */ 41 dcl rcp_id bit(36) aligned; /* RCP ID. */ 42 dcl volume_name char(32) aligned; /* Tape reel to be mounted. */ 43 dcl ring_comment char(8); /* "with" or "without" ring. */ 44 45 dcl cleanup condition; /* Used to set up cleanup handler. */ 46 47 dcl ( error_table_$invalid_state, 48 error_table_$no_operation ) fixed bin(35) external; 49 50 dcl admin_gate_$syserr entry options(variable); 51 dcl cu_$level_get entry (fixed bin); 52 dcl cu_$level_set entry (fixed bin); 53 dcl get_ring_ entry returns(fixed bin); 54 dcl rcp_comment_ entry (ptr); 55 dcl rcp_validate_ entry (bit(36) aligned, fixed bin, ptr, fixed bin(35)); 56 /* */ 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 */ 57 58 /* */ 59 priv: entry (arg_rcp_id, arg_comment, arg_ecode); 60 61 /* This entry point is called by privileged users in order to display a 62** comment to the operator. The comment should deal with an attached device. 63**/ 64 call cu_$level_get (caller_level); /* Get caller's validation level. */ 65 on cleanup begin; /* Cleanup if any trouble. */ 66 call cu_$level_set (caller_level); /* Reset validation level. */ 67 end; 68 call cu_$level_set (get_ring_()); /* Set validation level to RCP level. */ 69 70 rcp_id = arg_rcp_id; /* Get RCP ID. */ 71 call rcp_validate_ (rcp_id, caller_level, rcse_ptr, ecode); 72 if ecode ^= 0 /* Is RCP ID valid? */ 73 then goto PRIV_RETURN; /* No. */ 74 75 if (rcse.kind ^= 1) | /* Is this an attachment? */ 76 (^rcse.flags.priv) /* and was device attached with privilege? */ 77 then do; /* No, don't display the comment. */ 78 ecode = error_table_$no_operation; 79 goto PRIV_RETURN; 80 end; 81 82 rcse.caller_comment = arg_comment; /* Copy caller's comment. */ 83 call rcp_comment_ (rcse_ptr); /* Now go display this comment. */ 84 85 PRIV_RETURN: 86 call cu_$level_set (caller_level); /* Reset caller's validation level. */ 87 arg_ecode = ecode; 88 return; 89 /* */ 90 tape: entry (arg_rcp_id, arg_volume_name, arg_ring_flag, arg_ecode); 91 92 /* This entry point is called to display a tape mount message to the 93** operator. This is a temporary feature of RCP that will be deleted 94** when all callers of tdcm_ stop calling tdcm_$tdcm_message more 95** than once. 96**/ 97 call cu_$level_get (caller_level); /* Get caller's validation level. */ 98 on cleanup begin; /* Cleanup if any trouble. */ 99 call cu_$level_set (caller_level); /* Reset validation level. */ 100 end; 101 call cu_$level_set (get_ring_()); /* Set validation level to RCP level. */ 102 103 rcp_id = arg_rcp_id; /* Copy arguments. */ 104 volume_name = arg_volume_name; 105 if arg_ring_flag /* Are we mounting with or without a write ring? */ 106 then ring_comment = "with"; 107 else ring_comment = "without"; 108 109 call rcp_validate_ (rcp_id, caller_level, rcse_ptr, ecode); 110 if ecode ^= 0 /* Does caller have a right to this device? */ 111 then goto TAPE_RETURN; /* No, something wrong. */ 112 113 if rcse.dtypex ^= 1 /* Is this a tape device? */ 114 then do; /* No. */ 115 ecode = error_table_$no_operation; 116 goto TAPE_RETURN; 117 end; 118 119 if (rcse.kind ^= 1) | /* Is tape attached? */ 120 (rcse.state ^= 5) /* And is attachment completed? */ 121 then do; /* No. */ 122 ecode = error_table_$invalid_state; 123 goto TAPE_RETURN; 124 end; 125 126 rcse.volume_name = volume_name; /* Save this volume name. */ 127 call admin_gate_$syserr (3, "RCP: Mount Reel ^a ^a ring on ^a for ^a (switching volumes).", 128 volume_name, ring_comment, rcse.device_name, rcse.group_id); 129 130 TAPE_RETURN: 131 call cu_$level_set (caller_level); /* Reset to caller's validation level. */ 132 arg_ecode = ecode; 133 134 135 /* BEGIN MESSAGE DOCUMENTATION 136* 137* Message: 138* RCP: Mount Reel REELID with(out) ring on DRIVE for PERSON.PROJ.T (switching volumes). 139* 140* S: $beep 141* 142* T: $run 143* 144* M: A user process has requested the mounting of 145* tape reel REELID on drive DRIVE. 146* 147* A: Locate the requested reel. 148* Check to make sure that the user PERSON.PROJ is allowed to use the reel. 149* Insert or remove a write ring as specified. 150* Mount the reel on the specified drive. 151* 152* If the reel cannot be mounted, either because it 153* cannot be located, 154* access is incorrect, 155* or the drive is down, 156* use the "x deny" function to reject the mount request. 157* 158* 159*END MESSAGE DOCUMENTATION */ 160 161 end rcp_message_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0805.9 rcp_message_.pl1 >spec>install>1111>rcp_message_.pl1 57 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. admin_gate_$syserr 000014 constant entry external dcl 50 ref 127 arg_comment parameter char packed unaligned dcl 33 ref 59 82 arg_ecode parameter fixed bin(35,0) dcl 34 set ref 59 87* 90 132* arg_rcp_id parameter bit(36) dcl 35 ref 59 70 90 103 arg_ring_flag parameter bit(1) packed unaligned dcl 37 ref 90 105 arg_volume_name parameter char packed unaligned dcl 36 ref 90 104 caller_comment 64 based char(64) level 2 dcl 1-55 set ref 82* caller_level 000100 automatic fixed bin(17,0) dcl 39 set ref 64* 66* 71* 85* 97* 99* 109* 130* cleanup 000116 stack reference condition dcl 45 ref 65 98 cu_$level_get 000016 constant entry external dcl 51 ref 64 97 cu_$level_set 000020 constant entry external dcl 52 ref 66 68 85 99 101 130 device_name based char(8) level 2 dcl 1-55 set ref 127* dtypex 12 based fixed bin(17,0) level 2 dcl 1-55 ref 113 ecode 000101 automatic fixed bin(35,0) dcl 40 set ref 71* 72 78* 87 109* 110 115* 122* 132 error_table_$invalid_state 000010 external static fixed bin(35,0) dcl 47 ref 122 error_table_$no_operation 000012 external static fixed bin(35,0) dcl 47 ref 78 115 flags 35 based structure level 2 dcl 1-55 get_ring_ 000022 constant entry external dcl 53 ref 68 68 101 101 group_id 43 based char(32) level 2 dcl 1-55 set ref 127* kind 25 based fixed bin(17,0) level 2 dcl 1-55 ref 75 119 lock_info based structure level 1 dcl 1-46 priv 35(01) based bit(1) level 3 packed packed unaligned dcl 1-55 ref 75 rcp_comment_ 000024 constant entry external dcl 54 ref 83 rcp_id 000102 automatic bit(36) dcl 41 set ref 70* 71* 103* 109* rcp_validate_ 000026 constant entry external dcl 55 ref 71 109 rcse based structure level 1 dcl 1-55 rcse_ptr 000124 automatic pointer dcl 1-24 set ref 71* 75 75 82 83* 109* 113 119 119 126 127 127 ring_comment 000114 automatic char(8) packed unaligned dcl 43 set ref 105* 107* 127* state 24 based fixed bin(17,0) level 2 dcl 1-55 ref 119 volume_name 000103 automatic char(32) dcl 42 in procedure "rcp_message_" set ref 104* 126 127* volume_name 2 based char(32) level 2 in structure "rcse" dcl 1-55 in procedure "rcp_message_" set ref 126* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. 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. PRIV_RETURN 000212 constant label dcl 85 ref 72 79 TAPE_RETURN 000447 constant label dcl 130 ref 110 116 123 priv 000052 constant entry external dcl 59 rcp_message_ 000040 constant entry external dcl 22 tape 000231 constant entry external dcl 90 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 630 660 461 640 Length 1066 461 30 171 146 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_message_ 146 external procedure is an external procedure. on unit on line 65 68 on unit on unit on line 98 68 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_message_ 000100 caller_level rcp_message_ 000101 ecode rcp_message_ 000102 rcp_id rcp_message_ 000103 volume_name rcp_message_ 000114 ring_comment rcp_message_ 000124 rcse_ptr rcp_message_ 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. admin_gate_$syserr cu_$level_get cu_$level_set get_ring_ rcp_comment_ rcp_validate_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$invalid_state error_table_$no_operation LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000037 59 000045 64 000070 65 000076 66 000112 67 000121 68 000122 70 000140 71 000143 72 000160 75 000162 78 000171 79 000174 82 000175 83 000203 85 000212 87 000221 88 000223 90 000224 97 000247 98 000256 99 000272 100 000301 101 000302 103 000320 104 000323 105 000330 107 000340 109 000342 110 000357 113 000361 115 000365 116 000370 119 000371 122 000377 123 000402 126 000403 127 000406 130 000447 132 000456 161 000460 ----------------------------------------------------------- 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