COMPILATION LISTING OF SEGMENT tty_interrupt 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.5 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 /* format: style4,delnl,insnl,^ifthendo */ 13 tty_interrupt: 14 proc (a_wtcbp, a_type, a_info); 15 16 /* DESCRIPTION: 17* interrupt handler for logical terminal channels. 18**/ 19 20 /* HISTORY: 21* Written by Robert Coren, 08/01/78. 22* Modified: 23* 01/20/79 by Bernard Greenberg: Negotiated interrupt-time echo. 24* 03/01/79 by J. Stern: for wakeup table processing. 25* 06/29/79 by Bernard Greenberg: FNP (multiplexer)-negotiated echo. 26* 04/01/81 by Robert Coren: bugs fixed and references to dialedt removed. 27* 05/01/81 by J. Bongiovanni: for response time metering. 28* 06/01/82 by Robert Coren: to add handling of MASKED interrupt type. 29* 11/01/82 by Robert Coren: to save error code returned by channel_manager$write 30* and to trust returned pointer even if code ^= 0. 31* 04/01/84 by Robert Coren: to fix bug caused by setting mark flag in a buffer 32* that might have been freed. 33* 07/20/84 by R. Michael Tague: Changed the calling sequence of pxss$wakeup_int 34* so that the IPS signal is specified by a bit mask instead of the 35* signal name. 36* 09/20/84 by Robert Coren: to fix echoing bug that arose if FNP appended 37* characters after it stopped echoing, and to reset all the WTCB 38* flags that have to be reset on hangup. 39* 12/10/84 by Robert Coren: to ignore line_status interrupts if 40* wtcb.line_status_disabled is "1"b, and to clear it on hangup. 41* 42*/****^ HISTORY COMMENTS: 43* 1) change(86-06-19,Kissel), approve(86-07-30,MCR7475), audit(86-08-04,Coren), 44* install(86-10-09,MR12.0-1181): 45* Changed to support the new tty event message format declared in 46* net_event_message.incl.pl1 which replaces tty_event_message.incl.pl1. 47* 2) change(87-07-17,LJAdams), approve(87-08-07,MCR7750), 48* audit(87-08-07,Fawcett), install(87-08-11,MR12.1-1079): 49* wtcb.mark_set was being set to "0"b at all times. Changed this so that it 50* will be set to "0"b only if quits are enabled. (phx20905) 51* 3) change(88-01-15,Farley), approve(88-02-22,MCR7843), 52* audit(88-02-22,Beattie), install(88-03-01,MR12.2-1029): 53* Added a check to ACCEPT_INPUT for ceasing echo neg when there is no more 54* horiz_room_left. 55* 4) change(88-06-20,Berno), approve(88-07-13,MCR7928), 56* audit(88-06-20,Parisek), install(88-07-19,MR12.2-1061): 57* Added code to implement the UNCP multiplexer (DSA gateway) interface. 58* Set the wtcb.send_turn flag & check the wtcb.receive_mode_device flag. 59* END HISTORY COMMENTS */ 60 61 62 /* PARAMETERS */ 63 64 dcl a_wtcbp ptr; 65 dcl a_type fixed bin; 66 dcl a_info bit (72) aligned; 67 68 69 /* AUTOMATIC */ 70 71 dcl i fixed bin; 72 dcl int_type fixed bin; 73 dcl devx fixed bin; 74 dcl charx fixed bin; 75 dcl echbufp ptr; 76 dcl this_char char (1) unaligned; 77 dcl echo_tally fixed bin (9); 78 dcl sync_ctr_tally fixed bin; 79 dcl inchain fixed bin (18); 80 dcl code fixed bin (35); 81 dcl next_offset fixed bin; 82 dcl last_offset fixed bin; 83 dcl new_headp ptr; 84 dcl old_tailp ptr; 85 dcl new_first_tally fixed bin; 86 dcl old_last_tally fixed bin; 87 dcl max_tally fixed bin; 88 dcl filled bit (1); 89 dcl source_ptr ptr; 90 dcl target_ptr ptr; 91 dcl start_time fixed bin (71); 92 dcl echnego_from_mux_flag bit (1); 93 dcl echnego_scan_start fixed bin; 94 dcl r0_did_echo bit (1); 95 dcl uncp_flag bit (1); /* designate UNCP mpx */ 96 dcl 1 echo_start_data, 97 2 ctr fixed bin (35), 98 2 screenleft fixed bin (35); 99 100 /* BASED */ 101 102 dcl new_chars char (new_first_tally) based; 103 104 105 /* BUILTINS */ 106 107 dcl (addr, bin, clock, divide, hbound, max, min, null, 108 ptr, unspec, rank, rel, size, string, substr) builtin; 109 110 111 /* ENTRIES */ 112 113 dcl meter_response_time entry (bit (36) aligned, fixed bin); 114 dcl pxss$ring_0_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 115 dcl pxss$unique_ring_0_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)); 116 dcl pxss$ips_wakeup_int entry (bit (36) aligned, bit (35) aligned); 117 dcl syserr entry options (variable); 118 119 120 /* EXTERNAL STATIC */ 121 122 dcl error_table_$noalloc fixed bin (35) ext static; 123 dcl error_table_$invalid_write fixed bin (35) ext static; 124 dcl sys_info$quit_mask bit (35) aligned ext static; 125 126 /* INTERNAL STATIC */ 127 128 dcl CRASH_SYSTEM fixed bin int static options (constant) init (1); 129 130 dcl line_delimiter_octal (16) bit (9) int static options (constant) 131 init ("012"b3, (2) (1)"055"b3, "012"b3, (3) (1)"003"b3, (5) (1)"012"b3, (3) (1)"003"b3, "012"b3); 132 dcl line_delimiter (16) char (1) based (addr (line_delimiter_octal)); 133 134 dcl no_write_code fixed bin (35) internal static; 135 dcl noalloc_code fixed bin (35) internal static; /* copy of code to be used at interrupt time */ 136 1 1 /* BEGIN INCLUDE FILE ... wtcb.incl.pl1 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 1 6* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 1 7* Add data needed for the uncp multiplexer (DSA gateway) interface 1 8* implementation. 1 9* END HISTORY COMMENTS */ 1 10 1 11 1 12 /* 1 13* Moved from tty_buf.incl.pl1 Aug 78 by J. Nicholls plus changes for ring 0 demultiplexing 1 14* Error code added Nov. 1982 by Robert Coren 1 15* Modified December 1984 by Robert Coren to invent "more_flags" structure and 1 16* its first flag, line_status_disabled 1 17* Reported modifications for the DN7100 interim in August 85. 1 18**/ 1 19 1 20 dcl wtcbp ptr; /* pointer to head of wtcb */ 1 21 1 22 dcl 1 wtcb based (wtcbp) aligned, /* wired terminal control block */ 1 23 2 hevent fixed bin (71) aligned, /* event channel for hangup/dialup signal */ 1 24 2 event fixed bin (71) aligned, /* users event channel, for uproc */ 1 25 1 26 2 line_status bit (72) aligned, /* actual line status sent by fnp */ 1 27 1 28 2 tcb_ptr ptr unal, /* pointer to tcb */ 1 29 2 pad1 fixed bin (35), /* formerly time dialedup */ 1 30 1 31 2 hproc bit (36) aligned, /* boss processid */ 1 32 2 uproc bit (36) aligned, /* tty user processid */ 1 33 1 34 2 baud_rate fixed bin (18) unal uns, /* baud rate of this line */ 1 35 2 line_type fixed bin (18) unal uns, /* line type for line protocol */ 1 36 1 37 2 flags unaligned, 1 38 3 listen bit (1) unaligned, /* if on, listen for dialups */ 1 39 3 dialed bit (1) unaligned, /* if on, line is dialed up */ 1 40 3 send_output bit (1) unaligned, /* on if DN355 requested more output */ 1 41 1 42 3 qenable bit (1) unaligned, /* if on, signal quits */ 1 43 3 qflag bit (1) unaligned, /* on after quit, causes writes to be ignored */ 1 44 3 end_frame bit (1) unaligned, /* write chain fills ards frame */ 1 45 1 46 3 notify_reqd bit (1) unaligned, /* if on, do notify after unlocking lock */ 1 47 3 work_reqd bit (1) unaligned, /* if on, call dn355 before returning */ 1 48 3 dialing bit (1) unaligned, /* if on, 355 is dialing a phone number */ 1 49 1 50 3 dial_status_valid bit (1) unaligned, /* if on, dial_status_code is valid */ 1 51 3 input_available bit (1) unaligned, /* input for this device is waiting in wired space */ 1 52 3 tcb_initialized bit (1) unaligned, /* if on, tcb has been initialized */ 1 53 1 54 3 wflag bit (1) unaligned, /* process blocked on output */ 1 55 3 rflag bit (1) unaligned, /* process blocked on input */ 1 56 3 wru bit (1) unaligned, /* reading answerback */ 1 57 1 58 3 hndlquit bit (1) unaligned, /* on if in hndlquit mode */ 1 59 3 count_lines bit (1) unaligned, /* on if tcb.linemax > 0 */ 1 60 3 line_status_present bit (1) unaligned, /* fnp has sent line status */ 1 61 1 62 3 sync_line bit (1) unaligned, /* channel is synchronous line type */ 1 63 3 breakall bit (1) unaligned, /* channel is in breakall mode */ 1 64 3 scroll bit (1) unaligned, /* channel is in scroll mode */ 1 65 1 66 3 negotiating_echo bit (1) unaligned, /* ring zero to echo chars. */ 1 67 3 wake_tbl bit (1) unaligned, /* on if in wake_tbl mode */ 1 68 3 allow_wakeup bit (1) unaligned, /* on to allow input wakeup in wake_tbl mode */ 1 69 1 70 3 receive_mode_device bit (1) unaligned, /* device must be told to enter receive mode */ 1 71 3 mark_set bit (1) unal, /* write_with_mark call outstanding */ 1 72 3 masked bit (1) unal, /* channel masked by FNP */ 1 73 1 74 2 dial_status_code fixed bin (8) unaligned, /* code returned by 355 after dialing a phone number */ 1 75 1 76 2 fblock fixed bin (17) unaligned, /* oldest read pointer, block */ 1 77 2 lblock fixed bin (17) unaligned, /* newest read block */ 1 78 1 79 2 fchar fixed bin (9) unsigned unaligned, /* first block char index */ 1 80 2 actline fixed bin (9) unsigned unaligned, /* line number of current line */ 1 81 2 actcol fixed bin (9) unsigned unaligned, /* tty column position */ 1 82 2 nramsgs fixed bin (9) unsigned unaligned, /* current number of read-ahead msgs */ 1 83 1 84 2 write_first fixed bin (17) unaligned, /* first write block */ 1 85 2 write_last fixed bin (17) unaligned, /* last write block */ 1 86 2 write_cnt fixed bin (17) unaligned, /* count of chars in write chain */ 1 87 2 white_col fixed bin (17) unaligned, /* column position resulting from trailing white space */ 1 88 1 89 2 max_buf_size fixed bin (9) unal uns, /* maximum-size buffer to be allocated for this channel */ 1 90 2 buffer_pad fixed bin (9) unal uns, /* amount of pad to be left in output buffers */ 1 91 2 devx fixed bin (17) unaligned, /* index into lct of channel's entry */ 1 92 2 echdp bit (18) unaligned, /* echo negotiation data ptr */ 1 93 2 waketp bit (18) unaligned, /* wakeup table offset */ 1 94 2 prompt_len fixed bin (8) unaligned, /* number of chars in prompt string */ 1 95 2 prompt char (3) unaligned, /* text of prompt message */ 1 96 2 line_delimiter char (1) unal, /* line delimiter for tty_read parse */ 1 97 2 more_flags unaligned, /* in addition to flags (above) */ 1 98 3 line_status_disabled bit (1) unaligned, /* "1"b => don't relay line_status interrupts */ 1 99 2 send_turn bit (1) unal, /* For the Dn7100 interim */ 1 100 2 pad bit (25) unal, 1 101 2 error_code fixed bin (35), /* error code returned by channel_manager to tty_interrupt */ 1 102 2 pad2 bit (36); 1 103 1 104 /* Ends on doubleword boundary */ 1 105 1 106 /* END INCLUDE FILE ... wtcb.incl.pl1 */ 137 2 1 /* BEGIN INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 2 2 2 3 /* Defines constants and structures used by MCS interrupt handlers */ 2 4 2 5 /* Created 08/21/78 by Robert Coren */ 2 6 /* Echo negotiation types added sometime by Bernie Greenberg */ 2 7 /* TIMER and USER_INTERRUPT added in spring of 1982 by Olin Sibert */ 2 8 /* MASKED type added June 23, 1982, by Robert Coren */ 2 9 2 10 dcl DIALUP fixed bin int static options (constant) init (1); 2 11 dcl HANGUP fixed bin int static options (constant) init (2); 2 12 dcl CRASH fixed bin int static options (constant) init (3); 2 13 dcl SEND_OUTPUT fixed bin int static options (constant) init (4); 2 14 dcl INPUT_AVAILABLE fixed bin int static options (constant) init (5); 2 15 dcl ACCEPT_INPUT fixed bin int static options (constant) init (6); 2 16 dcl INPUT_REJECTED fixed bin int static options (constant) init (7); 2 17 dcl QUIT fixed bin int static options (constant) init (8); 2 18 dcl LINE_STATUS fixed bin int static options (constant) init (9); 2 19 dcl DIAL_STATUS fixed bin int static options (constant) init (10); 2 20 dcl WRU_TIMEOUT fixed bin int static options (constant) init (11); 2 21 dcl SPACE_AVAILABLE fixed bin int static options (constant) init (12); 2 22 dcl ACKNOWLEDGE_ECHNEGO_INIT fixed bin int static options (constant) init (13); 2 23 dcl ACKNOWLEDGE_ECHNEGO_STOP fixed bin int static options (constant) init (14); 2 24 dcl TIMER fixed bin int static options (constant) init (15); 2 25 dcl USER_INTERRUPT fixed bin int static options (constant) init (16); 2 26 dcl MASKED fixed bin int static options (constant) init (17); 2 27 2 28 dcl interrupt_info bit (72) aligned; 2 29 2 30 dcl 1 dialup_info aligned, /* for use with DIALUP interrupt */ 2 31 2 line_type fixed bin (9) unal uns, 2 32 2 buffer_pad fixed bin (9) unal uns, /* free space multiplexer would like in output bufs */ 2 33 2 baud_rate fixed bin (18) unal uns, 2 34 2 max_buf_size fixed bin (9) unal uns, 2 35 2 receive_mode_device bit (1) unal, /* device must be told to enter receive mode */ 2 36 2 pad bit (26) unal; 2 37 2 38 dcl 1 rtx_info aligned, /* for use with ACCEPT_INPUT interrupt */ 2 39 2 input_chain unaligned, 2 40 3 chain_head bit (18) unaligned, 2 41 3 chain_tail bit (18) unaligned, 2 42 2 input_count fixed bin (18) unal uns, 2 43 2 flags unaligned, 2 44 3 break_char bit (1), /* data contains a break character */ 2 45 3 output_in_fnp bit (1), /* there is output in the FNP */ 2 46 3 output_in_ring_0 bit (1), /* there is output in ring 0 */ 2 47 3 formfeed_present bit (1), /* input contains a formfeed character */ 2 48 3 pad bit (14); 2 49 2 50 dcl 1 timer_info aligned, /* Info supplied with TIMER interrupt */ 2 51 2 id bit (36) aligned, /* ID which was supplied in call to mcs_timer$set */ 2 52 2 subchan_idx fixed bin; /* Index of subchannel on whose behalf timer was set */ 2 53 2 54 /* END INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 138 3 1 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 3 2 3 3 /* Date Last Modified and Reason 3 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 3 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 3 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 3 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 3 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 3 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 3 10* Modified November 1979 by C. Hornig for MCS tracing. 3 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 3 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 3 13* Modified March 1980 by Robert Coren to reorganize metering information 3 14* Modified December 1980 by Robert Coren to add FNP-specific events 3 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 3 16* Modified November 1984 by Robert Coren to add tty_area_lock 3 17**/ 3 18 3 19 dcl ttybp ptr, 3 20 tty_buf$ ext static, /* tty buffer segment */ 3 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 3 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 3 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 3 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 3 25 3 26 3 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 3 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 3 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 3 30 3 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 3 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 3 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 3 34 3 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 3 36 2 slock bit (36), /* per system lock */ 3 37 2 absorig fixed bin (24), /* abs address of this seg */ 3 38 2 borig bit (18), /* index of start of buffer area */ 3 39 2 bleft fixed bin (18), /* words left in pool */ 3 40 2 free bit (18), /* pointer to start of free pool */ 3 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 3 42 2 padb1 bit (28) unaligned, 3 43 2 lct_ptr ptr, /* pointer to logical channel table */ 3 44 3 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 3 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 3 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 3 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 3 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 3 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 3 51 2 minbuf fixed bin (18), /* min output buffer size */ 3 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 3 53 3 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 3 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 3 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 3 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 3 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 3 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 3 60 3 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 3 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 3 63 2 bfx fixed bin, /* used in calls to iobm */ 3 64 2 nquits fixed bin (35), /* number of quits */ 3 65 2 space_needed_data, 3 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 3 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 3 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 3 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 3 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 3 71 3 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 3 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 3 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 3 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 3 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 3 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 3 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 3 79 3 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 3 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 3 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 3 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 3 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 3 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 3 86 3 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 3 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 3 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 3 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 3 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 3 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 3 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 3 94 3 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 3 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 3 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 3 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 3 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 3 100 2 echo_neg_mux_nonecho fixed bin (35), 3 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 3 102 3 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 3 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 3 105 2 trace unaligned, /* tracing information */ 3 106 3 flags, 3 107 4 enable bit, /* global tracing control */ 3 108 4 default_mode bit, /* whether to trace channels by default */ 3 109 4 read bit, /* read */ 3 110 4 write bit, /* write */ 3 111 4 data bit, /* buffers on reads and writes */ 3 112 4 control bit, /* control, priv_control, and hpriv_control */ 3 113 4 modes bit, /* (get set check)_modes */ 3 114 4 interrupt bit, /* interrupt, interrupt_later */ 3 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 3 116 4 start bit, /* start, stop */ 3 117 4 shutdown bit, /* shutdown */ 3 118 4 space_man bit, /* tty_space_man$* */ 3 119 4 pad_flags bit (6), 3 120 3 data_offset bit (18), /* offset of tracing data */ 3 121 3 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 3 123 3 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 3 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 3 126 2 timer_count fixed bin, /* Number of timers outstanding */ 3 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 3 128 3 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 3 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 3 131 3 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 3 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 3 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 3 135 3 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 3 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 3 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 3 139 3 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 3 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 3 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 3 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 3 144 3 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 3 146 3 147 2 pad2 (13) fixed bin (35), 3 148 3 149 2 free_space fixed bin; /* start of free space region */ 3 150 3 151 4 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 4 2 4 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 4 4 4 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 4 6 4 7 /* format: style3 */ 4 8 4 9 declare lock_ptr pointer; 4 10 declare 1 hc_fast_lock aligned based (lock_ptr), 4 11 2 pid bit (36) aligned, /* holder of lock */ 4 12 2 event bit (36) aligned, /* event associated with lock */ 4 13 2 flags aligned, 4 14 3 notify_sw bit (1) unaligned, 4 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 4 16 4 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 3 152 3 153 3 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 139 5 1 /* BEGIN INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 5 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 5 8* Add data needed for the uncp multiplexer (DSA gateway) interface 5 9* implementation. 5 10* END HISTORY COMMENTS */ 5 11 5 12 5 13 /* 5 14* Separated from tty_buf.incl.pl1 aug 78 by J. Nicholls 5 15* Modified May 1979 by Larry Johnson to add max_buffer_tally array and to use unsigned variables. 5 16* Reported in February 1982 the modifications to add the "turn" bit in flags. 5 17**/ 5 18 5 19 dcl blockp ptr; /* pointer which block entry is based on */ 5 20 dcl free_blockp ptr; /* pointer to head of free space chain */ 5 21 5 22 5 23 dcl 1 free_block aligned based (free_blockp), /* format of start of free block */ 5 24 2 next bit (18), /* foward pointer to next free block */ 5 25 2 size fixed bin; /* number of words in this block */ 5 26 5 27 5 28 dcl 1 buffer based (blockp) aligned, /* buffer definition */ 5 29 2 next fixed bin (18) unal uns, /* addr of next buffer */ 5 30 2 flags unaligned, 5 31 3 end_of_page bit (1) unaligned, /* buffer contains end of page */ 5 32 3 converted bit (1) unaligned, /* buffer contains converted input */ 5 33 3 break bit (1) unaligned, /* buffer contains break character */ 5 34 3 mark bit (1) unaligned, /* buffer contains first character after "mark" */ 5 35 3 turn bit (1) unaligned, /* ON if the turn must be sent */ 5 36 3 pad bit (1) unaligned, 5 37 2 size_code fixed bin (3) unal uns, /* (nwords/16) - 1 */ 5 38 2 tally fixed bin (9) unal uns, /* number of characters in buffer */ 5 39 2 chars (0:59) char (1) unaligned; /* room for 60 data characters */ 5 40 5 41 /* the following array, if indexed by buffer.size_code will give maximum number of characters permitted in that buffer */ 5 42 5 43 dcl max_buffer_tally (0:7) fixed bin int static options (constant) init (60, 124, 188, 252, 316, 380, 444, 508); 5 44 5 45 /* END INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 140 6 1 /* BEGIN INCLUDE FILE ... net_event_message.incl.pl1 */ 6 2 6 3 /****^ HISTORY COMMENTS: 6 4* 1) change(86-07-30,Kissel), approve(86-07-30,MCR7475), audit(86-08-04,Coren), 6 5* install(86-10-09,MR12.0-1181): 6 6* This include file was formerly tty_event_message.incl.pl1. It has been 6 7* updated with different fields and new constants, and renamed to 6 8* net_event_message.incl.pl1 6 9* 2) change(87-04-20,GDixon), approve(87-07-13,MCR7694), 6 10* audit(87-06-24,Hartogs), install(87-08-04,MR12.1-1056): 6 11* Add NETWORK_TYPE_VALUES array. 6 12* END HISTORY COMMENTS */ 6 13 6 14 /* describes event message passed with wakeups from the tty DIM */ 6 15 /* Created 5/24/76 by Robert S. Coren */ 6 16 6 17 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 6 18 6 19 dcl net_event_message_arg fixed bin (71); /* For calling IPC */ 6 20 dcl NET_EVENT_MESSAGE_VERSION_1 bit (2) internal static options (constant) init ("10"b); 6 21 6 22 dcl 1 net_event_message aligned based (addr (net_event_message_arg)), 6 23 2 version bit (2) unaligned, /* Currently version 1 */ 6 24 2 reason bit (16) unaligned, /* Additional info about the event */ 6 25 2 pad bit (6) unaligned, /* Must be zero */ 6 26 2 network_type fixed bin (4) unsigned unaligned, 6 27 /* See below for constants */ 6 28 2 type fixed bin (8) unsigned unaligned, 6 29 /* Type of interrupt, see below */ 6 30 2 handle fixed bin (35) aligned;/* Caller's handle (devx for MCS, handle for DSA) */ 6 31 6 32 /* Network type constants */ 6 33 6 34 dcl MCS_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (0); 6 35 dcl DSA_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (1); 6 36 dcl MOWSE_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (2); 6 37 6 38 dcl NETWORK_TYPE_VALUES (0:2) char(8) varying int static options(constant) init( 6 39 "MCS", 6 40 "DSA", 6 41 "MOWSE"); 6 42 6 43 6 44 /* MCS event message type constants */ 6 45 6 46 dcl MAX_MCS_EVENT_MSG_TYPE fixed bin internal static options (constant) init (8); 6 47 6 48 dcl MCS_UNSPECIFIED_MSG fixed bin internal static options (constant) init (0); 6 49 /* used for "start" order, etc. */ 6 50 dcl MCS_DIALUP_MSG fixed bin internal static options (constant) init (1); 6 51 /* dialup */ 6 52 dcl MCS_HANGUP_MSG fixed bin internal static options (constant) init (2); 6 53 /* hangup */ 6 54 dcl MCS_DIALOUT_MSG fixed bin internal static options (constant) init (3); 6 55 /* dialout status returned */ 6 56 dcl MCS_QUIT_MSG fixed bin internal static options (constant) init (4); 6 57 /* quit */ 6 58 dcl MCS_READ_MSG fixed bin internal static options (constant) init (5); 6 59 /* input arrived */ 6 60 dcl MCS_WRITE_MSG fixed bin internal static options (constant) init (6); 6 61 /* output completed */ 6 62 dcl MCS_LINE_STATUS_MSG fixed bin internal static options (constant) init (7); 6 63 /* control tables sent status */ 6 64 dcl MCS_MASKED_MSG fixed bin internal static options (constant) init (8); 6 65 /* channel masked by FNP */ 6 66 6 67 dcl MCS_MSG_TYPE_TO_PNAME (0:8) char (20) internal static options (constant) init ("unspecified", 6 68 /* 0 */ 6 69 "dialup", /* 1 */ 6 70 "hangup", /* 2 */ 6 71 "dialout status", /* 3 */ 6 72 "quit", /* 4 */ 6 73 "read", /* 5 */ 6 74 "write", /* 6 */ 6 75 "line status", /* 7 */ 6 76 "masked"); /* 8 */ 6 77 6 78 /* DSA event message type constants */ 6 79 6 80 dcl MAX_DSA_EVENT_MSG_TYPE fixed bin internal static options (constant) init (19); 6 81 6 82 dcl DSA_UNSPECIFIED_MSG fixed bin (8) uns internal static options (constant) init (0); 6 83 dcl DSA_ATTENTION_MSG fixed bin (8) uns internal static options (constant) init (1); 6 84 dcl DSA_DATA_ATTENTION_MSG fixed bin (8) uns internal static options (constant) init (2); 6 85 dcl DSA_DEMAND_RELEASE_SRU_MSG fixed bin (8) uns internal static options (constant) init (3); 6 86 dcl DSA_DEMAND_TURN_MSG fixed bin (8) uns internal static options (constant) init (4); 6 87 dcl DSA_DEMAND_TURN_ACK_MSG fixed bin (8) uns internal static options (constant) init (5); 6 88 dcl DSA_PURGE_MSG fixed bin (8) uns internal static options (constant) init (6); 6 89 dcl DSA_RECOVER_MSG fixed bin (8) uns internal static options (constant) init (7); 6 90 dcl DSA_RECOVER_ACK_MSG fixed bin (8) uns internal static options (constant) init (8); 6 91 dcl DSA_RELEASE_SRU_MSG fixed bin (8) uns internal static options (constant) init (9); 6 92 dcl DSA_RESUME_MSG fixed bin (8) uns internal static options (constant) init (10); 6 93 dcl DSA_RESUME_ACK_MSG fixed bin (8) uns internal static options (constant) init (11); 6 94 dcl DSA_SUSPEND_MSG fixed bin (8) uns internal static options (constant) init (12); 6 95 dcl DSA_SUSPEND_ACK_MSG fixed bin (8) uns internal static options (constant) init (13); 6 96 dcl DSA_TERM_ABNORMAL_MSG fixed bin (8) uns internal static options (constant) init (14); 6 97 dcl DSA_ESTABLISHMENT_MSG fixed bin (8) uns internal static options (constant) init (15); 6 98 dcl DSA_TERMINATED_MSG fixed bin (8) uns internal static options (constant) init (16); 6 99 dcl DSA_USER_UNASSIGN_MSG fixed bin (8) uns internal static options (constant) init (17); 6 100 dcl DSA_DATA_INPUT_MSG fixed bin (8) uns internal static options (constant) init (18); 6 101 dcl DSA_DATA_OUTPUT_MSG fixed bin (8) uns internal static options (constant) init (19); 6 102 6 103 dcl DSA_MSG_TYPE_TO_PNAME (0:19) char (20) internal static options (constant) init ("unspecified", 6 104 /* 0 */ 6 105 "attention", /* 1 */ 6 106 "data_attention", /* 2 */ 6 107 "demand_release_sru", /* 3 */ 6 108 "demand_turn", /* 4 */ 6 109 "demand_turn_ack", /* 5 */ 6 110 "purge", /* 6 */ 6 111 "recover", /* 7 */ 6 112 "recover_ack", /* 8 */ 6 113 "release_sru", /* 9 */ 6 114 "resume", /* 10 */ 6 115 "resume_ack", /* 11 */ 6 116 "suspend", /* 12 */ 6 117 "suspend_ack", /* 13 */ 6 118 "terminate_abnormal", /* 14 */ 6 119 "establishment", /* 15 */ 6 120 "terminated", /* 16 */ 6 121 "user_unassign", /* 17 */ 6 122 "data input", /* 18 */ 6 123 "data output"); /* 19 */ 6 124 6 125 /* END INCLUDE FILE ... net_event_message.incl.pl1 */ 141 7 1 /* BEGIN INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 7 2 7 3 /* This include file declares all the entries in tty_space_man and defines the constants 7 4** to be used for the flags argument 7 5** Modified 08/21/78 by Robert Coren to eliminate "masked" flag 7 6** Modified March 1981 by Robert Coren to add get_perm_space entry 7 7** Modified April 1981 by Robert Coren to add switch_chain entry 7 8**/ 7 9 7 10 dcl tty_space_man$get_space entry (fixed bin, ptr); 7 11 dcl tty_space_man$get_perm_space entry (fixed bin, ptr); 7 12 dcl tty_space_man$free_space entry (fixed bin, ptr); 7 13 dcl tty_space_man$get_buffer entry (fixed bin, fixed bin, bit (1), ptr); 7 14 dcl tty_space_man$free_buffer entry (fixed bin, bit (1), ptr); 7 15 dcl tty_space_man$get_chain entry (fixed bin, fixed bin, fixed bin, bit (1), ptr); 7 16 dcl tty_space_man$free_chain entry (fixed bin, bit (1), ptr); 7 17 dcl tty_space_man$switch_chain entry (fixed bin, fixed bin, bit (1), bit (1), ptr); 7 18 dcl tty_space_man$needs_space entry (fixed bin); 7 19 7 20 dcl INPUT bit (1) int static options (constant) init ("0"b); 7 21 dcl OUTPUT bit (1) int static options (constant) init ("1"b); 7 22 7 23 /* END INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 142 8 1 /* BEGIN INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 8 2 8 3 /* Created 8/25/78 by J. Stern */ 8 4 8 5 8 6 /* call channel_manager$read (devx, chain_ptr, more_input_flag, code) */ 8 7 dcl channel_manager$read entry (fixed bin, ptr, bit (1) aligned, fixed bin (35)); 8 8 8 9 /* call channel_manager$write (devx, output_ptr, code) */ 8 10 dcl channel_manager$write entry (fixed bin, ptr, fixed bin (35)); 8 11 8 12 /* call channel_manager$control (devx, control_type, info_ptr, code) */ 8 13 dcl channel_manager$control entry (fixed bin, char (*), ptr, fixed bin (35)); 8 14 8 15 /* call channel_manager$set_modes (devx, mode_change_list_ptr, code) */ 8 16 dcl channel_manager$set_modes entry (fixed bin, ptr, fixed bin (35)); 8 17 8 18 /* call channel_manager$check_modes (devx, mode_change_list_ptr, code) */ 8 19 dcl channel_manager$check_modes entry (fixed bin, ptr, fixed bin (35)); 8 20 8 21 /* call channel_manager$get_modes (devx, modes, code) */ 8 22 dcl channel_manager$get_modes entry (fixed bin, char (*), fixed bin (35)); 8 23 8 24 /* call channel_manager$interrupt (devx, int_type, int_data) */ 8 25 dcl channel_manager$interrupt entry (fixed bin, fixed bin, bit (72) aligned); 8 26 8 27 /* call channel_manager$interrupt_later (devx, int_type, int_data) */ 8 28 dcl channel_manager$interrupt_later entry (fixed bin, fixed bin, bit (72) aligned); 8 29 8 30 /* call channel_manager$queued_interrupt (devx, int_type, int_data) */ 8 31 dcl channel_manager$queued_interrupt entry (fixed bin, fixed bin, bit (72) aligned); 8 32 8 33 8 34 /* END INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 143 9 1 /* BEGIN INCLUDE FILE ... line_types.incl.pl1 */ 9 2 9 3 /* Written November 10 1975 by Paul Green */ 9 4 /* Modified October 1978 by Larry Johnson to include line_type_names */ 9 5 /* Modified 12/19/78 by J. Stern to add POLLED_VIP line type */ 9 6 /* Modified 9/27/79 by J. Stern to add X25LAP line type */ 9 7 /* Modified Spring 1981 by Charles Hornig to add HDLC line type */ 9 8 /* Modified May 1981 by Robert Coren to add COLTS line type */ 9 9 /* Modified September 1984 by Robert Coren to correctly count VIP as a synchronous line type */ 9 10 9 11 9 12 /****^ HISTORY COMMENTS: 9 13* 1) change(86-02-25,Negaret), approve(87-07-13,MCR7679), 9 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 9 15* Add a DSA line type. 9 16* 2) change(87-03-17,Beattie), approve(87-07-13,MCR7656), 9 17* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 9 18* Add HASP_OPR to identify HASP workstation consoles with login service. 9 19* END HISTORY COMMENTS */ 9 20 9 21 9 22 declare (LINE_MC initial (-2), 9 23 LINE_TELNET initial (-1), 9 24 LINE_UNKNOWN initial (0), 9 25 LINE_ASCII initial (1), 9 26 LINE_1050 initial (2), 9 27 LINE_2741 initial (3), 9 28 LINE_ARDS initial (4), 9 29 LINE_SYNCH initial (5), 9 30 LINE_G115 initial (6), 9 31 LINE_BSC initial (7), 9 32 LINE_ETX initial (8), 9 33 LINE_VIP initial (9), 9 34 LINE_ASYNC1 initial (10), 9 35 LINE_ASYNC2 initial (11), 9 36 LINE_ASYNC3 initial (12), 9 37 LINE_SYNC1 initial (13), 9 38 LINE_SYNC2 initial (14), 9 39 LINE_SYNC3 initial (15), 9 40 LINE_POLLED_VIP initial (16), 9 41 LINE_X25LAP initial (17), 9 42 LINE_HDLC initial (18), 9 43 LINE_COLTS initial (19), 9 44 LINE_DSA initial (20), 9 45 LINE_HASP_OPR initial (21) 9 46 ) fixed bin internal static options (constant); 9 47 9 48 dcl max_line_type fixed bin int static options (constant) init (21); 9 49 9 50 declare n_sync_line_types fixed bin int static options (constant) init (10); 9 51 9 52 declare sync_line_type (10) fixed bin int static options (constant) init (5, 6, 7, 9, 13, 14, 15, 16, 17, 18); 9 53 9 54 dcl line_types (-2:21) char (16) int static options (constant) init ( 9 55 "MC", /* -2 */ 9 56 "TELNET", /* -1 */ 9 57 "none", /* 0 */ 9 58 "ASCII", /* 1 */ 9 59 "1050", /* 2 */ 9 60 "2741", /* 3 */ 9 61 "ARDS", /* 4 */ 9 62 "Sync", /* 5 */ 9 63 "G115", /* 6 */ 9 64 "BSC", /* 7 */ 9 65 "202ETX", /* 8 */ 9 66 "VIP", /* 9 */ 9 67 "ASYNC1", /* 10 */ 9 68 "ASYNC2", /* 11 */ 9 69 "ASYNC3", /* 12 */ 9 70 "SYNC1", /* 13 */ 9 71 "SYNC2", /* 14 */ 9 72 "SYNC3", /* 15 */ 9 73 "POLLED_VIP", /* 16 */ 9 74 "X25LAP", /* 17 */ 9 75 "HDLC", /* 18 */ 9 76 "COLTS", /* 19 */ 9 77 "DSA", /* 20 */ 9 78 "HASP_OPR"); /* 21 */ 9 79 9 80 /* END INCLUDE FILE ... line_types.incl.pl1 */ 144 10 1 /* BEGIN INCLUDE FILE mcs_echo_neg_sys.incl.pl1 Bernard Greenberg 1/20/79 */ 10 2 10 3 /* Modified 6/29/79 by BSG for FNP echo negotiation */ 10 4 10 5 10 6 /****^ HISTORY COMMENTS: 10 7* 1) change(86-04-23,Coren), approve(86-04-23,MCR7300), 10 8* audit(86-05-19,Beattie), install(86-07-08,MR12.0-1089): 10 9* To increase size of break table and to add named constants for the size. 10 10* END HISTORY COMMENTS */ 10 11 10 12 10 13 /* This include file defines the wired structure for MCS echo negotiation */ 10 14 10 15 dcl echo_datap ptr; /* Wired echo data ptr */ 10 16 dcl WIRED_ECHO_BREAK_SIZE fixed bin internal static options (constant) init (255); 10 17 dcl WORDS_IN_ECHO_BREAK_TABLE fixed bin internal static options (constant) init (8); 10 18 10 19 dcl 1 echo_data based (echo_datap) aligned, /* Wired echo data */ 10 20 2 break (0: 255) bit (1) unaligned, /* 1 = break on this character */ 10 21 2 synchronized bit (1) unal, /* Mux echo negotiation is synchronized */ 10 22 2 mux_will_echnego bit (1) unal, /* Multiplexer accepted start_neg_echnego */ 10 23 2 echo_start_pending_sndopt bit (1) unal, /* Send start_n_e when SEND_OUTPUT comes */ 10 24 2 awaiting_start_sync bit (1) unal, /* Awaiting mux reply ACK for start */ 10 25 2 awaiting_stop_sync bit (1) unal, /* Awaiting mux reply ACK for stop */ 10 26 2 pad bit (27) unaligned, 10 27 2 sync_ctr fixed bin (35), /* Protocol ctr for MUX echo neg */ 10 28 2 chars_echoed fixed bin (9) unsigned unaligned, /* Count of chars echoed */ 10 29 2 horiz_room_left fixed bin (9) unsigned unaligned, /* Room left on line */ 10 30 2 rubout_trigger_chars (2) unaligned, /* Characters that cause rubout action */ 10 31 3 char char (1) unaligned, 10 32 2 rubout_sequence_length fixed bin (4) unsigned unaligned, /* Length of rubout sequence, output */ 10 33 2 rubout_pad_count fixed bin (4) unsigned unaligned, /* Count of pads needed */ 10 34 2 buffer_rubouts bit (1) unaligned, /* 1 = put rubouts and rubbed out in buffer */ 10 35 2 rubout_sequence char (12) unaligned; /* Actual rubout sequence */ 10 36 10 37 /* END INCLUDE FILE mcs_echo_neg_sys.incl.pl1 */ 145 11 1 /* BEGIN INCLUDE FILE ... lct.incl.pl1 */ 11 2 11 3 /* Created by J. Stern 7/26/78 */ 11 4 /* Metering information added by C. Hornig, March 1980. */ 11 5 /* Unwired saved meters added by Robert Coren, December 1980 */ 11 6 11 7 dcl lctp ptr; /* ptr to logical channel table */ 11 8 dcl lctep ptr; /* ptr to logical channel table entry */ 11 9 dcl lct_size fixed bin; /* size of lcte_array when allocated */ 11 10 11 11 dcl 1 lct aligned based (lctp), /* logical channel table */ 11 12 2 max_no_lctes fixed bin, /* maximum number of lct entries */ 11 13 2 cur_no_lctes fixed bin, /* current number of lct entries used */ 11 14 2 lcnt_ptr ptr, /* ptr to logical channel name table */ 11 15 2 queue_lock bit (36), /* lock used to serialize queueing operations */ 11 16 2 pad (11) fixed bin, 11 17 2 lcte_array (lct_size refer (lct.max_no_lctes)) like lcte; /* lct entries */ 11 18 11 19 11 20 dcl 1 lcte aligned based (lctep), /* logical channel table entry */ 11 21 2 lock bit (36), /* channel lock */ 11 22 2 data_base_ptr ptr unal, /* ptr to channel data base */ 11 23 2 channel_type fixed bin (8) unal, /* identifies channel manager program */ 11 24 2 flags unal, 11 25 3 entry_in_use bit (1) unal, /* ON if this entry in use */ 11 26 3 initialized bit (1) unal, /* ON if this channel initialized */ 11 27 3 notify_reqd bit (1) unal, /* ON if must notify when unlocking this channel */ 11 28 3 locked_for_interrupt bit (1) unal, /* ON if lock set by interrupt handler */ 11 29 3 space_needed bit (1) unal, /* ON if this channel needs buffer space */ 11 30 3 special_lock bit (1) unal, /* ON if lock is managed by multiplexer */ 11 31 3 trace_force bit (1) unal, /* ON to trace based on next bit only */ 11 32 /* OFF to XOR next bit with tty_buf.default_tracing */ 11 33 3 trace bit (1) unal, /* ON to trace this channel */ 11 34 3 unused bit (1) unal, 11 35 2 physical_channel_devx fixed bin (17) unal, /* devx of physical chan from which logical chan is derived */ 11 36 2 major_channel_info, 11 37 3 major_channel_devx fixed bin unal, /* major channel device index */ 11 38 3 subchannel fixed bin (17) unal, /* subchannel id (or data ptr) wrt major channel */ 11 39 2 queue_entries, 11 40 3 queue_head bit (18) unal, /* ptr to first queue entry for this channel */ 11 41 3 queue_tail bit (18) unal, /* ptr to last queue entry for this channel */ 11 42 2 word_counts, 11 43 3 input_words fixed bin (17) unal, /* number of input words charged to this channel */ 11 44 3 output_words fixed bin (17) unal, /* number of output words charged to this channel */ 11 45 11 46 2 meters, 11 47 3 in_bytes fixed bin (35), 11 48 3 out_bytes fixed bin (35), 11 49 3 in, 11 50 4 calls fixed bin (35), 11 51 4 interrupts fixed bin (35), 11 52 4 call_time fixed bin (71), 11 53 4 interrupt_time fixed bin (71), 11 54 3 out like lcte.meters.in, 11 55 3 control like lcte.meters.in, 11 56 2 saved_meters_ptr ptr, /* pointer to unwired copy of meters saved at last dialup */ 11 57 11 58 2 timer_offset bit (18) aligned, /* Head of list of timers for this channel */ 11 59 11 60 2 pad (3) fixed bin (35); 11 61 11 62 11 63 dcl lcntp ptr; /* ptr to logical channel name table */ 11 64 11 65 dcl 1 lcnt aligned based (lcntp), /* logical channel name table */ 11 66 2 names (lct.max_no_lctes) char (32) unal; /* channel names */ 11 67 11 68 dcl 1 saved_meters aligned based like lcte.meters; /* meters saved at dialup, allocated in tty_area */ 11 69 11 70 11 71 /* END INCLUDE FILE ... lct.incl.pl1 */ 146 12 1 /* BEGIN INCLUDE FILE ... set_wakeup_table_info.incl.pl1 */ 12 2 12 3 /* Created 3/1/79 by J. Stern */ 12 4 12 5 12 6 dcl swt_infop ptr; 12 7 dcl swt_info_version_1 fixed bin static options (constant) init (1); 12 8 12 9 dcl 1 swt_info aligned based (swt_infop), /* info structure for set_wakeup_table control order */ 12 10 2 version fixed bin, /* version number of this structure */ 12 11 2 new_table like wakeup_table, /* wakeup table to set */ 12 12 2 old_table like wakeup_table; /* previous wakeup table */ 12 13 12 14 dcl wakeup_tablep ptr; 12 15 12 16 dcl 1 wakeup_table aligned based (wakeup_tablep), 12 17 2 wake_map (0:127) bit (1) unal, /* bit i ON if ith char is wakeup char */ 12 18 2 mbz bit (16) unal; 12 19 12 20 12 21 /* END INCLUDE FILE ... set_wakeup_table_info.incl.pl1 */ 147 13 1 /* START OF: response_transitions.incl.pl1 * * * * * * * * * * * * * * * * */ 13 2 13 3 /* Transition identifiers for metering response time 13 4* 13 5* Written April 1981 by J. Bongiovanni */ 13 6 13 7 dcl (AWARD_ELIGIBILITY init(1), 13 8 CALL_RING_0_TTY init (2), 13 9 RETURN_RING_0_TTY init (3), 13 10 BLOCK_PROCESS init (4), 13 11 NON_TTY_WAKEUP init (5), 13 12 TTY_WAKEUP init (6), 13 13 13 14 MAX_TRANSITION init (6)) fixed bin int static options (constant); 13 15 13 16 /* END OF: response_transitions.incl.pl1 * * * * * * * * * * * * * * * * */ 148 14 1 /* Begin include file ..... multiplexer_types.incl.pl1 */ 14 2 14 3 14 4 14 5 /****^ HISTORY COMMENTS: 14 6* 1) change(89-03-20,Parisek), approve(89-06-01,MCR8110), 14 7* audit(89-10-09,Farley), install(89-10-25,MR12.3-1100): 14 8* Add support of protocol mpx. 14 9* END HISTORY COMMENTS */ 14 10 14 11 14 12 /* This include file defines known multiplexer types */ 14 13 /* Prepared August 1978 by Larry Johnson */ 14 14 /* Changed April 1979 to rename the fnp multiplexer mcs */ 14 15 14 16 dcl (TTY_MPX init (0), /* nonmultiplexed channel */ 14 17 MCS_MPX init (1), /* FNP running MCS */ 14 18 USER1_MPX init (2), /* a range of values for user defined multiplexers */ 14 19 USER2_MPX init (3), 14 20 USER3_MPX init (4), 14 21 USER4_MPX init (5), 14 22 USER5_MPX init (6), 14 23 IBM3270_MPX init (7), /* IBM 3270 display terminal controller */ 14 24 VIP7760_MPX init (8), /* Honeywell VIP 7760 terminal controller */ 14 25 STY_MPX init (9), /* Software Terminal Facility */ 14 26 LAP_MPX init (10), /* Link Access Protocol (X.25 level 2) */ 14 27 X25_MPX init (11), /* CCITT X.25 level 3 */ 14 28 HASP_MPX init (12), /* HASP RJE protocol */ 14 29 UNCP_MPX init (13), /* DSA protocol */ 14 30 SYSTEM2_MPX init (14), 14 31 SYSTEM1_MPX init (15), 14 32 PROTOCOL_MPX init (16)) /* TCP/IP network X.25 protocol */ 14 33 int static options (constant); 14 34 14 35 dcl mpx_types (0:16) char (32) int static options (constant) init ( 14 36 "tty", "mcs", "user1", "user2", "user3", "user4", "user5", "ibm3270", 14 37 "vip7760", "sty", "lap", "x25", "hasp", "uncp", "system2", "system1", 14 38 "protocol"); 14 39 14 40 dcl mpx_special_lock (0:16) bit (1) int static options (constant) init ( 14 41 "0"b, "1"b, "0"b, "0"b, "0"b, "0"b, "0"b, "0"b, 14 42 "0"b, "0"b, "0"b, "0"b, "0"b, "1"b, "0"b, "0"b, "0"b); 14 43 14 44 /* End include file ..... multiplexer_types.incl.pl1 */ 149 150 151 interrupt: 152 entry; /* the only entry into this program */ 153 154 wtcbp = a_wtcbp; 155 int_type = a_type; 156 interrupt_info = a_info; 157 devx = wtcb.devx; 158 ttybp = addr (tty_buf$); 159 160 uncp_flag = is_parent_mpx (UNCP_MPX); 161 162 if int_type = DIALUP 163 then do; 164 unspec (dialup_info) = interrupt_info; 165 if wtcb.dialing 166 then do; /* if we asked 355 to dial */ 167 wtcb.dial_status_valid = "1"b; /* status code is now valid */ 168 wtcb.dial_status_code = 0; /* success */ 169 end; 170 171 172 wtcb.line_type = dialup_info.line_type; 173 wtcb.baud_rate = dialup_info.baud_rate; 174 wtcb.max_buf_size = dialup_info.max_buf_size; 175 wtcb.buffer_pad = dialup_info.buffer_pad; 176 wtcb.line_delimiter = line_delimiter (wtcb.line_type); 177 wtcb.receive_mode_device = dialup_info.receive_mode_device; 178 179 if uncp_flag then wtcb.send_turn = "0"b; /* Add for the Datanet 7100. */ 180 181 do i = 1 to n_sync_line_types while (sync_line_type (i) ^= wtcb.line_type); 182 end; 183 wtcb.sync_line = (i <= n_sync_line_types); 184 185 wtcb.flags.dialed = "1"b; /* indicate dialed */ 186 wtcb.uproc = wtcb.hproc; /* make boss process the user until we get real one */ 187 188 unspec (net_event_message) = "0"b; 189 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 190 net_event_message.network_type = MCS_NETWORK_TYPE; 191 net_event_message.handle = devx; 192 net_event_message.type = MCS_DIALUP_MSG; 193 call pxss$ring_0_wakeup (wtcb.hproc, wtcb.hevent, net_event_message_arg, 0); 194 /* wakeup the answering service */ 195 end; 196 197 else if int_type = HANGUP 198 then do; 199 unspec (net_event_message) = "0"b; 200 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 201 net_event_message.network_type = MCS_NETWORK_TYPE; 202 net_event_message.handle = devx; 203 net_event_message.type = MCS_HANGUP_MSG; 204 call pxss$ring_0_wakeup (wtcb.hproc, wtcb.hevent, net_event_message_arg, (0)); 205 /* notify Initializer */ 206 207 call kill_line; /* wipe out our record of the channel */ 208 end; 209 210 else if int_type = CRASH /* we don't have to tell anyone */ 211 then call kill_line; /* except ourselves */ 212 213 else if int_type = SEND_OUTPUT 214 then do; 215 wtcb.send_output = "1"b; /* send_next_page will undo this if necessary */ 216 if wtcb.write_first ^= 0 /* we have more output waiting */ 217 then call send_next_page; 218 else if wtcb.negotiating_echo 219 then do; /* Do we need to get start_echo ctl order thru? */ 220 221 echo_datap = ptr (ttybp, wtcb.echdp); 222 if echo_data.echo_start_pending_sndopt 223 then call start_negotiated_echo; /* This happens when multiplexer couldn't honor previous start_negotiated_echo */ 224 /* because it had output pending. */ 225 end; 226 227 if wtcb.write_first = 0 /* no write chain left */ 228 then if wtcb.wflag /* user is waiting to be told when output is done */ 229 then do; 230 unspec (net_event_message) = "0"b; 231 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 232 net_event_message.network_type = MCS_NETWORK_TYPE; 233 net_event_message.handle = devx; 234 net_event_message.type = MCS_WRITE_MSG; 235 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 236 wtcb.wflag = "0"b; 237 end; 238 end; 239 240 else if int_type = INPUT_AVAILABLE /* they've got input for us, but they won't say where */ 241 then do; 242 wtcb.input_available = "1"b; 243 if wtcb.rflag /* the process wants it */ 244 then do; 245 unspec (net_event_message) = "0"b; 246 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 247 net_event_message.network_type = MCS_NETWORK_TYPE; 248 net_event_message.handle = devx; 249 net_event_message.type = MCS_READ_MSG; 250 call meter_response_time (wtcb.uproc, TTY_WAKEUP); 251 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 252 wtcb.rflag = "0"b; 253 end; 254 end; 255 256 else if int_type = ACCEPT_INPUT /* they're handing us input */ 257 then do; 258 unspec (rtx_info) = interrupt_info; 259 if rtx_info.formfeed_present /* this is end_of_page response */ 260 then do; 261 if ^rtx_info.output_in_ring_0 & wtcb.write_first = 0 262 /* if tty_write is up-to-date */ 263 then wtcb.actline = 0; 264 end; 265 266 inchain = bin (rtx_info.chain_head); 267 if inchain = 0 268 then return; 269 270 sync_ctr_tally = 0; /* Set for echo sync */ 271 r0_did_echo = "0"b; /* Set for resync hack. */ 272 273 last_offset = bin (rtx_info.chain_tail); /* initialize end_of_chain pointer */ 274 275 if wtcb.negotiating_echo 276 then do; /* In echnego state */ 277 start_time = clock (); /* count time spent doing this */ 278 tty_buf.echo_neg_interrupts = tty_buf.echo_neg_interrupts + 1; 279 /* METER */ 280 echo_datap = ptr (ttybp, wtcb.echdp); /* Develop table ptr */ 281 echbufp = null (); /* No echo buffer yet */ 282 echnego_from_mux_flag = "0"b; 283 if wtcb.write_last = 0 284 then old_tailp = null; /* Set for combining */ 285 else do; 286 old_tailp = ptr (ttybp, wtcb.write_last); 287 old_last_tally = old_tailp -> buffer.tally; 288 if old_last_tally ^< max_buffer_tally (old_tailp -> buffer.size_code) - wtcb.buffer_pad 289 then old_tailp = null; 290 end; 291 292 293 do blockp = ptr (ttybp, rtx_info.chain_head) repeat (ptr (ttybp, buffer.next)) while (rel (blockp)); 294 295 echnego_scan_start = 0; 296 297 if echo_data.mux_will_echnego /* Mux knows how to echo negotiate */ 298 & buffer.next = 0 /* This is end of chain */ 299 & ^rtx_info.break_char /* Mux echoed all these characters */ 300 /* Except maybe the last few */ 301 & buffer.tally > 0 302 then do; 303 304 /* it's possible that the multiplexer (in particular, the FNP) appended a few more 305* characters after it stopped echoing. This code assumes that there will be no 306* more than 4 such, and that the multiplexer echoed exactly the characters up to 307* but not including the first non-echoable character. */ 308 309 do echnego_scan_start = max (0, buffer.tally - 4) to buffer.tally - 1 310 while (echoable (buffer.chars (echnego_scan_start))); 311 end; 312 if echnego_scan_start > echo_data.horiz_room_left 313 /* stopped because it ran out of line */ 314 then echnego_scan_start = echo_data.horiz_room_left; 315 316 echo_data.horiz_room_left = echo_data.horiz_room_left - echnego_scan_start; 317 echo_data.chars_echoed = echo_data.chars_echoed + echnego_scan_start; 318 sync_ctr_tally = sync_ctr_tally - echnego_scan_start; 319 /* Will go negative */ 320 tty_buf.echo_neg_mux_chars = tty_buf.echo_neg_mux_chars + echnego_scan_start; 321 /* METER */ 322 rtx_info.break_char = "1"b; 323 echnego_from_mux_flag = "1"b; 324 if echo_data.horiz_room_left ^> 0 325 then go to negotiated_echo_ceases; 326 end; 327 328 /* Mux echoed _n_o_n_e of them; see if we can echo them. */ 329 330 do charx = echnego_scan_start to buffer.tally - 1; 331 /* Scan buffer */ 332 this_char = buffer.chars (charx); 333 if ^echoable (this_char) 334 then go to negotiated_echo_ceases; 335 336 337 /* This character is echoable */ 338 339 if echo_data.horiz_room_left ^> 0 340 then go to negotiated_echo_ceases; 341 if echnego_from_mux_flag 342 then do; 343 echo_data.chars_echoed = echo_data.chars_echoed + 1; 344 tty_buf.echo_neg_mux_chars = tty_buf.echo_neg_mux_chars + 1; 345 /* METER */ 346 sync_ctr_tally = sync_ctr_tally - 1; 347 end; 348 else if old_tailp ^= null 349 then do; /* Try to combine buffers */ 350 r0_did_echo = "1"b; 351 old_tailp -> buffer.chars (old_last_tally) = this_char; 352 echo_data.chars_echoed = echo_data.chars_echoed + 1; 353 tty_buf.echo_neg_r0_chars = tty_buf.echo_neg_r0_chars + 1; 354 old_last_tally, old_tailp -> buffer.tally = old_last_tally + 1; 355 if old_last_tally ^< max_buffer_tally (old_tailp -> buffer.size_code) - wtcb.buffer_pad 356 then old_tailp = null; 357 end; 358 else do; 359 360 if echbufp = null 361 then do; 362 363 r0_did_echo = "1"b; 364 lctp = tty_buf.lct_ptr; 365 /* we're going to check if the guy's got too much space already */ 366 lctep = addr (lct.lcte_array (devx)); 367 lctep = addr (lct.lcte_array (lcte.physical_channel_devx)); 368 if lcte.output_words >= divide (tty_buf.bleft, output_bpart, 17, 0) 369 /* he does */ 370 then go to negotiated_echo_ceases; 371 /* so stop for now */ 372 373 call tty_space_man$get_buffer (devx, 16, OUTPUT, echbufp); 374 if echbufp = null 375 then go to negotiated_echo_ceases; 376 /* No more room */ 377 echo_tally = 0; 378 end; 379 echbufp -> buffer.chars (echo_tally) = this_char; 380 /* Insert it */ 381 echo_tally = echo_tally + 1; 382 /* chars is 0-indexed */ 383 384 if echo_tally >= max_buffer_tally (echbufp -> buffer.size_code) - wtcb.buffer_pad 385 then call ship_echo_buffer; 386 end; 387 echo_data.horiz_room_left = echo_data.horiz_room_left - 1; 388 end; /* End of input buffer */ 389 end; /* End of input chain */ 390 rtx_info.break_char = "0"b; /* NO break! */ 391 go to negotiated_echo_continues; 392 393 394 negotiated_echo_ceases: /* Some break condition or lossage has been hit. */ 395 echo_data.echo_start_pending_sndopt = "0"b; 396 /* DONT start mux up. */ 397 wtcb.negotiating_echo = "0"b; /* Turn off echoing */ 398 negotiated_echo_continues: 399 if echbufp ^= null 400 then call ship_echo_buffer; 401 tty_buf.echo_neg_time = tty_buf.echo_neg_time + clock () - start_time; 402 end; 403 404 if wtcb.echdp ^= "000000"b3 405 then do; /* May need to count synchronization */ 406 echo_datap = ptr (ttybp, wtcb.echdp); 407 if echo_data.synchronized 408 then do; 409 if sync_ctr_tally < 0 410 then echo_data.sync_ctr = 0; /* mux-Echoed chars reinit */ 411 do blockp = ptr (ttybp, rtx_info.chain_head) repeat (ptr (ttybp, buffer.next)) 412 while (rel (blockp)); 413 414 sync_ctr_tally = sync_ctr_tally + buffer.tally; 415 end; /* MUX-echoed characters have been predecremented out */ 416 echo_data.sync_ctr = echo_data.sync_ctr + sync_ctr_tally; 417 if r0_did_echo & wtcb.write_first = 0 418 then do; /* Keep output in order 419* with respect to r0 */ 420 tty_buf.echo_neg_mux_nonecho = tty_buf.echo_neg_mux_nonecho + 1; 421 if wtcb.negotiating_echo 422 then call start_negotiated_echo; 423 /* Mux lost race, retry. */ 424 end; 425 end; 426 end; 427 428 if uncp_flag then 429 if wtcb.receive_mode_device /* Modification for the Datanet 7100 */ 430 then wtcb.wake_tbl = "0"b; /* If UNCP then do not optimize with qedx */ 431 432 if wtcb.wake_tbl & ^wtcb.allow_wakeup 433 then call scan_iw_char; /* look for input wakeup char */ 434 435 if wtcb.mark_set 436 then do; /* indicate that input is first after mark set */ 437 blockp = ptr (ttybp, inchain); /* point to first buffer */ 438 buffer.mark = "1"b; 439 wtcb.mark_set = "0"b; /* we've taken care of it now */ 440 end; 441 442 if wtcb.fblock = 0 443 then do; /* no existing blocks */ 444 wtcb.fblock = inchain; /* set offset to first block */ 445 wtcb.fchar = 0; /* and offset to first char */ 446 end; 447 else do; 448 old_tailp = ptr (ttybp, wtcb.lblock); 449 next_offset = bin (rtx_info.chain_head); 450 if ^old_tailp -> buffer.converted /* don't combine new input with preconverted */ 451 then do; 452 old_last_tally = old_tailp -> buffer.tally; 453 454 max_tally = max_buffer_tally (old_tailp -> buffer.size_code); 455 /* number of characters this buffer will hold */ 456 filled = "0"b; 457 do while ((next_offset ^= 0) & ^filled); 458 /* put as much as possible of input into last old buffer */ 459 new_headp = ptr (ttybp, next_offset); 460 new_first_tally = new_headp -> buffer.tally; 461 462 if (old_last_tally + new_first_tally <= max_tally) & ^new_headp -> buffer.mark 463 /* if it will fit (but don't mixed marked input with unmarked) */ 464 then do; 465 source_ptr = addr (new_headp -> buffer.chars (0)); 466 target_ptr = addr (old_tailp -> buffer.chars (old_last_tally)); 467 target_ptr -> new_chars = source_ptr -> new_chars; 468 old_last_tally = old_last_tally + new_first_tally; 469 next_offset = new_headp -> buffer.next; 470 /* move on to next buffer */ 471 call tty_space_man$free_buffer (devx, INPUT, new_headp); 472 /* through with this one */ 473 end; 474 475 else filled = "1"b; /* no more room in last old buffer */ 476 end; 477 478 old_tailp -> buffer.tally = old_last_tally; 479 end; 480 old_tailp -> buffer.next = next_offset; 481 if next_offset = 0 482 then last_offset = 0; /* took care of entire new chain */ 483 484 end; 485 486 if last_offset ^= 0 487 then wtcb.lblock = last_offset; 488 489 if wtcb.wake_tbl & ^wtcb.allow_wakeup 490 then call check_iw_limit; /* see if too much input has accumulated */ 491 492 if rtx_info.break_char & ^rtx_info.output_in_ring_0 493 /* newline or form feed */ 494 then do; 495 if ^rtx_info.output_in_fnp /* if there's no output going on */ 496 then wtcb.actcol, wtcb.white_col = 0; /* make sure next one starts at left margin */ 497 498 if wtcb.flags.count_lines & ^wtcb.breakall 499 /* counting lines */ 500 then wtcb.actline = wtcb.actline + 1; /* count this one */ 501 end; 502 if (rtx_info.break_char | wtcb.wru) /* if there was a break char or this is answerback */ 503 & wtcb.rflag 504 then do; /* and the user wants a wakeup then */ 505 if wtcb.wake_tbl & ^wtcb.allow_wakeup 506 then if wtcb.prompt_len > 0 507 then call send_prompt; 508 else ; 509 else do; 510 unspec (net_event_message) = "0"b; 511 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 512 net_event_message.network_type = MCS_NETWORK_TYPE; 513 net_event_message.handle = devx; 514 net_event_message.type = MCS_READ_MSG; 515 call meter_response_time (wtcb.uproc, TTY_WAKEUP); 516 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, 0); 517 /* wakeup the user */ 518 wtcb.rflag = "0"b; /* we've taken care of this now */ 519 end; 520 end; 521 end; 522 523 else if int_type = INPUT_REJECTED /* we couldn't take more input for this guy */ 524 then do; 525 if wtcb.fblock ^= 0 /* if he's sitting on any */ 526 then do; 527 unspec (net_event_message) = "0"b; 528 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 529 net_event_message.network_type = MCS_NETWORK_TYPE; 530 net_event_message.handle = devx; 531 net_event_message.type = MCS_READ_MSG; /* poke him */ 532 if wtcb.rflag /* he hasn't been poked already */ 533 then do; 534 call meter_response_time (wtcb.uproc, TTY_WAKEUP); 535 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 536 wtcb.rflag = "0"b; 537 end; 538 539 else call pxss$unique_ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 540 end; 541 end; 542 543 else if int_type = QUIT 544 then do; 545 if wtcb.flags.hndlquit 546 then do; 547 if wtcb.negotiating_echo 548 then do; 549 echo_datap = ptr (ttybp, wtcb.echdp); 550 echo_data.echo_start_pending_sndopt, echo_data.synchronized, wtcb.negotiating_echo = "0"b; 551 end; 552 if wtcb.fblock ^= 0 /* free read chain also */ 553 then do; 554 call tty_space_man$free_chain (devx, INPUT, ptr (ttybp, wtcb.fblock)); 555 wtcb.fblock, wtcb.lblock = 0; 556 end; 557 558 if wtcb.write_first ^= 0 559 then do; 560 call tty_space_man$free_chain (devx, OUTPUT, ptr (ttybp, wtcb.write_first)); 561 wtcb.write_first, wtcb.write_last, wtcb.write_cnt = 0; 562 end; 563 564 wtcb.white_col = 0; 565 wtcb.actcol = 0; 566 end; 567 568 unspec (net_event_message) = "0"b; 569 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 570 net_event_message.network_type = MCS_NETWORK_TYPE; 571 net_event_message.handle = devx; 572 573 if wtcb.wflag | wtcb.rflag /* if process was blocked on output or input */ 574 then do; 575 if wtcb.wflag 576 then net_event_message.type = MCS_WRITE_MSG; 577 /* set message type accordingly */ 578 else net_event_message.type = MCS_READ_MSG; 579 call meter_response_time (wtcb.uproc, TTY_WAKEUP); 580 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, 0); 581 /* wakeup the user */ 582 wtcb.wflag, wtcb.rflag = "0"b; 583 end; 584 585 if wtcb.flags.qenable 586 then do; /* if quit is enabled */ 587 net_event_message.type = MCS_QUIT_MSG; /* we will wake up the user so he knows what gives */ 588 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, 0); 589 590 call pxss$ips_wakeup_int (wtcb.uproc, sys_info$quit_mask); 591 /* signal user process */ 592 wtcb.flags.qflag = "1"b; /* set "quit received" flag */ 593 wtcb.mark_set = "0"b; 594 end; 595 596 if wtcb.count_lines 597 then if wtcb.flags.scroll 598 then wtcb.actline = 0; /* count quit as input for scrolling purposes */ 599 else wtcb.actline = wtcb.actline + 1; /* else count the newline */ 600 601 wtcb.end_frame = "0"b; 602 603 tty_buf.nquits = tty_buf.nquits + 1; /* bump quit count */ 604 605 end; 606 607 else if int_type = LINE_STATUS 608 then do; 609 if ^wtcb.line_status_disabled 610 then if wtcb.uproc ^= "0"b 611 then do; 612 wtcb.line_status = interrupt_info; 613 wtcb.line_status_present = "1"b; 614 unspec (net_event_message) = "0"b; 615 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 616 net_event_message.network_type = MCS_NETWORK_TYPE; 617 net_event_message.handle = devx; 618 net_event_message.type = MCS_LINE_STATUS_MSG; 619 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, 0); 620 end; 621 622 return; 623 624 end; 625 626 else if int_type = DIAL_STATUS 627 then do; 628 if wtcb.dialing 629 then do; 630 wtcb.dial_status_valid = "1"b; /* we have dial out status */ 631 wtcb.dial_status_code = bin (substr (interrupt_info, 1, 8), 8); 632 unspec (net_event_message) = "0"b; 633 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 634 net_event_message.network_type = MCS_NETWORK_TYPE; 635 net_event_message.handle = devx; 636 net_event_message.type = MCS_DIALOUT_MSG; 637 call pxss$ring_0_wakeup (wtcb.hproc, wtcb.hevent, net_event_message_arg, 0); 638 /* wakeup the user */ 639 /* user will use dial_status ordercall */ 640 end; 641 end; 642 643 else if int_type = WRU_TIMEOUT /* no response to answerback */ 644 then do; 645 if wtcb.flags.dialed 646 then do; /* it had better be dialed */ 647 wtcb.rflag = "0"b; /* read no longer pending */ 648 unspec (net_event_message) = "0"b; 649 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 650 net_event_message.network_type = MCS_NETWORK_TYPE; 651 net_event_message.handle = devx; 652 net_event_message.type = MCS_READ_MSG; 653 call pxss$ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, 0); 654 /* wakeup the user */ 655 end; 656 end; 657 658 else if int_type = SPACE_AVAILABLE /* we were waiting for space */ 659 then if wtcb.write_first ^= 0 /* we've got more output */ 660 then call send_next_page; 661 else do; 662 unspec (net_event_message) = "0"b; 663 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 664 net_event_message.network_type = MCS_NETWORK_TYPE; 665 net_event_message.handle = devx; 666 net_event_message.type = MCS_UNSPECIFIED_MSG; 667 call pxss$unique_ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 668 end; /* unique because we don't want to pile these up */ 669 670 else if int_type = ACKNOWLEDGE_ECHNEGO_INIT 671 then do; 672 echo_datap = ptr (ttybp, wtcb.echdp); 673 if echo_datap ^= ttybp 674 then do; 675 echo_data.awaiting_start_sync = "0"b; 676 echo_data.synchronized = "1"b; 677 echo_data.sync_ctr = 0; 678 end; 679 end; 680 else if int_type = ACKNOWLEDGE_ECHNEGO_STOP 681 then do; 682 echo_datap = ptr (ttybp, wtcb.echdp); 683 wtcb.negotiating_echo = "0"b; 684 if echo_datap ^= ttybp 685 then do; 686 echo_data.awaiting_stop_sync = "0"b; 687 echo_data.echo_start_pending_sndopt = "0"b; 688 unspec (net_event_message) = "0"b; 689 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 690 net_event_message.network_type = MCS_NETWORK_TYPE; 691 net_event_message.handle = devx; 692 net_event_message.type = MCS_UNSPECIFIED_MSG; 693 call pxss$unique_ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 694 end; 695 end; 696 697 else if int_type = MASKED 698 then do; 699 unspec (net_event_message) = "0"b; 700 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 701 net_event_message.network_type = MCS_NETWORK_TYPE; 702 net_event_message.handle = devx; 703 net_event_message.type = MCS_MASKED_MSG; 704 call pxss$ring_0_wakeup (wtcb.hproc, wtcb.hevent, net_event_message_arg, 0); 705 call kill_line; 706 wtcb.masked = "1"b; 707 end; 708 709 else 710 bad_int: 711 call syserr (CRASH_SYSTEM, "tty_interrupt: unrecognized interrupt type (^d) for devx ^d", int_type, devx); 712 713 return; 714 715 /* internal procedure to send pending output */ 716 717 send_next_page: 718 proc; 719 720 dcl headp ptr; 721 dcl next_head fixed bin; 722 723 if wtcb.send_output 724 then do; 725 headp, blockp = ptr (ttybp, wtcb.write_first); 726 727 do while (^buffer.end_of_page & buffer.next ^= 0); 728 /* find last buffer of current page */ 729 if buffer.mark /* this page contains the mark */ 730 then wtcb.mark_set = "1"b; 731 blockp = ptr (ttybp, buffer.next); 732 end; 733 734 if buffer.mark /* check last buffer too */ 735 then wtcb.mark_set = "1"b; 736 next_head = buffer.next; 737 buffer.next = 0; /* break chain here */ 738 wtcb.end_frame = buffer.end_of_page; 739 740 call channel_manager$write (devx, headp, code); 741 if code = noalloc_code 742 then do; 743 call tty_space_man$needs_space (devx); 744 code = 0; /* don't treat like other error codes */ 745 end; 746 747 748 if headp ^= null /* didn't take it all */ 749 then do; 750 if code = 0 751 then do; 752 blockp = headp; 753 do while (buffer.next ^= 0); 754 if buffer.mark /* we didn't send the marked buffer yet */ 755 then wtcb.mark_set = "0"b; 756 blockp = ptr (ttybp, buffer.next); 757 end; 758 759 if buffer.mark /* have to check last one */ 760 then wtcb.mark_set = "0"b; 761 buffer.next = next_head; /* found the end of the returned chain, reconnect it */ 762 if next_head = 0 /* if we weren't hanging on to one */ 763 then wtcb.write_last = bin (rel (blockp)); 764 /* this is the end */ 765 next_head = bin (rel (headp)); /* this is now head of the chain */ 766 end; 767 768 else do; 769 call tty_space_man$free_chain (devx, OUTPUT, headp); 770 /* all output to be discarded */ 771 wtcb.mark_set = "0"b; /* can't trust anything */ 772 wtcb.error_code = code; /* save this for callers */ 773 unspec (net_event_message) = "0"b; 774 net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 775 net_event_message.network_type = MCS_NETWORK_TYPE; 776 net_event_message.handle = devx; 777 net_event_message.type = MCS_UNSPECIFIED_MSG; 778 /* poke the process to make sure it finds out eventually */ 779 call pxss$unique_ring_0_wakeup (wtcb.uproc, wtcb.event, net_event_message_arg, (0)); 780 end; 781 end; 782 783 wtcb.write_first = next_head; 784 if wtcb.write_first = 0 785 then wtcb.write_last = 0; /* this must be true */ 786 else if code ^= 0 /* in this case we'll throw away all output anyway */ 787 then do; 788 call tty_space_man$free_chain (devx, OUTPUT, ptr (ttybp, wtcb.write_first)); 789 wtcb.write_first, wtcb.write_last = 0; 790 end; 791 wtcb.send_output = "0"b; 792 end; 793 794 return; 795 end /* send_next_page */; 796 797 /* internal procedure to set wtcb to "hung up" state */ 798 799 kill_line: 800 proc; 801 802 dcl sync_flag bit (1); 803 dcl masked_flag bit (1); 804 805 if wtcb.fblock ^= 0 /* if there's a read chain, free it */ 806 then call tty_space_man$free_chain (devx, INPUT, ptr (ttybp, wtcb.fblock)); 807 808 if wtcb.write_first ^= 0 /* likewise for write chain */ 809 then call tty_space_man$free_chain (devx, OUTPUT, ptr (ttybp, wtcb.write_first)); 810 811 /* save those flags that need to be preserved */ 812 813 masked_flag = wtcb.flags.masked; 814 sync_flag = wtcb.flags.sync_line; 815 string (wtcb.flags) = ""b; /* clear them all, then restore saved values */ 816 string (wtcb.more_flags) = ""b; 817 wtcb.flags.masked = masked_flag; 818 wtcb.flags.sync_line = sync_flag; 819 820 wtcb.uproc = ""b; 821 wtcb.white_col, wtcb.fblock, wtcb.lblock = 0; 822 wtcb.fchar, wtcb.actline, wtcb.actcol, wtcb.nramsgs = 0; 823 wtcb.write_first, wtcb.write_last = 0; 824 wtcb.prompt_len = 0; 825 wtcb.error_code = 0; 826 827 if wtcb.echdp ^= ""b 828 then do; 829 call tty_space_man$free_space (size (echo_data), ptr (ttybp, wtcb.echdp)); 830 wtcb.echdp = ""b; 831 end; 832 if wtcb.waketp ^= ""b 833 then do; 834 call tty_space_man$free_space (size (wakeup_table), ptr (ttybp, wtcb.waketp)); 835 wtcb.waketp = ""b; 836 end; 837 838 end /* kill_line */; 839 840 echoable: 841 procedure (test_char) returns (bit (1) aligned); 842 843 /* function that indicates whether a given character can be echoed by anyone other than the application */ 844 845 dcl test_char char (1); 846 dcl char_pos fixed bin (9); 847 848 char_pos = rank (test_char); 849 if char_pos > hbound (echo_data.break, 1) /* it's not in the table at all */ 850 then return ("0"b); 851 852 /* if it is, it is echoable iff its corresponding bit is off */ 853 854 else return (^echo_data.break (char_pos)); 855 end echoable; 856 857 ship_echo_buffer: 858 proc; 859 860 /* Proc called to ship out echo buffer for negotiated echo */ 861 862 dcl loc_echbufp ptr; 863 dcl loc_lastp ptr; 864 865 echbufp -> buffer.tally = echo_tally; 866 loc_echbufp = echbufp; 867 code = 0; 868 869 if wtcb.write_first ^= 0 /* already an output chain */ 870 then do; 871 loc_lastp = ptr (ttybp, wtcb.write_last); 872 wtcb.write_last, /* just append this stuff to it */ 873 loc_lastp -> buffer.next = bin (rel (loc_echbufp)); 874 loc_echbufp = null; 875 end; 876 877 else if ^wtcb.send_output /* shouldn't send it now */ 878 then do; 879 wtcb.write_first, wtcb.write_last = bin (rel (loc_echbufp)); 880 loc_echbufp = null; 881 end; 882 883 else do; 884 wtcb.send_output = "0"b; 885 call channel_manager$write (devx, loc_echbufp, code); 886 end; 887 888 if loc_echbufp = null & code = 0 889 then do; /* Won */ 890 echo_data.chars_echoed = echo_data.chars_echoed + echo_tally; 891 tty_buf.echo_neg_r0_chars = tty_buf.echo_neg_r0_chars + echo_tally; 892 /* METER */ 893 end; 894 else do; 895 code = 1; /* Cause echo stop */ 896 call tty_space_man$free_buffer (devx, OUTPUT, echbufp); 897 end; 898 echbufp = null; 899 if code ^= 0 900 then go to negotiated_echo_ceases; /* Stop the rolling ball. */ 901 902 end ship_echo_buffer; 903 904 /* Subroutine to scan input chain for input wakeup chars */ 905 906 scan_iw_char: 907 proc; 908 909 dcl charx fixed bin; 910 dcl i fixed bin; 911 912 wakeup_tablep = ptr (ttybp, wtcb.waketp); 913 do blockp = ptr (ttybp, rtx_info.chain_head) repeat (ptr (ttybp, buffer.next)) while (rel (blockp)); 914 do charx = 0 to buffer.tally - 1; 915 i = bin (unspec (buffer.chars (charx))); 916 if i <= 127 917 then if wakeup_table.wake_map (i) /* found a wakeup char */ 918 then do; 919 wtcb.allow_wakeup = "1"b; 920 return; 921 end; 922 end; 923 end; 924 925 end; 926 927 928 929 /* Subroutine to check if buffered input exceeds limit for wake_tbl mode */ 930 931 check_iw_limit: 932 proc; 933 934 lctp = tty_buf.lct_ptr; 935 lctep = addr (lct.lcte_array (devx)); 936 lctep = addr (lct.lcte_array (lcte.physical_channel_devx)); 937 if lcte.input_words > min (128, divide (tty_buf.bleft, 4, 17, 0)) 938 then wtcb.allow_wakeup = "1"b; 939 940 end; 941 942 /* Subroutine to write a prompt message */ 943 944 send_prompt: 945 proc; 946 947 dcl bufp ptr; 948 949 950 call tty_space_man$get_buffer (devx, 16, OUTPUT, bufp); 951 if bufp = null 952 then return; 953 954 substr (string (bufp -> buffer.chars), 1, wtcb.prompt_len) = substr (wtcb.prompt, 1, wtcb.prompt_len); 955 bufp -> buffer.tally = wtcb.prompt_len; 956 if wtcb.write_first = 0 /* thread prompt buffer onto write chain */ 957 then wtcb.write_first = bin (rel (bufp)); 958 else ptr (ttybp, wtcb.write_last) -> buffer.next = bin (rel (bufp)); 959 wtcb.write_last = bin (rel (bufp)); 960 961 call send_next_page; /* ship it out */ 962 963 end; 964 965 set_static: 966 entry; 967 968 /* entry called once per bootload to copy error codes into internal static */ 969 970 noalloc_code = error_table_$noalloc; 971 no_write_code = error_table_$invalid_write; 972 return; 973 974 start_negotiated_echo: 975 proc; /* echdp had better be set. */ 976 echo_start_data.ctr = echo_data.sync_ctr; 977 echo_start_data.screenleft = echo_data.horiz_room_left; 978 call channel_manager$control (devx, "start_negotiated_echo", addr (echo_start_data), code); 979 if code = 0 980 then echo_data.echo_start_pending_sndopt = "0"b; 981 else if code = no_write_code 982 then echo_data.echo_start_pending_sndopt = "1"b; 983 tty_buf.echo_neg_sndopt_restarts = tty_buf.echo_neg_sndopt_restarts + 1; 984 /* METER */ 985 end; 986 987 is_parent_mpx: /* Check for match of channel's parent mpx type and input mpx type */ 988 proc (parent_mpx_type) returns (bit (1)); 989 990 dcl parent_mpx_type fixed bin; 991 dcl temp_lctep ptr; 992 993 lctp = tty_buf.lct_ptr; 994 lctep = addr (lct.lcte_array (devx)); 995 if lcte.major_channel_devx ^= 0 then do; 996 temp_lctep = addr (lct.lcte_array (lcte.major_channel_devx)); 997 if temp_lctep->lcte.channel_type = parent_mpx_type then return ("1"b); 998 end; 999 else if lcte.channel_type = parent_mpx_type then return ("1"b); 1000 return ("0"b); 1001 end is_parent_mpx; 1002 1003 1004 /* BEGIN MESSAGE DOCUMENTATION 1005* 1006* 1007* Message: 1008* tty_interrupt: unrecognized interrupt type (N) for devx D 1009* 1010* S: $crash 1011* 1012* T: $run 1013* 1014* M: An unrecognized interrupt type has been reported for the nonmultiplexed 1015* channel whose device index is D. 1016* 1017* A: $inform 1018* 1019* 1020* END MESSAGE DOCUMENTATION */ 1021 1022 end /* tty_interrupt */; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0825.4 tty_interrupt.pl1 >special_ldd>install>MR12.3-1114>tty_interrupt.pl1 137 1 07/21/88 2036.0 wtcb.incl.pl1 >ldd>include>wtcb.incl.pl1 138 2 10/20/82 0938.6 mcs_interrupt_info.incl.pl1 >ldd>include>mcs_interrupt_info.incl.pl1 139 3 01/06/85 1422.1 tty_buf.incl.pl1 >ldd>include>tty_buf.incl.pl1 3-152 4 01/06/85 1422.1 hc_fast_lock.incl.pl1 >ldd>include>hc_fast_lock.incl.pl1 140 5 07/21/88 2036.0 tty_buffer_block.incl.pl1 >ldd>include>tty_buffer_block.incl.pl1 141 6 08/06/87 0913.5 net_event_message.incl.pl1 >ldd>include>net_event_message.incl.pl1 142 7 06/18/81 0900.8 tty_space_man_dcls.incl.pl1 >ldd>include>tty_space_man_dcls.incl.pl1 143 8 05/06/80 0958.2 channel_manager_dcls.incl.pl1 >ldd>include>channel_manager_dcls.incl.pl1 144 9 08/06/87 0913.4 line_types.incl.pl1 >ldd>include>line_types.incl.pl1 145 10 07/10/86 2015.0 mcs_echo_neg_sys.incl.pl1 >ldd>include>mcs_echo_neg_sys.incl.pl1 146 11 11/08/82 1005.8 lct.incl.pl1 >ldd>include>lct.incl.pl1 147 12 04/27/79 1615.0 set_wakeup_table_info.incl.pl1 >ldd>include>set_wakeup_table_info.incl.pl1 148 13 06/29/81 2258.5 response_transitions.incl.pl1 >ldd>include>response_transitions.incl.pl1 149 14 10/26/89 2011.9 multiplexer_types.incl.pl1 >ldd>include>multiplexer_types.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. ACCEPT_INPUT 000023 constant fixed bin(17,0) initial dcl 2-15 ref 256 ACKNOWLEDGE_ECHNEGO_INIT 000022 constant fixed bin(17,0) initial dcl 2-22 ref 670 ACKNOWLEDGE_ECHNEGO_STOP constant fixed bin(17,0) initial dcl 2-23 ref 680 CRASH constant fixed bin(17,0) initial dcl 2-12 ref 210 CRASH_SYSTEM 000042 constant fixed bin(17,0) initial dcl 128 set ref 709* DIALUP constant fixed bin(17,0) initial dcl 2-10 ref 162 DIAL_STATUS constant fixed bin(17,0) initial dcl 2-19 ref 626 HANGUP constant fixed bin(17,0) initial dcl 2-11 ref 197 INPUT 000034 constant bit(1) initial packed unaligned dcl 7-20 set ref 471* 554* 805* INPUT_AVAILABLE constant fixed bin(17,0) initial dcl 2-14 ref 240 INPUT_REJECTED constant fixed bin(17,0) initial dcl 2-16 ref 523 LINE_STATUS constant fixed bin(17,0) initial dcl 2-18 ref 607 MASKED constant fixed bin(17,0) initial dcl 2-26 ref 697 MCS_DIALOUT_MSG constant fixed bin(17,0) initial dcl 6-54 ref 636 MCS_DIALUP_MSG constant fixed bin(17,0) initial dcl 6-50 ref 192 MCS_HANGUP_MSG constant fixed bin(17,0) initial dcl 6-52 ref 203 MCS_LINE_STATUS_MSG constant fixed bin(17,0) initial dcl 6-62 ref 618 MCS_MASKED_MSG constant fixed bin(17,0) initial dcl 6-64 ref 703 MCS_NETWORK_TYPE constant fixed bin(4,0) initial unsigned dcl 6-34 ref 190 201 232 247 512 529 570 616 634 650 664 690 701 775 MCS_QUIT_MSG constant fixed bin(17,0) initial dcl 6-56 ref 587 MCS_READ_MSG constant fixed bin(17,0) initial dcl 6-58 ref 249 514 531 578 652 MCS_UNSPECIFIED_MSG constant fixed bin(17,0) initial dcl 6-48 ref 666 692 777 MCS_WRITE_MSG constant fixed bin(17,0) initial dcl 6-60 ref 234 575 NET_EVENT_MESSAGE_VERSION_1 constant bit(2) initial packed unaligned dcl 6-20 ref 189 200 231 246 511 528 569 615 633 649 663 689 700 774 OUTPUT 000035 constant bit(1) initial packed unaligned dcl 7-21 set ref 373* 560* 769* 788* 808* 896* 950* QUIT constant fixed bin(17,0) initial dcl 2-17 ref 543 SEND_OUTPUT constant fixed bin(17,0) initial dcl 2-13 ref 213 SPACE_AVAILABLE constant fixed bin(17,0) initial dcl 2-21 ref 658 TTY_WAKEUP 000023 constant fixed bin(17,0) initial dcl 13-7 set ref 250* 515* 534* 579* UNCP_MPX constant fixed bin(17,0) initial dcl 14-16 set ref 160* WRU_TIMEOUT constant fixed bin(17,0) initial dcl 2-20 ref 643 a_info parameter bit(72) dcl 66 ref 13 156 a_type parameter fixed bin(17,0) dcl 65 ref 13 155 a_wtcbp parameter pointer dcl 64 ref 13 154 actcol 15(18) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 1-22 set ref 495* 565* 822* actline 15(09) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 1-22 set ref 261* 498* 498 596* 599* 599 822* addr builtin function dcl 107 ref 158 176 188 189 190 191 192 199 200 201 202 203 230 231 232 233 234 245 246 247 248 249 366 367 465 466 510 511 512 513 514 527 528 529 530 531 568 569 570 571 575 578 587 614 615 616 617 618 632 633 634 635 636 648 649 650 651 652 662 663 664 665 666 688 689 690 691 692 699 700 701 702 703 773 774 775 776 777 935 936 978 978 994 996 allow_wakeup 13(23) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 432 489 505 919* 937* awaiting_start_sync 7(07) based bit(1) level 2 packed packed unaligned dcl 10-19 set ref 675* awaiting_stop_sync 7(08) based bit(1) level 2 packed packed unaligned dcl 10-19 set ref 686* baud_rate 0(18) 000146 automatic fixed bin(18,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 2-30 in procedure "tty_interrupt" set ref 173 baud_rate 12 based fixed bin(18,0) level 2 in structure "wtcb" packed packed unsigned unaligned dcl 1-22 in procedure "tty_interrupt" set ref 173* bin builtin function dcl 107 ref 266 273 449 631 762 765 872 879 915 956 958 959 bleft 3 based fixed bin(18,0) level 2 dcl 3-35 ref 368 937 blockp 000154 automatic pointer dcl 5-19 set ref 293* 293* 297 297 309 309 309 330 332* 389 411* 411* 414* 415 437* 438 725* 727 727 729 731* 731 734 736 737 738 752* 753 754 756* 756 759 761 762 913* 913* 914 915* 923 break based bit(1) array level 2 packed packed unaligned dcl 10-19 ref 849 854 break_char 1(18) 000150 automatic bit(1) level 3 packed packed unaligned dcl 2-38 set ref 297 322* 390* 492 502 breakall 13(19) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 498 buffer based structure level 1 dcl 5-28 buffer_pad 20(09) based fixed bin(9,0) level 2 in structure "wtcb" packed packed unsigned unaligned dcl 1-22 in procedure "tty_interrupt" set ref 175* 288 355 384 buffer_pad 0(09) 000146 automatic fixed bin(9,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 2-30 in procedure "tty_interrupt" set ref 175 bufp 000266 automatic pointer dcl 947 set ref 950* 951 954 955 956 958 959 chain_head 000150 automatic bit(18) level 3 packed packed unaligned dcl 2-38 set ref 266 293 411 449 913 chain_tail 0(18) 000150 automatic bit(18) level 3 packed packed unaligned dcl 2-38 set ref 273 channel_manager$control 000050 constant entry external dcl 8-13 ref 978 channel_manager$write 000046 constant entry external dcl 8-10 ref 740 885 channel_type 2 based fixed bin(8,0) level 2 packed packed unaligned dcl 11-20 ref 997 999 char_pos 000224 automatic fixed bin(9,0) dcl 846 set ref 848* 849 854 chars 1 based char(1) array level 2 packed packed unaligned dcl 5-28 set ref 309* 332 351* 379* 465 466 915 954 chars_echoed 11 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 10-19 set ref 317* 317 343* 343 352* 352 890* 890 charx 000246 automatic fixed bin(17,0) dcl 909 in procedure "scan_iw_char" set ref 914* 915* charx 000103 automatic fixed bin(17,0) dcl 74 in procedure "tty_interrupt" set ref 330* 332* clock builtin function dcl 107 ref 277 401 code 000112 automatic fixed bin(35,0) dcl 80 set ref 740* 741 744* 750 772 786 867* 885* 888 895* 899 978* 979 981 converted 0(19) based bit(1) level 3 packed packed unaligned dcl 5-28 ref 450 count_lines 13(16) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 498 596 ctr 000140 automatic fixed bin(35,0) level 2 dcl 96 set ref 976* devx 20(18) based fixed bin(17,0) level 2 in structure "wtcb" packed packed unaligned dcl 1-22 in procedure "tty_interrupt" ref 157 devx 000102 automatic fixed bin(17,0) dcl 73 in procedure "tty_interrupt" set ref 157* 191 202 233 248 366 373* 471* 513 530 554* 560* 571 617 635 651 665 691 702 709* 740* 743* 769* 776 788* 805* 808* 885* 896* 935 950* 978* 994 dial_status_code 13(27) based fixed bin(8,0) level 2 packed packed unaligned dcl 1-22 set ref 168* 631* dial_status_valid 13(09) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 167* 630* dialed 13(01) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 185* 645 dialing 13(08) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 165 628 dialup_info 000146 automatic structure level 1 dcl 2-30 set ref 164* divide builtin function dcl 107 ref 368 937 echbufp 000104 automatic pointer dcl 75 set ref 281* 360 373* 374 379 384 398 865 866 896* 898* echdp 21 based bit(18) level 2 packed packed unaligned dcl 1-22 set ref 221 280 404 406 549 672 682 827 829 829 830* echnego_from_mux_flag 000134 automatic bit(1) packed unaligned dcl 92 set ref 282* 323* 341 echnego_scan_start 000135 automatic fixed bin(17,0) dcl 93 set ref 295* 309* 309* 312 312* 316 317 318 320 330 echo_data based structure level 1 dcl 10-19 set ref 829 829 echo_datap 000160 automatic pointer dcl 10-15 set ref 221* 222 280* 297 312 312 316 316 317 317 324 339 343 343 352 352 387 387 394 406* 407 409 416 416 549* 550 550 672* 673 675 676 677 682* 684 686 687 829 829 849 854 890 890 976 977 979 981 echo_neg_interrupts 72 based fixed bin(35,0) level 2 dcl 3-35 set ref 278* 278 echo_neg_mux_chars 74 based fixed bin(35,0) level 2 dcl 3-35 set ref 320* 320 344* 344 echo_neg_mux_nonecho 76 based fixed bin(35,0) level 2 dcl 3-35 set ref 420* 420 echo_neg_r0_chars 73 based fixed bin(35,0) level 2 dcl 3-35 set ref 353* 353 891* 891 echo_neg_sndopt_restarts 75 based fixed bin(35,0) level 2 dcl 3-35 set ref 983* 983 echo_neg_time 70 based fixed bin(71,0) level 2 dcl 3-35 set ref 401* 401 echo_start_data 000140 automatic structure level 1 unaligned dcl 96 set ref 978 978 echo_start_pending_sndopt 7(06) based bit(1) level 2 packed packed unaligned dcl 10-19 set ref 222 394* 550* 687* 979* 981* echo_tally 000107 automatic fixed bin(9,0) dcl 77 set ref 377* 379 381* 381 384 865 890 891 end_frame 13(05) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 601* 738* end_of_page 0(18) based bit(1) level 3 packed packed unaligned dcl 5-28 ref 727 738 error_code 24 based fixed bin(35,0) level 2 dcl 1-22 set ref 772* 825* error_table_$invalid_write 000026 external static fixed bin(35,0) dcl 123 ref 971 error_table_$noalloc 000024 external static fixed bin(35,0) dcl 122 ref 970 event 2 based fixed bin(71,0) level 2 dcl 1-22 set ref 235* 251* 516* 535* 539* 580* 588* 619* 653* 667* 693* 779* fblock 14 based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 442 444* 525 552 554 554 555* 805 805 805 821* fchar 15 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 1-22 set ref 445* 822* filled 000125 automatic bit(1) packed unaligned dcl 88 set ref 456* 457 475* flags 1(18) 000150 automatic structure level 2 in structure "rtx_info" packed packed unaligned dcl 2-38 in procedure "tty_interrupt" flags 0(18) based structure level 2 in structure "buffer" packed packed unaligned dcl 5-28 in procedure "tty_interrupt" flags 13 based structure level 2 in structure "wtcb" packed packed unaligned dcl 1-22 in procedure "tty_interrupt" set ref 815* formfeed_present 1(21) 000150 automatic bit(1) level 3 packed packed unaligned dcl 2-38 set ref 259 handle 1 based fixed bin(35,0) level 2 dcl 6-22 set ref 191* 202* 233* 248* 513* 530* 571* 617* 635* 651* 665* 691* 702* 776* hbound builtin function dcl 107 ref 849 hc_fast_lock based structure level 1 dcl 4-10 headp 000202 automatic pointer dcl 720 set ref 725* 740* 748 752 765 769* hevent based fixed bin(71,0) level 2 dcl 1-22 set ref 193* 204* 637* 704* hndlquit 13(15) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 545 horiz_room_left 11(09) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 10-19 set ref 312 312 316* 316 324 339 387* 387 977 hproc 10 based bit(36) level 2 dcl 1-22 set ref 186 193* 204* 637* 704* i 000100 automatic fixed bin(17,0) dcl 71 in procedure "tty_interrupt" set ref 181* 181* 183 i 000247 automatic fixed bin(17,0) dcl 910 in procedure "scan_iw_char" set ref 915* 916 916 in 2 based structure level 2 in structure "saved_meters" dcl 11-68 in procedure "tty_interrupt" in 10 based structure level 3 in structure "lcte" dcl 11-20 in procedure "tty_interrupt" in 30 based structure array level 4 in structure "lct" dcl 11-11 in procedure "tty_interrupt" inchain 000111 automatic fixed bin(18,0) dcl 79 set ref 266* 267 437 444 input_available 13(10) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 242* input_chain 000150 automatic structure level 2 packed packed unaligned dcl 2-38 input_words 5 based fixed bin(17,0) level 3 packed packed unaligned dcl 11-20 ref 937 int_type 000101 automatic fixed bin(17,0) dcl 72 set ref 155* 162 197 210 213 240 256 523 543 607 626 643 658 670 680 697 709* interrupt_info 000144 automatic bit(72) dcl 2-28 set ref 156* 164 258 612 631 last_offset 000114 automatic fixed bin(17,0) dcl 82 set ref 273* 481* 486 486 lblock 14(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 448 486* 555* 821* lct based structure level 1 dcl 11-11 lct_ptr 6 based pointer level 2 dcl 3-35 ref 364 934 993 lcte based structure level 1 dcl 11-20 lcte_array 20 based structure array level 2 dcl 11-11 set ref 366 367 935 936 994 996 lctep 000164 automatic pointer dcl 11-8 set ref 366* 367* 367 368 935* 936* 936 937 994* 995 996 999 lctp 000162 automatic pointer dcl 11-7 set ref 364* 366 367 934* 935 936 993* 994 996 line_delimiter 23 based char(1) level 2 in structure "wtcb" packed packed unaligned dcl 1-22 in procedure "tty_interrupt" set ref 176* line_delimiter based char(1) array packed unaligned dcl 132 in procedure "tty_interrupt" ref 176 line_delimiter_octal 000024 constant bit(9) initial array packed unaligned dcl 130 set ref 176 line_status 4 based bit(72) level 2 dcl 1-22 set ref 612* line_status_disabled 23(09) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 609 line_status_present 13(17) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 613* line_type 000146 automatic fixed bin(9,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 2-30 in procedure "tty_interrupt" set ref 172 line_type 12(18) based fixed bin(18,0) level 2 in structure "wtcb" packed packed unsigned unaligned dcl 1-22 in procedure "tty_interrupt" set ref 172* 176 181 loc_echbufp 000234 automatic pointer dcl 862 set ref 866* 872 874* 879 880* 885* 888 loc_lastp 000236 automatic pointer dcl 863 set ref 871* 872 major_channel_devx 3 based fixed bin(17,0) level 3 packed packed unaligned dcl 11-20 ref 995 996 major_channel_info 3 based structure level 2 dcl 11-20 mark 0(21) based bit(1) level 3 packed packed unaligned dcl 5-28 set ref 438* 462 729 734 754 759 mark_set 13(25) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 435 439* 593* 729* 734* 754* 759* 771* masked 13(26) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 706* 813 817* masked_flag 000215 automatic bit(1) packed unaligned dcl 803 set ref 813* 817 max builtin function dcl 107 ref 309 max_buf_size 20 based fixed bin(9,0) level 2 in structure "wtcb" packed packed unsigned unaligned dcl 1-22 in procedure "tty_interrupt" set ref 174* max_buf_size 1 000146 automatic fixed bin(9,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 2-30 in procedure "tty_interrupt" set ref 174 max_buffer_tally 000012 constant fixed bin(17,0) initial array dcl 5-43 ref 288 355 384 454 max_tally 000124 automatic fixed bin(17,0) dcl 87 set ref 454* 462 meter_response_time 000012 constant entry external dcl 113 ref 250 515 534 579 meters 26 based structure array level 3 in structure "lct" dcl 11-11 in procedure "tty_interrupt" meters 6 based structure level 2 in structure "lcte" dcl 11-20 in procedure "tty_interrupt" min builtin function dcl 107 ref 937 more_flags 23(09) based structure level 2 packed packed unaligned dcl 1-22 set ref 816* mux_will_echnego 7(05) based bit(1) level 2 packed packed unaligned dcl 10-19 ref 297 n_sync_line_types constant fixed bin(17,0) initial dcl 9-50 ref 181 183 negotiating_echo 13(21) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 218 275 397* 421 547 550* 683* net_event_message based structure level 1 dcl 6-22 set ref 188* 199* 230* 245* 510* 527* 568* 614* 632* 648* 662* 688* 699* 773* net_event_message_arg 000156 automatic fixed bin(71,0) dcl 6-19 set ref 188 189 190 191 192 193* 199 200 201 202 203 204* 230 231 232 233 234 235* 245 246 247 248 249 251* 510 511 512 513 514 516* 527 528 529 530 531 535* 539* 568 569 570 571 575 578 580* 587 588* 614 615 616 617 618 619* 632 633 634 635 636 637* 648 649 650 651 652 653* 662 663 664 665 666 667* 688 689 690 691 692 693* 699 700 701 702 703 704* 773 774 775 776 777 779* network_type 0(24) based fixed bin(4,0) level 2 packed packed unsigned unaligned dcl 6-22 set ref 190* 201* 232* 247* 512* 529* 570* 616* 634* 650* 664* 690* 701* 775* new_chars based char packed unaligned dcl 102 set ref 467* 467 new_first_tally 000122 automatic fixed bin(17,0) dcl 85 set ref 460* 462 467 467 468 new_headp 000116 automatic pointer dcl 83 set ref 459* 460 462 465 469 471* next based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 5-28 set ref 297 389 415 469 480* 727 731 736 737* 753 756 761* 872* 923 958* next_head 000204 automatic fixed bin(17,0) dcl 721 set ref 736* 761 762 765* 783 next_offset 000113 automatic fixed bin(17,0) dcl 81 set ref 449* 457 459 469* 480 481 no_write_code 000010 internal static fixed bin(35,0) dcl 134 set ref 971* 981 noalloc_code 000011 internal static fixed bin(35,0) dcl 135 set ref 741 970* nquits 33 based fixed bin(35,0) level 2 dcl 3-35 set ref 603* 603 nramsgs 15(27) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 1-22 set ref 822* null builtin function dcl 107 ref 281 283 288 348 355 360 374 398 748 874 880 888 898 951 old_last_tally 000123 automatic fixed bin(17,0) dcl 86 set ref 287* 288 351 354 354* 355 452* 462 466 468* 468 478 old_tailp 000120 automatic pointer dcl 84 set ref 283* 286* 287 288 288* 348 351 354 355 355* 448* 450 452 454 466 478 480 output_bpart constant fixed bin(18,0) initial dcl 3-19 ref 368 output_in_fnp 1(19) 000150 automatic bit(1) level 3 packed packed unaligned dcl 2-38 set ref 495 output_in_ring_0 1(20) 000150 automatic bit(1) level 3 packed packed unaligned dcl 2-38 set ref 261 492 output_words 5(18) based fixed bin(17,0) level 3 packed packed unaligned dcl 11-20 ref 368 parent_mpx_type parameter fixed bin(17,0) dcl 990 ref 987 997 999 physical_channel_devx 2(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 11-20 ref 367 936 prompt 22(09) based char(3) level 2 packed packed unaligned dcl 1-22 ref 954 prompt_len 22 based fixed bin(8,0) level 2 packed packed unaligned dcl 1-22 set ref 505 824* 954 954 955 ptr builtin function dcl 107 ref 221 280 286 293 389 406 411 415 437 448 459 549 554 554 560 560 672 682 725 731 756 788 788 805 805 808 808 829 829 834 834 871 912 913 923 958 pxss$ips_wakeup_int 000020 constant entry external dcl 116 ref 590 pxss$ring_0_wakeup 000014 constant entry external dcl 114 ref 193 204 235 251 516 535 580 588 619 637 653 704 pxss$unique_ring_0_wakeup 000016 constant entry external dcl 115 ref 539 667 693 779 qenable 13(03) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 585 qflag 13(04) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 592* r0_did_echo 000136 automatic bit(1) packed unaligned dcl 94 set ref 271* 350* 363* 417 rank builtin function dcl 107 ref 848 receive_mode_device 13(24) based bit(1) level 3 in structure "wtcb" packed packed unaligned dcl 1-22 in procedure "tty_interrupt" set ref 177* 428 receive_mode_device 1(09) 000146 automatic bit(1) level 2 in structure "dialup_info" packed packed unaligned dcl 2-30 in procedure "tty_interrupt" set ref 177 rel builtin function dcl 107 ref 293 411 762 765 872 879 913 956 958 959 rflag 13(13) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 243 252* 502 518* 532 536* 573 582* 647* rtx_info 000150 automatic structure level 1 dcl 2-38 set ref 258* screenleft 1 000140 automatic fixed bin(35,0) level 2 dcl 96 set ref 977* scroll 13(20) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 596 send_output 13(02) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 215* 723 791* 877 884* send_turn 23(10) based bit(1) level 2 packed packed unaligned dcl 1-22 set ref 179* size builtin function dcl 107 ref 829 829 834 834 size_code 0(24) based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 5-28 ref 288 355 384 454 source_ptr 000126 automatic pointer dcl 89 set ref 465* 467 start_time 000132 automatic fixed bin(71,0) dcl 91 set ref 277* 401 string builtin function dcl 107 set ref 815* 816* 954 substr builtin function dcl 107 set ref 631 954* 954 sync_ctr 10 based fixed bin(35,0) level 2 dcl 10-19 set ref 409* 416* 416 677* 976 sync_ctr_tally 000110 automatic fixed bin(17,0) dcl 78 set ref 270* 318* 318 346* 346 409 414* 414 416 sync_flag 000214 automatic bit(1) packed unaligned dcl 802 set ref 814* 818 sync_line 13(18) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 183* 814 818* sync_line_type 000000 constant fixed bin(17,0) initial array dcl 9-52 ref 181 synchronized 7(04) based bit(1) level 2 packed packed unaligned dcl 10-19 set ref 407 550* 676* sys_info$quit_mask 000030 external static bit(35) dcl 124 set ref 590* syserr 000022 constant entry external dcl 117 ref 709 tally 0(27) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 5-28 set ref 287 297 309 309 330 354* 414 452 460 478* 865* 914 955* target_ptr 000130 automatic pointer dcl 90 set ref 466* 467 temp_lctep 000304 automatic pointer dcl 991 set ref 996* 997 test_char parameter char(1) packed unaligned dcl 845 ref 840 848 this_char 000106 automatic char(1) packed unaligned dcl 76 set ref 332* 333* 351 379 tty_buf based structure level 1 dcl 3-35 tty_buf$ 000032 external static fixed bin(17,0) dcl 3-19 set ref 158 tty_space_man$free_buffer 000040 constant entry external dcl 7-14 ref 471 896 tty_space_man$free_chain 000042 constant entry external dcl 7-16 ref 554 560 769 788 805 808 tty_space_man$free_space 000034 constant entry external dcl 7-12 ref 829 834 tty_space_man$get_buffer 000036 constant entry external dcl 7-13 ref 373 950 tty_space_man$needs_space 000044 constant entry external dcl 7-18 ref 743 ttybp 000152 automatic pointer dcl 3-19 set ref 158* 221 278 278 280 286 293 320 320 344 344 353 353 364 368 389 401 401 406 411 415 420 420 437 448 459 549 554 554 560 560 603 603 672 673 682 684 725 731 756 788 788 805 805 808 808 829 829 834 834 871 891 891 912 913 923 934 937 958 983 983 993 type 0(28) based fixed bin(8,0) level 2 packed packed unsigned unaligned dcl 6-22 set ref 192* 203* 234* 249* 514* 531* 575* 578* 587* 618* 636* 652* 666* 692* 703* 777* uncp_flag 000137 automatic bit(1) packed unaligned dcl 95 set ref 160* 179 428 unspec builtin function dcl 107 set ref 164* 188* 199* 230* 245* 258* 510* 527* 568* 614* 632* 648* 662* 688* 699* 773* 915 uproc 11 based bit(36) level 2 dcl 1-22 set ref 186* 235* 250* 251* 515* 516* 534* 535* 539* 579* 580* 588* 590* 609 619* 653* 667* 693* 779* 820* version based bit(2) level 2 packed packed unaligned dcl 6-22 set ref 189* 200* 231* 246* 511* 528* 569* 615* 633* 649* 663* 689* 700* 774* wake_map based bit(1) array level 2 packed packed unaligned dcl 12-16 ref 916 wake_tbl 13(22) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 428* 432 489 505 waketp 21(18) based bit(18) level 2 packed packed unaligned dcl 1-22 set ref 832 834 834 835* 912 wakeup_table based structure level 1 dcl 12-16 ref 834 834 wakeup_tablep 000166 automatic pointer dcl 12-14 set ref 834 834 912* 916 wflag 13(12) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 227 236* 573 575 582* white_col 17(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 495* 564* 821* word_counts 5 based structure level 2 dcl 11-20 write_cnt 17 based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 561* write_first 16 based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 216 227 261 417 558 560 560 561* 658 725 783* 784 788 788 789* 808 808 808 823* 869 879* 956 956* write_last 16(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 1-22 set ref 283 286 561* 762* 784* 789* 823* 871 872* 879* 958 959* wru 13(14) based bit(1) level 3 packed packed unaligned dcl 1-22 set ref 502 wtcb based structure level 1 dcl 1-22 wtcbp 000142 automatic pointer dcl 1-20 set ref 154* 157 165 167 168 172 173 174 175 176 176 177 179 181 183 185 186 186 193 193 204 204 215 216 218 221 227 227 235 235 236 242 243 250 251 251 252 261 261 275 280 283 286 288 355 384 397 404 406 417 421 428 428 432 432 435 439 442 444 445 448 486 489 489 495 495 498 498 498 498 502 502 505 505 505 515 516 516 518 525 532 534 535 535 536 539 539 545 547 549 550 552 554 554 555 555 558 560 560 561 561 561 564 565 573 573 575 579 580 580 582 582 585 588 588 590 592 593 596 596 596 599 599 601 609 609 612 613 619 619 628 630 631 637 637 645 647 653 653 658 667 667 672 682 683 693 693 704 704 706 723 725 729 734 738 754 759 762 771 772 779 779 783 784 784 788 788 789 789 791 805 805 805 808 808 808 813 814 815 816 817 818 820 821 821 821 822 822 822 822 823 823 824 825 827 829 829 830 832 834 834 835 869 871 872 877 879 879 884 912 919 937 954 954 954 955 956 956 958 959 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AWARD_ELIGIBILITY internal static fixed bin(17,0) initial dcl 13-7 BLOCK_PROCESS internal static fixed bin(17,0) initial dcl 13-7 CALL_RING_0_TTY internal static fixed bin(17,0) initial dcl 13-7 DSA_ATTENTION_MSG internal static fixed bin(8,0) initial unsigned dcl 6-83 DSA_DATA_ATTENTION_MSG internal static fixed bin(8,0) initial unsigned dcl 6-84 DSA_DATA_INPUT_MSG internal static fixed bin(8,0) initial unsigned dcl 6-100 DSA_DATA_OUTPUT_MSG internal static fixed bin(8,0) initial unsigned dcl 6-101 DSA_DEMAND_RELEASE_SRU_MSG internal static fixed bin(8,0) initial unsigned dcl 6-85 DSA_DEMAND_TURN_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 6-87 DSA_DEMAND_TURN_MSG internal static fixed bin(8,0) initial unsigned dcl 6-86 DSA_ESTABLISHMENT_MSG internal static fixed bin(8,0) initial unsigned dcl 6-97 DSA_MSG_TYPE_TO_PNAME internal static char(20) initial array packed unaligned dcl 6-103 DSA_NETWORK_TYPE internal static fixed bin(4,0) initial unsigned dcl 6-35 DSA_PURGE_MSG internal static fixed bin(8,0) initial unsigned dcl 6-88 DSA_RECOVER_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 6-90 DSA_RECOVER_MSG internal static fixed bin(8,0) initial unsigned dcl 6-89 DSA_RELEASE_SRU_MSG internal static fixed bin(8,0) initial unsigned dcl 6-91 DSA_RESUME_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 6-93 DSA_RESUME_MSG internal static fixed bin(8,0) initial unsigned dcl 6-92 DSA_SUSPEND_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 6-95 DSA_SUSPEND_MSG internal static fixed bin(8,0) initial unsigned dcl 6-94 DSA_TERMINATED_MSG internal static fixed bin(8,0) initial unsigned dcl 6-98 DSA_TERM_ABNORMAL_MSG internal static fixed bin(8,0) initial unsigned dcl 6-96 DSA_UNSPECIFIED_MSG internal static fixed bin(8,0) initial unsigned dcl 6-82 DSA_USER_UNASSIGN_MSG internal static fixed bin(8,0) initial unsigned dcl 6-99 FNP_DUMP_PATCH_EVENT internal static fixed bin(17,0) initial dcl 3-31 FNP_METER_EVENT internal static fixed bin(17,0) initial dcl 3-32 HASP_MPX internal static fixed bin(17,0) initial dcl 14-16 IBM3270_MPX internal static fixed bin(17,0) initial dcl 14-16 LAP_MPX internal static fixed bin(17,0) initial dcl 14-16 LINE_1050 internal static fixed bin(17,0) initial dcl 9-22 LINE_2741 internal static fixed bin(17,0) initial dcl 9-22 LINE_ARDS internal static fixed bin(17,0) initial dcl 9-22 LINE_ASCII internal static fixed bin(17,0) initial dcl 9-22 LINE_ASYNC1 internal static fixed bin(17,0) initial dcl 9-22 LINE_ASYNC2 internal static fixed bin(17,0) initial dcl 9-22 LINE_ASYNC3 internal static fixed bin(17,0) initial dcl 9-22 LINE_BSC internal static fixed bin(17,0) initial dcl 9-22 LINE_COLTS internal static fixed bin(17,0) initial dcl 9-22 LINE_DSA internal static fixed bin(17,0) initial dcl 9-22 LINE_ETX internal static fixed bin(17,0) initial dcl 9-22 LINE_G115 internal static fixed bin(17,0) initial dcl 9-22 LINE_HASP_OPR internal static fixed bin(17,0) initial dcl 9-22 LINE_HDLC internal static fixed bin(17,0) initial dcl 9-22 LINE_MC internal static fixed bin(17,0) initial dcl 9-22 LINE_POLLED_VIP internal static fixed bin(17,0) initial dcl 9-22 LINE_SYNC1 internal static fixed bin(17,0) initial dcl 9-22 LINE_SYNC2 internal static fixed bin(17,0) initial dcl 9-22 LINE_SYNC3 internal static fixed bin(17,0) initial dcl 9-22 LINE_SYNCH internal static fixed bin(17,0) initial dcl 9-22 LINE_TELNET internal static fixed bin(17,0) initial dcl 9-22 LINE_UNKNOWN internal static fixed bin(17,0) initial dcl 9-22 LINE_VIP internal static fixed bin(17,0) initial dcl 9-22 LINE_X25LAP internal static fixed bin(17,0) initial dcl 9-22 MAX_DSA_EVENT_MSG_TYPE internal static fixed bin(17,0) initial dcl 6-80 MAX_MCS_EVENT_MSG_TYPE internal static fixed bin(17,0) initial dcl 6-46 MAX_TRANSITION internal static fixed bin(17,0) initial dcl 13-7 MCS_MPX internal static fixed bin(17,0) initial dcl 14-16 MCS_MSG_TYPE_TO_PNAME internal static char(20) initial array packed unaligned dcl 6-67 MOWSE_NETWORK_TYPE internal static fixed bin(4,0) initial unsigned dcl 6-36 NETWORK_TYPE_VALUES internal static varying char(8) initial array dcl 6-38 NON_TTY_WAKEUP internal static fixed bin(17,0) initial dcl 13-7 PROTOCOL_MPX internal static fixed bin(17,0) initial dcl 14-16 RETURN_RING_0_TTY internal static fixed bin(17,0) initial dcl 13-7 STY_MPX internal static fixed bin(17,0) initial dcl 14-16 SYSTEM1_MPX internal static fixed bin(17,0) initial dcl 14-16 SYSTEM2_MPX internal static fixed bin(17,0) initial dcl 14-16 TIMER internal static fixed bin(17,0) initial dcl 2-24 TTY_AREA_LOCK_EVENT internal static bit(36) initial dcl 3-33 TTY_MPX internal static fixed bin(17,0) initial dcl 14-16 USER1_MPX internal static fixed bin(17,0) initial dcl 14-16 USER2_MPX internal static fixed bin(17,0) initial dcl 14-16 USER3_MPX internal static fixed bin(17,0) initial dcl 14-16 USER4_MPX internal static fixed bin(17,0) initial dcl 14-16 USER5_MPX internal static fixed bin(17,0) initial dcl 14-16 USER_INTERRUPT internal static fixed bin(17,0) initial dcl 2-25 VIP7760_MPX internal static fixed bin(17,0) initial dcl 14-16 WIRED_ECHO_BREAK_SIZE internal static fixed bin(17,0) initial dcl 10-16 WORDS_IN_ECHO_BREAK_TABLE internal static fixed bin(17,0) initial dcl 10-17 X25_MPX internal static fixed bin(17,0) initial dcl 14-16 abs_buf_limit internal static fixed bin(18,0) initial dcl 3-19 bsizec internal static fixed bin(17,0) initial dcl 3-28 buf_per_second internal static fixed bin(17,0) initial dcl 3-29 channel_manager$check_modes 000000 constant entry external dcl 8-19 channel_manager$get_modes 000000 constant entry external dcl 8-22 channel_manager$interrupt 000000 constant entry external dcl 8-25 channel_manager$interrupt_later 000000 constant entry external dcl 8-28 channel_manager$queued_interrupt 000000 constant entry external dcl 8-31 channel_manager$read 000000 constant entry external dcl 8-7 channel_manager$set_modes 000000 constant entry external dcl 8-16 free_block based structure level 1 dcl 5-23 free_blockp automatic pointer dcl 5-20 input_bpart internal static fixed bin(18,0) initial dcl 3-19 lcnt based structure level 1 dcl 11-65 lcntp automatic pointer dcl 11-63 lct_size automatic fixed bin(17,0) dcl 11-9 line_types internal static char(16) initial array packed unaligned dcl 9-54 lock_ptr automatic pointer dcl 4-9 max_line_type internal static fixed bin(17,0) initial dcl 9-48 mpx_special_lock internal static bit(1) initial array packed unaligned dcl 14-40 mpx_types internal static char(32) initial array packed unaligned dcl 14-35 qblock_size internal static fixed bin(17,0) initial dcl 3-27 saved_meters based structure level 1 dcl 11-68 swt_info based structure level 1 dcl 12-9 swt_info_version_1 internal static fixed bin(17,0) initial dcl 12-7 swt_infop automatic pointer dcl 12-6 timer_info automatic structure level 1 dcl 2-50 tty_ev internal static fixed bin(17,0) initial dcl 3-19 tty_space_man$get_chain 000000 constant entry external dcl 7-15 tty_space_man$get_perm_space 000000 constant entry external dcl 7-11 tty_space_man$get_space 000000 constant entry external dcl 7-10 tty_space_man$switch_chain 000000 constant entry external dcl 7-17 NAMES DECLARED BY EXPLICIT CONTEXT. bad_int 002713 constant label dcl 709 check_iw_limit 003711 constant entry internal dcl 931 ref 489 echoable 003453 constant entry internal dcl 840 ref 309 333 interrupt 000110 constant entry external dcl 151 is_parent_mpx 004120 constant entry internal dcl 987 ref 160 kill_line 003256 constant entry internal dcl 799 ref 207 210 705 negotiated_echo_ceases 001234 constant label dcl 394 ref 324 333 339 368 374 899 negotiated_echo_continues 001242 constant label dcl 398 ref 391 scan_iw_char 003625 constant entry internal dcl 906 ref 432 send_next_page 002756 constant entry internal dcl 717 ref 216 658 961 send_prompt 003746 constant entry internal dcl 944 ref 505 set_static 002743 constant entry external dcl 965 ship_echo_buffer 003476 constant entry internal dcl 857 ref 384 398 start_negotiated_echo 004031 constant entry internal dcl 974 ref 222 421 tty_interrupt 000101 constant entry external dcl 13 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4452 4524 4224 4462 Length 5244 4224 52 503 225 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tty_interrupt 331 external procedure is an external procedure. send_next_page internal procedure shares stack frame of external procedure tty_interrupt. kill_line internal procedure shares stack frame of external procedure tty_interrupt. echoable internal procedure shares stack frame of external procedure tty_interrupt. ship_echo_buffer internal procedure shares stack frame of external procedure tty_interrupt. scan_iw_char internal procedure shares stack frame of external procedure tty_interrupt. check_iw_limit internal procedure shares stack frame of external procedure tty_interrupt. send_prompt internal procedure shares stack frame of external procedure tty_interrupt. start_negotiated_echo internal procedure shares stack frame of external procedure tty_interrupt. is_parent_mpx internal procedure shares stack frame of external procedure tty_interrupt. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 no_write_code tty_interrupt 000011 noalloc_code tty_interrupt STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tty_interrupt 000100 i tty_interrupt 000101 int_type tty_interrupt 000102 devx tty_interrupt 000103 charx tty_interrupt 000104 echbufp tty_interrupt 000106 this_char tty_interrupt 000107 echo_tally tty_interrupt 000110 sync_ctr_tally tty_interrupt 000111 inchain tty_interrupt 000112 code tty_interrupt 000113 next_offset tty_interrupt 000114 last_offset tty_interrupt 000116 new_headp tty_interrupt 000120 old_tailp tty_interrupt 000122 new_first_tally tty_interrupt 000123 old_last_tally tty_interrupt 000124 max_tally tty_interrupt 000125 filled tty_interrupt 000126 source_ptr tty_interrupt 000130 target_ptr tty_interrupt 000132 start_time tty_interrupt 000134 echnego_from_mux_flag tty_interrupt 000135 echnego_scan_start tty_interrupt 000136 r0_did_echo tty_interrupt 000137 uncp_flag tty_interrupt 000140 echo_start_data tty_interrupt 000142 wtcbp tty_interrupt 000144 interrupt_info tty_interrupt 000146 dialup_info tty_interrupt 000150 rtx_info tty_interrupt 000152 ttybp tty_interrupt 000154 blockp tty_interrupt 000156 net_event_message_arg tty_interrupt 000160 echo_datap tty_interrupt 000162 lctp tty_interrupt 000164 lctep tty_interrupt 000166 wakeup_tablep tty_interrupt 000202 headp send_next_page 000204 next_head send_next_page 000214 sync_flag kill_line 000215 masked_flag kill_line 000224 char_pos echoable 000234 loc_echbufp ship_echo_buffer 000236 loc_lastp ship_echo_buffer 000246 charx scan_iw_char 000247 i scan_iw_char 000266 bufp send_prompt 000304 temp_lctep is_parent_mpx THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_le_a call_ext_out_desc call_ext_out return_mac ext_entry clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. channel_manager$control channel_manager$write meter_response_time pxss$ips_wakeup_int pxss$ring_0_wakeup pxss$unique_ring_0_wakeup syserr tty_space_man$free_buffer tty_space_man$free_chain tty_space_man$free_space tty_space_man$get_buffer tty_space_man$needs_space THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$invalid_write error_table_$noalloc sys_info$quit_mask tty_buf$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000075 151 000106 154 000115 155 000121 156 000123 157 000127 158 000133 160 000135 162 000137 164 000142 165 000144 167 000150 168 000152 172 000154 173 000160 174 000163 175 000165 176 000167 177 000173 179 000200 181 000205 182 000223 183 000225 185 000235 186 000237 188 000241 189 000243 190 000247 191 000253 192 000255 193 000261 195 000277 197 000300 199 000302 200 000304 201 000310 202 000314 203 000316 204 000322 207 000341 208 000342 210 000343 213 000347 215 000351 216 000354 218 000361 221 000364 222 000371 227 000375 230 000404 231 000406 232 000412 233 000416 234 000420 235 000424 236 000442 238 000445 240 000446 242 000450 243 000453 245 000456 246 000460 247 000464 248 000470 249 000472 250 000476 251 000507 252 000526 254 000531 256 000532 258 000534 259 000536 261 000541 266 000552 267 000557 270 000561 271 000562 273 000563 275 000566 277 000572 278 000574 280 000601 281 000607 282 000611 283 000612 286 000622 287 000625 288 000630 293 000646 295 000654 297 000655 309 000674 311 000724 312 000726 316 000736 317 000741 318 000746 320 000750 322 000755 323 000757 324 000761 330 000765 332 000777 333 001004 339 001011 341 001016 343 001020 344 001025 346 001032 347 001034 348 001035 350 001041 351 001043 352 001050 353 001055 354 001062 355 001066 357 001105 360 001106 363 001112 364 001114 366 001117 367 001123 368 001131 373 001142 374 001161 377 001165 379 001166 381 001173 384 001174 387 001212 388 001221 389 001223 390 001231 391 001233 394 001234 397 001237 398 001242 401 001247 404 001254 406 001260 407 001263 409 001266 411 001271 414 001300 415 001303 416 001311 417 001316 420 001324 421 001331 428 001335 432 001346 435 001356 437 001362 438 001366 439 001370 442 001372 444 001375 445 001400 446 001402 448 001403 449 001411 450 001414 452 001417 454 001422 456 001427 457 001430 459 001434 460 001437 462 001442 465 001450 466 001452 467 001457 468 001463 469 001465 471 001470 473 001503 475 001504 476 001506 478 001507 480 001512 481 001516 486 001521 489 001525 492 001535 495 001545 498 001555 502 001572 505 001604 508 001616 510 001617 511 001621 512 001625 513 001631 514 001633 515 001637 516 001650 518 001667 521 001672 523 001673 525 001675 527 001701 528 001703 529 001707 530 001713 531 001715 532 001721 534 001724 535 001735 536 001754 537 001757 539 001760 541 001776 543 001777 545 002001 547 002005 549 002010 550 002015 552 002023 554 002026 555 002044 558 002051 560 002054 561 002072 564 002101 565 002103 568 002105 569 002107 570 002113 571 002117 573 002121 575 002131 578 002142 579 002146 580 002157 582 002176 585 002203 587 002206 588 002212 590 002230 592 002242 593 002245 596 002247 599 002260 601 002266 603 002270 605 002275 607 002276 609 002300 612 002306 613 002311 614 002313 615 002315 616 002321 617 002325 618 002327 619 002333 622 002351 626 002352 628 002354 630 002360 631 002362 632 002365 633 002367 634 002373 635 002377 636 002401 637 002405 641 002423 643 002424 645 002426 647 002432 648 002434 649 002436 650 002442 651 002446 652 002450 653 002454 656 002472 658 002473 662 002503 663 002505 664 002511 665 002515 666 002517 667 002523 668 002541 670 002542 672 002544 673 002552 675 002556 676 002560 677 002562 679 002563 680 002564 682 002566 683 002574 684 002576 686 002602 687 002604 688 002606 689 002610 690 002614 691 002620 692 002622 693 002626 695 002644 697 002645 699 002647 700 002651 701 002655 702 002661 703 002663 704 002667 705 002706 706 002707 707 002712 709 002713 713 002741 965 002742 970 002750 971 002753 972 002755 717 002756 723 002757 725 002763 727 002772 729 003002 731 003010 732 003013 734 003014 736 003022 737 003023 738 003026 740 003034 741 003047 743 003053 744 003061 748 003062 750 003066 752 003070 753 003072 754 003076 756 003104 757 003107 759 003110 761 003116 762 003122 765 003130 766 003133 769 003134 771 003147 772 003152 773 003154 774 003156 775 003162 776 003166 777 003170 779 003174 783 003212 784 003216 786 003225 788 003227 789 003246 791 003253 794 003255 799 003256 805 003257 808 003301 813 003323 814 003330 815 003334 816 003336 817 003340 818 003345 820 003352 821 003353 822 003361 823 003373 824 003377 825 003401 827 003402 829 003405 830 003423 832 003426 834 003431 835 003447 838 003452 840 003453 848 003455 849 003461 854 003466 857 003476 865 003477 866 003502 867 003504 869 003505 871 003511 872 003517 874 003524 875 003526 877 003527 879 003532 880 003541 881 003543 884 003544 885 003546 888 003561 890 003567 891 003575 893 003602 895 003603 896 003605 898 003620 899 003622 902 003624 906 003625 912 003626 913 003634 914 003644 915 003655 916 003665 919 003674 920 003677 922 003700 923 003702 925 003710 931 003711 934 003712 935 003715 936 003721 937 003727 940 003745 944 003746 950 003747 951 003766 954 003773 955 004002 956 004003 958 004013 959 004024 961 004027 963 004030 974 004031 976 004032 977 004035 978 004041 979 004076 981 004104 983 004112 985 004117 987 004120 993 004122 994 004125 995 004131 996 004135 997 004140 998 004151 999 004152 1000 004163 ----------------------------------------------------------- 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