COMPILATION LISTING OF SEGMENT xforum_window_mgr Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/06/87 1022.7 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(85-01-08,Davids), approve(86-02-04,MCR7350), 12* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 13* Deleted the function_key_data_ptr and handle_interactive_messages 14* input parameters from the get_help entry. Replaced the parameters 15* with internal automatic variables set via calls to the 16* xforum_user_profile routine. 17* 18* 85-01-14 Davids: replaced calls to accept_messages and 19* defer_messages with calls to xforum_im_mgr$accept_messages and 20* defer_messages. 21* 22* 85-04-18 Davids: Added a check to be sure that the user_io window 23* width is at least 79 columns wide. Error list entry #9. 24* 2) change(87-04-03,LJAdams), approve(87-04-22,MCR7684), 25* audit(87-07-24,Blair), install(87-08-06,MR12.1-1065): 26* Changed setting up/shutting down msg. 27* END HISTORY COMMENTS */ 28 29 30 xforum_window_mgr: proc; 31 32 /* BEGIN DESCRIPTION 33* 34*function: 35* This module contains entry points for managing the 36* structure of the xforum windows. 37* 38*description of entry points: 39* set_up_xforum_windows: This entry point is used to create the windows used 40* by xforum. The video system is invoked if its not already turned on. Xforum 41* builds its windows by carving out pieces of the user_io window, the 42* user_io window must start out with at least 19 lines or there will not be 43* enough space for all the windows under all circumstances. The entry also 44* sets the value of the internal static flag xwm_no_local_menu_display. The 45* value of this flag is set to true if the value of "xforum_have_local_menus._" 46* in the user's permanent value segment is "yes". Otherwise it is set to 47* false. This flag is used to allow a user to bypass the menu display if 48* he has some other form of local display capability. Note that the menu 49* window is originally created with only 1 line. It is resized as the size of 50* the menu to be displayed changes. If the xwm_no_local_menu_display is false 51* the menu window is resized to 0 lines. 52* 53* resynch_windows: This entry is used to adjust the current sizes of the 54* xforum_windows.menu.iocb window and the user_io (bottom) window so that 55* there is enough (and only enough) room for the current menu's requirements. 56* All the work is done by calling the resynch_windows_p procedure. 57* Note that if the xwm_no_local_menu_display is false this entry is just a 58* no-op since the menu window is not being use. 59* 60* check_window_status: This entry checks all the xforum windows to be sure 61* that none of them have a window_status_pending flag set. If a window does 62* have the flag set a call is made to fix_status which resets the flag. If any 63* window had the flag set a call to redisplay is made to redisplay all the 64* windows cause we don't know why the flag was set and must assume that the 65* screen image has been changed. 66* 67* prepare_to_shut_down: This entry is used to start the xforum termination 68* process. The user_io window is reset back to its original size. An input 69* flag is used to determine if the call is being made in response to a 70* normal termination or a cleanup being executed. If its a normal termination 71* the user_io window (newly enlarged) is cleared and write_shut_down_message 72* is called to tell the user that xforum is shutting down. 73* 74* shut_down_xforum_windows: is called to destroy the status, menu, and 75* help_line windows. An input flag is used to determine if the call is being 76* made in response to a normal termination or a cleanup being executed. If its 77* a normal termination the user_io window is cleared, getting rid of the shut 78* down message. If the video_system was turned during the 79* set_up_xforum_windows call then it is turned off here. 80* 81* menu_display: This entry is used to display xforum menus. All xforum static 82* menus are displayed via this entry. This entry does nothing if the 83* xwm_no_local_menu_display flag is set to false. xforum dynamic menus are 84* not displayed using this entry. Dynamic menus must be displayed regardless 85* of the value of the xwm_no_local_menu_display flag. 86* 87* menu_get_choice: This entry is used to get a menu choice from the user for 88* all xforum static menus. If the xwm_no_local_menu_display flag is true 89* a call is made to menu_$get_choice. If the flag is false a special protocol 90* is used to get the user's response. Two characters are input via 91* iox_$get_line. The first character must be a 0 or 1, any other character is 92* rejected WITHOUT an error message and a call made to get another character. 93* A 1 indicates that the next character identifies a function key while a 0 94* indicates that the next character is a menu option choice. Menu choices 95* and function keys are identified by number. The number is represented as a 96* character, i.e. 5 is the character \005, 12 is \014. This character is then 97* appended onto the end of a bit string to produce a fixed bin number. the 98* result of this is a function key flag and menu choice - the same as the call 99* to menu_$get_choice. 100* 101*description of internal procedures: 102* 103* fix_status: does a call to get_window_status for the input window iocb_ptr. 104* The result of this call is to reset the window_status_pending flag for the 105* window. The ttp_changed bit of the status structure is also checked. If the 106* terminal type has changed then the current width is obtained via a call to 107* get_window_info. If the current terminal width is less than the original 108* width an error will be signaled. It would be better to just delete all the 109* menus and recreate them as needed but at the moment this would require a 110* massive change. This will at least catch the error. 111* 112* create_status_window: Creates the two line status window at the top of 113* user_io. 114* 115* create_menu_window: Creates a 1 line menu window uder the status window.. 116* 117* create_bottom_window: Resizes the user_io window so that it starts under the 118* menu window and extends to one line above its original last line. 119* 120* create_help_line_window: Creates a 1 line help_line window on the line 121* following the new last line of the user_io window. 122* 123* write_start_up_message: Determines the center line of the original user_io 124* window and then writes a message telling the user that Xforum is starting 125* up on that line. The message is also centered within the line. After the 126* message is written the cursor is positioned 2 lines below it on the left 127* margin. This is done so that any error messages that are output are easier 128* to read. A window_$sync is done to force the message to be output. 129* 130* write_shut_down_message: Uses the center_line and left margin determined 131* in write_start_up_message to write a shut down message. After the 132* message is written the cursor is positioned 2 lines below it on the left 133* margin. This is done so that any error messages that are output are easier 134* to read. A window_$sync is done to force the message to be output. 135* 136* resynch_windows_p: This procedure implements the resynch_windows entry. 137* If the input required size is 0 or negative it means that no menu window is 138* needed and the bottom window is to be expanded over the menu window and, if 139* the size is negative, into the status window. It is assumed that no output 140* will be done to the menu window (and status window) so it (they) is not 141* destroyed. A flag is also input to control the clearing of the bottom 142* window. In some cases like multics mode you do not want to clear the bottom 143* window. In other cases like changing menus you do want to clear it. 144* 145* error: this is called when a fatal error has been detected by xforum. 146* A fatal error happens when an unexpected error code is returned from 147* a system routine, i.e. a non-zero code returned from video_utils, or the 148* user's original user_io window is too small. It signals the 149* xforum_fatal_error condition. There is a condition handler for this 150* in the xforum module. 151* 152*known bugs: 153* 154*notes: 155* 156*history: 157* 84-06-19 Davids: Written. 158* 159* 84-06-21 Davids: Added support for the mm_status_window and flag to the 160* parameters of resynch_windows to control clearing the bottom window. On 161* multics mode we do not want to clear the bottom window. 162* 163* 84-07-05 Davids: Added local menu display capability. To do this the 164* entries menu_display and menu_get_choice were added. Also the 165* resync_windows_p internal proc and changed the resynch_windows entry 166* to call it. This was needed so that the resynch_windows entry can be 167* a no-op if process has local menu display. 168* 169* 84-07-06 Davids: Changed the status window to be 3 lines instead of 2 lines. 170* This required shifting the menu and bottom windows down by 1. This was done 171* so that the menu title can become part of the status window instead of 172* part of the menu. This will allow the menu title - which includes the current 173* meeting name to be displayed even with local display of the menus. 174* Modified the resynch_windows entry to clear the bottom window if local 175* display of the menus occurs. 176* 177* 84-07-24 Davids: Removed the mm_status window and created the help_line 178* window. 179* 180* 84-08-13 Davids: Added the parameter mgc_handle_interactive_messages to 181* the menu_get_choice entry and the code to handle messages. If the 182* flag is set then before the choice is input messages will be accepted. 183* Messages already recieved will be printed in the user_io window and then 184* deleted. After the menu choice is input messages will again be defered. 185* 186* 84-08-30 Davids: Added the ptsd_ and sdxw_ cleanup_flag to the 187* prepare_to_shut_down and shut_down_xforum_windows entrys. These will 188* control i/o to the terminal. If cleanup is signaled there should be no 189* i/o done. 190* 191* 84-08-31 Davids: Changed check_window_status to do a position_cursor_rel 192* with a 0 change in line and column instead of a position_cursor. This was 193* needed so that when the user hits a quit in multics mode the cursor is not 194* repositioned. (The quit handler calls the check_window_status entry.) 195* 196* 84-09-19 Davids: changed references to origin.mbz in the window structures 197* to origin.column and set the value to 1 instead of 0. This was needed 198* because the system window structure was changed. 199* 200* 84-09-25 Changed from xforum_have_local_menus to xforum_have_local_menus._ 201* 202* 84-10-04 Davids: Added code to the fix_status procedure to test the 203* ttp_changed bit and if on to compare the current terminal width with the 204* original terminal width. If the terminal is narrower an error will occur. 205* 206* 84-10-22 Davids: Changed message handling so that it is the same as 207* Xmail's, except for the -brief control arg for print_messages. Xforum 208* will not start using the MR11 message system control args until after a 209* controlled release tape is cut. 210* 211* 84-11-07 Davids: Audit changes: 1) Corrected if statement that determined 212* the smallest height of the screen. It was checking for 20 when it should 213* have been checking for 19. 2) Added calls to iox_$destroy_iocb to destroy 214* the window iocbs after destroying the windows. 3) Added the mgc_choice_based 215* variable to convert the choice from a character to a fixed bin number 216* instead of calling unspec. 4) Cleaned up some messages, added initial 217* capitals and periods. 5) Moved the starting up message into a constant 218* since it is referenced twice. 219* 220* 84-11-16 Davids: Added the "-brief" argument to the call to print_messages 221* This is needed so that the call does not result in a "You have no messages" 222* message being output. print_message was incompatibly changed. 223*END DESCRIPTION 224**/ 225 226 /* PARAMETERS */ 227 228 /* GLOBAL */ 229 230 /* EXTERNAL STATIC */ 231 232 dcl iox_$user_io ptr ext static; 233 dcl video_data_$terminal_iocb ptr ext static; 234 dcl video_et_$window_status_pending fixed bin (35) ext static; 235 236 /* ENTRIES */ 237 238 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 239 dcl iox_$destroy_iocb entry (ptr, fixed bin (35)); 240 dcl iox_$find_iocb entry (char (*), ptr, fixed bin (35)); 241 dcl menu_$display entry (ptr, ptr, fixed bin (35)); 242 dcl menu_$get_choice entry (ptr, ptr, ptr, bit (1) aligned, fixed bin, fixed bin (35)); 243 dcl signal_ entry () options (variable); 244 dcl unique_chars_ entry (bit (*)) returns (char (15)); 245 dcl value_$get entry () options (variable); 246 dcl video_utils_$turn_off_login_channel entry (fixed bin (35)); 247 dcl video_utils_$turn_on_login_channel entry (fixed bin (35), char (*)); 248 dcl window_$clear_window entry (ptr, fixed bin (35)); 249 dcl window_$create entry (ptr, ptr, ptr, fixed bin (35)); 250 dcl window_$destroy entry (ptr, fixed bin (35)); 251 dcl window_$get_one_unechoed_char entry (ptr, char (1) var, bit (1) aligned, fixed bin (35)); 252 dcl window_$overwrite_text entry (ptr, char (*), fixed bin (35)); 253 dcl window_$position_cursor entry (ptr, fixed bin, fixed bin, fixed bin (35)); 254 dcl window_$position_cursor_rel entry (ptr, fixed bin, fixed bin, fixed bin (35)); 255 dcl window_$sync entry (ptr, fixed bin (35)); 256 dcl xforum_im_mgr$accept_messages entry (); 257 dcl xforum_im_mgr$defer_messages entry (); 258 dcl xforum_redisplay_ entry options (variable); 259 dcl xforum_user_profile$get_function_key_data_ptr entry () returns (ptr); 260 dcl xforum_user_profile$get_handle_interactive_messages entry () returns (bit (1)); 261 262 /* CONDITIONS */ 263 264 /* INTERNAL AUTOMATIC */ 265 266 /* INTERNAL STATIC */ 267 268 dcl xwm_center_line fixed bin internal static; 269 dcl xwm_left_margin fixed bin internal static; 270 dcl xwm_no_local_menu_display bit (1) internal static; 271 dcl xwm_video_was_already_on bit (1) internal static; 272 dcl 01 xwm_xforum_error_info like xforum_error_info internal static; 273 274 275 /* CONSTANTS */ 276 277 dcl xwm_WAIT_FOR_INPUT bit (1) aligned init ("1"b) internal static options (constant); 278 279 /* BUILTINS */ 280 281 dcl addr builtin; 282 dcl divide builtin; 283 dcl length builtin; 284 dcl null builtin; 285 286 /* BASED */ 287 288 /* INCLUDE FILES */ 289 1 1 /* BEGIN INCLUDE FILE xforum_error_info 84-06-19 Davids */ 1 2 1 3 dcl 01 xforum_error_info based, 1 4 02 name char (32), 1 5 02 entry char (32), 1 6 02 doing char (100), 1 7 02 code fixed bin (35), 1 8 02 reason char (512); 1 9 1 10 /* END INCLUDE FILE xforum_error_info */ 290 291 2 1 /* START OF: xforum_windows.incl.pl1 * * * * * */ 2 2 2 3 /* structures for windows used by xforum - Deryk Barker January 1984 */ 2 4 2 5 dcl 1 xforum_windows aligned external static, 2 6 2 (status, menu, bottom, orig_user_io, help_line) aligned like xforum_window_info; 2 7 2 8 dcl 1 xforum_window_info, 2 9 2 iocb ptr, 2 10 2 position aligned like window_position_info; 2 11 3 1 /* BEGIN INCLUDE FILE ... window_control_info.incl.pl1 JRD */ 3 2 /* format: style3 */ 3 3 3 4 /* Modified 26 January 1982 by William York to add the set_more_handler 3 5* and reset_more_handler control orders. */ 3 6 /* Modified October 1982 by WMY to add set and get_token_characters, 3 7* set and get_more_prompt. */ 3 8 /* Modified February 1983 by WMY to add the line_editor_key_binding_info 3 9* structure. */ 3 10 /* Modified 30 September 1983 by Jon A. Rochlis to add the origin.column for 3 11* partial screen width windows. */ 3 12 /* Modified 9 October 1983 by JR to add version 1 window_edit_line_info. 3 13* This should be removed when window_info.incl.pl1 is created. */ 3 14 /* Modified 29 February 1984 by Barmar to add version 1 3 15* get_editor_key_bindings_info. */ 3 16 /* Modified 1 March 1984 by Barmar to add version 1 3 17* set_editor_key_bindings_info. */ 3 18 /* Modified 2 March 1984 by Barmar to upgrade to version 3 3 19* line_editor_key_bindings_info, which includes the name, description, and 3 20* info path */ 3 21 3 22 /* structure for the set_window_info and get_window_info 3 23* control orders. */ 3 24 3 25 dcl 1 window_position_info 3 26 based (window_position_info_ptr), 3 27 2 version fixed bin, 3 28 2 origin, 3 29 3 column fixed bin, 3 30 3 line fixed bin, 3 31 2 extent, 3 32 3 width fixed bin, 3 33 3 height fixed bin; 3 34 3 35 dcl (window_position_info_version, window_position_info_version_1) 3 36 fixed bin internal static init (1) options (constant); 3 37 dcl window_position_info_ptr 3 38 pointer; 3 39 3 40 /* structure for the set_window_status and get_window_status 3 41* control orders */ 3 42 3 43 declare window_status_info_ptr 3 44 pointer; 3 45 declare 1 window_status_info 3 46 aligned based (window_status_info_ptr), 3 47 2 version fixed bin, 3 48 2 status_string bit (36) aligned; /* string (window_status) */ 3 49 /* see window_status.incl.pl1 for the contents of this string */ 3 50 3 51 3 52 declare (window_status_version, window_status_version_1) 3 53 fixed bin internal static init (1) options (constant); 3 54 3 55 /* info structure for the set_more_responses and get_more_responses control 3 56* orders */ 3 57 3 58 3 59 dcl 1 more_responses_info 3 60 aligned based (more_responses_info_ptr), 3 61 2 version fixed bin, 3 62 2 n_yeses fixed bin, /* how many valid characters in the strings below */ 3 63 2 n_noes fixed bin, 3 64 2 yeses char (32) unaligned, 3 65 2 noes char (32) unaligned; 3 66 3 67 dcl (more_responses_info_version_1, more_responses_version) 3 68 fixed bin internal static init (1) options (constant); 3 69 dcl more_responses_info_ptr 3 70 pointer; 3 71 3 72 /* structure for the set_break_table and get_break_table 3 73* control orders */ 3 74 3 75 declare break_table_ptr pointer; 3 76 declare 1 break_table_info aligned based (break_table_ptr), 3 77 2 version fixed bin, 3 78 2 breaks (0:127) bit (1) unaligned; 3 79 3 80 declare (break_table_info_version, break_table_info_version_1) 3 81 fixed bin init (1) internal static options (constant); 3 82 3 83 declare 1 more_handler_info aligned based (more_handler_info_ptr), 3 84 2 version fixed bin, 3 85 2 flags unaligned, 3 86 3 old_handler_valid 3 87 bit(1), 3 88 3 pad bit(35), 3 89 2 more_handler entry (pointer, bit(1) aligned), 3 90 2 old_more_handler entry (pointer, bit(1) aligned); 3 91 3 92 declare more_handler_info_ptr pointer; 3 93 3 94 declare (more_handler_info_version, more_handler_info_version_3) 3 95 fixed bin internal static options (constant) init (3); 3 96 3 97 declare 1 token_characters_info aligned based (token_characters_info_ptr), 3 98 2 version char(8), 3 99 2 token_character_count 3 100 fixed bin, 3 101 2 token_characters 3 102 char (128) unaligned; 3 103 3 104 declare token_characters_info_ptr pointer; 3 105 3 106 declare token_characters_info_version_1 char(8) internal static options (constant) init ("wtci0001"); 3 107 3 108 declare 1 more_prompt_info aligned based (more_prompt_info_ptr), 3 109 2 version char(8), 3 110 2 more_prompt char(80); 3 111 3 112 declare more_prompt_info_ptr pointer; 3 113 3 114 declare more_prompt_info_version_1 char(8) static options (constant) init ("wsmp0001"); 3 115 3 116 /* Line editor stuff ... */ 3 117 3 118 dcl line_editor_key_binding_info_ptr 3 119 pointer; 3 120 3 121 dcl line_editor_binding_count 3 122 fixed bin; 3 123 dcl line_editor_longest_sequence 3 124 fixed bin; 3 125 /* For each binding, action defines what to do for that sequence. Constants 3 126* are defined in window_editor_values.incl.pl1. Only if action is set to 3 127* EXTERNAL_ROUTINE does the editor_routine entry variable get examined. */ 3 128 3 129 dcl 1 line_editor_key_binding_info 3 130 aligned based (line_editor_key_binding_info_ptr), 3 131 2 version char(8), 3 132 2 binding_count fixed bin, 3 133 2 longest_sequence fixed bin, 3 134 2 bindings (line_editor_binding_count refer 3 135 (line_editor_key_binding_info.binding_count)), 3 136 3 sequence char(line_editor_longest_sequence refer 3 137 (line_editor_key_binding_info.longest_sequence)) varying, 3 138 3 action fixed bin, 3 139 3 numarg_action fixed binary, 3 140 3 editor_routine entry (pointer, fixed bin(35)), 3 141 3 name char (64) varying unaligned, 3 142 3 description char (256) varying unaligned, 3 143 3 info_path unaligned, 3 144 4 info_dir char (168), 3 145 4 info_entry char (32); 3 146 3 147 3 148 dcl line_editor_key_binding_info_version_3 3 149 char(8) static options (constant) init ("lekbi003"); 3 150 3 151 dcl 1 get_editor_key_bindings_info aligned based (get_editor_key_bindings_info_ptr), 3 152 2 version char (8), 3 153 2 flags, 3 154 3 entire_state bit (1) unaligned, 3 155 3 mbz bit (35) unaligned, 3 156 2 key_binding_info_ptr ptr, 3 157 2 entire_state_ptr ptr; 3 158 3 159 dcl get_editor_key_bindings_info_ptr ptr; 3 160 dcl get_editor_key_bindings_info_version_1 char (8) int static options (constant) init ("gekbi_01"); 3 161 3 162 dcl 1 set_editor_key_bindings_info aligned 3 163 based (set_editor_key_bindings_info_ptr), 3 164 2 version char (8), 3 165 2 flags, 3 166 3 replace bit (1) unaligned, 3 167 3 update bit (1) unaligned, 3 168 3 mbz bit (34) unaligned, 3 169 2 key_binding_info_ptr ptr; 3 170 3 171 dcl set_editor_key_bindings_info_ptr ptr; 3 172 dcl set_editor_key_bindings_info_version_1 char (8) int static options (constant) init ("sekbi_01"); 3 173 3 174 /* This should be moved to window_info.incl.pl1 when that include file is 3 175* created. JR 2/1/84 */ 3 176 3 177 dcl 1 window_edit_line_info 3 178 based (window_edit_line_info_ptr), 3 179 2 version char (8), 3 180 2 line_ptr ptr, 3 181 2 line_length fixed bin (21); /* later we will hack initial cursor position, key bindings, etc. */ 3 182 3 183 dcl window_edit_line_info_version_1 3 184 char (8) static options (constant) init ("wedl0001"); 3 185 3 186 dcl window_edit_line_info_ptr 3 187 ptr; 3 188 3 189 /* END INCLUDE FILE window_control_info.incl.pl1 */ 2 12 2 13 2 14 /* END OF: xforum_windows.incl.pl1 * * * * * */ 292 293 4 1 /* begin include file window_status.incl.pl1 */ 4 2 /* Modified 28 March 1984 by Jon A. Rochlis to add terminal type change 4 3* and reconnection stuff. */ 4 4 /* format: style3 */ 4 5 /* interrupts that an application can recieve from a window */ 4 6 4 7 declare window_status_string 4 8 bit (36) unaligned; 4 9 4 10 declare 1 window_status aligned, 4 11 2 screen_invalid bit (1) unaligned, 4 12 2 async_change bit (1) unaligned, 4 13 2 ttp_change bit (1) unaligned, 4 14 2 reconnection bit (1) unaligned, 4 15 2 pad bit (32) unaligned; 4 16 4 17 declare ( 4 18 W_STATUS_SCREEN_INVALID 4 19 init ("1"b), 4 20 W_STATUS_ASYNC_EVENT 4 21 init ("01"b), 4 22 W_STATUS_TTP_CHANGE 4 23 init ("001"b), 4 24 W_STATUS_RECONNECTION 4 25 init ("0001"b) 4 26 ) bit (36) aligned internal static options (constant); 4 27 4 28 /* end include file window_status.incl.pl1 */ 294 295 296 set_up_xforum_windows: entry; 297 298 /* AUTOMATIC */ 299 300 dcl suxw_code fixed bin (35); 301 dcl suxw_local_menu_state char (3); 302 dcl suxw_reason char (512); 303 304 xwm_video_was_already_on = (video_data_$terminal_iocb ^= null); 305 if ^xwm_video_was_already_on then do; 306 call video_utils_$turn_on_login_channel (suxw_code, suxw_reason); 307 if suxw_code ^= 0 then 308 call error (suxw_code, suxw_reason); 309 end; 310 311 call window_$clear_window (iox_$user_io, suxw_code); 312 if suxw_code ^= 0 then 313 call error (suxw_code, "Could not clear user_io window"); 314 315 xforum_windows.orig_user_io.version = window_position_info_version_1; 316 call iox_$control (iox_$user_io, "get_window_info", 317 addr (xforum_windows.orig_user_io.position), suxw_code); 318 if suxw_code ^= 0 then 319 call error (suxw_code, "Could not get the user_io window data"); 320 321 if xforum_windows.orig_user_io.extent.height < 19 322 then call error (0, "The user_io window is to small to run Xforum.^/ The window must be at least 19 lines high."); 323 324 if xforum_windows.orig_user_io.extent.width < 79 325 then call error (0, "The user_io window is to narrow to run Xforum.^/ The window must be at least 79 columns wide."); 326 327 call write_start_up_message; 328 329 call create_status_window; 330 331 call create_menu_window; 332 333 call create_bottom_window; 334 335 call create_help_line_window; 336 337 xwm_no_local_menu_display = "1"b; 338 call value_$get (null (), "11"b, "xforum_have_local_menus._", suxw_local_menu_state, suxw_code); 339 if suxw_code = 0 340 then do; 341 if suxw_local_menu_state = "yes" 342 then do; 343 xwm_no_local_menu_display = "0"b; 344 call resynch_windows_p (0, "0"b); 345 end; 346 end; 347 348 return; 349 350 resynch_windows: entry (rw_size_needed, rw_clear_bottom_window); 351 352 /* PARAMETERS */ 353 354 dcl rw_size_needed fixed bin; 355 dcl rw_clear_bottom_window bit (1); 356 357 358 if xwm_no_local_menu_display 359 then call resynch_windows_p (rw_size_needed, rw_clear_bottom_window); 360 else call window_$clear_window (xforum_windows.bottom.iocb, (0)); 361 362 return; 363 364 check_window_status: entry; 365 366 /* AUTOMATIC */ 367 368 dcl cws_any_window_status_pending bit (1); 369 dcl cws_code fixed bin (35); 370 cws_any_window_status_pending = "0"b; 371 372 call window_$position_cursor_rel (xforum_windows.status.iocb, 0, 0, cws_code); 373 if cws_code = video_et_$window_status_pending 374 then do; 375 call fix_status (xforum_windows.status.iocb); 376 cws_any_window_status_pending = "1"b; 377 end; 378 else 379 if cws_code ^= 0 380 then call error (cws_code, "error in status window"); 381 382 call window_$position_cursor_rel (xforum_windows.help_line.iocb, 0, 0, cws_code); 383 if cws_code = video_et_$window_status_pending 384 then do; 385 call fix_status (xforum_windows.help_line.iocb); 386 cws_any_window_status_pending = "1"b; 387 end; 388 else 389 if cws_code ^= 0 390 then call error (cws_code, "error in help line window"); 391 392 call window_$position_cursor_rel (xforum_windows.menu.iocb, 0, 0, cws_code); 393 if cws_code = video_et_$window_status_pending 394 then do; 395 call fix_status (xforum_windows.menu.iocb); 396 cws_any_window_status_pending = "1"b; 397 end; 398 else 399 if cws_code ^= 0 400 then call error (cws_code, "error in menu window"); 401 402 call window_$position_cursor_rel (xforum_windows.bottom.iocb, 0, 0, cws_code); 403 if cws_code = video_et_$window_status_pending 404 then do; 405 call fix_status (xforum_windows.bottom.iocb); 406 cws_any_window_status_pending = "1"b; 407 end; 408 else 409 if cws_code ^= 0 410 then call error (cws_code, "error in bottom window"); 411 412 if cws_any_window_status_pending then call xforum_redisplay_ (); 413 414 return; 415 416 prepare_to_shut_down: entry (ptsd_cleanup_flag); 417 418 /* PARAMETERS */ 419 420 dcl ptsd_cleanup_flag bit (1); 421 422 /* AUTOMATIC */ 423 424 dcl ptsd_code fixed bin (35); 425 426 427 call iox_$control (iox_$user_io, "set_window_info", addr (xforum_windows.orig_user_io.position), ptsd_code); 428 429 if ^ptsd_cleanup_flag 430 then do; 431 call window_$clear_window (iox_$user_io, ptsd_code); 432 call write_shut_down_message; 433 end; 434 435 return; 436 437 shut_down_xforum_windows: entry (sdxw_cleanup_flag); 438 439 /* PARAMETERS */ 440 441 dcl sdxw_cleanup_flag bit (1); 442 443 /* AUTOMATIC */ 444 445 dcl sdxw_code fixed bin (35); 446 447 if xforum_windows.status.iocb ^= null () 448 then do; 449 call window_$destroy (xforum_windows.status.iocb, sdxw_code); 450 call iox_$destroy_iocb (xforum_windows.status.iocb, sdxw_code); 451 end; 452 453 if xforum_windows.help_line.iocb ^= null () 454 then do; 455 call window_$destroy (xforum_windows.help_line.iocb, sdxw_code); 456 call iox_$destroy_iocb (xforum_windows.help_line.iocb, sdxw_code); 457 end; 458 459 if xforum_windows.menu.iocb ^= null () 460 then do; 461 call window_$destroy (xforum_windows.menu.iocb, sdxw_code); 462 call iox_$destroy_iocb (xforum_windows.menu.iocb, sdxw_code); 463 end; 464 465 if ^sdxw_cleanup_flag 466 then call window_$clear_window (iox_$user_io, sdxw_code); 467 468 if ^xwm_video_was_already_on 469 then call video_utils_$turn_off_login_channel (sdxw_code); 470 471 return; 472 473 menu_display: entry (md_menu_ptr); 474 475 /* PARAMETERS */ 476 477 dcl md_menu_ptr ptr; 478 479 /* AUTOMATIC */ 480 481 dcl md_code fixed bin (35); 482 483 484 485 486 if xwm_no_local_menu_display 487 then do; 488 call menu_$display (xforum_windows.menu.iocb, md_menu_ptr, md_code); 489 if md_code ^= 0 490 then call error (md_code, "Could not display menu"); 491 end; 492 493 return; 494 495 menu_get_choice: entry (mgc_menu_ptr, mgc_function_key_flag, mgc_choice); 496 497 /* PARAMETERS */ 498 499 dcl mgc_menu_ptr ptr; 500 dcl mgc_function_key_flag bit (1) aligned; 501 dcl mgc_choice fixed bin; 502 503 /* AUTOMATIC */ 504 505 dcl mgc_choice_char_v char (1) varying; 506 dcl mgc_code fixed bin (35); 507 dcl mgc_function_key_char_flag char (1) varying; 508 dcl mgc_function_key_data_ptr ptr; 509 dcl mgc_handle_interactive_messages bit (1); 510 511 /* BASED */ 512 513 dcl 01 mgc_choice_based based (addr (mgc_choice)), 514 02 pad bit (27) unal, 515 02 choice char (1) unal; 516 517 mgc_handle_interactive_messages = xforum_user_profile$get_handle_interactive_messages (); 518 mgc_function_key_data_ptr = xforum_user_profile$get_function_key_data_ptr (); 519 520 if mgc_handle_interactive_messages 521 then call xforum_im_mgr$accept_messages; 522 523 if xwm_no_local_menu_display 524 then do; 525 call menu_$get_choice (xforum_windows.menu.iocb, mgc_menu_ptr, mgc_function_key_data_ptr, mgc_function_key_flag, mgc_choice, mgc_code); 526 if mgc_code ^= 0 527 then call error (mgc_code, "Could not get menu choice from menu software"); 528 end; 529 else do; 530 mgc_function_key_char_flag = ""; 531 do while (mgc_function_key_char_flag ^= "0" & mgc_function_key_char_flag ^= "1"); 532 call window_$get_one_unechoed_char (iox_$user_io, mgc_function_key_char_flag, xwm_WAIT_FOR_INPUT, mgc_code); 533 if mgc_code ^= 0 534 then call error (mgc_code, "Could not get the function key flag character"); 535 end; 536 call window_$get_one_unechoed_char (iox_$user_io, mgc_choice_char_v, xwm_WAIT_FOR_INPUT, mgc_code); 537 if mgc_code ^= 0 538 then call error (mgc_code, "Could not get the choice character"); 539 540 if mgc_function_key_char_flag = "0" 541 then mgc_function_key_flag = "0"b; 542 else mgc_function_key_flag = "1"b; 543 544 mgc_choice_based.pad = "0"b; 545 mgc_choice_based.choice = mgc_choice_char_v; 546 end; 547 548 if mgc_handle_interactive_messages 549 then call xforum_im_mgr$defer_messages; 550 551 return; 552 553 fix_status: proc (fs_iocb_ptr); 554 555 /* PARAMETERS */ 556 557 dcl fs_iocb_ptr ptr parameter; 558 559 /* AUTOMATIC */ 560 561 dcl fs_code fixed bin (35); 562 dcl 01 fs_window_info like window_position_info; 563 dcl 01 fs_window_status_info like window_status_info; 564 565 /* BASED */ 566 567 dcl 01 fs_window_status_string like window_status based; 568 569 fs_window_status_info.version = window_status_version; 570 call iox_$control (fs_iocb_ptr, "get_window_status", addr (fs_window_status_info), fs_code); 571 if fs_code ^= 0 572 then call error (fs_code, "Could not get status window"); 573 574 if addr (fs_window_status_info.status_string) -> fs_window_status_string.ttp_change 575 then do; 576 fs_window_info.version = window_position_info_version; 577 call iox_$control (iox_$user_io, "get_window_info", addr (fs_window_info), fs_code); 578 if fs_code ^= 0 579 then call error (fs_code, "Could not determine the new terminal width."); 580 if fs_window_info.extent.width < xforum_windows.orig_user_io.extent.width 581 then call error (0, "Your new terminal is narrower than your last terminal - you must reinvoke Executive Forum."); 582 end; 583 584 return; 585 586 end fix_status; 587 588 create_status_window: proc; 589 590 /* AUTOMATIC */ 591 592 dcl csw_code fixed bin (35); 593 594 xforum_windows.status.position.version = window_position_info_version_1; 595 xforum_windows.status.position.origin.column = 1; 596 xforum_windows.status.position.origin.line = xforum_windows.orig_user_io.position.origin.line; 597 xforum_windows.status.position.extent.width = xforum_windows.orig_user_io.position.extent.width; 598 xforum_windows.status.position.extent.height = 2; 599 600 call iox_$find_iocb ("xforum_status" || unique_chars_ ("0"b), xforum_windows.status.iocb, csw_code); 601 if csw_code ^= 0 602 then call error (csw_code, "Could not create status window iocb"); 603 604 call window_$create (video_data_$terminal_iocb, addr (xforum_windows.status.position), xforum_windows.status.iocb, csw_code); 605 if csw_code ^= 0 606 then call error (csw_code, "Could not create status window"); 607 608 return; 609 610 end create_status_window; 611 612 create_menu_window: proc; 613 614 /* AUTOMATIC */ 615 616 dcl cmw_code fixed bin (35); 617 618 xforum_windows.menu.position.version = window_position_info_version_1; 619 xforum_windows.menu.position.origin.column = 1; 620 xforum_windows.menu.position.origin.line = xforum_windows.orig_user_io.position.origin.line + 2; 621 xforum_windows.menu.position.extent.width = xforum_windows.orig_user_io.position.extent.width; 622 xforum_windows.menu.position.extent.height = 1; 623 624 call iox_$find_iocb ("xforum_menu" || unique_chars_ ("0"b), xforum_windows.menu.iocb, cmw_code); 625 if cmw_code ^= 0 626 then call error (cmw_code, "Could not create menu window iocb"); 627 628 call window_$create (video_data_$terminal_iocb, addr (xforum_windows.menu.position), xforum_windows.menu.iocb, cmw_code); 629 if cmw_code ^= 0 630 then call error (cmw_code, "Could not create menu window"); 631 632 return; 633 634 end create_menu_window; 635 636 create_bottom_window: proc; 637 638 /* AUTOMATIC */ 639 640 dcl cbw_code fixed bin (35); 641 642 xforum_windows.bottom.position.version = window_position_info_version_1; 643 xforum_windows.bottom.position.origin.column = 1; 644 xforum_windows.bottom.position.origin.line = xforum_windows.orig_user_io.position.origin.line + 3; 645 xforum_windows.bottom.position.extent.width = xforum_windows.orig_user_io.position.extent.width; 646 xforum_windows.bottom.position.extent.height = xforum_windows.orig_user_io.position.extent.height - 4; 647 648 xforum_windows.bottom.iocb = iox_$user_io; 649 650 call iox_$control (xforum_windows.bottom.iocb, "set_window_info", 651 addr (xforum_windows.bottom.position), cbw_code); 652 if cbw_code ^= 0 653 then call error (cbw_code, "Could not resize user_io for the bottom window"); 654 655 return; 656 657 end create_bottom_window; 658 659 create_help_line_window: proc; 660 661 /* AUTOMATIC */ 662 663 dcl chlw_code fixed bin (35); 664 665 xforum_windows.help_line.position.version = window_position_info_version_1; 666 xforum_windows.help_line.position.origin.column = 1; 667 xforum_windows.help_line.position.origin.line = xforum_windows.orig_user_io.position.origin.line 668 + xforum_windows.orig_user_io.position.extent.height - 1; 669 xforum_windows.help_line.position.extent.width = xforum_windows.orig_user_io.position.extent.width; 670 xforum_windows.help_line.position.extent.height = 1; 671 672 call iox_$find_iocb ("xforum_help_line" || unique_chars_ ("0"b), xforum_windows.help_line.iocb, chlw_code); 673 if chlw_code ^= 0 674 then call error (chlw_code, "Could not create help line window iocb"); 675 676 call window_$create (video_data_$terminal_iocb, addr (xforum_windows.help_line.position), xforum_windows.help_line.iocb, chlw_code); 677 if chlw_code ^= 0 678 then call error (chlw_code, "Could not resize user_io for the help line window."); 679 680 return; 681 682 end create_help_line_window; 683 684 write_start_up_message: proc; 685 686 /* AUTOMATIC */ 687 688 dcl wsum_code fixed bin (35); 689 690 /* CONSTANTS */ 691 692 dcl wsum_MESSAGE char (61) init ("Executive Forum is setting up. Please wait for menu display."); 693 694 695 696 xwm_center_line = divide (xforum_windows.orig_user_io.position.extent.height, 2, 17, 0); 697 xwm_left_margin = 698 divide (xforum_windows.orig_user_io.position.extent.width 699 - length (wsum_MESSAGE), 2, 17, 0); 700 call window_$position_cursor (iox_$user_io, xwm_center_line, 701 xwm_left_margin, wsum_code); 702 if wsum_code ^= 0 then 703 call error (wsum_code, "Could not position to write start up message."); 704 call window_$overwrite_text (iox_$user_io, wsum_MESSAGE, wsum_code); 705 if wsum_code ^= 0 then 706 call error (wsum_code, "Could not write start up message."); 707 call window_$position_cursor (iox_$user_io, xwm_center_line + 2, 1, 708 wsum_code); 709 if wsum_code ^= 0 then 710 call error (wsum_code, "Could not position after writting start up message."); 711 call window_$sync (iox_$user_io, wsum_code); 712 if wsum_code ^= 0 then 713 call error (wsum_code, "Could not do a window sync."); 714 715 return; 716 717 end write_start_up_message; 718 719 write_shut_down_message: proc; 720 721 /* AUTOMATIC */ 722 723 dcl wsdm_code fixed bin (35); 724 725 726 call window_$position_cursor (iox_$user_io, xwm_center_line, xwm_left_margin, 727 wsdm_code); 728 if wsdm_code ^= 0 then goto exit_write_shut_down_message; 729 730 call window_$overwrite_text (iox_$user_io, 731 "Executive Forum is shutting down.", wsdm_code); 732 if wsdm_code ^= 0 then goto exit_write_shut_down_message; 733 734 call window_$position_cursor (iox_$user_io, xwm_center_line + 2, 1, 735 wsdm_code); 736 if wsdm_code ^= 0 then goto exit_write_shut_down_message; 737 738 call window_$sync (iox_$user_io, wsdm_code); 739 740 exit_write_shut_down_message: 741 return; 742 743 end write_shut_down_message; 744 745 resynch_windows_p: proc (rwp_size_needed, rwp_clear_bottom_window); 746 747 /* PARAMETERS */ 748 749 dcl rwp_size_needed fixed bin; 750 dcl rwp_clear_bottom_window bit (1); 751 752 /* AUTOMATIC */ 753 754 dcl rwp_code fixed bin (35); 755 dcl rwp_difference fixed bin; 756 757 758 if rwp_clear_bottom_window 759 then call window_$clear_window (xforum_windows.bottom.iocb, (0)); 760 761 if xforum_windows.menu.position.extent.height ^= rwp_size_needed 762 then do; 763 rwp_difference = rwp_size_needed - xforum_windows.menu.position.extent.height; 764 xforum_windows.menu.position.extent.height = 765 xforum_windows.menu.position.extent.height + rwp_difference; 766 if xforum_windows.menu.position.extent.height > 0 767 then do; 768 call iox_$control (xforum_windows.menu.iocb, "set_window_info", 769 addr (xforum_windows.menu.position), rwp_code); 770 if rwp_code ^= 0 then 771 call error (rwp_code, "Unable to alter size of menu window."); 772 end; 773 774 xforum_windows.bottom.position.line = 775 xforum_windows.bottom.position.line + rwp_difference; 776 xforum_windows.bottom.position.height = 777 xforum_windows.bottom.position.height - rwp_difference; 778 call iox_$control (xforum_windows.bottom.iocb, 779 "set_window_info", addr (xforum_windows.bottom.position), 780 rwp_code); 781 if rwp_code ^= 0 then 782 call error (rwp_code, "Unable to alter user_io window size."); 783 784 if rwp_clear_bottom_window 785 then call window_$clear_window (xforum_windows.bottom.iocb, (0)); 786 end; 787 788 789 return; 790 791 end resynch_windows_p; 792 793 error: proc (e_code, e_reason); 794 795 /* PARAMETERS */ 796 797 dcl e_code fixed bin (35); 798 dcl e_reason char (512); 799 800 xwm_xforum_error_info.name = "xforum_window_mgr"; 801 xwm_xforum_error_info.entry = ""; 802 xwm_xforum_error_info.doing = ""; 803 xwm_xforum_error_info.code = e_code; 804 xwm_xforum_error_info.reason = e_reason; 805 806 call signal_ ("xforum_fatal_error", null (), addr (xwm_xforum_error_info), null ()); 807 808 end error; 809 810 end xforum_window_mgr; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/06/87 1014.6 xforum_window_mgr.pl1 >special_ldd>install>MR12.1-1065>xforum_window_mgr.pl1 290 1 12/03/84 1241.6 xforum_error_info.incl.pl1 >ldd>include>xforum_error_info.incl.pl1 292 2 12/03/84 1241.6 xforum_windows.incl.pl1 >ldd>include>xforum_windows.incl.pl1 2-12 3 09/12/84 0916.7 window_control_info.incl.pl1 >ldd>include>window_control_info.incl.pl1 294 4 09/12/84 0916.7 window_status.incl.pl1 >ldd>include>window_status.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. addr builtin function dcl 281 ref 316 316 427 427 544 545 570 570 574 577 577 604 604 628 628 650 650 676 676 768 768 778 778 806 806 bottom 20 000352 external static structure level 2 dcl 2-5 cbw_code 000376 automatic fixed bin(35,0) dcl 640 set ref 650* 652 652* chlw_code 000406 automatic fixed bin(35,0) dcl 663 set ref 672* 673 673* 676* 677 677* choice 0(27) based char(1) level 2 packed unaligned dcl 513 set ref 545* cmw_code 000366 automatic fixed bin(35,0) dcl 616 set ref 624* 625 625* 628* 629 629* code 51 000014 internal static fixed bin(35,0) level 2 dcl 272 set ref 803* column 13 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 619* column 23 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 643* column 3 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 595* column 43 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 666* csw_code 000356 automatic fixed bin(35,0) dcl 592 set ref 600* 601 601* 604* 605 605* cws_any_window_status_pending 000312 automatic bit(1) unaligned dcl 368 set ref 370* 376* 386* 396* 406* 412 cws_code 000313 automatic fixed bin(35,0) dcl 369 set ref 372* 373 378 378* 382* 383 388 388* 392* 393 398 398* 402* 403 408 408* divide builtin function dcl 282 ref 696 697 doing 20 000014 internal static char(100) level 2 packed unaligned dcl 272 set ref 802* e_code parameter fixed bin(35,0) dcl 797 ref 793 803 e_reason parameter char(512) unaligned dcl 798 ref 793 804 entry 10 000014 internal static char(32) level 2 packed unaligned dcl 272 set ref 801* extent 5 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" extent 35 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" extent 25 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" extent 15 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" extent 45 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" extent 3 000341 automatic structure level 2 in structure "fs_window_info" unaligned dcl 562 in procedure "fix_status" fs_code 000340 automatic fixed bin(35,0) dcl 561 set ref 570* 571 571* 577* 578 578* fs_iocb_ptr parameter pointer dcl 557 set ref 553 570* fs_window_info 000341 automatic structure level 1 unaligned dcl 562 set ref 577 577 fs_window_status_info 000346 automatic structure level 1 unaligned dcl 563 set ref 570 570 fs_window_status_string based structure level 1 packed unaligned dcl 567 height 26 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 646* 776* 776 height 46 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 670* height 6 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 598* height 36 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 321 646 667 696 height 16 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 622* 761 763 764* 764 766 help_line 40 000352 external static structure level 2 dcl 2-5 iocb 40 000352 external static pointer level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 382* 385* 453 455* 456* 672* 676* iocb 10 000352 external static pointer level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 392* 395* 459 461* 462* 488* 525* 624* 628* 768* iocb 000352 external static pointer level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 372* 375* 447 449* 450* 600* 604* iocb 20 000352 external static pointer level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 360* 402* 405* 648* 650* 758* 778* 784* iox_$control 000274 constant entry external dcl 238 ref 316 427 570 577 650 768 778 iox_$destroy_iocb 000276 constant entry external dcl 239 ref 450 456 462 iox_$find_iocb 000300 constant entry external dcl 240 ref 600 624 672 iox_$user_io 000266 external static pointer dcl 232 set ref 311* 316* 427* 431* 465* 532* 536* 577* 648 700* 704* 707* 711* 726* 730* 734* 738* length builtin function dcl 283 ref 697 line 4 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 596* line 44 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 667* line 24 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 644* 774* 774 line 34 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 596 620 644 667 line 14 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 620* md_code 000316 automatic fixed bin(35,0) dcl 481 set ref 488* 489 489* md_menu_ptr parameter pointer dcl 477 set ref 473 488* menu 10 000352 external static structure level 2 dcl 2-5 menu_$display 000302 constant entry external dcl 241 ref 488 menu_$get_choice 000304 constant entry external dcl 242 ref 525 mgc_choice parameter fixed bin(17,0) dcl 501 set ref 495 525* 544 545 mgc_choice_based based structure level 1 packed unaligned dcl 513 mgc_choice_char_v 000320 automatic varying char(1) dcl 505 set ref 536* 545 mgc_code 000322 automatic fixed bin(35,0) dcl 506 set ref 525* 526 526* 532* 533 533* 536* 537 537* mgc_function_key_char_flag 000324 automatic varying char(1) dcl 507 set ref 530* 531 531 532* 540 mgc_function_key_data_ptr 000326 automatic pointer dcl 508 set ref 518* 525* mgc_function_key_flag parameter bit(1) dcl 500 set ref 495 525* 540* 542* mgc_handle_interactive_messages 000330 automatic bit(1) unaligned dcl 509 set ref 517* 520 548 mgc_menu_ptr parameter pointer dcl 499 set ref 495 525* name 000014 internal static char(32) level 2 packed unaligned dcl 272 set ref 800* null builtin function dcl 284 ref 304 338 338 447 453 459 806 806 806 806 orig_user_io 30 000352 external static structure level 2 dcl 2-5 origin 33 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" origin 13 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" origin 23 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" origin 3 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" origin 43 000352 external static structure level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" pad based bit(27) level 2 packed unaligned dcl 513 set ref 544* position 42 000352 external static structure level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 676 676 position 22 000352 external static structure level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 650 650 778 778 position 2 000352 external static structure level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 604 604 position 12 000352 external static structure level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 628 628 768 768 position 32 000352 external static structure level 3 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 316 316 427 427 ptsd_cleanup_flag parameter bit(1) unaligned dcl 420 ref 416 429 ptsd_code 000314 automatic fixed bin(35,0) dcl 424 set ref 427* 431* reason 52 000014 internal static char(512) level 2 packed unaligned dcl 272 set ref 804* rw_clear_bottom_window parameter bit(1) unaligned dcl 355 set ref 350 358* rw_size_needed parameter fixed bin(17,0) dcl 354 set ref 350 358* rwp_clear_bottom_window parameter bit(1) unaligned dcl 750 ref 745 758 784 rwp_code 000456 automatic fixed bin(35,0) dcl 754 set ref 768* 770 770* 778* 781 781* rwp_difference 000457 automatic fixed bin(17,0) dcl 755 set ref 763* 764 774 776 rwp_size_needed parameter fixed bin(17,0) dcl 749 ref 745 761 763 sdxw_cleanup_flag parameter bit(1) unaligned dcl 441 ref 437 465 sdxw_code 000315 automatic fixed bin(35,0) dcl 445 set ref 449* 450* 455* 456* 461* 462* 465* 468* signal_ 000306 constant entry external dcl 243 ref 806 status 000352 external static structure level 2 dcl 2-5 status_string 1 000346 automatic bit(36) level 2 dcl 563 set ref 574 suxw_code 000110 automatic fixed bin(35,0) dcl 300 set ref 306* 307 307* 311* 312 312* 316* 318 318* 338* 339 suxw_local_menu_state 000111 automatic char(3) unaligned dcl 301 set ref 338* 341 suxw_reason 000112 automatic char(512) unaligned dcl 302 set ref 306* 307* ttp_change 0(02) based bit(1) level 2 packed unaligned dcl 567 ref 574 unique_chars_ 000310 constant entry external dcl 244 ref 600 624 672 value_$get 000312 constant entry external dcl 245 ref 338 version 22 000352 external static fixed bin(17,0) level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 642* version 2 000352 external static fixed bin(17,0) level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 594* version 42 000352 external static fixed bin(17,0) level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 665* version 12 000352 external static fixed bin(17,0) level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 618* version 32 000352 external static fixed bin(17,0) level 4 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 315* version 000341 automatic fixed bin(17,0) level 2 in structure "fs_window_info" dcl 562 in procedure "fix_status" set ref 576* version 000346 automatic fixed bin(17,0) level 2 in structure "fs_window_status_info" dcl 563 in procedure "fix_status" set ref 569* video_data_$terminal_iocb 000270 external static pointer dcl 233 set ref 304 604* 628* 676* video_et_$window_status_pending 000272 external static fixed bin(35,0) dcl 234 ref 373 383 393 403 video_utils_$turn_off_login_channel 000314 constant entry external dcl 246 ref 468 video_utils_$turn_on_login_channel 000316 constant entry external dcl 247 ref 306 width 45 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 669* width 3 000341 automatic fixed bin(17,0) level 3 in structure "fs_window_info" dcl 562 in procedure "fix_status" set ref 580 width 25 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 645* width 5 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 597* width 15 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 621* width 35 000352 external static fixed bin(17,0) level 5 in structure "xforum_windows" dcl 2-5 in procedure "xforum_window_mgr" set ref 324 580 597 621 645 669 697 window_$clear_window 000320 constant entry external dcl 248 ref 311 360 431 465 758 784 window_$create 000322 constant entry external dcl 249 ref 604 628 676 window_$destroy 000324 constant entry external dcl 250 ref 449 455 461 window_$get_one_unechoed_char 000326 constant entry external dcl 251 ref 532 536 window_$overwrite_text 000330 constant entry external dcl 252 ref 704 730 window_$position_cursor 000332 constant entry external dcl 253 ref 700 707 726 734 window_$position_cursor_rel 000334 constant entry external dcl 254 ref 372 382 392 402 window_$sync 000336 constant entry external dcl 255 ref 711 738 window_position_info based structure level 1 unaligned dcl 3-25 window_position_info_version constant fixed bin(17,0) initial dcl 3-35 ref 576 window_position_info_version_1 constant fixed bin(17,0) initial dcl 3-35 ref 315 594 618 642 665 window_status 000107 automatic structure level 1 dcl 4-10 window_status_info based structure level 1 dcl 3-45 window_status_version constant fixed bin(17,0) initial dcl 3-52 ref 569 wsdm_code 000446 automatic fixed bin(35,0) dcl 723 set ref 726* 728 730* 732 734* 736 738* wsum_MESSAGE 000417 automatic char(61) initial unaligned dcl 692 set ref 692* 697 704* wsum_code 000416 automatic fixed bin(35,0) dcl 688 set ref 700* 702 702* 704* 705 705* 707* 709 709* 711* 712 712* xforum_error_info based structure level 1 unaligned dcl 1-3 xforum_im_mgr$accept_messages 000340 constant entry external dcl 256 ref 520 xforum_im_mgr$defer_messages 000342 constant entry external dcl 257 ref 548 xforum_redisplay_ 000344 constant entry external dcl 258 ref 412 xforum_user_profile$get_function_key_data_ptr 000346 constant entry external dcl 259 ref 518 xforum_user_profile$get_handle_interactive_messages 000350 constant entry external dcl 260 ref 517 xforum_window_info 000100 automatic structure level 1 unaligned dcl 2-8 xforum_windows 000352 external static structure level 1 dcl 2-5 xwm_WAIT_FOR_INPUT 000013 constant bit(1) initial dcl 277 set ref 532* 536* xwm_center_line 000010 internal static fixed bin(17,0) dcl 268 set ref 696* 700* 707 726* 734 xwm_left_margin 000011 internal static fixed bin(17,0) dcl 269 set ref 697* 700* 726* xwm_no_local_menu_display 000012 internal static bit(1) unaligned dcl 270 set ref 337* 343* 358 486 523 xwm_video_was_already_on 000013 internal static bit(1) unaligned dcl 271 set ref 304* 305 468 xwm_xforum_error_info 000014 internal static structure level 1 unaligned dcl 272 set ref 806 806 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. W_STATUS_ASYNC_EVENT internal static bit(36) initial dcl 4-17 W_STATUS_RECONNECTION internal static bit(36) initial dcl 4-17 W_STATUS_SCREEN_INVALID internal static bit(36) initial dcl 4-17 W_STATUS_TTP_CHANGE internal static bit(36) initial dcl 4-17 break_table_info based structure level 1 dcl 3-76 break_table_info_version internal static fixed bin(17,0) initial dcl 3-80 break_table_info_version_1 internal static fixed bin(17,0) initial dcl 3-80 break_table_ptr automatic pointer dcl 3-75 get_editor_key_bindings_info based structure level 1 dcl 3-151 get_editor_key_bindings_info_ptr automatic pointer dcl 3-159 get_editor_key_bindings_info_version_1 internal static char(8) initial unaligned dcl 3-160 line_editor_binding_count automatic fixed bin(17,0) dcl 3-121 line_editor_key_binding_info based structure level 1 dcl 3-129 line_editor_key_binding_info_ptr automatic pointer dcl 3-118 line_editor_key_binding_info_version_3 internal static char(8) initial unaligned dcl 3-148 line_editor_longest_sequence automatic fixed bin(17,0) dcl 3-123 more_handler_info based structure level 1 dcl 3-83 more_handler_info_ptr automatic pointer dcl 3-92 more_handler_info_version internal static fixed bin(17,0) initial dcl 3-94 more_handler_info_version_3 internal static fixed bin(17,0) initial dcl 3-94 more_prompt_info based structure level 1 dcl 3-108 more_prompt_info_ptr automatic pointer dcl 3-112 more_prompt_info_version_1 internal static char(8) initial unaligned dcl 3-114 more_responses_info based structure level 1 dcl 3-59 more_responses_info_ptr automatic pointer dcl 3-69 more_responses_info_version_1 internal static fixed bin(17,0) initial dcl 3-67 more_responses_version internal static fixed bin(17,0) initial dcl 3-67 set_editor_key_bindings_info based structure level 1 dcl 3-162 set_editor_key_bindings_info_ptr automatic pointer dcl 3-171 set_editor_key_bindings_info_version_1 internal static char(8) initial unaligned dcl 3-172 token_characters_info based structure level 1 dcl 3-97 token_characters_info_ptr automatic pointer dcl 3-104 token_characters_info_version_1 internal static char(8) initial unaligned dcl 3-106 window_edit_line_info based structure level 1 unaligned dcl 3-177 window_edit_line_info_ptr automatic pointer dcl 3-186 window_edit_line_info_version_1 internal static char(8) initial unaligned dcl 3-183 window_position_info_ptr automatic pointer dcl 3-37 window_status_info_ptr automatic pointer dcl 3-43 window_status_string automatic bit(36) unaligned dcl 4-7 window_status_version_1 internal static fixed bin(17,0) initial dcl 3-52 NAMES DECLARED BY EXPLICIT CONTEXT. check_window_status 001076 constant entry external dcl 364 create_bottom_window 002441 constant entry internal dcl 636 ref 333 create_help_line_window 002526 constant entry internal dcl 659 ref 335 create_menu_window 002315 constant entry internal dcl 612 ref 331 create_status_window 002174 constant entry internal dcl 588 ref 329 error 003313 constant entry internal dcl 793 ref 307 312 318 321 324 378 388 398 408 489 526 533 537 571 578 580 601 605 625 629 652 673 677 702 705 709 712 770 781 exit_write_shut_down_message 003120 constant label dcl 740 set ref 728 732 736 fix_status 002044 constant entry internal dcl 553 ref 375 385 395 405 menu_display 001575 constant entry external dcl 473 menu_get_choice 001635 constant entry external dcl 495 prepare_to_shut_down 001341 constant entry external dcl 416 resynch_windows 001040 constant entry external dcl 350 resynch_windows_p 003121 constant entry internal dcl 745 ref 344 358 set_up_xforum_windows 000600 constant entry external dcl 296 shut_down_xforum_windows 001426 constant entry external dcl 437 write_shut_down_message 003015 constant entry internal dcl 719 ref 432 write_start_up_message 002653 constant entry internal dcl 684 ref 327 xforum_window_mgr 000571 constant entry external dcl 30 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4174 4550 3524 4204 Length 5156 3524 354 372 450 256 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME xforum_window_mgr 1590 external procedure is an external procedure. fix_status internal procedure shares stack frame of external procedure xforum_window_mgr. create_status_window internal procedure shares stack frame of external procedure xforum_window_mgr. create_menu_window internal procedure shares stack frame of external procedure xforum_window_mgr. create_bottom_window internal procedure shares stack frame of external procedure xforum_window_mgr. create_help_line_window internal procedure shares stack frame of external procedure xforum_window_mgr. write_start_up_message internal procedure shares stack frame of external procedure xforum_window_mgr. write_shut_down_message internal procedure shares stack frame of external procedure xforum_window_mgr. resynch_windows_p internal procedure shares stack frame of external procedure xforum_window_mgr. error internal procedure shares stack frame of external procedure xforum_window_mgr. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 xwm_center_line xforum_window_mgr 000011 xwm_left_margin xforum_window_mgr 000012 xwm_no_local_menu_display xforum_window_mgr 000013 xwm_video_was_already_on xforum_window_mgr 000014 xwm_xforum_error_info xforum_window_mgr STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME xforum_window_mgr 000100 xforum_window_info xforum_window_mgr 000107 window_status xforum_window_mgr 000110 suxw_code xforum_window_mgr 000111 suxw_local_menu_state xforum_window_mgr 000112 suxw_reason xforum_window_mgr 000312 cws_any_window_status_pending xforum_window_mgr 000313 cws_code xforum_window_mgr 000314 ptsd_code xforum_window_mgr 000315 sdxw_code xforum_window_mgr 000316 md_code xforum_window_mgr 000320 mgc_choice_char_v xforum_window_mgr 000322 mgc_code xforum_window_mgr 000324 mgc_function_key_char_flag xforum_window_mgr 000326 mgc_function_key_data_ptr xforum_window_mgr 000330 mgc_handle_interactive_messages xforum_window_mgr 000340 fs_code fix_status 000341 fs_window_info fix_status 000346 fs_window_status_info fix_status 000356 csw_code create_status_window 000366 cmw_code create_menu_window 000376 cbw_code create_bottom_window 000406 chlw_code create_help_line_window 000416 wsum_code write_start_up_message 000417 wsum_MESSAGE write_start_up_message 000446 wsdm_code write_shut_down_message 000456 rwp_code resynch_windows_p 000457 rwp_difference resynch_windows_p THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as call_ext_out_desc call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. iox_$control iox_$destroy_iocb iox_$find_iocb menu_$display menu_$get_choice signal_ unique_chars_ value_$get video_utils_$turn_off_login_channel video_utils_$turn_on_login_channel window_$clear_window window_$create window_$destroy window_$get_one_unechoed_char window_$overwrite_text window_$position_cursor window_$position_cursor_rel window_$sync xforum_im_mgr$accept_messages xforum_im_mgr$defer_messages xforum_redisplay_ xforum_user_profile$get_function_key_data_ptr xforum_user_profile$get_handle_interactive_messages THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. iox_$user_io video_data_$terminal_iocb video_et_$window_status_pending xforum_windows LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 30 000570 296 000576 304 000605 305 000612 306 000613 307 000627 311 000633 312 000644 315 000653 316 000657 318 000712 321 000721 324 000734 327 000747 329 000750 331 000751 333 000752 335 000753 337 000754 338 000757 339 001016 341 001020 343 001024 344 001026 348 001033 350 001034 358 001045 360 001062 362 001074 364 001075 370 001103 372 001104 373 001123 375 001127 376 001135 377 001137 378 001140 382 001147 383 001167 385 001173 386 001202 387 001204 388 001205 392 001214 393 001234 395 001240 396 001247 397 001251 398 001252 402 001261 403 001301 405 001305 406 001314 407 001316 408 001317 412 001326 414 001335 416 001336 427 001346 429 001403 431 001411 432 001422 435 001423 437 001424 447 001433 449 001440 450 001450 453 001461 455 001467 456 001477 459 001511 461 001517 462 001527 465 001541 468 001560 471 001571 473 001572 486 001602 488 001605 489 001621 493 001630 495 001631 517 001642 518 001651 520 001660 523 001670 525 001673 526 001715 528 001724 530 001725 531 001726 532 001740 533 001755 535 001764 536 001765 537 002002 540 002011 542 002021 544 002024 545 002026 548 002033 551 002043 553 002044 569 002046 570 002050 571 002101 574 002110 576 002113 577 002115 578 002151 580 002160 584 002173 588 002174 594 002175 595 002201 596 002203 597 002205 598 002207 600 002211 601 002256 604 002265 605 002305 608 002314 612 002315 618 002316 619 002322 620 002324 621 002327 622 002331 624 002333 625 002401 628 002410 629 002431 632 002440 636 002441 642 002442 643 002446 644 002450 645 002453 646 002455 648 002460 650 002463 652 002516 655 002525 659 002526 665 002527 666 002533 667 002535 669 002541 670 002543 672 002545 673 002613 676 002622 677 002643 680 002652 684 002653 692 002654 696 002657 697 002664 700 002670 702 002704 704 002713 705 002734 707 002743 709 002765 711 002774 712 003005 715 003014 719 003015 726 003016 728 003033 730 003035 732 003061 734 003063 736 003105 738 003107 740 003120 745 003121 758 003123 761 003143 763 003151 764 003154 766 003155 768 003157 770 003212 774 003221 776 003225 778 003227 781 003262 784 003271 789 003312 793 003313 800 003315 801 003321 802 003324 803 003327 804 003331 806 003335 808 003367 ----------------------------------------------------------- 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