/* BEGIN INCLUDE FILE ... hasp_mpx_data.incl.pl1 */ /* Created: September-October 1979 by G. Palter */ /* Modified: December 1980 by G. Palter as part of "loopback bug" fix */ /* Modified: 30 March 1981 by G. Palter to add last_loopback_bcb */ /* Modified: 24 July 1981 by G. Palter to add hmd_signon_data, update minor states, and add metering data */ /* HASP multiplexer data */ dcl 1 hmd aligned based (hmd_ptr), 2 name character (32) unaligned, /* name of major channel */ 2 devx fixed binary, /* device (LCT) index of the channel */ 2 configuration_data like hasp_configuration_data, /* data supplied by load operation that controls multiplexer operation (EG: type, block size, etc.) */ 2 loader_process_id bit (36), /* process to be notified on state change for multiplexer */ 2 loader_event_channel fixed binary (71), /* ... and the channel to be used */ 2 dialup_info like dialup_info, /* information saved from DIALUP interrupt */ 2 state fixed binary, /* state of multiplexer -- down/loading/loaded/started */ 2 minor_state fixed binary, /* state when running -- normal/need sync/loopback/etc. */ 2 foreign_block_count fixed binary, /* # of last block received from foreign side */ 2 foreign_fcs_bytes character (2) unaligned, /* last FCS received from foreign side */ 2 local_block_count fixed binary, /* # of last block sent by multiplexer */ 2 local_fcs_bytes character (2) unaligned, /* last FCS sent by multiplexer */ 2 subchannels_for_output, /* a queue of sub-channels waiting SEND OUTPUT interrupts */ 3 first fixed binary, /* ... index of first sub-channel to interrupt */ 3 last fixed binary, /* ... index of last sub-channel */ 2 output_chain_ptr pointer, /* -> chain of buffers presently being sent to the FNP */ 2 input, /* chain of input blocks waiting to be split into records */ 3 first_bufferp pointer, /* ... -> first buffer in the chain */ 3 last_bufferp pointer, /* ... -> last buffer in the chain */ 2 loopback, /* chain of loopbacked blocks waiting to be retransmitted */ 3 first_bufferp pointer, 3 last_bufferp pointer, 2 output_block, /* the output block presently being constructed */ 3 subchannel_idx fixed binary, /* ... sub-channel whose records are contained in this block, or -1 if this block contains records from several */ 3 tally fixed binary, /* ... # of characters in the block */ 3 first_bufferp pointer, /* ... -> first buffer in the block */ 3 last_bufferp pointer, /* ... -> last buffer in the block */ 2 signon_data_ptr pointer, /* -> data needed to send a SIGNON record */ 2 minor_state_stack pointer, /* -> top of minor state stack */ 2 loopback_block_chain_stack pointer, /* -> top of loopback block chain stack */ 2 last_loopback_bcb character (1) unaligned, /* BCB character of last block loopbacked from FNP */ 2 pad bit (27) unaligned, 2 bit_arrays aligned, 3 input_wabs (0:8) bit (1) unaligned, /* input wait-a-bits: OFF => input device not ready; foreign side should not send further data */ 3 output_wabs (0:8) bit (1) unaligned, /* output wait-a-bits: OFF => output device not ready; multiplexer should not send further data */ 3 send_rts (0:8) bit (1) unaligned, /* ON => an RTS record should be sent */ 3 send_rts_ack (0:8) bit (1) unaligned, /* ON => an RTS acknowledgement record should be sent */ 2 flags aligned, 3 suspend_all_output bit (1) unaligned, /* ON => don't send any output at all to foreign side */ 3 suspend_all_input bit (1) unaligned, /* ON => foreign side should send no input: this flag is only set while multiplexer is loaded but not started */ 3 send_output bit (1) unaligned, /* ON => have permission to send data to FNP */ 3 input_available bit (1) unaligned, /* ON => input is being held for us by our parent */ 3 output_in_progress bit (1) unaligned, /* ON => a data block is being sent to the FNP */ 3 first_foreign_block bit (1) unaligned, /* ON => first block yet to arrive from foreign side; when it does, accept it's block count without question */ 3 reset_local_block_count bit (1) unaligned, /* ON => set local block count to known value in next block */ 3 retry_transmit_output bit (1) unaligned, /* ON => write to the parent failed: lack of room */ 3 retry_process_output bit (1) unaligned, /* ON => call to process_output_block failed: lack of room */ 3 retry_process_loopback_records bit (1) unaligned, /* ON => call to process_loopback_records failed: no room */ 3 retry_process_input bit (1) unaligned, /* ON => call to process_input_block failed: lack of room */ 3 pad bit (25) unaligned, 2 time_mpx_booted fixed binary (71), /* date/time when multiplexer completed loading */ 2 time_meters_copied fixed binary (71), /* date/time multiplexer meters were last saved */ 2 meters like hasp_mpx_meters, /* interesting events */ 2 saved_meters_ptr pointer, /* -> hasp_mpx_meters structure for copy_meters order */ 2 console_hste_idx fixed binary, /* index of sub-channel data for operator's console */ 2 n_subchannels fixed binary, /* # of sub-channels configured in this multiplexer */ 2 subchannels (hmd_n_subchannels refer (hmd.n_subchannels)) like hste; dcl hmd_ptr pointer; dcl hmd_n_subchannels fixed binary; /* to allocate hmd structure */ dcl (HMD_DOWN initial (1), /* multiplexer is down */ HMD_LOADING initial (2), /* multiplexer is being loaded */ HMD_LOADED initial (3), /* multiplexer has been successfully loaded */ HMD_STARTED initial (4)) /* multiplexer has been started (will dialup sub-channels) */ fixed binary static options (constant); dcl (HMD_SEND_SIGNON initial (1), /* multiplexer waiting to transmit a SIGNON record */ HMD_WAIT_SIGNON_RESPONSE initial (2), /* multiplexer is waiting for remote system's response */ HMD_NORMAL initial (3), /* normal data transfer */ HMD_SEND_SYNC_BLOCK initial (4), /* multiplexer must send special block to FNP to cause the FNP to stop loopback process */ HMD_LOOPBACK initial (5), /* FNP is returning previous output of multiplexer */ HMD_REPROCESS initial (6), /* multiplexer is making initial pass over records loopbacked by FNP: records are being rewritten or saved */ HMD_SEND_BAD_BCB_BLOCK initial (7), /* multiplexer must send bad BCB block on next SEND OUTPUT */ HMD_HANGUP_LINE initial (8)) /* multiplexer must hangup the line on next SEND OUTPUT */ fixed binary static options (constant); /* HASP sub-channel data */ dcl 1 hste aligned based (hste_ptr), 2 name character (8) unaligned, /* name of device excluding name of multiplexer */ 2 subchannel_idx fixed binary, /* index of this entry in hmd.subchannels array */ 2 device_type fixed binary, /* type of device -- console/reader/printer/punch */ 2 direction fixed binary, /* direction of transfers permitted */ 2 devx fixed binary, /* channel (LCT) index of this subchannel */ 2 rcb character (1) unaligned, /* the RCB for this sub-channel */ 2 device_wab_idx fixed binary, /* index in wait-a-bit arrays for this device */ 2 dialup_info aligned like dialup_info, /* information for DIALUP interrupt */ 2 state fixed binary, /* state of sub-channel -- hungup/listening/dialed */ 2 minor_state fixed binary, /* clarification of dialed-up state -- normal/send-rts/wait-ack */ 2 next_subchannel_for_output fixed binary, /* # of next sub-channel to receive SEND OUTPUT after us */ 2 input, /* input records waiting to be supplied to user ring */ 3 n_records fixed binary, /* ... # of records in the chain */ 3 first_bufferp pointer, /* ... -> first buffer in chain: individual records are separated by buffer.break */ 3 last_bufferp pointer, /* ... -> last buffer in chain */ 2 loopback, /* loopbacked records waiting to be transmitted */ 3 n_records fixed binary, /* ... # of records (not used) */ 3 first_bufferp pointer, 3 last_bufferp pointer, 2 output, /* partial output record taken from tty_write to allow ... */ 3 first_bufferp pointer, /* ... MCS to request yet more output from the user */ 3 last_bufferp pointer, 2 flags aligned, 3 requested_input bit (1) unaligned, /* ON => read called with no input available: send interrupt when some becomes available */ 3 input_available bit (1) unaligned, /* ON => some input is present in an as yet not completely processed block: send this sub-channel an interrupt */ 3 holding_output bit (1) unaligned, /* ON => write called but not all output taken: send interrupt when more output may be processed */ 3 pad bit (33) unaligned, 2 meters like hasp_subchannel_meters, /* interesting events for this subchannel */ 2 saved_meters_ptr pointer; /* -> hasp_subchannel_meters structure for copy_meters call */ dcl hste_ptr pointer; dcl (HSTE_HUNGUP initial (1), /* sub-channel is hungup */ HSTE_LISTENING initial (2), /* sub-channel is waiting for a dialup from major channel */ HSTE_DIALED initial (3)) /* sub-channel is dialed-up and capable of data transfer under the control of the following minor states */ fixed binary static options (constant); dcl (HSTE_NORMAL initial (1), /* sub-channel is in normal data transfer */ HSTE_SEND_RTS initial (2), /* sub-channel needs to request permission from foreign side to transmit a file */ HSTE_WAIT_RTS_ACK initial (3)) /* sub-channel is waiting for permission from foreign side */ fixed binary static options (constant); dcl (HSTE_INPUT_OUTPUT initial (0), /* device can perform input and output */ HSTE_INPUT_ONLY initial (1), /* device can perform input only */ HSTE_OUTPUT_ONLY initial (2)) /* device can perform output only */ fixed binary static options (constant); /* Data required to transmit a SIGNON record to the remote host */ dcl 1 hmd_signon_data aligned based (hsd_ptr), 2 processid bit (36), /* process to be informed of results */ 2 pad bit (36), 2 event_channel fixed binary (71), /* IPC event channel on which signal is sent */ 2 record character (80) unaligned; /* the actual SIGNON record */ dcl hsd_ptr pointer; /* HASP minor state stack entry */ dcl 1 msse aligned based (msse_ptr), 2 previous pointer, /* -> prior entry on the stack */ 2 minor_state fixed binary, /* minor state of multiplexer when this entry created */ 2 subchannels (hmd.n_subchannels), 3 loopback, /* subchannel's loopback chain when this entry created */ 4 n_records fixed binary, 4 first_bufferp pointer, 4 last_bufferp pointer; dcl msse_ptr pointer; /* HASP loopback block chain stack entry */ dcl 1 lbcse aligned based (lbcse_ptr), 2 previous pointer, /* -> previous entry on the stack */ 2 loopback, /* loopback block chain when this entry was created */ 3 first_bufferp pointer, 3 last_bufferp pointer; dcl lbcse_ptr pointer; /* END INCLUDE FILE ... hasp_mpx_data.incl.pl1 */ */ ----------------------------------------------------------- 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 */