COMPILATION LISTING OF SEGMENT ssu_usage_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1638.3 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 8 /* Manages the SUBSYSTEM.ssusage segments, which are used to record usage of the subsystem, as well as to keep track of 9* blast messages */ 10 11 /* Created: 15 May 1980 by W. Olin Sibert */ 12 /* Modified: 4 November 1981 by W. Olin Sibert to change the suffix of usage segments to ".ssusage" */ 13 /* Modified: 5 November 1981 by G. Palter to properly count usage of the latest subsystem version */ 14 15 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 16 17 18 ssu_usage_: 19 procedure (); 20 21 22 /* Parameters */ 23 24 dcl P_sci_ptr pointer parameter; 25 dcl P_code fixed binary (35) parameter; 26 27 dcl P_ref_ptr pointer parameter; /* implements referencing_dir to find the usage segment */ 28 29 dcl P_threshold fixed binary parameter; /* print_blast: maximum number of times to print the blast */ 30 dcl P_blast_message character (*) varying parameter; /* print_blast: a message to users of the subsystem */ 31 32 33 /* Local copies of parameters */ 34 35 dcl ref_ptr pointer; 36 37 dcl code fixed binary (35); 38 39 40 /* Remaining declarations */ 41 42 dcl silent_sw bit (1) aligned; /* ON => print the blast message */ 43 44 dcl user_name character (24); 45 dcl (idx, jdx) fixed binary; 46 dcl usage_seg_name character (32); 47 48 dcl continue_to_signal_ entry (fixed binary (35)); 49 dcl find_condition_info_ entry (pointer, pointer, fixed binary (35)); 50 dcl hcs_$make_ptr entry (pointer, character (*), character (*), pointer, fixed binary (35)); 51 dcl hcs_$set_bc_seg entry (pointer, fixed binary (24), fixed binary (35)); 52 dcl ioa_ entry () options (variable); 53 dcl user_info_$whoami entry (character (*), character (*), character (*)); 54 55 dcl error_table_$fatal_error fixed binary (35) external; 56 dcl error_table_$action_not_performed fixed binary (35) external; 57 58 dcl (cleanup, any_other) condition; 59 60 dcl (addr, clock, currentsize, hbound, length, maxlength, null, rtrim, substr) builtin; 61 62 /* */ 63 64 /* Record a use of the subsystem and print a blast message if this user has not seen it P_threshold times */ 65 66 print_blast: 67 entry (P_sci_ptr, P_ref_ptr, P_threshold, P_blast_message, P_code); 68 69 sci_ptr = P_sci_ptr; 70 ref_ptr = P_ref_ptr; 71 silent_sw = "0"b; 72 go to COMMON; 73 74 75 /* Record a use of the subsystem */ 76 77 record_usage: 78 entry (P_sci_ptr, P_ref_ptr, P_code); 79 80 sci_ptr = P_sci_ptr; 81 ref_ptr = P_ref_ptr; 82 silent_sw = "1"b; 83 go to COMMON; 84 85 86 COMMON: 87 call ssu_check_sci (sci_ptr); 88 89 usage_seg_name = rtrim (sci.subsystem_name) || ".ssusage"; 90 91 call hcs_$make_ptr (ref_ptr, usage_seg_name, (""), usage_seg_ptr, code); 92 if code ^= 0 then do; 93 PUNT_FOR_GOOD: /* come here if we decide that it's hopeless */ 94 P_code = error_table_$fatal_error; 95 return; 96 end; 97 98 on condition (any_other) /* set up to catch faults */ 99 call signal_handler (); 100 101 usage_seg.write_word = 1713359; /* see if we can write to it */ 102 103 call user_info_$whoami (user_name, (""), ("")); 104 105 call lookup_user_entry (idx); /* see if we can find the right one */ 106 107 usage_seg.user (idx).last_time = clock (); /* now, update the info in the segment */ 108 usage_seg.user (idx).total_count = usage_seg.user (idx).total_count + 1; 109 110 usage_seg.all.last_time = clock (); 111 usage_seg.all.total_count = usage_seg.all.total_count + 1; 112 113 if usage_seg.user (idx).version ^= sci.subsystem_version then do; 114 usage_seg.user (idx).version = sci.subsystem_version; 115 usage_seg.user (idx).this_version_count = 1; 116 usage_seg.user (idx).this_version_blast = 0; 117 end; 118 else usage_seg.user (idx).this_version_count = usage_seg.user (idx).this_version_count + 1; 119 120 if ^silent_sw then do; /* should we print the blast? */ 121 if usage_seg.user (idx).this_version_blast < P_threshold then do; 122 usage_seg.user (idx).this_version_blast = usage_seg.user (idx).this_version_blast + 1; 123 call ioa_ ("^a ^a^[: ^a^]", sci.subsystem_name, sci.subsystem_version, (length (P_blast_message) > 0), 124 P_blast_message); 125 end; 126 end; 127 128 P_code = 0; 129 130 return; /* all done */ 131 132 /* */ 133 134 /* Handles any faults which occur while referencing the usage segment */ 135 136 signal_handler: 137 procedure (); 138 139 dcl 1 cond_info aligned like condition_info automatic; 140 dcl idx fixed binary; 141 dcl code fixed binary (35); 142 dcl name character (32); 143 144 dcl GOOD_CONDITIONS (9) character (32) static options (constant) 145 initial ("alrm", "cput", "finish", "mme2", "program_interrupt", "quit", "trm_", "sus_", "wkp_"); 146 147 cond_info.version = 1; 148 149 call find_condition_info_ ((null ()), addr (cond_info), code); 150 if code ^= 0 then goto PUNT_FOR_GOOD; 151 152 if substr (cond_info.condition_name, 1, 8) = "command_" then do; 153 call continue_to_signal_ ((0)); 154 return; 155 end; 156 157 do idx = 1 to hbound (GOOD_CONDITIONS, 1); 158 if cond_info.condition_name = GOOD_CONDITIONS (idx) then do; 159 call continue_to_signal_ ((0)); 160 return; 161 end; 162 end; 163 164 go to PUNT_FOR_GOOD; /* can't reference the usage segment */ 165 166 end signal_handler; 167 168 /* */ 169 170 /* Looks up the user's entry in the usage segment, creating an entry if necessary */ 171 172 lookup_user_entry: 173 procedure (p_idx); 174 175 dcl p_idx fixed binary parameter; 176 dcl idx fixed binary; 177 178 if usage_seg.count >= USAGE_SEG_MAX_ENTRIES then /* something wrong here */ 179 go to PUNT_FOR_GOOD; 180 181 if usage_seg.version ^= USAGE_SEG_VERSION_1 then do; 182 usage_seg.count = 0; /* either transhed or needs to be initialized */ 183 usage_seg.version = USAGE_SEG_VERSION_1; 184 end; 185 186 do idx = 1 to usage_seg.count; 187 if usage_seg.user (idx).name = user_name then do; 188 p_idx = idx; /* found it */ 189 return; 190 end; 191 end; 192 193 usage_seg.count = usage_seg.count + 1; /* update the count */ 194 idx = usage_seg.count; /* this could race, but not harmfully */ 195 196 usage_seg.user (idx).name = user_name; /* fill it in */ 197 usage_seg.user (idx).first_time = clock (); 198 usage_seg.user (idx).last_time = 0; 199 usage_seg.user (idx).version = ""; 200 usage_seg.user (idx).total_count = 0; 201 usage_seg.user (idx).this_version_count = 0; 202 usage_seg.user (idx).this_version_blast = 0; 203 usage_seg.user (idx).hash_thread = 0; 204 usage_seg.user (idx).pad1 (*) = ""b; 205 206 call hcs_$set_bc_seg (usage_seg_ptr, (36 * currentsize (usage_seg)), (0)); 207 /* update the bitcount to reflect the new entry */ 208 209 p_idx = idx; 210 211 return; 212 213 end lookup_user_entry; 214 215 /* */ 216 1 1 /* BEGIN: _ssu_check_sci.incl.pl1 * * * * * */ 1 2 1 3 /* Created: 25 February 1982 by G. Palter */ 1 4 /* Modified: 6 November 1984 by G. Palter for version 3 and new sub_err_ 1 5* calling sequence */ 1 6 1 7 1 8 /****^ HISTORY COMMENTS: 1 9* 1) change(87-02-07,GDixon), approve(87-05-25,MCR7680), 1 10* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 1 11* Modified to verify that p_sci_ptr has proper its modifier by overlaying it 1 12* with the structure in its.incl.pl1, rather than assuming knowledge of 1 13* pointer format. 1 14* END HISTORY COMMENTS */ 1 15 1 16 1 17 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 1 18 1 19 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 20 /* */ 1 21 /* Validates that the caller's sci_ptr acutally references a valid */ 1 22 /* subsystem control info structure. */ 1 23 /* */ 1 24 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 25 1 26 ssu_check_sci: 1 27 procedure (p_sci_ptr); 1 28 1 29 dcl p_sci_ptr pointer parameter; 1 30 1 31 dcl SSU_ character (32) static options (constant) initial ("ssu_"); 1 32 1 33 dcl error_table_$bad_ptr fixed binary (35) external; 1 34 dcl error_table_$null_info_ptr fixed binary (35) external; 1 35 dcl error_table_$unimplemented_version fixed binary (35) external; 1 36 1 37 dcl sub_err_ entry () options (variable); 1 38 1 39 dcl (null, substr, unspec) builtin; 1 40 1 41 if addr(p_sci_ptr) -> its.its_mod ^= ITS_MODIFIER then do; 1 42 RESIGNAL_BAD_POINTER: 1 43 call sub_err_ (error_table_$bad_ptr, SSU_, ACTION_CANT_RESTART, null (), (0), "^24.3b", unspec (p_sci_ptr)); 1 44 go to RESIGNAL_BAD_POINTER; 1 45 end; 1 46 1 47 if p_sci_ptr = null () then do; 1 48 RESIGNAL_NULL_POINTER: 1 49 call sub_err_ (error_table_$null_info_ptr, SSU_, ACTION_CANT_RESTART, null (), (0), "sci_ptr"); 1 50 go to RESIGNAL_NULL_POINTER; 1 51 end; 1 52 1 53 if p_sci_ptr -> sci.version = SCI_VERSION_3 then /* all is well */ 1 54 return; 1 55 1 56 RESIGNAL_BAD_VERSION: 1 57 call sub_err_ (error_table_$unimplemented_version, SSU_, ACTION_CANT_RESTART, null (), (0), "^24.3b", 1 58 unspec (p_sci_ptr -> sci.version)); 1 59 go to RESIGNAL_BAD_VERSION; 1 60 2 1 /* BEGIN INCLUDE FILE its.incl.pl1 2 2* modified 27 July 79 by JRDavis to add its_unsigned 2 3* Internal format of ITS pointer, including ring-number field for follow-on processor */ 2 4 2 5 dcl 1 its based aligned, /* declaration for ITS type pointer */ 2 6 2 pad1 bit (3) unaligned, 2 7 2 segno bit (15) unaligned, /* segment number within the pointer */ 2 8 2 ringno bit (3) unaligned, /* ring number within the pointer */ 2 9 2 pad2 bit (9) unaligned, 2 10 2 its_mod bit (6) unaligned, /* should be 43(8) */ 2 11 2 12 2 offset bit (18) unaligned, /* word offset within the addressed segment */ 2 13 2 pad3 bit (3) unaligned, 2 14 2 bit_offset bit (6) unaligned, /* bit offset within the word */ 2 15 2 pad4 bit (3) unaligned, 2 16 2 mod bit (6) unaligned; /* further modification */ 2 17 2 18 dcl 1 itp based aligned, /* declaration for ITP type pointer */ 2 19 2 pr_no bit (3) unaligned, /* number of pointer register to use */ 2 20 2 pad1 bit (27) unaligned, 2 21 2 itp_mod bit (6) unaligned, /* should be 41(8) */ 2 22 2 23 2 offset bit (18) unaligned, /* word offset from pointer register word offset */ 2 24 2 pad2 bit (3) unaligned, 2 25 2 bit_offset bit (6) unaligned, /* bit offset relative to new word offset */ 2 26 2 pad3 bit (3) unaligned, 2 27 2 mod bit (6) unaligned; /* further modification */ 2 28 2 29 2 30 dcl 1 its_unsigned based aligned, /* just like its, but with unsigned binary */ 2 31 2 pad1 bit (3) unaligned, 2 32 2 segno fixed bin (15) unsigned unaligned, 2 33 2 ringno fixed bin (3) unsigned unaligned, 2 34 2 pad2 bit (9) unaligned, 2 35 2 its_mod bit (6) unaligned, 2 36 2 37 2 offset fixed bin (18) unsigned unaligned, 2 38 2 pad3 bit (3) unaligned, 2 39 2 bit_offset fixed bin (6) unsigned unaligned, 2 40 2 pad4 bit (3) unaligned, 2 41 2 mod bit (6) unaligned; 2 42 2 43 dcl 1 itp_unsigned based aligned, /* just like itp, but with unsigned binary where appropriate */ 2 44 2 pr_no fixed bin (3) unsigned unaligned, 2 45 2 pad1 bit (27) unaligned, 2 46 2 itp_mod bit (6) unaligned, 2 47 2 48 2 offset fixed bin (18) unsigned unaligned, 2 49 2 pad2 bit (3) unaligned, 2 50 2 bit_offset fixed bin (6) unsigned unaligned, 2 51 2 pad3 bit (3) unaligned, 2 52 2 mod bit (6) unaligned; 2 53 2 54 2 55 dcl ITS_MODIFIER bit (6) unaligned internal static options (constant) init ("43"b3); 2 56 dcl ITP_MODIFIER bit (6) unaligned internal static options (constant) init ("41"b3); 2 57 2 58 /* END INCLUDE FILE its.incl.pl1 */ 1 61 1 62 3 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 1 63 1 64 1 65 end ssu_check_sci; 1 66 1 67 1 68 /* END OF: _ssu_check_sci.incl.pl1 * * * * * */ 217 218 4 1 /* BEGIN INCLUDE FILE ... _ssu_sci.incl.pl1 */ 4 2 /* Created: 31 April 1980 by W. Olin Sibert */ 4 3 /* Modified: 17 November 1981 by Jay Pattin to add info_prefix */ 4 4 /* Modified: 10 December 1981 by G. Palter to make arg_count, arg_ptr, return_arg, and arg_list_ptr replaceable */ 4 5 /* Modified: 10 February 1982 by G. Palter to reorganize and make changes required for installation */ 4 6 /* Modified: June 1982 by G. Palter for version 2 (new request processor options and replaceable procedures) */ 4 7 /* Modified: 6 November 1984 by G. Palter for version 3 (get_subsystem_and_request_name is now replaceable) */ 4 8 4 9 /* format: style4,^delnl */ 4 10 4 11 4 12 /* Structure used internally by subsystem utilities to contain control information about a single invocation */ 4 13 4 14 dcl 1 sci aligned based (sci_ptr), 4 15 2 version character (8), 4 16 2 parent_area_ptr pointer, /* -> area holding this data and referenced structures */ 4 17 4 18 2 global_info, /* global information about this subsystem ... */ 4 19 3 subsystem_name char (32) unaligned, /* ... its name (eg: read_mail) */ 4 20 3 subsystem_version char (32) unaligned, /* ... its version numer (eg: 4.3j) */ 4 21 3 info_ptr pointer, /* ... -> data maintained by the subsystem */ 4 22 3 standalone_abort_entry entry () variable, /* ... for standalone invocations: called by ssu_$abort_* */ 4 23 3 flags, 4 24 4 standalone_invocation bit (1) unaligned, /* ... ON => ssu_$standalone_invocation was used */ 4 25 4 in_listener bit (1) unaligned, /* ... ON => in subsystem listener loop */ 4 26 4 executing_request bit (1) unaligned, /* ... ON => executing a request */ 4 27 4 debug_mode bit (1) unaligned, /* ... ON => debugging the subsystem */ 4 28 4 pad bit (32) unaligned, 4 29 4 30 2 recursion_info, /* describes relationship of this invocation to other active 4 31* invocations of the same subsystem ... */ 4 32 3 invocation_data_idx fixed binary, /* ... locates the list of active invocations */ 4 33 3 level fixed binary, /* ... # of active invocations when this one created + 1 */ 4 34 3 previous_sci_ptr pointer, /* ... -> description of previous invocation */ 4 35 3 next_sci_ptr pointer, /* ... -> description of next invocation */ 4 36 4 37 2 request_processor_info, /* information related to request line processing ... */ 4 38 3 request_tables_ptr pointer, /* ... -> list of request tables in use */ 4 39 3 rp_options_ptr pointer, /* ... -> options controlling the processor */ 4 40 3 abort_line_label label variable, 4 41 3 request_data_ptr pointer, /* ... -> request_data structure for current request */ 4 42 4 43 2 prompt_and_ready_info, /* information related to prompts and ready messages ... */ 4 44 3 prompt character (64) varying, /* the prompt (if any): an ioa_ control string */ 4 45 3 prompt_mode, /* controls prompting ... */ 4 46 4 dont_prompt bit (1) unaligned, /* ... ON => never prompt */ 4 47 4 prompt_after_null_lines bit (1) unaligned, /* ... ON => prompt after a blank line if prompts enabled */ 4 48 4 dont_prompt_if_typeahead bit (1) unaligned, /* ... ON => suppress prompts if request line available */ 4 49 4 pad bit (33) unaligned, 4 50 3 ready_enabled bit (1) aligned, /* ... ON => ready procedure should be invoked */ 4 51 4 52 2 listener_info, /* information used by the listener ... */ 4 53 3 abort_subsystem_label label variable, 4 54 3 temp_seg_ptr pointer, /* ... -> temporary segment used for long request lines */ 4 55 4 56 2 temp_info_ptr pointer, /* pointer to data used by ssu_temp_mgr_ */ 4 57 4 58 2 info_info, /* information related to self-documentation ... */ 4 59 3 info_dirs_ptr pointer, /* ... -> list of info directories */ 4 60 3 info_prefix character (32), /* ... prefix used to form info segment names */ 4 61 4 62 2 ec_info, /* data for subsystem exec_com processing ... */ 4 63 3 ec_suffix char (32) unaligned, /* ... suffix of exec_com segments */ 4 64 3 ec_search_list char (32) unaligned, /* ... search list used to find exec_coms */ 4 65 3 subsystem_dir_ptr pointer, /* ... defines referencing_dir rule for above search list */ 4 66 4 67 2 entries, /* all replaceable entries ... */ 4 68 ( 4 69 3 abort_line, /* ... invoked by ssu_$abort_line */ 4 70 3 abort_subsystem, /* ... invoked by ssu_$abort_subsystem */ 4 71 3 print_message, /* ... invoked by ssu_$print_message */ 4 72 3 program_interrupt, /* ... cannot be called externally */ 4 73 3 pre_request_line, /* ... cannot be called externally */ 4 74 3 post_request_line, /* ... cannot be called externally */ 4 75 3 ready, /* ... invoked by ssu_$ready_proc */ 4 76 3 cpescape, /* ... cannot be called externally */ 4 77 3 unknown_request, /* ... invoked by ssu_$unknown_request */ 4 78 3 listen, /* ... invoked by ssu_$listen */ 4 79 3 execute_line, /* ... invoked by ssu_$execute_line */ 4 80 3 evaluate_active_string, /* ... invoked by ssu_$evaluate_active_string */ 4 81 3 invoke_request, /* ... invoked by ssu_$invoke_request */ 4 82 3 locate_request, /* ... invoked by ssu_$locate_request */ 4 83 3 arg_count, /* ... invoked by ssu_$arg_count */ 4 84 3 arg_ptr, /* ... invoked by ssu_$arg_ptr */ 4 85 3 return_arg, /* ... invoked by ssu_$return_arg */ 4 86 3 arg_list_ptr, /* ... invoked by ssu_$arg_list_ptr */ 4 87 3 get_default_rp_options, /* ... invoked by ssu_$get_default_rp_options */ 4 88 3 get_rp_options, /* ... invoked by ssu_$get_request_processor_options */ 4 89 3 set_rp_options, /* ... invoked by ssu_$set_request_processor_options */ 4 90 3 reset_rp_options, /* ... invoked by ssu_$reset_request_processor_options */ 4 91 3 get_subsys_and_request_name /* ... invoked by ssu_$get_subsystem_and_request_name */ 4 92 ) entry () variable options (variable); 4 93 4 94 dcl sci_ptr pointer; 4 95 4 96 dcl sci_parent_area area based (sci.parent_area_ptr); 4 97 4 98 dcl SCI_VERSION_3 character (8) static options (constant) init ("sci_0003"); 4 99 4 100 /* END INCLUDE FILE ... _ssu_sci.incl.pl1 */ 219 220 5 1 /* BEGIN INCLUDE FILE ... _ssu_usage_seg.incl.pl1 */ 5 2 /* Created: by W. Olin Sibert */ 5 3 5 4 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 5 5 5 6 5 7 /* Description of the segment recording usage of a subsystem */ 5 8 5 9 dcl 1 usage_seg aligned based (usage_seg_ptr), 5 10 2 version fixed binary, /* version */ 5 11 2 count fixed binary, /* how many users are recorded herein */ 5 12 2 write_word fixed binary (35), /* a word to try writing into, to cause a fault */ 5 13 2 pad1 (13) bit (36), 5 14 2 hash_table (0:126) fixed binary (18), /* unused */ 5 15 2 use_hash_table bit (1) aligned, /* ON => above hash table is usable */ 5 16 2 all aligned like usage_seg_entry, /* entry to record usage for all users */ 5 17 2 user (0 refer (usage_seg.count)) aligned like usage_seg_entry; 5 18 5 19 dcl usage_seg_ptr pointer; 5 20 5 21 dcl USAGE_SEG_MAX_ENTRIES fixed binary static options (constant) initial (5427); 5 22 /* maximum number of entries, minus 10 for safety */ 5 23 5 24 dcl USAGE_SEG_VERSION_1 fixed binary static options (constant) initial (1); 5 25 dcl USAGE_SEG_VERSION fixed binary static options (constant) initial (1); 5 26 5 27 5 28 /* Data recorded for each individual user of the subsystem */ 5 29 5 30 dcl 1 usage_seg_entry aligned based, 5 31 2 name character (24), /* name of user */ 5 32 2 first_time fixed binary (71), /* first time she's used the subsystem */ 5 33 2 last_time fixed binary (71), /* most recent time */ 5 34 2 version character (32), /* most recent version she's used */ 5 35 2 total_count fixed binary (35), /* total number of usages */ 5 36 2 this_version_count fixed binary (35), /* number of times for current version */ 5 37 2 this_version_blast fixed binary (35), /* number of times she's been blasted */ 5 38 2 hash_thread fixed binary (18), /* hash table thread; not presently used */ 5 39 2 pad1 (2) bit (36); /* pad to 48 words */ 5 40 5 41 /* END INCLUDE FILE ... _ssu_usage_seg.incl.pl1 */ 221 222 6 1 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 6 2 6 3 /* Structure for find_condition_info_. 6 4* 6 5* Written 1-Mar-79 by M. N. Davidoff. 6 6**/ 6 7 6 8 /* automatic */ 6 9 6 10 declare condition_info_ptr pointer; 6 11 6 12 /* based */ 6 13 6 14 declare 1 condition_info aligned based (condition_info_ptr), 6 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 6 16 2 version fixed binary, /* Must be 1 */ 6 17 2 condition_name char (32) varying, /* name of condition */ 6 18 2 info_ptr pointer, /* pointer to the condition data structure */ 6 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 6 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 6 21 2 flags unaligned, 6 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 6 23 3 pad1 bit (35), 6 24 2 pad2 bit (36), 6 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 6 26 2 pad3 (4) bit (36); 6 27 6 28 /* internal static */ 6 29 6 30 declare condition_info_version_1 6 31 fixed binary internal static options (constant) initial (1); 6 32 6 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 223 224 225 end ssu_usage_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1539.4 ssu_usage_.pl1 >special_ldd>install>MR12.1-1054>ssu_usage_.pl1 217 1 08/04/87 1140.5 _ssu_check_sci.incl.pl1 >spec>install>1056>_ssu_check_sci.incl.pl1 1-61 2 11/26/79 1320.6 its.incl.pl1 >ldd>include>its.incl.pl1 1-63 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.incl.pl1 219 4 01/21/85 0912.2 _ssu_sci.incl.pl1 >ldd>include>_ssu_sci.incl.pl1 221 5 04/13/82 1620.2 _ssu_usage_seg.incl.pl1 >ldd>include>_ssu_usage_seg.incl.pl1 223 6 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.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. ACTION_CANT_RESTART 000135 constant bit(36) initial dcl 3-7 set ref 1-42* 1-48* 1-56* GOOD_CONDITIONS 000010 constant char(32) initial array unaligned dcl 144 ref 157 158 ITS_MODIFIER constant bit(6) initial unaligned dcl 2-55 ref 1-41 P_blast_message parameter varying char dcl 30 set ref 66 123 123* P_code parameter fixed bin(35,0) dcl 25 set ref 66 77 93* 128* P_ref_ptr parameter pointer dcl 27 ref 66 70 77 81 P_sci_ptr parameter pointer dcl 24 ref 66 69 77 80 P_threshold parameter fixed bin(17,0) dcl 29 ref 66 121 SCI_VERSION_3 000120 constant char(8) initial unaligned dcl 4-98 ref 1-53 SSU_ 000000 constant char(32) initial unaligned dcl 1-31 set ref 1-42* 1-48* 1-56* USAGE_SEG_MAX_ENTRIES constant fixed bin(17,0) initial dcl 5-21 ref 178 USAGE_SEG_VERSION_1 constant fixed bin(17,0) initial dcl 5-24 ref 181 183 addr builtin function dcl 60 ref 149 149 1-41 all 220 based structure level 2 dcl 5-9 any_other 000124 stack reference condition dcl 58 ref 98 clock builtin function dcl 60 ref 107 110 197 code 000141 automatic fixed bin(35,0) dcl 141 in procedure "signal_handler" set ref 149* 150 code 000102 automatic fixed bin(35,0) dcl 37 in procedure "ssu_usage_" set ref 91* 92 cond_info 000106 automatic structure level 1 dcl 139 set ref 149 149 condition_info based structure level 1 dcl 6-14 condition_name 3 000106 automatic varying char(32) level 2 dcl 139 set ref 152 158 continue_to_signal_ 000010 constant entry external dcl 48 ref 153 159 count 1 based fixed bin(17,0) level 2 dcl 5-9 set ref 178 182* 186 193* 193 194 206 currentsize builtin function dcl 60 ref 206 error_table_$bad_ptr 000026 external static fixed bin(35,0) dcl 1-33 set ref 1-42* error_table_$fatal_error 000024 external static fixed bin(35,0) dcl 55 ref 93 error_table_$null_info_ptr 000030 external static fixed bin(35,0) dcl 1-34 set ref 1-48* error_table_$unimplemented_version 000032 external static fixed bin(35,0) dcl 1-35 set ref 1-56* find_condition_info_ 000012 constant entry external dcl 49 ref 149 first_time 256 based fixed bin(71,0) array level 3 dcl 5-9 set ref 197* global_info 4 based structure level 2 dcl 4-14 hash_thread 275 based fixed bin(18,0) array level 3 dcl 5-9 set ref 203* hbound builtin function dcl 60 ref 157 hcs_$make_ptr 000014 constant entry external dcl 50 ref 91 hcs_$set_bc_seg 000016 constant entry external dcl 51 ref 206 idx 000112 automatic fixed bin(17,0) dcl 45 in procedure "ssu_usage_" set ref 105* 107 108 108 113 114 115 116 118 118 121 122 122 idx 000146 automatic fixed bin(17,0) dcl 176 in procedure "lookup_user_entry" set ref 186* 187 188* 194* 196 197 198 199 200 201 202 203 204 209 idx 000140 automatic fixed bin(17,0) dcl 140 in procedure "signal_handler" set ref 157* 158* ioa_ 000020 constant entry external dcl 52 ref 123 its based structure level 1 dcl 2-5 its_mod 0(30) based bit(6) level 2 packed unaligned dcl 2-5 ref 1-41 last_time 230 based fixed bin(71,0) level 3 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 110* last_time 260 based fixed bin(71,0) array level 3 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 107* 198* length builtin function dcl 60 ref 123 name 250 based char(24) array level 3 dcl 5-9 set ref 187 196* null builtin function dcl 60 in procedure "ssu_usage_" ref 149 null builtin function dcl 1-39 in procedure "ssu_check_sci" ref 1-42 1-42 1-47 1-48 1-48 1-56 1-56 p_idx parameter fixed bin(17,0) dcl 175 set ref 172 188* 209* p_sci_ptr parameter pointer dcl 1-29 set ref 1-26 1-41 1-42 1-42 1-47 1-53 1-56 1-56 pad1 276 based bit(36) array level 3 dcl 5-9 set ref 204* ref_ptr 000100 automatic pointer dcl 35 set ref 70* 81* 91* rtrim builtin function dcl 60 ref 89 sci based structure level 1 dcl 4-14 sci_ptr 000132 automatic pointer dcl 4-94 set ref 69* 80* 86* 89 113 114 123 123 silent_sw 000103 automatic bit(1) dcl 42 set ref 71* 82* 120 sub_err_ 000034 constant entry external dcl 1-37 ref 1-42 1-48 1-56 substr builtin function dcl 60 ref 152 subsystem_name 4 based char(32) level 3 packed unaligned dcl 4-14 set ref 89 123* subsystem_version 14 based char(32) level 3 packed unaligned dcl 4-14 set ref 113 114 123* this_version_blast 274 based fixed bin(35,0) array level 3 dcl 5-9 set ref 116* 121 122* 122 202* this_version_count 273 based fixed bin(35,0) array level 3 dcl 5-9 set ref 115* 118* 118 201* total_count 272 based fixed bin(35,0) array level 3 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 108* 108 200* total_count 242 based fixed bin(35,0) level 3 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 111* 111 unspec builtin function dcl 1-39 ref 1-42 1-42 1-56 1-56 usage_seg based structure level 1 dcl 5-9 set ref 206 usage_seg_entry based structure level 1 dcl 5-30 usage_seg_name 000113 automatic char(32) unaligned dcl 46 set ref 89* 91* usage_seg_ptr 000134 automatic pointer dcl 5-19 set ref 91* 101 107 108 108 110 111 111 113 114 115 116 118 118 121 122 122 178 181 182 183 186 187 193 193 194 196 197 198 199 200 201 202 203 204 206* 206 user 250 based structure array level 2 dcl 5-9 user_info_$whoami 000022 constant entry external dcl 53 ref 103 user_name 000104 automatic char(24) unaligned dcl 44 set ref 103* 187 196 version 2 000106 automatic fixed bin(17,0) level 2 in structure "cond_info" dcl 139 in procedure "signal_handler" set ref 147* version 262 based char(32) array level 3 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 113 114* 199* version based fixed bin(17,0) level 2 in structure "usage_seg" dcl 5-9 in procedure "ssu_usage_" set ref 181 183* version based char(8) level 2 in structure "sci" dcl 4-14 in procedure "ssu_usage_" ref 1-53 1-56 1-56 write_word 2 based fixed bin(35,0) level 2 dcl 5-9 set ref 101* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 ITP_MODIFIER internal static bit(6) initial unaligned dcl 2-56 USAGE_SEG_VERSION internal static fixed bin(17,0) initial dcl 5-25 cleanup 000000 stack reference condition dcl 58 condition_info_ptr automatic pointer dcl 6-10 condition_info_version_1 internal static fixed bin(17,0) initial dcl 6-30 error_table_$action_not_performed external static fixed bin(35,0) dcl 56 itp based structure level 1 dcl 2-18 itp_unsigned based structure level 1 dcl 2-43 its_unsigned based structure level 1 dcl 2-30 jdx automatic fixed bin(17,0) dcl 45 maxlength builtin function dcl 60 name automatic char(32) unaligned dcl 142 sci_parent_area based area(1024) dcl 4-96 substr builtin function dcl 1-39 NAMES DECLARED BY EXPLICIT CONTEXT. COMMON 000262 constant label dcl 86 ref 72 83 PUNT_FOR_GOOD 000346 constant label dcl 93 ref 150 164 178 RESIGNAL_BAD_POINTER 000774 constant label dcl 1-42 ref 1-44 RESIGNAL_BAD_VERSION 001126 constant label dcl 1-56 set ref 1-59 RESIGNAL_NULL_POINTER 001054 constant label dcl 1-48 ref 1-50 lookup_user_entry 000636 constant entry internal dcl 172 ref 105 print_blast 000205 constant entry external dcl 66 record_usage 000240 constant entry external dcl 77 signal_handler 000540 constant entry internal dcl 136 ref 98 ssu_check_sci 000766 constant entry internal dcl 1-26 ref 86 ssu_usage_ 000172 constant entry external dcl 18 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1404 1442 1214 1414 Length 1754 1214 36 275 170 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ssu_usage_ 208 external procedure is an external procedure. on unit on line 98 111 on unit signal_handler internal procedure shares stack frame of on unit on line 98. lookup_user_entry internal procedure shares stack frame of external procedure ssu_usage_. ssu_check_sci internal procedure shares stack frame of external procedure ssu_usage_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME on unit on line 98 000106 cond_info signal_handler 000140 idx signal_handler 000141 code signal_handler ssu_usage_ 000100 ref_ptr ssu_usage_ 000102 code ssu_usage_ 000103 silent_sw ssu_usage_ 000104 user_name ssu_usage_ 000112 idx ssu_usage_ 000113 usage_seg_name ssu_usage_ 000132 sci_ptr ssu_usage_ 000134 usage_seg_ptr ssu_usage_ 000146 idx lookup_user_entry THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a alloc_char_temp call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. continue_to_signal_ find_condition_info_ hcs_$make_ptr hcs_$set_bc_seg ioa_ sub_err_ user_info_$whoami THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_ptr error_table_$fatal_error error_table_$null_info_ptr error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000171 66 000177 69 000223 70 000227 71 000232 72 000233 77 000234 80 000250 81 000254 82 000257 83 000261 86 000262 89 000264 91 000313 92 000344 93 000346 95 000351 98 000352 101 000370 103 000373 105 000413 107 000415 108 000423 110 000427 111 000432 113 000436 114 000445 115 000451 116 000453 117 000454 118 000455 120 000461 121 000463 122 000467 123 000473 128 000536 130 000537 136 000540 147 000541 149 000543 150 000562 152 000567 153 000572 154 000602 157 000603 158 000611 159 000620 160 000630 162 000631 164 000633 172 000636 178 000640 181 000644 182 000647 183 000650 186 000652 187 000661 188 000670 189 000673 191 000674 193 000676 194 000700 196 000702 197 000710 198 000713 199 000715 200 000721 201 000722 202 000723 203 000724 204 000725 206 000741 209 000762 211 000765 1 26 000766 1 41 000770 1 42 000774 1 44 001047 1 47 001050 1 48 001054 1 50 001116 1 53 001117 1 56 001126 1 59 001202 ----------------------------------------------------------- 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