COMPILATION LISTING OF SEGMENT forum_salvager_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 09/09/86 0901.9 mst Tue Options: optimize map 1 /****^ ************************************************************** 2* * * 3* * Copyright, (C) Massachusetts Institute of Technology, 1983 * 4* * * 5* ************************************************************** */ 6 7 8 /****^ HISTORY COMMENTS: 9* 1) change(86-07-29,Pattin), approve(86-07-29,MCR7354), 10* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 11* Fixed to set seen switches when expunging transactions. 12* Copy chairman message across. Detect more bugs in seen maps. 13* Make sure all proceedings segments are initiated. 14* 2) change(86-09-07,Pattin), approve(86-09-07,MCR7354), 15* audit(86-09-07,Margolin), install(86-09-09,MR12.0-1151): 16* Correct copy_back to use length of new attendee segment instead of length 17* of old attendee segment when copying from temp seg and truncating attendee 18* segment. 19* END HISTORY COMMENTS */ 20 21 22 forum_salvager_: 23 proc (P_attendee_seg_ptr, P_transaction_seg_ptr); 24 25 /* Version 2 forum - 26* Salvage a meeting and/or expunge deleted transactions and attendees 27* Jay Pattin 1/19/83 28* 29* Added entry to copy a meeting 3/18/83 Jay Pattin */ 30 /* Modified 09/12/83 by Jeffrey I. Schiller. Bugfixes */ 31 /* Modified 11/20/83 by Jeffrey I. Schiller. Allow expunge and salvage 32* of a forum with multiple proceedings segments. Also fixes for large 33* transactions. Deletion of left over proceedings components after 34* expunge. */ 35 /* Modified 03/09/84 by Jeffrey I. Schiller. arrange for forum_$copy to 36* expunge deleted transactions and participants if the person doing 37* the copy is not the chairman. (Security problem). */ 38 /* Audit changes, J. Spencer Love 10/05/84 */ 39 40 declare (P_attendees_deleted fixed bin, 41 P_attendee_seg_ptr ptr, 42 P_copy_options_ptr ptr, 43 P_forum_idx fixed bin, 44 P_status fixed bin (35), 45 P_switches_word bit (36) aligned, 46 P_transactions_deleted fixed bin, 47 P_transaction_seg_ptr ptr) 48 parameter; 49 50 declare attendee_count fixed bin, 51 attendee_seg_damaged bit (1) aligned, 52 created bit (1) aligned, 53 deleted_attendees fixed bin, 54 deleted_count fixed bin, 55 deleted_transactions fixed bin, 56 directory char (168), 57 egress label variable, 58 expunged_map bit (transaction_seg.transaction_count) based (expunged_map_ptr), 59 expunged_map_ptr ptr, 60 idx fixed bin, 61 inner_ring fixed bin (3), 62 last_attendee_ptr ptr, 63 me char (16) static options (constant) init ("forum_salvager_"), 64 name char (32), 65 new_aseg_ptr ptr, 66 new_dir char (168), 67 new_name char (32), 68 new_tseg_ptr ptr, 69 salvage_entry bit (1) aligned, 70 status fixed bin (35), 71 system_area area based (get_system_free_area_ ()), 72 temp_map bit (temp_map_len) based (temp_map_ptr), 73 temp_map_len fixed bin, 74 temp_map_ptr ptr, 75 user_ring fixed bin (3), 76 xacl bit (36) aligned; 77 78 declare 1 switches aligned, 79 2 transactions bit (1) unaligned, 80 2 users bit (1) unaligned; 81 82 declare 1 auto_area_info aligned like area_info, 83 1 od aligned like open_data, /* for new copy */ 84 1 sod aligned like open_data, /* for original when salvaging or copying */ 85 1 new_aseg aligned like attendee_seg based (new_aseg_ptr), 86 1 new_tseg aligned like transaction_seg based (new_tseg_ptr); 87 88 declare USERID_CHARS char (100) static options (constant) 89 init (" !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); 90 91 declare (addr, addrel, divide, fixed, hbound, index, null, ptr, rel, reverse, size, string, substr, unspec, 92 verify) builtin, 93 (any_other, cleanup) condition; 94 95 declare (error_table_$incorrect_access, 96 error_table_$unsupported_operation, 97 forum_et_$chairman_only, 98 forum_et_$invalid_trans_idx, 99 forum_et_$trans_reaped, 100 forum_et_$unexpected_fault, 101 sys_info$max_seg_size) fixed bin (35) external; 102 103 declare define_area_ entry (ptr, fixed bin (35)), 104 forum_logger_ entry options (variable), 105 forum_logger_$any_other entry options (variable), 106 forum_open_mgr_$lookup_forum_idx 107 entry (fixed bin, ptr, bit (36) aligned, fixed bin (35)), 108 forum_seg_mgr_$initiate entry (char (*), char (*), bit (1) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)), 109 forum_seg_mgr_$initiate_seg entry (ptr, fixed bin, fixed bin (35)), 110 forum_seg_mgr_$just_create entry (char (*), char (*), ptr, ptr, fixed bin (35)), 111 forum_seg_mgr_$terminate entry (ptr, ptr), 112 forum_seg_mgr_$terminate_all entry (ptr), 113 forum_seg_mgr_$unlock entry (ptr), 114 forum_space_mgr_$allocate_bit_map 115 entry (ptr, ptr, fixed bin, ptr, fixed bin (35)), 116 forum_space_mgr_$find_transaction 117 entry (ptr, fixed bin, ptr, fixed bin (35)), 118 forum_space_mgr_$get_attendee_slot 119 entry (ptr, char (*), ptr, fixed bin (35)), 120 forum_trans_mgr_$load_trans entry (ptr, char (*), fixed bin, char (*), bit (1) aligned, fixed bin, fixed bin (35)), 121 get_lock_id_ entry returns (bit (36) aligned), 122 get_ring_ entry returns (fixed bin (3)), 123 get_system_free_area_ entry returns (ptr), 124 get_temp_segment_ entry (char (*), ptr, fixed bin (35)), 125 hcs_$delentry_file entry (char (*), char (*), fixed bin (35)), 126 hcs_$delentry_seg entry (ptr, fixed bin(35)), 127 hcs_$del_dir_tree entry (char (*), char (*), fixed bin (35)), 128 hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)), 129 hcs_$level_get entry (fixed bin (3)), 130 hcs_$level_set entry (fixed bin (3)), 131 hcs_$status_long entry (char (*), char (*), fixed bin (1), ptr, ptr, fixed bin (35)), 132 hcs_$truncate_seg entry (ptr, fixed bin (19), fixed bin (35)), 133 pathname_ entry (char (*), char (*)) returns (char (168)), 134 release_temp_segment_ entry (char (*), ptr, fixed bin (35)), 135 release_temp_segments_ entry (char (*), (*) ptr, fixed bin (35)), 136 sort_items_indirect_$char entry (ptr, ptr, fixed bin (24)); 137 1 1 /* BEGIN INCLUDE FILE: forum_structures.incl.pl1 */ 1 2 1 3 /* This include file contains the declarations for all of the structures 1 4* used in a version 2 Forum meeting. 1 5* 1 6* Jay Pattin 12/28/82 */ 1 7 1 8 declare attendee_seg_ptr ptr, 1 9 transaction_seg_ptr ptr, 1 10 attendee_ptr ptr, 1 11 transaction_ptr ptr, 1 12 transaction_block_ptr ptr, 1 13 bit_map_ptr ptr; 1 14 1 15 /* This structure is for the segment "Attendees", it contains the participant 1 16* records and the bit-maps of transactions that have been seen. */ 1 17 1 18 declare 1 attendee_seg aligned based (attendee_seg_ptr), 1 19 2 header like attendee_seg_header, 1 20 2 attendee_area area; /* where attendee and bit map nodes go */ 1 21 1 22 declare 1 attendee_seg_header aligned based, 1 23 2 version char (8), 1 24 2 lock bit (36) aligned, 1 25 2 flags, 1 26 3 adjourned bit (1) unaligned, 1 27 3 am_init bit (1) unaligned, /* on if next value valid */ 1 28 3 am_print_acl_msg bit (1) unaligned, /* on if Sysadmin wants them printed */ 1 29 3 cm_init bit (1) unaligned, /* on if next vaue valid */ 1 30 3 cm_print_acl_msg bit (1) unaligned, /* on if chair wants messages printed */ 1 31 3 salvaging bit (1) unaligned, 1 32 3 mbz1 bit (30) unaligned, 1 33 2 attendee_count fixed bin, /* current number of attendees */ 1 34 2 chairman, 1 35 3 person_id char (22), 1 36 3 project_id char (9), 1 37 2 chairman_message char (256), 1 38 2 first_attendee_offset bit (18), 1 39 2 last_attendee_offset bit (18), 1 40 2 mbz2 (16) fixed bin (35); 1 41 1 42 declare 1 attendee aligned based (attendee_ptr), 1 43 2 version fixed bin, 1 44 2 attendee_uid fixed bin, /* Unique for this meeting only */ 1 45 2 person_id char (22), 1 46 2 project_id char (9), /* of project on when last opened */ 1 47 2 flags, 1 48 3 attending bit (1) unaligned, 1 49 3 participating bit (1) unaligned, 1 50 3 deleted bit (1) unaligned, /* by chairman - dlpt request */ 1 51 3 notify bit (1) unaligned, 1 52 3 acl_change_pending bit (1) unaligned, 1 53 3 message_change_pending bit (1) unaligned, 1 54 3 mbz1 bit (30) unaligned, 1 55 2 xacl bit (36) aligned, /* extended acl - see modes below */ 1 56 2 lock_id bit (36) aligned, 1 57 2 process_id bit (36) aligned, 1 58 2 event_channel fixed bin (71), /* For "A new transaction ..." messages */ 1 59 2 last_time_attended fixed bin (71), 1 60 2 bit_map_first_trans fixed bin, 1 61 2 bit_map_offset bit (18), 1 62 2 bit_map_length fixed bin, 1 63 2 left_son_offset bit (18), /* attendees are in a tree */ 1 64 2 right_son_offset bit (18), 1 65 2 next_offset bit (18); /* For sequential searching */ 1 66 1 67 declare 1 bit_map aligned based (bit_map_ptr), 1 68 2 attendee_uid fixed bin, /* For checking */ 1 69 2 length fixed bin, 1 70 2 map bit (alloc_bit_map_length refer (bit_map.length)); 1 71 1 72 declare alloc_bit_map_length fixed bin; 1 73 1 74 /* This structure is for the segment "Transactions" which contains all 1 75* information about transactions except the subject and text. */ 1 76 1 77 declare 1 transaction_seg aligned based (transaction_seg_ptr), 1 78 2 version char (8), 1 79 2 transaction_count fixed bin, 1 80 2 deleted_count fixed bin, 1 81 2 first_trans_offset bit (18), 1 82 2 last_trans_offset bit (18), 1 83 2 first_block_offset bit (18), 1 84 2 current_block_offset bit (18), /* location of block containing pointer to last trans */ 1 85 2 last_trans_in_block fixed bin, /* When we need to allocate new block */ 1 86 2 current_segno fixed bin, /* Where transactions are being allocated */ 1 87 2 next_trans_offset bit (18), /* offset within that seg */ 1 88 2 free_space_offset bit (18), /* first unused word in this seg */ 1 89 2 first_free_word fixed bin; /* only used to find initial value of previous */ 1 90 1 91 declare 1 transaction based (transaction_ptr), 1 92 2 version fixed bin, 1 93 2 trans_idx fixed bin, 1 94 2 author, 1 95 3 person_id char (22), 1 96 3 project_id char (9), 1 97 2 flags, 1 98 3 deleted bit (1) unaligned, 1 99 3 deleted_by_author bit (1) unaligned, /* As opposed to deleted by chairman */ 1 100 3 unfilled bit (1) unaligned, /* And it should stay that way */ 1 101 3 mbz1 bit (33) unaligned, 1 102 2 pref_offset bit (18), 1 103 2 nref_offset bit (18), 1 104 2 time fixed bin (71), 1 105 2 segno fixed bin, /* What proceeding segment this is in */ 1 106 2 subject_offset bit (18), 1 107 2 subject_length fixed bin (21), 1 108 2 text_offset bit (18), 1 109 2 text_length fixed bin (21), 1 110 2 next_offset bit (18), 1 111 2 prev_offset bit (18); 1 112 1 113 1 114 declare 1 transaction_block based (transaction_block_ptr), 1 115 2 first_trans_idx fixed bin, /* In this block */ 1 116 2 last_trans_idx fixed bin, 1 117 2 time fixed bin (71), /* of first trans in this block */ 1 118 2 prev_block_offset bit (18), 1 119 2 next_block_offset bit (18), 1 120 2 transactions (1014), 1 121 3 offset bit (18); /* -1 if expunged */ 1 122 1 123 declare (ATTENDEE_SEG_VERSION_1 init ("FMCTL_1"), 1 124 TRANS_SEG_VERSION_1 init ("FMTR_1")) 1 125 char (8) static options (constant); 1 126 1 127 declare (ATTENDEE_SEG_NAME init ("Attendees"), 1 128 TRANSACTION_SEG_NAME init ("Transactions"), 1 129 PROCEEDINGS_SEG_NAME init ("Proceedings.")) /* numeric suffix is added */ 1 130 char (32) static options (constant); 1 131 1 132 declare (ATTENDEE_VERSION_1, 1 133 TRANSACTION_VERSION_1) fixed bin static options (constant) init (-42); 1 134 1 135 declare EXPUNGED bit (18) static options (constant) init ("111111111111111111"b); 1 136 1 137 declare (RWC_XACL init ("111"b), 1 138 RW_XACL init ("110"b), 1 139 R_XACL init ("100"b)) 1 140 bit (3) static options (constant); 1 141 1 142 /* END INCLUDE FILE: forum_structures.incl.pl1 */ 138 139 2 1 /* BEGIN INCLUDE FILE: forum_open_data.incl.pl1 */ 2 2 2 3 declare open_data_ptr ptr; 2 4 2 5 declare 1 open_data aligned based (open_data_ptr), 2 6 2 next_open_data_ptr ptr, 2 7 2 prev_open_data_ptr ptr, 2 8 2 forum_name char (168), 2 9 2 forum_idx fixed bin, 2 10 2 forum_uid bit (36), /* UID of attendee seg */ 2 11 2 attendee_seg_ptr ptr, 2 12 2 transaction_seg_ptr ptr, 2 13 2 proceedings_ptrs (16) ptr, 2 14 2 attendee_ptr ptr, /* -> attendee slot for this user */ 2 15 2 bit_map_ptr ptr, /* -> bit_map for this user */ 2 16 2 open_count fixed bin, 2 17 2 invalid bit (1) aligned; 2 18 2 19 /* END INCLUDE FILE: forum_open_data.incl.pl1 */ 140 141 3 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 3 2 3 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 3 4 3 5 dcl area_infop ptr; 3 6 3 7 dcl 1 area_info aligned based (area_infop), 3 8 2 version fixed bin, /* version number for this structure is 1 */ 3 9 2 control aligned like area_control, /* control bits for the area */ 3 10 2 owner char (32) unal, /* creator of the area */ 3 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 3 12 2 size fixed bin (18), /* size of the area in words */ 3 13 2 version_of_area fixed bin, /* version of area (returned only) */ 3 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 3 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 3 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 3 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 3 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 3 19 3 20 dcl 1 area_control aligned based, 3 21 2 extend bit (1) unal, /* says area is extensible */ 3 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 3 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 3 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 3 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 3 26 2 system bit (1) unal, /* says area is managed by system */ 3 27 2 pad bit (30) unal; 3 28 3 29 /* END INCLUDE FILE area_info.incl.pl1 */ 142 143 4 1 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 4 2 4 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 4 4 4 5 /* This include file contains branch and link structures returned by 4 6* hcs_$status_ and hcs_$status_long. */ 4 7 4 8 dcl 1 status_branch aligned based (status_ptr), 4 9 2 short aligned, 4 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 4 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 4 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 4 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 4 14 3 dtu bit (36) unaligned, /* date/time last used */ 4 15 3 mode bit (5) unaligned, /* caller's effective access */ 4 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 4 17 3 pad1 bit (8) unaligned, 4 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 4 19 4 20 /* Limit of information returned by hcs_$status_ */ 4 21 4 22 2 long aligned, 4 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 4 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 4 25 3 lvid bit (36) unaligned, /* logical volume ID */ 4 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 4 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 4 28 3 pad2 bit (8) unaligned, 4 29 3 copy_switch bit (1) unaligned, /* copy switch */ 4 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 4 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 4 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 4 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 4 34 3 pad3 bit (5) unaligned, 4 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 4 36 3 uid bit (36) unaligned; /* unique ID */ 4 37 4 38 dcl 1 status_link aligned based (status_ptr), 4 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 4 40 2 nnames fixed bin (16) unaligned unsigned, 4 41 2 names_relp bit (18) unaligned, 4 42 2 dtem bit (36) unaligned, 4 43 2 dtd bit (36) unaligned, 4 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 4 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 4 46 4 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 4 48 based (pointer (status_area_ptr, status_branch.names_relp)), 4 49 /* array of names returned */ 4 50 status_pathname character (status_link.pathname_length) aligned 4 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 4 52 /* link target path */ 4 53 status_area_ptr pointer, 4 54 status_ptr pointer; 4 55 4 56 dcl (Link initial (0), 4 57 Segment initial (1), 4 58 Directory initial (2)) fixed bin internal static options (constant); 4 59 /* values for type fields declared above */ 4 60 4 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 144 145 5 1 /* BEGIN INCLUDE FILE: copy_options.incl.pl1 */ 5 2 5 3 /* This structure declares the input structure used by the copy_ subroutine. 5 4* 5 5* NOTE: This include file depends on declarations in the include file 5 6* copy_flags.incl.pl1. 5 7* 5 8* Jay Pattin 6/1/83 */ 5 9 5 10 declare copy_options_ptr ptr; 5 11 5 12 declare 1 copy_options aligned based (copy_options_ptr), 5 13 2 version char (8), /* currently COPY_OPTIONS_VERSION_1 */ 5 14 2 caller_name char (32) unal, /* Used in nd_handler_ call */ 5 15 2 source_dir char (168) unal, 5 16 2 source_name char (32) unal, 5 17 2 target_dir char (168) unal, 5 18 2 target_name char (32) unal, 5 19 2 flags, 5 20 3 no_name_dup bit (1) unaligned, /* ON = don't call nd_handler_ */ 5 21 3 raw bit (1) unaligned, /* ON = don't call object_type_, use hcs_ */ 5 22 3 force bit (1) unaligned, /* ON = delete or force access to target */ 5 23 3 delete bit (1) unaligned, /* ON = delete original after copy (for move) */ 5 24 3 target_err_switch bit (1) unaligned, 5 25 3 mbz bit (31) unaligned, 5 26 2 copy_items like copy_flags; /* see copy_flags.incl.pl1 */ 5 27 5 28 declare COPY_OPTIONS_VERSION_1 char (8) static options (constant) init ("CPOPT001"); 5 29 5 30 /* END INCLUDE FILE: copy_options.incl.pl1 */ 146 147 6 1 /* BEGIN INCLUDE FILE: copy_flags.incl.pl1 */ 6 2 6 3 /* Flags for attributes that should/may be copied by the copy_ subroutine. This include file is 6 4* required by suffix_info.incl.pl1 and copy_options.incl.pl1 6 5* 6 6* Jay Pattin 6/23/83 */ 6 7 6 8 declare 1 copy_flags aligned based, /* ON means that this attribute may be copied by copy_ */ 6 9 2 names bit (1) unaligned, 6 10 2 acl bit (1) unaligned, 6 11 2 ring_brackets bit (1) unaligned, 6 12 2 max_length bit (1) unaligned, 6 13 2 copy_switch bit (1) unaligned, 6 14 2 safety_switch bit (1) unaligned, 6 15 2 dumper_switches bit (1) unaligned, 6 16 2 entry_bound bit (1) unaligned, /* only for vanilla object segments */ 6 17 2 extend bit (1) unaligned, /* copy_ may append to end of existing object */ 6 18 2 update bit (1) unaligned, /* copy_ may replace contents of existing object */ 6 19 2 mbz bit (26) unaligned; 6 20 6 21 /* END INCLUDE FILE: copy_flags.incl.pl1 */ 148 149 150 /* forum_salvager_: 151* proc (P_attendee_seg_ptr, P_transaction_seg_ptr); */ 152 153 egress = PUNT; 154 salvage_entry = "1"b; 155 expunged_map_ptr, temp_map_ptr, new_aseg_ptr, new_tseg_ptr = null (); 156 od.proceedings_ptrs (*) = null (); 157 string (switches) = ""b; 158 159 attendee_seg_ptr = P_attendee_seg_ptr; 160 transaction_seg_ptr = P_transaction_seg_ptr; 161 162 call hcs_$level_get (user_ring); 163 call hcs_$fs_get_path_name (attendee_seg_ptr, directory, idx, "", (0)); 164 sod.attendee_seg_ptr = attendee_seg_ptr; 165 sod.transaction_seg_ptr = transaction_seg_ptr; 166 sod.proceedings_ptrs (*) = null (); 167 sod.forum_name = directory; 168 open_data_ptr = addr (sod); 169 170 call forum_logger_ (0, me, "Salvaging ^a.", substr (directory, 1, idx)); 171 goto COMMON; 172 173 174 forum_salvager_$expunge: 175 entry (P_forum_idx, P_switches_word, P_attendees_deleted, P_transactions_deleted, P_status); 176 177 egress = PUNT; 178 salvage_entry = "0"b; 179 attendee_seg_ptr, transaction_seg_ptr = null (); 180 expunged_map_ptr, temp_map_ptr, new_aseg_ptr, new_tseg_ptr = null (); 181 od.proceedings_ptrs (*) = null (); 182 call hcs_$level_get (user_ring); 183 string (switches) = P_switches_word; 184 185 call forum_open_mgr_$lookup_forum_idx (P_forum_idx, open_data_ptr, xacl, status); 186 if status ^= 0 then call error (status); 187 188 attendee_ptr = open_data.attendee_ptr; 189 attendee_seg_ptr = open_data.attendee_seg_ptr; 190 transaction_seg_ptr = open_data.transaction_seg_ptr; 191 if xacl ^= RWC_XACL then call error (forum_et_$chairman_only); 192 193 COMMON: 194 inner_ring = get_ring_ (); 195 196 on any_other call any_other_handler (); 197 on cleanup call clean_up_salvage (); 198 199 call hcs_$level_set (inner_ring); 200 201 call initialize_copy (); 202 203 call copy_all (); 204 205 new_tseg.deleted_count = deleted_count; 206 call copy_back (); 207 attendee_seg.salvaging = "0"b; 208 209 if ^salvage_entry then do; 210 call forum_seg_mgr_$unlock (attendee_seg_ptr); 211 212 P_attendees_deleted = deleted_attendees; 213 P_transactions_deleted = deleted_transactions; 214 end; 215 216 call hcs_$level_set (user_ring); 217 P_status = 0; 218 return; 219 220 PUNT: P_status = status; 221 call release_temp_segments_ (me, od.proceedings_ptrs (*), (0)); 222 call release_temp_segment_ (me, new_aseg_ptr, (0)); 223 call release_temp_segment_ (me, new_tseg_ptr, (0)); 224 225 if ^salvage_entry then 226 call forum_seg_mgr_$unlock (attendee_seg_ptr); 227 call hcs_$level_set (user_ring); 228 229 return; 230 231 232 clean_up_salvage: 233 procedure (); 234 235 if temp_map_ptr ^= null () then free temp_map; 236 if expunged_map_ptr ^= null () then free expunged_map; 237 238 call release_temp_segments_ (me, od.proceedings_ptrs (*), (0)); 239 call release_temp_segment_ (me, new_aseg_ptr, (0)); 240 call release_temp_segment_ (me, new_tseg_ptr, (0)); 241 call hcs_$level_set (user_ring); 242 243 return; 244 end clean_up_salvage; 245 246 forum_seg_mgr_$copy: 247 entry (P_copy_options_ptr, P_status); 248 249 created = "0"b; 250 attendee_seg_ptr, transaction_seg_ptr = null (); 251 temp_map_ptr, expunged_map_ptr = null (); 252 copy_options_ptr = P_copy_options_ptr; 253 copy_options.target_err_switch = "0"b; 254 egress = COPY_PUNT; 255 256 inner_ring = get_ring_ (); 257 call hcs_$level_get (user_ring); 258 259 on any_other call any_other_handler (); 260 on cleanup call clean_up_copy (); 261 262 call hcs_$level_set (inner_ring); 263 264 directory = copy_options.source_dir; 265 name = copy_options.source_name; 266 new_dir = copy_options.target_dir; 267 new_name = copy_options.target_name; 268 269 call forum_seg_mgr_$initiate (directory, name, "1"b, attendee_seg_ptr, transaction_seg_ptr, xacl, status); 270 if status ^= 0 then call error (status); 271 if xacl = ""b then call error (error_table_$incorrect_access); 272 273 string (switches) = ""b; /* Initially decide to copy everything. */ 274 275 if xacl ^= RWC_XACL then do; /* But if we are not a chairman, then only copy non-deleted stuff */ 276 switches.transactions = "1"b; 277 switches.users = "1"b; 278 end; 279 280 if copy_options.update | copy_options.extend then 281 call error (error_table_$unsupported_operation); 282 283 copy_options.target_err_switch = "1"b; 284 call forum_seg_mgr_$just_create (new_dir, new_name, new_aseg_ptr, new_tseg_ptr, status); 285 if status ^= 0 then call error (status); 286 created = "1"b; 287 288 unspec (sod) = ""b; 289 sod.attendee_seg_ptr = attendee_seg_ptr; 290 sod.transaction_seg_ptr = transaction_seg_ptr; 291 sod.proceedings_ptrs (*) = null (); 292 sod.forum_name = pathname_ (directory, name); 293 open_data_ptr = addr (sod); 294 295 unspec (od) = ""b; 296 od.attendee_seg_ptr = new_aseg_ptr; 297 od.transaction_seg_ptr = new_tseg_ptr; 298 od.proceedings_ptrs (*) = null (); 299 od.forum_name = pathname_ (new_dir, new_name); 300 301 new_aseg.flags = attendee_seg.flags; 302 new_aseg.flags.salvaging = "0"b; /* just in case */ 303 new_aseg.chairman_message = attendee_seg.chairman_message; 304 new_aseg.chairman = attendee_seg.chairman; /* just create set it to this user */ 305 306 call copy_all (); 307 308 call forum_seg_mgr_$terminate_all (open_data_ptr); 309 call forum_seg_mgr_$terminate_all (addr (od)); 310 call hcs_$level_set (user_ring); 311 P_status = 0; 312 return; 313 314 COPY_PUNT: 315 call clean_up_copy (); 316 P_status = status; 317 return; 318 319 320 clean_up_copy: 321 procedure (); 322 323 if temp_map_ptr ^= null () then free temp_map; 324 if expunged_map_ptr ^= null () then free expunged_map; 325 326 if created then do; 327 call hcs_$del_dir_tree (new_dir, new_name, (0)); 328 call hcs_$delentry_file (new_dir, new_name, (0)); 329 end; 330 call forum_seg_mgr_$terminate (attendee_seg_ptr, transaction_seg_ptr); 331 call hcs_$level_set (user_ring); 332 return; 333 end clean_up_copy; 334 335 initialize_copy: 336 proc (); 337 338 call get_temp_segment_ (me, new_aseg_ptr, status); 339 if status ^= 0 then call error (status); 340 341 call get_temp_segment_ (me, new_tseg_ptr, status); 342 if status ^= 0 then call error (status); 343 344 od.forum_name = open_data.forum_name; 345 od.attendee_seg_ptr = new_aseg_ptr; 346 od.transaction_seg_ptr = new_tseg_ptr; 347 348 new_aseg.version = ATTENDEE_SEG_VERSION_1; 349 new_aseg.lock = get_lock_id_ (); 350 new_aseg.flags = attendee_seg.flags; 351 new_aseg.salvaging = "1"b; 352 new_aseg.chairman = attendee_seg.chairman; 353 new_aseg.chairman_message = attendee_seg.chairman_message; 354 355 unspec (auto_area_info) = ""b; 356 auto_area_info.version = area_info_version_1; 357 auto_area_info.system = "1"b; 358 auto_area_info.zero_on_free = "1"b; 359 auto_area_info.zero_on_alloc = "1"b; 360 auto_area_info.size = sys_info$max_seg_size - size (attendee_seg_header); 361 auto_area_info.areap = addr (new_aseg.attendee_area); 362 auto_area_info.owner = "forum"; 363 364 call define_area_ (addr (auto_area_info), status); 365 if status ^= 0 then call error (status); 366 367 transaction_block_ptr = addr (new_tseg.first_free_word); 368 new_tseg.version = TRANS_SEG_VERSION_1; 369 new_tseg.first_block_offset, new_tseg.current_block_offset = rel (transaction_block_ptr); 370 new_tseg.last_trans_in_block = hbound (transaction_block.transactions, 1); 371 new_tseg.current_segno = 1; 372 new_tseg.free_space_offset = rel (addrel (transaction_block_ptr, size (transaction_block))); 373 transaction_block.first_trans_idx, transaction_block.last_trans_idx = 1; 374 375 return; 376 end initialize_copy; 377 378 copy_all: 379 proc (); 380 381 temp_map_len = transaction_seg.transaction_count; 382 allocate temp_map in (system_area); 383 384 allocate expunged_map in (system_area); 385 expunged_map = ""b; 386 387 call check_attendee_count (); 388 if attendee_seg_damaged then attendee_count = 5000; /* should be enough */ 389 390 call copy_transactions (); 391 392 call copy_attendees (); 393 394 free temp_map; 395 396 return; 397 end copy_all; 398 399 check_attendee_count: 400 proc (); 401 402 attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.first_attendee_offset); 403 attendee_count, deleted_attendees = 0; 404 attendee_seg_damaged = "0"b; 405 406 do while (attendee_ptr ^= null ()); 407 if check_for_damage () then do; 408 attendee_seg_damaged = "1"b; 409 last_attendee_ptr -> attendee.next_offset = ""b; 410 return; 411 end; 412 attendee_count = attendee_count + 1; 413 if switches.users & attendee.deleted then deleted_attendees = deleted_attendees + 1; 414 last_attendee_ptr = attendee_ptr; 415 if attendee.next_offset = ""b then attendee_ptr = null (); 416 else attendee_ptr = ptr (attendee_seg_ptr, attendee.next_offset); 417 end; 418 419 if attendee_count ^= attendee_seg.attendee_count then attendee_seg_damaged = "1"b; 420 421 return; 422 423 check_for_damage: 424 proc () returns (bit (1) aligned); 425 426 if attendee.version ^= ATTENDEE_VERSION_1 then return ("1"b); 427 if attendee.attendee_uid < 0 | attendee.attendee_uid > attendee_seg.attendee_count then return ("1"b); 428 if verify (attendee.person_id, USERID_CHARS) ^= 0 then return ("1"b); 429 if verify (attendee.project_id, USERID_CHARS) ^= 0 then return ("1"b); 430 431 return ("0"b); 432 end check_for_damage; 433 434 end check_attendee_count; 435 436 copy_attendees: 437 proc (); 438 439 declare 1 v aligned, 440 2 n fixed bin, 441 2 vector (attendee_count) ptr unaligned; 442 443 declare 1 idxs aligned, 444 2 n fixed bin, 445 2 vector (attendee_count) fixed bin (18); 446 447 idx = 0; 448 attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.first_attendee_offset); 449 do while (attendee_ptr ^= null ()); 450 if ^switches.users | ^attendee.deleted then do; 451 idx = idx + 1; 452 v.vector (idx) = addr (attendee.person_id); 453 idxs.vector (idx) = idx; 454 end; 455 if attendee.next_offset = ""b then attendee_ptr = null (); 456 else attendee_ptr = ptr (attendee_seg_ptr, attendee.next_offset); 457 end; 458 459 if attendee_seg_damaged then call find_attendees (); 460 461 v.n, idxs.n = idx; 462 call sort_items_indirect_$char (addr (v), addr (idxs), 22); 463 464 call copy_the_attendees (1, idx); 465 return; 466 467 find_attendees: 468 proc (); 469 470 /* WALK THROUGH SEG LOOKING FOR ATTENDEE_VERSION_1 */ 471 call forum_logger_ (0, me, "Attendee seg damaged ^a.", open_data.forum_name); 472 /* call error (forum_et_$unexpected_fault); */ 473 474 end find_attendees; 475 476 copy_the_attendees: 477 proc (low, high); 478 479 declare (low, high, idx, jdx, middle) fixed bin, 480 1 at aligned like attendee based (new_attendee_ptr), 481 new_attendee_ptr ptr; 482 declare kdx fixed bin; 483 484 middle = low + divide (high - low, 2, 17, 0); 485 486 attendee_ptr = addrel (v.vector (idxs.vector (middle)), -2); 487 call forum_space_mgr_$get_attendee_slot (new_aseg_ptr, (attendee.person_id), new_attendee_ptr, status); 488 if status ^= 0 then call error (status); 489 490 at.project_id = attendee.project_id; 491 at.participating = attendee.participating; 492 at.deleted = "0"b; 493 at.notify = attendee.notify; 494 at.acl_change_pending = attendee.acl_change_pending; 495 at.message_change_pending = attendee.message_change_pending; 496 at.last_time_attended = attendee.last_time_attended; 497 at.xacl = attendee.xacl; 498 499 bit_map_ptr = ptr (attendee_seg_ptr, attendee.bit_map_offset); 500 501 if bit_map.attendee_uid ^= attendee.attendee_uid then do; 502 idx = new_tseg.transaction_count; 503 jdx = 1; 504 temp_map = ""b; 505 end; 506 else do; 507 temp_map = bit_map.map | substr (expunged_map, attendee.bit_map_first_trans); 508 509 idx = index (bit_map.map, "0"b); 510 if idx = 0 then idx = bit_map.length; 511 512 jdx = attendee.bit_map_first_trans; 513 idx = idx + jdx - 1; 514 end; 515 516 call forum_space_mgr_$allocate_bit_map (addr (od), new_attendee_ptr, idx, bit_map_ptr, status); 517 if status ^= 0 then call error (status); 518 519 idx = at.bit_map_first_trans - jdx + 1; 520 if idx <= temp_map_len then 521 bit_map.map = substr (temp_map, idx); 522 523 kdx = index (reverse (bit_map.map), "1"b); 524 if kdx = 0 then kdx = -1; 525 else kdx = bit_map.length - kdx; 526 527 kdx = kdx + at.bit_map_first_trans; 528 if kdx > transaction_seg.transaction_count then do; 529 idx = transaction_seg.transaction_count - at.bit_map_first_trans + 1; 530 if idx > 0 then substr (bit_map.map, idx) = ""b; 531 else do; 532 at.bit_map_first_trans = transaction_seg.transaction_count + 1; 533 bit_map.map = ""b; 534 end; 535 end; 536 537 if middle < high then call copy_the_attendees (middle + 1, high); 538 if middle > low then call copy_the_attendees (low, middle - 1); 539 540 return; 541 end copy_the_attendees; 542 543 end copy_attendees; 544 545 copy_transactions: 546 proc (); 547 548 declare block_offset bit (18), 549 pref_offset bit (18), 550 pref_ptr ptr, 551 new_trans_ptr ptr, 552 1 new_trans like transaction based (new_trans_ptr), 553 pref fixed bin, 554 subject char (subject_len) based (subject_ptr), 555 subject_len fixed bin, 556 subject_ptr ptr, 557 trans_idx fixed bin, 558 trans_ptr ptr, 559 trans_len fixed bin (21), 560 trans_text char (trans_len) based (trans_ptr); 561 562 deleted_transactions, deleted_count = 0; 563 block_offset = ""b; 564 565 do trans_idx = 1 to transaction_seg.transaction_count; 566 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 567 if status ^= 0 & status ^= forum_et_$trans_reaped then 568 if status = forum_et_$unexpected_fault then status = forum_et_$trans_reaped; /* damaged */ 569 else call error (status); 570 571 if status = forum_et_$trans_reaped then call expunge (); 572 else if switches.transactions & transaction.deleted then call expunge (); 573 else do; 574 trans_len = transaction.text_length; 575 subject_len = transaction.subject_length; 576 if open_data.proceedings_ptrs (transaction.segno) = null () then do; 577 call forum_seg_mgr_$initiate_seg (open_data_ptr, transaction.segno, status); 578 if status ^= 0 then call error (status); 579 end; 580 trans_ptr = ptr (open_data.proceedings_ptrs (transaction.segno), transaction.text_offset); 581 subject_ptr = ptr (open_data.proceedings_ptrs (transaction.segno), transaction.subject_offset); 582 583 pref = 0; 584 pref_offset = transaction.pref_offset; 585 do while (pref_offset ^= ""b); 586 pref_ptr = ptr (transaction_seg_ptr, pref_offset); 587 if ^pref_ptr -> transaction.deleted then do; 588 pref = pref_ptr -> transaction.trans_idx; 589 goto have_pref; 590 end; 591 pref_offset = pref_ptr -> transaction.pref_offset; 592 end; 593 594 have_pref: 595 call forum_trans_mgr_$load_trans (addr (od), trans_text, pref, subject, (transaction.unfilled), 596 idx, status); 597 if status ^= 0 then call error (status); 598 if trans_idx ^= idx then call error (forum_et_$invalid_trans_idx); 599 600 new_trans_ptr = ptr (new_tseg_ptr, new_tseg.last_trans_offset); 601 new_trans.person_id = transaction.person_id; 602 new_trans.project_id = transaction.project_id; 603 new_trans.time = transaction.time; 604 new_trans.deleted = transaction.deleted; 605 new_trans.deleted_by_author = transaction.deleted_by_author; 606 607 if new_trans.deleted then deleted_count = deleted_count + 1; 608 if block_offset ^= new_tseg.current_block_offset then do; 609 ptr (new_tseg_ptr, new_tseg.current_block_offset) -> transaction_block.time = new_trans.time; 610 block_offset = new_tseg.current_block_offset; 611 end; 612 end; 613 end; 614 return; 615 616 expunge: 617 proc (); 618 619 if status = 0 then deleted_transactions = deleted_transactions + 1; 620 deleted_count = deleted_count + 1; 621 622 transaction_block_ptr = ptr (new_tseg_ptr, new_tseg.current_block_offset); 623 if trans_idx > new_tseg.last_trans_in_block then call get_new_block (); 624 625 idx = trans_idx - transaction_block.first_trans_idx + 1; 626 transaction_block.offset (idx) = EXPUNGED; 627 transaction_block.last_trans_idx = idx; 628 new_tseg.transaction_count = new_tseg.transaction_count + 1; 629 630 substr (expunged_map, trans_idx, 1) = "1"b; 631 return; 632 end expunge; 633 634 get_new_block: 635 proc (); 636 637 declare old_block_offset bit (18); 638 639 old_block_offset = rel (transaction_block_ptr); 640 new_tseg.current_block_offset, 641 transaction_block.next_block_offset = new_tseg.free_space_offset; 642 transaction_block_ptr = ptr (new_tseg_ptr, new_tseg.free_space_offset); 643 new_tseg.free_space_offset = rel (addrel (transaction_block_ptr, size (transaction_block))); 644 new_tseg.last_trans_in_block = new_tseg.last_trans_in_block + hbound (transaction_block.transactions, 1); 645 transaction_block.first_trans_idx = trans_idx; 646 transaction_block.prev_block_offset = old_block_offset; 647 648 return; 649 end get_new_block; 650 651 end copy_transactions; 652 653 copy_back: 654 proc (); 655 656 declare 1 sb aligned like status_branch, 657 attendee_seg_len fixed bin (21), 658 directory char (168), 659 dir_len fixed bin, 660 entry_name char (32), 661 segment char (seg_len) based, 662 seg_len fixed bin (21); 663 664 call hcs_$fs_get_path_name (new_aseg_ptr, directory, dir_len, entry_name, status); 665 if status ^= 0 then call error (status); 666 667 call hcs_$status_long (directory, entry_name, 0, addr (sb), null (), status); 668 if status ^= 0 then call error (status); 669 attendee_seg_len = 4096 * sb.current_length; 670 671 /* Make sure all of the proceedings segments in the old meeting have 672* been initiated. If all of the transactions in one segment are being 673* expunged, the segment may not be initiated and we will fault on it 674* here */ 675 676 do idx = 1 to transaction_seg.current_segno; 677 if open_data.proceedings_ptrs (idx) = null () then do; 678 call forum_seg_mgr_$initiate_seg (open_data_ptr, idx, status); 679 if status ^= 0 then call error (status); 680 end; 681 end; 682 683 do idx = 1 to new_tseg.current_segno; 684 if idx ^= new_tseg.current_segno then seg_len = 4 * sys_info$max_seg_size; 685 else seg_len = 4 * fixed (new_tseg.next_trans_offset, 19); 686 open_data.proceedings_ptrs (idx) -> segment = od.proceedings_ptrs (idx) -> segment; 687 end; 688 689 do idx = new_tseg.current_segno + 1 to transaction_seg.current_segno; 690 call hcs_$delentry_seg (open_data.proceedings_ptrs (idx), 691 (0)); 692 open_data.proceedings_ptrs (idx) = null (); 693 end; 694 695 seg_len = attendee_seg_len; 696 attendee_seg_ptr -> segment = new_aseg_ptr -> segment; 697 698 seg_len = 4 * fixed (new_tseg.free_space_offset, 19); 699 transaction_seg_ptr -> segment = new_tseg_ptr -> segment; 700 701 call hcs_$truncate_seg (open_data.proceedings_ptrs (new_tseg.current_segno), 702 fixed (new_tseg.next_trans_offset, 19), (0)); 703 call hcs_$truncate_seg (attendee_seg_ptr, divide (attendee_seg_len, 4, 19, 0), (0)); 704 call hcs_$truncate_seg (transaction_seg_ptr, fixed (new_tseg.free_space_offset, 19), (0)); 705 706 do idx = 1 to new_tseg.current_segno; 707 call release_temp_segment_ (me, od.proceedings_ptrs (idx), (0)); 708 end; 709 call release_temp_segment_ (me, new_aseg_ptr, (0)); 710 call release_temp_segment_ (me, new_tseg_ptr, (0)); 711 712 end copy_back; 713 714 any_other_handler: 715 proc (); 716 717 on any_other system; 718 if open_data_ptr ^= null () then directory = open_data.forum_name; 719 else directory = ""; 720 721 call forum_logger_$any_other (0, me, directory); 722 status = forum_et_$unexpected_fault; 723 goto egress; 724 725 end any_other_handler; 726 727 728 error: 729 proc (P_status); 730 731 declare P_status fixed bin (35); 732 733 status = P_status; 734 goto egress; 735 736 end error; 737 738 end forum_salvager_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/09/86 0901.4 forum_salvager_.pl1 >spec>install>1151>forum_salvager_.pl1 138 1 10/31/84 1115.3 forum_structures.incl.pl1 >ldd>include>forum_structures.incl.pl1 140 2 10/31/84 1115.3 forum_open_data.incl.pl1 >ldd>include>forum_open_data.incl.pl1 142 3 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 144 4 11/22/82 0955.7 status_structures.incl.pl1 >ldd>include>status_structures.incl.pl1 146 5 10/14/83 1606.7 copy_options.incl.pl1 >ldd>include>copy_options.incl.pl1 148 6 10/14/83 1606.7 copy_flags.incl.pl1 >ldd>include>copy_flags.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. ATTENDEE_SEG_VERSION_1 000002 constant char(8) initial unaligned dcl 1-123 ref 348 ATTENDEE_VERSION_1 004562 constant fixed bin(17,0) initial dcl 1-132 ref 426 EXPUNGED constant bit(18) initial unaligned dcl 1-135 ref 626 P_attendee_seg_ptr parameter pointer dcl 40 ref 22 159 P_attendees_deleted parameter fixed bin(17,0) dcl 40 set ref 174 212* P_copy_options_ptr parameter pointer dcl 40 ref 246 252 P_forum_idx parameter fixed bin(17,0) dcl 40 set ref 174 185* P_status parameter fixed bin(35,0) dcl 731 in procedure "error" ref 728 733 P_status parameter fixed bin(35,0) dcl 40 in procedure "forum_salvager_" set ref 174 217* 220* 246 311* 316* P_switches_word parameter bit(36) dcl 40 ref 174 183 P_transaction_seg_ptr parameter pointer dcl 40 ref 22 160 P_transactions_deleted parameter fixed bin(17,0) dcl 40 set ref 174 213* RWC_XACL constant bit(3) initial unaligned dcl 1-137 ref 191 275 TRANS_SEG_VERSION_1 000000 constant char(8) initial unaligned dcl 1-123 ref 368 USERID_CHARS 000004 constant char(100) initial unaligned dcl 88 ref 428 429 acl_change_pending 13(04) based bit(1) level 3 in structure "at" packed unaligned dcl 479 in procedure "copy_the_attendees" set ref 494* acl_change_pending 13(04) based bit(1) level 3 in structure "attendee" packed unaligned dcl 1-42 in procedure "forum_salvager_" ref 494 addr builtin function dcl 91 ref 168 293 309 309 361 364 364 367 452 462 462 462 462 516 516 594 594 667 667 addrel builtin function dcl 91 ref 372 486 643 any_other 000612 stack reference condition dcl 91 ref 196 259 717 area_control based structure level 1 dcl 3-20 area_info based structure level 1 dcl 3-7 area_info_version_1 constant fixed bin(17,0) initial dcl 3-3 ref 356 areap 16 000302 automatic pointer level 2 dcl 82 set ref 361* at based structure level 1 dcl 479 attendee based structure level 1 dcl 1-42 attendee_area 140 based area(1024) level 2 dcl 82 set ref 361 attendee_count 000100 automatic fixed bin(17,0) dcl 50 in procedure "forum_salvager_" set ref 388* 403* 412* 412 419 439 443 attendee_count 4 based fixed bin(17,0) level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_salvager_" ref 419 427 attendee_ptr 124 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_salvager_" ref 188 attendee_ptr 000632 automatic pointer dcl 1-8 in procedure "forum_salvager_" set ref 188* 402* 406 413 414 415 415* 416* 416 426 427 427 428 429 448* 449 450 452 455 455* 456* 456 486* 487 490 491 493 494 495 496 497 499 501 507 512 attendee_seg based structure level 1 dcl 1-18 attendee_seg_damaged 000101 automatic bit(1) dcl 50 set ref 388 404* 408* 419* 459 attendee_seg_header based structure level 1 dcl 1-22 ref 360 attendee_seg_len 000766 automatic fixed bin(21,0) dcl 656 set ref 669* 695 703 703 attendee_seg_ptr 60 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_salvager_" ref 189 attendee_seg_ptr 60 000460 automatic pointer level 2 in structure "sod" dcl 82 in procedure "forum_salvager_" set ref 164* 289* attendee_seg_ptr 60 000326 automatic pointer level 2 in structure "od" dcl 82 in procedure "forum_salvager_" set ref 296* 345* attendee_seg_ptr 000626 automatic pointer dcl 1-8 in procedure "forum_salvager_" set ref 159* 163* 164 179* 189* 207 210* 225* 250* 269* 289 301 303 304 330* 350 352 353 402 402 416 419 427 448 448 456 499 696 703* attendee_uid based fixed bin(17,0) level 2 in structure "bit_map" dcl 1-67 in procedure "forum_salvager_" ref 501 attendee_uid 1 based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 427 427 501 author 2 based structure level 2 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" author 2 based structure level 2 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" auto_area_info 000302 automatic structure level 1 dcl 82 set ref 355* 364 364 bit_map based structure level 1 dcl 1-67 bit_map_first_trans 24 based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 507 512 bit_map_first_trans 24 based fixed bin(17,0) level 2 in structure "at" dcl 479 in procedure "copy_the_attendees" set ref 519 527 529 532* bit_map_offset 25 based bit(18) level 2 dcl 1-42 ref 499 bit_map_ptr 000640 automatic pointer dcl 1-8 set ref 499* 501 507 509 510 516* 520 523 525 530 533 block_offset 000710 automatic bit(18) unaligned dcl 548 set ref 563* 608 610* chairman 5 based structure level 3 in structure "new_aseg" dcl 82 in procedure "forum_salvager_" set ref 304* 352* chairman 5 based structure level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_salvager_" ref 304 352 chairman_message 16 based char(256) level 3 in structure "new_aseg" dcl 82 in procedure "forum_salvager_" set ref 303* 353* chairman_message 16 based char(256) level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_salvager_" ref 303 353 cleanup 000620 stack reference condition dcl 91 ref 197 260 control 1 000302 automatic structure level 2 dcl 82 copy_flags based structure level 1 dcl 6-8 copy_items 157 based structure level 2 dcl 5-12 copy_options based structure level 1 dcl 5-12 copy_options_ptr 000644 automatic pointer dcl 5-10 set ref 252* 253 264 265 266 267 280 280 283 created 000102 automatic bit(1) dcl 50 set ref 249* 286* 326 current_block_offset 7 based bit(18) level 2 dcl 82 set ref 369* 608 609 610 622 640* current_length 7 000754 automatic fixed bin(12,0) level 3 packed unsigned unaligned dcl 656 set ref 669 current_segno 11 based fixed bin(17,0) level 2 in structure "transaction_seg" dcl 1-77 in procedure "forum_salvager_" ref 676 689 current_segno 11 based fixed bin(17,0) level 2 in structure "new_tseg" dcl 82 in procedure "forum_salvager_" set ref 371* 683 684 689 701 706 define_area_ 000026 constant entry external dcl 103 ref 364 deleted 11(27) based bit(1) level 3 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" ref 572 587 604 deleted 11(27) based bit(1) level 3 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" set ref 604* 607 deleted 13(02) based bit(1) level 3 in structure "at" packed unaligned dcl 479 in procedure "copy_the_attendees" set ref 492* deleted 13(02) based bit(1) level 3 in structure "attendee" packed unaligned dcl 1-42 in procedure "forum_salvager_" ref 413 450 deleted_attendees 000103 automatic fixed bin(17,0) dcl 50 set ref 212 403* 413* 413 deleted_by_author 11(28) based bit(1) level 3 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" set ref 605* deleted_by_author 11(28) based bit(1) level 3 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" ref 605 deleted_count 000104 automatic fixed bin(17,0) dcl 50 in procedure "forum_salvager_" set ref 205 562* 607* 607 620* 620 deleted_count 3 based fixed bin(17,0) level 2 in structure "new_tseg" dcl 82 in procedure "forum_salvager_" set ref 205* deleted_transactions 000105 automatic fixed bin(17,0) dcl 50 set ref 213 562* 619* 619 dir_len 001041 automatic fixed bin(17,0) dcl 656 set ref 664* directory 000767 automatic char(168) unaligned dcl 656 in procedure "copy_back" set ref 664* 667* directory 000106 automatic char(168) unaligned dcl 50 in procedure "forum_salvager_" set ref 163* 167 170 170 264* 269* 292* 718* 719* 721* divide builtin function dcl 91 ref 484 703 703 egress 000160 automatic label variable dcl 50 set ref 153* 177* 254* 723 734 entry_name 001042 automatic char(32) unaligned dcl 656 set ref 664* 667* error_table_$incorrect_access 000010 external static fixed bin(35,0) dcl 95 set ref 271* error_table_$unsupported_operation 000012 external static fixed bin(35,0) dcl 95 set ref 280* expunged_map based bit unaligned dcl 50 set ref 236 324 384 385* 507 630* expunged_map_ptr 000164 automatic pointer dcl 50 set ref 155* 180* 236 236 251* 324 324 384* 385 507 630 extend 157(08) based bit(1) level 3 packed unaligned dcl 5-12 ref 280 first_attendee_offset 116 based bit(18) level 3 dcl 1-18 ref 402 448 first_block_offset 6 based bit(18) level 2 dcl 82 set ref 369* first_free_word 14 based fixed bin(17,0) level 2 dcl 82 set ref 367 first_trans_idx based fixed bin(17,0) level 2 dcl 1-114 set ref 373* 625 645* fixed builtin function dcl 91 ref 685 698 701 701 704 704 flags 13 based structure level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" flags 11(27) based structure level 2 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" flags 156 based structure level 2 in structure "copy_options" dcl 5-12 in procedure "forum_salvager_" flags 11(27) based structure level 2 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" flags 13 based structure level 2 in structure "at" dcl 479 in procedure "copy_the_attendees" flags 3 based structure level 3 in structure "new_aseg" dcl 82 in procedure "forum_salvager_" set ref 301* 350* flags 3 based structure level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_salvager_" set ref 301 350 forum_et_$chairman_only 000014 external static fixed bin(35,0) dcl 95 set ref 191* forum_et_$invalid_trans_idx 000016 external static fixed bin(35,0) dcl 95 set ref 598* forum_et_$trans_reaped 000020 external static fixed bin(35,0) dcl 95 ref 567 567 571 forum_et_$unexpected_fault 000022 external static fixed bin(35,0) dcl 95 ref 567 722 forum_logger_ 000030 constant entry external dcl 103 ref 170 471 forum_logger_$any_other 000032 constant entry external dcl 103 ref 721 forum_name 4 000460 automatic char(168) level 2 in structure "sod" dcl 82 in procedure "forum_salvager_" set ref 167* 292* forum_name 4 based char(168) level 2 in structure "open_data" dcl 2-5 in procedure "forum_salvager_" set ref 344 471* 718 forum_name 4 000326 automatic char(168) level 2 in structure "od" dcl 82 in procedure "forum_salvager_" set ref 299* 344* forum_open_mgr_$lookup_forum_idx 000034 constant entry external dcl 103 ref 185 forum_seg_mgr_$initiate 000036 constant entry external dcl 103 ref 269 forum_seg_mgr_$initiate_seg 000040 constant entry external dcl 103 ref 577 678 forum_seg_mgr_$just_create 000042 constant entry external dcl 103 ref 284 forum_seg_mgr_$terminate 000044 constant entry external dcl 103 ref 330 forum_seg_mgr_$terminate_all 000046 constant entry external dcl 103 ref 308 309 forum_seg_mgr_$unlock 000050 constant entry external dcl 103 ref 210 225 forum_space_mgr_$allocate_bit_map 000052 constant entry external dcl 103 ref 516 forum_space_mgr_$find_transaction 000054 constant entry external dcl 103 ref 566 forum_space_mgr_$get_attendee_slot 000056 constant entry external dcl 103 ref 487 forum_trans_mgr_$load_trans 000060 constant entry external dcl 103 ref 594 free_space_offset 13 based bit(18) level 2 dcl 82 set ref 372* 640 642 643* 698 704 704 get_lock_id_ 000062 constant entry external dcl 103 ref 349 get_ring_ 000064 constant entry external dcl 103 ref 193 256 get_system_free_area_ 000066 constant entry external dcl 103 ref 382 384 get_temp_segment_ 000070 constant entry external dcl 103 ref 338 341 hbound builtin function dcl 91 ref 370 644 hcs_$del_dir_tree 000076 constant entry external dcl 103 ref 327 hcs_$delentry_file 000072 constant entry external dcl 103 ref 328 hcs_$delentry_seg 000074 constant entry external dcl 103 ref 690 hcs_$fs_get_path_name 000100 constant entry external dcl 103 ref 163 664 hcs_$level_get 000102 constant entry external dcl 103 ref 162 182 257 hcs_$level_set 000104 constant entry external dcl 103 ref 199 216 227 241 262 310 331 hcs_$status_long 000106 constant entry external dcl 103 ref 667 hcs_$truncate_seg 000110 constant entry external dcl 103 ref 701 703 704 header based structure level 2 in structure "attendee_seg" dcl 1-18 in procedure "forum_salvager_" header based structure level 2 in structure "new_aseg" dcl 82 in procedure "forum_salvager_" high parameter fixed bin(17,0) dcl 479 set ref 476 484 537 537* idx 000166 automatic fixed bin(17,0) dcl 50 in procedure "forum_salvager_" set ref 163* 170 170 447* 451* 451 452 453 453 461 464* 594* 598 625* 626 627 676* 677 678* 683* 684 686 686* 689* 690 692* 706* 707* idx 000100 automatic fixed bin(17,0) dcl 479 in procedure "copy_the_attendees" set ref 502* 509* 510 510* 513* 513 516* 519* 520 520 529* 530 530 idxs 000100 automatic structure level 1 dcl 443 set ref 462 462 index builtin function dcl 91 ref 509 523 inner_ring 000167 automatic fixed bin(3,0) dcl 50 set ref 193* 199* 256* 262* jdx 000101 automatic fixed bin(17,0) dcl 479 set ref 503* 512* 513 519 kdx 000106 automatic fixed bin(17,0) dcl 482 set ref 523* 524 524* 525* 525 527* 527 528 last_attendee_ptr 000170 automatic pointer dcl 50 set ref 409 414* last_time_attended 22 based fixed bin(71,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 496 last_time_attended 22 based fixed bin(71,0) level 2 in structure "at" dcl 479 in procedure "copy_the_attendees" set ref 496* last_trans_idx 1 based fixed bin(17,0) level 2 dcl 1-114 set ref 373* 627* last_trans_in_block 10 based fixed bin(17,0) level 2 dcl 82 set ref 370* 623 644* 644 last_trans_offset 5 based bit(18) level 2 dcl 82 ref 600 length 1 based fixed bin(17,0) level 2 dcl 1-67 ref 507 509 510 520 523 525 530 533 lock 2 based bit(36) level 3 dcl 82 set ref 349* long 4 000754 automatic structure level 2 dcl 656 low parameter fixed bin(17,0) dcl 479 set ref 476 484 484 538 538* map 2 based bit level 2 dcl 1-67 set ref 507 509 520* 523 530* 533* me 000035 constant char(16) initial unaligned dcl 50 set ref 170* 221* 222* 223* 238* 239* 240* 338* 341* 471* 707* 709* 710* 721* message_change_pending 13(05) based bit(1) level 3 in structure "at" packed unaligned dcl 479 in procedure "copy_the_attendees" set ref 495* message_change_pending 13(05) based bit(1) level 3 in structure "attendee" packed unaligned dcl 1-42 in procedure "forum_salvager_" ref 495 middle 000102 automatic fixed bin(17,0) dcl 479 set ref 484* 486 537 537 538 538 n 000100 automatic fixed bin(17,0) level 2 in structure "v" dcl 439 in procedure "copy_attendees" set ref 461* n 000100 automatic fixed bin(17,0) level 2 in structure "idxs" dcl 443 in procedure "copy_attendees" set ref 461* name 000172 automatic char(32) unaligned dcl 50 set ref 265* 269* 292* new_aseg based structure level 1 dcl 82 new_aseg_ptr 000202 automatic pointer dcl 50 set ref 155* 180* 222* 239* 284* 296 301 302 303 304 338* 345 348 349 350 351 352 353 361 487* 664* 696 709* new_attendee_ptr 000104 automatic pointer dcl 479 set ref 487* 490 491 492 493 494 495 496 497 516* 519 527 529 532 new_dir 000204 automatic char(168) unaligned dcl 50 set ref 266* 284* 299* 327* 328* new_name 000256 automatic char(32) unaligned dcl 50 set ref 267* 284* 299* 327* 328* new_trans based structure level 1 unaligned dcl 548 new_trans_ptr 000714 automatic pointer dcl 548 set ref 600* 601 602 603 604 605 607 609 new_tseg based structure level 1 dcl 82 new_tseg_ptr 000266 automatic pointer dcl 50 set ref 155* 180* 205 223* 240* 284* 297 341* 346 367 368 369 369 370 371 372 502 600 600 608 609 609 610 622 622 623 628 628 640 640 642 642 643 644 644 683 684 685 689 698 699 701 701 701 704 704 706 710* next_block_offset 4(18) based bit(18) level 2 packed unaligned dcl 1-114 set ref 640* next_offset 31 based bit(18) level 2 dcl 1-42 set ref 409* 415 416 455 456 next_trans_offset 12 based bit(18) level 2 dcl 82 ref 685 701 701 notify 13(03) based bit(1) level 3 in structure "attendee" packed unaligned dcl 1-42 in procedure "forum_salvager_" ref 493 notify 13(03) based bit(1) level 3 in structure "at" packed unaligned dcl 479 in procedure "copy_the_attendees" set ref 493* null builtin function dcl 91 ref 155 156 166 179 180 181 235 236 250 251 291 298 323 324 406 415 449 455 576 667 667 677 692 718 od 000326 automatic structure level 1 dcl 82 set ref 295* 309 309 516 516 594 594 offset 5 based bit(18) array level 3 packed unaligned dcl 1-114 set ref 626* old_block_offset 000744 automatic bit(18) unaligned dcl 637 set ref 639* 646 open_data based structure level 1 dcl 2-5 open_data_ptr 000642 automatic pointer dcl 2-3 set ref 168* 185* 188 189 190 293* 308* 344 471 576 577* 580 581 677 678* 686 690 692 701 718 718 owner 2 000302 automatic char(32) level 2 packed unaligned dcl 82 set ref 362* participating 13(01) based bit(1) level 3 in structure "at" packed unaligned dcl 479 in procedure "copy_the_attendees" set ref 491* participating 13(01) based bit(1) level 3 in structure "attendee" packed unaligned dcl 1-42 in procedure "forum_salvager_" ref 491 pathname_ 000112 constant entry external dcl 103 ref 292 299 person_id 2 based char(22) level 3 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" set ref 601* person_id 2 based char(22) level 3 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" ref 601 person_id 2 based char(22) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" set ref 428 452 487 pref 000716 automatic fixed bin(17,0) dcl 548 set ref 583* 588* 594* pref_offset 12(27) based bit(18) level 2 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" ref 584 591 pref_offset 000711 automatic bit(18) unaligned dcl 548 in procedure "copy_transactions" set ref 584* 585 586 591* pref_ptr 000712 automatic pointer dcl 548 set ref 586* 587 588 591 prev_block_offset 4 based bit(18) level 2 packed unaligned dcl 1-114 set ref 646* proceedings_ptrs 64 000326 automatic pointer array level 2 in structure "od" dcl 82 in procedure "forum_salvager_" set ref 156* 181* 221* 238* 298* 686 707* proceedings_ptrs 64 000460 automatic pointer array level 2 in structure "sod" dcl 82 in procedure "forum_salvager_" set ref 166* 291* proceedings_ptrs 64 based pointer array level 2 in structure "open_data" dcl 2-5 in procedure "forum_salvager_" set ref 576 580 581 677 686 690* 692* 701* project_id 7(18) based char(9) level 3 in structure "new_trans" packed unaligned dcl 548 in procedure "copy_transactions" set ref 602* project_id 7(18) based char(9) level 3 in structure "transaction" packed unaligned dcl 1-91 in procedure "forum_salvager_" ref 602 project_id 10 based char(9) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 429 490 project_id 10 based char(9) level 2 in structure "at" dcl 479 in procedure "copy_the_attendees" set ref 490* ptr builtin function dcl 91 ref 402 416 448 456 499 580 581 586 600 609 622 642 rel builtin function dcl 91 ref 369 372 639 643 release_temp_segment_ 000114 constant entry external dcl 103 ref 222 223 239 240 707 709 710 release_temp_segments_ 000116 constant entry external dcl 103 ref 221 238 reverse builtin function dcl 91 ref 523 salvage_entry 000270 automatic bit(1) dcl 50 set ref 154* 178* 209 225 salvaging 3(05) based bit(1) level 4 in structure "new_aseg" packed unaligned dcl 82 in procedure "forum_salvager_" set ref 302* 351* salvaging 3(05) based bit(1) level 4 in structure "attendee_seg" packed unaligned dcl 1-18 in procedure "forum_salvager_" set ref 207* sb 000754 automatic structure level 1 dcl 656 set ref 667 667 seg_len 001052 automatic fixed bin(21,0) dcl 656 set ref 684* 685* 686 686 695* 696 696 698* 699 699 segment based char unaligned dcl 656 set ref 686* 686 696* 696 699* 699 segno 16 based fixed bin(17,0) level 2 dcl 1-91 set ref 576 577* 580 581 size 13 000302 automatic fixed bin(18,0) level 2 in structure "auto_area_info" dcl 82 in procedure "forum_salvager_" set ref 360* size builtin function dcl 91 in procedure "forum_salvager_" ref 360 372 643 sod 000460 automatic structure level 1 dcl 82 set ref 168 288* 293 sort_items_indirect_$char 000120 constant entry external dcl 103 ref 462 source_dir 12 based char(168) level 2 packed unaligned dcl 5-12 ref 264 source_name 64 based char(32) level 2 packed unaligned dcl 5-12 ref 265 status 000271 automatic fixed bin(35,0) dcl 50 set ref 185* 186 186* 220 269* 270 270* 284* 285 285* 316 338* 339 339* 341* 342 342* 364* 365 365* 487* 488 488* 516* 517 517* 566* 567 567 567 567* 569* 571 577* 578 578* 594* 597 597* 619 664* 665 665* 667* 668 668* 678* 679 679* 722* 733* status_branch based structure level 1 dcl 4-8 string builtin function dcl 91 set ref 157* 183* 273* subject based char unaligned dcl 548 set ref 594* subject_len 000717 automatic fixed bin(17,0) dcl 548 set ref 575* 594 594 subject_length 20 based fixed bin(21,0) level 2 dcl 1-91 ref 575 subject_offset 17 based bit(18) level 2 packed unaligned dcl 1-91 ref 581 subject_ptr 000720 automatic pointer dcl 548 set ref 581* 594 substr builtin function dcl 91 set ref 170 170 507 520 530* 630* switches 000300 automatic structure level 1 dcl 78 set ref 157* 183* 273* sys_info$max_seg_size 000024 external static fixed bin(35,0) dcl 95 ref 360 684 system 1(05) 000302 automatic bit(1) level 3 packed unaligned dcl 82 set ref 357* system_area based area(1024) dcl 50 ref 382 384 target_dir 74 based char(168) level 2 packed unaligned dcl 5-12 ref 266 target_err_switch 156(04) based bit(1) level 3 packed unaligned dcl 5-12 set ref 253* 283* target_name 146 based char(32) level 2 packed unaligned dcl 5-12 ref 267 temp_map based bit unaligned dcl 50 set ref 235 323 382 394 504* 507* 520 temp_map_len 000272 automatic fixed bin(17,0) dcl 50 set ref 235 235 323 323 381* 382 382 394 394 504 507 520 520 temp_map_ptr 000274 automatic pointer dcl 50 set ref 155* 180* 235 235 251* 323 323 382* 394 504 507 520 text_length 22 based fixed bin(21,0) level 2 dcl 1-91 ref 574 text_offset 21 based bit(18) level 2 packed unaligned dcl 1-91 ref 580 time 14 based fixed bin(71,0) level 2 in structure "new_trans" dcl 548 in procedure "copy_transactions" set ref 603* 609 time 2 based fixed bin(71,0) level 2 in structure "transaction_block" dcl 1-114 in procedure "forum_salvager_" set ref 609* time 14 based fixed bin(71,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_salvager_" ref 603 trans_idx 000722 automatic fixed bin(17,0) dcl 548 in procedure "copy_transactions" set ref 565* 566* 598* 623 625 630 645 trans_idx 1 based fixed bin(17,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_salvager_" ref 588 trans_len 000726 automatic fixed bin(21,0) dcl 548 set ref 574* 594 594 trans_ptr 000724 automatic pointer dcl 548 set ref 580* 594 trans_text based char unaligned dcl 548 set ref 594* transaction based structure level 1 unaligned dcl 1-91 transaction_block based structure level 1 unaligned dcl 1-114 set ref 372 643 transaction_block_ptr 000636 automatic pointer dcl 1-8 set ref 367* 369 370 372 372 373 373 622* 625 626 627 639 640 642* 643 643 644 645 646 transaction_count 2 based fixed bin(17,0) level 2 in structure "transaction_seg" dcl 1-77 in procedure "forum_salvager_" ref 236 236 324 324 381 384 384 385 507 528 529 532 565 630 transaction_count 2 based fixed bin(17,0) level 2 in structure "new_tseg" dcl 82 in procedure "forum_salvager_" set ref 502 628* 628 transaction_ptr 000634 automatic pointer dcl 1-8 set ref 566* 572 574 575 576 577 580 580 581 581 584 594 601 602 603 604 605 transaction_seg based structure level 1 dcl 1-77 transaction_seg_ptr 62 000460 automatic pointer level 2 in structure "sod" dcl 82 in procedure "forum_salvager_" set ref 165* 290* transaction_seg_ptr 000630 automatic pointer dcl 1-8 in procedure "forum_salvager_" set ref 160* 165 179* 190* 236 236 250* 269* 290 324 324 330* 381 384 384 385 507 528 529 532 565 566* 586 630 676 689 699 704* transaction_seg_ptr 62 000326 automatic pointer level 2 in structure "od" dcl 82 in procedure "forum_salvager_" set ref 297* 346* transaction_seg_ptr 62 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_salvager_" ref 190 transactions 5 based structure array level 2 in structure "transaction_block" packed unaligned dcl 1-114 in procedure "forum_salvager_" set ref 370 644 transactions 000300 automatic bit(1) level 2 in structure "switches" packed unaligned dcl 78 in procedure "forum_salvager_" set ref 276* 572 unfilled 11(29) based bit(1) level 3 packed unaligned dcl 1-91 ref 594 unspec builtin function dcl 91 set ref 288* 295* 355* update 157(09) based bit(1) level 3 packed unaligned dcl 5-12 ref 280 user_ring 000276 automatic fixed bin(3,0) dcl 50 set ref 162* 182* 216* 227* 241* 257* 310* 331* users 0(01) 000300 automatic bit(1) level 2 packed unaligned dcl 78 set ref 277* 413 450 v 000100 automatic structure level 1 dcl 439 set ref 462 462 vector 1 000100 automatic fixed bin(18,0) array level 2 in structure "idxs" dcl 443 in procedure "copy_attendees" set ref 453* 486 vector 1 000100 automatic pointer array level 2 in structure "v" packed unaligned dcl 439 in procedure "copy_attendees" set ref 452* 486 verify builtin function dcl 91 ref 428 429 version based char(8) level 3 in structure "new_aseg" dcl 82 in procedure "forum_salvager_" set ref 348* version 000302 automatic fixed bin(17,0) level 2 in structure "auto_area_info" dcl 82 in procedure "forum_salvager_" set ref 356* version based char(8) level 2 in structure "new_tseg" dcl 82 in procedure "forum_salvager_" set ref 368* version based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 426 xacl 14 based bit(36) level 2 in structure "at" dcl 479 in procedure "copy_the_attendees" set ref 497* xacl 14 based bit(36) level 2 in structure "attendee" dcl 1-42 in procedure "forum_salvager_" ref 497 xacl 000277 automatic bit(36) dcl 50 in procedure "forum_salvager_" set ref 185* 191 269* 271 275 zero_on_alloc 1(01) 000302 automatic bit(1) level 3 packed unaligned dcl 82 set ref 359* zero_on_free 1(02) 000302 automatic bit(1) level 3 packed unaligned dcl 82 set ref 358* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ATTENDEE_SEG_NAME internal static char(32) initial unaligned dcl 1-127 COPY_OPTIONS_VERSION_1 internal static char(8) initial unaligned dcl 5-28 Directory internal static fixed bin(17,0) initial dcl 4-56 Link internal static fixed bin(17,0) initial dcl 4-56 PROCEEDINGS_SEG_NAME internal static char(32) initial unaligned dcl 1-127 RW_XACL internal static bit(3) initial unaligned dcl 1-137 R_XACL internal static bit(3) initial unaligned dcl 1-137 Segment internal static fixed bin(17,0) initial dcl 4-56 TRANSACTION_SEG_NAME internal static char(32) initial unaligned dcl 1-127 TRANSACTION_VERSION_1 internal static fixed bin(17,0) initial dcl 1-132 alloc_bit_map_length automatic fixed bin(17,0) dcl 1-72 area_infop automatic pointer dcl 3-5 status_area_ptr automatic pointer dcl 4-47 status_entry_names based char(32) array dcl 4-47 status_link based structure level 1 dcl 4-38 status_pathname based char dcl 4-47 status_ptr automatic pointer dcl 4-47 NAMES DECLARED BY EXPLICIT CONTEXT. COMMON 000440 constant label dcl 193 ref 171 COPY_PUNT 001370 constant label dcl 314 ref 254 PUNT 000556 constant label dcl 220 ref 153 177 any_other_handler 004250 constant entry internal dcl 714 ref 196 259 check_attendee_count 002164 constant entry internal dcl 399 ref 387 check_for_damage 002247 constant entry internal dcl 423 ref 407 clean_up_copy 001530 constant entry internal dcl 320 ref 260 314 clean_up_salvage 001377 constant entry internal dcl 232 ref 197 copy_all 002076 constant entry internal dcl 378 ref 203 306 copy_attendees 002325 constant entry internal dcl 436 ref 392 copy_back 003562 constant entry internal dcl 653 ref 206 copy_the_attendees 002512 constant entry internal dcl 476 ref 464 537 538 copy_transactions 003130 constant entry internal dcl 545 ref 390 error 004340 constant entry internal dcl 728 ref 186 191 270 271 280 285 339 342 365 488 517 569 578 597 598 665 668 679 expunge 003471 constant entry internal dcl 616 ref 571 572 find_attendees 002454 constant entry internal dcl 467 ref 459 forum_salvager_ 000115 constant entry external dcl 22 forum_salvager_$expunge 000316 constant entry external dcl 174 forum_seg_mgr_$copy 000673 constant entry external dcl 246 get_new_block 003532 constant entry internal dcl 634 ref 623 have_pref 003323 constant label dcl 594 ref 589 initialize_copy 001655 constant entry internal dcl 335 ref 201 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5420 5542 4564 5430 Length 6162 4564 122 403 633 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME forum_salvager_ 786 external procedure is an external procedure. on unit on line 196 64 on unit on unit on line 197 86 on unit clean_up_salvage internal procedure shares stack frame of on unit on line 197. on unit on line 259 64 on unit on unit on line 260 64 on unit clean_up_copy 80 internal procedure is called by several nonquick procedures. initialize_copy internal procedure shares stack frame of external procedure forum_salvager_. copy_all internal procedure shares stack frame of external procedure forum_salvager_. check_attendee_count internal procedure shares stack frame of external procedure forum_salvager_. check_for_damage internal procedure shares stack frame of external procedure forum_salvager_. copy_attendees 116 internal procedure uses auto adjustable storage. find_attendees internal procedure shares stack frame of internal procedure copy_attendees. copy_the_attendees 100 internal procedure calls itself recursively. copy_transactions internal procedure shares stack frame of external procedure forum_salvager_. expunge internal procedure shares stack frame of external procedure forum_salvager_. get_new_block internal procedure shares stack frame of external procedure forum_salvager_. copy_back internal procedure shares stack frame of external procedure forum_salvager_. any_other_handler 86 internal procedure enables or reverts conditions. on unit on line 717 64 on unit error 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME copy_attendees 000100 idxs copy_attendees 000100 v copy_attendees copy_the_attendees 000100 idx copy_the_attendees 000101 jdx copy_the_attendees 000102 middle copy_the_attendees 000104 new_attendee_ptr copy_the_attendees 000106 kdx copy_the_attendees forum_salvager_ 000100 attendee_count forum_salvager_ 000101 attendee_seg_damaged forum_salvager_ 000102 created forum_salvager_ 000103 deleted_attendees forum_salvager_ 000104 deleted_count forum_salvager_ 000105 deleted_transactions forum_salvager_ 000106 directory forum_salvager_ 000160 egress forum_salvager_ 000164 expunged_map_ptr forum_salvager_ 000166 idx forum_salvager_ 000167 inner_ring forum_salvager_ 000170 last_attendee_ptr forum_salvager_ 000172 name forum_salvager_ 000202 new_aseg_ptr forum_salvager_ 000204 new_dir forum_salvager_ 000256 new_name forum_salvager_ 000266 new_tseg_ptr forum_salvager_ 000270 salvage_entry forum_salvager_ 000271 status forum_salvager_ 000272 temp_map_len forum_salvager_ 000274 temp_map_ptr forum_salvager_ 000276 user_ring forum_salvager_ 000277 xacl forum_salvager_ 000300 switches forum_salvager_ 000302 auto_area_info forum_salvager_ 000326 od forum_salvager_ 000460 sod forum_salvager_ 000626 attendee_seg_ptr forum_salvager_ 000630 transaction_seg_ptr forum_salvager_ 000632 attendee_ptr forum_salvager_ 000634 transaction_ptr forum_salvager_ 000636 transaction_block_ptr forum_salvager_ 000640 bit_map_ptr forum_salvager_ 000642 open_data_ptr forum_salvager_ 000644 copy_options_ptr forum_salvager_ 000710 block_offset copy_transactions 000711 pref_offset copy_transactions 000712 pref_ptr copy_transactions 000714 new_trans_ptr copy_transactions 000716 pref copy_transactions 000717 subject_len copy_transactions 000720 subject_ptr copy_transactions 000722 trans_idx copy_transactions 000724 trans_ptr copy_transactions 000726 trans_len copy_transactions 000744 old_block_offset get_new_block 000754 sb copy_back 000766 attendee_seg_len copy_back 000767 directory copy_back 001041 dir_len copy_back 001042 entry_name copy_back 001052 seg_len copy_back THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp alloc_bit_temp call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_2 alloc_auto_adj enable_op shorten_stack ext_entry int_entry reverse_bs set_bits_eis index_bits_eis index_bs_1_eis op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. define_area_ forum_logger_ forum_logger_$any_other forum_open_mgr_$lookup_forum_idx forum_seg_mgr_$initiate forum_seg_mgr_$initiate_seg forum_seg_mgr_$just_create forum_seg_mgr_$terminate forum_seg_mgr_$terminate_all forum_seg_mgr_$unlock forum_space_mgr_$allocate_bit_map forum_space_mgr_$find_transaction forum_space_mgr_$get_attendee_slot forum_trans_mgr_$load_trans get_lock_id_ get_ring_ get_system_free_area_ get_temp_segment_ hcs_$del_dir_tree hcs_$delentry_file hcs_$delentry_seg hcs_$fs_get_path_name hcs_$level_get hcs_$level_set hcs_$status_long hcs_$truncate_seg pathname_ release_temp_segment_ release_temp_segments_ sort_items_indirect_$char THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$incorrect_access error_table_$unsupported_operation forum_et_$chairman_only forum_et_$invalid_trans_idx forum_et_$trans_reaped forum_et_$unexpected_fault sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000111 153 000122 154 000125 155 000127 156 000134 157 000147 159 000150 160 000154 162 000157 163 000166 164 000220 165 000222 166 000224 167 000237 168 000242 170 000244 171 000307 174 000311 177 000326 178 000331 179 000332 180 000335 181 000342 182 000355 183 000364 185 000370 186 000405 188 000415 189 000420 190 000423 191 000426 193 000440 196 000447 197 000471 199 000507 201 000516 203 000517 205 000520 206 000523 207 000524 209 000527 210 000531 212 000540 213 000543 216 000545 217 000554 218 000555 220 000556 221 000560 222 000602 223 000624 225 000646 227 000657 229 000666 246 000667 249 000703 250 000704 251 000707 252 000712 253 000716 254 000720 256 000723 257 000732 259 000741 260 000763 262 001005 264 001014 265 001020 266 001023 267 001026 269 001031 270 001073 271 001103 273 001114 275 001115 276 001120 277 001122 280 001124 283 001137 284 001142 285 001172 286 001202 288 001204 289 001207 290 001211 291 001213 292 001227 293 001252 295 001254 296 001257 297 001261 298 001263 299 001277 301 001322 302 001326 303 001330 304 001333 306 001336 308 001337 309 001346 310 001357 311 001366 312 001367 314 001370 316 001374 317 001376 232 001377 235 001400 236 001412 238 001425 239 001450 240 001473 241 001516 243 001526 320 001527 323 001535 324 001547 326 001562 327 001565 328 001607 330 001632 331 001644 332 001654 335 001655 338 001656 339 001677 341 001707 342 001730 344 001740 345 001744 346 001746 348 001750 349 001754 350 001763 351 001767 352 001771 353 001774 355 001777 356 002002 357 002004 358 002006 359 002010 360 002012 361 002021 362 002024 364 002027 365 002041 367 002051 368 002054 369 002060 370 002063 371 002065 372 002067 373 002073 375 002075 378 002076 381 002077 382 002102 384 002120 385 002137 387 002144 388 002145 390 002151 392 002152 394 002156 396 002163 399 002164 402 002165 403 002172 404 002174 406 002175 407 002202 408 002207 409 002211 410 002213 412 002214 413 002215 414 002225 415 002227 416 002234 417 002237 419 002240 421 002246 423 002247 426 002251 427 002257 428 002270 429 002305 431 002322 436 002324 439 002332 443 002340 447 002343 448 002344 449 002351 450 002357 451 002366 452 002367 453 002373 454 002375 455 002376 456 002404 457 002407 459 002410 461 002413 462 002417 464 002440 465 002453 467 002454 471 002455 474 002510 476 002511 484 002517 486 002525 487 002535 488 002564 490 002577 491 002611 492 002615 493 002617 494 002623 495 002627 496 002633 497 002635 499 002637 501 002643 502 002646 503 002651 504 002653 505 002660 507 002661 509 002714 510 002723 512 002726 513 002730 516 002733 517 002754 519 002767 520 002774 523 003013 524 003024 525 003032 527 003034 528 003036 529 003042 530 003046 532 003060 533 003063 537 003071 538 003110 540 003127 545 003130 562 003131 563 003133 565 003134 566 003145 567 003162 569 003174 571 003202 572 003210 574 003221 575 003224 576 003226 577 003235 578 003247 580 003257 581 003267 583 003273 584 003274 585 003301 586 003304 587 003307 588 003312 589 003314 591 003315 592 003322 594 003323 597 003400 598 003410 600 003422 601 003427 602 003433 603 003436 604 003440 605 003444 607 003450 608 003454 609 003457 610 003464 613 003466 614 003470 616 003471 619 003472 620 003475 622 003476 623 003503 625 003507 626 003513 627 003520 628 003522 630 003524 631 003531 634 003532 639 003533 640 003535 642 003543 643 003547 644 003553 645 003555 646 003557 648 003561 653 003562 664 003563 665 003614 667 003624 668 003665 669 003675 676 003701 677 003711 678 003717 679 003732 681 003742 683 003744 684 003755 685 003765 686 003771 687 004002 689 004004 690 004017 692 004033 693 004041 695 004043 696 004045 698 004052 699 004057 701 004063 703 004106 704 004125 706 004145 707 004155 708 004200 709 004202 710 004224 712 004246 714 004247 717 004255 718 004272 719 004304 721 004307 722 004331 723 004335 728 004337 733 004345 734 004351 ----------------------------------------------------------- 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