COMPILATION LISTING OF SEGMENT upd_subtask_ Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-17_1931.15_Mon_mdt 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 upd_subtask_: procedure (ctlw, areap, parentp, acode, asev, taskp, seqno, listp, temp) 12 options ( rename (( alloc_, smart_alloc_)) ); 13 14 15 /* 16* 17* This procedure is the subtask dispatcher for the Multics Online Updater. 18* If the task list supplied at "listp" is not empty, upd_subtask_ will add 19* a task call to itself to the task list, specifying a lower-level sublist, 20* will establish a condition handler for the "thread_task_" condition, which 21* will cause all subtasks generated while processing the task list to be 22* inserted into this sublist, and will call upd_task_ to invoke all tasks 23* in the list. The control word is masked to eliminate all immediate-call 24* bits for subtasks. 25* 26* P. Bos, June 1972 27* 28**/ 29 30 dcl ctlw bit(36) aligned, /* task control word */ 31 areap ptr, /* pointer to caller area */ 32 parentp ptr, /* pointer to caller's arglist */ 33 acode fixed bin(35), /* status code (not used here) */ 34 asev fixed bin, /* severity code (not used here) */ 35 taskp ptr, /* task pointer for this call */ 36 seqno fixed bin, /* task sequence number for all upd_subtask_ tasks */ 37 listp ptr, /* pointer to first task in list to be processed */ 38 temp ptr; /* pointer to "t" structure (initially null) */ 39 40 dcl condition_ entry (char(*), entry), 41 cu_$arg_list_ptr entry (ptr), 42 upd_add_task_ entry (char(*), ptr), 43 upd_gen_call_ entry (ptr, ptr), 44 upd_task_ entry (bit(1), ptr, entry, ptr); 45 46 dcl upd_subtask_ entry (bit(36) aligned, ptr, ptr, fixed bin(35), fixed bin, ptr, fixed bin, 47 ptr, ptr); 48 49 dcl (addr, null) builtin; 50 51 dcl (argp, cp, tp) ptr; /* arglist pointer, control word pointer, temp copy */ 52 53 dcl xctl bit(36) aligned; /* subtask control word */ 54 55 dcl area area based (areap); /* caller-supplied area */ 56 57 dcl 1 c aligned based (cp), /* exploded control word */ 58 (2 rsw bit(1), /* non-zero if in reverse mode */ 59 2 tasksw bit(1), /* non-zero if to set up task */ 60 2 compsw bit(1), /* non-zero if compile-only task */ 61 2 runsw bit(1), /* non-zero if call to be processed immediately */ 62 2 trunsw bit(1), /* non-zero if subtask list to be processed */ 63 2 logsw bit(1), /* non-zero if in print mode */ 64 2 errsw bit(1)) unal; /* non-zero if to print error tasks only */ 65 66 /* */ 67 68 dcl 1 t aligned based (tp), /* super-static storage */ 69 (2 argp ptr, /* copy of "argp" */ 70 2 taskp ptr, /* task pointer for subtask */ 71 2 listp ptr, /* task sublist pointer */ 72 2 temp ptr) init (null), /* "temp" for subtask */ 73 2 subsw bit(1) aligned init ("0"b); /* non-zero if subtask allocated */ 74 75 76 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 77 78 79 call cu_$arg_list_ptr (argp); /* get arglist pointer */ 80 cp = addr (ctlw); /* and control word pointer */ 81 if c.tasksw then /* is this allocate call? */ 82 call upd_add_task_("upd_subtask_", argp); /* yes, go make a task */ 83 if temp = null then do; /* have we gotten temps yet? */ 84 allocate t in (area); /* no, go do it */ 85 temp = tp; /* and have caller save pointer for us */ 86 end; 87 else /* yes we did */ 88 tp = temp; /* restore pointer */ 89 90 xctl = ctlw & "10101"b; /* mask unwanted bits from control word */ 91 if (xctl & "00101"b) then do; /* anything left? */ 92 t.argp = argp; /* yes, put arglist pointer in static */ 93 if ^t.subsw then if listp ^= null then do; /* need to allocate subtask? */ 94 call upd_subtask_("01"b, areap, t.argp, acode, asev, t.taskp, seqno, t.listp, t.temp); 95 t.subsw = "1"b; /* don't keep doing it */ 96 end; 97 call condition_("thread_task_", thread_task); /* set up somebody to catch generated tasks */ 98 call upd_task_(c.rsw, listp, upd_gen_call_, addr (xctl)); /* process list */ 99 end; 100 101 return; /* finished */ 102 103 104 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 105 106 107 thread_task: procedure (mcp, name, wcp, taskp, csw); /* handler for "thread_task_" condition */ 108 109 110 dcl mcp ptr, /* machine condition pointer */ 111 name char(*), /* condition name */ 112 wcp ptr, /* wall-crossing pointer */ 113 taskp ptr, /* "info_ptr", points to allocated task */ 114 csw bit(1) aligned; /* continue switch */ 115 116 dcl upd_thread_task_ entry (ptr, ptr); 117 118 119 call upd_thread_task_(t.listp, taskp); /* thread task onto current list */ 120 return; /* that's all */ 121 122 end thread_task; 123 124 125 end upd_subtask_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/17/00 1931.1 upd_subtask_.pl1 >udd>sm>ds>w>ml>upd_subtask_.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. acode parameter fixed bin(35,0) dcl 30 set ref 11 94* addr builtin function dcl 49 ref 80 98 98 area based area(1024) dcl 55 ref 84 areap parameter pointer dcl 30 set ref 11 84 94* argp based pointer initial level 2 in structure "t" dcl 68 in procedure "upd_subtask_" set ref 84* 92* 94* argp 000100 automatic pointer dcl 51 in procedure "upd_subtask_" set ref 79* 81* 92 asev parameter fixed bin(17,0) dcl 30 set ref 11 94* c based structure level 1 dcl 57 condition_ 000012 constant entry external dcl 40 ref 97 cp 000102 automatic pointer dcl 51 set ref 80* 81 98 csw parameter bit(1) dcl 110 ref 107 ctlw parameter bit(36) dcl 30 set ref 11 80 90 cu_$arg_list_ptr 000014 constant entry external dcl 40 ref 79 listp 4 based pointer initial level 2 in structure "t" dcl 68 in procedure "upd_subtask_" set ref 84* 94* 119* listp parameter pointer dcl 30 in procedure "upd_subtask_" set ref 11 93 98* mcp parameter pointer dcl 110 ref 107 name parameter char packed unaligned dcl 110 ref 107 null builtin function dcl 49 ref 83 84 84 84 84 93 parentp parameter pointer dcl 30 ref 11 rsw based bit(1) level 2 packed packed unaligned dcl 57 set ref 98* seqno parameter fixed bin(17,0) dcl 30 set ref 11 94* subsw 10 based bit(1) initial level 2 dcl 68 set ref 84* 93 95* t based structure level 1 dcl 68 set ref 84 taskp parameter pointer dcl 110 in procedure "thread_task" set ref 107 119* taskp 2 based pointer initial level 2 in structure "t" dcl 68 in procedure "upd_subtask_" set ref 84* 94* taskp parameter pointer dcl 30 in procedure "upd_subtask_" ref 11 tasksw 0(01) based bit(1) level 2 packed packed unaligned dcl 57 ref 81 temp 6 based pointer initial level 2 in structure "t" dcl 68 in procedure "upd_subtask_" set ref 84* 94* temp parameter pointer dcl 30 in procedure "upd_subtask_" set ref 11 83 85* 87 tp 000104 automatic pointer dcl 51 set ref 84* 85 87* 92 93 94 94 94 94 95 119 upd_add_task_ 000016 constant entry external dcl 40 ref 81 upd_gen_call_ 000020 constant entry external dcl 40 ref 98 98 upd_subtask_ 000024 constant entry external dcl 46 ref 94 upd_task_ 000022 constant entry external dcl 40 ref 98 upd_thread_task_ 000026 constant entry external dcl 116 ref 119 wcp parameter pointer dcl 110 ref 107 xctl 000106 automatic bit(36) dcl 53 set ref 90* 91 98 98 NAMES DECLARED BY EXPLICIT CONTEXT. thread_task 000257 constant entry internal dcl 107 ref 97 97 upd_subtask_ 000027 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 430 460 311 440 Length 636 311 30 141 117 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME upd_subtask_ 110 external procedure is an external procedure. thread_task 72 internal procedure is assigned to an entry variable. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME upd_subtask_ 000100 argp upd_subtask_ 000102 cp upd_subtask_ 000104 tp upd_subtask_ 000106 xctl upd_subtask_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry int_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. condition_ cu_$arg_list_ptr smart_alloc_ upd_add_task_ upd_gen_call_ upd_subtask_ upd_task_ upd_thread_task_ NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000020 79 000034 80 000042 81 000045 83 000072 84 000077 85 000124 86 000126 87 000127 90 000132 91 000136 92 000140 93 000142 94 000151 95 000202 97 000205 98 000231 101 000255 107 000256 119 000272 120 000305 ----------------------------------------------------------- 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