COMPILATION LISTING OF SEGMENT emacs Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/01/88 0952.7 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1978 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: style2,ifthenstmt,ifthendo,ifthen,^indnoniterdo,indcomtxt,^inditerdo,idind22 */ 11 multics_emacs: 12 emacs: 13 procedure () options (variable); 14 15 go to emacs_start; 16 17 /* Command interface to Multics EMACS editor. */ 18 19 20 /****^ HISTORY COMMENTS: 21* 1) change(82-04-12,Margolin), approve(), audit(), 22* install(86-11-03,MR12.0-1205): 23* Pre-hcom comments: 24* 03/22/78 by BSG 25* Last modified: 03/23/78 by GMP for temporary segment manager 26* Last modified: 03/26/78 by GMP for debugging entries and to differentiate 27* FNP and Network usage. 28* Last modified: 21 April 1978 by RSL to restore modes after usage 29* Last modified:27 August 1978 by GMP to remove FNP/Network differentiation, 30* and put save/restore modes into push/pop level 31* Last modified: 24 November 1978 by BSG to 32* implement e_pl1_$push_pop_tbl_swap) 33* Last Modified: 3 May 1979 by BIM for logging 34* Last Modified: 7 May 1979 by BSG for lisp_linkage_error 35* Last Modified: 9 May 1979 by BSG for integration with new_emacs, 36* better logging 37* Last Modified 28 Feb 1980 by BSG for >sc1>emacs_dir 38* Last Modified 17 June 1981 by RMSoley for emacs$get_my_name and friends. 39* Last Modified 7 July 1981 RMSoley for emacs$get_version and to use 40* emacs_data_$version for saved environment name. 41* Last Modified 10 July 1981 RMSoley for logging changes 42* Last Modified 14 July 1981 RMSoley for info_ptr in emacs_ and 43* emacs$get_info_ptr 44* Last Modified 22 July 1981 RMSoley to move parsing to PL/1, 45* fully use emacs_data_ static, add tasking, and clean up. 46* Last Modified: August 1981 RMSoley: fix tasking, get rid 47* of push_pop_tbl_swap technology, fix invocation workings. 48* Modified: 3 April 1982 Richard Soley to fix lisp_save_ message 49* received during installation window. 50* Modified: 12 April 1982 Richard Soley to remove site-dir dependence. 51* 2) change(86-07-17,Margolin), approve(86-07-17,MCR7452), 52* audit(86-07-29,Coren), install(86-11-03,MR12.0-1205): 53* Changed pop_level to turn off video if Emacs turned it on automatically. 54* END HISTORY COMMENTS */ 55 56 57 /* System Entries */ 58 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 59 dcl cu_$cl entry (); 60 dcl com_err_$suppress_name 61 entry options (variable); 62 dcl cu_$arg_list_ptr entry () returns (pointer); 63 dcl ioa_$ioa_switch entry options (variable); 64 dcl e_argument_parse_ entry (ptr, char (*), fixed bin (35)); 65 dcl e_argument_parse_$subroutine 66 entry (ptr, char (*), char (*), ptr); 67 dcl e_pl1_$dump_out_console_messages 68 entry (); 69 dcl e_pl1_$return_echo_meters 70 entry (fixed bin, fixed bin, fixed bin, fixed bin); 71 dcl e_pl1_$set_multics_tty_modes 72 entry (); 73 dcl e_pl1_$get_terminal_type 74 entry (char (*) varying); 75 dcl e_tasking_ entry (pointer, fixed bin (35)); 76 dcl expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)); 77 dcl find_condition_info_ entry (ptr, ptr, fixed bin (35)); 78 dcl forward_command_ entry (pointer, entry, character (*)); 79 dcl get_group_id_ entry () returns (char (32)); 80 dcl get_system_free_area_ entry () returns (pointer); 81 dcl get_temp_segment_ entry (character (*), pointer, fixed binary (35)); 82 dcl hcs_$fs_get_path_name entry (entry, character (*), fixed binary, character (*), fixed binary (35)); 83 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, 84 fixed bin (35)); 85 dcl hcs_$get_process_usage 86 entry (ptr, fixed bin (35)); 87 dcl hcs_$get_user_effmode entry (char (*), char (*), char (*), fixed bin (3), fixed bin (5), fixed bin (35)) 88 ; 89 dcl hcs_$status_minf entry (char (*), char (*), fixed bin (1), fixed bin (2), fixed bin (24), 90 fixed bin (35)); 91 dcl ioa_$rsnnl entry options (variable); 92 dcl iox_$modes entry (pointer, character (*), character (*), fixed binary (35)); 93 dcl lisp$lisp entry () options (variable); 94 dcl user_info_$terminal_data 95 entry (char (*), char (*), char (*), fixed bin, char (*)); 96 dcl video_utils_$turn_off_login_channel 97 entry (fixed bin (35)); 98 dcl write_log_$write_log_test 99 entry (char (*)); 100 dcl write_log_$write_log_file 101 entry (fixed bin (71), fixed bin, char (*), char (*), ptr); 102 dcl release_temp_segments_ 103 entry (character (*), (*) pointer, fixed binary (35)); 104 dcl release_temp_segment_ entry (character (*), pointer, fixed binary (35)); 105 106 /* Automatic */ 107 dcl cgmeter fixed bin; 108 dcl 1 cinfo like condition_info aligned automatic; 109 dcl code fixed bin (35); 110 dcl edirl fixed bin; 111 dcl env_name char (32); 112 dcl groupid character (32); 113 dcl idx fixed bin; 114 dcl line_type fixed bin; 115 dcl locemeter fixed bin; 116 dcl log_name char (32); 117 dcl log_ptr pointer; 118 dcl loser character (256) varying; 119 dcl lstring char (116); 120 dcl mode fixed bin (5); 121 dcl myname char (32); 122 dcl n_to_allocate fixed bin; 123 dcl netsw bit (1); 124 dcl 1 new_usage_info automatic aligned like process_usage; 125 dcl outmeter fixed bin; 126 dcl p pointer; 127 dcl r0emeter fixed bin; 128 dcl temp_ptr pointer; 129 dcl temp_string character (168); 130 dcl termid char (4); 131 dcl time_in fixed bin (71); 132 dcl ttychan character (32); 133 dcl ttytype character (32); 134 dcl 1 usage_info automatic aligned like process_usage; 135 dcl vtyp character (100) varying; 136 137 /* External Static */ 138 dcl emacs_data_$invocation_list 139 pointer static external; 140 dcl emacs_data_$log_dir character (168) static external; 141 dcl emacs_data_$status_code 142 fixed bin (35) static external; 143 dcl emacs_data_$version character (10) static external; 144 dcl iox_$user_io pointer external; 145 146 /* Internal Static */ 147 dcl isw bit (1) static initial ("0"b); 148 dcl log_subdir char (32) static options (constant) init ("log_dir"); 149 dcl names (2) character (32) static options (constant) 150 initial ("lisp", "lisp_static_vars_"); 151 dcl system_area_ptr pointer static internal initial (null ()); 152 153 /* Builtin */ 154 dcl (addr, clock, divide, hbound, index, length, null, rtrim, stackframeptr, substr) 155 builtin; 156 157 /* Conditions */ 158 dcl cleanup condition; 159 dcl lisp_linkage_error condition; 160 dcl record_quota_overflow condition; 161 162 /* Based */ 163 dcl based_code fixed bin (35) based; 164 dcl 1 cond_info aligned based, 165 2 lth fixed bin, 166 2 version fixed bin, 167 2 action_flags aligned, 168 3 cant_restart bit (1) unal, 169 3 default_restart bit (1) unal, 170 3 pad bit (34) unal, 171 2 info_string char (256) varying, 172 2 status_code fixed bin (35); 173 dcl system_area area based (system_area_ptr); 174 175 /* Parameters */ 176 dcl segment_ptr pointer parameter; 177 dcl P_code fixed bin (35); 178 dcl P_environment char (*) parameter; 179 dcl P_info_ptr pointer; 180 dcl P_iocb_ptr pointer; 181 dcl P_pathname char (*) parameter; 182 183 /* Include Files */ 1 1 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 1 2 1 3 /* Structure for find_condition_info_. 1 4* 1 5* Written 1-Mar-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 /* automatic */ 1 9 1 10 declare condition_info_ptr pointer; 1 11 1 12 /* based */ 1 13 1 14 declare 1 condition_info aligned based (condition_info_ptr), 1 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 1 16 2 version fixed binary, /* Must be 1 */ 1 17 2 condition_name char (32) varying, /* name of condition */ 1 18 2 info_ptr pointer, /* pointer to the condition data structure */ 1 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 1 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 1 21 2 flags unaligned, 1 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 1 23 3 pad1 bit (35), 1 24 2 pad2 bit (36), 1 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 1 26 2 pad3 (4) bit (36); 1 27 1 28 /* internal static */ 1 29 1 30 declare condition_info_version_1 1 31 fixed binary internal static options (constant) initial (1); 1 32 1 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 184 2 1 /* Begin include file emacs_data.incl.pl1 */ 2 2 /* format: style3 */ 2 3 /**** Created: RMSoley 5 August 1981 ****/ 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(81-11-19,Soley), approve(), audit(), install(): 2 6* for flags.got_cr 2 7* 2) change(82-04-15,Soley), approve(), audit(), install(): 2 8* for tasking.return_label 2 9* 3) change(82-06-02,Margolin), approve(), audit(), install(): 2 10* to also include level_info dcl 2 11* 4) change(84-09-23,Margolin), approve(), audit(), install(): 2 12* to add emacs_data.arguments.shared_static 2 13* 5) change(84-11-02,Margolin), approve(), audit(), install(): 2 14* to add emacs_data.arguments.force 2 15* 6) change(86-07-16,Margolin), approve(86-07-16,MCR7452), 2 16* audit(86-11-03,Coren), install(86-11-03,MR12.0-1205): 2 17* Added emacs_data.flags.turned_on_video and removed the copyright notice 2 18* (include files aren't supposed to have them). 2 19* 7) change(87-12-21,Schroth), approve(88-02-29,MCR7851), 2 20* audit(88-06-06,RBarstad), install(88-08-01,MR12.2-1071): 2 21* to add extended_ascii flag and extend breaktable for 8bit I/O. 2 22* END HISTORY COMMENTS */ 2 23 2 24 2 25 /* Stuff to manage invocations. */ 2 26 dcl e_find_invocation_ entry () returns (pointer); 2 27 dcl emacs_data_ptr pointer; 2 28 2 29 /* emacs_data information structure. */ 2 30 declare 1 emacs_data aligned based (emacs_data_ptr), 2 31 2 next_invocation pointer initial (null ()), /* invoc list */ 2 32 2 prev_invocation pointer initial (null ()), 2 33 2 frame_ptr pointer initial (null ()), /* cur emx frame */ 2 34 2 myname character (32) initial (""), /* emacs name */ 2 35 2 env_name character (32) initial (""), /* .sv.lisp name */ 2 36 2 log_name character (32) initial (""), /* for write_log */ 2 37 2 info_ptr pointer init (null ()), /* emacs_ ip */ 2 38 2 status_code fixed bin (35) init (0), /* emacs_ code */ 2 39 2 output_iocb pointer init (null ()), /* output IOCBP */ 2 40 2 input_iocb pointer init (null ()), /* input IOCBP */ 2 41 2 arg_list_ptr pointer init (null ()), 2 42 2 flags aligned, 2 43 3 debugging bit (1) unaligned init ("0"b),/* debugging */ 2 44 3 using_video bit (1) unaligned init ("0"b),/* use vidsys */ 2 45 3 in_emacs bit (1) unaligned init ("0"b),/* now inside */ 2 46 3 new_arguments bit (1) unaligned init ("0"b),/* have new args */ 2 47 3 using_r0_echnego 2 48 bit (1) unaligned init ("1"b), 2 49 3 netsw bit (1) unaligned init ("0"b),/* using net */ 2 50 3 messages_were_sent_here 2 51 bit (1) unal init ("0"b), 2 52 3 update_breaktable 2 53 bit (1) unal init ("1"b), /* need to upd */ 2 54 3 got_cr bit (1) unal init ("0"b), /* last char CR */ 2 55 3 turned_on_video 2 56 bit (1) unal init ("0"b), /* automatically turned on video */ 2 57 3 extended_ascii 2 58 bit (1) unal init ("0"b), /* 8-bit chars */ 2 59 3 pad2 bit (25) unaligned initial (""b), 2 60 2 arguments aligned, 2 61 3 ns bit (1) unal, /* -ns */ 2 62 3 query bit (1) unal, /* -query */ 2 63 3 reset bit (1) unal, /* -reset */ 2 64 3 task bit (1) unal, /* -task */ 2 65 3 no_task bit (1) unal, /* -no_task */ 2 66 3 destroy_task bit (1) unal, /* -destroy_task */ 2 67 3 shared_static bit (1) unal, /* -shared_static */ 2 68 3 force bit (1) unal, /* -force */ 2 69 3 ls fixed bin (17) aligned, /* -ls */ 2 70 3 pl fixed bin (17) unal, /* -pl */ 2 71 3 ll fixed bin (17) aligned, /* -ll */ 2 72 3 apply fixed bin (17) unal, /* 1+argno -ap */ 2 73 3 path_count fixed bin (17) aligned, /* # of paths */ 2 74 3 ttp character (168) unaligned, /* -ttp given */ 2 75 3 first_path pointer, /* ptr to chain */ 2 76 2 tasking aligned, 2 77 3 task_flags aligned, 2 78 4 in_task bit (1) unaligned initial ("0"b), 2 79 /* tasking on */ 2 80 4 destroy bit (1) unaligned initial ("0"b), 2 81 /* self destruct */ 2 82 4 pad1 bit (34) unaligned initial (""b), 2 83 3 task_id bit (36) aligned initial (""b), 2 84 /* task ID */ 2 85 3 saved_cl_intermediary 2 86 entry, /* old CLI */ 2 87 3 return_label label, /* for -dtk */ 2 88 2 interrupts aligned, 2 89 3 head pointer init (null ()), /* of intp chain */ 2 90 3 tail pointer init (null ()), /* of intp chain */ 2 91 3 array (0:1) fixed bin init ((2) 0), /* lisp/pl1 com */ 2 92 2 terminal_type character (256) init (""), /* saved ttp */ 2 93 2 tty_modes character (512) init (""), /* orig ttymodes */ 2 94 2 linel fixed bin (17) aligned, /* orig linel */ 2 95 2 ttyx fixed bin (17) aligned, /* tty index */ 2 96 2 netx fixed bin (35), /* net index */ 2 97 2 wnetx fixed bin (35), 2 98 2 chars_in_obuf fixed bin (21) init (0), /* to be dumped */ 2 99 2 echoed fixed bin (21) init (0), /* alrdy echoed */ 2 100 2 cgot fixed bin (21) init (0), /* echnego got */ 2 101 2 ctook fixed bin (21) init (0), /* took from buf */ 2 102 2 edir character (168) init (""), /* emacs dir */ 2 103 2 ledir character (168) init (""), /* e log dir */ 2 104 2 breaktable (0:255) bit (1) unal init ((256) (1)"1"b), 2 105 2 first_msgp pointer init (null ()), 2 106 2 last_msgp pointer init (null ()), 2 107 2 ibufptr pointer init (null ()), 2 108 2 obufptr pointer init (null ()), 2 109 2 ospeed fixed binary init (0), 2 110 2 level_ptr pointer init (null ()); 2 111 2 112 /* Pathname (for arguments.path, arguments.macro) structure. */ 2 113 dcl 1 path aligned based, 2 114 2 next_path pointer, 2 115 2 type fixed bin, 2 116 2 name character (168); 2 117 2 118 /* Types of paths. */ 2 119 dcl MACRO_PATH fixed bin initial (0); 2 120 dcl FIND_PATH fixed bin initial (1); 2 121 2 122 dcl 1 level_info aligned based, /* describes a level of recursion */ 2 123 2 prev_level pointer, 2 124 2 tty_modes character (256) unaligned, 2 125 2 n_used fixed binary, 2 126 2 n_allocated fixed binary, 2 127 2 segment_ptrs (n_to_allocate refer (level_info.n_allocated)) pointer; 2 128 2 129 /* END INCLUDE FILE emacs_data.incl.pl1 */ 185 3 1 /* BEGIN INCLUDE FILE ... line_types.incl.pl1 */ 3 2 3 3 /* Written November 10 1975 by Paul Green */ 3 4 /* Modified October 1978 by Larry Johnson to include line_type_names */ 3 5 /* Modified 12/19/78 by J. Stern to add POLLED_VIP line type */ 3 6 /* Modified 9/27/79 by J. Stern to add X25LAP line type */ 3 7 /* Modified Spring 1981 by Charles Hornig to add HDLC line type */ 3 8 /* Modified May 1981 by Robert Coren to add COLTS line type */ 3 9 /* Modified September 1984 by Robert Coren to correctly count VIP as a synchronous line type */ 3 10 3 11 3 12 /****^ HISTORY COMMENTS: 3 13* 1) change(86-02-25,Negaret), approve(87-07-13,MCR7679), 3 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 3 15* Add a DSA line type. 3 16* 2) change(87-03-17,Beattie), approve(87-07-13,MCR7656), 3 17* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 3 18* Add HASP_OPR to identify HASP workstation consoles with login service. 3 19* END HISTORY COMMENTS */ 3 20 3 21 3 22 declare (LINE_MC initial (-2), 3 23 LINE_TELNET initial (-1), 3 24 LINE_UNKNOWN initial (0), 3 25 LINE_ASCII initial (1), 3 26 LINE_1050 initial (2), 3 27 LINE_2741 initial (3), 3 28 LINE_ARDS initial (4), 3 29 LINE_SYNCH initial (5), 3 30 LINE_G115 initial (6), 3 31 LINE_BSC initial (7), 3 32 LINE_ETX initial (8), 3 33 LINE_VIP initial (9), 3 34 LINE_ASYNC1 initial (10), 3 35 LINE_ASYNC2 initial (11), 3 36 LINE_ASYNC3 initial (12), 3 37 LINE_SYNC1 initial (13), 3 38 LINE_SYNC2 initial (14), 3 39 LINE_SYNC3 initial (15), 3 40 LINE_POLLED_VIP initial (16), 3 41 LINE_X25LAP initial (17), 3 42 LINE_HDLC initial (18), 3 43 LINE_COLTS initial (19), 3 44 LINE_DSA initial (20), 3 45 LINE_HASP_OPR initial (21) 3 46 ) fixed bin internal static options (constant); 3 47 3 48 dcl max_line_type fixed bin int static options (constant) init (21); 3 49 3 50 declare n_sync_line_types fixed bin int static options (constant) init (10); 3 51 3 52 declare sync_line_type (10) fixed bin int static options (constant) init (5, 6, 7, 9, 13, 14, 15, 16, 17, 18); 3 53 3 54 dcl line_types (-2:21) char (16) int static options (constant) init ( 3 55 "MC", /* -2 */ 3 56 "TELNET", /* -1 */ 3 57 "none", /* 0 */ 3 58 "ASCII", /* 1 */ 3 59 "1050", /* 2 */ 3 60 "2741", /* 3 */ 3 61 "ARDS", /* 4 */ 3 62 "Sync", /* 5 */ 3 63 "G115", /* 6 */ 3 64 "BSC", /* 7 */ 3 65 "202ETX", /* 8 */ 3 66 "VIP", /* 9 */ 3 67 "ASYNC1", /* 10 */ 3 68 "ASYNC2", /* 11 */ 3 69 "ASYNC3", /* 12 */ 3 70 "SYNC1", /* 13 */ 3 71 "SYNC2", /* 14 */ 3 72 "SYNC3", /* 15 */ 3 73 "POLLED_VIP", /* 16 */ 3 74 "X25LAP", /* 17 */ 3 75 "HDLC", /* 18 */ 3 76 "COLTS", /* 19 */ 3 77 "DSA", /* 20 */ 3 78 "HASP_OPR"); /* 21 */ 3 79 3 80 /* END INCLUDE FILE ... line_types.incl.pl1 */ 186 4 1 /* BEGIN INCLUDE FILE process_usage.incl.pl1 WRITTEN 09/17/76 BY Richard Bratt */ 4 2 4 3 declare 4 4 process_usage_pointer pointer, 4 5 1 process_usage based (process_usage_pointer), 4 6 2 number_wanted fixed bin, /* max number of entries to be returned */ 4 7 2 number_can_return fixed bin, /* the number of entries currently returnable */ 4 8 2 cpu_time fixed bin (71), 4 9 2 paging_measure fixed bin (71), 4 10 2 page_faults fixed bin (34), 4 11 2 pd_faults fixed bin (34), 4 12 2 virtual_cpu_time fixed bin (71), 4 13 2 segment_faults fixed bin (34), 4 14 2 bounds_faults fixed bin (34), 4 15 2 vtoc_reads fixed bin (34), 4 16 2 vtoc_writes fixed bin (34); 4 17 4 18 /* END INCLUDE FILE process_usage.incl.pl1 */ 187 188 189 emacs_start: 190 myname = "emacs"; 191 env_name = "emacs"; 192 log_name = "emacs_log"; 193 goto e_ne_common; 194 195 emacs_: 196 entry (P_iocb_ptr, P_pathname, P_environment, P_info_ptr, P_code); 197 198 myname = "emacs_"; 199 env_name = "emacs_"; 200 log_name = "emacs_log"; 201 go to e_ne_common; 202 203 ne: 204 new_emacs: 205 entry options (variable); 206 207 myname = "new_emacs"; 208 env_name = "new-emacs"; 209 log_name = "ne_log"; 210 211 e_ne_common: 212 emacs_data_$status_code = 0; 213 214 /* Push this invocation (it may be popped later.) */ 215 system_area_ptr = get_system_free_area_ (); 216 allocate emacs_data in (system_area) set (emacs_data_ptr); 217 emacs_data.prev_invocation = null (); 218 emacs_data.next_invocation = emacs_data_$invocation_list; 219 if emacs_data_$invocation_list ^= null () then 220 emacs_data_$invocation_list -> emacs_data.prev_invocation = emacs_data_ptr; 221 emacs_data_$invocation_list = emacs_data_ptr; 222 emacs_data.frame_ptr = stackframeptr (); 223 224 /* Parse argument list. */ 225 emacs_data.arg_list_ptr = cu_$arg_list_ptr (); 226 code = 0; 227 if myname ^= "emacs_" then 228 call e_argument_parse_ (emacs_data.arg_list_ptr, myname, code); 229 else call e_argument_parse_$subroutine (P_iocb_ptr, P_pathname, P_environment, P_info_ptr); 230 if code ^= 0 then return; 231 232 /* Now, if we are going to be tasking AND THERE IS A TASK AROUND, 233* pop invocation list (saving arguments). */ 234 if emacs_data.arguments.no_task then go to escape_loop; 235 236 do temp_ptr = emacs_data_$invocation_list repeat (temp_ptr -> emacs_data.next_invocation) 237 while (temp_ptr ^= null ()); 238 if temp_ptr -> emacs_data.tasking.task_flags.in_task then do; 239 temp_ptr -> emacs_data.arguments = emacs_data.arguments; 240 emacs_data_ptr = temp_ptr; 241 temp_ptr = emacs_data_$invocation_list -> emacs_data.next_invocation; 242 free emacs_data_$invocation_list -> emacs_data in (system_area); 243 emacs_data_$invocation_list = temp_ptr; 244 emacs_data_$invocation_list -> emacs_data.prev_invocation = null (); 245 go to escape_loop; 246 end; 247 end; 248 escape_loop: 249 if myname = "emacs_" then do; 250 emacs_data.info_ptr = P_info_ptr; 251 emacs_data.output_iocb, emacs_data.input_iocb = P_iocb_ptr; 252 end; 253 254 emacs_data.flags.new_arguments = "1"b; 255 emacs_data.arg_list_ptr = cu_$arg_list_ptr (); 256 emacs_data.myname = myname; 257 emacs_data.env_name = rtrim (env_name) || "." || emacs_data_$version; 258 emacs_data.log_name = log_name; 259 260 call hcs_$fs_get_path_name (emacs, temp_string, edirl, (""), (0)); 261 emacs_data.edir = temp_string; 262 if edirl < 168 then substr (emacs_data.edir, edirl + 1) = ""; 263 if ^isw then do; 264 do idx = 1 to hbound (names, 1); 265 call hcs_$initiate ((emacs_data.edir), names (idx), names (idx), (0), (0), p, (0)); 266 end; 267 end; 268 isw = "1"b; 269 if emacs_data.myname = "emacs_" | emacs_data.myname = "emacs" then 270 emacs_data.ledir = emacs_data_$log_dir; 271 else emacs_data.ledir = emacs_data.edir; 272 273 /* Check existence of lisp environment. */ 274 call hcs_$status_minf ((emacs_data.edir), rtrim (emacs_data.env_name) || ".sv.lisp", 1, 1 /* seg */, (0), code); 275 if code ^= 0 then do; 276 call com_err_$suppress_name (0, emacs_data.myname, 277 "A new version of emacs, version ^a, is being installed.", rtrim (emacs_data_$version)); 278 call com_err_$suppress_name (0, emacs_data.myname, "Please wait 5 minutes and try again."); 279 return; 280 end; 281 282 mode = 0; 283 call hcs_$get_user_effmode ((emacs_data.ledir), "metering.acs", "", 4, mode, code); 284 if mode > 01000b then do; 285 usage_info.number_wanted = 5; 286 log_ptr = null (); 287 call hcs_$get_process_usage (addr (usage_info), (0)); 288 call write_log_$write_log_test (rtrim (emacs_data.ledir) || ">" || log_subdir); 289 call user_info_$terminal_data (termid, ttytype, ttychan, line_type, ("")); 290 netsw = (line_type = LINE_TELNET); 291 call ioa_$rsnnl ("^a: Entering ^a (^a) on ^a ^a ^a", lstring, length (lstring), get_group_id_ (), 292 emacs_data.myname, rtrim (emacs_data_$version), ttytype, termid, ttychan); 293 time_in = clock (); 294 call write_log_$write_log_file (time_in, 0, lstring, (emacs_data.log_name), log_ptr); 295 end; 296 297 call push_level (); 298 299 code = 0; /* If this returns a non-zero code, then got error or already 300* ran an Emacs, punt. */ 301 call e_tasking_ (emacs_data_ptr, code); 302 if code ^= 0 then return; 303 go to not_tasking; 304 305 tasking_emacs: 306 entry (); 307 308 emacs_data_ptr = emacs_data_$invocation_list; 309 emacs_data.frame_ptr = stackframeptr (); 310 311 not_tasking: 312 on cleanup 313 begin; 314 emacs_data_ptr = e_find_invocation_ (); 315 call pop_level (); 316 call unthread_invocation (); 317 end; 318 319 on lisp_linkage_error call llerror (); 320 321 on record_quota_overflow call rqoerror (); 322 323 /* Now forward to Lisp. */ 324 call forward_command_ (emacs_data.arg_list_ptr, lisp$lisp, 325 rtrim (emacs_data.edir) || ">" || rtrim (emacs_data.env_name)); 326 call pop_level (); 327 328 if emacs_data.myname = "emacs_" then P_code = emacs_data.status_code; 329 call unthread_invocation (); 330 returner: 331 return; 332 333 llerror: 334 procedure (); 335 336 emacs_data_ptr = e_find_invocation_ (); 337 call pop_level; 338 339 /* Figure out exactly what part of emacs failed. */ 340 call find_condition_info_ (null (), addr (cinfo), code); 341 if code ^= 0 then 342 loser = rtrim (emacs_data.myname); 343 else do; 344 loser = cinfo.info_ptr -> cond_info.info_string; 345 if substr (loser, 1, 4) ^= "The " then 346 loser = rtrim (emacs_data.myname); 347 else do; 348 loser = substr (loser, 5); 349 idx = index (loser, " "); 350 loser = substr (loser, 1, idx - 1); 351 end; 352 end; 353 354 call com_err_$suppress_name (0, emacs_data.myname, "A new version of ^a, a part of ^a, has been installed.", 355 loser, emacs_data.myname); 356 call com_err_$suppress_name (0, emacs_data.myname, 357 "Please issue the ""tmr ^a"" command in order to be able to use it.", loser); 358 call unthread_invocation (); 359 go to returner; 360 end; 361 362 rqoerror: 363 procedure (); 364 emacs_data_ptr = e_find_invocation_ (); 365 call e_pl1_$set_multics_tty_modes (); 366 call ioa_$ioa_switch (iox_$user_io, 367 "^/^a: There has been a record quota overflow. Delete unnecessary segments", emacs_data.myname); 368 call ioa_$ioa_switch (iox_$user_io, "and issue the ""^[^a^;pi^s^]"" command to re-enter ^a.", 369 emacs_data.tasking.task_flags.in_task, emacs_data.myname, emacs_data.myname); 370 371 revert record_quota_overflow; 372 call cu_$cl (); 373 on record_quota_overflow call rqoerror (); 374 return; 375 end rqoerror; 376 377 unthread_invocation: 378 procedure (); 379 380 /* Don't unthread if this is a tasking invocation, or 381* e_tasking_ won't be able to destroy. 382* 16 April 1982 RMSoley: new way is to just release through 383* the entire stack, so DO unthread tasking invocations. 384* if emacs_data.tasking.task_flags.in_task then return; */ 385 386 if emacs_data_$invocation_list = emacs_data_ptr then emacs_data_$invocation_list = emacs_data.next_invocation; 387 if emacs_data.next_invocation ^= null () then 388 emacs_data.next_invocation -> emacs_data.prev_invocation = emacs_data.prev_invocation; 389 if emacs_data.prev_invocation ^= null () then 390 emacs_data.prev_invocation -> emacs_data.next_invocation = emacs_data.next_invocation; 391 free emacs_data; 392 return; 393 end unthread_invocation; 394 395 /* This entry allows the lisp side of emacs find out what name we were 396* called with, emacs/emacs_/new_emacs. RMSoley 17 June 1981 */ 397 398 get_my_name: 399 entry () returns (char (32)); 400 401 emacs_data_ptr = e_find_invocation_ (); 402 403 return (emacs_data.myname); 404 405 /* This entry allows the lisp side to set a return code for emacs_ */ 406 407 set_emacs_return_code: 408 entry (P_return_code); 409 dcl P_return_code fixed bin (35); 410 411 emacs_data_ptr = e_find_invocation_ (); 412 413 emacs_data.status_code = P_return_code; 414 emacs_data_$status_code = P_return_code; 415 416 if emacs_data.myname ^= "emacs_" then return; 417 418 /* Now patch it into the argument list. 419* Have to go through this hair since the argument list 420* might be on another stack ! */ 421 422 call cu_$arg_ptr_rel (5, temp_ptr, (0), (0), emacs_data.arg_list_ptr); 423 temp_ptr -> based_code = P_return_code; 424 425 return; 426 427 /* This entry returns the current emacs version string. */ 428 429 get_version: 430 entry () returns (character (10)); 431 432 return (emacs_data_$version); 433 434 /* This entry is called by the lisp side to set redisplay meters. */ 435 436 set_lisp_rdis_meters: 437 entry (P_1, P_2, P_3, P_4, P_5, P_6, P_7, P_8, P_9, P_10); 438 439 declare (P_1, P_2, P_3, P_4, P_5, P_6, P_7, P_8, P_9, P_10) 440 fixed bin; 441 declare (static_rdis_1, static_rdis_2, static_rdis_3, static_rdis_4, static_rdis_5, static_rdis_6, 442 static_rdis_7, static_rdis_8, static_rdis_9, static_rdis_10) 443 static internal fixed bin init (0); 444 445 static_rdis_1 = P_1; 446 static_rdis_2 = P_2; 447 static_rdis_3 = P_3; 448 static_rdis_4 = P_4; 449 static_rdis_5 = P_5; 450 static_rdis_6 = P_6; 451 static_rdis_7 = P_7; 452 static_rdis_8 = P_8; 453 static_rdis_9 = P_9; 454 static_rdis_10 = P_10; 455 return; 456 457 /* emacs$get_info_ptr -> get information pointer provided in emacs_ 458* call. 14 July 1981 RMSoley */ 459 460 get_info_ptr: 461 entry () returns (pointer); 462 463 emacs_data_ptr = e_find_invocation_ (); 464 465 return (emacs_data.info_ptr); 466 467 /* This entry allocates a temporary segment for the editor. 468* It remembers all such segments allocated so that it can free them when done. 469**/ 470 471 472 get_temporary_seg: 473 entry () returns (pointer); 474 475 emacs_data_ptr = e_find_invocation_ (); 476 477 if emacs_data.level_ptr -> level_info.n_used = emacs_data.level_ptr -> level_info.n_allocated then do; 478 /* need more room in table */ 479 480 n_to_allocate = emacs_data.level_ptr -> level_info.n_allocated + 16; 481 allocate level_info in (system_area) set (p); 482 483 p -> level_info.prev_level = emacs_data.level_ptr -> level_info.prev_level; 484 485 p -> level_info.n_used = emacs_data.level_ptr -> level_info.n_used; 486 do idx = 1 to p -> level_info.n_used; 487 p -> level_info.segment_ptrs (idx) = emacs_data.level_ptr -> level_info.segment_ptrs (idx); 488 end; 489 490 do idx = p -> level_info.n_used + 1 to p -> level_info.n_allocated; 491 /* and new ones */ 492 p -> level_info.segment_ptrs (idx) = null (); 493 end; 494 495 free emacs_data.level_ptr -> level_info in (system_area); 496 /* release old table */ 497 498 emacs_data.level_ptr = p; /* remember new table */ 499 end; 500 501 502 idx, emacs_data.level_ptr -> level_info.n_used = emacs_data.level_ptr -> level_info.n_used + 1; 503 504 call get_temp_segment_ ("emacs", emacs_data.level_ptr -> level_info.segment_ptrs (idx), (0)); 505 506 return (emacs_data.level_ptr -> level_info.segment_ptrs (idx)); 507 508 509 /* This entry releases a temporary segment previously allocated by this level 510* of the editor. */ 511 512 release_temporary_seg: 513 entry (segment_ptr); 514 515 emacs_data_ptr = e_find_invocation_ (); 516 517 do idx = 1 to emacs_data.level_ptr -> level_info.n_used; 518 /* find it */ 519 if emacs_data.level_ptr -> level_info.segment_ptrs (idx) = segment_ptr then go to found_release; 520 end; 521 522 return; /* not from this level, forget it */ 523 524 525 found_release: 526 do idx = idx + 1 to emacs_data.level_ptr -> level_info.n_used; 527 emacs_data.level_ptr -> level_info.segment_ptrs (idx - 1) = 528 emacs_data.level_ptr -> level_info.segment_ptrs (idx); 529 end; /* remove from list */ 530 531 emacs_data.level_ptr -> level_info.n_used = emacs_data.level_ptr -> level_info.n_used - 1; 532 533 call release_temp_segment_ ("emacs", segment_ptr, (0)); 534 535 return; 536 537 538 /* These commands are for use when debugging EMACS. They push and pop 539* editor levels to permit use of the editor fom free-standing LISP. 540**/ 541 542 debug_on: 543 entry () options (variable); 544 545 emacs_data_ptr = e_find_invocation_ (); 546 547 call push_level (); 548 549 return; 550 551 552 553 debug_off: 554 entry () options (variable); 555 556 emacs_data_ptr = e_find_invocation_ (); 557 558 mode = 0b; 559 call pop_level (); 560 561 return; 562 563 564 /* This internal procedure pushes a new editor level. 565**/ 566 567 push_level: 568 procedure (); 569 570 if system_area_ptr = null () then system_area_ptr = get_system_free_area_ (); 571 572 n_to_allocate = 16; /* good size for start */ 573 574 allocate level_info in (system_area) set (p); 575 576 p -> level_info.prev_level = emacs_data.level_ptr;/* chain previous level */ 577 578 p -> level_info.n_used = 0; 579 p -> level_info.segment_ptrs (*) = null (); 580 581 call iox_$modes (iox_$user_io, (""), p -> level_info.tty_modes, (0)); 582 583 emacs_data.level_ptr = p; /* push */ 584 585 end push_level; 586 587 /* This internal procedure pops an editor level. */ 588 589 pop_level: 590 procedure (); 591 if mode > 01000b then do; 592 593 new_usage_info.number_wanted = 5; 594 call hcs_$get_process_usage (addr (new_usage_info), (0)); 595 time_in = divide (clock () - time_in, 6000000, 35, 0); 596 call e_pl1_$return_echo_meters (cgmeter, r0emeter, locemeter, outmeter); 597 groupid = get_group_id_ (); 598 call e_pl1_$get_terminal_type (vtyp); 599 if vtyp = "" then 600 if netsw then 601 ttytype = "supdup output"; 602 else ; 603 else call expand_pathname_ ((vtyp), (168)" ", ttytype, 0); 604 if (substr (ttytype, length (rtrim (ttytype)) - 2, 3) = "ctl") then 605 substr (ttytype, length (rtrim (ttytype)) - 2) = ""; 606 call ioa_$rsnnl ("^a: (^a) in ^d, r0/r4 echo ^d/^d, out ^d.", lstring, length (lstring), groupid, ttytype, 607 cgmeter, r0emeter, locemeter - r0emeter, outmeter); 608 call write_log_$write_log_test (rtrim (emacs_data.ledir) || ">" || log_subdir); 609 call write_log_$write_log_file (clock (), 0, lstring, (emacs_data.log_name), log_ptr); 610 call ioa_$rsnnl ("^a: lisp rdis: ^d ^d ^d ^d ^d ^d ^d ^d ^d ^d", lstring, length (lstring), groupid, 611 static_rdis_1, static_rdis_2, static_rdis_3, static_rdis_4, static_rdis_5, static_rdis_6, 612 static_rdis_7, static_rdis_8, static_rdis_9, static_rdis_10); 613 call write_log_$write_log_file (clock (), 0, lstring, (emacs_data.log_name), log_ptr); 614 615 call ioa_$rsnnl ("^a: ^.1f min, v/cpu ^d/^d mem ^d paging ^d/^d", lstring, length (lstring), groupid, 616 time_in / 10e0, (new_usage_info.virtual_cpu_time - usage_info.virtual_cpu_time) * 1e-6, 617 (new_usage_info.cpu_time - usage_info.cpu_time) * 1e-6, 618 divide (new_usage_info.paging_measure - usage_info.paging_measure, 1000, 35, 0), 619 new_usage_info.pd_faults - usage_info.pd_faults, new_usage_info.page_faults - usage_info.page_faults); 620 call write_log_$write_log_file (clock (), 0, lstring, (emacs_data.log_name), log_ptr); 621 end; 622 623 if emacs_data.level_ptr = null () then return; /* nothing to do */ 624 625 call release_temp_segments_ ("emacs", emacs_data.level_ptr -> level_info.segment_ptrs (*), (0)); 626 /* release all temporary segments of this level */ 627 628 call e_pl1_$set_multics_tty_modes (); /* renegotiate echoing */ 629 630 if emacs_data.flags.turned_on_video then call video_utils_$turn_off_login_channel ((0)); 631 /* we turned it on, we should turn it off */ 632 633 call iox_$modes (iox_$user_io, emacs_data.level_ptr -> level_info.tty_modes, (""), (0)); 634 635 call e_pl1_$dump_out_console_messages (); 636 637 p = emacs_data.level_ptr -> level_info.prev_level; 638 639 free emacs_data.level_ptr -> level_info in (system_area); 640 641 emacs_data.level_ptr = p; /* pop */ 642 643 end pop_level; 644 645 end emacs; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/01/88 0952.7 emacs.pl1 >special_ldd>install>MR12.2-1071>emacs.pl1 184 1 06/28/79 1204.8 condition_info.incl.pl1 >ldd>include>condition_info.incl.pl1 185 2 08/01/88 0948.6 emacs_data.incl.pl1 >special_ldd>install>MR12.2-1071>emacs_data.incl.pl1 186 3 08/06/87 0913.4 line_types.incl.pl1 >ldd>include>line_types.incl.pl1 187 4 10/26/76 1333.6 process_usage.incl.pl1 >ldd>include>process_usage.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. FIND_PATH 000567 automatic fixed bin(17,0) initial dcl 2-120 set ref 2-120* LINE_TELNET 005333 constant fixed bin(17,0) initial dcl 3-22 ref 290 MACRO_PATH 000566 automatic fixed bin(17,0) initial dcl 2-119 set ref 2-119* P_1 parameter fixed bin(17,0) dcl 439 ref 436 445 P_10 parameter fixed bin(17,0) dcl 439 ref 436 454 P_2 parameter fixed bin(17,0) dcl 439 ref 436 446 P_3 parameter fixed bin(17,0) dcl 439 ref 436 447 P_4 parameter fixed bin(17,0) dcl 439 ref 436 448 P_5 parameter fixed bin(17,0) dcl 439 ref 436 449 P_6 parameter fixed bin(17,0) dcl 439 ref 436 450 P_7 parameter fixed bin(17,0) dcl 439 ref 436 451 P_8 parameter fixed bin(17,0) dcl 439 ref 436 452 P_9 parameter fixed bin(17,0) dcl 439 ref 436 453 P_code parameter fixed bin(35,0) dcl 177 set ref 195 328* P_environment parameter char packed unaligned dcl 178 set ref 195 229* P_info_ptr parameter pointer dcl 179 set ref 195 229* 250 P_iocb_ptr parameter pointer dcl 180 set ref 195 229* 251 P_pathname parameter char packed unaligned dcl 181 set ref 195 229* P_return_code parameter fixed bin(35,0) dcl 409 ref 407 413 414 423 addr builtin function dcl 154 ref 287 287 340 340 594 594 arg_list_ptr 46 based pointer initial level 2 dcl 2-30 set ref 216* 225* 227* 255* 324* 422* arguments 52 based structure level 2 dcl 2-30 set ref 239* 239 array 152 based fixed bin(17,0) initial array level 3 dcl 2-30 set ref 216* 216* based_code based fixed bin(35,0) dcl 163 set ref 423* breaktable 610 based bit(1) initial array level 2 packed packed unaligned dcl 2-30 set ref 216* cgmeter 000100 automatic fixed bin(17,0) dcl 107 set ref 596* 606* cgot 462 based fixed bin(21,0) initial level 2 dcl 2-30 set ref 216* chars_in_obuf 460 based fixed bin(21,0) initial level 2 dcl 2-30 set ref 216* cinfo 000102 automatic structure level 1 dcl 108 set ref 340 340 cleanup 000542 stack reference condition dcl 158 ref 311 clock builtin function dcl 154 ref 293 595 609 609 613 613 620 620 code 000134 automatic fixed bin(35,0) dcl 109 set ref 226* 227* 230 274* 275 283* 299* 301* 302 340* 341 com_err_$suppress_name 000032 constant entry external dcl 60 ref 276 278 354 356 cond_info based structure level 1 dcl 164 condition_info based structure level 1 dcl 1-14 cpu_time 2 000472 automatic fixed bin(71,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 615 cpu_time 2 000346 automatic fixed bin(71,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 615 ctook 463 based fixed bin(21,0) initial level 2 dcl 2-30 set ref 216* cu_$arg_list_ptr 000034 constant entry external dcl 62 ref 225 255 cu_$arg_ptr_rel 000026 constant entry external dcl 58 ref 422 cu_$cl 000030 constant entry external dcl 59 ref 372 debugging 50 based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* destroy 134(01) based bit(1) initial level 4 packed packed unaligned dcl 2-30 set ref 216* divide builtin function dcl 154 ref 595 615 615 e_argument_parse_ 000040 constant entry external dcl 64 ref 227 e_argument_parse_$subroutine 000042 constant entry external dcl 65 ref 229 e_find_invocation_ 000140 constant entry external dcl 2-26 ref 314 336 364 401 411 463 475 515 545 556 e_pl1_$dump_out_console_messages 000044 constant entry external dcl 67 ref 635 e_pl1_$get_terminal_type 000052 constant entry external dcl 73 ref 598 e_pl1_$return_echo_meters 000046 constant entry external dcl 69 ref 596 e_pl1_$set_multics_tty_modes 000050 constant entry external dcl 71 ref 365 628 e_tasking_ 000054 constant entry external dcl 75 ref 301 echoed 461 based fixed bin(21,0) initial level 2 dcl 2-30 set ref 216* edir 464 based char(168) initial level 2 dcl 2-30 set ref 216* 261* 262* 265 271 274 324 edirl 000135 automatic fixed bin(17,0) dcl 110 set ref 260* 262 262 emacs_data based structure level 1 dcl 2-30 set ref 216 242 391 emacs_data_$invocation_list 000126 external static pointer dcl 138 set ref 218 219 219 221* 236 241 242 243* 244 308 386 386* emacs_data_$log_dir 000130 external static char(168) packed unaligned dcl 140 ref 269 emacs_data_$status_code 000132 external static fixed bin(35,0) dcl 141 set ref 211* 414* emacs_data_$version 000134 external static char(10) packed unaligned dcl 143 ref 257 276 276 291 291 432 emacs_data_ptr 000564 automatic pointer dcl 2-27 set ref 216* 217 218 219 221 222 225 227 234 239 240* 250 251 251 254 255 256 257 258 261 262 265 269 269 269 271 271 274 274 276 278 283 288 291 294 301* 308* 309 314* 324 324 324 328 328 336* 341 345 354 354 356 364* 366 368 368 368 386 386 387 387 387 389 389 389 391 401* 403 411* 413 416 422 463* 465 475* 477 477 480 483 485 487 495 498 502 502 504 506 515* 517 519 525 527 527 531 531 545* 556* 576 583 608 609 613 620 623 625 630 633 637 639 641 env_name 000136 automatic char(32) packed unaligned dcl 111 in procedure "emacs" set ref 191* 199* 208* 257 env_name 16 based char(32) initial level 2 in structure "emacs_data" dcl 2-30 in procedure "emacs" set ref 216* 257* 274 324 expand_pathname_ 000056 constant entry external dcl 76 ref 603 extended_ascii 50(10) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* find_condition_info_ 000060 constant entry external dcl 77 ref 340 first_msgp 620 based pointer initial level 2 dcl 2-30 set ref 216* flags 50 based structure level 2 dcl 2-30 forward_command_ 000062 constant entry external dcl 78 ref 324 frame_ptr 4 based pointer initial level 2 dcl 2-30 set ref 216* 222* 309* get_group_id_ 000064 constant entry external dcl 79 ref 291 291 597 get_system_free_area_ 000066 constant entry external dcl 80 ref 215 570 get_temp_segment_ 000070 constant entry external dcl 81 ref 504 got_cr 50(08) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* groupid 000146 automatic char(32) packed unaligned dcl 112 set ref 597* 606* 610* 615* hbound builtin function dcl 154 ref 264 hcs_$fs_get_path_name 000072 constant entry external dcl 82 ref 260 hcs_$get_process_usage 000076 constant entry external dcl 85 ref 287 594 hcs_$get_user_effmode 000100 constant entry external dcl 87 ref 283 hcs_$initiate 000074 constant entry external dcl 83 ref 265 hcs_$status_minf 000102 constant entry external dcl 89 ref 274 head 146 based pointer initial level 3 dcl 2-30 set ref 216* ibufptr 624 based pointer initial level 2 dcl 2-30 set ref 216* idx 000156 automatic fixed bin(17,0) dcl 113 set ref 264* 265 265* 349* 350 486* 487 487* 490* 492* 502* 504 506 517* 519* 525* 525* 527 527* in_emacs 50(02) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* in_task 134 based bit(1) initial level 4 packed packed unaligned dcl 2-30 set ref 216* 238 368* index builtin function dcl 154 ref 349 info_ptr 36 based pointer initial level 2 in structure "emacs_data" dcl 2-30 in procedure "emacs" set ref 216* 250* 465 info_ptr 14 000102 automatic pointer level 2 in structure "cinfo" dcl 108 in procedure "emacs" set ref 344 info_string 3 based varying char(256) level 2 dcl 164 ref 344 input_iocb 44 based pointer initial level 2 dcl 2-30 set ref 216* 251* interrupts 146 based structure level 2 dcl 2-30 ioa_$ioa_switch 000036 constant entry external dcl 63 ref 366 368 ioa_$rsnnl 000104 constant entry external dcl 91 ref 291 606 610 615 iox_$modes 000106 constant entry external dcl 92 ref 581 633 iox_$user_io 000136 external static pointer dcl 144 set ref 366* 368* 581* 633* isw 000010 internal static bit(1) initial packed unaligned dcl 147 set ref 263 268* last_msgp 622 based pointer initial level 2 dcl 2-30 set ref 216* ledir 536 based char(168) initial level 2 dcl 2-30 set ref 216* 269* 271* 283 288 608 length builtin function dcl 154 ref 291 291 604 604 606 606 610 610 615 615 level_info based structure level 1 dcl 2-122 set ref 481 495 574 639 level_ptr 632 based pointer initial level 2 dcl 2-30 set ref 216* 477 477 480 483 485 487 495 498* 502 502 504 506 517 519 525 527 527 531 531 576 583* 623 625 633 637 639 641* line_type 000157 automatic fixed bin(17,0) dcl 114 set ref 289* 290 lisp$lisp 000110 constant entry external dcl 93 ref 324 324 lisp_linkage_error 000550 stack reference condition dcl 159 ref 319 locemeter 000160 automatic fixed bin(17,0) dcl 115 set ref 596* 606 log_name 000161 automatic char(32) packed unaligned dcl 116 in procedure "emacs" set ref 192* 200* 209* 258 log_name 26 based char(32) initial level 2 in structure "emacs_data" dcl 2-30 in procedure "emacs" set ref 216* 258* 294 609 613 620 log_ptr 000172 automatic pointer dcl 117 set ref 286* 294* 609* 613* 620* log_subdir 000020 constant char(32) initial packed unaligned dcl 148 ref 288 608 loser 000174 automatic varying char(256) dcl 118 set ref 341* 344* 345 345* 348* 348 349 350* 350 354* 356* lstring 000275 automatic char(116) packed unaligned dcl 119 set ref 291* 291 291 294* 606* 606 606 609* 610* 610 610 613* 615* 615 615 620* messages_were_sent_here 50(06) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* mode 000332 automatic fixed bin(5,0) dcl 120 set ref 282* 283* 284 558* 591 myname 6 based char(32) initial level 2 in structure "emacs_data" dcl 2-30 in procedure "emacs" set ref 216* 256* 269 269 276* 278* 291* 328 341 345 354* 354* 356* 366* 368* 368* 403 416 myname 000333 automatic char(32) packed unaligned dcl 121 in procedure "emacs" set ref 189* 198* 207* 227 227* 248 256 n_allocated 103 based fixed bin(17,0) level 2 dcl 2-122 set ref 477 480 481* 490 495 574* 579 625 639 n_to_allocate 000343 automatic fixed bin(17,0) dcl 122 set ref 480* 481 481 572* 574 574 n_used 102 based fixed bin(17,0) level 2 dcl 2-122 set ref 477 485* 485 486 490 502 502* 517 525 531* 531 578* names 000000 constant char(32) initial array packed unaligned dcl 149 set ref 264 265* 265* netsw 50(05) based bit(1) initial level 3 in structure "emacs_data" packed packed unaligned dcl 2-30 in procedure "emacs" set ref 216* netsw 000344 automatic bit(1) packed unaligned dcl 123 in procedure "emacs" set ref 290* 599 new_arguments 50(03) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* 254* new_usage_info 000346 automatic structure level 1 dcl 124 set ref 594 594 next_invocation based pointer initial level 2 dcl 2-30 set ref 216* 218* 241 247 386 387 387 389* 389 no_task 52(04) based bit(1) level 3 packed packed unaligned dcl 2-30 set ref 234 null builtin function dcl 154 ref 216 216 216 216 216 216 216 216 216 216 216 216 216 216 217 219 236 244 286 340 340 387 389 492 570 579 623 number_wanted 000472 automatic fixed bin(17,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 285* number_wanted 000346 automatic fixed bin(17,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 593* obufptr 626 based pointer initial level 2 dcl 2-30 set ref 216* ospeed 630 based fixed bin(17,0) initial level 2 dcl 2-30 set ref 216* outmeter 000364 automatic fixed bin(17,0) dcl 125 set ref 596* 606* output_iocb 42 based pointer initial level 2 dcl 2-30 set ref 216* 251* p 000366 automatic pointer dcl 126 set ref 265* 481* 483 485 486 487 490 490 492 498 574* 576 578 579 581 583 637* 641 pad1 134(02) based bit(34) initial level 4 packed packed unaligned dcl 2-30 set ref 216* pad2 50(11) based bit(25) initial level 3 packed packed unaligned dcl 2-30 set ref 216* page_faults 6 000472 automatic fixed bin(34,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 615 page_faults 6 000346 automatic fixed bin(34,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 615 paging_measure 4 000472 automatic fixed bin(71,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 615 615 paging_measure 4 000346 automatic fixed bin(71,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 615 615 pd_faults 7 000346 automatic fixed bin(34,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 615 pd_faults 7 000472 automatic fixed bin(34,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 615 prev_invocation 2 based pointer initial level 2 dcl 2-30 set ref 216* 217* 219* 244* 387* 387 389 389 prev_level based pointer level 2 dcl 2-122 set ref 483* 483 576* 637 process_usage based structure level 1 unaligned dcl 4-3 r0emeter 000370 automatic fixed bin(17,0) dcl 127 set ref 596* 606* 606 record_quota_overflow 000556 stack reference condition dcl 160 ref 321 371 373 release_temp_segment_ 000124 constant entry external dcl 104 ref 533 release_temp_segments_ 000122 constant entry external dcl 102 ref 625 rtrim builtin function dcl 154 ref 257 274 276 276 288 291 291 324 324 341 345 604 604 608 segment_ptr parameter pointer dcl 176 set ref 512 519 533* segment_ptrs 104 based pointer array level 2 dcl 2-122 set ref 487* 487 492* 504* 506 519 527* 527 579* 625* stackframeptr builtin function dcl 154 ref 222 309 static_rdis_1 000014 internal static fixed bin(17,0) initial dcl 441 set ref 445* 610* static_rdis_10 000025 internal static fixed bin(17,0) initial dcl 441 set ref 454* 610* static_rdis_2 000015 internal static fixed bin(17,0) initial dcl 441 set ref 446* 610* static_rdis_3 000016 internal static fixed bin(17,0) initial dcl 441 set ref 447* 610* static_rdis_4 000017 internal static fixed bin(17,0) initial dcl 441 set ref 448* 610* static_rdis_5 000020 internal static fixed bin(17,0) initial dcl 441 set ref 449* 610* static_rdis_6 000021 internal static fixed bin(17,0) initial dcl 441 set ref 450* 610* static_rdis_7 000022 internal static fixed bin(17,0) initial dcl 441 set ref 451* 610* static_rdis_8 000023 internal static fixed bin(17,0) initial dcl 441 set ref 452* 610* static_rdis_9 000024 internal static fixed bin(17,0) initial dcl 441 set ref 453* 610* status_code 40 based fixed bin(35,0) initial level 2 dcl 2-30 set ref 216* 328 413* substr builtin function dcl 154 set ref 262* 345 348 350 604 604* system_area based area(1024) dcl 173 ref 216 242 481 495 574 639 system_area_ptr 000012 internal static pointer initial dcl 151 set ref 215* 216 242 481 495 570 570* 574 639 tail 150 based pointer initial level 3 dcl 2-30 set ref 216* task_flags 134 based structure level 3 dcl 2-30 task_id 135 based bit(36) initial level 3 dcl 2-30 set ref 216* tasking 134 based structure level 2 dcl 2-30 temp_ptr 000372 automatic pointer dcl 128 set ref 236* 236* 238 239 240 241* 243* 247 422* 423 temp_string 000374 automatic char(168) packed unaligned dcl 129 set ref 260* 261 termid 000446 automatic char(4) packed unaligned dcl 130 set ref 289* 291* terminal_type 154 based char(256) initial level 2 dcl 2-30 set ref 216* time_in 000450 automatic fixed bin(71,0) dcl 131 set ref 293* 294* 595* 595 615 tty_modes 254 based char(512) initial level 2 in structure "emacs_data" dcl 2-30 in procedure "emacs" set ref 216* tty_modes 2 based char(256) level 2 in structure "level_info" packed packed unaligned dcl 2-122 in procedure "emacs" set ref 581* 633* ttychan 000452 automatic char(32) packed unaligned dcl 132 set ref 289* 291* ttytype 000462 automatic char(32) packed unaligned dcl 133 set ref 289* 291* 599* 603* 604 604 604 604* 606* turned_on_video 50(09) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* 630 update_breaktable 50(07) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* usage_info 000472 automatic structure level 1 dcl 134 set ref 287 287 user_info_$terminal_data 000112 constant entry external dcl 94 ref 289 using_r0_echnego 50(04) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* using_video 50(01) based bit(1) initial level 3 packed packed unaligned dcl 2-30 set ref 216* video_utils_$turn_off_login_channel 000114 constant entry external dcl 96 ref 630 virtual_cpu_time 10 000472 automatic fixed bin(71,0) level 2 in structure "usage_info" dcl 134 in procedure "emacs" set ref 615 virtual_cpu_time 10 000346 automatic fixed bin(71,0) level 2 in structure "new_usage_info" dcl 124 in procedure "emacs" set ref 615 vtyp 000510 automatic varying char(100) dcl 135 set ref 598* 599 603 write_log_$write_log_file 000120 constant entry external dcl 100 ref 294 609 613 620 write_log_$write_log_test 000116 constant entry external dcl 98 ref 288 608 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. LINE_1050 internal static fixed bin(17,0) initial dcl 3-22 LINE_2741 internal static fixed bin(17,0) initial dcl 3-22 LINE_ARDS internal static fixed bin(17,0) initial dcl 3-22 LINE_ASCII internal static fixed bin(17,0) initial dcl 3-22 LINE_ASYNC1 internal static fixed bin(17,0) initial dcl 3-22 LINE_ASYNC2 internal static fixed bin(17,0) initial dcl 3-22 LINE_ASYNC3 internal static fixed bin(17,0) initial dcl 3-22 LINE_BSC internal static fixed bin(17,0) initial dcl 3-22 LINE_COLTS internal static fixed bin(17,0) initial dcl 3-22 LINE_DSA internal static fixed bin(17,0) initial dcl 3-22 LINE_ETX internal static fixed bin(17,0) initial dcl 3-22 LINE_G115 internal static fixed bin(17,0) initial dcl 3-22 LINE_HASP_OPR internal static fixed bin(17,0) initial dcl 3-22 LINE_HDLC internal static fixed bin(17,0) initial dcl 3-22 LINE_MC internal static fixed bin(17,0) initial dcl 3-22 LINE_POLLED_VIP internal static fixed bin(17,0) initial dcl 3-22 LINE_SYNC1 internal static fixed bin(17,0) initial dcl 3-22 LINE_SYNC2 internal static fixed bin(17,0) initial dcl 3-22 LINE_SYNC3 internal static fixed bin(17,0) initial dcl 3-22 LINE_SYNCH internal static fixed bin(17,0) initial dcl 3-22 LINE_UNKNOWN internal static fixed bin(17,0) initial dcl 3-22 LINE_VIP internal static fixed bin(17,0) initial dcl 3-22 LINE_X25LAP internal static fixed bin(17,0) initial dcl 3-22 condition_info_ptr automatic pointer dcl 1-10 condition_info_version_1 internal static fixed bin(17,0) initial dcl 1-30 line_types internal static char(16) initial array packed unaligned dcl 3-54 max_line_type internal static fixed bin(17,0) initial dcl 3-48 n_sync_line_types internal static fixed bin(17,0) initial dcl 3-50 path based structure level 1 dcl 2-113 process_usage_pointer automatic pointer dcl 4-3 sync_line_type internal static fixed bin(17,0) initial array dcl 3-52 NAMES DECLARED BY EXPLICIT CONTEXT. debug_off 003427 constant entry external dcl 553 debug_on 003371 constant entry external dcl 542 e_ne_common 000520 constant label dcl 211 ref 193 201 emacs 000365 constant entry external dcl 11 ref 260 260 emacs_ 000427 constant entry external dcl 195 emacs_start 000410 constant label dcl 189 ref 15 escape_loop 001067 constant label dcl 248 ref 234 245 found_release 003304 constant label dcl 525 ref 519 get_info_ptr 002763 constant entry external dcl 460 get_my_name 002443 constant entry external dcl 398 get_temporary_seg 003021 constant entry external dcl 472 get_version 002632 constant entry external dcl 429 llerror 003470 constant entry internal dcl 333 ref 319 multics_emacs 000377 constant entry external dcl 11 ne 000477 constant entry external dcl 203 new_emacs 000465 constant entry external dcl 203 not_tasking 002205 constant label dcl 311 ref 303 pop_level 004244 constant entry internal dcl 589 ref 315 326 337 559 push_level 004136 constant entry internal dcl 567 ref 297 547 release_temporary_seg 003225 constant entry external dcl 512 returner 002423 constant label dcl 330 ref 359 rqoerror 003740 constant entry internal dcl 362 ref 321 373 set_emacs_return_code 002516 constant entry external dcl 407 set_lisp_rdis_meters 002705 constant entry external dcl 436 tasking_emacs 002167 constant entry external dcl 305 unthread_invocation 004076 constant entry internal dcl 377 ref 316 329 358 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6254 6416 5337 6264 Length 7050 5337 142 415 715 16 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME emacs 556 external procedure is an external procedure. on unit on line 311 68 on unit on unit on line 319 142 on unit on unit on line 321 64 on unit llerror internal procedure shares stack frame of on unit on line 319. rqoerror 130 internal procedure enables or reverts conditions. on unit on line 373 64 on unit unthread_invocation 64 internal procedure is called by several nonquick procedures. push_level internal procedure shares stack frame of external procedure emacs. pop_level 208 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 isw emacs 000012 system_area_ptr emacs 000014 static_rdis_1 emacs 000015 static_rdis_2 emacs 000016 static_rdis_3 emacs 000017 static_rdis_4 emacs 000020 static_rdis_5 emacs 000021 static_rdis_6 emacs 000022 static_rdis_7 emacs 000023 static_rdis_8 emacs 000024 static_rdis_9 emacs 000025 static_rdis_10 emacs STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME emacs 000100 cgmeter emacs 000102 cinfo emacs 000134 code emacs 000135 edirl emacs 000136 env_name emacs 000146 groupid emacs 000156 idx emacs 000157 line_type emacs 000160 locemeter emacs 000161 log_name emacs 000172 log_ptr emacs 000174 loser emacs 000275 lstring emacs 000332 mode emacs 000333 myname emacs 000343 n_to_allocate emacs 000344 netsw emacs 000346 new_usage_info emacs 000364 outmeter emacs 000366 p emacs 000370 r0emeter emacs 000372 temp_ptr emacs 000374 temp_string emacs 000446 termid emacs 000450 time_in emacs 000452 ttychan emacs 000462 ttytype emacs 000472 usage_info emacs 000510 vtyp emacs 000564 emacs_data_ptr emacs 000566 MACRO_PATH emacs 000567 FIND_PATH emacs THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry divide_fx3 op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_$suppress_name cu_$arg_list_ptr cu_$arg_ptr_rel cu_$cl e_argument_parse_ e_argument_parse_$subroutine e_find_invocation_ e_pl1_$dump_out_console_messages e_pl1_$get_terminal_type e_pl1_$return_echo_meters e_pl1_$set_multics_tty_modes e_tasking_ expand_pathname_ find_condition_info_ forward_command_ get_group_id_ get_system_free_area_ get_temp_segment_ hcs_$fs_get_path_name hcs_$get_process_usage hcs_$get_user_effmode hcs_$initiate hcs_$status_minf ioa_$ioa_switch ioa_$rsnnl iox_$modes lisp$lisp release_temp_segment_ release_temp_segments_ user_info_$terminal_data video_utils_$turn_off_login_channel write_log_$write_log_file write_log_$write_log_test THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. emacs_data_$invocation_list emacs_data_$log_dir emacs_data_$status_code emacs_data_$version iox_$user_io LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 2 119 000357 2 120 000360 11 000364 15 000407 189 000410 191 000413 192 000416 193 000421 195 000422 198 000452 199 000455 200 000460 201 000463 203 000464 207 000507 208 000512 209 000515 211 000520 215 000522 216 000530 217 000677 218 000700 219 000704 221 000712 222 000713 225 000714 226 000722 227 000723 229 000752 230 001000 234 001017 236 001023 238 001034 239 001040 240 001044 241 001045 242 001052 243 001054 244 001057 245 001063 247 001064 248 001067 250 001073 251 001100 254 001104 255 001107 256 001116 257 001122 258 001163 260 001167 261 001224 262 001230 263 001241 264 001244 265 001251 266 001322 268 001324 269 001327 271 001345 274 001350 275 001442 276 001445 278 001521 279 001550 282 001565 283 001566 284 001635 285 001640 286 001642 287 001644 288 001660 289 001730 290 001761 291 001765 293 002072 294 002075 297 002133 299 002134 301 002135 302 002146 303 002165 305 002166 308 002177 309 002203 311 002205 314 002221 315 002230 316 002235 317 002242 319 002243 321 002261 324 002303 326 002402 328 002407 329 002417 330 002423 398 002440 401 002453 403 002462 407 002512 411 002526 413 002535 414 002541 416 002544 422 002565 423 002607 425 002612 429 002627 432 002642 436 002674 445 002715 446 002721 447 002723 448 002725 449 002727 450 002731 451 002733 452 002735 453 002737 454 002741 455 002743 460 002760 463 002772 465 003001 472 003016 475 003030 477 003037 480 003044 481 003047 483 003061 485 003065 486 003071 487 003077 488 003105 490 003107 492 003121 493 003126 495 003130 498 003137 502 003142 504 003150 506 003200 512 003222 515 003235 517 003244 519 003255 520 003265 522 003267 525 003304 527 003313 529 003320 531 003322 533 003326 535 003353 542 003370 545 003401 547 003410 549 003411 553 003426 556 003437 558 003446 559 003447 561 003453 333 003470 336 003471 337 003501 340 003506 341 003527 344 003554 345 003562 348 003607 349 003620 350 003632 354 003637 356 003674 358 003727 359 003734 362 003737 364 003745 365 003754 366 003761 368 004007 371 004044 372 004045 373 004052 374 004074 377 004075 386 004103 387 004113 389 004124 391 004133 392 004135 567 004136 570 004137 572 004152 574 004154 576 004166 578 004171 579 004173 581 004211 583 004237 585 004242 589 004243 591 004251 593 004255 594 004257 595 004272 596 004303 597 004320 598 004330 599 004342 602 004355 603 004356 604 004417 606 004447 608 004525 609 004576 610 004640 613 004732 615 004773 620 005111 623 005152 625 005160 628 005215 630 005222 633 005237 635 005270 637 005275 639 005303 641 005312 643 005317 ----------------------------------------------------------- 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