01/16/85 ipc_ The Multics system supports an interprocess communication facility. The basic purpose of the facility is to provide control communication (by means of stop and go signals) between processes. The ipc_ subroutine is the user's interface to the Multics interprocess communication facility where a process establishes event channels in the current protection ring and waits for an event on one or more channels. For information on event channels, type "help event_channel.gi". Entry points in ipc_: (List is generated by the help command) :Entry: block: 10/22/82 ipc_$block Function: This entry point blocks the user's process until one or more of a specified list of events has occurred. Syntax: declare ipc_$block entry (ptr, ptr, fixed bin(35)); call ipc_$block (event_wait_list_ptr, event_wait_info_ptr, code); Arguments: event_wait_list_ptr is a pointer to the event_wait_list structure that specifies the channels on which events are being awaited. (Input) This structure is declared in event_wait_list.incl.pl1. Frequently ipc_$block is called with only one channel in the wait list. In this case, the event_wait_channel structure can be used (declared in event_wait_channel.incl.pl1). event_wait_info_ptr is a pointer to the event_wait_info structure into which the ipc_$block entry point can put information about the event that caused it to return (i.e., that awakened the process). This structure is declared in event_wait_info.incl.pl1. (Input) code is a standard status code. (Output) :Entry: create_ev_chn: 10/22/82 ipc_$create_ev_chn Function: This entry point creates an event-wait channel in the current ring. Syntax: declare ipc_$create_ev_chn entry (fixed bin(71), fixed bin(35)); call ipc_$create_ev_chn (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Input) code is a standard status code. (Output) :Entry: cutoff: 01/16/85 ipc_$cutoff Function: This entry point inhibits the reading of events on a specified event channel. Any pending events are not affected. More can be received, but do not cause the process to wake up. Syntax: declare ipc_$cutoff entry (fixed bin(71), fixed bin(35)); call ipc_$cutoff (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Output) code is a standard status code. (Output) :Entry: decl_event_call_chn: 10/22/82 ipc_$decl_event_call_chn Function: This entry point changes an event-wait channel into an event-call channel. Syntax: declare ipc_$decl_event_call_chn entry (fixed bin(71), entry, ptr, fixed bin, fixed bin(35)); call ipc_$decl_event_call_chn (channel_id, call_chn_procedure, data_ptr, priority, code); Arguments: channel_id is the identifier of the event channel. (Input) call_chn_procedure is the procedure entry point invoked when an event occurs on the specified channel. (Input) The procedure is called with one argument, a pointer to the event_call_info structure which is declared in event_call_info.incl.pl1. Type "help event_channel.gi" for details. data_ptr is a pointer to a region where data to be passed to and interpreted by that procedure entry point is placed. (Input) priority is a number indicating the priority of this event-call channel as compared to other event-call channels declared by this process for this ring. If, upon interrogating all the appropriate event-call channels, more than one is found to have received an event, the lowest-numbered priority is honored first, and so on. (Input) code is a standard status code. (Output) :Entry: decl_ev_wait_chn: 10/22/82 ipc_$decl_ev_wait_chn Function: This entry point changes an event-call channel into an event-wait channel. Syntax: declare ipc_$decl_ev_wait_chn entry (fixed bin(71), fixed bin(35)); call ipc_$decl_ev_wait_chn (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Output) code is a standard status code. (Output) :Entry: delete_ev_chn: 10/22/82 ipc_$delete_ev_chn Function: This entry point destroys an event channel previously created by the process. Syntax: declare ipc_$delete_ev_chn entry (fixed bin(71), fixed bin(35)); call ipc_$delete_ev_chn (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Output) code is a standard status code. (Output) :Entry: drain_chn: 10/22/82 ipc_$drain_chn Function: This entry point resets an event channel so that any pending events (i.e., events that have been received but not processed for that channel) are removed. Syntax: declare ipc_$drain_chn entry (fixed bin(71), fixed bin(35)); call ipc_$drain_chn (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Output) code is a standard status code. (Output) :Entry: mask_ev_calls: 10/22/82 ipc_$mask_ev_calls Function: This entry point causes the ipc_$block entry point to completely ignore event-calls occurring in the user's ring at the time of this call. This call causes a mask counter to be incremented. Event calls are masked if this counter is greater than zero. Syntax: declare ipc_$mask_ev_calls entry (fixed bin(35)); call ipc_$mask_ev_calls (code); Arguments: code is a standard status code. (Output) :Entry: read_ev_chn: 10/22/82 ipc_$read_ev_chn Function: This entry point reads the information about an event on a specified channel if the event has occurred. Syntax: declare ipc_$read_ev_chn entry (fixed bin(71), fixed bin, ptr, fixed bin(35)); call ipc_$read_ev_chn (channel_id, ev_occurred, event_wait_info_ptr, code); Arguments: channel_id is the identifier of the event channel. (Input) ev_occurred indicates whether an event occurred on the specified channel. (Output) 0 no event occurred 1 an event occurred event_wait_info_ptr is a pointer to the event_wait_info structure into which the ipc_$block entry point can put information about the event that caused it to return (i.e., that awakened the process). This structure is declared in event_wait_info.incl.pl1. (Input) code is a standard status code. (Output) :Entry: reconnect: 10/22/82 ipc_$reconnect Function: This entry point enables the reading of events on a specified event channel for which reading had previously been inhibited (using the ipc_$cutoff entry point). All pending signals, whether received before or during the time reading was inhibited, are henceforth available for reading. Syntax: declare ipc_$reconnect entry (fixed bin(71), fixed bin(35)); call ipc_$reconnect (channel_id, code); Arguments: channel_id is the identifier of the event channel. (Output) code is a standard status code. (Output) :Entry: set_call_prior: 10/22/82 ipc_$set_call_prior Function: This entry point causes event-call channels to be given priority over event-wait channels when several channels are being interrogated; e.g., upon return from being blocked and waiting on any of a list of channels. Only event channels in the current ring are affected. By default, event-call channels have priority. Syntax: declare ipc_$set_call_prior entry (fixed bin(35)); call ipc_$set_call_prior (code); Arguments: code is a standard status code. (Output) :Entry: set_wait_prior: 10/22/82 ipc_$set_wait_prior Function: This entry point causes event-wait channels to be given priority over event-call channels when several channels are being interrogated; e.g., when a process returns from being blocked and is waiting on any of a list of channels. Only event channels in the current ring are affected. Syntax: declare ipc_$set_wait_prior entry (fixed bin(35)); call ipc_$set_wait_prior (code); Arguments: code is a standard status code. (Output) :Entry: unmask_ev_calls: 10/22/82 ipc_$unmask_ev_calls Function: This entry point causes the event-call mask counter to be decremented. Event calls remain masked as long as the counter is greater than zero. To force event calls to become unmasked, call this entry point repeatedly, until a nonzero code is returned. Syntax: declare ipc_$unmask_ev_calls entry (fixed bin(35)); call ipc_$unmask_ev_calls (code); Arguments: code is a standard status code. A nonzero code is returned if event calls were not masked at the time of the call. (Output) ----------------------------------------------------------- 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