COMPILATION LISTING OF SEGMENT vip7760_dump_ Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 07/20/88 1046.1 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 vip7760_dump_: 12 proc (pm_ttybp, pm_ttyap, pm_pvmdp, pm_subchan, pm_brief_sw); 13 14 /* Called by tty_dump and tty_analyze to interpret a polled vip multiplexer data base */ 15 /* Coded 1/4/79 by J. Stern */ 16 /* Modified 5/1/79 by J. Stern to add vip7760_analyze_ entry */ 17 18 19 /* Parameters */ 20 21 dcl pm_brief_sw bit (1); /* ON for brief output format */ 22 dcl pm_check_used_proc entry variable; /* entry called to tally tty_buf space used */ 23 dcl pm_devx fixed bin; /* device index of multiplexer channel */ 24 dcl pm_long_sw bit (1); /* ON for long output format */ 25 dcl pm_pvmdp ptr; /* ptr to polled vip multiplexer data base */ 26 dcl pm_subchan fixed bin; /* subchannel number */ 27 dcl pm_ttyap ptr; /* ptr to tty_area segment */ 28 dcl pm_ttybp ptr; /* ptr to tty_buf segment */ 29 30 31 /* Automatic */ 32 33 dcl brief_sw bit (1); 34 dcl check_used_proc entry (ptr, fixed bin) variable; 35 dcl devx fixed bin; 36 dcl subchan fixed bin; 37 38 39 /* Builtins */ 40 41 dcl (addr, bin, ptr, rel, size, null, unspec) 42 builtin; 43 44 45 /* Entries */ 46 47 dcl ioa_ entry options (variable); 48 dcl tty_dump$print_chain entry (ptr, char (*), fixed bin, bit (1)); 49 1 1 /* BEGIN INCLUDE FILE ... polled_vip_mpx_data.incl.pl1 */ 1 2 /* Created 12/20/78 by J. Stern */ 1 3 1 4 1 5 dcl pvmdp ptr; 1 6 dcl pvmd_nchan fixed bin; /* hbound of pvmd.subchan_table */ 1 7 1 8 dcl 1 pvmd aligned based (pvmdp), /* polled vip multiplexer data */ 1 9 2 devx fixed bin, /* device (LCT) index */ 1 10 2 nchan fixed bin, /* number of subchannels */ 1 11 2 name char (32) unal, /* major channel name */ 1 12 2 writep ptr, /* ptr to frame now being written */ 1 13 2 write_chan fixed bin, /* subchan that owns current write frame */ 1 14 2 nstation fixed bin (17) unal, /* number of stations initially configured */ 1 15 2 cur_nstation fixed bin (17) unal, /* number of stations currently configured */ 1 16 2 station_to_subchan (0:31) unal, 1 17 3 display fixed bin (8) unal, /* display subchan for given station */ 1 18 3 printer fixed bin (8) unal, /* printer subchan for given station */ 1 19 2 station_mask (0:35) bit (1) unal, /* bit i ON if station i initially configured */ 1 20 2 cur_station_mask (0:35) bit (1) unal, /* bit i ON if station i currently configured */ 1 21 2 load_proc_id bit (36), /* bootload process id */ 1 22 2 load_ev_chan fixed bin (71), /* bootload event channel */ 1 23 2 dialup_info bit (72), /* dialup interrupt info */ 1 24 2 pause_time fixed bin, /* pause time between polling cycles */ 1 25 2 max_text_len fixed bin, /* max data chars in output text message */ 1 26 2 max_message_len fixed bin, /* max number of characters in input message */ 1 27 2 function_codes, /* chars having special meanings as function codes */ 1 28 3 quit char (1) unal, 1 29 3 formfeed char (1) unal, 1 30 3 pad char (2) unal, 1 31 2 flags, 1 32 3 send_output bit (1) unal, /* ON if ok to send more output */ 1 33 3 mpx_started bit (1) unal, /* ON if multiplexer started */ 1 34 3 mpx_loading bit (1) unal, /* ON if multiplexer load in progress */ 1 35 3 mpx_loaded bit (1) unal, /* ON if multiplexer loaded */ 1 36 3 polling_started bit (1) unal, /* ON if polling started */ 1 37 3 controller_poll bit (1) unal, /* ON if controller polling; OFF if station polling */ 1 38 3 partial_frame bit (1) unal, /* ON if partial frame has been written */ 1 39 3 crlf_echo bit (1) unal, /* ON to enable CRLF echoing */ 1 40 3 omit_nl bit (1) unal, /* ON to omit adding NL to received msgs */ 1 41 3 omit_ff bit (1) unal, /* ON to omit sending FF at top of page */ 1 42 3 gcos_break bit (1) unal, /* ON to accept $*$BRK as quit indication */ 1 43 3 etb_mode bit (1) unal, /* ON to terminate partial messages with ETB */ 1 44 3 unused bit (24) unal, 1 45 2 error_counters like pvip_mpx_meters, /* counters for errors reported by the FNP */ 1 46 2 saved_meters_ptr ptr, /* pointer to target for copy_meters order */ 1 47 2 subchan_table (pvmd_nchan refer (pvmd.nchan)) like pvste; /* subchannel table */ 1 48 1 49 1 50 dcl pvstep ptr; 1 51 1 52 dcl 1 pvste aligned based (pvstep), /* polled vip subchannel table entry */ 1 53 2 station_addr fixed bin (9) unsigned unal, /* station address (0 - 31) */ 1 54 2 name char (3) unal, /* subchan component name */ 1 55 2 devx fixed bin (17) unal, /* subchan device (LCT) index */ 1 56 2 write_chain fixed bin (18) unsigned unal, /* offset of first write buffer */ 1 57 2 flags unal, 1 58 3 printer bit (1) unal, /* ON if printer; OFF if display */ 1 59 3 hold_output bit (1) unal, /* ON if waiting for FF (display) or ACK (printer) */ 1 60 3 eop bit (1) unal, /* ON if next output must clear screen */ 1 61 3 hndlquit bit (1) unal, /* ON if in hndlquit mode */ 1 62 3 listen bit (1) unal, /* ON if listening for dialup */ 1 63 3 dialed bit (1) unal, /* ON if subchan is dialed up */ 1 64 3 slave bit (1) unal, /* ON for slave subchans */ 1 65 3 unused bit (2) unal, 1 66 2 naks fixed bin (8) unal, /* printer status NAK counter */ 1 67 2 baud_rate fixed bin (17) unal, /* printer baud rate, 300 or 1200 */ 1 68 2 pgofs fixed bin (8) unal, /* page overflow counter (display only) */ 1 69 2 writes fixed bin (8) unal, /* count of frames written since first page overflow */ 1 70 2 pad fixed bin (17) unal, 1 71 2 meters like pvip_subchan_meters, 1 72 2 saved_meters_ptr ptr; 1 73 1 74 /* END INCLUDE FILE ... polled_vip_mpx_data.incl.pl1 */ 50 51 52 2 1 /* BEGIN INCLUDE FILE ... polled_vip_mpx_meters.incl.pl1 */ 2 2 2 3 /* Defines the structure used for metering of a polled_vip multiplexer */ 2 4 2 5 /* Written June 1981 by Robert Coren */ 2 6 2 7 dcl 1 pvip_mpx_meter_struc based aligned, 2 8 2 version fixed bin, 2 9 2 pad fixed bin, 2 10 2 current_meters like pvip_mpx_meters, 2 11 2 saved_meters like pvip_mpx_meters; 2 12 2 13 dcl 1 pvip_mpx_meters based aligned, 2 14 2 input_timeouts fixed bin, 2 15 2 input_frames_lost fixed bin, 2 16 2 output_frames_lost fixed bin, 2 17 2 bad_output_frames fixed bin, 2 18 2 output_timeouts fixed bin; 2 19 2 20 dcl PVIP_MPX_METERS_VERSION_1 internal static options (constant) init (1); 2 21 2 22 /* END INCLUDE FILE ... polled_vip_mpx_meters.incl.p1l */ 53 54 55 3 1 /* BEGIN INCLUDE FILE ... pvip_subchan_meters.incl.pl1 */ 3 2 3 3 /* Defines the structure used for meters kept by polled_vip_mpx on behalf of its subchannels */ 3 4 3 5 /* Written June 1981 by Robert Coren */ 3 6 3 7 dcl 1 pvip_subchan_meter_struc based aligned, 3 8 2 version fixed bin, 3 9 2 flags, 3 10 3 printer bit (1) unaligned, 3 11 3 pad bit (35) unaligned, 3 12 2 current_meters like pvip_subchan_meters, 3 13 2 saved_meters like pvip_subchan_meters; 3 14 3 15 dcl 1 pvip_subchan_meters based aligned, 3 16 2 printer_naks fixed bin (35), 3 17 2 discarded_printer_frame fixed bin (35), 3 18 2 display_pgofs fixed bin (35), 3 19 2 pgof_limit_reached fixed bin (35); 3 20 3 21 dcl PVIP_SUBCHAN_METERS_VERSION_1 internal static options (constant) init (1); 3 22 3 23 3 24 /* END INCLUDE FILE ... pvip_subchan_meters.incl.pl1 */ 56 57 4 1 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 4 2 4 3 /* Date Last Modified and Reason 4 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 4 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 4 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 4 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 4 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 4 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 4 10* Modified November 1979 by C. Hornig for MCS tracing. 4 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 4 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 4 13* Modified March 1980 by Robert Coren to reorganize metering information 4 14* Modified December 1980 by Robert Coren to add FNP-specific events 4 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 4 16* Modified November 1984 by Robert Coren to add tty_area_lock 4 17**/ 4 18 4 19 dcl ttybp ptr, 4 20 tty_buf$ ext static, /* tty buffer segment */ 4 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 4 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 4 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 4 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 4 25 4 26 4 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 4 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 4 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 4 30 4 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 4 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 4 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 4 34 4 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 4 36 2 slock bit (36), /* per system lock */ 4 37 2 absorig fixed bin (24), /* abs address of this seg */ 4 38 2 borig bit (18), /* index of start of buffer area */ 4 39 2 bleft fixed bin (18), /* words left in pool */ 4 40 2 free bit (18), /* pointer to start of free pool */ 4 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 4 42 2 padb1 bit (28) unaligned, 4 43 2 lct_ptr ptr, /* pointer to logical channel table */ 4 44 4 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 4 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 4 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 4 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 4 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 4 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 4 51 2 minbuf fixed bin (18), /* min output buffer size */ 4 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 4 53 4 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 4 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 4 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 4 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 4 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 4 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 4 60 4 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 4 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 4 63 2 bfx fixed bin, /* used in calls to iobm */ 4 64 2 nquits fixed bin (35), /* number of quits */ 4 65 2 space_needed_data, 4 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 4 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 4 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 4 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 4 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 4 71 4 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 4 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 4 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 4 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 4 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 4 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 4 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 4 79 4 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 4 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 4 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 4 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 4 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 4 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 4 86 4 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 4 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 4 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 4 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 4 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 4 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 4 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 4 94 4 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 4 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 4 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 4 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 4 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 4 100 2 echo_neg_mux_nonecho fixed bin (35), 4 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 4 102 4 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 4 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 4 105 2 trace unaligned, /* tracing information */ 4 106 3 flags, 4 107 4 enable bit, /* global tracing control */ 4 108 4 default_mode bit, /* whether to trace channels by default */ 4 109 4 read bit, /* read */ 4 110 4 write bit, /* write */ 4 111 4 data bit, /* buffers on reads and writes */ 4 112 4 control bit, /* control, priv_control, and hpriv_control */ 4 113 4 modes bit, /* (get set check)_modes */ 4 114 4 interrupt bit, /* interrupt, interrupt_later */ 4 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 4 116 4 start bit, /* start, stop */ 4 117 4 shutdown bit, /* shutdown */ 4 118 4 space_man bit, /* tty_space_man$* */ 4 119 4 pad_flags bit (6), 4 120 3 data_offset bit (18), /* offset of tracing data */ 4 121 4 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 4 123 4 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 4 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 4 126 2 timer_count fixed bin, /* Number of timers outstanding */ 4 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 4 128 4 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 4 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 4 131 4 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 4 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 4 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 4 135 4 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 4 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 4 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 4 139 4 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 4 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 4 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 4 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 4 144 4 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 4 146 4 147 2 pad2 (13) fixed bin (35), 4 148 4 149 2 free_space fixed bin; /* start of free space region */ 4 150 4 151 5 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 5 2 5 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 5 4 5 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 5 6 5 7 /* format: style3 */ 5 8 5 9 declare lock_ptr pointer; 5 10 declare 1 hc_fast_lock aligned based (lock_ptr), 5 11 2 pid bit (36) aligned, /* holder of lock */ 5 12 2 event bit (36) aligned, /* event associated with lock */ 5 13 2 flags aligned, 5 14 3 notify_sw bit (1) unaligned, 5 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 5 16 5 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 4 152 4 153 4 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 58 59 6 1 /* BEGIN INCLUDE FILE ... lct.incl.pl1 */ 6 2 6 3 /* Created by J. Stern 7/26/78 */ 6 4 /* Metering information added by C. Hornig, March 1980. */ 6 5 /* Unwired saved meters added by Robert Coren, December 1980 */ 6 6 6 7 dcl lctp ptr; /* ptr to logical channel table */ 6 8 dcl lctep ptr; /* ptr to logical channel table entry */ 6 9 dcl lct_size fixed bin; /* size of lcte_array when allocated */ 6 10 6 11 dcl 1 lct aligned based (lctp), /* logical channel table */ 6 12 2 max_no_lctes fixed bin, /* maximum number of lct entries */ 6 13 2 cur_no_lctes fixed bin, /* current number of lct entries used */ 6 14 2 lcnt_ptr ptr, /* ptr to logical channel name table */ 6 15 2 queue_lock bit (36), /* lock used to serialize queueing operations */ 6 16 2 pad (11) fixed bin, 6 17 2 lcte_array (lct_size refer (lct.max_no_lctes)) like lcte; /* lct entries */ 6 18 6 19 6 20 dcl 1 lcte aligned based (lctep), /* logical channel table entry */ 6 21 2 lock bit (36), /* channel lock */ 6 22 2 data_base_ptr ptr unal, /* ptr to channel data base */ 6 23 2 channel_type fixed bin (8) unal, /* identifies channel manager program */ 6 24 2 flags unal, 6 25 3 entry_in_use bit (1) unal, /* ON if this entry in use */ 6 26 3 initialized bit (1) unal, /* ON if this channel initialized */ 6 27 3 notify_reqd bit (1) unal, /* ON if must notify when unlocking this channel */ 6 28 3 locked_for_interrupt bit (1) unal, /* ON if lock set by interrupt handler */ 6 29 3 space_needed bit (1) unal, /* ON if this channel needs buffer space */ 6 30 3 special_lock bit (1) unal, /* ON if lock is managed by multiplexer */ 6 31 3 trace_force bit (1) unal, /* ON to trace based on next bit only */ 6 32 /* OFF to XOR next bit with tty_buf.default_tracing */ 6 33 3 trace bit (1) unal, /* ON to trace this channel */ 6 34 3 unused bit (1) unal, 6 35 2 physical_channel_devx fixed bin (17) unal, /* devx of physical chan from which logical chan is derived */ 6 36 2 major_channel_info, 6 37 3 major_channel_devx fixed bin unal, /* major channel device index */ 6 38 3 subchannel fixed bin (17) unal, /* subchannel id (or data ptr) wrt major channel */ 6 39 2 queue_entries, 6 40 3 queue_head bit (18) unal, /* ptr to first queue entry for this channel */ 6 41 3 queue_tail bit (18) unal, /* ptr to last queue entry for this channel */ 6 42 2 word_counts, 6 43 3 input_words fixed bin (17) unal, /* number of input words charged to this channel */ 6 44 3 output_words fixed bin (17) unal, /* number of output words charged to this channel */ 6 45 6 46 2 meters, 6 47 3 in_bytes fixed bin (35), 6 48 3 out_bytes fixed bin (35), 6 49 3 in, 6 50 4 calls fixed bin (35), 6 51 4 interrupts fixed bin (35), 6 52 4 call_time fixed bin (71), 6 53 4 interrupt_time fixed bin (71), 6 54 3 out like lcte.meters.in, 6 55 3 control like lcte.meters.in, 6 56 2 saved_meters_ptr ptr, /* pointer to unwired copy of meters saved at last dialup */ 6 57 6 58 2 timer_offset bit (18) aligned, /* Head of list of timers for this channel */ 6 59 6 60 2 pad (3) fixed bin (35); 6 61 6 62 6 63 dcl lcntp ptr; /* ptr to logical channel name table */ 6 64 6 65 dcl 1 lcnt aligned based (lcntp), /* logical channel name table */ 6 66 2 names (lct.max_no_lctes) char (32) unal; /* channel names */ 6 67 6 68 dcl 1 saved_meters aligned based like lcte.meters; /* meters saved at dialup, allocated in tty_area */ 6 69 6 70 6 71 /* END INCLUDE FILE ... lct.incl.pl1 */ 60 61 7 1 /* BEGIN INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 7 2 7 3 7 4 7 5 /****^ HISTORY COMMENTS: 7 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 7 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 7 8* Add data needed for the uncp multiplexer (DSA gateway) interface 7 9* implementation. 7 10* END HISTORY COMMENTS */ 7 11 7 12 7 13 /* 7 14* Separated from tty_buf.incl.pl1 aug 78 by J. Nicholls 7 15* Modified May 1979 by Larry Johnson to add max_buffer_tally array and to use unsigned variables. 7 16* Reported in February 1982 the modifications to add the "turn" bit in flags. 7 17**/ 7 18 7 19 dcl blockp ptr; /* pointer which block entry is based on */ 7 20 dcl free_blockp ptr; /* pointer to head of free space chain */ 7 21 7 22 7 23 dcl 1 free_block aligned based (free_blockp), /* format of start of free block */ 7 24 2 next bit (18), /* foward pointer to next free block */ 7 25 2 size fixed bin; /* number of words in this block */ 7 26 7 27 7 28 dcl 1 buffer based (blockp) aligned, /* buffer definition */ 7 29 2 next fixed bin (18) unal uns, /* addr of next buffer */ 7 30 2 flags unaligned, 7 31 3 end_of_page bit (1) unaligned, /* buffer contains end of page */ 7 32 3 converted bit (1) unaligned, /* buffer contains converted input */ 7 33 3 break bit (1) unaligned, /* buffer contains break character */ 7 34 3 mark bit (1) unaligned, /* buffer contains first character after "mark" */ 7 35 3 turn bit (1) unaligned, /* ON if the turn must be sent */ 7 36 3 pad bit (1) unaligned, 7 37 2 size_code fixed bin (3) unal uns, /* (nwords/16) - 1 */ 7 38 2 tally fixed bin (9) unal uns, /* number of characters in buffer */ 7 39 2 chars (0:59) char (1) unaligned; /* room for 60 data characters */ 7 40 7 41 /* the following array, if indexed by buffer.size_code will give maximum number of characters permitted in that buffer */ 7 42 7 43 dcl max_buffer_tally (0:7) fixed bin int static options (constant) init (60, 124, 188, 252, 316, 380, 444, 508); 7 44 7 45 /* END INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 62 63 64 ttybp = pm_ttybp; 65 pvmdp = pm_pvmdp; 66 subchan = pm_subchan; 67 brief_sw = pm_brief_sw; 68 69 /* Print major channel data */ 70 71 call ioa_ ("^/PVMD at ^o, channel ^a, devx ^o", bin (rel (pvmdp), 18), pvmd.name, pvmd.devx); 72 call ioa_ ("nchan = ^d, nstation = ^d, station_mask = ^w", pvmd.nchan, pvmd.nstation, unspec (pvmd.station_mask)); 73 if pvmd.cur_nstation ^= pvmd.nstation 74 then call ioa_ ("cur_nstation = ^d, cur_station_mask = ^w", pvmd.cur_nstation, unspec (pvmd.cur_station_mask)); 75 call ioa_ ("load_proc_id = ^.3b, load_ev_chan = ^.3b", pvmd.load_proc_id, unspec (pvmd.load_ev_chan)); 76 call ioa_ ("pause_time = ^d, max_text_len = ^d, max_message_len = ^d, quit = ^a, formfeed = ^a", pvmd.pause_time, pvmd.max_text_len, 77 pvmd.max_message_len, pvmd.quit, pvmd.formfeed); 78 call ioa_ 79 ( 80 "flags: ^[ send_output^]^[ mpx_started^]^[ mpx_loading^]^[ mpx_loaded^]^[ polling_started^]^[ controller_poll^]^[ partial_frame^]^[ crlf_echo^]^[ omit_nl^]^[ omit_ff^]^[ gcos_break^]^[ etb_mode^]" 81 , pvmd.send_output, pvmd.mpx_started, pvmd.mpx_loading, pvmd.mpx_loaded, pvmd.polling_started, 82 pvmd.controller_poll, pvmd.partial_frame, pvmd.crlf_echo, pvmd.omit_nl, pvmd.omit_ff, pvmd.gcos_break, 83 pvmd.etb_mode); 84 85 if pvmd.writep ^= null 86 then call ioa_ ("writep = ^p", pvmd.writep); 87 if pvmd.write_chan ^= 0 88 then call ioa_ ("write_chan = ^d", pvmd.write_chan); 89 90 if pvmd.writep ^= null 91 then call tty_dump$print_chain (ttybp, "WRITE_CHAIN", bin (rel (pvmd.writep)), brief_sw); 92 93 /* Print subchannel data */ 94 95 if subchan = -1 /* means we should dump all subchans */ 96 then do subchan = 1 to pvmd.nchan; 97 call print_subchan; 98 end; 99 else call print_subchan; 100 101 return; 102 103 print_subchan: 104 proc; 105 106 dcl i fixed bin; 107 108 pvstep = addr (pvmd.subchan_table (subchan)); 109 call ioa_ ("^/PVSTE at ^o, channel ^a.^a, devx ^o, subchan ^o, station_addr ^o", bin (rel (pvstep), 18), pvmd.name, 110 pvste.name, pvste.devx, subchan, pvste.station_addr); 111 112 if pvste.printer 113 then i = pvmd.station_to_subchan (pvste.station_addr).printer; 114 else i = pvmd.station_to_subchan (pvste.station_addr).display; 115 if i ^= subchan 116 then call ioa_ ("ERROR: ^[printer^;display^] station ^d maps to subchan ^d", pvste.printer, pvste.station_addr, i); 117 118 call ioa_ ("flags: ^[ printer^]^[ hold_output^]^[ eop^]^[ hndlquit^]^[ listen^]^[ dialed^]^[ slave^]", 119 pvste.printer, pvste.hold_output, pvste.eop, pvste.hndlquit, pvste.listen, pvste.dialed, pvste.slave); 120 ; 121 if pvste.printer 122 then call ioa_ ("baud_rate = ^d", pvste.baud_rate); 123 124 if pvste.pgofs + pvste.writes ^= 0 125 then call ioa_ ("pgofs = ^d, writes = ^d", pvste.pgofs, pvste.writes); 126 if pvste.naks ^= 0 127 then call ioa_ ("naks = ^d", pvste.naks); 128 129 if pvste.write_chain ^= 0 /* there's a write chain to print */ 130 then call tty_dump$print_chain (ttybp, "WRITE CHAIN", (pvste.write_chain), brief_sw); 131 132 end; 133 134 vip7760_analyze_: 135 entry (pm_ttybp, pm_ttyap, pm_devx, pm_check_used_proc, pm_long_sw); 136 137 ttybp = pm_ttybp; 138 devx = pm_devx; 139 check_used_proc = pm_check_used_proc; 140 brief_sw = ^pm_long_sw; 141 142 /* get ptr to polled vip multiplexer data base for specified devx */ 143 144 lctp = ptr (ttybp, rel (tty_buf.lct_ptr)); 145 lctep = addr (lct.lcte_array (devx)); 146 pvmdp = ptr (ttybp, rel (lcte.data_base_ptr)); 147 148 /* display data base contents */ 149 150 call vip7760_dump_ (ttybp, pm_ttyap, pvmdp, -1, brief_sw); 151 152 /* account for all tty_buf space used by multiplexer */ 153 154 pvmd_nchan = pvmd.nchan; 155 call check_used_proc (pvmdp, size (pvmd)); 156 call trace_chain (bin (rel (pvmd.writep))); 157 158 do subchan = 1 to pvmd.nchan; /* examine all subchans */ 159 pvstep = addr (pvmd.subchan_table (subchan)); 160 call trace_chain ((pvste.write_chain)); 161 end; 162 163 return; 164 165 /* subroutine to trace a buffer chain and account for space used */ 166 167 trace_chain: 168 proc (chain_offset); 169 170 dcl chain_offset fixed bin (18); 171 dcl buf_offset fixed bin (18); 172 173 174 buf_offset = chain_offset; 175 do while (buf_offset ^= 0); 176 if buf_offset < bin (tty_buf.borig, 18) 177 then return; /* give up on bad chain */ 178 179 blockp = ptr (ttybp, buf_offset); 180 buf_offset = buffer.next; 181 call check_used_proc (blockp, 16 * (bin (buffer.size_code, 3) + 1)); 182 end; 183 184 end; 185 186 187 end; /* vip7760_dump_ */ SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/19/88 1537.4 vip7760_dump_.pl1 >special_ldd>install>MR12.2-1061>vip7760_dump_.pl1 50 1 08/10/81 1843.7 polled_vip_mpx_data.incl.pl1 >ldd>include>polled_vip_mpx_data.incl.pl1 53 2 03/27/82 0430.3 polled_vip_mpx_meters.incl.pl1 >ldd>include>polled_vip_mpx_meters.incl.pl1 56 3 03/27/82 0430.3 pvip_subchan_meters.incl.pl1 >ldd>include>pvip_subchan_meters.incl.pl1 58 4 01/06/85 1422.1 tty_buf.incl.pl1 >ldd>include>tty_buf.incl.pl1 4-152 5 01/06/85 1422.1 hc_fast_lock.incl.pl1 >ldd>include>hc_fast_lock.incl.pl1 60 6 11/08/82 1005.8 lct.incl.pl1 >ldd>include>lct.incl.pl1 62 7 07/19/88 1524.3 tty_buffer_block.incl.pl1 >special_ldd>install>MR12.2-1061>tty_buffer_block.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. addr builtin function dcl 41 ref 108 145 159 baud_rate 2(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 1-52 set ref 121* bin builtin function dcl 41 ref 71 71 90 90 109 109 156 156 176 181 blockp 000124 automatic pointer dcl 7-19 set ref 179* 180 181* 181 borig 2 based bit(18) level 2 dcl 4-35 ref 176 brief_sw 000100 automatic bit(1) packed unaligned dcl 33 set ref 67* 90* 129* 140* 150* buf_offset 000146 automatic fixed bin(18,0) dcl 171 set ref 174* 175 176 179 180* buffer based structure level 1 dcl 7-28 chain_offset parameter fixed bin(18,0) dcl 170 ref 167 174 check_used_proc 000102 automatic entry variable dcl 34 set ref 139* 155 181 controller_poll 52(05) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* crlf_echo 52(07) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* cur_nstation 15(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 1-8 set ref 73 73* cur_station_mask 37 based bit(1) array level 2 packed packed unaligned dcl 1-8 ref 73 73 data_base_ptr 1 based pointer level 2 packed packed unaligned dcl 6-20 ref 146 devx 1 based fixed bin(17,0) level 2 in structure "pvste" packed packed unaligned dcl 1-52 in procedure "vip7760_dump_" set ref 109* devx 000106 automatic fixed bin(17,0) dcl 35 in procedure "vip7760_dump_" set ref 138* 145 devx based fixed bin(17,0) level 2 in structure "pvmd" dcl 1-8 in procedure "vip7760_dump_" set ref 71* dialed 2(05) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* display 16 based fixed bin(8,0) array level 3 packed packed unaligned dcl 1-8 ref 114 eop 2(02) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* etb_mode 52(11) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* flags 2 based structure level 2 in structure "pvste" packed packed unaligned dcl 1-52 in procedure "vip7760_dump_" flags 52 based structure level 2 in structure "pvmd" dcl 1-8 in procedure "vip7760_dump_" formfeed 51(09) based char(1) level 3 packed packed unaligned dcl 1-8 set ref 76* function_codes 51 based structure level 2 dcl 1-8 gcos_break 52(10) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* hc_fast_lock based structure level 1 dcl 5-10 hndlquit 2(03) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* hold_output 2(01) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* i 000136 automatic fixed bin(17,0) dcl 106 set ref 112* 114* 115 115* in 10 based structure level 3 in structure "lcte" dcl 6-20 in procedure "vip7760_dump_" in 2 based structure level 2 in structure "saved_meters" dcl 6-68 in procedure "vip7760_dump_" in 30 based structure array level 4 in structure "lct" dcl 6-11 in procedure "vip7760_dump_" ioa_ 000010 constant entry external dcl 47 ref 71 72 73 75 76 78 85 87 109 115 118 121 124 126 lct based structure level 1 dcl 6-11 lct_ptr 6 based pointer level 2 dcl 4-35 ref 144 lcte based structure level 1 dcl 6-20 lcte_array 20 based structure array level 2 dcl 6-11 set ref 145 lctep 000122 automatic pointer dcl 6-8 set ref 145* 146 lctp 000120 automatic pointer dcl 6-7 set ref 144* 145 listen 2(04) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* load_ev_chan 42 based fixed bin(71,0) level 2 dcl 1-8 ref 75 75 load_proc_id 40 based bit(36) level 2 dcl 1-8 set ref 75* max_message_len 50 based fixed bin(17,0) level 2 dcl 1-8 set ref 76* max_text_len 47 based fixed bin(17,0) level 2 dcl 1-8 set ref 76* meters 26 based structure array level 3 in structure "lct" dcl 6-11 in procedure "vip7760_dump_" meters 6 based structure level 2 in structure "lcte" dcl 6-20 in procedure "vip7760_dump_" mpx_loaded 52(03) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* mpx_loading 52(02) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* mpx_started 52(01) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* naks 2(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 1-52 set ref 126 126* name 0(09) based char(3) level 2 in structure "pvste" packed packed unaligned dcl 1-52 in procedure "vip7760_dump_" set ref 109* name 2 based char(32) level 2 in structure "pvmd" packed packed unaligned dcl 1-8 in procedure "vip7760_dump_" set ref 71* 109* nchan 1 based fixed bin(17,0) level 2 dcl 1-8 set ref 72* 95 154 158 next based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 7-28 ref 180 nstation 15 based fixed bin(17,0) level 2 packed packed unaligned dcl 1-8 set ref 72* 73 null builtin function dcl 41 ref 85 90 omit_ff 52(09) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* omit_nl 52(08) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* partial_frame 52(06) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* pause_time 46 based fixed bin(17,0) level 2 dcl 1-8 set ref 76* pgofs 3 based fixed bin(8,0) level 2 packed packed unaligned dcl 1-52 set ref 124 124* pm_brief_sw parameter bit(1) packed unaligned dcl 21 ref 11 67 pm_check_used_proc parameter entry variable dcl 22 ref 134 139 pm_devx parameter fixed bin(17,0) dcl 23 ref 134 138 pm_long_sw parameter bit(1) packed unaligned dcl 24 ref 134 140 pm_pvmdp parameter pointer dcl 25 ref 11 65 pm_subchan parameter fixed bin(17,0) dcl 26 ref 11 66 pm_ttyap parameter pointer dcl 27 set ref 11 134 150* pm_ttybp parameter pointer dcl 28 ref 11 64 134 137 polling_started 52(04) based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* printer 2 based bit(1) level 3 in structure "pvste" packed packed unaligned dcl 1-52 in procedure "vip7760_dump_" set ref 112 115* 118* 121 printer 16(09) based fixed bin(8,0) array level 3 in structure "pvmd" packed packed unaligned dcl 1-8 in procedure "vip7760_dump_" ref 112 ptr builtin function dcl 41 ref 144 146 179 pvip_mpx_meters based structure level 1 dcl 2-13 pvip_subchan_meters based structure level 1 dcl 3-15 pvmd based structure level 1 dcl 1-8 set ref 155 155 pvmd_nchan 000112 automatic fixed bin(17,0) dcl 1-6 set ref 154* 155 155 pvmdp 000110 automatic pointer dcl 1-5 set ref 65* 71 71 71 71 72 72 72 72 73 73 73 73 73 75 75 75 76 76 76 76 76 78 78 78 78 78 78 78 78 78 78 78 78 85 85 87 87 90 90 90 95 108 109 112 114 146* 150* 154 155* 155 155 156 156 158 159 pvste based structure level 1 dcl 1-52 pvstep 000114 automatic pointer dcl 1-50 set ref 108* 109 109 109 109 109 112 112 114 115 115 118 118 118 118 118 118 118 121 121 124 124 124 124 126 126 129 129 159* 160 quit 51 based char(1) level 3 packed packed unaligned dcl 1-8 set ref 76* rel builtin function dcl 41 ref 71 71 90 90 109 109 144 146 156 156 send_output 52 based bit(1) level 3 packed packed unaligned dcl 1-8 set ref 78* size builtin function dcl 41 ref 155 155 size_code 0(24) based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 7-28 ref 181 slave 2(06) based bit(1) level 3 packed packed unaligned dcl 1-52 set ref 118* station_addr based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 1-52 set ref 109* 112 114 115* station_mask 36 based bit(1) array level 2 packed packed unaligned dcl 1-8 ref 72 72 station_to_subchan 16 based structure array level 2 packed packed unaligned dcl 1-8 subchan 000107 automatic fixed bin(17,0) dcl 36 set ref 66* 95 95* 108 109* 115 158* 159* subchan_table 62 based structure array level 2 dcl 1-8 set ref 108 159 tty_buf based structure level 1 dcl 4-35 tty_dump$print_chain 000012 constant entry external dcl 48 ref 90 129 ttybp 000116 automatic pointer dcl 4-19 set ref 64* 90* 129* 137* 144 144 146 150* 176 179 unspec builtin function dcl 41 ref 72 72 73 73 75 75 write_chain 1(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 1-52 ref 129 129 160 write_chan 14 based fixed bin(17,0) level 2 dcl 1-8 set ref 87 87* writep 12 based pointer level 2 dcl 1-8 set ref 85 85* 90 90 90 156 156 writes 3(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 1-52 set ref 124 124* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. FNP_DUMP_PATCH_EVENT internal static fixed bin(17,0) initial dcl 4-31 FNP_METER_EVENT internal static fixed bin(17,0) initial dcl 4-32 PVIP_MPX_METERS_VERSION_1 internal static fixed bin(17,0) initial dcl 2-20 PVIP_SUBCHAN_METERS_VERSION_1 internal static fixed bin(17,0) initial dcl 3-21 TTY_AREA_LOCK_EVENT internal static bit(36) initial dcl 4-33 abs_buf_limit internal static fixed bin(18,0) initial dcl 4-19 bsizec internal static fixed bin(17,0) initial dcl 4-28 buf_per_second internal static fixed bin(17,0) initial dcl 4-29 free_block based structure level 1 dcl 7-23 free_blockp automatic pointer dcl 7-20 input_bpart internal static fixed bin(18,0) initial dcl 4-19 lcnt based structure level 1 dcl 6-65 lcntp automatic pointer dcl 6-63 lct_size automatic fixed bin(17,0) dcl 6-9 lock_ptr automatic pointer dcl 5-9 max_buffer_tally internal static fixed bin(17,0) initial array dcl 7-43 output_bpart internal static fixed bin(18,0) initial dcl 4-19 pvip_mpx_meter_struc based structure level 1 dcl 2-7 pvip_subchan_meter_struc based structure level 1 dcl 3-7 qblock_size internal static fixed bin(17,0) initial dcl 4-27 saved_meters based structure level 1 dcl 6-68 tty_buf$ external static fixed bin(17,0) dcl 4-19 tty_ev internal static fixed bin(17,0) initial dcl 4-19 NAMES DECLARED BY EXPLICIT CONTEXT. print_subchan 001207 constant entry internal dcl 103 ref 97 99 trace_chain 001613 constant entry internal dcl 167 ref 156 160 vip7760_analyze_ 001052 constant entry external dcl 134 vip7760_dump_ 000337 constant entry external dcl 11 ref 150 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1740 1754 1665 1750 Length 2304 1665 14 313 53 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME vip7760_dump_ 396 external procedure is an external procedure. print_subchan internal procedure shares stack frame of external procedure vip7760_dump_. trace_chain internal procedure shares stack frame of external procedure vip7760_dump_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME vip7760_dump_ 000100 brief_sw vip7760_dump_ 000102 check_used_proc vip7760_dump_ 000106 devx vip7760_dump_ 000107 subchan vip7760_dump_ 000110 pvmdp vip7760_dump_ 000112 pvmd_nchan vip7760_dump_ 000114 pvstep vip7760_dump_ 000116 ttybp vip7760_dump_ 000120 lctp vip7760_dump_ 000122 lctep vip7760_dump_ 000124 blockp vip7760_dump_ 000136 i print_subchan 000146 buf_offset trace_chain THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ent_var call_ext_in call_ext_out_desc return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. ioa_ tty_dump$print_chain NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000332 64 000344 65 000350 66 000353 67 000355 71 000362 72 000414 73 000447 75 000510 76 000540 78 000600 85 000710 87 000737 90 000763 95 001024 97 001037 98 001040 99 001043 101 001044 134 001045 137 001057 138 001063 139 001065 140 001072 144 001103 145 001107 146 001112 150 001117 154 001137 155 001142 156 001155 158 001163 159 001173 160 001177 161 001204 163 001206 103 001207 108 001210 109 001215 112 001267 114 001306 115 001320 118 001352 121 001431 124 001460 126 001521 129 001552 132 001612 167 001613 174 001615 175 001617 176 001622 179 001630 180 001634 181 001637 182 001655 184 001656 ----------------------------------------------------------- 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