COMPILATION LISTING OF SEGMENT memo_get_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 08/08/86 1403.6 mst Fri 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 12 13 /****^ HISTORY COMMENTS: 14* 1) change(86-07-15,Rauschelbach), approve(86-07-15,MCR7472), 15* audit(86-08-05,GJohnson), install(86-08-08,MR12.0-1122): 16* Changed the non-existant error_table_$incorrect_version to 17* error_table_$unimplemented_version. 18* END HISTORY COMMENTS */ 19 20 21 memo_get_: proc (P_msp, P_idx, P_memo_info_ptr, P_code); 22 23 /* * This procedure fills in a memo_info structure describing the selected memo in 24* * the memo segment pointed to by P_msp. If the selected (by P_idx) memo is not 25* * in use, P_code is set to error_table_$action_not_performed. 26* * 27* * This procedure is not now used by any code in memo. It is also not retained in 28* * bound_memo_, but is preserved here to illustrate the possible interface for 29* * future enhancements., 30* * 31* * June, 1979, W. Olin Sibert 32* */ 33 34 dcl (P_msp pointer, 35 P_idx fixed bin, 36 P_memo_info_ptr pointer, 37 P_code fixed bin (35)); 38 39 dcl 1 v3_memo_seg aligned like memo_segment_v3 based (memo_segment_ptr); 40 dcl 1 v1_memo_info aligned like memo_info based (memo_info_ptr); 41 42 dcl idx fixed bin; 43 dcl exp_delta fixed bin (35); 44 dcl exp_delta_string_ptr pointer; 45 dcl exp_delta_string char (32) based (exp_delta_string_ptr); 46 dcl system_area_ptr pointer internal static init (null ()); 47 dcl system_area area based (system_area_ptr); 48 49 dcl get_system_free_area_ entry () returns (ptr); 50 dcl ioa_$rsnnl entry options (variable); 51 dcl memo_util_$to_gmt entry (fixed bin (35)) returns (fixed bin (71)); 52 53 dcl (error_table_$action_not_performed, 54 error_table_$unimplemented_version) fixed bin (35) external static; 55 56 dcl NULL_STRING char (4) aligned internal static options (constant) init (""); 57 dcl LARGE fixed bin (35) internal static options (constant) init (1000000000); 58 59 dcl (addr, divide, length, max, null, rtrim, string, unspec) builtin; 60 61 /* */ 62 63 memo_segment_ptr = P_msp; 64 memo_info_ptr = P_memo_info_ptr; 65 idx = P_idx; 66 67 if memo_info.version ^= MEMO_INFO_VERSION_1 then do; 68 P_code = error_table_$unimplemented_version; 69 return; 70 end; 71 72 if memo_segment.version ^= MEMO_SEGMENT_VERSION_3 then do; 73 INCORRECT_VERSION: 74 P_code = error_table_$unimplemented_version; 75 return; 76 end; 77 78 if idx < 1 | idx > memo_segment.max_number_used then do; 79 MEMO_NOT_IN_USE: 80 P_code = error_table_$action_not_performed; 81 return; 82 end; 83 84 if v3_memo_seg.memo_entry_v3 (idx).taken = ""b then goto MEMO_NOT_IN_USE; 85 86 if memo_info.version = MEMO_INFO_VERSION_1 then do; /* now, initialize the memo_info, and fill it in */ 87 unspec (v1_memo_info) = ""b; /* start with zeros, of course */ 88 89 if memo_segment.version = MEMO_SEGMENT_VERSION_3 then do; 90 v1_memo_info.class_name.ptr = addr (NULL_STRING); /* some null strings for unimplemented features */ 91 v1_memo_info.repeat_count = LARGE; 92 string (v1_memo_info.flags) = string (v3_memo_seg.memo_entry_v3 (idx).flags); 93 94 v1_memo_info.data_string.ptr = addr (v3_memo_seg.memo_entry_v3 (idx).data); 95 v1_memo_info.data_string.lth = length (rtrim (v3_memo_seg.memo_entry_v3 (idx).data)); 96 97 if v3_memo_seg.memo_entry_v3 (idx).flags.repeatsw then do; /* get repeat time */ 98 v1_memo_info.repeat_string.ptr = addr (v3_memo_seg.memo_entry_v3 (idx).repeat); 99 v1_memo_info.repeat_string.lth = length (rtrim (v3_memo_seg.memo_entry_v3 (idx).repeat)); 100 end; 101 v1_memo_info.repeat_string.ptr = addr (NULL_STRING); /* otherwise, use none */ 102 103 if unspec (v3_memo_seg.memo_entry_v3 (idx).pad2) ^= ""b then do; /* old TAC expiration date mechanism */ 104 unspec (exp_delta) = unspec (v3_memo_seg.memo_entry_v3 (idx).pad2); /* this kludge supports it, */ 105 exp_delta = max (1, divide (exp_delta, 60, 34, 1)); /* causes an ever growing system_free_4_ */ 106 if system_area_ptr = null () then /* however, since this was never a real feature, it's */ 107 system_area_ptr = get_system_free_area_ (); /* probably OK to handle it this way. */ 108 allocate exp_delta_string in (system_area) set (exp_delta_string_ptr); /* we reduce it to minutes */ 109 call ioa_$rsnnl ("^dminute^[s^]", exp_delta_string, (0), /* to make it marginally more palatable */ 110 exp_delta, (exp_delta ^= 1)); 111 v1_memo_info.expiration_string.ptr = exp_delta_string_ptr; 112 v1_memo_info.expiration_string.lth = length (rtrim (exp_delta_string)); 113 end; 114 else v1_memo_info.expiration_string.ptr = addr (NULL_STRING); 115 116 v1_memo_info.maturity_time = memo_util_$to_gmt (v3_memo_seg.memo_entry_v3 (idx).time); 117 end; /* of V1 memo_info & V3 memo_segment */ 118 119 else goto INCORRECT_VERSION; 120 end; /* of V1 memo_info */ 121 122 else goto INCORRECT_VERSION; 123 124 return; /* all done */ 125 /* BEGIN INCLUDE FILE ... memo_segment.incl.pl1 ... July, 1979 ... W. Olin Sibert */ 1 2 /* * This include file describes a memo segment. Presently, this structure is still 1 3* * compatible with "old" version 3 memo segments, although it uses more of the pad 1 4* * fields; hence, it is still identified as version 3. If the conversion to version 1 5* * 4 memo segments is ever done, this will have to be changed for version 4. 1 6* */ 1 7 1 8 dcl memo_segment_ptr pointer; 1 9 1 10 dcl MAX_NUMBER_MEMOS fixed bin internal static options (constant) init (5802); 1 11 /* max number of memos in a memo segment */ 1 12 1 13 dcl MEMO_SEGMENT_VERSION_3 fixed bin internal static options (constant) init (3); 1 14 1 15 dcl 1 memo_segment aligned based (memo_segment_ptr), /* current version of whole segment */ 1 16 2 header like memo_segment_header, 1 17 2 memo_entry (MAX_NUMBER_MEMOS) like memo_segment_entry; 1 18 1 19 dcl 1 memo_segment_header aligned based, /* header for memo segment */ 1 20 2 version fixed bin (35), /* presently 3 */ 1 21 2 max_number_used fixed bin (35); /* The highest entry known to be used */ 1 22 1 23 dcl 1 memo_segment_entry aligned based, /* the entry for a single memo */ 1 24 2 taken bit (36) aligned, /* Zero if this entry free */ 1 25 2 flags aligned, /* data about this memo */ 1 26 3 print bit (1) unaligned, /* normal type memo */ 1 27 3 alarm bit (1) unaligned, /* alarm type */ 1 28 3 execute bit (1) unaligned, /* execute type */ 1 29 3 repeatsw bit (1) unaligned, /* has repeat string */ 1 30 3 expires bit (1) unaligned, /* has expiration time */ 1 31 3 remains bit (1) unaligned, /* do not delete this memo when its alarm goes off */ 1 32 3 single bit (1) unaligned, /* delete this non-alarm memo after one printing or execution */ 1 33 3 per_process bit (1) unaligned, /* causes repeat to be done from time_now, not maturity */ 1 34 3 pad1 bit (28) unaligned, /* not used */ 1 35 2 exp_delta fixed bin (35), /* delta time before memo expires */ 1 36 2 time fixed bin (35), /* time this memo matures */ 1 37 2 data char (132) aligned, /* the memo message */ 1 38 2 repeat char (32) aligned; /* the repeat string */ 1 39 1 40 /* END INCLUDE FILE memo_segment.incl.pl1 */ 125 126 /* Begin include file memo_segment_v3.incl.pl1 7 Feb 1973 */ 2 2 /* Renamed to memo_segment_v3, etc. 11/11/79 W. Olin Sibert */ 2 3 2 4 dcl 1 memo_segment_v3 aligned based, /* A memo segment */ 2 5 2 version fixed bin (35), /* Currently zero */ 2 6 2 max_number_used fixed bin (35), /* The highest entry known to be used */ 2 7 2 memo_entry_v3 (1000) aligned, /* One entry per memo */ 2 8 3 taken bit (36) aligned, /* Zero if this entry free */ 2 9 3 flags aligned, /* data about this memo */ 2 10 4 print bit (1) unaligned, /* normal type memo */ 2 11 4 alarm bit (1) unaligned, /* alarm type */ 2 12 4 execute bit (1) unaligned, /* execute type */ 2 13 4 repeatsw bit (1) unaligned, /* has repeat string */ 2 14 4 pad1 bit (32) unaligned, /* not used */ 2 15 3 pad2 bit (36) aligned, /* not used */ 2 16 3 time fixed bin (35), /* time this memo matures */ 2 17 3 data char (132) aligned, /* the memo message */ 2 18 3 repeat char (32) aligned; /* the repeat string */ 2 19 2 20 /* End include file memo_segment_v3.incl.pl1 */ 126 127 /* BEGIN INCLUDE FILE memo_info.incl.pl1 */ 3 2 3 3 dcl memo_info_ptr pointer; 3 4 3 5 dcl 1 memo_info aligned based (memo_info_ptr), /* information about a single memo */ 3 6 2 version fixed bin, /* version number of this structure */ 3 7 2 flags aligned like memo_segment_entry.flags, /* various flags, identical to those in the memo segment */ 3 8 2 maturity_time fixed bin (71), /* maturity time */ 3 9 2 repeat_count fixed bin, 3 10 2 data_string aligned, /* information about the string */ 3 11 3 ptr pointer unaligned, /* a pointer to it (see based dcls below) */ 3 12 3 lth fixed bin (21), /* and its length */ 3 13 2 repeat_string aligned, /* information about the repeat string, as above */ 3 14 3 ptr pointer unaligned, 3 15 3 lth fixed bin (21), 3 16 2 expiration_string aligned, /* information about the expiration delta string, as above */ 3 17 3 ptr pointer unaligned, 3 18 3 lth fixed bin (21), 3 19 2 class_name aligned, /* information about the class name string, as above */ 3 20 3 ptr pointer unaligned, 3 21 3 lth fixed bin (21); 3 22 3 23 /* A handful of declarations for accessing the based strings described in memo_info */ 3 24 3 25 dcl memo_data_string char (memo_info.data_string.lth) based (memo_info.data_string.ptr); 3 26 dcl memo_repeat_string char (memo_info.repeat_string.lth) based (memo_info.repeat_string.ptr); 3 27 dcl memo_expiration_string char (memo_info.expiration_string.lth) based (memo_info.expiration_string.ptr); 3 28 dcl memo_class_name char (memo_info.class_name.lth) based (memo_info.class_name.ptr); 3 29 3 30 dcl MEMO_INFO_VERSION_1 fixed bin internal static options (constant) init (1); 3 31 dcl MEMO_INFO_VERSION fixed bin internal static options (constant) init (1); 3 32 3 33 /* END INCLUDE FILE memo_info.incl.pl1 */ 127 128 129 end; /* external procedure memo_get_ */ SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/08/86 1402.6 memo_get_.pl1 >spec>install>1122>memo_get_.pl1 125 1 08/18/81 1510.4 memo_segment.incl.pl1 >ldd>include>memo_segment.incl.pl1 126 2 08/18/81 1510.4 memo_segment_v3.incl.pl1 >ldd>include>memo_segment_v3.incl.pl1 127 3 08/18/81 1510.4 memo_info.incl.pl1 >ldd>include>memo_info.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. LARGE 000000 constant fixed bin(35,0) initial dcl 57 ref 91 MEMO_INFO_VERSION_1 constant fixed bin(17,0) initial dcl 3-30 ref 67 86 MEMO_SEGMENT_VERSION_3 constant fixed bin(17,0) initial dcl 1-13 ref 72 89 NULL_STRING 000001 constant char(4) initial dcl 56 set ref 90 101 114 P_code parameter fixed bin(35,0) dcl 34 set ref 21 68* 73* 79* P_idx parameter fixed bin(17,0) dcl 34 ref 21 65 P_memo_info_ptr parameter pointer dcl 34 ref 21 64 P_msp parameter pointer dcl 34 ref 21 63 addr builtin function dcl 59 ref 90 94 98 101 114 class_name 13 based structure level 2 dcl 40 data 6 based char(132) array level 3 dcl 39 set ref 94 95 data_string 5 based structure level 2 dcl 40 divide builtin function dcl 59 ref 105 error_table_$action_not_performed 000020 external static fixed bin(35,0) dcl 53 ref 79 error_table_$unimplemented_version 000022 external static fixed bin(35,0) dcl 53 ref 68 73 exp_delta 000101 automatic fixed bin(35,0) dcl 43 set ref 104* 105* 105 109* 109 exp_delta_string based char(32) unaligned dcl 45 set ref 108 109* 112 exp_delta_string_ptr 000102 automatic pointer dcl 44 set ref 108* 109 111 112 expiration_string 11 based structure level 2 dcl 40 flags 3 based structure array level 3 in structure "memo_segment" dcl 1-15 in procedure "memo_get_" flags 1 based structure level 2 in structure "memo_segment_entry" dcl 1-23 in procedure "memo_get_" flags 1 based structure level 2 in structure "v1_memo_info" dcl 40 in procedure "memo_get_" set ref 92* flags 3 based structure array level 3 in structure "v3_memo_seg" dcl 39 in procedure "memo_get_" ref 92 get_system_free_area_ 000012 constant entry external dcl 49 ref 106 header based structure level 2 dcl 1-15 idx 000100 automatic fixed bin(17,0) dcl 42 set ref 65* 78 78 84 92 94 95 97 98 99 103 104 116 ioa_$rsnnl 000014 constant entry external dcl 50 ref 109 length builtin function dcl 59 ref 95 99 112 lth 12 based fixed bin(21,0) level 3 in structure "v1_memo_info" dcl 40 in procedure "memo_get_" set ref 112* lth 6 based fixed bin(21,0) level 3 in structure "v1_memo_info" dcl 40 in procedure "memo_get_" set ref 95* lth 10 based fixed bin(21,0) level 3 in structure "v1_memo_info" dcl 40 in procedure "memo_get_" set ref 99* maturity_time 2 based fixed bin(71,0) level 2 dcl 40 set ref 116* max builtin function dcl 59 ref 105 max_number_used 1 based fixed bin(35,0) level 3 dcl 1-15 ref 78 memo_entry_v3 2 based structure array level 2 dcl 39 memo_info based structure level 1 dcl 3-5 memo_info_ptr 000106 automatic pointer dcl 3-3 set ref 64* 67 86 87 90 91 92 94 95 98 99 101 111 112 114 116 memo_segment based structure level 1 dcl 1-15 memo_segment_entry based structure level 1 dcl 1-23 memo_segment_header based structure level 1 dcl 1-19 memo_segment_ptr 000104 automatic pointer dcl 1-8 set ref 63* 72 78 84 89 92 94 95 97 98 99 103 104 116 memo_segment_v3 based structure level 1 dcl 2-4 memo_util_$to_gmt 000016 constant entry external dcl 51 ref 116 null builtin function dcl 59 ref 106 pad2 4 based bit(36) array level 3 dcl 39 ref 103 104 ptr 11 based pointer level 3 in structure "v1_memo_info" packed unaligned dcl 40 in procedure "memo_get_" set ref 111* 114* ptr 13 based pointer level 3 in structure "v1_memo_info" packed unaligned dcl 40 in procedure "memo_get_" set ref 90* ptr 7 based pointer level 3 in structure "v1_memo_info" packed unaligned dcl 40 in procedure "memo_get_" set ref 98* 101* ptr 5 based pointer level 3 in structure "v1_memo_info" packed unaligned dcl 40 in procedure "memo_get_" set ref 94* repeat 47 based char(32) array level 3 dcl 39 set ref 98 99 repeat_count 4 based fixed bin(17,0) level 2 dcl 40 set ref 91* repeat_string 7 based structure level 2 dcl 40 repeatsw 3(03) based bit(1) array level 4 packed unaligned dcl 39 ref 97 rtrim builtin function dcl 59 ref 95 99 112 string builtin function dcl 59 set ref 92* 92 system_area based area(1024) dcl 47 ref 108 system_area_ptr 000010 internal static pointer initial dcl 46 set ref 106 106* 108 taken 2 based bit(36) array level 3 dcl 39 ref 84 time 5 based fixed bin(35,0) array level 3 dcl 39 set ref 116* unspec builtin function dcl 59 set ref 87* 103 104* 104 v1_memo_info based structure level 1 dcl 40 set ref 87* v3_memo_seg based structure level 1 dcl 39 version based fixed bin(17,0) level 2 in structure "memo_info" dcl 3-5 in procedure "memo_get_" ref 67 86 version based fixed bin(35,0) level 3 in structure "memo_segment" dcl 1-15 in procedure "memo_get_" ref 72 89 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. MAX_NUMBER_MEMOS internal static fixed bin(17,0) initial dcl 1-10 MEMO_INFO_VERSION internal static fixed bin(17,0) initial dcl 3-31 memo_class_name based char unaligned dcl 3-28 memo_data_string based char unaligned dcl 3-25 memo_expiration_string based char unaligned dcl 3-27 memo_repeat_string based char unaligned dcl 3-26 NAMES DECLARED BY EXPLICIT CONTEXT. INCORRECT_VERSION 000054 constant label dcl 73 ref 86 89 MEMO_NOT_IN_USE 000066 constant label dcl 79 ref 84 memo_get_ 000025 constant entry external dcl 21 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 432 456 330 442 Length 674 330 24 201 102 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME memo_get_ 108 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 system_area_ptr memo_get_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME memo_get_ 000100 idx memo_get_ 000101 exp_delta memo_get_ 000102 exp_delta_string_ptr memo_get_ 000104 memo_segment_ptr memo_get_ 000106 memo_info_ptr memo_get_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as call_ext_out_desc call_ext_out return_mac ext_entry trunc_fx1 divide_fx1 op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_system_free_area_ ioa_$rsnnl memo_util_$to_gmt THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 21 000020 63 000032 64 000036 65 000041 67 000043 68 000046 69 000050 72 000051 73 000054 75 000060 78 000061 79 000066 81 000072 84 000073 86 000076 87 000102 89 000105 90 000110 91 000112 92 000114 94 000116 95 000121 97 000136 98 000145 99 000150 100 000165 101 000166 103 000170 104 000173 105 000174 106 000211 108 000223 109 000231 111 000273 112 000276 113 000310 114 000311 116 000312 124 000326 ----------------------------------------------------------- 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