COMPILATION LISTING OF SEGMENT forum_add_meeting Compiled by: Multics PL/I Compiler, Release 33d, of April 24, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 92-04-27_1037.12_Mon_mdt Options: optimize map 1 /****^ ************************************************************** 2* * * 3* * Copyright, (C) Massachusetts Institute of Technology, 1983 * 4* * * 5* ************************************************************** */ 6 7 8 9 10 /****^ HISTORY COMMENTS: 11* 1) change(86-07-29,Pattin), approve(86-07-29,MCR7354), 12* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 13* Added -brief and -long to (add remove)_meeting. Added -cmtg to 14* remove_meeting. Fixed some error messages. 15* END HISTORY COMMENTS */ 16 17 18 forum_add_meeting: 19 fam: proc (); 20 21 /* Adds and removes links in the user's forum search list. 22* 23* Jay Pattin 6/2/83 */ 24 25 declare (P_passport_info_ptr ptr, 26 P_ssu_ptr ptr) 27 parameter; 28 29 declare active_function bit (1) aligned, 30 absolute_path bit (1) aligned, 31 arg_count fixed bin, 32 arg_idx fixed bin, 33 arg_len fixed bin (21), 34 arg_ptr ptr, 35 arg char (arg_len) based (arg_ptr), 36 brief bit (1) aligned, 37 chair char (32), 38 chairman bit (1) aligned, 39 check_switch bit (1) aligned, 40 cleanup_switch bit (1) aligned, 41 cmtg_switch bit (1) aligned, 42 directory char (168), 43 entry_name bit (1) aligned, 44 force bit (1) aligned, 45 forum_name char (32), 46 idx fixed bin, 47 link_dir char (168), 48 no_match bit (1) aligned, 49 path char (168), 50 ret_len fixed bin (21), 51 ret_ptr ptr, 52 ret_string char (ret_len) based (ret_ptr) varying, 53 ssu_ptr ptr, 54 start fixed bin, 55 status fixed bin (35), 56 subsystem bit (1) aligned, 57 type fixed bin (2), 58 update bit (1) aligned, 59 whoami char (32); 60 61 declare 1 sb aligned like status_branch, 62 1 sl aligned like status_link; 63 declare NL char (1) static options (constant) init (" 64 "); 65 66 declare (addr, after, before, index, ltrim, null, pointer, reverse, rtrim, search, substr, sum) 67 builtin; 68 declare cleanup condition; 69 70 declare (error_table_$badopt, 71 error_table_$inconsistent, 72 error_table_$namedup, 73 error_table_$noarg, 74 error_table_$no_s_permission, 75 error_table_$noentry, 76 error_table_$nomatch, 77 error_table_$segnamedup, 78 forum_et_$no_forum, 79 forum_et_$no_such_forum, 80 forum_et_$not_eligible) fixed bin (35) external; 81 82 declare active_fnc_err_ entry options (variable), 83 check_star_name_$entry entry (char (*), fixed bin (35)), 84 com_err_ entry options (variable), 85 cu_$af_return_arg entry (fixed bin, ptr, fixed bin (21)) returns (fixed bin (35)), 86 cu_$arg_list_ptr entry returns (ptr), 87 expand_pathname_ entry (char (*), char (*), char (*), fixed bin (35)), 88 expand_pathname_$add_suffix entry (char (*), char (*), char (*), char (*), fixed bin (35)), 89 forum_$close_forum entry (fixed bin, fixed bin (35)), 90 forum_$get_forum_path entry (char (*), char (*), char (*), char (*), fixed bin (35)), 91 forum_$get_forum_path_idx entry (fixed bin, char (*), char (*), fixed bin (35)), 92 forum_$get_uid_file entry (char (*), char (*), bit (36) aligned, fixed bin (35)), 93 forum_requests_$find_forum entry (char (*), char (*), char (*), fixed bin, fixed bin (35)), 94 forum_requests_$open_forum entry (char (*), fixed bin, char (*), char (*), fixed bin (35)), 95 forum_trans_specs_$parse_specs 96 entry (ptr, fixed bin, bit (36) aligned, entry, fixed bin, char (*), char (*), 97 ptr), 98 forum_trans_util_$read_trans entry (ptr, fixed bin, fixed bin, ptr, fixed bin (35)), 99 get_system_free_area_ entry returns (ptr), 100 get_wdir_ entry returns (char (168)), 101 hcs_$append_link entry (char (*), char (*), char (*), fixed bin (35)), 102 hcs_$chname_file entry (char (*), char (*), char (*), char (*), fixed bin (35)), 103 hcs_$delentry_file entry (char (*), char (*), fixed bin (35)), 104 hcs_$get_link_target entry (char (*), char (*), char (*), char (*), fixed bin (35)), 105 hcs_$get_uid_file entry (char (*), char (*), bit (36) aligned, fixed bin (35)), 106 hcs_$star_ entry (char (*), char (*), fixed bin (2), ptr, fixed bin, ptr, ptr, fixed bin (35)), 107 hcs_$status_ entry (char (*), char (*), fixed bin (1), ptr, ptr, fixed bin (35)), 108 hcs_$status_minf entry (char (*), char (*), fixed bin (1), fixed bin (2), fixed bin (24), fixed bin (35)), 109 ioa_ entry options (variable), 110 nd_handler_ entry (char (*), char (*), char (*), fixed bin (35)), 111 pathname_ entry (char (*), char (*)) returns (char (168)), 112 ssu_$abort_line entry options (variable), 113 ssu_$arg_count entry (ptr, fixed bin), 114 ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)), 115 ssu_$destroy_invocation entry (ptr), 116 ssu_$get_subsystem_and_request_name 117 entry (ptr) returns (char (72) var), 118 ssu_$print_message entry options(variable), 119 ssu_$return_arg entry (ptr, fixed bin, bit (1) aligned, ptr, fixed bin (21)), 120 ssu_$standalone_invocation entry (ptr, char (*), char (*), ptr, entry, fixed bin (35)), 121 user_info_$whoami entry (char (*), char (*), char (*)); 122 1 1 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 1 2 1 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 1 4 1 5 /* This include file contains branch and link structures returned by 1 6* hcs_$status_ and hcs_$status_long. */ 1 7 1 8 dcl 1 status_branch aligned based (status_ptr), 1 9 2 short aligned, 1 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 1 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 1 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 1 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 1 14 3 dtu bit (36) unaligned, /* date/time last used */ 1 15 3 mode bit (5) unaligned, /* caller's effective access */ 1 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 1 17 3 pad1 bit (8) unaligned, 1 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 1 19 1 20 /* Limit of information returned by hcs_$status_ */ 1 21 1 22 2 long aligned, 1 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 1 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 1 25 3 lvid bit (36) unaligned, /* logical volume ID */ 1 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 1 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 1 28 3 pad2 bit (8) unaligned, 1 29 3 copy_switch bit (1) unaligned, /* copy switch */ 1 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 1 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 1 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 1 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 1 34 3 pad3 bit (5) unaligned, 1 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 1 36 3 uid bit (36) unaligned; /* unique ID */ 1 37 1 38 dcl 1 status_link aligned based (status_ptr), 1 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 1 40 2 nnames fixed bin (16) unaligned unsigned, 1 41 2 names_relp bit (18) unaligned, 1 42 2 dtem bit (36) unaligned, 1 43 2 dtd bit (36) unaligned, 1 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 1 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 1 46 1 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 1 48 based (pointer (status_area_ptr, status_branch.names_relp)), 1 49 /* array of names returned */ 1 50 status_pathname character (status_link.pathname_length) aligned 1 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 1 52 /* link target path */ 1 53 status_area_ptr pointer, 1 54 status_ptr pointer; 1 55 1 56 dcl (Link initial (0), 1 57 Segment initial (1), 1 58 Directory initial (2)) fixed bin internal static options (constant); 1 59 /* values for type fields declared above */ 1 60 1 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 123 124 2 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 2 2 2 3 /* This include file contains structures for the hcs_$star_, 2 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 2 5* 2 6* Written 23 October 1978 by Monte Davidoff. 2 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 2 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 2 9**/ 2 10 2 11 /* automatic */ 2 12 2 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 2 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 2 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 2 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 2 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 2 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 2 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 2 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 2 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 2 22 2 23 /* based */ 2 24 2 25 /* hcs_$star_ entry structure */ 2 26 2 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 2 28 2 type fixed binary (2) unsigned unaligned, 2 29 /* storage system type */ 2 30 2 nnames fixed binary (16) unsigned unaligned, 2 31 /* number of names of entry that match star_name */ 2 32 2 nindex fixed binary (18) unsigned unaligned; 2 33 /* index of first name in star_names */ 2 34 2 35 /* hcs_$star_ name structure */ 2 36 2 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 2 38 2 39 /* hcs_$star_list_ branch structure */ 2 40 2 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 2 42 2 type fixed binary (2) unsigned unaligned, 2 43 /* storage system type */ 2 44 2 nnames fixed binary (16) unsigned unaligned, 2 45 /* number of names of entry that match star_name */ 2 46 2 nindex fixed binary (18) unsigned unaligned, 2 47 /* index of first name in star_list_names */ 2 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 2 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 2 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 2 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 2 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 2 53 2 pad bit (7) unaligned, 2 54 2 records fixed binary (18) unsigned unaligned; 2 55 /* records used by branch */ 2 56 2 57 /* hcs_$star_dir_list_ branch structure */ 2 58 2 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 2 60 2 type fixed binary (2) unsigned unaligned, 2 61 /* storage system type */ 2 62 2 nnames fixed binary (16) unsigned unaligned, 2 63 /* number of names of entry that match star_name */ 2 64 2 nindex fixed binary (18) unsigned unaligned, 2 65 /* index of first name in star_list_names */ 2 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 2 67 2 pad bit (36) unaligned, 2 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 2 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 2 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 2 71 2 bit_count fixed binary (24) unaligned; 2 72 /* bit count of the branch */ 2 73 2 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 2 75 2 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 2 77 2 type fixed binary (2) unsigned unaligned, 2 78 /* storage system type */ 2 79 2 nnames fixed binary (16) unsigned unaligned, 2 80 /* number of names of entry that match star_name */ 2 81 2 nindex fixed binary (18) unsigned unaligned, 2 82 /* index of first name in star_list_names */ 2 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 2 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 2 85 2 pathname_len fixed binary (18) unsigned unaligned, 2 86 /* length of the pathname of the link */ 2 87 2 pathname_index fixed binary (18) unsigned unaligned; 2 88 /* index of start of pathname in star_list_names */ 2 89 2 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 2 91 2 92 declare star_list_names char (32) based (star_list_names_ptr) 2 93 dimension (star_links (star_branch_count + star_link_count).nindex 2 94 + star_links (star_branch_count + star_link_count).nnames 2 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 2 96 * binary ( 2 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 2 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 2 99 2 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 2 101 2 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 2 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 2 104 2 105 /* internal static */ 2 106 2 107 /* star_select_sw values */ 2 108 2 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 2 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 2 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 2 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 2 113 fixed binary (3) internal static options (constant) initial (5); 2 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 2 115 fixed binary (3) internal static options (constant) initial (7); 2 116 2 117 /* storage system types */ 2 118 2 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 2 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 2 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 2 122 2 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 125 126 3 1 /* START OF: forum_passport.incl.pl1 * * * * * * * * * * * * * * * * */ 3 2 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(86-07-30,Pattin), approve(86-07-30,MCR7354), 3 7* audit(86-08-03,Margolin), install(86-08-16,MR12.0-1128): 3 8* Added trailer_format. 3 9* END HISTORY COMMENTS */ 3 10 3 11 3 12 declare passport_info_ptr ptr; 3 13 3 14 declare 1 passport aligned based (passport_info_ptr), 3 15 2 version fixed bin, /* 2 */ 3 16 2 forum_idx fixed bin, /* current forum */ 3 17 2 forum_dir char (168) unal, /* where forum lives */ 3 18 2 forum_name char (32) unal, /* Current forum I'm at */ 3 19 2 forum_name_len fixed bin, /* length of forum_name without suffix */ 3 20 2 flags unal, 3 21 3 brief_sw bit (1) unal, /* specified at invocation */ 3 22 3 talk_fill bit (1) unal, /* God knows */ 3 23 3 print_fill bit (1) unal, /* God doesn't know */ 3 24 3 read_only bit (1) unal, 3 25 3 print_message bit (1) unal, /* Print chairman message on talk/reply */ 3 26 3 auto_write bit (1) unal, 3 27 3 mbz bit (30) unal, /* Future expansion */ 3 28 2 current_trans fixed bin, /* current transaction number */ 3 29 2 input_fill_width fixed bin, /* line length used for input filling */ 3 30 2 output_fill_width fixed bin, /* line length used for output filling */ 3 31 2 public_channel fixed bin (71), /* My transaction wakeup channel. */ 3 32 2 area_ptr ptr, /* used for random temporary storage */ 3 33 2 first_trans_ptr ptr, /* ptrs to linked list of transactions copied to */ 3 34 2 last_trans_ptr ptr, /* user ring */ 3 35 2 unprocessed_trans_ptr ptr, /* If this isn't null, we got one pending. */ 3 36 2 unprocessed_reply_trans fixed bin, /* If nonzero, unprocessed trans is a reply. */ 3 37 2 unprocessed_forum_dir char (168), /* Directory containing meeting unproc is for. */ 3 38 2 unprocessed_forum_name char (32), /* Name of meeting unproc is for */ 3 39 2 unprocessed_name_len fixed bin, /* length (w/o suffix) of Name of meeting unproc is for */ 3 40 2 ssu_ptr ptr, /* Department of Redundancy Department. */ 3 41 2 next_passport_ptr ptr, /* list of all invocations */ 3 42 2 trailer_format fixed bin; 3 43 3 44 declare passport_version_2 fixed bin static options (constant) initial (2); 3 45 3 46 declare forum_area area based (passport.area_ptr), 3 47 no_suffix_name char (passport.forum_name_len) based (addr (passport.forum_name)); 3 48 3 49 declare forum_data_$version_string character (8) external, 3 50 forum_data_$central_directory 3 51 character (168) unaligned external, 3 52 forum_data_$info_directory character (168) unaligned external; 3 53 3 54 declare (TFMT_none init (0), 3 55 TFMT_number init (1), 3 56 TFMT_more init (2), 3 57 TFMT_reference init (3)) 3 58 fixed bin static options (constant); 3 59 3 60 /* END OF: forum_passport.incl.pl1 * * * * * * * * * * * * * * * * */ 127 128 4 1 /* ... BEGIN INCLUDE FILE forum_trans_list.incl.pl1 ... */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(86-07-30,Pattin), approve(86-07-30,MCR7354), 4 7* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 4 8* Added deleted switch. 4 9* 2) change(91-09-05,Huen), approve(91-09-05,MCR8249), 4 10* audit(92-01-08,Zimmerman), install(92-04-27,MR12.5-1014): 4 11* phx20579: Added parse_flags.default_to_unproc & CREATE_UNPROC 4 12* END HISTORY COMMENTS */ 4 13 4 14 4 15 dcl forum_trans_list_ptr ptr; 4 16 dcl alloc_trans_list_size fixed bin; 4 17 4 18 dcl 1 forum_trans_list aligned based (forum_trans_list_ptr), 4 19 2 max_size fixed bin, 4 20 2 size fixed bin, 4 21 2 max_personid_len fixed bin, 4 22 2 list (alloc_trans_list_size refer (forum_trans_list.max_size)), 4 23 3 trans_num fixed bin (17), /* must be aligned */ 4 24 3 nref fixed bin (17) unaligned, 4 25 3 pref fixed bin (17) unaligned, 4 26 3 flags unaligned, 4 27 4 deleted bit (1) unaligned, 4 28 4 pad bit (35) unaligned; 4 29 4 30 dcl parse_flags_word bit (36) aligned; 4 31 4 32 dcl 1 parse_flags aligned based (addr (parse_flags_word)), 4 33 2 non_null bit (1) unal, /* on if trans_spec cannot be empty */ 4 34 2 only_one bit (1) unal, /* on if only one transaction may be specified */ 4 35 2 allow_deleted bit (1) unal, /* on if deleted transactions may be specified */ 4 36 2 must_be_deleted bit (1) unal, /* on if must be deleted */ 4 37 2 disallow_unproc bit (1) unal, /* on if unprocessed transaction not valid */ 4 38 2 disallow_meeting bit (1) unal, /* on if -meeting not allowed */ 4 39 2 disallow_reverse bit (1) unal, /* on if -reverse not allowed */ 4 40 2 disallow_idl bit (1) unal, /* on if -include_deleted not allowed */ 4 41 2 dont_read bit (1) unal, /* on if regexps, -sj, -text, userids, time not allowed */ 4 42 2 disallow_initial bit (1) unal, /* on if -initial not allowed */ 4 43 2 default_to_all bit (1) unal, /* on if defaults to all rather than current */ 4 44 2 default_to_unproc bit (1) unal, /* on if defaults to unproc, not current */ 4 45 2 disallow_cmsg bit (1) unal, /* no chairman_message */ 4 46 2 disallow_by_chain bit (1) unal, /* no -by_chain */ 4 47 2 allow_inhibit_error bit (1) unal, /* don't complain if none selected and -ihe given */ 4 48 2 call_on_non_ctl_arg bit (1) unal, /* call request on bad arguments even if not ctl args */ 4 49 2 default_to_none bit (1) unal, /* allow no transactions to be selected */ 4 50 2 create_unproc bit (1) unal, /* allow unproc even if there isn't one */ 4 51 2 padding bit (18) unal; 4 52 4 53 dcl ANY bit (36) aligned init (""b); 4 54 dcl (NON_NULL init ("100000000000000000"b), 4 55 ONLY_ONE init ("010000000000000000"b), 4 56 ALLOW_DELETED init ("001000000000000000"b), 4 57 MUST_BE_DELETED init ("001100000000000000"b), 4 58 DISALLOW_UNPROC init ("000010000000000000"b), 4 59 DISALLOW_MTG init ("000001000000000000"b), 4 60 DISALLOW_REV init ("000000100000000000"b), 4 61 DISALLOW_IDL init ("000000010000000000"b), 4 62 DONT_READ init ("000000001000000000"b), 4 63 DISALLOW_INITIAL init ("000000000100000000"b), 4 64 DEFAULT_TO_ALL init ("000000000010000000"b), 4 65 DEFAULT_TO_UNPROC init ("000000000001000000"b), 4 66 DISALLOW_CMSG init ("000000000000100000"b), 4 67 DISALLOW_BYCHAIN init ("000000000000010000"b), 4 68 ALLOW_IHE init ("000000000000001000"b), 4 69 CALL_ON_BAD_ARGS init ("000000000000000100"b), 4 70 DEFAULT_TO_NONE init ("000000000000000010"b), 4 71 CREATE_UNPROC init ("000000000000000001"b) 4 72 ) bit (18) aligned internal static options (constant); 4 73 4 74 /* ... END INCLUDE FILE forum_trans_list.incl.pl1 ... */ 129 130 5 1 /* BEGIN INCLUDE FILE: forum_user_trans.incl.pl1 */ 5 2 5 3 dcl alloc_text_length fixed bin (21); /* length of text area to allocate */ 5 4 dcl alloc_subject_length fixed bin (21); /* length of subject area to allocate */ 5 5 dcl forum_user_trans_ptr ptr; /* pointer to below structure */ 5 6 5 7 dcl 1 forum_user_trans based (forum_user_trans_ptr) aligned, 5 8 2 type fixed bin, /* type of transaction */ 5 9 2 person_id char (22), /* person_id of author of this transaction */ 5 10 2 project_id char (9), /* project_id of author of this transaction */ 5 11 2 time fixed bin (71), /* time transaction was entered */ 5 12 2 trans_no fixed bin, /* number of this transaction */ 5 13 2 next_trans_ptr ptr, /* pointer (in user ring) of next transaction */ 5 14 2 prev_trans_ptr ptr, /* pointer (in user ring) of previous transaction */ 5 15 2 subject_length fixed bin (21), /* length of subject field of transaction */ 5 16 2 text_length fixed bin (21), /* length of text field of transaction */ 5 17 2 unfilled bit (1) aligned, /* set if transaction is NOT stored filled */ 5 18 2 subject char (alloc_subject_length refer (forum_user_trans.subject_length)) unaligned, /* subject of transaction */ 5 19 2 text char (alloc_text_length refer (forum_user_trans.text_length)) unaligned; /* text of transaction */ 5 20 5 21 declare user_trans_type fixed bin static options (constant) initial (1); 5 22 declare message_type fixed bin static options (constant) initial (2); 5 23 5 24 declare (ONLY_UNDELETED init (0), 5 25 INCLUDE_DELETED init (1), 5 26 ONLY_DELETED init (2)) 5 27 fixed bin static options (constant); 5 28 5 29 /* END INCLUDE FILE: forum_user_trans.incl.pl1 */ 131 132 133 subsystem = "0"b; 134 whoami = "forum_add_meeting"; 135 on cleanup call ssu_$destroy_invocation (ssu_ptr); 136 call create_subsystem (); 137 138 goto ADD_COMMON; 139 140 add_meeting: 141 entry (P_ssu_ptr, P_passport_info_ptr); 142 143 ssu_ptr = P_ssu_ptr; 144 passport_info_ptr = P_passport_info_ptr; 145 subsystem = "1"b; 146 whoami = ssu_$get_subsystem_and_request_name (ssu_ptr); 147 148 forum_trans_list_ptr = null (); 149 on cleanup begin; 150 if forum_trans_list_ptr ^= null () then free forum_trans_list; 151 end; 152 153 goto ADD_COMMON; 154 155 ADD_COMMON: 156 call ssu_$arg_count (ssu_ptr, arg_count); 157 if arg_count = 0 then 158 call ssu_$abort_line (ssu_ptr, 0, "Usage: ^[am {trans_specs}^;fam^] meeting_paths {-control_args}", subsystem); 159 status_area_ptr = get_system_free_area_ (); 160 161 link_dir = ""; 162 brief, cmtg_switch, force, update = "0"b; 163 no_match = "1"b; 164 start = 1; 165 166 if subsystem then 167 if passport.forum_idx ^= 0 then do; 168 arg_idx = 0; 169 parse_flags_word = DISALLOW_MTG | DISALLOW_CMSG | CALL_ON_BAD_ARGS | DEFAULT_TO_NONE; 170 171 call forum_trans_specs_$parse_specs (passport_info_ptr, 1, parse_flags_word, args, (0), (""), (""), 172 forum_trans_list_ptr); 173 do idx = 1 to forum_trans_list.size; 174 call add_from_trans (forum_trans_list.trans_num (idx)); 175 end; 176 free forum_trans_list; 177 if arg_idx = 0 then start = arg_count + 1; 178 else start = arg_idx; 179 end; 180 181 do arg_idx = start to arg_count; 182 call ssu_$arg_ptr (ssu_ptr, arg_idx, arg_ptr, arg_len); 183 if index (arg, "-") = 1 then 184 if arg = "-brief" | arg = "-bf" then brief = "1"b; 185 else if subsystem & (arg = "-current_meeting" | arg = "-cmtg") then cmtg_switch = "1"b; 186 else if arg = "-directory" | arg = "-dr" then call get_link_dir_arg (arg_idx); 187 else if arg = "-force" | arg = "-fc" then force = "1"b; 188 else if arg = "-long" | arg = "-lg" then brief = "0"b; 189 else if arg = "-no_force" | arg = "-nfc" then force = "0"b; 190 else if arg = "-update" | arg = "-ud" then update = "1"b; 191 else call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 192 end; 193 194 if cmtg_switch then do; 195 if passport.forum_idx = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_forum); 196 path = rtrim (passport.forum_dir) || ">" || no_suffix_name; 197 call add_the_link (); 198 end; 199 200 do arg_idx = start to arg_count; 201 call ssu_$arg_ptr (ssu_ptr, arg_idx, arg_ptr, arg_len); 202 if index (arg, "-") = 1 then 203 if arg = "-directory" | arg = "-dr" then arg_idx = arg_idx + 1; 204 else; 205 else do; 206 if search (arg, "<>") = 0 & arg_len > 0 then 207 path = pathname_ (get_wdir_ (), arg); 208 else path = arg; 209 call add_the_link (); 210 end; 211 end; 212 213 if update then do; 214 force = "1"b; /* so it can update not_eligible links */ 215 no_match = "1"b; 216 if link_dir = "" then call get_link_dir ("1"b); 217 218 call update_links ("**.control"); 219 call update_links ("**.forum"); 220 if ^brief & no_match then call ssu_$print_message (ssu_ptr, 0, "There were no meetings to update."); 221 end; 222 else if no_match then call ssu_$abort_line (ssu_ptr, 0, "No meeting names were given."); 223 224 EGRESS: if ^subsystem then call ssu_$destroy_invocation (ssu_ptr); 225 return; 226 227 forum_remove_meeting: 228 frm: 229 entry (); 230 231 subsystem = "0"b; 232 whoami = "forum_remove_meeting"; 233 234 on cleanup call ssu_$destroy_invocation (ssu_ptr); 235 call create_subsystem (); 236 237 goto REMOVE_COMMON; 238 239 remove_meeting: 240 entry (P_ssu_ptr, P_passport_info_ptr); 241 242 ssu_ptr = P_ssu_ptr; 243 passport_info_ptr = P_passport_info_ptr; 244 subsystem = "1"b; 245 whoami = ssu_$get_subsystem_and_request_name (ssu_ptr); 246 247 goto REMOVE_COMMON; 248 249 REMOVE_COMMON: 250 call ssu_$arg_count (ssu_ptr, arg_count); 251 if arg_count = 0 then 252 call ssu_$abort_line (ssu_ptr, 0, "Usage: ^[f^]rm meeting_names {-control_args}", ^subsystem); 253 254 brief, check_switch, cleanup_switch, cmtg_switch, update = "0"b; 255 status_area_ptr = get_system_free_area_ (); 256 link_dir = ""; 257 258 do arg_idx = 1 to arg_count; 259 call ssu_$arg_ptr (ssu_ptr, arg_idx, arg_ptr, arg_len); 260 if index (arg, "-") = 1 then 261 if arg = "-brief" | arg = "-bf" then brief = "1"b; 262 else if arg = "-check" | arg = "-ck" then check_switch = "1"b; 263 else if arg = "-cleanup" then cleanup_switch = "1"b; 264 else if subsystem & (arg = "-current_meeting" | arg = "-cmtg") then cmtg_switch = "1"b; 265 else if arg = "-directory" | arg = "-dr" then call get_link_dir_arg (arg_idx); 266 else if arg = "-long" | arg = "-lg" then brief = "0"b; 267 else call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 268 end; 269 270 if link_dir = "" then call get_link_dir ("0"b); 271 if cmtg_switch then do; 272 if passport.forum_idx = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_forum); 273 forum_name = passport.forum_name; 274 call remove_link ("1"b); 275 end; 276 277 do arg_idx = 1 to arg_count; 278 call ssu_$arg_ptr (ssu_ptr, arg_idx, arg_ptr, arg_len); 279 if index (arg, "-") = 1 then 280 if arg = "-directory" | arg = "-dr" then arg_idx = arg_idx + 1; 281 else; 282 else do; 283 if search (arg, "<>") > 0 then 284 call ssu_$abort_line (ssu_ptr, 0, "Meeting names may not contain "">"" or ""<"". ^a""", arg); 285 286 call expand_pathname_$add_suffix (arg, "forum", "", forum_name, status); 287 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Expanding ^a.", arg); 288 289 call check_star_name_$entry (arg, status); 290 if status = 0 then call remove_link ("0"b); 291 else if (status = 1) | (status = 2) then call remove_links ("0"b); 292 else call ssu_$abort_line (ssu_ptr, status, "^a", arg); 293 end; 294 end; 295 296 if check_switch & cleanup_switch then 297 call ssu_$abort_line (ssu_ptr, error_table_$inconsistent, """-check"" and ""-cleanup"""); 298 299 if check_switch | cleanup_switch then call remove_links ("1"b); 300 301 goto EGRESS; 302 303 create_subsystem: 304 procedure (); 305 306 call ssu_$standalone_invocation (ssu_ptr, whoami, "1", cu_$arg_list_ptr (), punt, status); 307 if status ^= 0 then do; /* UGH */ 308 if cu_$af_return_arg ((0), null (), (0)) = 0 then 309 call active_fnc_err_ (status, whoami, "Unable to create subsystem invocation."); 310 else call com_err_ (status, whoami, "Unable to create subsystem invocation."); 311 goto EGRESS; 312 end; 313 314 return; 315 end create_subsystem; 316 317 318 punt: 319 proc (); 320 321 goto EGRESS; 322 323 end punt; 324 325 args: 326 proc (P_arg_idx); 327 328 declare P_arg_idx fixed bin; 329 330 call ssu_$arg_ptr (ssu_ptr, P_arg_idx, arg_ptr, arg_len); 331 if index (arg, "-") = 1 then 332 if arg = "-brief" | arg = "-bf" then brief = "1"b; 333 else if (arg = "-current_meeting" | arg = "-cmtg") then cmtg_switch = "1"b; 334 else if arg = "-directory" | arg = "-dr" then call get_link_dir_arg (P_arg_idx); 335 else if arg = "-force" | arg = "-fc" then force = "1"b; 336 else if arg = "-long" | arg = "-lg" then brief = "0"b; 337 else if arg = "-no_force" | arg = "-nfc" then force = "0"b; 338 else if arg = "-update" | arg = "-ud" then update = "1"b; 339 else call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 340 else do; 341 arg_idx = P_arg_idx; 342 P_arg_idx = arg_count + 1; 343 end; 344 345 return; 346 end args; 347 348 get_link_dir: 349 proc (create_switch); 350 351 declare create_switch bit (1) aligned, 352 home_dir char (40), 353 person char (22), 354 project char (9); 355 356 call user_info_$whoami (person, project, ""); 357 home_dir = ">udd>" || rtrim (project) || ">" || person; 358 call hcs_$status_minf (home_dir, "meetings", 1, type, (0), status); 359 360 if status = error_table_$noentry then do; /* no meetings dir - create a link pointing at homedir */ 361 if ^create_switch then 362 call ssu_$abort_line (ssu_ptr, 0, "^a>meetings not found. There are no meetings to remove.", 363 home_dir); 364 call ssu_$print_message (ssu_ptr, 0, "Creating ^a>meetings.", home_dir); 365 call hcs_$append_link (home_dir, "meetings", home_dir, status); 366 if status ^= 0 then 367 call ssu_$abort_line (ssu_ptr, status, "Unable to create meeting directory."); 368 end; 369 else if status ^= 0 then 370 call ssu_$abort_line (ssu_ptr, status, "Unable to access meeting directory."); 371 else if type ^= Directory then 372 call ssu_$abort_line (ssu_ptr, 0, "^a>meetings is not a directory.", home_dir); 373 374 link_dir = rtrim (home_dir) || ">meetings"; 375 376 return; 377 end get_link_dir; 378 379 380 get_link_dir_arg: 381 proc (P_arg_idx); 382 383 declare name char (32); 384 declare P_arg_idx fixed bin; 385 386 if P_arg_idx = arg_count then call ssu_$abort_line (ssu_ptr, error_table_$noarg, "Following -directory"); 387 P_arg_idx = P_arg_idx + 1; 388 389 call ssu_$arg_ptr (ssu_ptr, P_arg_idx, arg_ptr, arg_len); 390 call expand_pathname_ (arg, link_dir, name, status); 391 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "^a", arg); 392 393 call hcs_$status_minf (link_dir, name, 1, type, (0), status); 394 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "^a", arg); 395 if type ^= Directory then call ssu_$abort_line (ssu_ptr, 0, "^a is not a directory.", arg); 396 397 link_dir = pathname_ (link_dir, name); 398 return; 399 end get_link_dir_arg; 400 401 dissect_trans: 402 proc (trans_idx, dir, name, chairman, error_proc); 403 404 declare trans_idx fixed bin parameter, 405 (dir, name, chairman) char (*) parameter, 406 error_proc entry variable options (variable) parameter, 407 (idx, jdx) fixed bin; 408 409 call forum_trans_util_$read_trans (passport_info_ptr, 0, trans_idx, forum_user_trans_ptr, status); 410 if status ^= 0 then 411 call ssu_$abort_line (ssu_ptr, status, "Reading transaction ^d.", trans_idx); 412 413 if index (forum_user_trans.subject, " meeting") = 0 then do; 414 BAD: call error_proc (ssu_ptr, 0, "Transaction ^d is not a meeting announcement.", trans_idx); 415 dir = ""; /* for error return */ 416 return; 417 end; 418 419 name = reverse (after (reverse (forum_user_trans.subject), "gniteem ")); 420 421 idx = index (forum_user_trans.text, "Location: ") + 10; 422 if idx = 10 then goto BAD; 423 jdx = index (substr (forum_user_trans.text, idx), NL) - 1; 424 dir = substr (forum_user_trans.text, idx, jdx); 425 426 idx = index (forum_user_trans.text, "Chairman: ") + 10; 427 if idx = 10 then goto BAD; 428 jdx = index (substr (forum_user_trans.text, idx), NL) - 1; 429 chairman = substr (forum_user_trans.text, idx, jdx); 430 431 return; 432 end dissect_trans; 433 434 add_from_trans: 435 proc (trans_idx); 436 437 declare trans_idx fixed bin, 438 name char (32), 439 dir char (168), 440 chairman char (32); 441 442 call dissect_trans (trans_idx, dir, name, chairman, ssu_$print_message); 443 if dir = "" then return; 444 445 path = pathname_ (dir, name); 446 call add_the_link (); 447 448 return; 449 end add_from_trans; 450 451 add_the_link: 452 proc (); 453 454 declare forum_idx fixed bin, 455 idx fixed bin, 456 link_path char (168), 457 (uid1, uid2) bit (36) aligned; 458 459 no_match = "0"b; 460 forum_idx = 0; 461 if link_dir = "" then call get_link_dir ("1"b); 462 463 on cleanup call forum_$close_forum (forum_idx, 0); 464 465 call forum_requests_$open_forum (path, forum_idx, "", "", status); 466 if status ^= 0 then 467 if force & status = forum_et_$not_eligible then do; 468 call forum_requests_$find_forum (path, directory, forum_name, (0), (0)); 469 call forum_$get_forum_path ((directory), (forum_name), directory, forum_name, status); 470 end; 471 else do; 472 call ssu_$print_message (ssu_ptr, status, "Locating ^a.", path); 473 return; 474 end; 475 else call forum_$get_forum_path_idx (forum_idx, directory, forum_name, status); 476 477 if status ^= 0 then 478 call ssu_$abort_line (ssu_ptr, status, "Getting names for ^a.", path); 479 if forum_idx ^= 0 then call forum_$close_forum (forum_idx, 0); 480 481 link_path = pathname_ (directory, forum_name); 482 RETRY_ADD_LINK: 483 call hcs_$append_link (link_dir, forum_name, link_path, status); 484 if status ^= 0 then 485 if status = error_table_$namedup then do; 486 uid2 = "0"b; 487 call forum_$get_uid_file (directory, forum_name, uid1, status); 488 if status ^= 0 then do; 489 BAD_DUP: call ssu_$print_message (ssu_ptr, 0, "A^[nother^] meeting named ^a is already in the meeting directory.", 490 (uid2 ^= ""b), forum_name); 491 return; 492 end; 493 494 call forum_$get_uid_file (link_dir, forum_name, uid2, status); 495 if status ^= 0 then do; 496 if status ^= forum_et_$no_such_forum then goto BAD_DUP; 497 if ^brief then call ssu_$print_message (ssu_ptr, 0, "Replacing null link to ^a.", forum_name); 498 call hcs_$delentry_file (link_dir, forum_name, status); 499 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Unable to delete null link."); 500 goto RETRY_ADD_LINK; 501 end; 502 else if uid1 ^= uid2 then goto BAD_DUP; 503 504 call hcs_$status_minf (link_dir, forum_name, 0, type, (0), status); 505 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Unable to get status information for ^a.", 506 forum_name); 507 if type = Directory then do; 508 if ^brief then 509 call ssu_$print_message (ssu_ptr, 0, 510 "The ^a meeting is in the meetings directory. No link created.", forum_name); 511 return; 512 end; 513 514 if ^brief then call ssu_$print_message (ssu_ptr, 0, "^a is already in the meeting directory. Link will be updated.", 515 forum_name); 516 call hcs_$delentry_file (link_dir, forum_name, status); 517 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Unable to delete old link."); 518 goto RETRY_ADD_LINK; 519 end; 520 else do; 521 call ssu_$print_message (ssu_ptr, status, "Unable to create link to ^a.", link_path); 522 return; 523 end; 524 525 status_ptr = addr (sb); 526 sb.names_relp = ""b; 527 528 on cleanup begin; 529 if sb.names_relp ^= ""b then free status_entry_names; 530 end; 531 532 call hcs_$status_ (directory, forum_name, 0, status_ptr, status_area_ptr, status); 533 if status ^= 0 then do; 534 call ssu_$print_message (ssu_ptr, status, "Unable to add additional names to the link for ^a.", path); 535 return; 536 end; 537 538 if status_branch.nnames < 1 then do; 539 call ssu_$print_message (ssu_ptr, 0, "Unable to obtain names for ^a.", path); 540 return; 541 end; 542 543 SET_PRIMARY: 544 call hcs_$chname_file (link_dir, forum_name, forum_name, (status_entry_names (1)), status); 545 if check_code (1) then goto SET_PRIMARY; 546 547 do idx = 2 to status_branch.nnames; 548 AGAIN: call hcs_$chname_file (link_dir, (status_entry_names (1)), "", (status_entry_names (idx)), status); 549 if check_code (idx) then goto AGAIN; 550 end; 551 552 free status_entry_names; 553 554 return; 555 end add_the_link; 556 557 check_code: 558 procedure (idx) returns (bit (1) aligned); 559 560 declare idx fixed bin; 561 562 if status ^= 0 then 563 if status = error_table_$segnamedup then; 564 else if status = error_table_$namedup then do; 565 call nd_handler_ (whoami, link_dir, (status_entry_names (idx)), status); 566 if status = 0 then return ("1"b); 567 end; 568 else call ssu_$print_message (ssu_ptr, status, "Unable to add name ^a to ^a>^a.", 569 status_entry_names (idx), link_dir, forum_name); 570 return ("0"b); 571 end check_code; 572 573 remove_link: 574 proc (cmtg); 575 576 declare cmtg bit (1) aligned; 577 578 call hcs_$status_minf (link_dir, forum_name, 0, type, (0), status); 579 if status = error_table_$noentry then do; 580 if cmtg then 581 call ssu_$abort_line (ssu_ptr, 0, "The current meeting is not in the meeting directory."); 582 583 call expand_pathname_$add_suffix (arg, "control", "", forum_name, status); 584 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Expanding ^a.", arg); 585 call hcs_$status_minf (link_dir, forum_name, 0, type, (0), status); 586 end; 587 588 if status = error_table_$noentry then 589 call ssu_$abort_line (ssu_ptr, 0, "The ^a meeting is not in the meeting directory.", arg); 590 else if type ^= Link then 591 call ssu_$abort_line (ssu_ptr, 0, "The ^a meeting itself is in the meeting directory.^/^-This command does not delete meetings.", arg); 592 593 call hcs_$delentry_file (link_dir, forum_name, status); 594 if status ^= 0 then call ssu_$abort_line (ssu_ptr, status, "Unable to remove the ^a meeting.", arg); 595 596 return; 597 end remove_link; 598 599 remove_links: 600 proc (null_switch); 601 602 declare null_switch bit (1) aligned; 603 604 star_names_ptr, star_entry_ptr = null (); 605 on cleanup begin; 606 if star_names_ptr ^= null () then free star_names; 607 if star_entry_ptr ^= null () then free star_entries; 608 end; 609 610 no_match = "1"b; /* Until proven otherwise */ 611 612 if null_switch then forum_name = "**.forum"; 613 call do_the_work (); 614 615 if null_switch then forum_name = "**.control"; 616 else call expand_pathname_$add_suffix (arg, "control", "", forum_name, status); 617 call do_the_work (); 618 619 if no_match & ^brief then 620 if null_switch then call ssu_$print_message (ssu_ptr, 0, "There were no meetings to clean up."); 621 else call ssu_$print_message (ssu_ptr, error_table_$nomatch, "^a", arg); 622 623 return; 624 625 do_the_work: 626 proc (); 627 628 declare name char (32); 629 630 call hcs_$star_ (link_dir, forum_name, star_LINKS_ONLY, status_area_ptr, star_entry_count, star_entry_ptr, 631 star_names_ptr, status); 632 if status ^= 0 then 633 if status = error_table_$nomatch then return; 634 else call ssu_$abort_line (ssu_ptr, status, "Finding matching names for ^a.", forum_name); 635 636 do idx = 1 to star_entry_count; 637 name = star_names (star_entries.nindex (idx)); 638 if null_switch then do; 639 call hcs_$status_minf (link_dir, name, 1, type, (0), status); 640 if type ^= Link & status = 0 then goto SKIP; 641 no_match = "0"b; /* We found one. */ 642 643 if check_switch then do; 644 call ioa_ ("The ^a meeting would be removed.", reverse (after (reverse (name), "."))); 645 goto SKIP; 646 end; 647 call ioa_ ("Removing the ^a meeting.", reverse (after (reverse (name), "."))); 648 end; 649 650 call hcs_$delentry_file (link_dir, name, status); 651 if status ^= 0 then 652 call ssu_$print_message (ssu_ptr, status, "Unable to remove the ^a meeting.", 653 reverse (after (reverse (name), "."))); 654 SKIP: end; 655 656 free star_names; 657 free star_entries; 658 return; 659 660 end do_the_work; 661 662 end remove_links; 663 664 update_links: 665 proc (forum_name); 666 667 declare forum_name char (32); 668 669 star_names_ptr, star_entry_ptr = null (); 670 on cleanup begin; 671 if star_names_ptr ^= null () then free star_names; 672 if star_entry_ptr ^= null () then free star_entries; 673 end; 674 675 call hcs_$star_ (link_dir, forum_name, star_LINKS_ONLY, status_area_ptr, star_entry_count, star_entry_ptr, 676 star_names_ptr, status); 677 if status ^= 0 then 678 if status = error_table_$nomatch then; 679 else call ssu_$abort_line (ssu_ptr, status, "Listing old meetings."); 680 681 do idx = 1 to star_entry_count; 682 call check_updated (star_names (star_entries.nindex (idx))); 683 end; 684 685 if star_names_ptr ^= null () then free star_names; 686 if star_entry_ptr ^= null () then free star_entries; 687 688 return; 689 690 691 check_updated: 692 proc (name); 693 694 declare name char (32), 695 name_idx fixed bin, 696 new_name char (32), 697 old_names bit (1) aligned, 698 target_dir char (168), 699 target_exists bit (1) aligned, 700 target_name char (32), 701 (uid1, uid2) bit (36) aligned; 702 703 declare status_link_names (sl.nnames) char (32) aligned 704 based (pointer (status_area_ptr, sl.names_relp)), 705 status_pathname char (sl.pathname_length) based 706 (pointer (status_area_ptr, sl.pathname_relp)); 707 708 sl.names_relp, sl.pathname_relp = ""b; 709 on cleanup begin; 710 if sl.pathname_relp ^= ""b then free status_pathname; 711 if sl.names_relp ^= ""b then free status_link_names; 712 end; 713 status_ptr = addr (sl); 714 715 call hcs_$status_ (link_dir, name, 0, status_ptr, status_area_ptr, status); 716 if status ^= 0 then goto SKIP; 717 718 call hcs_$get_link_target (link_dir, name, target_dir, target_name, status); 719 if status = 0 then target_exists = "1"b; 720 else if status = error_table_$noentry then target_exists = "0"b; 721 else goto SKIP; 722 723 if ltrim (before (reverse (target_name), ".")) = "murof" then do; 724 if target_exists then goto CHECK_SHORTEN; 725 goto SKIP; 726 end; 727 728 target_name = reverse (after (reverse (target_name), ".")) || ".forum"; 729 call hcs_$status_minf (target_dir, target_name, 0, (0), (0), status); 730 if status = 0 then do; /* meeting has been converted */ 731 path = pathname_ (target_dir, target_name); 732 call add_the_link (); 733 call hcs_$delentry_file (link_dir, name, (0)); 734 call ioa_ ("Updated the ^a meeting.", reverse (after (reverse (name), "."))); 735 no_match, old_names = "0"b; 736 end; 737 else if target_exists then do; 738 CHECK_SHORTEN: 739 call expand_pathname_ (target_dir, path, target_name, status); 740 if status ^= 0 then goto SKIP; 741 call hcs_$get_uid_file (path, target_name, uid1, status); 742 if status ^= 0 then goto SKIP; 743 744 call expand_pathname_ ((status_pathname), path, target_name, status); 745 if status ^= 0 then goto SKIP; 746 call expand_pathname_ (path, path, target_name, status); 747 if status ^= 0 then goto SKIP; 748 call hcs_$get_uid_file (path, target_name, uid2, status); 749 if status ^= 0 then goto SKIP; 750 751 if uid1 = uid2 then goto SKIP; 752 old_names = "1"b; 753 no_match = "0"b; 754 755 call hcs_$delentry_file (link_dir, name, status); 756 if status ^= 0 then goto SKIP; 757 758 path = pathname_ (target_dir, name); 759 call hcs_$append_link (link_dir, name, path, status); 760 if status ^= 0 then goto SKIP; 761 762 call ioa_ ("Shortened link path for ^a.", name); 763 target_name = name; 764 end; 765 else goto SKIP; 766 767 do name_idx = 1 to sl.nnames; 768 new_name = status_link_names (name_idx); 769 if ^old_names then new_name = reverse (after (reverse (new_name), ".")) || ".forum"; 770 RETRY: call hcs_$chname_file (link_dir, target_name, "", new_name, status); 771 if check_code (name_idx) then goto RETRY; 772 end; 773 774 SKIP: if sl.names_relp ^= ""b then free status_link_names; 775 if sl.pathname_relp ^= ""b then free status_pathname; 776 revert cleanup; 777 778 return; 779 end check_updated; 780 781 end update_links; 782 783 announcement_info: 784 entry (P_ssu_ptr, P_passport_info_ptr); 785 786 ssu_ptr = P_ssu_ptr; 787 passport_info_ptr = P_passport_info_ptr; 788 forum_idx = passport.forum_idx; 789 chairman, absolute_path, entry_name = "0"b; 790 791 forum_trans_list_ptr = null (); 792 on cleanup begin; 793 if forum_trans_list_ptr ^= null () then free forum_trans_list; 794 end; 795 796 call ssu_$return_arg (ssu_ptr, arg_count, active_function, ret_ptr, ret_len); 797 798 parse_flags_word = ONLY_ONE | DISALLOW_MTG | DISALLOW_REV | DISALLOW_INITIAL | DISALLOW_CMSG | 799 DISALLOW_BYCHAIN; 800 call forum_trans_specs_$parse_specs (passport_info_ptr, 1, parse_flags_word, announce_args, (0), (""), 801 (""), forum_trans_list_ptr); 802 803 call dissect_trans (forum_trans_list.trans_num (1), directory, forum_name, chair, ssu_$abort_line); 804 free forum_trans_list; 805 806 if active_function then do; 807 if ^(chairman | entry_name | absolute_path) then 808 USAGE: call ssu_$abort_line (ssu_ptr, 0, "Usage: [ai -control_arg]"); 809 810 if (chairman & entry_name) | (chairman & absolute_path) | (absolute_path & entry_name) then 811 goto USAGE; 812 813 if chairman then ret_string = chair; 814 else if entry_name then ret_string = forum_name; 815 else ret_string = pathname_ (directory, forum_name); 816 end; 817 else do; 818 if ^(chairman | entry_name | absolute_path) then 819 chairman, entry_name, absolute_path = "1"b; 820 if absolute_path then call ioa_ ("The meeting path is ^a.", pathname_ (directory, forum_name)); 821 else if entry_name then call ioa_ ("The name of the meeting is ^a.", forum_name); 822 if chairman then call ioa_ ("The chairman is ^a.", chair); 823 end; 824 825 return; 826 827 announce_args: 828 procedure (P_arg_idx); 829 declare P_arg_idx fixed bin parameter; 830 831 call ssu_$arg_ptr (ssu_ptr, P_arg_idx, arg_ptr, arg_len); 832 if arg = "-absolute_pathname" | arg = "-absp" then absolute_path = "1"b; 833 else if arg = "-chairman" | arg = "-cm" then chairman = "1"b; 834 else if arg = "-entry_name" | arg = "-etnm" then entry_name = "1"b; 835 else call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 836 837 return; 838 end announce_args; 839 840 end forum_add_meeting; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/27/92 1034.4 forum_add_meeting.pl1 >spec>install>MR12.5-1014>forum_add_meeting.pl1 123 1 11/22/82 1055.7 status_structures.incl.pl1 >ldd>incl>status_structures.incl.pl1 125 2 06/10/82 1145.5 star_structures.incl.pl1 >ldd>incl>star_structures.incl.pl1 127 3 08/16/86 1638.0 forum_passport.incl.pl1 >ldd>incl>forum_passport.incl.pl1 129 4 04/27/92 1033.8 forum_trans_list.incl.pl1 >spec>install>MR12.5-1014>forum_trans_list.incl.pl1 131 5 10/31/84 1215.4 forum_user_trans.incl.pl1 >ldd>incl>forum_user_trans.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. ANY 000425 automatic bit(36) initial dcl 4-53 set ref 4-53* CALL_ON_BAD_ARGS constant bit(18) initial dcl 4-54 ref 169 DEFAULT_TO_NONE constant bit(18) initial dcl 4-54 ref 169 DISALLOW_BYCHAIN constant bit(18) initial dcl 4-54 ref 798 DISALLOW_CMSG constant bit(18) initial dcl 4-54 ref 169 798 DISALLOW_INITIAL constant bit(18) initial dcl 4-54 ref 798 DISALLOW_MTG constant bit(18) initial dcl 4-54 ref 169 798 DISALLOW_REV constant bit(18) initial dcl 4-54 ref 798 Directory constant fixed bin(17,0) initial dcl 1-56 ref 371 395 507 Link constant fixed bin(17,0) initial dcl 1-56 ref 590 640 NL constant char(1) initial packed unaligned dcl 63 ref 423 428 ONLY_ONE constant bit(18) initial dcl 4-54 ref 798 P_arg_idx parameter fixed bin(17,0) dcl 328 in procedure "args" set ref 325 330* 334* 341 342* P_arg_idx parameter fixed bin(17,0) dcl 384 in procedure "get_link_dir_arg" set ref 380 386 387* 387 389* P_arg_idx parameter fixed bin(17,0) dcl 829 in procedure "announce_args" set ref 827 831* P_passport_info_ptr parameter pointer dcl 25 ref 140 144 239 243 783 787 P_ssu_ptr parameter pointer dcl 25 ref 140 143 239 242 783 786 absolute_path 000101 automatic bit(1) dcl 29 set ref 789* 807 810 810 818 818* 820 832* active_fnc_err_ 000034 constant entry external dcl 82 ref 308 active_function 000100 automatic bit(1) dcl 29 set ref 796* 806 addr builtin function dcl 66 ref 196 525 713 after builtin function dcl 66 ref 419 644 644 647 647 651 651 728 734 734 769 arg based char packed unaligned dcl 29 set ref 183 183 183 185 185 186 186 187 187 188 188 189 189 190 190 191* 202 202 202 206 206* 208 260 260 260 262 262 263 264 264 265 265 266 266 267* 279 279 279 283 283* 286* 287* 289* 292* 331 331 331 333 333 334 334 335 335 336 336 337 337 338 338 339* 390* 391* 394* 395* 583* 584* 588* 590* 594* 616* 621* 832 832 833 833 834 834 835* arg_count 000102 automatic fixed bin(17,0) dcl 29 set ref 155* 157 177 181 200 249* 251 258 277 342 386 796* arg_idx 000103 automatic fixed bin(17,0) dcl 29 set ref 168* 177 178 181* 182* 186* 200* 201* 202* 202* 258* 259* 265* 277* 278* 279* 279* 341* arg_len 000104 automatic fixed bin(21,0) dcl 29 set ref 182* 183 183 183 185 185 186 186 187 187 188 188 189 189 190 190 191 191 201* 202 202 202 206 206 206 206 208 259* 260 260 260 262 262 263 264 264 265 265 266 266 267 267 278* 279 279 279 283 283 283 286 286 287 287 289 289 292 292 330* 331 331 331 333 333 334 334 335 335 336 336 337 337 338 338 339 339 389* 390 390 391 391 394 394 395 395 583 583 584 584 588 588 590 590 594 594 616 616 621 621 831* 832 832 833 833 834 834 835 835 arg_ptr 000106 automatic pointer dcl 29 set ref 182* 183 183 183 185 185 186 186 187 187 188 188 189 189 190 190 191 201* 202 202 202 206 206 208 259* 260 260 260 262 262 263 264 264 265 265 266 266 267 278* 279 279 279 283 283 286 287 289 292 330* 331 331 331 333 333 334 334 335 335 336 336 337 337 338 338 339 389* 390 391 394 395 583 584 588 590 594 616 621 831* 832 832 833 833 834 834 835 before builtin function dcl 66 ref 723 brief 000110 automatic bit(1) dcl 29 set ref 162* 183* 188* 220 254* 260* 266* 331* 336* 497 508 514 619 chair 000111 automatic char(32) packed unaligned dcl 29 set ref 803* 813 822* chairman parameter char packed unaligned dcl 404 in procedure "dissect_trans" set ref 401 429* chairman 000121 automatic bit(1) dcl 29 in procedure "fam" set ref 789* 807 810 810 813 818 818* 822 833* chairman 000554 automatic char(32) packed unaligned dcl 437 in procedure "add_from_trans" set ref 442* check_star_name_$entry 000036 constant entry external dcl 82 ref 289 check_switch 000122 automatic bit(1) dcl 29 set ref 254* 262* 296 299 643 cleanup 000400 stack reference condition dcl 68 ref 135 149 234 463 528 605 670 709 776 792 cleanup_switch 000123 automatic bit(1) dcl 29 set ref 254* 263* 296 299 cmtg parameter bit(1) dcl 576 ref 573 580 cmtg_switch 000124 automatic bit(1) dcl 29 set ref 162* 185* 194 254* 264* 271 333* com_err_ 000040 constant entry external dcl 82 ref 310 create_switch parameter bit(1) dcl 351 ref 348 361 cu_$af_return_arg 000042 constant entry external dcl 82 ref 308 cu_$arg_list_ptr 000044 constant entry external dcl 82 ref 306 306 dir parameter char packed unaligned dcl 404 in procedure "dissect_trans" set ref 401 415* 424* dir 000502 automatic char(168) packed unaligned dcl 437 in procedure "add_from_trans" set ref 442* 443 445* directory 000125 automatic char(168) packed unaligned dcl 29 set ref 468* 469 469* 475* 481* 487* 532* 803* 815* 820* 820* entry_name 000177 automatic bit(1) dcl 29 set ref 789* 807 810 810 814 818 818* 821 834* error_proc parameter entry variable dcl 404 ref 401 414 error_table_$badopt 000010 external static fixed bin(35,0) dcl 70 set ref 191* 267* 339* 835* error_table_$inconsistent 000012 external static fixed bin(35,0) dcl 70 set ref 296* error_table_$namedup 000014 external static fixed bin(35,0) dcl 70 ref 484 564 error_table_$noarg 000016 external static fixed bin(35,0) dcl 70 set ref 386* error_table_$noentry 000020 external static fixed bin(35,0) dcl 70 ref 360 579 588 720 error_table_$nomatch 000022 external static fixed bin(35,0) dcl 70 set ref 621* 632 677 error_table_$segnamedup 000024 external static fixed bin(35,0) dcl 70 ref 562 expand_pathname_ 000046 constant entry external dcl 82 ref 390 738 744 746 expand_pathname_$add_suffix 000050 constant entry external dcl 82 ref 286 583 616 force 000200 automatic bit(1) dcl 29 set ref 162* 187* 189* 214* 335* 337* 466 forum_$close_forum 000052 constant entry external dcl 82 ref 463 479 forum_$get_forum_path 000054 constant entry external dcl 82 ref 469 forum_$get_forum_path_idx 000056 constant entry external dcl 82 ref 475 forum_$get_uid_file 000060 constant entry external dcl 82 ref 487 494 forum_dir 2 based char(168) level 2 packed packed unaligned dcl 3-14 ref 196 forum_et_$no_forum 000026 external static fixed bin(35,0) dcl 70 set ref 195* 272* forum_et_$no_such_forum 000030 external static fixed bin(35,0) dcl 70 ref 496 forum_et_$not_eligible 000032 external static fixed bin(35,0) dcl 70 ref 466 forum_idx 000100 automatic fixed bin(17,0) dcl 454 in procedure "add_the_link" set ref 460* 463* 465* 475* 479 479* forum_idx 1 based fixed bin(17,0) level 2 in structure "passport" dcl 3-14 in procedure "fam" set ref 166 195 272 788* 788 forum_name 54 based char(32) level 2 in structure "passport" packed packed unaligned dcl 3-14 in procedure "fam" set ref 196 273 forum_name 000201 automatic char(32) packed unaligned dcl 29 in procedure "fam" set ref 273* 286* 468* 469 469* 475* 481* 482* 487* 489* 494* 497* 498* 504* 505* 508* 514* 516* 532* 543* 543* 568* 578* 583* 585* 593* 612* 615* 616* 630* 634* 803* 814 815* 820* 820* 821* forum_name parameter char(32) packed unaligned dcl 667 in procedure "update_links" set ref 664 675* forum_name_len 64 based fixed bin(17,0) level 2 dcl 3-14 ref 196 forum_requests_$find_forum 000062 constant entry external dcl 82 ref 468 forum_requests_$open_forum 000064 constant entry external dcl 82 ref 465 forum_trans_list based structure level 1 dcl 4-18 set ref 150 176 793 804 forum_trans_list_ptr 000422 automatic pointer dcl 4-15 set ref 148* 150 150 171* 173 174 176 791* 793 793 800* 803 804 forum_trans_specs_$parse_specs 000066 constant entry external dcl 82 ref 171 800 forum_trans_util_$read_trans 000070 constant entry external dcl 82 ref 409 forum_user_trans based structure level 1 dcl 5-7 forum_user_trans_ptr 000426 automatic pointer dcl 5-5 set ref 409* 413 419 421 423 424 426 428 429 get_system_free_area_ 000072 constant entry external dcl 82 ref 159 255 get_wdir_ 000074 constant entry external dcl 82 ref 206 206 hcs_$append_link 000076 constant entry external dcl 82 ref 365 482 759 hcs_$chname_file 000100 constant entry external dcl 82 ref 543 548 770 hcs_$delentry_file 000102 constant entry external dcl 82 ref 498 516 593 650 733 755 hcs_$get_link_target 000104 constant entry external dcl 82 ref 718 hcs_$get_uid_file 000106 constant entry external dcl 82 ref 741 748 hcs_$star_ 000110 constant entry external dcl 82 ref 630 675 hcs_$status_ 000112 constant entry external dcl 82 ref 532 715 hcs_$status_minf 000114 constant entry external dcl 82 ref 358 393 504 578 585 639 729 home_dir 000100 automatic char(40) packed unaligned dcl 351 set ref 357* 358* 361* 364* 365* 365* 371* 374 idx 000211 automatic fixed bin(17,0) dcl 29 in procedure "fam" set ref 173* 174* 636* 637* 681* 682* idx 000462 automatic fixed bin(17,0) dcl 404 in procedure "dissect_trans" set ref 421* 422 423 424 426* 427 428 429 idx parameter fixed bin(17,0) dcl 560 in procedure "check_code" ref 557 565 568 idx 000101 automatic fixed bin(17,0) dcl 454 in procedure "add_the_link" set ref 547* 548 549* index builtin function dcl 66 ref 183 202 260 279 331 413 421 423 426 428 ioa_ 000116 constant entry external dcl 82 ref 644 647 734 762 820 821 822 jdx 000463 automatic fixed bin(17,0) dcl 404 set ref 423* 424 428* 429 link_dir 000212 automatic char(168) packed unaligned dcl 29 set ref 161* 216 256* 270 374* 390* 393* 397* 397* 461 482* 494* 498* 504* 516* 543* 548* 565* 568* 578* 585* 593* 630* 639* 650* 675* 715* 718* 733* 755* 759* 770* link_path 000102 automatic char(168) packed unaligned dcl 454 set ref 481* 482* 521* list 3 based structure array level 2 dcl 4-18 ltrim builtin function dcl 66 ref 723 max_size based fixed bin(17,0) level 2 dcl 4-18 ref 150 176 793 804 name 000100 automatic char(32) packed unaligned dcl 383 in procedure "get_link_dir_arg" set ref 390* 393* 397* name 000114 automatic char(32) packed unaligned dcl 628 in procedure "do_the_work" set ref 637* 639* 644 644 647 647 650* 651 651 name 000472 automatic char(32) packed unaligned dcl 437 in procedure "add_from_trans" set ref 442* 445* name parameter char(32) packed unaligned dcl 694 in procedure "check_updated" set ref 691 715* 718* 733* 734 734 755* 758* 759* 762* 763 name parameter char packed unaligned dcl 404 in procedure "dissect_trans" set ref 401 419* name_idx 000100 automatic fixed bin(17,0) dcl 694 set ref 767* 768 771* names_relp 0(18) 000361 automatic bit(18) level 3 in structure "sb" packed packed unaligned dcl 61 in procedure "fam" set ref 526* 529 names_relp 0(18) based bit(18) level 3 in structure "status_branch" packed packed unaligned dcl 1-8 in procedure "fam" ref 529 543 548 548 552 565 568 names_relp 0(18) 000373 automatic bit(18) level 2 in structure "sl" packed packed unaligned dcl 61 in procedure "fam" set ref 708* 711 711 768 774 774 nd_handler_ 000120 constant entry external dcl 82 ref 565 new_name 000101 automatic char(32) packed unaligned dcl 694 set ref 768* 769* 769 770* nindex 0(18) based fixed bin(18,0) array level 2 packed packed unsigned unaligned dcl 2-27 ref 637 682 nnames 0(02) based fixed bin(16,0) array level 2 in structure "star_entries" packed packed unsigned unaligned dcl 2-27 in procedure "fam" ref 606 656 671 685 nnames 0(02) based fixed bin(16,0) level 3 in structure "status_branch" packed packed unsigned unaligned dcl 1-8 in procedure "fam" ref 529 538 547 552 nnames 0(02) 000373 automatic fixed bin(16,0) level 2 in structure "sl" packed packed unsigned unaligned dcl 61 in procedure "fam" set ref 711 767 774 no_match 000264 automatic bit(1) dcl 29 set ref 163* 215* 220 222 459* 610* 619 641* 735* 753* no_suffix_name based char packed unaligned dcl 3-46 ref 196 null builtin function dcl 66 ref 148 150 308 308 604 606 607 669 671 672 685 686 791 793 null_switch parameter bit(1) dcl 602 ref 599 612 615 619 638 old_names 000111 automatic bit(1) dcl 694 set ref 735* 752* 769 parse_flags_word 000424 automatic bit(36) dcl 4-30 set ref 169* 171* 798* 800* passport based structure level 1 dcl 3-14 passport_info_ptr 000420 automatic pointer dcl 3-12 set ref 144* 166 171* 195 196 196 196 243* 272 273 409* 787* 788 788 800* path 000265 automatic char(168) packed unaligned dcl 29 set ref 196* 206* 208* 445* 465* 468* 472* 477* 534* 539* 731* 738* 741* 744* 746* 746* 748* 758* 759* pathname_ 000122 constant entry external dcl 82 ref 206 397 445 481 731 758 815 820 820 pathname_length 3 000373 automatic fixed bin(17,0) level 2 packed packed unaligned dcl 61 set ref 710 710 744 775 775 pathname_relp 3(18) 000373 automatic bit(18) level 2 packed packed unaligned dcl 61 set ref 708* 710 710 744 775 775 person 000112 automatic char(22) packed unaligned dcl 351 set ref 356* 357 pointer builtin function dcl 66 ref 529 543 548 548 552 565 568 710 711 744 768 774 775 project 000120 automatic char(9) packed unaligned dcl 351 set ref 356* 357 ret_len 000337 automatic fixed bin(21,0) dcl 29 set ref 796* 813 814 815 ret_ptr 000340 automatic pointer dcl 29 set ref 796* 813 814 815 ret_string based varying char dcl 29 set ref 813* 814* 815* reverse builtin function dcl 66 ref 419 419 644 644 644 644 647 647 647 647 651 651 651 651 723 728 728 734 734 734 734 769 769 rtrim builtin function dcl 66 ref 196 357 374 sb 000361 automatic structure level 1 dcl 61 set ref 525 search builtin function dcl 66 ref 206 283 short 000361 automatic structure level 2 in structure "sb" dcl 61 in procedure "fam" short based structure level 2 in structure "status_branch" dcl 1-8 in procedure "fam" size 1 based fixed bin(17,0) level 2 dcl 4-18 ref 173 sl 000373 automatic structure level 1 dcl 61 set ref 713 ssu_$abort_line 000124 constant entry external dcl 82 ref 157 191 195 222 251 267 272 283 287 292 296 339 361 366 369 371 386 391 394 395 410 477 499 505 517 580 584 588 590 594 634 679 803 803 807 835 ssu_$arg_count 000126 constant entry external dcl 82 ref 155 249 ssu_$arg_ptr 000130 constant entry external dcl 82 ref 182 201 259 278 330 389 831 ssu_$destroy_invocation 000132 constant entry external dcl 82 ref 135 224 234 ssu_$get_subsystem_and_request_name 000134 constant entry external dcl 82 ref 146 245 ssu_$print_message 000136 constant entry external dcl 82 ref 220 364 442 442 472 489 497 508 514 521 534 539 568 619 621 651 ssu_$return_arg 000140 constant entry external dcl 82 ref 796 ssu_$standalone_invocation 000142 constant entry external dcl 82 ref 306 ssu_ptr 000342 automatic pointer dcl 29 set ref 135* 143* 146* 155* 157* 182* 191* 195* 201* 220* 222* 224* 234* 242* 245* 249* 251* 259* 267* 272* 278* 283* 287* 292* 296* 306* 330* 339* 361* 364* 366* 369* 371* 386* 389* 391* 394* 395* 410* 414* 472* 477* 489* 497* 499* 505* 508* 514* 517* 521* 534* 539* 568* 580* 584* 588* 590* 594* 619* 621* 634* 651* 679* 786* 796* 807* 831* 835* star_LINKS_ONLY 000075 constant fixed bin(2,0) initial dcl 2-109 set ref 630* 675* star_entries based structure array level 1 dcl 2-27 ref 607 657 672 686 star_entry_count 000412 automatic fixed bin(17,0) dcl 2-14 set ref 606 607 630* 636 656 657 671 672 675* 681 685 686 star_entry_ptr 000414 automatic pointer dcl 2-15 set ref 604* 606 607 607 630* 637 656 657 669* 671 672 672 675* 682 685 686 686 star_names based char(32) array packed unaligned dcl 2-37 set ref 606 637 656 671 682* 685 star_names_ptr 000416 automatic pointer dcl 2-19 set ref 604* 606 606 630* 637 656 669* 671 671 675* 682 685 685 start 000344 automatic fixed bin(17,0) dcl 29 set ref 164* 177* 178* 181 200 status 000345 automatic fixed bin(35,0) dcl 29 set ref 286* 287 287* 289* 290 291 291 292* 306* 307 308* 310* 358* 360 365* 366 366* 369 369* 390* 391 391* 393* 394 394* 409* 410 410* 465* 466 466 469* 472* 475* 477 477* 482* 484 484 487* 488 494* 495 496 498* 499 499* 504* 505 505* 516* 517 517* 521* 532* 533 534* 543* 548* 562 562 564 565* 566 568* 578* 579 583* 584 584* 585* 588 593* 594 594* 616* 630* 632 632 634* 639* 640 650* 651 651* 675* 677 677 679* 715* 716 718* 719 720 729* 730 738* 740 741* 742 744* 745 746* 747 748* 749 755* 756 759* 760 770* status_area_ptr 000406 automatic pointer dcl 1-47 set ref 159* 255* 529 532* 543 548 548 552 565 568 630* 675* 710 711 715* 744 768 774 775 status_branch based structure level 1 dcl 1-8 status_entry_names based char(32) array dcl 1-47 set ref 529 543 548 548 552 565 568* status_link based structure level 1 dcl 1-38 status_link_names based char(32) array dcl 703 ref 711 768 774 status_pathname based char packed unaligned dcl 703 ref 710 744 775 status_ptr 000410 automatic pointer dcl 1-47 set ref 525* 529 529 532* 538 543 547 548 548 552 552 565 568 713* 715* subject 25 based char level 2 packed packed unaligned dcl 5-7 ref 413 419 subject_length 22 based fixed bin(21,0) level 2 dcl 5-7 ref 413 419 421 423 424 426 428 429 substr builtin function dcl 66 ref 423 424 428 429 subsystem 000346 automatic bit(1) dcl 29 set ref 133* 145* 157* 166 185 224 231* 244* 251 264 sum builtin function dcl 66 ref 606 656 671 685 target_dir 000112 automatic char(168) packed unaligned dcl 694 set ref 718* 729* 731* 738* 758* target_exists 000164 automatic bit(1) dcl 694 set ref 719* 720* 724 737 target_name 000165 automatic char(32) packed unaligned dcl 694 set ref 718* 723 728* 728 729* 731* 738* 741* 744* 746* 748* 763* 770* text based char level 2 packed packed unaligned dcl 5-7 ref 421 423 424 426 428 429 text_length 23 based fixed bin(21,0) level 2 dcl 5-7 ref 421 423 424 426 428 429 trans_idx parameter fixed bin(17,0) dcl 404 in procedure "dissect_trans" set ref 401 409* 410* 414* trans_idx parameter fixed bin(17,0) dcl 437 in procedure "add_from_trans" set ref 434 442* trans_num 3 based fixed bin(17,0) array level 3 dcl 4-18 set ref 174* 803* type 000347 automatic fixed bin(2,0) dcl 29 set ref 358* 371 393* 395 504* 507 578* 585* 590 639* 640 uid1 000175 automatic bit(36) dcl 694 in procedure "check_updated" set ref 741* 751 uid1 000154 automatic bit(36) dcl 454 in procedure "add_the_link" set ref 487* 502 uid2 000155 automatic bit(36) dcl 454 in procedure "add_the_link" set ref 486* 489 494* 502 uid2 000176 automatic bit(36) dcl 694 in procedure "check_updated" set ref 748* 751 update 000350 automatic bit(1) dcl 29 set ref 162* 190* 213 254* 338* user_info_$whoami 000144 constant entry external dcl 82 ref 356 whoami 000351 automatic char(32) packed unaligned dcl 29 set ref 134* 146* 232* 245* 306* 308* 310* 565* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALLOW_DELETED internal static bit(18) initial dcl 4-54 ALLOW_IHE internal static bit(18) initial dcl 4-54 CREATE_UNPROC internal static bit(18) initial dcl 4-54 DEFAULT_TO_ALL internal static bit(18) initial dcl 4-54 DEFAULT_TO_UNPROC internal static bit(18) initial dcl 4-54 DISALLOW_IDL internal static bit(18) initial dcl 4-54 DISALLOW_UNPROC internal static bit(18) initial dcl 4-54 DONT_READ internal static bit(18) initial dcl 4-54 INCLUDE_DELETED internal static fixed bin(17,0) initial dcl 5-24 MUST_BE_DELETED internal static bit(18) initial dcl 4-54 NON_NULL internal static bit(18) initial dcl 4-54 ONLY_DELETED internal static fixed bin(17,0) initial dcl 5-24 ONLY_UNDELETED internal static fixed bin(17,0) initial dcl 5-24 Segment internal static fixed bin(17,0) initial dcl 1-56 TFMT_more internal static fixed bin(17,0) initial dcl 3-54 TFMT_none internal static fixed bin(17,0) initial dcl 3-54 TFMT_number internal static fixed bin(17,0) initial dcl 3-54 TFMT_reference internal static fixed bin(17,0) initial dcl 3-54 alloc_subject_length automatic fixed bin(21,0) dcl 5-4 alloc_text_length automatic fixed bin(21,0) dcl 5-3 alloc_trans_list_size automatic fixed bin(17,0) dcl 4-16 error_table_$no_s_permission external static fixed bin(35,0) dcl 70 forum_area based area(1024) dcl 3-46 forum_data_$central_directory external static char(168) packed unaligned dcl 3-49 forum_data_$info_directory external static char(168) packed unaligned dcl 3-49 forum_data_$version_string external static char(8) packed unaligned dcl 3-49 message_type internal static fixed bin(17,0) initial dcl 5-22 parse_flags based structure level 1 dcl 4-32 passport_version_2 internal static fixed bin(17,0) initial dcl 3-44 star_ALL_ENTRIES internal static fixed bin(2,0) initial dcl 2-111 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 2-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 2-110 star_DIRECTORY internal static fixed bin(2,0) initial unsigned dcl 2-121 star_LINK internal static fixed bin(2,0) initial unsigned dcl 2-119 star_LINKS_ONLY_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 2-112 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 2-120 star_branch_count automatic fixed bin(17,0) dcl 2-13 star_dir_list_branch based structure array level 1 dcl 2-59 star_link_count automatic fixed bin(17,0) dcl 2-17 star_link_pathname based char packed unaligned dcl 2-102 star_links based structure array level 1 dcl 2-76 star_linkx automatic fixed bin(17,0) dcl 2-18 star_list_branch based structure array level 1 dcl 2-41 star_list_branch_ptr automatic pointer dcl 2-16 star_list_names based char(32) array packed unaligned dcl 2-92 star_list_names_ptr automatic pointer dcl 2-20 star_select_sw automatic fixed bin(3,0) dcl 2-21 status_pathname based char dcl 1-47 user_trans_type internal static fixed bin(17,0) initial dcl 5-21 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_COMMON 001223 constant label dcl 155 set ref 138 153 AGAIN 007411 constant label dcl 548 ref 549 BAD 005472 constant label dcl 414 ref 422 427 BAD_DUP 006435 constant label dcl 489 ref 496 502 CHECK_SHORTEN 012240 constant label dcl 738 ref 724 EGRESS 002217 constant label dcl 224 ref 301 311 321 REMOVE_COMMON 002342 constant label dcl 249 ref 237 247 RETRY 012703 constant label dcl 770 ref 771 RETRY_ADD_LINK 006352 constant label dcl 482 ref 500 518 SET_PRIMARY 007322 constant label dcl 543 ref 545 SKIP 011200 constant label dcl 654 in procedure "do_the_work" ref 640 645 SKIP 012754 constant label dcl 774 in procedure "check_updated" ref 716 720 725 737 740 742 745 747 749 751 756 760 USAGE 003520 constant label dcl 807 ref 810 add_from_trans 005676 constant entry internal dcl 434 ref 174 add_meeting 001135 constant entry external dcl 140 add_the_link 005770 constant entry internal dcl 451 ref 197 209 446 732 announce_args 013020 constant entry internal dcl 827 ref 800 800 announcement_info 003272 constant entry external dcl 783 args 004153 constant entry internal dcl 325 ref 171 171 check_code 007513 constant entry internal dcl 557 ref 545 549 771 check_updated 011532 constant entry internal dcl 691 ref 682 create_subsystem 003770 constant entry internal dcl 303 ref 136 235 dissect_trans 005360 constant entry internal dcl 401 ref 442 803 do_the_work 010535 constant entry internal dcl 625 ref 613 617 fam 001061 constant entry external dcl 18 forum_add_meeting 001071 constant entry external dcl 18 forum_remove_meeting 002243 constant entry external dcl 227 frm 002233 constant entry external dcl 227 get_link_dir 004377 constant entry internal dcl 348 ref 216 270 461 get_link_dir_arg 005027 constant entry internal dcl 380 ref 186 265 334 punt 004142 constant entry internal dcl 318 ref 306 306 remove_link 007654 constant entry internal dcl 573 ref 274 290 remove_links 010263 constant entry internal dcl 599 ref 291 299 remove_meeting 002305 constant entry external dcl 239 update_links 011240 constant entry internal dcl 664 ref 218 219 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 14352 14520 13351 14362 Length 15244 13351 146 510 1000 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fam 702 external procedure is an external procedure. on unit on line 135 68 on unit on unit on line 149 64 on unit on unit on line 234 68 on unit create_subsystem internal procedure shares stack frame of external procedure fam. punt 64 internal procedure is assigned to an entry variable. args 94 internal procedure is assigned to an entry variable. get_link_dir 128 internal procedure is called by several nonquick procedures. get_link_dir_arg 138 internal procedure is called by several nonquick procedures. dissect_trans internal procedure shares stack frame of external procedure fam. add_from_trans internal procedure shares stack frame of external procedure fam. add_the_link 228 internal procedure enables or reverts conditions. on unit on line 463 72 on unit on unit on line 528 66 on unit check_code 120 internal procedure is called by several nonquick procedures. remove_link internal procedure shares stack frame of external procedure fam. remove_links 184 internal procedure enables or reverts conditions. on unit on line 605 64 on unit do_the_work internal procedure shares stack frame of internal procedure remove_links. update_links 122 internal procedure enables or reverts conditions. on unit on line 670 64 on unit check_updated 200 internal procedure enables or reverts conditions. on unit on line 709 68 on unit on unit on line 792 64 on unit announce_args 94 internal procedure is assigned to an entry variable. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME add_the_link 000100 forum_idx add_the_link 000101 idx add_the_link 000102 link_path add_the_link 000154 uid1 add_the_link 000155 uid2 add_the_link check_updated 000100 name_idx check_updated 000101 new_name check_updated 000111 old_names check_updated 000112 target_dir check_updated 000164 target_exists check_updated 000165 target_name check_updated 000175 uid1 check_updated 000176 uid2 check_updated fam 000100 active_function fam 000101 absolute_path fam 000102 arg_count fam 000103 arg_idx fam 000104 arg_len fam 000106 arg_ptr fam 000110 brief fam 000111 chair fam 000121 chairman fam 000122 check_switch fam 000123 cleanup_switch fam 000124 cmtg_switch fam 000125 directory fam 000177 entry_name fam 000200 force fam 000201 forum_name fam 000211 idx fam 000212 link_dir fam 000264 no_match fam 000265 path fam 000337 ret_len fam 000340 ret_ptr fam 000342 ssu_ptr fam 000344 start fam 000345 status fam 000346 subsystem fam 000347 type fam 000350 update fam 000351 whoami fam 000361 sb fam 000373 sl fam 000406 status_area_ptr fam 000410 status_ptr fam 000412 star_entry_count fam 000414 star_entry_ptr fam 000416 star_names_ptr fam 000420 passport_info_ptr fam 000422 forum_trans_list_ptr fam 000424 parse_flags_word fam 000425 ANY fam 000426 forum_user_trans_ptr fam 000462 idx dissect_trans 000463 jdx dissect_trans 000472 name add_from_trans 000502 dir add_from_trans 000554 chairman add_from_trans get_link_dir 000100 home_dir get_link_dir 000112 person get_link_dir 000120 project get_link_dir get_link_dir_arg 000100 name get_link_dir_arg remove_links 000114 name do_the_work THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars call_ent_var_desc call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 mpfx2 enable_op shorten_stack ext_entry int_entry reverse_cs set_chars_eis index_chars_eis op_freen_ index_after_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. active_fnc_err_ check_star_name_$entry com_err_ cu_$af_return_arg cu_$arg_list_ptr expand_pathname_ expand_pathname_$add_suffix forum_$close_forum forum_$get_forum_path forum_$get_forum_path_idx forum_$get_uid_file forum_requests_$find_forum forum_requests_$open_forum forum_trans_specs_$parse_specs forum_trans_util_$read_trans get_system_free_area_ get_wdir_ hcs_$append_link hcs_$chname_file hcs_$delentry_file hcs_$get_link_target hcs_$get_uid_file hcs_$star_ hcs_$status_ hcs_$status_minf ioa_ nd_handler_ pathname_ ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$destroy_invocation ssu_$get_subsystem_and_request_name ssu_$print_message ssu_$return_arg ssu_$standalone_invocation user_info_$whoami THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$inconsistent error_table_$namedup error_table_$noarg error_table_$noentry error_table_$nomatch error_table_$segnamedup forum_et_$no_forum forum_et_$no_such_forum forum_et_$not_eligible LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 4 53 001055 18 001060 133 001077 134 001100 135 001103 136 001127 138 001130 140 001131 143 001143 144 001147 145 001152 146 001154 148 001171 149 001173 150 001207 151 001221 153 001222 155 001223 157 001234 159 001267 161 001276 162 001301 163 001305 164 001307 166 001311 168 001317 169 001320 171 001325 173 001375 174 001405 175 001414 176 001416 177 001423 178 001431 181 001432 182 001441 183 001456 185 001505 186 001524 187 001544 188 001557 189 001571 190 001603 191 001616 192 001647 194 001651 195 001653 196 001673 197 001734 200 001741 201 001751 202 001766 204 002013 206 002014 208 002063 209 002066 211 002072 213 002074 214 002076 215 002100 216 002101 218 002114 219 002125 220 002136 221 002167 222 002170 224 002217 225 002231 227 002232 231 002251 232 002252 234 002255 235 002301 237 002302 239 002303 242 002313 243 002317 244 002322 245 002324 247 002341 249 002342 251 002353 254 002412 255 002417 256 002426 258 002431 259 002441 260 002456 262 002505 263 002520 264 002527 265 002546 266 002566 267 002600 268 002631 270 002633 271 002647 272 002651 273 002671 274 002675 277 002701 278 002711 279 002726 281 002753 283 002754 286 003022 287 003060 289 003120 290 003140 291 003147 292 003164 294 003216 296 003220 299 003253 301 003267 783 003270 786 003300 787 003304 788 003307 789 003311 791 003314 792 003316 793 003332 794 003344 796 003345 798 003364 800 003373 803 003443 804 003502 806 003507 807 003512 810 003545 813 003561 814 003575 815 003611 816 003642 818 003643 820 003655 821 003723 822 003745 825 003767 303 003770 306 003771 307 004041 308 004043 310 004113 311 004137 314 004140 318 004141 321 004147 325 004152 330 004160 331 004176 333 004226 334 004241 335 004262 336 004275 337 004307 338 004321 339 004334 341 004367 342 004372 345 004375 348 004376 356 004404 357 004424 358 004473 360 004537 361 004544 364 004600 365 004635 366 004664 368 004713 369 004714 371 004742 374 004775 376 005024 380 005026 386 005034 387 005067 389 005071 390 005107 391 005140 393 005175 394 005236 395 005273 397 005336 398 005357 401 005360 409 005403 410 005424 413 005462 414 005472 415 005523 416 005531 419 005532 421 005563 422 005577 423 005601 424 005622 426 005631 427 005643 428 005645 429 005666 431 005675 434 005676 442 005700 443 005735 445 005742 446 005762 448 005766 451 005767 459 005775 460 005777 461 006000 463 006015 465 006044 466 006075 468 006105 469 006136 470 006176 472 006177 473 006230 474 006231 475 006232 477 006257 479 006315 481 006331 482 006352 484 006377 486 006405 487 006406 488 006432 489 006435 491 006476 494 006477 495 006524 496 006527 497 006532 498 006564 499 006606 500 006635 502 006636 504 006641 505 006700 507 006733 508 006737 511 006772 514 006773 516 007026 517 007050 518 007077 521 007100 522 007127 525 007130 526 007132 528 007134 529 007150 530 007170 532 007171 533 007227 534 007232 535 007262 538 007263 539 007270 540 007321 543 007322 545 007361 547 007377 548 007411 549 007457 550 007473 552 007475 554 007511 557 007512 562 007520 564 007526 565 007530 566 007567 567 007576 568 007577 570 007651 573 007654 578 007656 579 007715 580 007721 583 007751 584 010007 585 010047 588 010106 590 010146 593 010203 594 010224 596 010261 599 010262 604 010270 605 010274 606 010310 607 010346 608 010356 610 010357 612 010362 613 010371 615 010372 616 010403 617 010442 619 010443 621 010502 623 010534 625 010535 630 010536 632 010602 634 010611 636 010640 637 010652 638 010663 639 010667 640 010727 641 010734 643 010735 644 010737 645 011011 647 011013 648 011070 650 011071 651 011113 654 011200 656 011204 657 011233 658 011236 664 011237 669 011245 670 011251 671 011265 672 011324 673 011334 675 011335 677 011402 679 011411 681 011437 682 011450 683 011463 685 011466 686 011521 688 011530 691 011531 708 011537 709 011544 710 011560 711 011602 712 011623 713 011624 715 011632 716 011670 718 011674 719 011724 720 011733 723 011737 724 011774 725 011777 728 012000 729 012033 730 012074 731 012100 732 012120 733 012125 734 012152 735 012230 736 012235 737 012236 738 012240 740 012264 741 012270 742 012315 744 012321 745 012365 746 012372 747 012415 748 012421 749 012446 751 012452 752 012455 753 012457 755 012460 756 012502 758 012506 759 012527 760 012556 762 012562 763 012603 767 012610 768 012623 769 012636 770 012703 771 012736 772 012752 774 012754 775 012774 776 013015 778 013016 827 013017 831 013025 832 013043 833 013061 834 013074 835 013107 837 013141 ----------------------------------------------------------- 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