COMPILATION LISTING OF SEGMENT hc_device_acct_ 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 1029.8 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 hc_device_acct_: proc (a_event_ptr); 14 15 /* * This procedure is an interface between RCP and the answering service. 16* * It is on the system tape and it runs in ring 4 in the initializer process. 17* * It receives wakeups sent by RCP from ring 1 in user processes, at the time 18* * of device assignments, attachments, and unassignments, and it calls the 19* * appropriate device_acct_ entry points to cause the users to be charged for 20* * their use of the I/O devices. 21* * 22* * The init entry point is called by hc_initlzr_auxl_init_, which is called by 23* * as_init_. That entry point creates an event call channel with the main entry 24* * point as its handler, and passes the channel id to RCP via a call to 25* * rcp_sys_$init_account_chan. The target of that gate, rcp_mount_timer_$account_init, 26* * stores the channel and process id's in rcp_data, where they will be available 27* * to all processes (in ring 1). 28* * 29* * Modification history: 30* * Initial coding July 1977 by T. Casey 31* * Modified October 1977 by T. Casey to pick up device user's process id which is 32* * passed in the event message, rather than using the sender_procid of 33* * the wakeup, which is the initializer process for a force unassign. 34* * 35**/ 36 37 /* DECLARATIONS */ 38 39 /* Parameters */ 40 41 dcl a_event_ptr ptr; 42 dcl a_code fixed bin (35); 43 44 /* Internal Static */ 45 46 dcl already_init bit (1) aligned int static init (""b); 47 48 /* External Static */ 49 50 dcl error_table_$action_not_performed ext static fixed bin (35); 51 52 /* External Entries */ 53 54 dcl as_$dump entry options (variable); 55 dcl as_$find_process entry (bit (36), fixed bin, ptr); 56 dcl condition_ entry (char (*), entry); 57 dcl (device_acct_$off, device_acct_$on, device_acct_$setup) entry (fixed bin, char (*), ptr); 58 dcl get_process_id_ entry returns (bit (36)); 59 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 60 dcl ipc_$decl_ev_call_chn entry (fixed bin (71), entry, ptr, fixed bin, fixed bin (35)); 61 dcl ipc_$unmask_ev_calls entry (fixed bin (35)); 62 dcl (ioa_$rsnnl, sys_log_, sys_log_$error_log) entry options (variable); 63 dcl rcp_sys_$init_account_chan entry (fixed bin (71), fixed bin (35)); 64 dcl system_info_$device_prices entry (fixed bin, ptr); 65 66 /* Automatic */ 67 68 dcl err_msg char (50); 69 dcl devname char (32); 70 71 dcl chn_id fixed bin (71); 72 dcl code fixed bin (35); 73 dcl devid fixed bin; 74 dcl l fixed bin; 75 dcl n_devtab_entries fixed bin; 76 dcl process_type fixed bin; 77 78 dcl utep ptr; 79 80 /* Builtin */ 81 82 dcl (addr, null) builtin; 83 84 /* Structures and based variables, and their pointers */ 85 86 dcl event_ptr ptr; 87 88 dcl 1 event_info based (event_ptr), 89 2 channel_id fixed bin (71), 90 2 msg like rcp_account_msg, 91 2 sender_procid bit (36), 92 2 origin, 93 3 dev_signal bit (18) unal, 94 2 ring fixed bin (17) unal, 95 2 data_ptr ptr; 96 97 dcl ev_msg (2) bit (36) based (addr (event_info.msg)); 98 99 dcl 1 devtab_copy (16) aligned, 100 2 device_id char (8), 101 2 device_price (0:7) float bin; 102 103 /* Include Files */ 104 1 1 /* BEGIN INCLUDE FILE rcp_account_msg.incl.pl1 B. Greenberg 8/1/77 */ 1 2 1 3 dcl 1 rcp_account_msg based aligned, /* Message format */ 1 4 2 device_user_procid bit (36), /* id of process using the device */ 1 5 1 6 2 rcp_data_relp bit (18) unal, /* Ptr to rcp_data entry for device */ 1 7 2 devtype fixed bin (8) unal, /* rcp device type involved */ 1 8 2 pad bit (6) unal, 1 9 2 action fixed bin (2) unal; /* see below... */ 1 10 1 11 dcl ( 1 12 RCP_ACCTMSG_assign init (0), 1 13 RCP_ACCTMSG_unassign init (1), 1 14 RCP_ACCTMSG_attach init (2) 1 15 ) options (constant) fixed bin (17) static; 1 16 1 17 /* END INCLUDE FILE rcp_account_msg.incl.pl1 */ 105 106 2 1 /* Begin include file ... rcp_resource_types.incl.pl1 2 2* * 2 3* * Created 3/79 by Michael R. Jordan for MR7.0R 2 4* * 2 5* * This include file defines the official RCP resource types. 2 6* * The array of names is indexed by the corresponding device type. 2 7* * MOD by RAF for MCA 2 8**/ 2 9 2 10 2 11 2 12 /****^ HISTORY COMMENTS: 2 13* 1) change(85-09-09,Fawcett), approve(85-09-09,MCR6979), 2 14* audit(85-12-09,CLJones), install(86-03-21,MR12.0-1033): 2 15* Support of MCA. 2 16* END HISTORY COMMENTS */ 2 17 2 18 dcl DEVICE_TYPE (8) char (32) 2 19 internal static options (constant) 2 20 init ("tape_drive", "disk_drive", "console", "printer", "punch", "reader", "special", "mca"); 2 21 2 22 dcl NUM_QUALIFIERS (8) fixed bin /* Number of qualifiers for each device type. */ 2 23 internal static init (3, 0, 0, 2, 0, 0, 0, 0); 2 24 2 25 dcl VOLUME_TYPE (8) char (32) 2 26 internal static options (constant) 2 27 init ("tape_vol", "disk_vol", "", "", "", "", "", ""); 2 28 2 29 dcl TAPE_DRIVE_DTYPEX fixed bin static internal options (constant) init (1); 2 30 dcl DISK_DRIVE_DTYPEX fixed bin static internal options (constant) init (2); 2 31 dcl CONSOLE_DTYPEX fixed bin static internal options (constant) init (3); 2 32 dcl PRINTER_DTYPEX fixed bin static internal options (constant) init (4); 2 33 dcl PUNCH_DTYPEX fixed bin static internal options (constant) init (5); 2 34 dcl READER_DTYPEX fixed bin static internal options (constant) init (6); 2 35 dcl SPECIAL_DTYPEX fixed bin static internal options (constant) init (7); 2 36 dcl MCA_DTYPEX fixed bin static internal options (constant) init (8); 2 37 dcl TAPE_VOL_VTYPEX fixed bin static internal options (constant) init (1); 2 38 dcl DISK_VOL_VTYPEX fixed bin static internal options (constant) init (2); 2 39 2 40 2 41 /* End include file ... rcp_resource_types.incl.pl1 */ 107 108 3 1 /* BEGIN INCLUDE FILE devid.incl.pl1 */ 3 2 3 3 /* Rewritten September 1977 by T. Casey to implement a new method of device charging. */ 3 4 3 5 3 6 /****^ HISTORY COMMENTS: 3 7* 1) change(85-10-07,Herbst), approve(87-07-21,MCR7694), 3 8* audit(87-07-21,GDixon), install(87-08-04,MR12.1-1056): 3 9* Add dsa_kbyt, dsa_kpkt and dsa_hour device types. 3 10* END HISTORY COMMENTS */ 3 11 3 12 3 13 /* This include file is used to avoid conflicts between system code and customer 3 14* sites over the use of elements of the devtab array in installation_parms. 3 15* 3 16* Sites can define new device types for terminal channel charging (for high-speed 3 17* lines, for example), set prices for them in installation_parms, and use their 3 18* names in the charge statement in the CMF. 3 19* 3 20* There also exists a set of system-defined devices, such as tape and disk, and 3 21* this set must be expandable. Code to charge for each one of these devices is 3 22* built into the system. That code can not reference specific elements in the 3 23* devtab array, since a site may have used any given element in that array for 3 24* one of its own devices. This include file solves that problem. 3 25* 3 26* The dev_id array contains the names of devices for which charging code is 3 27* built into the system. That array should be changed whenever new device 3 28* charging code is added. The order of device names in that array is insignificant. 3 29* The constants with names of the form dev_DEVICE are used for program 3 30* readability, to avoid having to reference specific entries in the dev_id 3 31* array with numeric constants as subscripts. 3 32* 3 33* The site must define devices of each of the names in the dev_id array, and 3 34* set prices for them. Otherwise, no charges will be made for use of those 3 35* devices. The ed_installation_parms procedure prints a warning, when 3 36* printing device prices, if any of the required devices is not defined. 3 37* 3 38* The static variables with names of the form devtab_ix_DEVICE are used to 3 39* hold the subscripts of the respective devices' devtab entries. These variables 3 40* must be assigned values at initialization time by the procedures that use them. 3 41* These procedures should call system_info_$device_prices to get a copy of devtab, 3 42* and then search devtab for a device_id equal to dev_id(dev_DEVICE) and remember 3 43* the subscript in devtab_ix_DEVICE. If the device is not defined, the devtab_ix 3 44* variable should remain zero, as an indication that charging for the device is 3 45* to be bypassed. 3 46* 3 47**/ 3 48 dcl dev_id (8) char (8) aligned int static options (constant) init 3 49 ("tape", "tape_mt", "disk", "disk_mt", "lv", 3 50 "dsa_kbyt", "dsa_kpkt", "dsa_hour"); 3 51 3 52 dcl dev_tape fixed bin int static options (constant) init (1); 3 53 dcl dev_tape_mt fixed bin int static options (constant) init (2); 3 54 dcl dev_disk fixed bin int static options (constant) init (3); 3 55 dcl dev_disk_mt fixed bin int static options (constant) init (4); 3 56 dcl dev_lv fixed bin int static options (constant) init (5); 3 57 dcl dev_dsa_kilobyte fixed bin int static options (constant) init (6); 3 58 dcl dev_dsa_kilopacket fixed bin int static options (constant) init (7); 3 59 dcl dev_dsa_hour fixed bin int static options (constant) init (8); 3 60 3 61 dcl devtab_ix_tape fixed bin int static init (0); 3 62 dcl devtab_ix_tape_mt fixed bin int static init (0); 3 63 dcl devtab_ix_disk fixed bin int static init (0); 3 64 dcl devtab_ix_disk_mt fixed bin int static init (0); 3 65 dcl devtab_ix_lv fixed bin int static init (0); 3 66 dcl devtab_ix_dsa_kilobyte fixed bin int static init (0); 3 67 dcl devtab_ix_dsa_kilopacket fixed bin int static init (0); 3 68 dcl devtab_ix_dsa_hour fixed bin int static init (0); 3 69 3 70 /* END INCLUDE FILE devid.incl.pl1 */ 109 110 111 112 /* PROCEDURE */ 113 114 115 /* Being an event-call handler, we must catch any conditions that could cause 116* the stack to be unwound, take an asdump, and return to ipc_. If the stack gets 117* unwound around ipc_, this event channel stays inhibited forever, since ipc_ 118* has no cleanup handler. 119**/ 120 121 call condition_ ("any_other", any_other_handler); 122 123 /* This code is temporary and non-general. Rather than attempt a complete 124* mapping between the devices known to RCP and those known to device_acct_ 125* (which is currently impossible), it merely enables charging for the use of 126* tapes and I/O disks (which are the only devices known to both subsystems). 127* Eventually, device_acct_ and the rest of accounting should use RCP device codes. 128**/ 129 130 event_ptr = a_event_ptr; 131 132 /* Validate the event message */ 133 134 if event_info.ring ^= 1 then do; /* it must be from ring 1 */ 135 err_msg = "not from ring 1"; 136 ev_msg_err: 137 call sys_log_ (2, "hc_device_acct_: RCP accounting wakeup ^a. Sender: ^w; ring: ^d; message: ^w ^w", 138 err_msg, event_info.sender_procid, event_info.ring, ev_msg); 139 /* note that ev_msg, a 2-element array, uses the last 2 ^w's */ 140 return; 141 end; 142 143 if event_info.sender_procid ^= event_info.device_user_procid then /* if wakeup sender ^= device user */ 144 if event_info.sender_procid ^= get_process_id_ () then /* and sender not initializer either */ 145 call sys_log_ (0, "hc_device_acct_: RCP accounting wakeup: sender process (^w) ^= device user process (^w)", 146 event_info.sender_procid, event_info.device_user_procid); 147 148 /* Translate device type */ 149 150 if event_info.devtype = TAPE_DRIVE_DTYPEX then /* map RCP code for tape */ 151 devid = devtab_ix_tape; /* into device_acct_ code for tape */ 152 else if event_info.devtype = DISK_DRIVE_DTYPEX then /* map RCP code for disk */ 153 devid = devtab_ix_disk; /* into device_acct_ code for disk */ 154 else return; /* this device is not one that we know how to charge for */ 155 156 /* Get pointer to user table entry */ 157 158 utep = null; 159 call as_$find_process (event_info.device_user_procid, process_type, utep); 160 if utep = null then do; 161 if event_info.action = RCP_ACCTMSG_unassign then return; /* must be a force_unassign for a destroyed process */ 162 call sys_log_ (0, "hc_device_acct_: Unable to find user table entry for process ^w", 163 event_info.device_user_procid); 164 /* don't bother the operator with this one, 165* but log it for the system programmers */ 166 return; 167 end; 168 169 /* Build device name. device_acct_ wants one, but we don't want to bother 170* looking at rcp_data in ring 1 to get the real one, so build a meaningful one 171* from the offset in rcp_data. */ 172 173 devname = ""; 174 call ioa_$rsnnl ("rcp_data_relp_^.3b", devname, l, event_info.rcp_data_relp); 175 176 /* Now call the appropriate device_acct_ entry */ 177 178 if event_info.action = RCP_ACCTMSG_assign then 179 call device_acct_$on (devid, devname, utep); 180 else if event_info.action = RCP_ACCTMSG_unassign then 181 call device_acct_$off (devid, devname, utep); 182 else if event_info.action = RCP_ACCTMSG_attach then 183 call device_acct_$setup (devid, devname, utep); 184 else do; 185 err_msg = "with invalid action code"; 186 goto ev_msg_err; 187 end; 188 189 /* All done */ 190 191 return_to_ipc_: /* come here via nonlocal goto from the any_other handler */ 192 return; 193 194 195 init: entry (a_code); 196 197 a_code = 0; /* until something goes wrong */ 198 if already_init then return; /* A.S. initialization is restartable */ 199 200 call ipc_$create_ev_chn (chn_id, code); 201 if code ^= 0 then do; 202 ev_chn_err: 203 call sys_log_ (2, "hc_device_acct_: Error creating event channel for RCP device accounting (code ^d)", code); 204 a_code = error_table_$action_not_performed; /* ipc_ returns nonstandard codes (1 thru 5) */ 205 return; 206 end; 207 208 call ipc_$decl_ev_call_chn (chn_id, hc_device_acct_, null (), (0), code); 209 if code ^= 0 then goto ev_chn_err; 210 211 call rcp_sys_$init_account_chan (chn_id, code); 212 if code ^= 0 then do; 213 call sys_log_$error_log (2, code, "hc_device_acct_", "From rcp_sys_$init_account_chan"); 214 a_code = code; 215 return; 216 end; 217 218 call system_info_$device_prices (n_devtab_entries, addr (devtab_copy)); 219 do devtab_ix_tape = 1 to n_devtab_entries /* look up tape in devtab */ 220 while (devtab_copy (devtab_ix_tape).device_id ^= dev_id (dev_tape)); 221 end; 222 if devtab_ix_tape = n_devtab_entries + 1 then /* if not there, we won't charge for tape */ 223 devtab_ix_tape = 0; 224 225 do devtab_ix_disk = 1 to n_devtab_entries /* look up disk in devtab */ 226 while (devtab_copy (devtab_ix_disk).device_id ^= dev_id (dev_disk)); 227 end; 228 if devtab_ix_disk = n_devtab_entries + 1 then /* if not there, we won't charge for disk */ 229 devtab_ix_disk = 0; 230 231 already_init = "1"b; /* if we got here with no errors, remember it not to init again */ 232 233 return; 234 235 236 237 any_other_handler: proc (mcp, cname, cop, inp, cont); 238 239 dcl (mcp, cop, inp) ptr, cname char (*), cont bit (1); 240 241 if cname = "quit" | cname = "cput" | cname = "alrm" | cname = "program_interrupt" then do; 242 cont = "1"b; /* let someone else handle it */ 243 return; /* return to signal_ */ 244 end; 245 246 call sys_log_ ("hc_device_acct_: signal ^a", cname); 247 call as_$dump ("hc_device_acct_"); 248 code = 0; /* someone we call (like device_acct_) 249* might have event calls masked */ 250 do while (code = 0); /* be sure to get completely unmasked */ 251 call ipc_$unmask_ev_calls (code); /* code = 4 means "you were not masked" */ 252 end; 253 goto return_to_ipc_; /* go get this event call channel uninhibited */ 254 255 end any_other_handler; 256 257 end hc_device_acct_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0800.9 hc_device_acct_.pl1 >spec>install>1110>hc_device_acct_.pl1 105 1 11/09/77 0713.6 rcp_account_msg.incl.pl1 >ldd>include>rcp_account_msg.incl.pl1 107 2 03/27/86 1120.0 rcp_resource_types.incl.pl1 >ldd>include>rcp_resource_types.incl.pl1 109 3 08/06/87 0913.4 devid.incl.pl1 >ldd>include>devid.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. DISK_DRIVE_DTYPEX constant fixed bin(17,0) initial dcl 2-30 ref 152 RCP_ACCTMSG_assign constant fixed bin(17,0) initial dcl 1-11 ref 178 RCP_ACCTMSG_attach constant fixed bin(17,0) initial dcl 1-11 ref 182 RCP_ACCTMSG_unassign constant fixed bin(17,0) initial dcl 1-11 ref 161 180 TAPE_DRIVE_DTYPEX constant fixed bin(17,0) initial dcl 2-29 ref 150 a_code parameter fixed bin(35,0) dcl 42 set ref 195 197* 204* 214* a_event_ptr parameter pointer dcl 41 ref 13 130 action 3(33) based fixed bin(2,0) level 3 packed packed unaligned dcl 88 set ref 161 178 180 182 addr builtin function dcl 82 ref 136 218 218 already_init 000010 internal static bit(1) initial dcl 46 set ref 198 231* as_$dump 000016 constant entry external dcl 54 ref 247 as_$find_process 000020 constant entry external dcl 55 ref 159 chn_id 000126 automatic fixed bin(71,0) dcl 71 set ref 200* 208* 211* cname parameter char packed unaligned dcl 239 set ref 237 241 241 241 241 246* code 000130 automatic fixed bin(35,0) dcl 72 set ref 200* 201 202* 208* 209 211* 212 213* 214 248* 250 251* condition_ 000022 constant entry external dcl 56 ref 121 cont parameter bit(1) packed unaligned dcl 239 set ref 237 242* cop parameter pointer dcl 239 ref 237 dev_disk constant fixed bin(17,0) initial dcl 3-54 ref 225 dev_id 000000 constant char(8) initial array dcl 3-48 ref 219 225 dev_tape constant fixed bin(17,0) initial dcl 3-52 ref 219 device_acct_$off 000024 constant entry external dcl 57 ref 180 device_acct_$on 000026 constant entry external dcl 57 ref 178 device_acct_$setup 000030 constant entry external dcl 57 ref 182 device_id 000142 automatic char(8) array level 2 dcl 99 set ref 219 225 device_user_procid 2 based bit(36) level 3 packed packed unaligned dcl 88 set ref 143 143* 159* 162* devid 000131 automatic fixed bin(17,0) dcl 73 set ref 150* 152* 178* 180* 182* devname 000115 automatic char(32) packed unaligned dcl 69 set ref 173* 174* 178* 180* 182* devtab_copy 000142 automatic structure array level 1 dcl 99 set ref 218 218 devtab_ix_disk 000012 internal static fixed bin(17,0) initial dcl 3-63 set ref 152 225* 225* 228 228* devtab_ix_tape 000011 internal static fixed bin(17,0) initial dcl 3-61 set ref 150 219* 219* 222 222* devtype 3(18) based fixed bin(8,0) level 3 packed packed unaligned dcl 88 set ref 150 152 err_msg 000100 automatic char(50) packed unaligned dcl 68 set ref 135* 136* 185* error_table_$action_not_performed 000014 external static fixed bin(35,0) dcl 50 ref 204 ev_msg based bit(36) array packed unaligned dcl 97 set ref 136* event_info based structure level 1 unaligned dcl 88 event_ptr 000140 automatic pointer dcl 86 set ref 130* 134 136 136 136 143 143 143 143 143 150 152 159 161 162 174 178 180 182 get_process_id_ 000032 constant entry external dcl 58 ref 143 inp parameter pointer dcl 239 ref 237 ioa_$rsnnl 000042 constant entry external dcl 62 ref 174 ipc_$create_ev_chn 000034 constant entry external dcl 59 ref 200 ipc_$decl_ev_call_chn 000036 constant entry external dcl 60 ref 208 ipc_$unmask_ev_calls 000040 constant entry external dcl 61 ref 251 l 000132 automatic fixed bin(17,0) dcl 74 set ref 174* mcp parameter pointer dcl 239 ref 237 msg 2 based structure level 2 packed packed unaligned dcl 88 set ref 136 n_devtab_entries 000133 automatic fixed bin(17,0) dcl 75 set ref 218* 219 222 225 228 null builtin function dcl 82 ref 158 160 208 208 process_type 000134 automatic fixed bin(17,0) dcl 76 set ref 159* rcp_account_msg based structure level 1 dcl 1-3 rcp_data_relp 3 based bit(18) level 3 packed packed unaligned dcl 88 set ref 174* rcp_sys_$init_account_chan 000050 constant entry external dcl 63 ref 211 ring 5(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 88 set ref 134 136* sender_procid 4 based bit(36) level 2 packed packed unaligned dcl 88 set ref 136* 143 143 143* sys_log_ 000044 constant entry external dcl 62 ref 136 143 162 202 246 sys_log_$error_log 000046 constant entry external dcl 62 ref 213 system_info_$device_prices 000052 constant entry external dcl 64 ref 218 utep 000136 automatic pointer dcl 78 set ref 158* 159* 160 178* 180* 182* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CONSOLE_DTYPEX internal static fixed bin(17,0) initial dcl 2-31 DEVICE_TYPE internal static char(32) initial array packed unaligned dcl 2-18 DISK_VOL_VTYPEX internal static fixed bin(17,0) initial dcl 2-38 MCA_DTYPEX internal static fixed bin(17,0) initial dcl 2-36 NUM_QUALIFIERS internal static fixed bin(17,0) initial array dcl 2-22 PRINTER_DTYPEX internal static fixed bin(17,0) initial dcl 2-32 PUNCH_DTYPEX internal static fixed bin(17,0) initial dcl 2-33 READER_DTYPEX internal static fixed bin(17,0) initial dcl 2-34 SPECIAL_DTYPEX internal static fixed bin(17,0) initial dcl 2-35 TAPE_VOL_VTYPEX internal static fixed bin(17,0) initial dcl 2-37 VOLUME_TYPE internal static char(32) initial array packed unaligned dcl 2-25 dev_disk_mt internal static fixed bin(17,0) initial dcl 3-55 dev_dsa_hour internal static fixed bin(17,0) initial dcl 3-59 dev_dsa_kilobyte internal static fixed bin(17,0) initial dcl 3-57 dev_dsa_kilopacket internal static fixed bin(17,0) initial dcl 3-58 dev_lv internal static fixed bin(17,0) initial dcl 3-56 dev_tape_mt internal static fixed bin(17,0) initial dcl 3-53 devtab_ix_disk_mt internal static fixed bin(17,0) initial dcl 3-64 devtab_ix_dsa_hour internal static fixed bin(17,0) initial dcl 3-68 devtab_ix_dsa_kilobyte internal static fixed bin(17,0) initial dcl 3-66 devtab_ix_dsa_kilopacket internal static fixed bin(17,0) initial dcl 3-67 devtab_ix_lv internal static fixed bin(17,0) initial dcl 3-65 devtab_ix_tape_mt internal static fixed bin(17,0) initial dcl 3-62 NAMES DECLARED BY EXPLICIT CONTEXT. any_other_handler 001171 constant entry internal dcl 237 ref 121 121 ev_chn_err 000723 constant label dcl 202 ref 209 ev_msg_err 000316 constant label dcl 136 ref 186 hc_device_acct_ 000252 constant entry external dcl 13 ref 208 208 init 000677 constant entry external dcl 195 return_to_ipc_ 000673 constant label dcl 191 ref 253 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1550 1624 1314 1560 Length 2102 1314 54 241 233 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME hc_device_acct_ 326 external procedure is an external procedure. any_other_handler 84 internal procedure is assigned to an entry variable. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 already_init hc_device_acct_ 000011 devtab_ix_tape hc_device_acct_ 000012 devtab_ix_disk hc_device_acct_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME hc_device_acct_ 000100 err_msg hc_device_acct_ 000115 devname hc_device_acct_ 000126 chn_id hc_device_acct_ 000130 code hc_device_acct_ 000131 devid hc_device_acct_ 000132 l hc_device_acct_ 000133 n_devtab_entries hc_device_acct_ 000134 process_type hc_device_acct_ 000136 utep hc_device_acct_ 000140 event_ptr hc_device_acct_ 000142 devtab_copy hc_device_acct_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac tra_ext_1 ext_entry int_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. as_$dump as_$find_process condition_ device_acct_$off device_acct_$on device_acct_$setup get_process_id_ ioa_$rsnnl ipc_$create_ev_chn ipc_$decl_ev_call_chn ipc_$unmask_ev_calls rcp_sys_$init_account_chan sys_log_ sys_log_$error_log system_info_$device_prices THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000247 121 000257 130 000302 134 000306 135 000313 136 000316 140 000363 143 000364 150 000432 152 000445 154 000453 158 000454 159 000456 160 000470 161 000474 162 000502 166 000527 173 000530 174 000533 178 000567 180 000617 182 000643 185 000667 186 000672 191 000673 195 000674 197 000704 198 000706 200 000711 201 000721 202 000723 204 000751 205 000755 208 000756 209 001004 211 001006 212 001017 213 001021 214 001061 215 001064 218 001065 219 001100 221 001124 222 001126 225 001133 227 001156 228 001160 231 001165 233 001167 237 001170 241 001204 242 001226 243 001232 246 001233 247 001252 248 001271 250 001273 251 001277 252 001306 253 001307 ----------------------------------------------------------- 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