COMPILATION LISTING OF SEGMENT unthread_descriptor_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 03/13/85 1133.2 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 unthread_descriptor_: proc (a_ptr); 12 13 /* A little procedure to unthread request descriptors */ 14 /* Modified: February 26, 1985 by C. Marker to use version 5 message segments */ 15 16 dcl a_ptr ptr; 17 18 dcl desc_ptr ptr; 19 20 dcl prev_ptr ptr; 21 dcl prev_off fixed bin (18); 22 23 dcl next_ptr ptr; 24 dcl next_off fixed bin (18); 25 26 dcl based_offset fixed bin (18) based; 27 28 dcl ptr builtin; 29 30 /* */ 31 32 desc_ptr = a_ptr; 33 34 next_off = desc_ptr -> request_descriptor.next_done; 35 prev_off = desc_ptr -> request_descriptor.prev_done; 36 37 if prev_off = 0 then do; /* this was first on list */ 38 iodc_static.first_req_done = next_off; 39 iodc_static.save_first_req_p -> based_offset = next_off; 40 end; 41 42 else do; 43 prev_ptr = ptr (desc_ptr, prev_off); 44 prev_ptr -> request_descriptor.next_done = next_off; 45 end; 46 47 if next_off ^= 0 then do; 48 next_ptr = ptr (desc_ptr, next_off); 49 next_ptr -> request_descriptor.prev_done = prev_off; 50 end; 51 52 else iodc_static.last_req_done = prev_off; 53 54 return; 55 56 57 init: entry (a_ptr); 58 59 stat_p = a_ptr; 60 return; 61 62 /* */ 63 1 1 /* BEGIN INCLUDE FILE...iodc_static.incl.pl1 */ 1 2 1 3 dcl stat_p ptr int static init(null); 1 4 1 5 dcl 1 iodc_static aligned based(stat_p), 1 6 2 dctp ptr, /* pointer to device class table */ 1 7 2 qgtp ptr, /* pointer to queue group table */ 1 8 2 wait_list_ptr ptr, /* pointer to waiting list segment */ 1 9 2 req_seg_ptr ptr, /* pointer to base of request segment */ 1 10 2 descr_seg_ptr ptr, /* pointer to base of request descriptor segment */ 1 11 2 save_first_req_p ptr, /* pointer to req_desc_seg.first_saved */ 1 12 2 first_req_done fixed bin(18), /* offset of first descriptor on "saved" list */ 1 13 2 last_req_done fixed bin(18), /* offset of last descriptor on "saved" list */ 1 14 2 time_interval fixed bin(71), /* time interval to elapse between completion */ 1 15 /* and deletion of request */ 1 16 2 max_q fixed bin, /* maximum number of priority queues */ 1 17 2 timer_chan fixed bin(71); /* event channel for timer wakeups */ 1 18 1 19 dcl req_area area(131096) based(iodc_static.req_seg_ptr); 1 20 1 21 dcl 1 req_desc_seg aligned based (iodc_static.descr_seg_ptr), 1 22 2 first_saved fixed bin(18), /* offset of head of saved list */ 1 23 2 pad fixed bin, 1 24 2 descr_area area (65560); /* area where request descriptors are allocated */ 1 25 1 26 /* END INCLUDE FILE...iodc_static.incl.pl1 */ 64 65 2 1 /* BEGIN INCLUDE FILE . . . mseg_message_info.incl.pl1 BIM 1984-10-10 */ 2 2 /* format: style3,idind30 */ 2 3 2 4 /* structure returned when message is read from a message segment */ 2 5 2 6 2 7 dcl mseg_message_info_ptr pointer; 2 8 2 9 dcl 1 mseg_message_info based (mseg_message_info_ptr) aligned, 2 10 2 version char (8) aligned, 2 11 2 message_code fixed bin, 2 12 2 control_flags unaligned, 2 13 3 own bit (1), 2 14 3 delete bit (1), 2 15 3 pad bit (34), 2 16 2 ms_ptr ptr, /* pointer to message */ 2 17 2 ms_len fixed bin (24), /* length of message in bits */ 2 18 2 ms_id bit (72), /* unique ID of message */ 2 19 /* input in some cases */ 2 20 2 ms_access_class bit (72), /* message access class */ 2 21 2 sender_id char (32) unaligned,/* process-group ID of sender */ 2 22 2 sender_process_id bit (36) aligned, /* if nonzero, process that sent */ 2 23 2 sender_level fixed bin, /* validation level of sender */ 2 24 2 sender_authorization bit (72), /* access authorization of message sender */ 2 25 2 sender_max_authorization bit (72), /* max authorization of sending process */ 2 26 2 sender_audit bit (36) aligned; /* audit flags */ 2 27 2 28 declare MSEG_MESSAGE_INFO_V1 char (8) aligned init ("msegmi01") int static options (constant); 2 29 2 30 declare ( 2 31 MSEG_READ_FIRST init (1), 2 32 MSEG_READ_LAST init (2), 2 33 MSEG_READ_SPECIFIED init (3), 2 34 MSEG_READ_BEFORE_SPECIFIED init (4), 2 35 MSEG_READ_AFTER_SPECIFIED init (5)) 2 36 fixed bin int static options (constant); 2 37 2 38 declare (MSEG_READ_OWN init ("1"b), 2 39 MSEG_READ_DELETE init ("01"b) 2 40 ) bit (36) aligned internal static options (constant); 2 41 2 42 /* END INCLUDE FILE . . . mseg_message_info.incl.pl1 */ 66 67 3 1 /* BEGIN INCLUDE FILE...request_descriptor.incl.pl1 */ 3 2 3 3 /* Descriptor associated with an I/O daemon request */ 3 4 /* Coded August 1973 by Robert S. Coren */ 3 5 /* Modified by J. C. Whitmore, 5/78, to extend driver_data to 7 words */ 3 6 /* Modified by C. Marker, 2/23/85, changed to use mseg_message_info */ 3 7 3 8 dcl 1 request_descriptor based aligned, 3 9 2 mseg_message_info_copy like mseg_message_info, 3 10 2 seq_id fixed bin(35), /* sequential number assigned by coordinator */ 3 11 2 q fixed bin, /* priority queue in which request was submitted */ 3 12 2 contd_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of continued request */ 3 13 2 prev_seq_id fixed bin(35), /* if nonzero, this is previous seq_id of restarted request */ 3 14 2 dev_class_index fixed bin, /* index of device_class entry */ 3 15 2 spare_fb fixed bin (17) unal, /* save half a word for later */ 3 16 2 charge_q fixed bin (17) unal, /* priority to use for charging */ 3 17 2 time_done fixed bin(71), /* clock time when request was completed */ 3 18 2 prev_done fixed bin(18), /* descriptor threaded ahead of this one in saved list */ 3 19 2 next_done fixed bin(18), /* " " behind " " " */ 3 20 2 driver_data bit(252), /* driver maintained data */ 3 21 2 flags, 3 22 (3 continued, /* unfinished by one driver and given to another */ 3 23 3 finished, 3 24 3 restarted, 3 25 3 cancelled, 3 26 3 dont_delete, 3 27 3 saved, /* not to be freed */ 3 28 3 keep_in_queue, /* keep request in queue */ 3 29 3 series_restart, /* this request is part of restarted series */ 3 30 3 priority_request) bit (1) unal, /* this request was given extra priority */ 3 31 3 pad bit(27) unal, 3 32 2 next_pending fixed bin(18); /* thread to next pending descriptor */ 3 33 3 34 /* END INCLUDE FILE...request_descriptor.incl.pl1 */ 68 69 70 end unthread_descriptor_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/13/85 1025.6 unthread_descriptor_.pl1 >spec>on>41-11>unthread_descriptor_.pl1 64 1 09/28/78 1359.8 iodc_static.incl.pl1 >ldd>include>iodc_static.incl.pl1 66 2 01/10/85 2002.8 mseg_message_info.incl.pl1 >ldd>include>mseg_message_info.incl.pl1 68 3 03/12/85 1556.6 request_descriptor.incl.pl1 >spec>on>41-11>request_descriptor.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. a_ptr parameter pointer dcl 16 ref 11 32 57 59 based_offset based fixed bin(18,0) dcl 26 set ref 39* desc_ptr 000100 automatic pointer dcl 18 set ref 32* 34 35 43 48 first_req_done 14 based fixed bin(18,0) level 2 dcl 1-5 set ref 38* iodc_static based structure level 1 dcl 1-5 last_req_done 15 based fixed bin(18,0) level 2 dcl 1-5 set ref 52* mseg_message_info based structure level 1 dcl 2-9 next_done 43 based fixed bin(18,0) level 2 dcl 3-8 set ref 34 44* next_off 000110 automatic fixed bin(18,0) dcl 24 set ref 34* 38 39 44 47 48 next_ptr 000106 automatic pointer dcl 23 set ref 48* 49 prev_done 42 based fixed bin(18,0) level 2 dcl 3-8 set ref 35 49* prev_off 000104 automatic fixed bin(18,0) dcl 21 set ref 35* 37 43 49 52 prev_ptr 000102 automatic pointer dcl 20 set ref 43* 44 ptr builtin function dcl 28 ref 43 48 request_descriptor based structure level 1 dcl 3-8 save_first_req_p 12 based pointer level 2 dcl 1-5 ref 39 stat_p 000010 internal static pointer initial dcl 1-3 set ref 38 39 52 59* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. MSEG_MESSAGE_INFO_V1 internal static char(8) initial dcl 2-28 MSEG_READ_AFTER_SPECIFIED internal static fixed bin(17,0) initial dcl 2-30 MSEG_READ_BEFORE_SPECIFIED internal static fixed bin(17,0) initial dcl 2-30 MSEG_READ_DELETE internal static bit(36) initial dcl 2-38 MSEG_READ_FIRST internal static fixed bin(17,0) initial dcl 2-30 MSEG_READ_LAST internal static fixed bin(17,0) initial dcl 2-30 MSEG_READ_OWN internal static bit(36) initial dcl 2-38 MSEG_READ_SPECIFIED internal static fixed bin(17,0) initial dcl 2-30 mseg_message_info_ptr automatic pointer dcl 2-7 req_area based area(131096) dcl 1-19 req_desc_seg based structure level 1 dcl 1-21 NAMES DECLARED BY EXPLICIT CONTEXT. init 000051 constant entry external dcl 57 unthread_descriptor_ 000004 constant entry external dcl 11 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 120 132 64 130 Length 350 64 12 202 34 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME unthread_descriptor_ 73 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 stat_p unthread_descriptor_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME unthread_descriptor_ 000100 desc_ptr unthread_descriptor_ 000102 prev_ptr unthread_descriptor_ 000104 prev_off unthread_descriptor_ 000106 next_ptr unthread_descriptor_ 000110 next_off unthread_descriptor_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. return ext_entry NO EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000001 32 000011 34 000015 35 000017 37 000021 38 000022 39 000025 40 000026 43 000027 44 000032 47 000034 48 000035 49 000040 50 000042 52 000043 54 000046 57 000047 59 000056 60 000063 ----------------------------------------------------------- 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