COMPILATION LISTING OF SEGMENT ssu_listen_ Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/08/88 1507.8 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 8 /* format: off */ 9 10 /* Default subsystem listener: reads request lines from the requested I/O switch and executes them via a call to 11* ssu_$execute_line */ 12 13 /* Created: 3 May 1980 by W. Olin Sibert from the old system_listen_ */ 14 /* Modified: 8 May 1980 by W. Olin Sibert to handle error_table_$long_record */ 15 /* Modified: 2 November 1981 by W. Olin Sibert to not prompt if input is pending and to prompt after a blank line, error 16* sequence (ssu 4) */ 17 /* Modified: 15 February 1982 by G. Palter to support new prompt modes, recognize ssu_et_$null_request_line, reject use 18* from within standalone invocations, reflect the reorganization of the sci structure, and correct a bug where prompts 19* would forever be turned off */ 20 /* Modified: June 1982 by G. Palter to not trap calls to ssu_$abort_line as it is now always handled by 21* ssu_$execute_line (ssu 12) and to properly handle all return codes from ssu_$execute_line */ 22 23 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 24 25 26 ssu_listen_: 27 procedure (); 28 29 return; /* not an entrypoint */ 30 31 32 /* Parameters */ 33 34 dcl P_sci_ptr pointer parameter; 35 dcl P_iocb_ptr pointer parameter; /* -> I/O switch from which input is read */ 36 dcl P_code fixed binary (35) parameter; 37 38 39 /* Local copies of parameters */ 40 41 dcl iocb_ptr pointer; 42 dcl code fixed binary (35); 43 44 45 /* Remaining declarations */ 46 47 dcl 1 saved_listener_info aligned like sci.listener_info; 48 dcl (saved_in_listener, saved_executing_request) bit (1) aligned; 49 50 dcl request_line character (request_line_lth) based (request_line_ptr); 51 dcl request_line_lth fixed binary (21); 52 dcl request_line_ptr pointer; 53 54 dcl line_buffer character (line_buffer_lth) based (line_buffer_ptr); 55 dcl line_buffer_lth fixed binary (21); 56 dcl line_buffer_ptr pointer; 57 58 dcl automatic_line_buffer character (4096); 59 60 dcl new_ptr pointer; 61 dcl new_read_ptr pointer; 62 dcl new_read_lth fixed binary (21); 63 64 dcl last_line_blank bit (1) aligned; 65 dcl (print_prompt, force_prompt, last_prompt_suppressed_by_typeahead) bit (1) aligned; 66 dcl suppress_ready bit (1) aligned; 67 68 dcl 1 read_status_info aligned like tty_read_status_info automatic; 69 70 dcl iox_$user_input pointer external; 71 dcl iox_$user_output pointer external; 72 73 dcl sys_info$max_seg_size fixed binary (19) external; 74 75 /* format: off */ 76 dcl (error_table_$long_record, ssu_et_$not_in_standalone_invocation, ssu_et_$null_request_line, 77 ssu_et_$request_line_aborted, ssu_et_$subsystem_aborted) 78 fixed binary (35) external; 79 /* format: on */ 80 81 dcl ioa_$nnl entry () options (variable); 82 dcl iox_$control entry (pointer, character (*), pointer, fixed binary (35)); 83 dcl iox_$get_line entry (pointer, pointer, fixed binary (21), fixed binary (21), fixed binary (35)); 84 dcl ssu_$abort_subsystem entry () options (variable); 85 dcl ssu_$execute_line entry (pointer, pointer, fixed binary (21), fixed binary (35)); 86 dcl ssu_$get_temp_segment entry (pointer, character (*), pointer); 87 dcl ssu_$release_temp_segment entry (pointer, pointer); 88 89 dcl (program_interrupt, cleanup) condition; 90 91 dcl (addr, maxlength, null, substr) builtin; 92 93 /* */ 94 95 /* The Listener */ 96 97 listen: 98 entry (P_sci_ptr, P_iocb_ptr, P_code); 99 100 call ssu_check_sci (P_sci_ptr); 101 102 sci_ptr = P_sci_ptr; 103 104 if sci.standalone_invocation then do; /* commands simulating subsystems have no request loops */ 105 P_code = ssu_et_$not_in_standalone_invocation; 106 return; 107 end; 108 109 if P_iocb_ptr = null () then /* default I/O switch is user_input */ 110 iocb_ptr = iox_$user_input; 111 else iocb_ptr = P_iocb_ptr; 112 113 saved_listener_info = sci.listener_info; /* allow recursive listener loops */ 114 saved_in_listener = sci.in_listener; 115 saved_executing_request = sci.executing_request; 116 117 sci.listener_info.abort_subsystem_label = RETURN_FROM_LISTENER; 118 119 on condition (cleanup) 120 begin; 121 if sci.listener_info.temp_seg_ptr ^= null () then 122 call ssu_$release_temp_segment (sci_ptr, sci.listener_info.temp_seg_ptr); 123 sci.listener_info = saved_listener_info; 124 sci.in_listener = saved_in_listener; 125 sci.executing_request = saved_executing_request; 126 end; 127 128 sci.in_listener = "1"b; /* the listener is running */ 129 130 line_buffer_ptr = addr (automatic_line_buffer); /* start out with a "small" buffer */ 131 line_buffer_lth = maxlength (automatic_line_buffer); 132 133 on condition (program_interrupt) 134 begin; 135 call sci.entries.program_interrupt (sci_ptr); 136 /* call the program_interrupt procedure */ 137 suppress_ready = "1"b; /* no ready message, please */ 138 force_prompt = "1"b; /* prompt if enabled */ 139 go to READ_REQUEST_LINE; 140 end; 141 142 143 /* The Listener Loop: only exit is via a call to ssu_$abort_subsystem */ 144 145 suppress_ready = "1"b; /* no ready message first time through */ 146 force_prompt = "1"b; /* print a prompt if enabled */ 147 last_line_blank, last_prompt_suppressed_by_typeahead = "0"b; 148 149 code = 0; /* make us do something initially */ 150 151 do while (code ^= ssu_et_$subsystem_aborted); 152 153 READ_REQUEST_LINE: 154 if suppress_ready then /* no ready message this time through */ 155 suppress_ready = "0"b; 156 else if sci.ready_enabled & ^last_line_blank then call sci.entries.ready (sci_ptr); 157 /* otherwise, only give ready message after non-blank lines */ 158 159 call sci.entries.pre_request_line (sci_ptr); 160 161 if sci.dont_prompt then /* never, ever prompt */ 162 print_prompt = "0"b; 163 else if force_prompt then do; /* unconditonally prompt */ 164 print_prompt = "1"b; 165 force_prompt = "0"b; 166 end; 167 else if last_line_blank then /* previous line was null ... */ 168 if sci.prompt_after_null_lines | last_prompt_suppressed_by_typeahead then 169 print_prompt = "1"b; /* ... but that shouldn't stop a prompt here */ 170 else print_prompt = "0"b; /* ... and no reason to prompt after it */ 171 else if sci.dont_prompt_if_typeahead then do;/* don't prompt if user already typed a request line */ 172 call iox_$control (iocb_ptr, "read_status", addr (read_status_info), code); 173 if code = 0 then 174 if read_status_info.input_pending then do; 175 print_prompt = "0"b; /* ... something's waiting */ 176 last_prompt_suppressed_by_typeahead = "1"b; 177 end; /* ... overrides blank line check */ 178 else print_prompt = "1"b; /* ... no typeahead */ 179 else print_prompt = "1"b; /* ... can't check: assume prompt is OK */ 180 end; 181 else print_prompt = "1"b; /* go ahead and prompt */ 182 183 if print_prompt then do; 184 call iox_$control (iox_$user_output, "reset_more", (null ()), (0)); 185 call ioa_$nnl (sci.prompt, (sci.recursion_info.level ^= 1), sci.recursion_info.level); 186 last_prompt_suppressed_by_typeahead = "0"b; 187 end; 188 189 request_line_ptr = line_buffer_ptr; /* this is where the request ends up, of course */ 190 last_line_blank = "0"b; /* leave it off until we *** successfully *** execute */ 191 192 call iox_$get_line (iocb_ptr, addr (line_buffer), maxlength (line_buffer), request_line_lth, code); 193 194 if code = error_table_$long_record then do; /* switch to big buffer, and finish reading */ 195 if sci.listener_info.temp_seg_ptr ^= null () then 196 call ssu_$abort_subsystem (sci_ptr, code, "Listener already using large buffer."); 197 call ssu_$get_temp_segment (sci_ptr, "listener", sci.listener_info.temp_seg_ptr); 198 new_ptr = sci.listener_info.temp_seg_ptr; 199 /* prepare to move what's already been read */ 200 new_read_ptr = addr (substr (new_ptr -> line_buffer, (request_line_lth + 1), 1)); 201 /* addr of next char in buffer */ 202 substr (new_ptr -> line_buffer, 1, request_line_lth) = substr (line_buffer, 1, request_line_lth); 203 /* copy the existing data */ 204 line_buffer_ptr = new_ptr; /* now, update the line buffer info */ 205 line_buffer_lth = 4 * sys_info$max_seg_size; 206 call iox_$get_line (iocb_ptr, new_read_ptr, (line_buffer_lth - request_line_lth), new_read_lth, code); 207 if code ^= 0 then /* goodness */ 208 call ssu_$abort_subsystem (sci_ptr, code, "Reading first large request line."); 209 request_line_ptr = line_buffer_ptr; 210 request_line_lth = request_line_lth + new_read_lth; 211 end; 212 213 else if code ^= 0 then /* any other error is probably serious */ 214 call ssu_$abort_subsystem (sci_ptr, code, "Reading line from ^a", iocb_ptr -> iocb.name); 215 216 call ssu_$execute_line (sci_ptr, request_line_ptr, request_line_lth, code); 217 218 last_line_blank = (code = ssu_et_$null_request_line); 219 /* to control the prompt */ 220 221 if (code ^= ssu_et_$subsystem_aborted) & (code ^= ssu_et_$request_line_aborted) then 222 call sci.entries.post_request_line (sci_ptr); 223 end; /* only call user after successfully executed lines */ 224 225 226 /* Come here after a call to ssu_$abort_subsystem */ 227 228 RETURN_FROM_LISTENER: 229 if sci.listener_info.temp_seg_ptr ^= null () then 230 call ssu_$release_temp_segment (sci_ptr, sci.listener_info.temp_seg_ptr); 231 232 sci.listener_info = saved_listener_info; 233 sci.in_listener = saved_in_listener; 234 sci.executing_request = saved_executing_request; 235 236 P_code = ssu_et_$subsystem_aborted; 237 238 return; 239 240 /* */ 241 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 * * * * * */ 242 243 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 */ 244 245 5 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 5 2 /* Modified 11/29/82 by S. Krupp to add new entries and to change 5 3* version number to IOX2. */ 5 4 /* format: style2 */ 5 5 5 6 dcl 1 iocb aligned based, /* I/O control block. */ 5 7 2 version character (4) aligned, /* IOX2 */ 5 8 2 name char (32), /* I/O name of this block. */ 5 9 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 5 10 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 5 11 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 5 12 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 5 13 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 5 14 2 reserved bit (72), /* Reserved for future use. */ 5 15 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 5 16 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 5 17 /* open(p,mode,not_used,s) */ 5 18 2 close entry (ptr, fixed (35)),/* close(p,s) */ 5 19 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 20 /* get_line(p,bufptr,buflen,actlen,s) */ 5 21 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 22 /* get_chars(p,bufptr,buflen,actlen,s) */ 5 23 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 5 24 /* put_chars(p,bufptr,buflen,s) */ 5 25 2 modes entry (ptr, char (*), char (*), fixed (35)), 5 26 /* modes(p,newmode,oldmode,s) */ 5 27 2 position entry (ptr, fixed, fixed (21), fixed (35)), 5 28 /* position(p,u1,u2,s) */ 5 29 2 control entry (ptr, char (*), ptr, fixed (35)), 5 30 /* control(p,order,infptr,s) */ 5 31 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 5 32 /* read_record(p,bufptr,buflen,actlen,s) */ 5 33 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 5 34 /* write_record(p,bufptr,buflen,s) */ 5 35 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 5 36 /* rewrite_record(p,bufptr,buflen,s) */ 5 37 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 5 38 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 5 39 /* seek_key(p,key,len,s) */ 5 40 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 5 41 /* read_key(p,key,len,s) */ 5 42 2 read_length entry (ptr, fixed (21), fixed (35)), 5 43 /* read_length(p,len,s) */ 5 44 2 open_file entry (ptr, fixed bin, char (*), bit (1) aligned, fixed bin (35)), 5 45 /* open_file(p,mode,desc,not_used,s) */ 5 46 2 close_file entry (ptr, char (*), fixed bin (35)), 5 47 /* close_file(p,desc,s) */ 5 48 2 detach entry (ptr, char (*), fixed bin (35)); 5 49 /* detach(p,desc,s) */ 5 50 5 51 declare iox_$iocb_version_sentinel 5 52 character (4) aligned external static; 5 53 5 54 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 246 247 6 1 /* BEGIN INCLUDE FILE ... tty_read_status_info.incl.pl1 6 2* 6 3* control structure for the read_status and write_status orders to tty_ 6 4* 6 5* Modified 2/1/83 by Olin Sibert to add tty_write_status_info structure in 6 6* support of lap_simplex_ MPX. 6 7**/ 6 8 6 9 6 10 /****^ HISTORY COMMENTS: 6 11* 1) change(88-07-07,Beattie), approve(88-06-27,MCR7926), 6 12* audit(88-07-22,Brunelle), install(88-08-08,MR12.2-1082): 6 13* Prepared for installation. 6 14* END HISTORY COMMENTS */ 6 15 6 16 6 17 dcl 1 tty_read_status_info aligned based (tty_read_status_info_ptr), 6 18 2 event_channel fixed bin (71), 6 19 2 input_pending bit (1); 6 20 6 21 dcl tty_read_status_info_ptr ptr; 6 22 6 23 dcl 1 tty_write_status_info aligned based (tty_write_status_info_ptr), 6 24 2 event_channel fixed bin (71), 6 25 2 output_pending bit (1); 6 26 6 27 dcl tty_write_status_info_ptr ptr; 6 28 6 29 /* END INCLUDE FILE ... tty_read_status_info.incl.pl1 */ 248 249 250 end ssu_listen_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/08/88 1409.5 ssu_listen_.pl1 >special_ldd>install>MR12.2-1082>ssu_listen_.pl1 242 1 08/06/87 0913.4 _ssu_check_sci.incl.pl1 >ldd>include>_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 244 4 01/21/85 0912.2 _ssu_sci.incl.pl1 >ldd>include>_ssu_sci.incl.pl1 246 5 05/20/83 1846.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 248 6 08/08/88 1400.0 tty_read_status_info.incl.pl1 >special_ldd>install>MR12.2-1082>tty_read_status_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 000032 constant bit(36) initial dcl 3-7 set ref 1-42* 1-48* 1-56* ITS_MODIFIER constant bit(6) initial packed unaligned dcl 2-55 ref 1-41 P_code parameter fixed bin(35,0) dcl 36 set ref 97 105* 236* P_iocb_ptr parameter pointer dcl 35 ref 97 109 111 P_sci_ptr parameter pointer dcl 34 set ref 97 100* 102 SCI_VERSION_3 000010 constant char(8) initial packed unaligned dcl 4-98 ref 1-53 SSU_ 000000 constant char(32) initial packed unaligned dcl 1-31 set ref 1-42* 1-48* 1-56* abort_subsystem_label 100 based label variable level 3 dcl 4-14 set ref 117* addr builtin function dcl 91 ref 130 172 172 192 192 200 1-41 automatic_line_buffer 000124 automatic char(4096) packed unaligned dcl 58 set ref 130 131 cleanup 002150 stack reference condition dcl 89 ref 119 code 000102 automatic fixed bin(35,0) dcl 42 set ref 149* 151 172* 173 192* 194 195* 206* 207 207* 213 213* 216* 218 221 221 dont_prompt 75 based bit(1) level 4 packed packed unaligned dcl 4-14 ref 161 dont_prompt_if_typeahead 75(02) based bit(1) level 4 packed packed unaligned dcl 4-14 ref 171 entries 144 based structure level 2 dcl 4-14 error_table_$bad_ptr 000046 external static fixed bin(35,0) dcl 1-33 set ref 1-42* error_table_$long_record 000016 external static fixed bin(35,0) dcl 76 ref 194 error_table_$null_info_ptr 000050 external static fixed bin(35,0) dcl 1-34 set ref 1-48* error_table_$unimplemented_version 000052 external static fixed bin(35,0) dcl 1-35 set ref 1-56* executing_request 32(02) based bit(1) level 4 packed packed unaligned dcl 4-14 set ref 115 125* 234* flags 32 based structure level 3 dcl 4-14 force_prompt 002133 automatic bit(1) dcl 65 set ref 138* 146* 163 165* global_info 4 based structure level 2 dcl 4-14 in_listener 32(01) based bit(1) level 4 packed packed unaligned dcl 4-14 set ref 114 124* 128* 233* input_pending 2 002136 automatic bit(1) level 2 dcl 68 set ref 173 ioa_$nnl 000030 constant entry external dcl 81 ref 185 iocb based structure level 1 dcl 5-6 iocb_ptr 000100 automatic pointer dcl 41 set ref 109* 111* 172* 192* 206* 213 iox_$control 000032 constant entry external dcl 82 ref 172 184 iox_$get_line 000034 constant entry external dcl 83 ref 192 206 iox_$user_input 000010 external static pointer dcl 70 ref 109 iox_$user_output 000012 external static pointer dcl 71 set ref 184* its based structure level 1 dcl 2-5 its_mod 0(30) based bit(6) level 2 packed packed unaligned dcl 2-5 ref 1-41 last_line_blank 002131 automatic bit(1) dcl 64 set ref 147* 156 167 190* 218* last_prompt_suppressed_by_typeahead 002134 automatic bit(1) dcl 65 set ref 147* 167 176* 186* level 35 based fixed bin(17,0) level 3 dcl 4-14 set ref 185 185* line_buffer based char packed unaligned dcl 54 set ref 192 192 192 192 200 202* 202 line_buffer_lth 000120 automatic fixed bin(21,0) dcl 55 set ref 131* 192 192 192 192 200 202 202 205* 206 line_buffer_ptr 000122 automatic pointer dcl 56 set ref 130* 189 192 192 192 192 202 204* 209 listener_info 100 based structure level 2 dcl 4-14 set ref 113 123* 232* maxlength ----------------------------------------------------------- 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