COMPILATION LISTING OF SEGMENT xforum_user_profile Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 12/07/87 1321.6 mst Mon 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-02-18,Davids), approve(86-02-04,MCR7350), 12* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 13* Modified the get routine so that the profile exists case is part 14* of the if-then-else statement. The only thing not part of it is 15* the original call to value_ and the calls to 16* set_use_function_key_i. Removed the label exit_get and the two 17* gotos to it for the cases of no value segment and no xforum 18* profile. The gotos were skiping the call to 19* set_use_function_key_i and that cased all subsequent calls to get 20* the function_key_data_ptr to return null - not good. 21* 22* 85-04-15 Davids: Added code in the get entry to test the value of 23* the new_features_menu_version and call the warn_user_of_changes 24* routine to warn the users of changes, and to update the value in 25* the structure and update the version in the value seg so that 26* warning is not output again. Also changed the init_user_profile 27* routine to set the value of the new_features_menu_version from 28* "NONE " to "1.0-2.0 " and the convert_version routine to 29* automatically warn the the user when converting a 1.0 or 1.1 30* version profile. It will also update the value. Note that for 31* future versions a test may have to be made since it will be 32* possible to have a new version of the profile without having user 33* visable changes. Finially added the warn_user_of_changes routine 34* which just outputs the warning message. 35* 36* 85-05-30 Davids: Changed the make_value_seg procedure so that it 37* creates the default value seg as a permanent value seg (second 38* argument to value_$init_seg = 0) instead of a perprocess value seg 39* (second arg = 1). A perprocess default value seg was causing 40* value_ to take a not_in_read_bracket condition. 41* 2) change(86-02-20,LJAdams), approve(86-02-20,MCR7350), 42* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 43* Changed message displayed when profile has been damaged or is inconsistent 44* to be less threatening. 45* 3) change(87-04-06,LJAdams), approve(87-04-22,MCR7684), 46* audit(87-07-27,Blair), install(87-08-06,MR12.1-1065): 47* Added entry points set_user_fk_value and get_user_fk_value to set/get the 48* option that the user has requested; i.e., use function keys or use escape 49* keys. Changed version to 2.1. 50* 4) change(87-11-04,LJAdams), approve(87-11-10,MCR7800), 51* audit(87-12-01,Gilcrease), install(87-12-07,MR12.2-1008): 52* Suppress error messages for missing value segment or missing 53* xforum_profile._. The value segment/xforum_profile._ will be silently 54* rebuilt and default values will be applied. 55* END HISTORY COMMENTS */ 56 57 58 xforum_user_profile: proc; 59 60 /* 61* BEGIN DESCRIPTION 62* 63* function: 64* This module maintains the user's xforum profile. 65* 66* description of entry points: 67* get: This entry is used get a copy of the user's profile from the 68* value segment and save it in an internal static structure. If the 69* profile cannot be found it is assumed that the user has never used 70* xforum before. An output flag is set to true and the profile is 71* initialized and stored in the profile. This entry will also call 72* convert_version to update any profiles that are not the current version. 73* 74* update_profile: This entry is used to force the internal static profile 75* to be stored in the user's value segment. Note that changing the static 76* structure via a set entry WILL NOT cause the value segment copy to be 77* updated. 78* 79* display_profile: This entry displays the internal static copy of the 80* profile on user_io. The contents of the static copy must have been 81* initialized via a call to get. This is a debugging entry. 82* 83* delete_profile: This entry deletes the user's xforum profile from the 84* user's profile segment. It is a debugging entry. 85* 86* set_handle_interactive_messages: Sets the static flag to the input value. 87* Always returns "1"b 88* 89* get_handle_interactive_messages: Returns the static flag. 90* 91* set_multics_mode: Sets the static flag to the input value. Always returns 92* "1"b 93* 94* get_multics_mode: Returns the static flag. 95* 96* set_menu_always: Sets the static flag to the input value. Always returns 97* "1"b 98* 99* get_menu_always: Returns the static flag. 100* 101* set_read_comments_by_subject: Sets the static flag to the input 102* value. Always returns "1"b 103* 104* get_read_comments_by_subject: Returns the static flag. 105* 106* set_use_function_keys: Sets the static flag to the input value. Returns 107* "1"b if the set was successful, i.e. the user has enough function keys or 108* "0"b if the user cannot use function keys. 109* 110* get_use_function_keys: Returns the static flag. 111* 112* set_remove_menu_while_editing: Sets the static flag to the input value. 113* Always returns "1"b 114* 115* get_remove_menu_while_editing: Returns the static flag. 116* 117* set_function_key_data_ptr: Sets the pointer to the function_key_data 118* structure. This is used only in those cases where the function keys are 119* not the normal terminal keys or the standard escase sequences. Always 120* returns "1"b 121* 122* get_function_key_data_ptr: Returns a pointer to the function_key_data 123* structure. 124* 125* set_new_features_menu_version: Sets the value of the new new features 126* menu version. Always returns "1"b 127* 128* get_new_features_menu_version: Returns the value of the new features menu 129* version. 130* 131* description of internal procedures: 132* init_user_profile: this procedure loads the internal static copy of 133* the user's profile and then writes that structure into the user's 134* profile segment. The xforum profile has a key of "xforum_user_profile._". 135* 136* make_value_seg: this procedure creates a segment named .value 137* in the users home dir. It also inits that segment so that its a permanent 138* value segment. This procedure is called if its determined that the user 139* does not already have a permanent value segment. If the value segment 140* is created but cannot be initaialized it is deleted. 141* 142* convert_version: this procedure is used to convert an xforum profile 143* with an old version to the new version. If the version of the old xforum 144* profile is not recognized then a new profile is written with the lastest 145* version and default values. A warning message telling the user that his 146* profile is being re-initialized because of damage is output. 147* 148* set_use_function_keys_i: This procedure actually sets the value of the 149* profile switch. Before the switch is set to allow function keys to be 150* used a check is made to be sure that they can be used. If they cannot 151* be used and the user requested them a warning is issued. This procedure 152* also set the value of the function_key_data_ptr within the profile. 153* If escape sequences are to be used it sets the value from an internal 154* static pointer which was set by a call to xforum_default_fkeys_. If the 155* static pointer is null the call to default_fkeys is made first. 156* 157* can_use_function_keys: This procedure determines if the user can use 158* function keys. It is based on the terminal type and the state of the 159* profile multics mode flag. If the flag is set the terminal must have 160* at least 8 function keys. If the flag is not set the user must have at 161* least 7 function keys. This procedure sets the value of an internal 162* static pointer which points to the function_key_data structure for the 163* terminal. If this pointer is non-null when the procedure is entered 164* the function_key_data structure is freed. This is done because it is 165* possible that the user changed terminals. 166* 167* update_profile_i: this procedure deletes the old profile from the value 168* segment and stores the new profile in the value segment. The error code 169* error_table_$oldnamerr returned from the delete operation is ignored. 170* Any other error either from the delete operation or the store operation 171* will cause an xforum fatal error. 172* 173* error: this procedure is used to signal the xforum_fatal_error condition. 174* This is called only in cases where system routines return unexpected 175* error codes. 176* 177* known bugs: 178* 179* notes: 180* 84-10-23 Davids: Commented out the call to set_use_function_keys_i in 181* the get entry to prevent the "not enough function keys must use escape 182* sequences" message from being printed at that point. A call to the 183* set_use_function_keys entry will be made from the xforum module to set 184* the function key usage. This is needed so that the message is not output 185* if the user included the -esc control arg when he invoked xforum. When 186* the escape_sequence control args go away this code should be executed. 187* 188* history: 189* 84-08-14 Davids: Written 190* 191* 84-08-29 Davids: Added the display_profile and delete_profile entries. 192* These are for debuging purposes only. 193* 194* 84-09-25 Davids: Changed the name of the element in the value segment 195* from xforum_user_profile to xforum_user_profile._. 196* 197* 84-09-28 Davids: Added the set and get entry points for 198* handle_interactive_messages, multics_mode, menu_always, 199* read_comments_by_subject_chain, and use_function_keys. Changed the names 200* of the profile elements allow_multics_mode and 201* use_function_keys_if_possible to just multics_mode and use_function_keys. 202* 203* 84-10-01 Davids: Added the function_key_data_ptr to the profile and 204* changed the version from 1.0 to 1.1. Added the internal procs 205* set_use_function_keys_i and can_use_function_keys. Modified get so that 206* it sets the function_key_data_ptr in the profile. Modified 207* convert_version to handle the conversion from 1.0 to 1.1. 208* 209* 84-10-23 Davids: Changed get entry point so that the call to 210* set_use_function_keys_i is based solely on the value of 211* xup_user_profile.use_function_keys instead of on that valuef and the 212* value of xup_user_profile.multics_mode. Commented out the call to 213* set_use_function_keys_i in the get entry to prevent the "not enough 214* function keys must use escape sequences" message from being printed at 215* that point. A call to the set_use_function_keys entry will be made from 216* the xforum module to set the function key usage. This is needed so that 217* the message is not output if the user included the -esc control arg when 218* he invoked xforum. When the escape_sequence control args go away this 219* code should be executed. 220* 221* 84-11-08 Davids: Audit changes: 1) Corrected some message text typos in 222* the convert_version procedure. 2) Created the xup_USER_PROFILE_VERSION_1 223* constant. 3) Combined three separate if in can_use_function_keys which 224* determine if the terminal has enough function keys into a sequence of 225* if-then-else. 226* 227* 84-12-13 Davids: Added the make_value_segment procedure. Also added 228* code to the get entry so that if the error returned by value_$get_data 229* is noentry the make_value_segment procedure is called. This takes care 230* of the case where the user does not already have a value segment. 231* 232* 85-01-08 Davids: Added the set_function_key_data_ptr. This was needed so 233* that the xforum_help_$get_help routine could change the function keys to 234* make ?? a function key. Also added the element remove_menu_while_editing 235* to the profile and the entry points (set get)_remove_menu_while_editing. 236* It was not necessary to create a new profile version since the element 237* has a default value of "0"b and it replaces a bit in a MBZ field. 238* 239* 85-01-09 Davids: Changed the (get set)_read_comments_by_subject_chain 240* to just read_comments_by_subject. The long name was screwing things up. 241* 242* 85-01-10 Davids: Added the element new_features_menu_version to the 243* profile, updated the profile version to 2.0, modified the convert_version 244* routine to convert version 1 and version 1.1 profiles to 2.0 and the 245* init_user_profile routine to create a 2.0 profile. The default value of 246* new_features_menu_version element is "NONE ". Also added entry points 247* to set and get the value. Added the entry update_profile. This was done 248* becuase it seem to expensive to update the profile in the value segment 249* after every call to a set entry. The internal routine update_profile_i 250* was also created and the routines init_user_profile, and convert_version 251* were modified to use it instead of call value_ entries directly. All set 252* entries now return a bit (1) flag. This flag indicates if the set was 253* successful. All entries except set_use_function_keys always return "1"b. 254* There are cases when the user cannot use function keys, i.e. a terminal 255* which only has 4 function keys, so set_use_function_keys can return 256* either a "1"b or a "0"b. Also removed the comment that was around the 257* call to set_use_function_keys_i in the get entry. The comment was there 258* because the call was also in xforum to handle the -esc control arg and 259* having in the get routine would cause the not enough function keys 260* warning to be output twice (if it would be output at all). Since the arg 261* is now obsolete it should be done here. If the warning comes out twice 262* so be it. 263* 264* 85-01-15 Davids: Added code to make_value_segment to delete the just 265* created value segment if it could not be initialized. 266* END DESCRIPTION 267**/ 268 269 /* PARAMETERS */ 270 271 /* look under individual entry points and procedures */ 272 273 /* EXTERNAL STATIC */ 274 275 dcl error_table_$oldnamerr fixed bin (35) ext static; 276 dcl error_table_$noentry fixed bin (35) ext static; 277 dcl iox_$user_io ptr ext static; 278 279 /* ENTRIES */ 280 281 dcl com_err_ entry () options (variable); 282 dcl delete_$ptr entry (ptr, bit (36) aligned, char (*), fixed bin (35)); 283 dcl hcs_$make_seg entry (char (*), char (*), char (*), fixed bin (5), ptr, fixed bin (35)); 284 dcl ioa_ entry () options (variable); 285 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 286 dcl signal_ entry () options (variable); 287 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 288 dcl ttt_info_$function_key_data entry (char (*), ptr, ptr, fixed bin (35)); 289 dcl user_info_ entry (char (*), char (*), char (*)); 290 dcl user_info_$homedir entry (char (*)); 291 dcl value_$delete_data entry (ptr, bit (36) aligned, char (*), fixed bin (35)); 292 dcl value_$get_data entry (ptr, bit (36) aligned, char (*), ptr, ptr, fixed bin (18), fixed bin (35)); 293 dcl value_$init_seg entry (ptr, fixed bin, ptr, fixed bin (19), fixed bin (35)); 294 dcl value_$set_data entry (ptr, bit (36) aligned, char (*), ptr, fixed bin (18), ptr, ptr, fixed bin (18), fixed bin (35)); 295 dcl xforum_default_fkeys_ entry () returns (ptr); 296 297 /* CONDITIONS */ 298 299 /* INTERNAL AUTOMATIC */ 300 301 /* INTERNAL STATIC */ 302 303 dcl ( 304 xup_escape_sequence_function_key_data_ptr ptr init (null ()), 305 xup_term_type_function_key_data_ptr ptr init (null ()), 306 01 xup_xforum_error_info like xforum_error_info, 307 01 xup_user_profile like user_profile_overlay 308 ) internal static; 309 310 /* CONSTANTS */ 311 312 dcl ( 313 xup_CURRENT_NEW_FEATURES_MENU_VERSION char (8) init ("1.0-2.1"), 314 xup_CURRENT_USER_PROFILE_VERSION char (8) init ("xup 2.1"), /* version of the profile str */ 315 xup_PERMANENT bit (36) aligned init ("01"b), /* use permanet value seg not per process value */ 316 xup_USER_PROFILE_VERSION_1 char (8) init ("xup 1.0"), 317 xup_USER_PROFILE_VERSION_1_1 char (8) init ("xup 1.1"), 318 xup_VALUE_SEG_PTR ptr init (null ()),/* null ptr means use default value seg */ 319 xup_XFORUM_USER_PROFILE char (21) init ("xforum_user_profile._") /* name of element in value seg */ 320 ) internal static options (constant); 321 322 dcl UNSET fixed bin (2) int static options (constant) init (0); 323 dcl USE_ESCAPE_KEYS fixed bin (2) int static options (constant) init (1); 324 dcl USE_FUNCTION_KEYS fixed bin (2) int static options (constant) init (2); 325 326 /* BUILTINS */ 327 328 dcl ( 329 addr, 330 empty, 331 null, 332 rtrim, 333 size 334 ) builtin; 335 336 /* BASED */ 337 338 dcl 01 user_profile_overlay based, 339 02 version char (8), 340 02 handle_interactive_messages bit (1) unaligned, 341 02 multics_mode bit (1) unaligned, 342 02 menu_always bit (1) unaligned, 343 02 read_comments_by_subject_chain bit (1) unaligned, 344 02 use_function_keys bit (1) unaligned, 345 02 remove_menu_while_editing bit (1) unaligned, 346 02 mbz bit (30) unaligned, 347 02 function_key_data_ptr ptr, 348 02 new_features_menu_version char (8), 349 02 user_set_fk_value fixed bin (2); /* 0 = UNSET */ 350 /* 1 = ESC keys */ 351 /* 2 = FUNC keys */ 352 353 354 /* INCLUDES */ 355 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 356 357 2 1 /* BEGIN INCLUDE FILE ... function_key_data.incl.pl1 2 2* 2 3* This include file defines the structure used for ttt_info_$function_key_data 2 4* MCR 4671 James R. Davis Sept 80 2 5**/ 2 6 2 7 dcl 1 function_key_data aligned based (function_key_data_ptr), 2 8 2 version fixed bin, 2 9 2 highest fixed bin, /* highest fkey */ 2 10 2 sequence, /* string of all seqs. */ 2 11 3 seq_ptr pointer, 2 12 3 seq_len fixed bin (21), 2 13 2 cursor_motion_keys, 2 14 3 home (0:3) like key_info, 2 15 3 left (0:3) like key_info, 2 16 3 up (0:3) like key_info, 2 17 3 right (0:3) like key_info, 2 18 3 down (0:3) like key_info, 2 19 2 function_keys (0:function_key_data_highest refer 2 20 (function_key_data.highest), 0:3) like key_info; 2 21 2 22 dcl (KEY_PLAIN init (0), 2 23 KEY_SHIFT init (1), 2 24 KEY_CTRL init (2), 2 25 KEY_CTRL_AND_SHIFT init (3) 2 26 ) fixed bin internal static options (constant); 2 27 2 28 dcl 1 key_info unaligned based (key_info_ptr), 2 29 2 sequence_index fixed bin (12) unsigned unaligned, 2 30 2 sequence_length fixed bin (6) unsigned unaligned; /* 0 -> not exist */ 2 31 2 32 dcl function_key_seqs char (function_key_data.sequence.seq_len) 2 33 based (function_key_data.sequence.seq_ptr); 2 34 dcl function_key_data_ptr ptr; 2 35 dcl function_key_data_highest fixed bin; 2 36 dcl function_key_data_version_1 2 37 fixed bin internal static options (constant) init (1); 2 38 dcl key_info_ptr ptr; 2 39 2 40 2 41 /* END INCLUDE FILE ... function_key_data.incl.pl1 */ 358 359 3 1 /* BEGIN INCLUDE FiLE ... terminal_info.incl.pl1 */ 3 2 3 3 /* Created 5/25/77 by J. Stern */ 3 4 3 5 3 6 dcl 1 terminal_info aligned based (terminal_info_ptr), /* info structure for terminal_info order */ 3 7 2 version fixed bin, /* version number of this sturcture */ 3 8 2 id char (4) unaligned, /* terminal id from answerback */ 3 9 2 term_type char (32) unaligned, /* terminal type name */ 3 10 2 line_type fixed bin, /* line type number */ 3 11 2 baud_rate fixed bin, 3 12 2 reserved (4) fixed bin; /* reserved for future use */ 3 13 3 14 3 15 dcl terminal_info_ptr ptr; 3 16 dcl terminal_info_version fixed bin int static options (constant) init (1); /* current version */ 3 17 3 18 3 19 /* END INCLUDE FILE ... terminal_info.incl.pl1 */ 360 361 4 1 /* BEGIN INCLUDE FILE xforum_error_info 84-06-19 Davids */ 4 2 4 3 dcl 01 xforum_error_info based, 4 4 02 name char (32), 4 5 02 entry char (32), 4 6 02 doing char (100), 4 7 02 code fixed bin (35), 4 8 02 reason char (512); 4 9 4 10 /* END INCLUDE FILE xforum_error_info */ 362 363 364 call error (0, "main entry point of xforum_user_profile was called"); 365 366 get: entry (g_first_time_user); 367 368 /* PARAMETERS */ 369 370 dcl g_first_time_user bit (1) aligned; /* (output) true if the user has never invoked xforum before */ 371 372 /* AUTOMATIC */ 373 374 dcl g_local_area area (50); /* space for value to allocate the user_profile structure in */ 375 dcl g_code fixed bin (35); /* error code returned by value_$get_data */ 376 dcl g_data_ptr ptr; /* pointer to the user profile allocated by value */ 377 dcl g_unused_b1 bit (1); 378 dcl g_unused_fb18 fixed bin (18); /* returned by value_$get_data */ 379 380 /* BASED */ 381 382 dcl g_version_overlay char (8) based; /* so that we can read the structures version */ 383 dcl Serror_occurred bit (1); 384 385 386 Serror_occurred = "0"b; 387 388 call value_$get_data (xup_VALUE_SEG_PTR, xup_PERMANENT, xup_XFORUM_USER_PROFILE, 389 addr (g_local_area), g_data_ptr, g_unused_fb18, g_code); 390 if g_code = error_table_$noentry 391 then do; 392 call make_value_seg; 393 call init_user_profile; 394 g_first_time_user = "1"b; 395 end; 396 else 397 if g_code = error_table_$oldnamerr 398 then do; 399 call init_user_profile; 400 call timer_manager_$sleep (4, "11"b); 401 Serror_occurred = "1"b; 402 end; 403 else 404 if g_code ^= 0 405 then call error (g_code, "Could not get user profile"); 406 else do; 407 g_first_time_user = "0"b; 408 if g_data_ptr -> g_version_overlay ^= xup_CURRENT_USER_PROFILE_VERSION 409 then do; 410 call convert_version (g_data_ptr); /* xup_user_profile is global */ 411 Serror_occurred = "1"b; 412 end; 413 else xup_user_profile = g_data_ptr -> user_profile_overlay; 414 end; 415 416 if ^Serror_occurred & xup_user_profile.new_features_menu_version ^= xup_CURRENT_NEW_FEATURES_MENU_VERSION 417 then do; 418 if ^g_first_time_user 419 then call warn_user_of_changes; 420 421 xup_user_profile.new_features_menu_version = xup_CURRENT_NEW_FEATURES_MENU_VERSION; 422 call update_profile_i; 423 end; 424 425 if xup_user_profile.use_function_keys 426 then g_unused_b1 = set_use_function_keys_i ("1"b); 427 else g_unused_b1 = set_use_function_keys_i ("0"b); 428 429 return; 430 431 update_profile: entry; 432 433 call update_profile_i; 434 435 return; 436 437 display_profile: entry; 438 439 call ioa_ ("version ^a", xup_user_profile.version); 440 call ioa_ ("handle_interactive_messages ^b", xup_user_profile.handle_interactive_messages); 441 call ioa_ ("multics_mode ^b", xup_user_profile.multics_mode); 442 call ioa_ ("menu_always ^b", xup_user_profile.menu_always); 443 call ioa_ ("read_comments_by_subject_chain ^b", xup_user_profile.read_comments_by_subject_chain); 444 call ioa_ ("use_function_keys ^b", xup_user_profile.use_function_keys); 445 call ioa_ ("remove_menu_while_editing ^b", xup_user_profile.remove_menu_while_editing); 446 call ioa_ ("mbz ^b", xup_user_profile.mbz); 447 call ioa_ ("function_key_data_ptr ^p", xup_user_profile.function_key_data_ptr); 448 call ioa_ ("new_features_menu_version ^a", xup_user_profile.new_features_menu_version); 449 450 return; 451 452 delete_profile: entry; 453 454 /* AUTOMATIC */ 455 456 dcl dp_code fixed bin (35); 457 458 459 460 call value_$delete_data (xup_VALUE_SEG_PTR, xup_PERMANENT, xup_XFORUM_USER_PROFILE, dp_code); 461 if dp_code ^= 0 462 then call com_err_ (dp_code, "xforum_user_profile$delete_profile", "Could not delete profile"); 463 else call ioa_ ("Your Executive Forum user profile has been deleted."); 464 465 return; 466 467 set_handle_interactive_messages: entry (shim_flag) returns (bit (1)); 468 469 /* PARAMETERS */ 470 471 dcl shim_flag bit (1); 472 473 474 xup_user_profile.handle_interactive_messages = shim_flag; 475 476 return ("1"b); 477 478 479 480 get_handle_interactive_messages: entry returns (bit (1)); 481 482 return (xup_user_profile.handle_interactive_messages); 483 484 set_multics_mode: entry (smm_flag) returns (bit (1)); 485 486 /* PARAMETERS */ 487 488 dcl smm_flag bit (1); 489 490 /* AUTOMATIC */ 491 492 dcl smm_unused_b1 bit (1); 493 494 495 496 497 498 499 xup_user_profile.multics_mode = smm_flag; 500 if xup_user_profile.multics_mode & xup_user_profile.use_function_keys 501 then smm_unused_b1 = set_use_function_keys_i ("1"b); 502 503 return ("1"b); 504 505 506 507 get_multics_mode: entry returns (bit (1)); 508 509 return (xup_user_profile.multics_mode); 510 511 set_menu_always: entry (sma_flag) returns (bit (1)); 512 513 /* PARAMETERS */ 514 515 dcl sma_flag bit (1); 516 517 518 xup_user_profile.menu_always = sma_flag; 519 520 return ("1"b); 521 522 523 524 get_menu_always: entry returns (bit (1)); 525 526 return (xup_user_profile.menu_always); 527 528 set_read_comments_by_subject: entry (srcbs_flag) returns (bit (1)); 529 530 /* PARAMETERS */ 531 532 dcl srcbs_flag bit (1); 533 534 535 xup_user_profile.read_comments_by_subject_chain = srcbs_flag; 536 537 return ("1"b); 538 539 540 541 get_read_comments_by_subject: entry returns (bit (1)); 542 543 return (xup_user_profile.read_comments_by_subject_chain); 544 545 set_use_function_keys: entry (sufk_flag) returns (bit (1)); 546 547 /* PARAMETERS */ 548 549 dcl sufk_flag bit (1); 550 551 /* AUTOMATIC */ 552 553 dcl sufk_return_value bit (1); 554 555 556 sufk_return_value = set_use_function_keys_i (sufk_flag); 557 558 return (sufk_return_value); 559 560 561 562 get_use_function_keys: entry returns (bit (1)); 563 564 return (xup_user_profile.use_function_keys); 565 566 set_user_fk_value: entry (ufk_value); 567 568 dcl ufk_value fixed bin (2); 569 570 if ufk_value = USE_FUNCTION_KEYS 571 then if ^can_use_function_keys () /* dont reset value if not valid */ 572 then return; 573 574 xup_user_profile.user_set_fk_value = ufk_value; 575 576 return; 577 578 579 valid_user_fk_FUNCTION: entry returns (bit (1)); 580 581 dcl vufk_return_value bit (1); 582 583 vufk_return_value = can_use_function_keys (); 584 585 return (vufk_return_value); 586 587 588 get_user_fk_value: entry returns (fixed bin (2)); 589 590 return (xup_user_profile.user_set_fk_value); 591 592 set_remove_menu_while_editing: entry (srmwe_flag) returns (bit (1)); 593 594 /* PARAMETERS */ 595 596 dcl srmwe_flag bit (1); 597 598 599 xup_user_profile.remove_menu_while_editing = srmwe_flag; 600 601 return ("1"b); 602 603 604 605 get_remove_menu_while_editing: entry returns (bit (1)); 606 607 return (xup_user_profile.remove_menu_while_editing); 608 609 set_function_key_data_ptr: entry (sfkdp_function_key_data_ptr) returns (bit (1)); 610 611 /* PARAMETERS */ 612 613 dcl sfkdp_function_key_data_ptr ptr; 614 615 xup_user_profile.function_key_data_ptr = sfkdp_function_key_data_ptr; 616 617 return ("1"b); 618 619 620 621 622 get_function_key_data_ptr: entry returns (ptr); 623 624 return (xup_user_profile.function_key_data_ptr); 625 626 set_new_features_menu_version: entry (snfmv_version) returns (bit (1)); 627 628 /* PARAMETERS */ 629 630 dcl snfmv_version char (8); 631 632 xup_user_profile.new_features_menu_version = snfmv_version; 633 634 return ("1"b); 635 636 637 638 639 640 641 get_new_features_menu_version: entry returns (char (8)); 642 643 return (xup_user_profile.new_features_menu_version); 644 645 init_user_profile: proc; 646 647 648 xup_user_profile.version = xup_CURRENT_USER_PROFILE_VERSION; 649 xup_user_profile.handle_interactive_messages = "1"b; 650 xup_user_profile.multics_mode = "0"b; 651 xup_user_profile.menu_always = "0"b; 652 xup_user_profile.read_comments_by_subject_chain = "0"b; 653 xup_user_profile.use_function_keys = "1"b; 654 xup_user_profile.user_set_fk_value = 0; 655 xup_user_profile.remove_menu_while_editing = "0"b; 656 xup_user_profile.mbz = "0"b; 657 xup_user_profile.function_key_data_ptr = null (); 658 xup_user_profile.new_features_menu_version = xup_CURRENT_NEW_FEATURES_MENU_VERSION; 659 xup_user_profile.user_set_fk_value = UNSET; 660 661 call update_profile_i; 662 663 return; 664 665 end init_user_profile; 666 667 make_value_seg: proc; 668 669 /* AUTOMATIC */ 670 671 dcl mvs_code fixed bin (35); 672 dcl mvs_code2 fixed bin (35); 673 dcl mvs_home_dir char (168); 674 dcl mvs_person_id char (32); 675 dcl mvs_unused1 char (1); 676 dcl mvs_unused2 char (1); 677 dcl mvs_value_seg_ptr ptr; 678 679 /* CONSTANTS */ 680 681 dcl mvs_SEGMENT bit (36) aligned init ("1001"b) internal static options (constant); 682 683 684 685 686 687 688 call user_info_$homedir (mvs_home_dir); 689 690 call user_info_ (mvs_person_id, mvs_unused1, mvs_unused2); 691 692 call hcs_$make_seg (mvs_home_dir, rtrim (mvs_person_id) || ".value", "", RW_ACCESS_BIN, mvs_value_seg_ptr, mvs_code); 693 if mvs_code ^= 0 694 then call error (mvs_code, "Value segment does not exist and it cannot be created."); 695 696 call value_$init_seg (mvs_value_seg_ptr, 0, null (), 0, mvs_code); 697 if mvs_code ^= 0 698 then do; 699 call delete_$ptr (mvs_value_seg_ptr, mvs_SEGMENT, "xforum_user_profile", mvs_code2); 700 if mvs_code2 = 0 701 then call error (mvs_code, "The just created value segment could not be initialized, it has been deleted."); 702 else call error (mvs_code2, "The just created value segment could not be initialized, it also could not be deleted."); 703 end; 704 705 return; 706 707 end make_value_seg; 708 709 convert_version: proc (cv_data_ptr); 710 711 /* PARAMETERS */ 712 713 dcl cv_data_ptr ptr; /* (input) pointer to user profile stored in value seg */ 714 715 /* BASED */ 716 717 dcl cv_version_overlay char (8) based; 718 719 if cv_data_ptr -> cv_version_overlay = xup_USER_PROFILE_VERSION_1 720 then do; 721 xup_user_profile = cv_data_ptr -> user_profile_overlay; 722 xup_user_profile.version = xup_CURRENT_USER_PROFILE_VERSION; 723 xup_user_profile.function_key_data_ptr = null (); 724 call warn_user_of_changes; 725 xup_user_profile.new_features_menu_version = xup_CURRENT_NEW_FEATURES_MENU_VERSION; 726 call update_profile_i; 727 end; 728 else 729 if cv_data_ptr -> cv_version_overlay = xup_USER_PROFILE_VERSION_1_1 730 then do; 731 xup_user_profile = cv_data_ptr -> user_profile_overlay; 732 xup_user_profile.version = xup_CURRENT_USER_PROFILE_VERSION; 733 call warn_user_of_changes; 734 xup_user_profile.new_features_menu_version = xup_CURRENT_NEW_FEATURES_MENU_VERSION; 735 call update_profile_i; 736 end; 737 else do; 738 call ioa_ ("Your user profile is inaccessible or contains invalid data. A new profile"); 739 call ioa_ ("containing default values is being built for you. You may change these"); 740 call ioa_ ("values by selecting the personalization option on the menu."); 741 call timer_manager_$sleep (4, "11"b); 742 743 call init_user_profile; 744 end; 745 746 return; 747 748 end convert_version; 749 750 set_use_function_keys_i: proc (sufki_flag) returns (bit (1)); 751 752 /* PARAMETERS */ 753 754 dcl sufki_flag bit (1); 755 756 /* AUTOMATIC */ 757 758 dcl sufki_return_value bit (1); 759 760 761 762 763 sufki_return_value = "1"b; 764 765 if sufki_flag 766 then do; 767 if can_use_function_keys () 768 then do; 769 if xup_user_profile.user_set_fk_value = USE_ESCAPE_KEYS 770 then /* do NOT override users value */ 771 xup_user_profile.use_function_keys = "0"b; 772 else xup_user_profile.use_function_keys = "1"b; 773 end; 774 else do; 775 call ioa_ ("Function keys are not supported by this terminal type.^/ Escape sequences must be used."); 776 call timer_manager_$sleep (4, "11"b); 777 xup_user_profile.use_function_keys = "0"b; 778 sufki_return_value = "0"b; 779 end; 780 end; 781 else xup_user_profile.use_function_keys = "0"b; 782 783 if xup_user_profile.use_function_keys 784 then xup_user_profile.function_key_data_ptr = xup_term_type_function_key_data_ptr; 785 else do; 786 if xup_escape_sequence_function_key_data_ptr = null () 787 then xup_escape_sequence_function_key_data_ptr = xforum_default_fkeys_ (); 788 xup_user_profile.function_key_data_ptr = xup_escape_sequence_function_key_data_ptr; 789 end; 790 791 return (sufki_return_value); 792 793 end set_use_function_keys_i; 794 795 can_use_function_keys: proc () returns (bit (1)); 796 797 /* AUTOMATIC */ 798 799 dcl cufk_can_use_function_keys bit (1); 800 dcl cufk_code fixed bin (35); 801 dcl 01 cufk_term_info like terminal_info; 802 803 if xup_term_type_function_key_data_ptr ^= null () 804 then free xup_term_type_function_key_data_ptr -> function_key_data; 805 806 cufk_term_info.version = terminal_info_version; 807 call iox_$control (iox_$user_io, "terminal_info", addr (cufk_term_info), cufk_code); 808 if cufk_code ^= 0 809 then do; 810 cufk_can_use_function_keys = "0"b; 811 goto exit_can_use_function_keys; 812 end; 813 814 call ttt_info_$function_key_data (cufk_term_info.term_type, null, xup_term_type_function_key_data_ptr, cufk_code); 815 if cufk_code ^= 0 816 then do; 817 cufk_can_use_function_keys = "0"b; 818 goto exit_can_use_function_keys; 819 end; 820 821 if xup_term_type_function_key_data_ptr -> function_key_data.highest >= 8 822 then cufk_can_use_function_keys = "1"b; 823 else 824 if xup_term_type_function_key_data_ptr -> function_key_data.highest <= 6 825 then cufk_can_use_function_keys = "0"b; 826 else 827 if xup_term_type_function_key_data_ptr -> function_key_data.highest = 7 & ^xup_user_profile.multics_mode 828 then cufk_can_use_function_keys = "1"b; 829 else cufk_can_use_function_keys = "0"b; 830 831 exit_can_use_function_keys: 832 return (cufk_can_use_function_keys); 833 834 end can_use_function_keys; 835 836 update_profile_i: proc; 837 838 /* AUTOMATIC */ 839 840 dcl upi_code fixed bin (35); 841 dcl upi_unused_ptr ptr; 842 dcl upi_unused_fb18 fixed bin (18); 843 844 845 846 call value_$delete_data (xup_VALUE_SEG_PTR, xup_PERMANENT, xup_XFORUM_USER_PROFILE, upi_code); 847 if upi_code ^= 0 & upi_code ^= error_table_$oldnamerr 848 then call error (upi_code, "Could not delete old profile prior to updating"); 849 call value_$set_data (xup_VALUE_SEG_PTR, xup_PERMANENT, xup_XFORUM_USER_PROFILE, 850 addr (xup_user_profile), size (xup_user_profile), null (), upi_unused_ptr, upi_unused_fb18, upi_code); 851 if upi_code ^= 0 852 then call error (upi_code, "Could not update your old user profile"); 853 854 return; 855 856 end update_profile_i; 857 858 warn_user_of_changes: proc; 859 860 call ioa_ ("Executive Forum has been changed since you last used it. Select option"); 861 call ioa_ ("""f"" in the General Help Topics menu for a description of the changes."); 862 call timer_manager_$sleep (4, "11"b); 863 864 return; 865 866 end warn_user_of_changes; 867 868 error: proc (e_code, e_reason); 869 870 /* PARAMETERS */ 871 872 dcl e_code fixed bin (35); 873 dcl e_reason char (512); 874 875 xup_xforum_error_info.name = "xforum_user_profile"; 876 xup_xforum_error_info.entry = ""; 877 xup_xforum_error_info.doing = ""; 878 xup_xforum_error_info.code = e_code; 879 xup_xforum_error_info.reason = e_reason; 880 881 call signal_ ("xforum_fatal_error", null (), addr (xup_xforum_error_info), null ()); 882 883 end error; 884 885 end xforum_user_profile; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/07/87 1321.6 xforum_user_profile.pl1 >spec>install>MR12.2-1008>xforum_user_profile.pl1 356 1 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 358 2 02/23/81 2146.3 function_key_data.incl.pl1 >ldd>include>function_key_data.incl.pl1 360 3 06/29/77 1624.0 terminal_info.incl.pl1 >ldd>include>terminal_info.incl.pl1 362 4 12/03/84 1241.6 xforum_error_info.incl.pl1 >ldd>include>xforum_error_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. RW_ACCESS_BIN 000001 constant fixed bin(5,0) initial dcl 1-36 set ref 692* Serror_occurred 000170 automatic bit(1) unaligned dcl 383 set ref 386* 401* 411* 416 UNSET constant fixed bin(2,0) initial dcl 322 ref 659 USE_ESCAPE_KEYS constant fixed bin(2,0) initial dcl 323 ref 769 USE_FUNCTION_KEYS constant fixed bin(2,0) initial dcl 324 ref 570 addr builtin function dcl 328 ref 388 388 807 807 849 849 881 881 code 51 000014 internal static fixed bin(35,0) level 2 dcl 303 set ref 878* com_err_ 000306 constant entry external dcl 281 ref 461 cufk_can_use_function_keys 000330 automatic bit(1) unaligned dcl 799 set ref 810* 817* 821* 823* 826* 829* 831 cufk_code 000331 automatic fixed bin(35,0) dcl 800 set ref 807* 808 814* 815 cufk_term_info 000332 automatic structure level 1 unaligned dcl 801 set ref 807 807 cv_data_ptr parameter pointer dcl 713 ref 709 719 721 728 731 cv_version_overlay based char(8) unaligned dcl 717 ref 719 728 delete_$ptr 000310 constant entry external dcl 282 ref 699 doing 20 000014 internal static char(100) level 2 packed unaligned dcl 303 set ref 877* dp_code 000171 automatic fixed bin(35,0) dcl 456 set ref 460* 461 461* e_code parameter fixed bin(35,0) dcl 872 ref 868 878 e_reason parameter char(512) unaligned dcl 873 ref 868 879 empty builtin function dcl 328 ref 374 entry 10 000014 internal static char(32) level 2 packed unaligned dcl 303 set ref 876* error_table_$noentry 000302 external static fixed bin(35,0) dcl 276 ref 390 error_table_$oldnamerr 000300 external static fixed bin(35,0) dcl 275 ref 396 847 function_key_data based structure level 1 dcl 2-7 ref 803 function_key_data_ptr 4 000266 internal static pointer level 2 dcl 303 set ref 447* 615* 624 657* 723* 783* 788* g_code 000162 automatic fixed bin(35,0) dcl 375 set ref 388* 390 396 403 403* g_data_ptr 000164 automatic pointer dcl 376 set ref 388* 408 410* 413 g_first_time_user parameter bit(1) dcl 370 set ref 366 394* 407* 418 g_local_area 000100 automatic area(50) dcl 374 set ref 374* 388 388 g_unused_b1 000166 automatic bit(1) unaligned dcl 377 set ref 425* 427* g_unused_fb18 000167 automatic fixed bin(18,0) dcl 378 set ref 388* g_version_overlay based char(8) unaligned dcl 382 ref 408 handle_interactive_messages 2 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 440* 474* 482 649* hcs_$make_seg 000312 constant entry external dcl 283 ref 692 highest 1 based fixed bin(17,0) level 2 dcl 2-7 ref 803 821 823 826 ioa_ 000314 constant entry external dcl 284 ref 439 440 441 442 443 444 445 446 447 448 463 738 739 740 775 860 861 iox_$control 000316 constant entry external dcl 285 ref 807 iox_$user_io 000304 external static pointer dcl 277 set ref 807* key_info based structure level 1 packed unaligned dcl 2-28 mbz 2(06) 000266 internal static bit(30) level 2 packed unaligned dcl 303 set ref 446* 656* menu_always 2(02) 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 442* 518* 526 651* multics_mode 2(01) 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 441* 499* 500 509 650* 826 mvs_SEGMENT 000000 constant bit(36) initial dcl 681 set ref 699* mvs_code 000214 automatic fixed bin(35,0) dcl 671 set ref 692* 693 693* 696* 697 700* mvs_code2 000215 automatic fixed bin(35,0) dcl 672 set ref 699* 700 702* mvs_home_dir 000216 automatic char(168) unaligned dcl 673 set ref 688* 692* mvs_person_id 000270 automatic char(32) unaligned dcl 674 set ref 690* 692 mvs_unused1 000300 automatic char(1) unaligned dcl 675 set ref 690* mvs_unused2 000301 automatic char(1) unaligned dcl 676 set ref 690* mvs_value_seg_ptr 000302 automatic pointer dcl 677 set ref 692* 696* 699* name 000014 internal static char(32) level 2 packed unaligned dcl 303 set ref 875* new_features_menu_version 6 000266 internal static char(8) level 2 packed unaligned dcl 303 set ref 416 421* 448* 632* 643 658* 725* 734* null builtin function dcl 328 ref 657 696 696 723 786 803 814 814 849 849 881 881 881 881 read_comments_by_subject_chain 2(03) 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 443* 535* 543 652* reason 52 000014 internal static char(512) level 2 packed unaligned dcl 303 set ref 879* remove_menu_while_editing 2(05) 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 445* 599* 607 655* rtrim builtin function dcl 328 ref 692 sfkdp_function_key_data_ptr parameter pointer dcl 613 ref 609 615 shim_flag parameter bit(1) unaligned dcl 471 ref 467 474 signal_ 000320 constant entry external dcl 286 ref 881 size builtin function dcl 328 ref 849 849 sma_flag parameter bit(1) unaligned dcl 515 ref 511 518 smm_flag parameter bit(1) unaligned dcl 488 ref 484 499 smm_unused_b1 000172 automatic bit(1) unaligned dcl 492 set ref 500* snfmv_version parameter char(8) unaligned dcl 630 ref 626 632 srcbs_flag parameter bit(1) unaligned dcl 532 ref 528 535 srmwe_flag parameter bit(1) unaligned dcl 596 ref 592 599 sufk_flag parameter bit(1) unaligned dcl 549 set ref 545 556* sufk_return_value 000173 automatic bit(1) unaligned dcl 553 set ref 556* 558 sufki_flag parameter bit(1) unaligned dcl 754 ref 750 765 sufki_return_value 000320 automatic bit(1) unaligned dcl 758 set ref 763* 778* 791 term_type 2 000332 automatic char(32) level 2 packed unaligned dcl 801 set ref 814* terminal_info based structure level 1 dcl 3-6 terminal_info_version constant fixed bin(17,0) initial dcl 3-16 ref 806 timer_manager_$sleep 000322 constant entry external dcl 287 ref 400 741 776 862 ttt_info_$function_key_data 000324 constant entry external dcl 288 ref 814 ufk_value parameter fixed bin(2,0) dcl 568 ref 566 570 574 upi_code 000360 automatic fixed bin(35,0) dcl 840 set ref 846* 847 847 847* 849* 851 851* upi_unused_fb18 000364 automatic fixed bin(18,0) dcl 842 set ref 849* upi_unused_ptr 000362 automatic pointer dcl 841 set ref 849* use_function_keys 2(04) 000266 internal static bit(1) level 2 packed unaligned dcl 303 set ref 425 444* 500 564 653* 769* 772* 777* 781* 783 user_info_ 000326 constant entry external dcl 289 ref 690 user_info_$homedir 000330 constant entry external dcl 290 ref 688 user_profile_overlay based structure level 1 unaligned dcl 338 ref 413 721 731 user_set_fk_value 10 000266 internal static fixed bin(2,0) level 2 dcl 303 set ref 574* 590 654* 659* 769 value_$delete_data 000332 constant entry external dcl 291 ref 460 846 value_$get_data 000334 constant entry external dcl 292 ref 388 value_$init_seg 000336 constant entry external dcl 293 ref 696 value_$set_data 000340 constant entry external dcl 294 ref 849 version 000332 automatic fixed bin(17,0) level 2 in structure "cufk_term_info" dcl 801 in procedure "can_use_function_keys" set ref 806* version 000266 internal static char(8) level 2 in structure "xup_user_profile" packed unaligned dcl 303 in procedure "xforum_user_profile" set ref 439* 648* 722* 732* vufk_return_value 000174 automatic bit(1) unaligned dcl 581 set ref 583* 585 xforum_default_fkeys_ 000342 constant entry external dcl 295 ref 786 xforum_error_info based structure level 1 unaligned dcl 4-3 xup_CURRENT_NEW_FEATURES_MENU_VERSION 000022 constant char(8) initial unaligned dcl 312 ref 416 421 658 725 734 xup_CURRENT_USER_PROFILE_VERSION 000020 constant char(8) initial unaligned dcl 312 ref 408 648 722 732 xup_PERMANENT 000016 constant bit(36) initial dcl 312 set ref 388* 460* 846* 849* xup_USER_PROFILE_VERSION_1 000014 constant char(8) initial unaligned dcl 312 ref 719 xup_USER_PROFILE_VERSION_1_1 000012 constant char(8) initial unaligned dcl 312 ref 728 xup_VALUE_SEG_PTR 000010 constant pointer initial dcl 312 set ref 388* 460* 846* 849* xup_XFORUM_USER_PROFILE 000002 constant char(21) initial unaligned dcl 312 set ref 388* 460* 846* 849* xup_escape_sequence_function_key_data_ptr 000010 internal static pointer initial dcl 303 set ref 786 786* 788 xup_term_type_function_key_data_ptr 000012 internal static pointer initial dcl 303 set ref 783 803 803 814* 821 823 826 xup_user_profile 000266 internal static structure level 1 unaligned dcl 303 set ref 413* 721* 731* 849 849 849 849 xup_xforum_error_info 000014 internal static structure level 1 unaligned dcl 303 set ref 881 881 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 KEY_CTRL internal static fixed bin(17,0) initial dcl 2-22 KEY_CTRL_AND_SHIFT internal static fixed bin(17,0) initial dcl 2-22 KEY_PLAIN internal static fixed bin(17,0) initial dcl 2-22 KEY_SHIFT internal static fixed bin(17,0) initial dcl 2-22 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 function_key_data_highest automatic fixed bin(17,0) dcl 2-35 function_key_data_ptr automatic pointer dcl 2-34 function_key_data_version_1 internal static fixed bin(17,0) initial dcl 2-36 function_key_seqs based char unaligned dcl 2-32 key_info_ptr automatic pointer dcl 2-38 terminal_info_ptr automatic pointer dcl 3-15 NAMES DECLARED BY EXPLICIT CONTEXT. can_use_function_keys 004142 constant entry internal dcl 795 ref 570 583 767 convert_version 003667 constant entry internal dcl 709 ref 410 delete_profile 001430 constant entry external dcl 452 display_profile 001123 constant entry external dcl 437 error 004477 constant entry internal dcl 868 ref 364 403 693 700 702 847 851 exit_can_use_function_keys 004277 constant label dcl 831 ref 811 818 get 000656 constant entry external dcl 366 get_function_key_data_ptr 003222 constant entry external dcl 622 get_handle_interactive_messages 001637 constant entry external dcl 480 get_menu_always 002147 constant entry external dcl 524 get_multics_mode 002007 constant entry external dcl 507 get_new_features_menu_version 003334 constant entry external dcl 641 get_read_comments_by_subject 002307 constant entry external dcl 541 get_remove_menu_while_editing 003057 constant entry external dcl 605 get_use_function_keys 002462 constant entry external dcl 562 get_user_fk_value 002716 constant entry external dcl 588 init_user_profile 003414 constant entry internal dcl 645 ref 393 399 743 make_value_seg 003447 constant entry internal dcl 667 ref 392 set_function_key_data_ptr 003145 constant entry external dcl 609 set_handle_interactive_messages 001562 constant entry external dcl 467 set_menu_always 002073 constant entry external dcl 511 set_multics_mode 001720 constant entry external dcl 484 set_new_features_menu_version 003257 constant entry external dcl 626 set_read_comments_by_subject 002233 constant entry external dcl 528 set_remove_menu_while_editing 003003 constant entry external dcl 592 set_use_function_keys 002373 constant entry external dcl 545 set_use_function_keys_i 004020 constant entry internal dcl 750 ref 425 427 500 556 set_user_fk_value 002547 constant entry external dcl 566 update_profile 001071 constant entry external dcl 431 update_profile_i 004305 constant entry internal dcl 836 ref 422 433 661 726 735 valid_user_fk_FUNCTION 002636 constant entry external dcl 579 warn_user_of_changes 004430 constant entry internal dcl 858 ref 418 724 733 xforum_user_profile 000634 constant entry external dcl 58 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5422 5766 4662 5432 Length 6412 4662 344 410 537 270 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME xforum_user_profile 1048 external procedure is an external procedure. init_user_profile internal procedure shares stack frame of external procedure xforum_user_profile. make_value_seg internal procedure shares stack frame of external procedure xforum_user_profile. convert_version internal procedure shares stack frame of external procedure xforum_user_profile. set_use_function_keys_i internal procedure shares stack frame of external procedure xforum_user_profile. can_use_function_keys internal procedure shares stack frame of external procedure xforum_user_profile. update_profile_i internal procedure shares stack frame of external procedure xforum_user_profile. warn_user_of_changes internal procedure shares stack frame of external procedure xforum_user_profile. error internal procedure shares stack frame of external procedure xforum_user_profile. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 xup_escape_sequence_function_key_data_ptr xforum_user_profile 000012 xup_term_type_function_key_data_ptr xforum_user_profile 000014 xup_xforum_error_info xforum_user_profile 000266 xup_user_profile xforum_user_profile STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME xforum_user_profile 000100 g_local_area xforum_user_profile 000162 g_code xforum_user_profile 000164 g_data_ptr xforum_user_profile 000166 g_unused_b1 xforum_user_profile 000167 g_unused_fb18 xforum_user_profile 000170 Serror_occurred xforum_user_profile 000171 dp_code xforum_user_profile 000172 smm_unused_b1 xforum_user_profile 000173 sufk_return_value xforum_user_profile 000174 vufk_return_value xforum_user_profile 000214 mvs_code make_value_seg 000215 mvs_code2 make_value_seg 000216 mvs_home_dir make_value_seg 000270 mvs_person_id make_value_seg 000300 mvs_unused1 make_value_seg 000301 mvs_unused2 make_value_seg 000302 mvs_value_seg_ptr make_value_seg 000320 sufki_return_value set_use_function_keys_i 000330 cufk_can_use_function_keys can_use_function_keys 000331 cufk_code can_use_function_keys 000332 cufk_term_info can_use_function_keys 000360 upi_code update_profile_i 000362 upi_unused_ptr update_profile_i 000364 upi_unused_fb18 update_profile_i THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out return_mac signal_op shorten_stack ext_entry any_to_any_truncate_op_freen_ op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ delete_$ptr hcs_$make_seg ioa_ iox_$control signal_ timer_manager_$sleep ttt_info_$function_key_data user_info_ user_info_$homedir value_$delete_data value_$get_data value_$init_seg value_$set_data xforum_default_fkeys_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$noentry error_table_$oldnamerr iox_$user_io LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 374 000626 58 000633 364 000644 366 000652 386 000666 388 000667 390 000730 392 000734 393 000735 394 000736 395 000741 396 000742 399 000744 400 000745 401 000762 402 000764 403 000765 407 000775 408 000777 410 001004 411 001006 412 001010 413 001011 416 001014 418 001022 421 001027 422 001032 425 001033 427 001044 429 001050 431 001070 433 001101 435 001102 437 001122 439 001133 440 001153 441 001173 442 001215 443 001237 444 001261 445 001303 446 001325 447 001347 448 001367 450 001407 452 001427 460 001440 461 001465 463 001522 465 001536 467 001556 474 001575 476 001603 480 001633 482 001652 484 001715 499 001733 500 001741 503 001751 507 002004 509 002022 511 002070 518 002106 520 002114 524 002144 526 002162 528 002230 535 002246 537 002254 541 002304 543 002322 545 002370 556 002406 558 002417 562 002457 564 002475 566 002543 570 002557 574 002610 576 002614 579 002634 583 002651 585 002653 588 002713 590 002726 592 003000 599 003016 601 003024 605 003054 607 003072 609 003140 615 003160 617 003165 622 003216 624 003232 626 003252 632 003272 634 003300 641 003330 643 003343 885 003413 645 003414 648 003415 649 003420 650 003422 651 003424 652 003426 653 003430 654 003432 655 003433 656 003435 657 003437 658 003441 659 003443 661 003445 663 003446 667 003447 688 003450 690 003461 692 003501 693 003564 696 003574 697 003617 699 003621 700 003651 702 003661 705 003666 709 003667 719 003671 721 003701 722 003705 723 003707 724 003711 725 003712 726 003715 727 003716 728 003717 731 003721 732 003725 733 003727 734 003730 735 003733 736 003734 738 003735 739 003751 740 003765 741 004001 743 004016 746 004017 750 004020 763 004022 765 004024 767 004031 769 004036 772 004045 773 004047 775 004050 776 004064 777 004101 778 004104 780 004105 781 004106 783 004111 786 004117 788 004131 791 004134 795 004142 803 004144 806 004160 807 004162 808 004214 810 004216 811 004217 814 004220 815 004246 817 004250 818 004251 821 004252 823 004262 826 004266 829 004276 831 004277 836 004305 846 004306 847 004333 849 004345 851 004420 854 004427 858 004430 860 004431 861 004445 862 004461 864 004476 868 004477 875 004501 876 004505 877 004510 878 004513 879 004515 881 004521 883 004556 ----------------------------------------------------------- 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