COMPILATION LISTING OF SEGMENT tc_block Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/13/87 1330.7 mst Thu 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-09-17,LJAdams), approve(86-11-11,MCR7485), 17* audit(86-12-16,Margolin), install(87-01-06,MR12.0-1255): 18* Correct stringrange problem - after function was completed it continued to 19* loop until stack was exhausted. 20* END HISTORY COMMENTS */ 21 22 23 /* Benson I. Margulies, sometime in 1981 */ 24 /* format: style2,linecom,^indnoniterdo,indcomtxt,^inditerdo,dclind5,idind25 */ 25 26 /* Modified 24 May 1982 by William M. York to eliminate an optimization 27* for the first level of block which led to a loop sending and receiving 28* wakeups. */ 29 /* Modified 14 September 1982 by WMY to add the $internal entrypoint. This 30* is intended for use by other parts of tc_ (e.g. check_echonego in tc_input) 31* which want to block with protocol, but have no window_ level request 32* structure to pass in. */ 33 /* Modified 20 September 1982 by WMY to remove the $internal entrypoint. We 34* must ALWAYS block on the behalf of some particular window for the async 35* stuff to work right, so all callers will just have to be changed to pass 36* in a request_ptr. */ 37 /* Modified 7 February 1985 by Jon Rochlis to add RESTORE_MASK so we can 38* restore the user's ips mask before we block, instead of just unmasking 39* everything. */ 40 41 tc_block: 42 procedure (TC_data_ptr, Request_ptr, mask_type); 43 44 declare TC_data_ptr pointer; 45 declare Request_ptr pointer; 46 47 /* ordinarily, we unmask for the block, but in the case of awaiting a mark 48* we want to allow only quit. This is to prevent other stuff from 49* happening when we are doing a critical sync, because if the async thing 50* should need to sync to a mark, we would lack one to give it. 51* 52* This is really poor, a major limitation on async input. 53* 54* (Now instead of unmasking, we usually restore the old mask ... JR 2/7/85) 55**/ 56 57 declare mask_type bit (36) aligned; 58 59 declare UNMASK_ALL bit (36) aligned initial (""b) internal static options (constant); 60 declare UNMASK_QUIT_ONLY bit (36) aligned initial ("1"b) internal static options (constant); 61 declare UNMASK_NOTHING bit (36) aligned initial ("01"b) internal static options (constant); 62 declare RESTORE_MASK bit (36) aligned initial ("001"b) internal static options (constant); 63 64 declare 1 EWI aligned like event_wait_info automatic; 65 declare 1 event_wait aligned, 66 2 n_channels fixed bin, 67 2 pad bit (36) aligned, 68 2 channels (2) fixed bin (71); 69 70 declare ipc_$block entry (ptr, ptr, fixed bin (35)); 71 declare ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 72 declare tc_error entry (fixed bin (35), character (*)); 73 declare ( 74 tc_mask$close, 75 tc_mask$open_all, 76 tc_mask$open_quit 77 ) external entry; 78 79 declare tc_mask$restore entry (bit (36) aligned); 80 81 declare hcs_$get_ips_mask entry (bit (36) aligned); 82 83 declare ips_mask bit (36) aligned; 84 declare saved_change_pclock fixed bin (35); 85 declare code fixed bin (35); 86 declare cleanup condition; 87 declare addr builtin; 88 89 90 tc_data_ptr = TC_data_ptr; 91 request_ptr = Request_ptr; 92 93 state.pending.count = tc_data.state.pending.count + 1; 94 state_have_sent_protocol (tc_data.state.pending.count) = "0"b; 95 state_async_same_window (tc_data.state.pending.count) = "0"b; 96 97 tc_data.state.pending.blocked_windows (tc_data.state.pending.count) = request_header.window_id; 98 99 event_wait.n_channels = 0; 100 101 event_wait.pad = ""b; 102 event_wait.channels (1) = tc_data.event; 103 104 /* Set up a second event channel to block on in conjunction with 105* the actual input channel. A wakeup will be sent on this protocol 106* channel by later (recursive) invocations of tc_block when they 107* receive real input wakeups. */ 108 109 event_wait.n_channels = 2; 110 if tc_data.state.pending.protocol_evs (tc_data.state.pending.count) = 0 111 then do; 112 call ipc_$create_ev_chn (event_wait.channels (2), (0)); 113 tc_data.state.pending.protocol_evs (tc_data.state.pending.count) = event_wait.channels (2); 114 end; 115 else event_wait.channels (2) = tc_data.state.pending.protocol_evs (tc_data.state.pending.count); 116 117 ips_mask = request_header.saved_ips_mask; 118 119 on cleanup 120 begin; 121 state.pending.count = state.pending.count - 1; 122 if mask_type = RESTORE_MASK 123 then call hcs_$get_ips_mask (request_header.saved_ips_mask); 124 end; 125 126 saved_change_pclock = tc_data.change_pclock; 127 128 if mask_type = UNMASK_QUIT_ONLY /* actually, this lets trm_ and sus_ and neti through, as well */ 129 then call tc_mask$open_quit; 130 else if mask_type = UNMASK_ALL 131 then call tc_mask$open_all; 132 else if mask_type = UNMASK_NOTHING 133 then ; 134 else if mask_type = RESTORE_MASK 135 then call tc_mask$restore (ips_mask); 136 137 call ipc_$block (addr (event_wait), addr (EWI), code); 138 139 call tc_mask$close (); /* superfluous if we didnt unmask */ 140 revert cleanup; 141 tc_data.state.pending.count = tc_data.state.pending.count - 1; 142 143 if code ^= 0 144 then call tc_error (code, "Terminal Control could not block."); 145 146 147 if (tc_data.change_pclock ^= saved_change_pclock) 148 then do; 149 request_header.async_interruption = "1"b; 150 151 if state_async_same_window (tc_data.state.pending.count + 1) 152 then request_header.this_window = "1"b; 153 end; 154 155 start_if_we_have_to: 156 begin; 157 158 declare hcs_$wakeup entry (bit (*), fixed bin (71), fixed bin (71), fixed bin (35)); 159 declare get_process_id_ entry () returns (bit (36)); 160 161 /* This code checks to see if anyone is waiting on protocol 162* wakeups (i.e. this is a recursive call), and sends a wakeup 163* to the protocol channel one above us. Only one wakeup will 164* be sent on each level. */ 165 166 if tc_data.state.pending.count > 0 167 then if ^state_have_sent_protocol (tc_data.state.pending.count) 168 then do; /* Somebody is blocked */ 169 call hcs_$wakeup (get_process_id_ (), 170 tc_data.state.pending.protocol_evs (tc_data.state.pending.count), 0, code); 171 172 if code ^= 0 173 then call tc_error (code, "wakeup failed"); 174 state_have_sent_protocol (tc_data.state.pending.count) = "1"b; 175 /* only send ONE wakeup */ 176 end; 177 end start_if_we_have_to; 178 179 180 1 1 /* BEGIN INCLUDE FILE tc_data_.incl.pl1 BIM May 1981 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(86-07-22,LJAdams), approve(86-11-13,MCR7485), 1 6* audit(86-12-19,Margolin), install(87-01-06,MR12.0-1255): 1 7* Added mowse_terminal_iocb_ptr field. 1 8* 2) change(86-11-26,LJAdams), approve(86-11-26,MCR7584), 1 9* audit(86-12-19,Margolin), install(87-01-06,MR12.0-1255): 1 10* tty_handle component has been added for DSA. 1 11* END HISTORY COMMENTS */ 1 12 1 13 1 14 /* Modified DEC 1985 by R. Negaret to add network_type and tty_handle */ 1 15 /* format: style3 */ 1 16 /* This data structure should contain the information 1 17* to run terminal control, regardless of what I/O module 1 18* it happens to live in */ 1 19 1 20 declare tc_data_ptr pointer; 1 21 declare 1 tc_data aligned based (tc_data_ptr), 1 22 2 network_type fixed bin, /* Identification of the network: 1 23* MCS_NETWORK_TYPE, DSA_NETWORK_TYPE, ... */ 1 24 2 devx fixed bin, /* hardcore devx */ 1 25 2 tty_handle fixed bin (35), 1 26 2 event fixed bin (71), /* tty_index wakes this up */ 1 27 2 mowse_terminal_iocb_ptr 1 28 ptr, /* ptr to mowse_terminal_ switch */ 1 29 2 change_pclock fixed bin (35), /* for detecting async happenings */ 1 30 2 ttp character (32) unaligned, /* terminal type */ 1 31 2 ttt_video_ptr pointer, 1 32 2 breaktest bit (128) unaligned, 1 33 2 terminal aligned, 1 34 3 rows fixed bin, /* mostly for better name */ 1 35 3 columns fixed bin, 1 36 3 line_speed fixed bin, 1 37 2 state aligned like terminal_state, 1 38 2 tty_read_buffer character (1024) unaligned, /* should suffice */ 1 39 2 input_buffer_ptr 1 40 pointer, 1 41 2 screen_data_ptr pointer, 1 42 2 desk_ptr pointer, /* table of windows */ 1 43 2 old_mode_string character (512) unaligned, 1 44 2 global_buffer_index 1 45 fixed bin, 1 46 2 global_buffer_limit 1 47 fixed bin, 1 48 2 global_output_buffer 1 49 char (512) unaligned; 1 50 1 51 1 52 declare tc_break_array (0:127) bit (1) unaligned defined (tc_data.breaktest) position (1); 1 53 1 54 declare 1 terminal_state aligned based, 1 55 2 flags aligned, 1 56 3 insert_mode bit (1) unaligned, 1 57 3 cursor_valid bit (1) unaligned, /* we know pos */ 1 58 3 echnego_outstanding 1 59 bit (1) unaligned, 1 60 3 mark_outstanding 1 61 bit (1) unaligned, 1 62 3 pad bit (32) unaligned, 1 63 2 pending aligned, 1 64 3 count fixed bin, /* count of invocations blocked */ 1 65 3 input_count fixed bin, /* how many are input */ 1 66 3 protocol_evs (72) fixed bin (71), /* yea, too damn big */ 1 67 3 have_sent_protocol 1 68 bit (72) unaligned, 1 69 3 async_same_window 1 70 bit (72) unaligned, /* for reflection back to blocking window */ 1 71 3 blocked_windows 1 72 (72) bit (36) aligned, /* only 1:count are valid */ 1 73 2 cursor_position aligned, /* respectable only if valid */ 1 74 3 row fixed bin, 1 75 3 col fixed bin, 1 76 2 current_mark fixed bin (9) unsigned, 1 77 2 last_mark_back fixed bin (9) unsigned; 1 78 1 79 declare state_async_same_window 1 80 (72) bit (1) unaligned defined (tc_data.state.pending.async_same_window) position (1); 1 81 1 82 declare state_have_sent_protocol 1 83 (72) bit (1) unaligned defined (tc_data.state.pending.have_sent_protocol) position (1); 1 84 1 85 /* END INCLUDE FILE tc_data_.incl.pl1 */ 181 2 1 /* BEGIN INCLUDE FILE tc_operations_.incl.pl1 BIM May 1981 */ 2 2 2 3 /* Modified 7 February 1985 by Jon Rochlis to add saved_ips_mask to 2 4* request_header. */ 2 5 2 6 /* format: style3 */ 2 7 2 8 /* These are the operations that the "virtual video terminal" is expected to 2 9*provide. These are the primitive operation. For example, the various 2 10*flavors of region clearing are collapsed into "clear region". The particular 2 11*operations of clear screen, clear to end of screen, and clear to end of line 2 12*are special cases which will be used when terminal functionality permits. Of 2 13*course, at the user interface level, these are provided as convienience. 2 14*This introduces the innefficiency of mapping CLEOL -> CL-REGION -> CLEOL. 2 15*However, CLEOL _i_n _a _w_i_n_d_o_w does not always mean CLEOL on the screen. It will 2 16*not unless the window is full width, or happens to be rightmost. Similiarly, 2 17*a user call of CLEAR_WINDOW is just a region to the terminal. */ 2 18 2 19 declare request_ptr pointer; 2 20 declare REQUEST_SENTINEL character (4) aligned init ("RqqS") internal static options (constant); 2 21 2 22 declare 1 request_header aligned based (request_ptr), 2 23 2 sentinel character (4) aligned, 2 24 2 request_id fixed bin (71), /* Clock Value */ 2 25 2 window_id bit (36) aligned, 2 26 2 coords aligned like r_coords, 2 27 2 operation fixed bin, 2 28 2 flags aligned, 2 29 3 async_interruption 2 30 bit (1) unaligned, /* Output */ 2 31 3 this_window bit (1) unaligned, /* ditto */ 2 32 2 saved_ips_mask bit (36) aligned; /* so tc_block can restore mask from window_io_ */ 2 33 2 34 declare 1 r_coords aligned based, 2 35 2 row fixed bin, 2 36 2 col fixed bin; 2 37 2 38 declare OP_ERROR fixed bin initial (0) internal static options (constant); 2 39 declare OP_POSITION_CURSOR fixed bin initial (1) internal static options (constant); 2 40 2 41 declare OP_CLEAR_REGION fixed bin initial (2) internal static options (constant); 2 42 2 43 /* This next one is for the TC operation of clearing terminal without 2 44* any assumptions, used when the user indicates screen damage, or on 2 45* reconnection. */ 2 46 2 47 declare OP_CLEAR_SCREEN_NO_OPT 2 48 fixed bin init (4) internal static options (constant); 2 49 2 50 declare 1 request_clear_region 2 51 aligned based (request_ptr), 2 52 2 header aligned like request_header, 2 53 2 by_name aligned, 2 54 3 extent aligned, 2 55 4 rows fixed bin, 2 56 4 columns fixed bin; 2 57 2 58 declare OP_INSERT_TEXT fixed bin initial (3) internal static options (constant); 2 59 2 60 declare 1 request_text aligned based (request_ptr), 2 61 2 header aligned like request_header, 2 62 2 by_name aligned, 2 63 3 text_ptr pointer, 2 64 3 text_length fixed bin (21); 2 65 2 66 declare request_text_string character (request_text.text_length) based (request_text.text_ptr); 2 67 2 68 declare OP_DELETE_CHARS fixed bin initial (6) internal static options (constant); 2 69 2 70 declare 1 request_delete_chars 2 71 aligned based (request_ptr), 2 72 2 header aligned like request_header, 2 73 2 by_name aligned, 2 74 3 count fixed bin; 2 75 2 76 declare OP_SCROLL_REGION fixed bin initial (7) internal static options (constant); 2 77 2 78 declare 1 request_scroll_region 2 79 aligned based (request_ptr), 2 80 2 header aligned like request_header, 2 81 2 by_name aligned, 2 82 3 start_line fixed bin, 2 83 3 n_lines fixed bin, 2 84 3 distance fixed bin; 2 85 2 86 declare OP_BELL fixed bin initial (8) internal static options (constant); 2 87 declare OP_GET_CHARS_ECHO fixed bin initial (9) internal static options (constant); 2 88 declare OP_GET_CHARS_NO_ECHO 2 89 fixed bin initial (10) internal static options (constant); 2 90 declare OP_WRITE_SYNC_GET_CHARS_NO_ECHO 2 91 fixed bin initial (11) internal static options (constant); 2 92 2 93 declare 1 request_read_status 2 94 aligned based (request_ptr), 2 95 2 header aligned like request_header, 2 96 2 by_name aligned, /* not used as such */ 2 97 3 returned_length 2 98 fixed bin, 2 99 3 event_channel fixed bin (71); 2 100 2 101 declare 1 request_read aligned based (request_ptr), 2 102 2 header aligned like request_header, 2 103 2 by_name aligned, 2 104 3 buffer_ptr pointer, 2 105 3 buffer_length fixed bin (21), 2 106 3 returned_length 2 107 fixed bin (21), 2 108 3 returned_break_flag 2 109 bit (1) aligned, 2 110 3 prompt_ptr pointer, 2 111 3 prompt_length fixed bin (21), 2 112 3 breaks bit (128) unaligned; 2 113 2 114 2 115 declare request_prompt character (request_read.prompt_length) based (request_read.prompt_ptr); 2 116 declare request_buffer character (request_read.buffer_length) based (request_read.buffer_ptr); 2 117 2 118 declare OP_GET_CURSOR_POSITION 2 119 fixed bin initial (12) internal static options (constant); 2 120 declare OP_READ_STATUS fixed bin initial (13) internal static options (constant); 2 121 declare OP_OVERWRITE_TEXT fixed bin initial (14) internal static options (constant); 2 122 declare OP_WRITE_RAW fixed bin initial (15) internal static options (constant); 2 123 declare OP_READ_ONE fixed bin initial (16) internal static options (constant); 2 124 2 125 /* use request_read, and return the character in the buffer there */ 2 126 /* pass the BLOCK flag in in break_flag. Well... */ 2 127 2 128 /* END INCLUDE FILE tc_operations_.incl.pl1 */ 182 3 1 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 3 2 3 3 /* T. Casey, May 1978 */ 3 4 3 5 dcl event_wait_info_ptr ptr; 3 6 3 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 3 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 3 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 3 10 2 sender bit (36), /* process id of sender */ 3 11 2 origin, 3 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 3 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 3 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 3 15 3 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 183 184 185 end tc_block; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/13/87 1323.9 tc_block.pl1 >special_ldd>install>MR12.1-1086>tc_block.pl1 181 1 01/06/87 1357.0 tc_data_.incl.pl1 >ldd>include>tc_data_.incl.pl1 182 2 03/12/85 0930.8 tc_operations_.incl.pl1 >ldd>include>tc_operations_.incl.pl1 183 3 06/29/79 1727.8 event_wait_info.incl.pl1 >ldd>include>event_wait_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. EWI 000100 automatic structure level 1 dcl 64 set ref 137 137 RESTORE_MASK constant bit(36) initial dcl 62 ref 122 134 Request_ptr parameter pointer dcl 45 ref 41 91 TC_data_ptr parameter pointer dcl 44 ref 41 90 UNMASK_ALL constant bit(36) initial dcl 59 ref 130 UNMASK_NOTHING constant bit(36) initial dcl 61 ref 132 UNMASK_QUIT_ONLY constant bit(36) initial dcl 60 ref 128 addr builtin function dcl 87 ref 137 137 137 137 async_interruption 10 based bit(1) level 3 packed unaligned dcl 2-22 set ref 149* async_same_window 262 based bit(72) level 4 packed unaligned dcl 1-21 set ref 95* 95 151 151 blocked_windows 264 based bit(36) array level 4 dcl 1-21 set ref 97* change_pclock 10 based fixed bin(35,0) level 2 dcl 1-21 ref 126 147 channels 2 000110 automatic fixed bin(71,0) array level 2 dcl 65 set ref 102* 112* 113 115* cleanup 000122 stack reference condition dcl 86 ref 119 140 code 000120 automatic fixed bin(35,0) dcl 85 set ref 137* 143 143* 169* 172 172* count 36 based fixed bin(17,0) level 4 dcl 1-21 set ref 93* 93 94 95 97 110 113 115 121* 121 141* 141 151 166 166 169 174 event 4 based fixed bin(71,0) level 2 dcl 1-21 ref 102 event_wait 000110 automatic structure level 1 dcl 65 set ref 137 137 event_wait_info based structure level 1 dcl 3-7 flags 10 based structure level 2 dcl 2-22 get_process_id_ 000032 constant entry external dcl 159 ref 169 169 have_sent_protocol 260 based bit(72) level 4 packed unaligned dcl 1-21 set ref 94* 94 166 166 174* 174 hcs_$get_ips_mask 000026 constant entry external dcl 81 ref 122 hcs_$wakeup 000030 constant entry external dcl 158 ref 169 ipc_$block 000010 constant entry external dcl 70 ref 137 ipc_$create_ev_chn 000012 constant entry external dcl 71 ref 112 ips_mask 000116 automatic bit(36) dcl 83 set ref 117* 134* mask_type parameter bit(36) dcl 57 ref 41 122 128 130 132 134 n_channels 000110 automatic fixed bin(17,0) level 2 dcl 65 set ref 99* 109* pad 1 000110 automatic bit(36) level 2 dcl 65 set ref 101* pending 36 based structure level 3 dcl 1-21 protocol_evs 40 based fixed bin(71,0) array level 4 dcl 1-21 set ref 110 113* 115 169* r_coords based structure level 1 dcl 2-34 request_header based structure level 1 dcl 2-22 request_ptr 000132 automatic pointer dcl 2-19 set ref 91* 97 117 122 149 151 saved_change_pclock 000117 automatic fixed bin(35,0) dcl 84 set ref 126* 147 saved_ips_mask 11 based bit(36) level 2 dcl 2-22 set ref 117 122* state 34 based structure level 2 dcl 1-21 state_async_same_window defined bit(1) array unaligned dcl 1-79 set ref 95* 151 state_have_sent_protocol defined bit(1) array unaligned dcl 1-82 set ref 94* 166 174* tc_data based structure level 1 dcl 1-21 tc_data_ptr 000130 automatic pointer dcl 1-20 set ref 90* 93 93 94 94 95 95 97 97 102 110 110 113 113 115 115 121 121 126 141 141 147 151 151 166 166 166 169 169 174 174 tc_error 000014 constant entry external dcl 72 ref 143 172 tc_mask$close 000016 constant entry external dcl 73 ref 139 tc_mask$open_all 000020 constant entry external dcl 73 ref 130 tc_mask$open_quit 000022 constant entry external dcl 73 ref 128 tc_mask$restore 000024 constant entry external dcl 79 ref 134 terminal_state based structure level 1 dcl 1-54 this_window 10(01) based bit(1) level 3 packed unaligned dcl 2-22 set ref 151* window_id 4 based bit(36) level 2 dcl 2-22 ref 97 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. OP_BELL internal static fixed bin(17,0) initial dcl 2-86 OP_CLEAR_REGION internal static fixed bin(17,0) initial dcl 2-41 OP_CLEAR_SCREEN_NO_OPT internal static fixed bin(17,0) initial dcl 2-47 OP_DELETE_CHARS internal static fixed bin(17,0) initial dcl 2-68 OP_ERROR internal static fixed bin(17,0) initial dcl 2-38 OP_GET_CHARS_ECHO internal static fixed bin(17,0) initial dcl 2-87 OP_GET_CHARS_NO_ECHO internal static fixed bin(17,0) initial dcl 2-88 OP_GET_CURSOR_POSITION internal static fixed bin(17,0) initial dcl 2-118 OP_INSERT_TEXT internal static fixed bin(17,0) initial dcl 2-58 OP_OVERWRITE_TEXT internal static fixed bin(17,0) initial dcl 2-121 OP_POSITION_CURSOR internal static fixed bin(17,0) initial dcl 2-39 OP_READ_ONE internal static fixed bin(17,0) initial dcl 2-123 OP_READ_STATUS internal static fixed bin(17,0) initial dcl 2-120 OP_SCROLL_REGION internal static fixed bin(17,0) initial dcl 2-76 OP_WRITE_RAW internal static fixed bin(17,0) initial dcl 2-122 OP_WRITE_SYNC_GET_CHARS_NO_ECHO internal static fixed bin(17,0) initial dcl 2-90 REQUEST_SENTINEL internal static char(4) initial dcl 2-20 event_wait_info_ptr automatic pointer dcl 3-5 request_buffer based char unaligned dcl 2-116 request_clear_region based structure level 1 dcl 2-50 request_delete_chars based structure level 1 dcl 2-70 request_prompt based char unaligned dcl 2-115 request_read based structure level 1 dcl 2-101 request_read_status based structure level 1 dcl 2-93 request_scroll_region based structure level 1 dcl 2-78 request_text based structure level 1 dcl 2-60 request_text_string based char unaligned dcl 2-66 tc_break_array defined bit(1) array unaligned dcl 1-52 NAMES DECLARED BY EXPLICIT CONTEXT. start_if_we_have_to 000314 constant label dcl 155 tc_block 000035 constant entry external dcl 41 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 552 606 417 562 Length 1040 417 34 216 133 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tc_block 158 external procedure is an external procedure. on unit on line 119 68 on unit begin block on line 155 begin block shares stack frame of external procedure tc_block. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tc_block 000100 EWI tc_block 000110 event_wait tc_block 000116 ips_mask tc_block 000117 saved_change_pclock tc_block 000120 code tc_block 000130 tc_data_ptr tc_block 000132 request_ptr tc_block THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_process_id_ hcs_$get_ips_mask hcs_$wakeup ipc_$block ipc_$create_ev_chn tc_error tc_mask$close tc_mask$open_all tc_mask$open_quit tc_mask$restore NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 41 000031 90 000042 91 000046 93 000051 94 000052 95 000057 97 000064 99 000067 101 000070 102 000071 109 000073 110 000075 112 000102 113 000113 114 000121 115 000122 117 000123 119 000126 121 000142 122 000146 124 000161 126 000162 128 000165 130 000177 132 000207 134 000212 137 000223 139 000242 140 000247 141 000250 143 000253 147 000275 149 000301 151 000304 166 000314 169 000324 172 000365 174 000410 185 000416 ----------------------------------------------------------- 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