%ì VAX-11 Librarian V03-00 ¯lº$Œ`T½$Œ‹nŒ  ¬ BUFFER.MAR2 CACHE.MAR!V CHECKSUM.MAR"þ FILENAME.MAR7  INDEX.MAR±^ OUTPUT.MARû( OWNER.MAR6@ OWNERERR.MSG6¾ PROCESS.MARPŽSORT.MAR­ KQݸ Œ.; 0001 MODULE buffer ( IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 0005 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 EXTERNAL; 0078 free_buffer_mask:; 0079 BITVECTOR [32],#; 0080 qioblock_base_address:; 0081 LONG; ; 0082 ; 0083 EXTERNAL ROUTINEC; 0084 lib$get_vm: ADDRESSING_MODE (GENERAL); ; 0085 5; 0086 GLOBAL ROUTINE initialize_qioblock_array = ; 0087 ; 0088 BEGIN ; 0089 ; 0090 OWN; 0091 buffer_number:; 0092 LONG,; 0093 status:; 0094 LONG; ; 0095 L; 0096 IF (status = lib$get_vm (%REF (qioblock$c_length*buffer_count),B; 0097 qioblock_base_address)) THEN; 0098 BEGIN; 0099 BIND9; 0100 qioblock_array = .qioblock_base_address:T; 0101 BLOCKVECTOR [buffer_count,qioblock$c_length,BYTE];?; 0102 INCR buffer_number FROM 0 TO buffer_count - 1 DO; 0103 BEGINX; 0104 qioblock_array [.buffer_number,qioblock$b_event_flag] = .buffer_number;/; 0105 $setef (efn = .buffer_number);; 0106 END;; 0107 END;; 0108 RETURN .status;; 0109 END; .TITLE BUFFER .IDENT \V03-0000\ .PSECT $OWN$,NOEXE,2;BUFFER_NUMBERU.2: .BLKB 4;STATUSU.3: .BLKB 4G .EXTRN FREE_BUFFER_MAS K, QIOBLOCK_BASE_ADDRESS, LIB$GET_VM, SYS$SETEF .PSECT $CODE$,NOWRT,2a .ENTRY INITIALIZE_QIOBLOCK_ARRAY, ^M ;INITIALIZE_QIOBLOCK_ARRAY, Save R2 ; 0086. SUBL2 #4, SP ;#4, SP ;O PUSHAB W^QIOBLOCK_BASE_ADDRESS ;QIOBLOCK_BASE_ADDRESS ; 00968 MOVZWL #4608, 4(SP) ;#4608, 4(SP) ;, PUSHAB 4(SP) ;4(SP) ;= CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM ;1 MOVL R0, W^U.3 ;R 0, U.3 ;. BLBC R0, 2$ ;R0, 2$ ;5 CLRL R2 ;BUFFER_NUMBER ; 0102J1$: MULL3 #768, R2, R0 ;#768, BUFFER_NUMBER, R0 ; 0104c MOVB R2, @W^QIOBLOCK_BASE_ADDRESS[R0] ;BUFFER_NUMBER, @QIOBLOCK_BASE_ADDRESS[R0] ;5 PUSHL R2 ;BUFFER_NUMBER ; 0105< CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF ;C AOBLEQ #5, R2, 1$ ;#5, BUFFER_NUMBER, 1$ ; 010292$: MOVL  W^U.3, R0 ;U.3, R0 ; 0088( RET ; ; 0086:; Routine Size: 68 bytes, Routine Base: $CODE$ + 0000 ; 0110 ; 0111 I; 0112 GLOBAL ROUTINE allocate_buffer (buffer_address_ptr): NOVALUE = ; 0113 ; 0114 BEGIN ; 0115 ; 0116 BIND7; 0117 buffer_address = .buffer_address_ptr:(; 0118 LONG,:; 0119 qioblock_array = .qioblock_base_address:U; 0120  BLOCKVECTOR [buffer_count,qioblock$c_length,BYTE]; ; 0121 ; 0122 BUILTIN; 0123 FFC; ; 0124 ; 0125 OWN; 0126 buffer_number:; 0127 LONG; ; 0128 ; 0129 !J; 0130 ! Loop until a free buffer is found. Actually loop is traversedI; 0131 ! once at most since waiting for an event flag guarantees that.; 0132 ! a buffer will be found next pass. ; 0133 !!; 0134 WHILE FFC (%REF (0),,; 0135 %REF ( buffer_count),); 0136 free_buffer_mask,); 0137 buffer_number) DO#; P 0138 $wflor ( efn = 0,3; 0139 mask = free_buffer_mask); ; 0140 !G; 0141 ! Return address of buffer just found, mark buffer as in use-; 0142 ! and clear associated event flag. ; 0143 !F; 0144 buffer_address = qioblock_array [.buffer_number,0,0,0,0];3; 0145 free_buffer_mask [.buffer_number] = 1;/; 0146 $clref ( efn = .buffer _number);; 0147 END; .PSECT $OWN$,NOEXE,2;BUFFER_NUMBERU.8: .BLKB 4 .EXTRN SYS$WFLOR, SYS$CLREF .PSECT $CODE$,NOWRT,2V .ENTRY ALLOCATE_BUFFER, ^M ;ALLOCATE_BUFFER, Save R2,R3 ; 0112H MOVAB W^FREE_BUFFER_MASK, R3 ;FREE_BUFFER_MASK, R3 ;V MOVL W^QIOBLOCK_BASE_ADDRESS, R2 ;QIOBLOCK_BASE_ADDRESS, R2 ; 0114U1$: FFC #0, #6, (R3), W^U.8 ;#0, #6, FREE_BUFFER_MASK, U.8 ; 0134& BNEQ 2$ ;2$ ;+ PUSHL R3 ;R3 ; 0139, CLRL -(SP) ;-(SP) ;< CALLS #2, G^SYS$WFLOR ;#2, SYS$WFLOR ;+ BRB 1$ ;1$ ; 013492$: MOVL W^U.8, R1 ;U.8, R1 ; 01448 MULL3 #768, R1, R0 ;#768, R1, R0 ;G ADDL3 R2, R0, @4(AP) ;R2, R0, @BUFFER_ADDRESS_PTR ;H BBSS R1, (R3), 3$ ;R1, FREE_BUFFER_MASK, 3$ ; 0145.3$: PUSHL R1 ;R1 ; 0146< CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF ;( RET ; ; 0112:; Routine Size: 66 bytes, Routine Base: $CODE$ + 0044 ; 0148 @; 0149 GLOBAL ROUTINE release_buffer (buffer_ptr): NOVALUE = ; 0150 ; 0151 BEGIN ; 0152 ; 0153 BIND/; 0154 buffer = .buffer_ptr:1; 0155 BLOCK [,BYTE];; 0156 OWN; 0157 event_flag:; 0158 BYTE; ; 0159 :; 0160 event_flag = .buffer [qioblock$b_event_flag];0; 0161 free_buffer_mask [.event_flag] = 0;,; 0162 $setef ( efn = .event_flag);; 0163 END; .PSECT $OWN$,NOEXE,2 ;EVENT_FLAGU.11: .BLKB 1 .PSECT $CODE$,NOWRT,2P .ENTRY RELEASE_BUFFER, ^M ;RELEASE_BUFFER, Save R2 ; 01493 MOVAB W^U.11, R2 ;U.11, R2 ;G MOVB @4(AP), (R2) ;@BUFFER_PTR, EVENT_FLAG ; 0160; MOVZBL (R2), R0 ;EVENT_FLAG, R0 ; 0161O BBCC R0, W^FREE_BUFFER_MASK, 1$ ;R0, FREE_BUFFER_MASK, 1$ ;D1$: MOVZBL (R2), -(SP) ;EVENT_FLAG, -(SP) ; 0162< CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF ;( RET ; ; 0149:; Routine Size: 31 bytes, Routine Base: $CODE$ + 0086; 0164 END; 0165 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;T; $OWN$ 13 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 165 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 3 0 397; COMMAND QUALIFIERSD; BLISS /MAC=(ASS,NOBIN,SYMB,UNIQ)/SOU=NOHEAD/LIST=BUFFER.LST BUFFER; Compilation Complete .ENDww­ ¬Ýݸ Œ,; 0001 MODULE cache (IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 0005 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 EXTERNAL ; 0078 cache_header_count:; 0079 LONG,; 0080 max_cache:; 0081 LONG,; 0082 cache_buffer_ptr:; 0083 LONG,!; 0084 reference_count_ptr:; 0085 LONG; ; 0086 F; 0087 GLOBAL ROUTINE cached (file_number_ptr,cache_address_ptr) = ; 0088 ; 0089 BEGIN ; 0090 ; 0091 BIND<; 0092 file_number = .file_number_ptr:0; 0093 WORD,>; 0094 cache_address = .cache_address_ptr:0; 0095 LONG; ; 0096 ; 0097 BIND=; 0098 header_cache = .cache_buffer_ptr:D; 0099 BLOCKVECTOR [,512,BYTE],@; 0100 reference_count = .reference_count_ptr:;; 0101 VECTOR [,WORD]; ; 0102 ; 0103 ; 0104 OWN; 0105 status; ; 0106 ; 0107 !; 0108 ! Assume failure. ; 0109 !; 0110 status = false; ; 0111 !.; 0112 ! Update the cache reference count. ; 0113 !B; 0114 INCR cache_index FROM 0 TO .cache_header_count - 1 DOT; 0115 reference_count [.cache_index] = .reference_count [.cache _index] + 1; ; 0116 !P; 0117 ! Now search the cache for the file whose id is given by the backlink#; 0118 ! in the current header. ; 0119 !B; 0120 INCR cache_index FROM 0 TO .cache_header_count - 1 DOR; 0121 IF .file_number EQL .header_cache [.cache_index,fh2$w_fid_num] THEN; 0122 BEGIN4; 0123 reference_count [.cache_index] = 0;; 0124 status = true;E; 0125 cache_address = header_cache [.cache_index,0,0,0,0];; 0126  EXITLOOP;; 0127 END;; 0128 RETURN .status;; 0129 END; .TITLE CACHE .IDENT \V03-0000\ .PSECT $OWN$,NOEXE,2;STATUSU.6: .BLKB 4M .EXTRN CACHE_HEADER_COUNT, MAX_CACHE, CACHE_BUFFER_PTR, REFERENCE_COUNT_PTR .PSECT $CODE$,NOWRT,2F .ENTRY CACHED, ^M ;CACHED, Save R2,R3 ; 00871 MOVAB W^U.6, R3 ;U.6, R3 ;1 CLRL (R3) ;STATUS ; 0110; MNEGL #1, R0 ;#1, CACHE_INDEX ; 0114& BRB 2$ ;2$ ;_1$: INCW @W^REFERENCE_COUNT_PTR[R0] ;@REFERENCE_COUNT_PTR[CACHE_INDEX] ; 0115b2$: AOBLSS W^CACHE_HEADER_COUNT, R0, 1$ ;CACHE_HEADER_COUNT, CACHE_INDEX, 1$ ; 0114; MNEGL #1, R1 ;#1, CACHE_INDEX ; 0120& BRB 4$ ;4$ ;D3$: ASHL #9, R1, R2 ;#9, CACHE_INDEX, R2 ; 0121O ADDL3 W^CACHE_BUFFER_PTR, R2, R0 ;CACHE_BUFFER_PTR, R2, R0 ;C CMPW @4(AP), 8(R0) ;@FILE_NUMBER_PTR, 8(R0) ;& BNEQ 4$ ;4$ ;\ CLRW @W^REFERENCE_COUNT_PTR[R1] ;@REFERENCE_COUNT_PTR[CACHE_INDEX] ; 01237 MOVL #1, (R3) ;#1, STATUS ; 0124h MOVAB @W^CACHE_BUFFER_PTR[R2], @8(AP) ;@CACHE_BUFFER_PTR[R2], @CACHE_ADDRESS_PTR ; 0125+ BRB 5$ ;5$ ; 0122b4$: AOBLSS W^CACHE_HEADER_COUNT, R1, 3$ ;CACHE_HEADER_COUNT, CACHE_INDEX, 3$ ; 0120:5$: MOVL (R3), R0 ;STATUS, R0 ; 0089( RET ; ; 0087:; Routine Size: 74 bytes, Routine Base: $CODE$ + 0000 ; 0130 C; 0131 GLOBAL ROUTINE update_cache (last_header_ptr): NOVALUE = ; 0132 ; 0133 BEGIN ; 0134 ; 0135 BINDD; 0136 last_header = .last_header_ptr:A; 0137 BLOCK [,BYTE]; ; 0138 ; 0139 BIND =; 0140 header_cache = .cache_buffer_ptr:D; 0141 BLOCKVECTOR [,512,BYTE],@; 0142 reference_count = .reference_count_ptr:;; 0143 VECTOR [,WORD]; ; 0144 ; 0145 !N; 0146 ! See if there are any empty cache buffers. If there are, then just0; 0147 ! add current header to end of cache. ; 0148 !7; 0149 IF .cache_header_count LSS .max_cache THEN; 0150 BEGIN; 0151 CH$MOVE (512,-; 0152 CH$PTR (last_header),M; 0153 CH$PTR (header_cache [.cache_header_count,0,0,0,0]));<; 0154 cache_header_count = .cache_header_count + 1;; 0155 END; 0156 ELSE; 0157 BEGIN; 0158 OWN; 0159 index,; 0160 largest;; 0161 index = 0;.; 0162 largest = .reference_count [0];;; 0163 INCR cache_index FROM 1 TO .max_cache - 1 DOE; 0164 IF .reference_count [.cache_index] GTR .largest THEN; 0165 BEGIN(; 0166 index = .cache_index;=; 0167 largest = .reference_count [.cache_index];; 0168 END;; 0169 CH$MOVE (512,-; 0170 CH$PTR (last_header),@; 0171 CH$PTR (header_cache [.index,0,0,0,0]));,; 0172 reference_count [.index] = 0;; 0173 END;; 0174 END; .PSECT $OWN$,NOEXE,2;INDEXU.11: .BLKB  4;LARGESTU.12: .BLKB 4 .PSECT $CODE$,NOWRT,2h .ENTRY UPDATE_CACHE, ^M ; ;K MOVAB W^CACHE_HEADER_COUNT, R9 ;CACHE_HEADER_COUNT, R9 ;3 MOVAB W^U.11, R8 ;U.11, R8 ;R MOVL W^REFERENCE_COUNT_PTR, R7 ;REFERENCE_COUNT_PTR, R7 ; 0133P CMPL (R9), W^MAX_CACHE ;CACHE_HEADER_COUNT, MAX_CACHE ; 0149 & BGEQ 1$ ;1$ ;I ASHL #9, (R9), R0 ;#9, CACHE_HEADER_COUNT, R0 ; 0153k MOVC3 #512, @4(AP), @W^CACHE_BUFFER_PTR- ;#512, @LAST_HEADER_PTR, @CACHE_BUFFER_PTR[R0] ; 0151 [R0] ; ;; INCL (R9) ;CACHE_HEADER_COUNT ; 0154( RET ; ; 014931$: CLRL (R8) ;INDEX ; 0161= MOVZWL (R7), 4(R8) ;(R7), LARGEST ; 01623 CLRL R0 ;C ACHE_INDEX ; 0163& BRB 3$ ;3$ ;A2$: PUSHAW (R7)[R0] ;(R7)[CACHE_INDEX] ; 0164L CMPZV #0, #16, @(SP)+, 4(R8) ;#0, #16, @(SP)+, LARGEST ;& BLEQ 3$ ;3$ ;> MOVL R0, (R8) ;CACHE_INDEX, INDEX ; 0166L MOVZWL (R7)[R0], 4(R8) ;(R7)[CACHE_INDEX], LARGEST ; 0167R3$: AOBLSS W^MAX_CACHE, R0, 2$ ;MAX_CACHE, CACHE_INDEX, 2$ ; 01637 MOVL (R8), R6  ;INDEX, R6 ; 01714 ASHL #9, R6, R0 ;#9, R6, R0 ;k MOVC3 #512, @4(AP), @W^CACHE_BUFFER_PTR- ;#512, @LAST_HEADER_PTR, @CACHE_BUFFER_PTR[R0] ; 0169 [R0] ; ;6 CLRW (R7)[R6] ;(R7)[R6] ; 0172( RET ; ; 0131:; Routine Size: 97 bytes, Routine Base: $CODE$ + 004A; 0175 END; 0176 ELUDOM; PSECT SUMMARY;#; Name Bytes Attri!butes;T; $OWN$ 12 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 171 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 1 0 393; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FI"LENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Compilation Complete .ENDww­ ¾WÞ¸ Œ .title checksum! .ident /03-0000/* .entry checksum,^m@ movl 4(ap),r2 ; header address@ movw (r2)+,r3 ; initialize sum .rept 14 addw (r2)+,r3 .endr< movzbl #15,r1 ; loop index10$: .rept # 16 addw (r2)+,r3 .endr sobgtr r1,10$ clrl r0 cmpw r3,(r2) bneq 20$ incl r0 20$: ret .endww­`ïÞ¸ Œ1; 0001 MODULE check_sum ( IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 ; 0005 LITERAL%; 0006 true = 1,%; 0007 false = 0; ; 0008 ; 0009 9; 0010 GLOBAL RO$UTINE checksum2 (buffer_ptr,count) = ; 0011 ; 0012 BEGIN ; 0013 ; 0014 BIND7; 0015 buffer = .buffer_ptr::; 0016 VECTOR [,WORD]; ; 0017 ; 0018 OWN; 0019 sum:; 0020 WORD; ; 0021 ; 0022 sum = 0;+; 0023 INCR j FROM 0 TO .count/2-1 DO); 0024 sum = .sum + .buffer [.j];0; 0025 IF .sum EQL .buffer [.count/2] THEN; 0026 RETURN true; %0027 ELSE; 0028 RETURN false;; 0029 END; .TITLE CHECK_SUM .IDENT \V03-0000\ .PSECT $OWN$,NOEXE,2;SUMU.3: .BLKB 2 .PSECT $CODE$,NOWRT,2F .ENTRY CHECKSUM2, ^M ;CHECKSUM2, Save R2 ; 00101 MOVAB W^U.3, R2 ;U.3, R2 ;. CLRW (R2) ;SUM ; 0022? DIVL3 #2, 8(AP), R1 ;#2, COUNT, R1 ; 0023- MNEGL #1, R0 ;#1, J ;& BRB 2$ ;2$ & ;I1$: ADDW2 @4(AP)[R0], (R2) ;@BUFFER_PTR[J], SUM ; 0024<2$: AOBLSS R1, R0, 1$ ;R1, J, 1$ ; 0023G CMPW (R2), @4(AP)[R1] ;SUM, @BUFFER_PTR[R1] ; 0025& BNEQ 3$ ;3$ ;3 MOVL #1, R0 ;#1, R0 ; 0012# RET ; ;)3$: CLRL R0 ;R0 ;( RET ; ; 0010:; Routine Size: 42 bytes, Routine Base: $CODE$ + 0000'; 0030 END; 0031 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;T; $OWN$ 2 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 42 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT0; 0032 MODULE filename ( IDENT = 'V03-0000') = ; 0033 (; 0034 BEGIN ; 0035 %; 0036 LIBRARY 'sys$library:lib';; 0037 REQUIRE 'owner.req'; ; 0107 ; 0108 EXTERNAL ROUTINEC; 0109 release_record: ADDRESSING_MODE (GENERAL); ; 0110 E; 0111 GLOBAL ROUTINE complete_filename (qioblock_ptr): NOVALUE = ; 0112 ; 0113 BEGIN ; 0114 ; 0115 BIND9; 0116 qioblock = .qioblock_ptr:9; 0117 BLOCK [,BYTE],F; 0118 name_de )scr = qioblock [qioblock$q_name]::; 0119 BLOCK [8,BYTE]; ; 0120 ; 0121 IF CH$EQL (7,?; 0122 CH$PTR ( UPLIT BYTE (%ASCII'000000.')),; 0123 7,=; 0124 CH$PTR (.name_descr [dsc$a_pointer]),"; 0125 %C' ') ANDD; 0126 .qioblock [qioblock$b_state] NEQ initial_segment THEN; 0127 BEGINJ; 0128 name_descr [dsc$w_length] = .name_descr [dsc$w_length] *- 7;L; 0129 name_descr [dsc$a_pointer] = .name_descr [dsc$a_pointer] + 7;; 0130 END;H; 0131 name_descr [dsc$w_length] = .name_descr [dsc$w_length] + 1;J; 0132 name_descr [dsc$a_pointer] = .name_descr [dsc$a_pointer] - 1;; 0133 CH$MOVE (1,3; 0134 CH$PTR ( UPLIT BYTE (%C'[')),<; 0135 CH$PTR (.name_descr [dsc$a_pointer]));; 0136 END; .TITLE FILENAME .IDENT \V03-0000\ .PSECT $PLIT$,NOWRT,NOEXE,21P.AAA: + .ASCII \000000.\ ; ;+P.AAB: .BYTE 91 ; ; .EXTRN RELEASE_RECORD .PSECT $CODE$,NOWRT,2b .ENTRY COMPLETE_FILENAME, ^M ;COMPLETE_FILENAME, Save R2,R3,R4,R5 ; 0111> MOVL 4(AP), R5 ;QIOBLOCK_PTR, R5 ; 01134 MOVAB 28(R5), R4 ;28(R5), R4 ;H CMPC3 #7, W^P.AAA, @4(R4) ;#7, P.AAA, @4(R4) ; 0121& BNEQ 1$ ;1$ ;1 TSTB 1(R5) ;,1(R5) ; 0126& BEQL 1$ ;1$ ;6 SUBW2 #7, (R4) ;#7, (R4) ; 01288 ADDL2 #7, 4(R4) ;#7, 4(R4) ; 012921$: INCW (R4) ;(R4) ; 01311 DECL 4(R4) ;4(R4) ; 0132A MOVB W^P.AAB, @4(R4) ;P.AAB, @4(R4) ; 0113( RET ; ; 0111:; Routine Size: 43 bytes, Routine Base: $CODE$ + 0000 ; 0137 ; 0138 C; 0139 GLOBAL RO -UTINE update_filename (qioblock_ptr): NOVALUE = ; 0140 ; 0141 BEGIN ; 0142 ; 0143 BIND9; 0144 qioblock = .qioblock_ptr:9; 0145 BLOCK [,BYTE],F; 0146 name_descr = qioblock [qioblock$q_name]::; 0147 BLOCK [8,BYTE],I; 0148 file_header = .qioblock [qioblock$l_header]:9; 0149 BLOCK [,BYTE],Y; .0150 ident_area = file_header + 2*.file_header [fh2$b_idoffset]:H; 0151 VECTOR [fi2$s_filename,BYTE]; ; 0152 ; 0153 OWN; 0154 end_of_segment:; 0155 LONG,!; 0156 length_of_segment:; 0157 LONG; ; 0158 9; 0159 end_of_segment = CH$FIND_CH (fi2$s_filename,>; 0160 CH$PTR (ident_area),K; 0161 .qioblock [qioblock$ /b_terminal]);:; 0162 length_of_segment = CH$DIFF (.end_of_segment,?; 0163 CH$PTR (ident_area));8; 0164 IF .qioblock [qioblock$b_format] NEQ 0 THEN; 0165 BEGINJ; 0166 name_descr [dsc$w_length] = .name_descr [dsc$w_length] + 1;L; 0167 name_descr [dsc$a_pointer] = .name_descr [dsc$a_pointer] - 1;; 0168 CH$MOVE (1,>; 0169 CH$PTR (qioblock [qioblock$b_format]),>; 0170 CH$PTR (.name_0descr [dsc$a_pointer]));; 0171 END;E; 0172 name_descr [dsc$w_length] = .name_descr [dsc$w_length] +<; 0173 .length_of_segment;G; 0174 name_descr [dsc$a_pointer] = .name_descr [dsc$a_pointer] -=; 0175 .length_of_segment;); 0176 CH$MOVE (.length_of_segment,*; 0177 CH$PTR (ident_area),<; 0178 CH$PTR (.name_descr [dsc$a_pointer]));; 0179 END; .PSECT $1OWN$,NOEXE,2;END_OF_SEGMENTU.13: .BLKB 4;LENGTH_OF_SEGMENTU.14: .BLKB 4 .PSECT $CODE$,NOWRT,2c .ENTRY UPDATE_FILENAME, ^M ;UPDATE_FILENAME, Save R2,R3,R4,R5,R6 ; 01393 MOVAB W^U.13, R6 ;U.13, R6 ;> MOVL 4(AP), R3 ;QIOBLOCK_PTR, R3 ; 01414 MOVAB 28(R3), R2 ;28(R3), R2 ;9 MOVZBL @4(R3), R0 ;@4(R3), R0 ; 0150A MOVAW @4(R3)[R0], R4 ;@4(R3)[R0], R4 2 ; 0141D LOCC 3(R3), #20, (R4) ;3(R3), #20, (R4) ; 0159& BNEQ 1$ ;1$ ;& CLRL R1 ;R1 ;<1$: MOVL R1, (R6) ;R1, END_OF_SEGMENT ;V SUBL3 R4, (R6), 4(R6) ;R4, END_OF_SEGMENT, LENGTH_OF_SEGMENT ; 01631 TSTB 2(R3) ;2(R3) ; 0164& BEQL 2$ ;2$ ;/ INCW (R2) ;(R2) ; 01661 DECL 4(R2) ;4(R2) ;3 0167? MOVB 2(R3), @4(R2) ;2(R3), @4(R2) ; 0165E2$: MOVL 4(R6), R0 ;LENGTH_OF_SEGMENT, R0 ; 01736 ADDW2 R0, (R2) ;R0, (R2) ; 01728 SUBL2 R0, 4(R2) ;R0, 4(R2) ; 0174D MOVC3 R0, (R4), @4(R2) ;R0, (R4), @4(R2) ; 0176( RET ; ; 0139:; Routine Size: 73 bytes, Routine Base: $CODE$ + 002B ; 0180 ; 0181 8; 0182 GLOBAL ROUTINE save_filename (qio4block_ptr) = ; 0183 ; 0184 BEGIN ; 0185 ; 0186 BIND9; 0187 qioblock = .qioblock_ptr:9; 0188 BLOCK [,BYTE],F; 0189 name_descr = qioblock [qioblock$q_name]::; 0190 BLOCK [8,BYTE]; ; 0191 ; 0192 OWN; 0193 status:; 0194 LONG; ; 0195 ; 0196 @; 0197 status = release_record (qioblock [qioblock$l_uic],F; 01985 qioblock [qioblock$l_blksalloc],E; 0199 qioblock [qioblock$l_blksused],2; 0200 name_descr);; 0201 RETURN .status;; 0202 END; .PSECT $OWN$,NOEXE,2;STATUSU.18: .BLKB 4 .PSECT $CODE$,NOWRT,2P .ENTRY SAVE_FILENAME, ^M<> ;SAVE_FILENAME, Save nothing ; 0182G ADDL3 #28, 4(AP), R0 ;#28, QIOBLOCK_PTR, R0 ; 0189+ PUSHL R0 6 ;R0 ; 0197L ADDL3 #12, 4(AP), -(SP) ;#12, QIOBLOCK_PTR, -(SP) ; 0199L ADDL3 #16, 4(AP), -(SP) ;#16, QIOBLOCK_PTR, -(SP) ; 0198J ADDL3 #8, 4(AP), -(SP) ;#8, QIOBLOCK_PTR, -(SP) ; 0197D CALLS #4, G^RELEASE_RECORD ;#4, RELEASE_RECORD ;3 MOVL R0, W^U.18 ;R0, U.18 ;( RET ; ; 0182:; Routine Size: 37 bytes, Routine Base: $CODE$ + 0074; 0203 END7; 0204 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;U; $PLIT$ 8 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 153 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)T; $OWN$ 12 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read8;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 4 0 395; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Compilation Complete .ENDww­`‚3 ¹ Œ;; 0001 MODULE index_file_routines ( IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 0005 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 EXTERNAL; 0078 9 bitmap_ptr:; 0079 LONG,; 0080 cluster_factor:; 0081 LONG, ; 0082 current_header_vbn:; 0083 LONG,; 0084 disk_acp_channel:; 0085 LONG,; 0086 first_header_vbn:; 0087 LONG,!; 0088 first_vbn_in_buffer:; 0089 LONG,; 0090 free_buffer_mask:; 0091 BITVECTOR [32],; 0092 header_buffer_ptr:; 0093 LONG,; 0094 header_count:; 0095 LONG,; 0096 index_bitmap_:size:; 0097 WORD,; 0098 index_bitmap_vbn:; 0099 LONG,; 0100 index_file_iosb:; 0101 VECTOR [4,WORD],; 0102 last_header_vbn:; 0103 LONG, ; 0104 last_vbn_in_buffer:; 0105 LONG,; 0106 mfd_header: ; 0107 BLOCK [512,BYTE],; 0108 uic_flags:; 0109 BITVECTOR [32],; 0110 uic_group:; 0111 WORD,; 0112 uic_member:; 0113 WORD,$; 0114 volume_structure_le;vel:; 0115 BYTE,; 0116 worst_error:; 0117 LONG; ; 0118 ; 0119 ; 0120 EXTERNAL LITERAL; 0121 owner_badlevel,; 0122 owner_fnmabt,; 0123 owner_success; ; 0124 ; 0125 EXTERNAL ROUTINEC; 0126 cached: ADDRESSING_MODE (GENERAL),C; 0127 checksum: ADDRESSING_MODE (GENERAL),C; 0128 checksum2: ADDRESSING_MODE (GENERAL),K; 0129 complete_filename: < ADDRESSING_MODE (GENERAL) NOVALUE,C; 0130 lib$get_vm: ADDRESSING_MODE (GENERAL),K; 0131 perform: ADDRESSING_MODE (GENERAL) NOVALUE,K; 0132 release_buffer: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0133 save_filename: ADDRESSING_MODE (GENERAL),K; 0134 update_cache: ADDRESSING_MODE (GENERAL) NOVALUE,K; 0135 update_filename: ADDRESSING_MODE (GENERAL) NOVALUE; ; 0136 =; 0137 OWN; 0138 atr:; 0139 BLOCK [12,BYTE],; 0140 fib:; 0141 BLOCK [10,BYTE],; 0142 fib_descr:; 0143 BLOCK [8,BYTE] ; 0144 INITIAL (10,fib),#; 0145 file_statistics_block:*; 0146 BLOCK [atr$s_statblk,BYTE]; ; 0147 ; 0148 -; 0149 GLOBAL ROUTINE access_index_file = ; 0150 ; 0151 BEGIN ; 0152 ; 0153 OWN; 0154 status:; 0155 LONG; ; 0156 C; 0157 > fib [fib$l_acctl] = 0; ! read access onlyK; 0158 fib [fib$w_fid_num] = fid$c_indexf; ! specify id of index file0; 0159 fib [fib$w_fid_seq] = fid$c_indexf;N; 0160 fib [fib$w_fid_rvn] = 1; ! no multiple volumes allowedO; 0161 atr [0,0,16,0] = atr$s_statblk; ! access file statistics block,; 0162 atr [2,0,16,0] = atr$c_statblk;4; 0163 atr [4,0,32,0] = file_statistics_block;D; 0164 atr [8,0,32,0] = 0; ! termina ?te request7; P 0165 IF (status = $qiow ( efn = buffer_count,E; P 0166 func = io$_access OR io$m_access,=; P 0167 chan = .disk_acp_channel,;; P 0168 iosb = index_file_iosb,5; P 0169 p1 = fib_descr,5; 0170 p5 = atr)) THEN-; 0171 status = .index_file_iosb [0];; 0172 RETURN .status;; 0173 END; .TITLE INDEX_FILE_ROUT@INES .IDENT \V03-0000\ .PSECT $OWN$,NOEXE,2;ATRU.1: .BLKB 12;FIBU.2: .BLKB 10 .BLKB 2 ;FIB_DESCR)U.3: .LONG 10 ; ;' .ADDRESS U.2 ; ;;FILE_STATISTICS_BLOCKU.4: .BLKB 32;STATUSU.6: .BLKB 4[ .EXTRN BITMAP_PTR, CLUSTER_FACTOR, CURRENT_HEADER_VBN, DISK_ACP_CHANNEL, FIRST_HEADER_VBNb .EXTRN FIRST_VBN_IN_BUFFER, FREE_BUFFER_MASK, HEADER_BUFFER_PTR, HEADER_COUNT, INDEX_BITMAP_SIZE[ .EXTRN INDEX_BITMAP_VBN, I ANDEX_FILE_IOSB, LAST_HEADER_VBN, LAST_VBN_IN_BUFFER, MFD_HEADER^ .EXTRN UIC_FLAGS, UIC_GROUP, UIC_MEMBER, VOLUME_STRUCTURE_LEVEL, WORST_ERROR, OWNER_BADLEVEL` .EXTRN OWNER_FNMABT, OWNER_SUCCESS, CACHED, CHECKSUM, CHECKSUM2, COMPLETE_FILENAME, LIB$GET_VMX .EXTRN PERFORM, RELEASE_BUFFER, SAVE_FILENAME, UPDATE_CACHE, UPDATE_FILENAME, SYS$QIOW .PSECT $CODE$,NOWRT,2T .ENTRY ACCESS_INDEX_FILE, ^M ;ACCESS_INDEX_FILE, Save R2 ; 01491 MOVAB W^U.6, R2 ;U.6, R2 B ;A MOVL #65537, -48(R2) ;#65537, FIB+4 ; 0158: MOVW #1, -44(R2) ;#1, FIB+8 ; 0160@ MOVL #589856, -64(R2) ;#589856, ATR ; 0161N MOVAB -32(R2), -60(R2) ;FILE_STATISTICS_BLOCK, ATR+4 ; 01633 CLRQ -56(R2) ;ATR+8 ; 01641 CLRL -(SP) ;-(SP) ; 0170, PUSHAB -64(R2) ;ATR ;, CLRQ -(SP) ;-(SP) ;, CLRL -(SP) C ;-(SP) ;2 PUSHAB -40(R2) ;FIB_DESCR ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;6 MOVZBL #114, -(SP) ;#114, -(SP) ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;7 MOVL R0, (R2) ;R0, STATUS ; 0165. BLBC R0, 1$ ;R0, 1$ D ;Q MOVZWL W^INDEX_FILE_IOSB, (R2) ;INDEX_FILE_IOSB, STATUS ; 0171:1$: MOVL (R2), R0 ;STATUS, R0 ; 0151( RET ; ; 0149:; Routine Size: 85 bytes, Routine Base: $CODE$ + 0000 ; 0174 ; 0175 1; 0176 ROUTINE ods_level_1 (home_block_ptr) = ; 0177 ; 0178 BEGIN ; 0179 ; 0180 BIND;; 0181 home_block = .home_block_ptr:<; 0182 E BLOCK [512,BYTE]; ; 0183 P; 0184 IF .home_block [hm2$b_struclev] EQL 1 AND ! this is an ods 1 diskK; 0185 .home_block [hm1$w_cluster] EQL 1 AND ! cluster size = 1V; 0186 .home_block [hm1$l_ibmaplbn] NEQ 0 AND ! lbn of bitmap file non zero[; 0187 .home_block [hm1$w_maxfiles] NEQ 0 AND ! maximum files on volume non zero`; 0188 .home_block [hm1$w_ibmapsize] NEQ 0 AND ! size of index file bitmap is non zero&; 0189 checksum2 (homFe_block,U; 0190 $BYTEOFFSET (hm1$w_checksum1)) AND ! and both check sums are ok&; 0191 checksum2 (home_block,9; 0192 $BYTEOFFSET (hm1$w_checksum2)) THENT; 0193 RETURN true ! assume this is home block; 0194 ELSE; 0195 RETURN false;; 0196 END; ;ODS_LEVEL_1<U.7: .WORD ^M ;Save R2,R3 ; 0176< MOVAB G^CHECKSUM2, R3 ;CHECKSUM2, R3 ;? G MOVL 4(AP), R2 ;HOME_BLOCK_PTR, R2 ; 01789 CMPB 13(R2), #1 ;13(R2), #1 ; 0184& BNEQ 1$ ;1$ ;8 CMPW 8(R2), #1 ;8(R2), #1 ; 0185& BNEQ 1$ ;1$ ;1 TSTL 2(R2) ;2(R2) ; 0186& BEQL 1$ ;1$ ;1 TSTW 6(R2) ;6(R2) ; 0187& BEQL 1$ ;1$ ;/ TSTW (R2) ;(R2) ; 0188& BEQL H 1$ ;1$ ;- PUSHL #58 ;#58 ; 0189& PUSHL R2 ;R2 ;5 CALLS #2, (R3) ;#2, CHECKSUM2 ;. BLBC R0, 1$ ;R0, 1$ ;; MOVZWL #510, -(SP) ;#510, -(SP) ; 0191& PUSHL R2 ;R2 ;5 CALLS #2, (R3) ;#2, CHECKSUM2 ;. BLBC R0, 1$ ;R0, 1$ ;3 MOVL #1, R0 ;#1, R0 ; 0178# RET ; I ;)1$: CLRL R0 ;R0 ;( RET ; ; 0176:; Routine Size: 69 bytes, Routine Base: $CODE$ + 0055 ; 0197 ; 0198 /; 0199 ROUTINE ods_level_2 (home_block_ptr,;; 0200 virtual_block_number_ptr) = ; 0201 ; 0202 BEGIN ; 0203 ; 0204 BIND;; 0205 home_block = .home_block_ptr:<; 0206 BLOCK [512,BYTE],E; 0207 J virtual_block_number = .virtual_block_number_ptr:0; 0208 BYTE; ; 0209 ; 0210 R; 0211 IF .home_block [hm2$b_struclev] EQL 2 AND ! this is an ods 2 volumeV; 0212 .home_block [hm2$w_homevbn] EQL ! vbn of home block points to?; 0213 .virtual_block_number AND ! hereV; 0214 .home_block [hm2$l_altidxlbn] NEQ 0 AND ! lbn of alternate index fileM; 0215 K ! header is non zeroU; 0216 .home_block [hm2$w_cluster] NEQ 0 AND ! cluster factor is non zeroK; 0217 .home_block [hm2$w_homevbn] NEQ 0 AND ! vbn start at one]; 0218 .home_block [hm2$w_altidxvbn] NEQ 0 AND ! vbn of alternate index file header]; 0219 ! can't be zero since vbn start at 1S; 0220 .home_block [hm2$w_ibmapvbn] NEQ 0 AND ! vbn of index file bitmapS; 0221 .home_block [hLm2$l_ibmaplbn] NEQ 0 AND ! lbn of index file bitmapX; 0222 .home_block [hm2$l_maxfiles] NEQ 0 AND ! volume must permit a non zeroJ; 0223 ! number of files^; 0224 .home_block [hm2$w_ibmapsize] NEQ 0 AND ! size of index file bit map (blocks)T; 0225 ! must be greater than zeroU; 0226 .home_block [hm2$w_resfiles] NEQ 0 AND ! there must be at least oneH; 0227 M ! reserved fileW; 0228 checksum2 (home_block, ! both check sums must be good7; 0229 $BYTEOFFSET (hm1$w_checksum1)) AND&; 0230 checksum2 (home_block,8; 0231 $BYTEOFFSET (hm1$w_checksum2)) THEN\; 0232 RETURN true ! this is a ods 2 volume home block; 0233 ELSE; 0234 RETURN false;; 0235 END; ;ODS_LEVEL_2<U.9: .WO NRD ^M ;Save R2,R3 ; 0199< MOVAB G^CHECKSUM2, R3 ;CHECKSUM2, R3 ;? MOVL 4(AP), R2 ;HOME_BLOCK_PTR, R2 ; 02029 CMPB 13(R2), #2 ;13(R2), #2 ; 0211& BNEQ 1$ ;1$ ;J MOVZBL @8(AP), R0 ;@VIRTUAL_BLOCK_NUMBER_PTR, R0 ; 02124 CMPW R0, 16(R2) ;R0, 16(R2) ;& BNEQ 1$ ;1$ ;1 TSTL 8(R2) ;8(R2) ; 0214& B OEQL 1$ ;1$ ;3 TSTW 14(R2) ;14(R2) ; 0216& BEQL 1$ ;1$ ;3 TSTW 16(R2) ;16(R2) ; 0217& BEQL 1$ ;1$ ;3 TSTW 20(R2) ;20(R2) ; 0218& BEQL 1$ ;1$ ;3 TSTW 22(R2) ;22(R2) ; 0220& BEQL 1$ ;1$ ;3 TSTL 24(R2) ;24(R2) ; 0221& BEQL 1$ ;1$ ; P3 TSTL 28(R2) ;28(R2) ; 0222& BEQL 1$ ;1$ ;3 TSTW 32(R2) ;32(R2) ; 0224& BEQL 1$ ;1$ ;3 TSTW 34(R2) ;34(R2) ; 0226& BEQL 1$ ;1$ ;- PUSHL #58 ;#58 ; 0228& PUSHL R2 ;R2 ;5 CALLS #2, (R3) ;#2, CHECKSUM2 ;. BLBC R0, 1$ ;R0, 1$ ;; MOVZWL #510, -(SP) ;#Q510, -(SP) ; 0230& PUSHL R2 ;R2 ;5 CALLS #2, (R3) ;#2, CHECKSUM2 ;. BLBC R0, 1$ ;R0, 1$ ;3 MOVL #1, R0 ;#1, R0 ; 0202# RET ; ;)1$: CLRL R0 ;R0 ;( RET ; ; 0199;; Routine Size: 104 bytes, Routine Base: $CODE$ + 009A ; 0236 ; 0237 =; 0238 GLOBAL ROUTINE read_home_block ( home_block_ptr) R= ; 0239 ; 0240 !++ ; 0241 !; 0242 ! FUNCTION: ; 0243 !N; 0244 ! This routine reads the first good home block of the currently:; 0245 ! open index file into the buffer supplied. ; 0246 !; 0247 ! IMPLICIT INPUTS: ; 0248 !1; 0249 ! disk_acp_channel LONGWORDH; 0250 ! channel used to access disk ACP ; 0251 !; 0252 ! OUTPUTS: ; 0253 !9; 0254 ! home_block BLOCK [512,BYTE]C; S0255 ! results of home block read ; 0256 !2; 0257 ! read_home_block PROCEDUREC; 0258 ! results of home block read ; 0259 ! ; 0260 !-- ; 0261 ; 0262 BEGIN ; 0263 ; 0264 BIND;; 0265 home_block = .home_block_ptr:9; 0266 BLOCK [,BYTE]; ; 0267 ; 0268 OWN; 0269 status:; 0270 LONG; ; 0271 ; T0272 !N; 0273 ! Keep looking at blocks until we get one that reads with no errors); 0274 ! and looks like a home block. ; 0275 ! ; 0276 7; 0277 INCR virtual_block_number FROM 2 TO 100 DO; 0278 BEGIN6; P 0279 status = $qiow ( efn = buffer_count,;; P 0280 chan = .disk_acp_channel,6; P 0281 func = io$_readvblk,9; P 0282 iosb = index_file_iosb,4; P 0283 p1 U = home_block,-; P 0284 p2 = 512,@; 0285 p3 = .virtual_block_number);; 0286 IF .status THEN/; 0287 status = .index_file_iosb [0];7; 0288 IF (.status AND ods_level_2 (home_block,<; 0289 virtual_block_number)) OR=; 0290 (.status AND ods_level_1 (home_block)) THEN; 0291 EXITLOOP; 0292 ELSE$; 0293 status = ss$_abort;; 0294 ENDV;; 0295 RETURN .status;; 0296 END; .PSECT $OWN$,NOEXE,2;STATUSU.14: .BLKB 4 .PSECT $CODE$,NOWRT,2R .ENTRY READ_HOME_BLOCK, ^M ;READ_HOME_BLOCK, Save R2 ; 02383 MOVAB W^U.14, R2 ;U.14, R2 ;+ PUSHL #2 ;#2 ; 027741$: CLRQ -(SP) ;-(SP) ; 0285, CLRL -(SP) ;-(SP) ;: PUSHL 12(SP) ;VIRTUAL_BLOCK_NUMBER ;6 MOVZWL #512, W -(SP) ;#512, -(SP) ;4 PUSHL 4(AP) ;HOME_BLOCK_PTR ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;2 MOVL R0, (R2) ;R0, STATUS ;7 BLBC (R2), 2$ ;STATUS, X2$ ; 0286Q MOVZWL W^INDEX_FILE_IOSB, (R2) ;INDEX_FILE_IOSB, STATUS ; 02877 BLBC (R2), 2$ ;STATUS, 2$ ; 0288& PUSHL SP ;SP ;4 PUSHL 4(AP) ;HOME_BLOCK_PTR ;1 CALLS #2, W^U.9 ;#2, U.9 ;. BLBS R0, 3$ ;R0, 3$ ;7 BLBC (R2), 2$ ;STATUS, 2$ ; 02904 PUSHL 4(AP) ;HOME_BLOCK_PTR ;1 CALLS #1, W^U.7 ;#1, U.7Y ;. BLBS R0, 3$ ;R0, 3$ ;<2$: MOVL #44, (R2) ;#44, STATUS ; 0293O AOBLEQ #100, (SP), 1$ ;#100, VIRTUAL_BLOCK_NUMBER, 1$ ; 0277:3$: MOVL (R2), R0 ;STATUS, R0 ; 0262( RET ; ; 0238;; Routine Size: 101 bytes, Routine Base: $CODE$ + 0102 ; 0297 ; 0298 A; 0299 ROUTINE inconsistent_area_offsets (header_block_ptr) = ; 0300 ; 0301 BEGIN ; Z 0302 ; 0303 BIND=; 0304 header_block = .header_block_ptr:9; 0305 BLOCK [,BYTE];E; 0306 IF .header_block [fh2$b_idoffset] LSSU fh2$c_length/2 ORU; 0307 .header_block [fh2$b_mpoffset] LSSU .header_block [fh2$b_idoffset] ORU; 0308 .header_block [fh2$b_acoffset] LSSU .header_block [fh2$b_mpoffset] ORU; 0309 .header_block [fh2$b_rsoffset] LSSU .header_block [fh2$b_acoffset] ORU; 0310 [.header_block [fh2$b_map_inuse] GTRU .header_block [fh2$b_acoffset] -W; 0311 .header_block [fh2$b_mpoffset] THEN; 0312 RETURN true; 0313 ELSE; 0314 RETURN false;; 0315 END;;INCONSISTENT_AREA_OFFSETS9U.15: .WORD ^M ;Save R2 ; 0299A MOVL 4(AP), R0 ;HEADER_BLOCK_PTR, R0 ; 03018 CMPB (R0), #38 ;(R0), #38 ; 0306& BLSSU 1$ \ ;1$ ;; CMPB 1(R0), (R0) ;1(R0), (R0) ; 0307& BLSSU 1$ ;1$ ;= CMPB 2(R0), 1(R0) ;2(R0), 1(R0) ; 0308& BLSSU 1$ ;1$ ;= CMPB 3(R0), 2(R0) ;3(R0), 2(R0) ; 0309& BLSSU 1$ ;1$ ;8 MOVZBL 2(R0), R1 ;2(R0), R1 ; 03103 MOVZBL 1(R0), R2 ;1(R0), R2 ;. SUBL2 R2, R1 ;R2, R1 ;B CMPZV #]0, #8, 58(R0), R1 ;#0, #8, 58(R0), R1 ;& BLEQU 2$ ;2$ ;61$: MOVL #1, R0 ;#1, R0 ; 0301# RET ; ;)2$: CLRL R0 ;R0 ;( RET ; ; 0299:; Routine Size: 57 bytes, Routine Base: $CODE$ + 0167 ; 0316 ; 0317 2; 0318 ROUTINE invalid_map_area (map_area_ptr,8; 0319 header_block_ptr) = ; 0320 ; 0321 BEG ^IN ; 0322 ; 0323 BIND9; 0324 map_area = .map_area_ptr:9; 0325 BLOCK [,BYTE],=; 0326 header_block = .header_block_ptr:9; 0327 BLOCK [,BYTE]; ; 0328 1; 0329 IF .map_area [fm1$b_ex_rvn] NEQ 0 OR4; 0330 .map_area [fm1$b_countsize] NEQ 1 OR2; 0331 .map_area [fm1$b_lbnsize] NEQ 3 OR-; 0332 .map_area [fm1$b_inuse] GTRU -; 0333_ .map_area [fm1$b_avail] OR,; 0334 .map_area [fm1$b_avail] GTRUL; 0335 255 - (map_area + fm1$c_pointers - header_block) /2 THEN; 0336 RETURN true; 0337 ELSE!; 0338 RETURN false;; 0339 END;;INVALID_MAP_AREA;U.17: .WORD ^M<> ;Save nothing ; 0318> MOVL 4(AP), R0 ;MAP_AREA_PTR, R0 ; 03211 TSTB 1(R0) ;1(R0) ; 0329& BNEQ 1$ ;1$ ` ;8 CMPB 6(R0), #1 ;6(R0), #1 ; 0330& BNEQ 1$ ;1$ ;8 CMPB 7(R0), #3 ;7(R0), #3 ; 0331& BNEQ 1$ ;1$ ;= CMPB 8(R0), 9(R0) ;8(R0), 9(R0) ; 0332& BGTRU 1$ ;1$ ;I SUBL3 R0, 8(AP), R1 ;R0, HEADER_BLOCK_PTR, R1 ; 03350 SUBL2 #10, R1 ;#10, R1 ;. DIVL2 #2, R1 ;#2, R1 ;6 MOVAB 255(R1) a, R1 ;255(R1), R1 ;F CMPZV #0, #8, 9(R0), R1 ;#0, #8, 9(R0), R1 ; 0334& BLEQU 2$ ;2$ ;61$: MOVL #1, R0 ;#1, R0 ; 0321# RET ; ;)2$: CLRL R0 ;R0 ;( RET ; ; 0318:; Routine Size: 61 bytes, Routine Base: $CODE$ + 01A0 ; 0340 ; 0341 :; 0342 GLOBAL ROUTINE verify_header (header_block_ptr,7; 0343 b file_id_ptr) = ; 0344 ; 0345 BEGIN ; 0346 ; 0347 BIND=; 0348 header_block = .header_block_ptr:9; 0349 BLOCK [,BYTE],8; 0350 file_id = .file_id_ptr:9; 0351 BLOCK [,BYTE]; ; 0352 ; 0353 !K; 0354 ! Make sure that header structure level matches volume structure; 0355 ! level. ; 0356 ! ; 0357 O; 0358 IF .h ceader_block [fh2$b_struclev] NEQ .volume_structure_level THEN%; 0359 RETURN invalid_header;2; 0360 IF .volume_structure_level EQL 2 THENG; 0361 BEGIN ! {* level 2 volume *} ; 0362 !I; 0363 ! Check the area offsets and retrival pointer use counts for; 0364 ! consistency. ; 0365 !?; 0366 IF inconsistent_area_offsets (header_block) THEN'; 0367 RETURN invalid_header; ; 0368 !P; 0369 ! At this poi dnt we have verified that this block was a valid header; 0370 ! at one time. ; 0371 ! ; 0372 9; 0373 IF .header_block [fh2$w_fid_num] EQL 0 AND:; 0374 .header_block [fh2$b_fid_nmx] EQL 0 THEN+; 0375 RETURN deleted_header;2; 0376 IF NOT checksum (header_block) THEN+; 0377 RETURN deleted_header; ; 0378 !4; 0379 ! Check the file id and sequence number ; 0380 !K; 0381 IF .header_block [fh2$w_fid_num] NEQ .f eile_id [fid$w_num] ORK; 0382 .header_block [fh2$b_fid_nmx] NEQ .file_id [fid$b_nmx] ORM; 0383 .header_block [fh2$w_fid_seq] NEQ .file_id [fid$w_seq] THEN+; 0384 RETURN deleted_header;O; 0385 END ! {* level 2 volume *}; 0386 ELSEO; 0387 BEGIN ! {* level 1 volume *}2; 0388 IF invalid_map_area (header_block +9; 0389 2*.header_block [f fh1$b_mpoffset],*; 0390 header_block) THEN(; 0391 RETURN invalid_header; ; 0392 !H; 0393 ! This block was a valid header at one time. Check file id. ; 0394 !:; 0395 IF .header_block [fh1$w_fid_num] EQL 0 THEN*; 0396 RETURN deleted_header;2; 0397 IF NOT checksum (header_block) THEN*; 0398 RETURN deleted_header;K; 0399 IF .header_block [fh1$w_fid_num] NEQ .file_id [fid$w_num] ORM; 0400 .header_gblock [fh1$w_fid_seq] NEQ .file_id [fid$w_seq] THEN*; 0401 RETURN deleted_header;O; 0402 END; ! {* level 1 volume *}!; 0403 RETURN valid_header;; 0404 END;X .ENTRY VERIFY_HEADER, ^M ;VERIFY_HEADER, Save R2,R3,R4 ; 0342: MOVAB G^CHECKSUM, R4 ;CHECKSUM, R4 ;A MOVQ 4(AP), R2 ;HEADER_BLOCK_PTR, R2 ; 0345] CMPB 7(R2), W^VOLUME_STRUCTURE_LEVEL h ;7(R2), VOLUME_STRUCTURE_LEVEL ; 0358& BNEQ 6$ ;6$ ;W CMPB W^VOLUME_STRUCTURE_LEVEL, #2 ;VOLUME_STRUCTURE_LEVEL, #2 ; 0360& BNEQ 2$ ;2$ ;+ PUSHL R2 ;R2 ; 03663 CALLS #1, W^U.15 ;#1, U.15 ;. BLBS R0, 6$ ;R0, 6$ ;1 TSTW 8(R2) ;8(R2) ; 0373& BNEQ 1$ ;1$ ;3 TSTB 13(R2) ;13(R2) i ; 0374& BEQL 4$ ;4$ ;.1$: PUSHL R2 ;R2 ; 03764 CALLS #1, (R4) ;#1, CHECKSUM ;. BLBC R0, 4$ ;R0, 4$ ;; CMPW 8(R2), (R3) ;8(R2), (R3) ; 0381& BNEQ 4$ ;4$ ;? CMPB 13(R2), 5(R3) ;13(R2), 5(R3) ; 0382& BNEQ 4$ ;4$ ;? CMPW 10(R2), 2(R3) ;10(R2), 2(R3) ; 0383& BRB 3$ ;3$ j ;.2$: PUSHL R2 ;R2 ; 03888 MOVZBL 1(R2), R0 ;1(R2), R0 ; 03896 PUSHAW (R2)[R0] ;(R2)[R0] ; 03883 CALLS #2, W^U.17 ;#2, U.17 ;. BLBS R0, 6$ ;R0, 6$ ;1 TSTW 2(R2) ;2(R2) ; 0395& BEQL 4$ ;4$ ;+ PUSHL R2 ;R2 ; 03974 CALLS #1, (R4) ;#1, CHECKSUM ;. BLBC R0, 4$ ;R0, 4$ k ;; CMPW 2(R2), (R3) ;2(R2), (R3) ; 0399& BNEQ 4$ ;4$ ;= CMPW 4(R2), 2(R3) ;4(R2), 2(R3) ; 0400)3$: BEQL 5$ ;5$ ;64$: MOVL #2, R0 ;#2, R0 ; 0401# RET ; ;65$: MOVL #1, R0 ;#1, R0 ; 0345# RET ; ;.6$: CLRL R0 ;R0 ; 0342# RET ; ;;; Routine Silze: 130 bytes, Routine Base: $CODE$ + 01DD ; 0405 ?; 0406 GLOBAL ROUTINE process_home_block (home_block_ptr) = ; 0407 ; 0408 BEGIN ; 0409 ; 0410 BIND;; 0411 home_block = .home_block_ptr:9; 0412 BLOCK [,BYTE]; ; 0413 ; 0414 OWN; 0415 status:; 0416 LONG; ; 0417 C; 0418 volume_structure_level = .home_block [hm2$b_struclev];2; 0419 IF .volume_structur me_level NEQ 2 THEN&; 0420 status = owner_badlevel; 0421 ELSE; 0422 BEGIN<; 0423 cluster_factor = .home_block [hm2$w_cluster];A; 0424 index_bitmap_size = .home_block [hm2$w_ibmapsize];:; 0425 index_bitmap_vbn = 4 * .cluster_factor + 1;O; 0426 first_header_vbn = 4 * .cluster_factor + .index_bitmap_size + 1;6; 0427 current_header_vbn = .first_header_vbn;&; 0428 status = owner_success;; 0429 END;; 0430 RnETURN .status;; 0431 END; .PSECT $OWN$,NOEXE,2;STATUSU.25: .BLKB 4 .PSECT $CODE$,NOWRT,2V .ENTRY PROCESS_HOME_BLOCK, ^M ;PROCESS_HOME_BLOCK, Save R2 ; 04063 MOVAB W^U.25, R2 ;U.25, R2 ;? MOVL 4(AP), R0 ;HOME_BLOCK_PTR, R0 ; 0408^ MOVB 13(R0), W^VOLUME_STRUCTURE_LEVEL ;13(R0), VOLUME_STRUCTURE_LEVEL ; 0418W CMPB W^VOLUME_STRUCTURE_LEVEL, #2 ;VOLUME_STRUCTURE_LEVEL, #2 o ; 0419& BEQL 1$ ;1$ ;O MOVL #OWNER_BADLEVEL, (R2) ;#OWNER_BADLEVEL, STATUS ; 0420+ BRB 2$ ;2$ ; 0419S1$: MOVZWL 14(R0), W^CLUSTER_FACTOR ;14(R0), CLUSTER_FACTOR ; 0423V MOVW 32(R0), W^INDEX_BITMAP_SIZE ;32(R0), INDEX_BITMAP_SIZE ; 0424I MOVL W^CLUSTER_FACTOR, R1 ;CLUSTER_FACTOR, R1 ; 0425O ASHL #2, R1, W^INDEX_BITMAP_VBN ;#2, R1, INDEX_BITMAP_VBN p ;A INCL W^INDEX_BITMAP_VBN ;INDEX_BITMAP_VBN ;O MOVZWL W^INDEX_BITMAP_SIZE, R0 ;INDEX_BITMAP_SIZE, R0 ; 0426T MOVAL 1(R0)[R1], W^FIRST_HEADER_VBN ;1(R0)[R1], FIRST_HEADER_VBN ;Z MOVL W^FIRST_HEADER_VBN, - ;FIRST_HEADER_VBN, CURRENT_HEADER_VBN ; 0427. W^CURRENT_HEADER_VBN ; ;M MOVL #OWNER_SUCCESS, (R2) ;#OWNER_SUCCESS, STATUS ; 0428:2$: MOVL (R2), R0 ;STATUS, Rq0 ; 0408( RET ; ; 0406:; Routine Size: 90 bytes, Routine Base: $CODE$ + 025F ; 0432 ; 0433 -; 0434 GLOBAL ROUTINE read_index_bitmap = ; 0435 ; 0436 BEGIN ; 0437 ; 0438 OWN; 0439 status:; 0440 LONG; ; 0441 F; 0442 IF (status = lib$get_vm (%REF (512 * .index_bitmap_size),7; 0443 bitmap_ptr)) THEN; 0444 BEGIN6; P 0445 status = $qiow r( efn = buffer_count,;; P 0446 chan = .disk_acp_channel,6; P 0447 func = io$_readvblk,9; P 0448 iosb = index_file_iosb,5; P 0449 p1 = .bitmap_ptr,B; P 0450 p2 = 512 * .index_bitmap_size,<; 0451 p3 = .index_bitmap_vbn);; 0452 IF .status THEN/; 0453 status = .index_file_iosb [0];; 0454 END;; 0455 s RETURN .status;; 0456 END; .PSECT $OWN$,NOEXE,2;STATUSU.27: .BLKB 4 .PSECT $CODE$,NOWRT,2T .ENTRY READ_INDEX_BITMAP, ^M ;READ_INDEX_BITMAP, Save R2 ; 04343 MOVAB W^U.27, R2 ;U.27, R2 ;. SUBL2 #4, SP ;#4, SP ;; PUSHAB W^BITMAP_PTR ;BITMAP_PTR ; 0442J MOVZWL W^INDEX_BITMAP_SIZE, R0 ;INDEX_BITMAP_SIZE, R0 ;: ASHL #9, R0, 4(SP) ;#9, R0, 4(SP) t ;, PUSHAB 4(SP) ;4(SP) ;= CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;1 CLRQ -(SP) ;-(SP) ; 0451, CLRL -(SP) ;-(SP) ;A PUSHL W^INDEX_BITMAP_VBN ;INDEX_BITMAP_VBN ;J MOVZWL W^INDEX_BITMAP_SIZE, R0 ;INDEX_BITMAP_SIZE, R0 ;: ASHL #9, R0, -(SP) ;#9, R0, -(S uP) ;6 PUSHL W^BITMAP_PTR ;BITMAP_PTR ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;2 MOVL R0, (R2) ;R0, STATUS ;7 BLBC (R2), 1$ ;STATUS, 1$ ; 0452vQ MOVZWL W^INDEX_FILE_IOSB, (R2) ;INDEX_FILE_IOSB, STATUS ; 0453:1$: MOVL (R2), R0 ;STATUS, R0 ; 0436( RET ; ; 0434:; Routine Size: 97 bytes, Routine Base: $CODE$ + 02B9 ; 0457 ; 0458 7; 0459 ROUTINE leftmost_set_bit_of (longword_ptr) = ; 0460 ; 0461 BEGIN ; 0462 ; 0463 BIND9; 0464 longword = .longword_ptr::; 0465 BITwVECTOR [32]; ; 0466 ,; 0467 DECR bit_number FROM 31 TO 0 DO4; 0468 IF .longword [.bit_number] EQL 1 THEN$; 0469 RETURN .bit_number;; 0470 RETURN 0;; 0471 END;;LEFTMOST_SET_BIT_OF;U.28: .WORD ^M<> ;Save nothing ; 0459< MOVL #31, R1 ;#31, BIT_NUMBER ; 0467X1$: EXTZV R1, #1, @4(AP), R0 ;BIT_NUMBER, #1, @LONGWORD_PTR, R0 ; 0468. CMPL R0, #1 ;R0, #1 ;& BNExQ 2$ ;2$ ;: MOVL R1, R0 ;BIT_NUMBER, R0 ; 0469# RET ; ;=2$: SOBGEQ R1, 1$ ;BIT_NUMBER, 1$ ; 0467+ CLRL R0 ;R0 ; 0461( RET ; ; 0459:; Routine Size: 26 bytes, Routine Base: $CODE$ + 031A ; 0472 ; 0473 0; 0474 GLOBAL ROUTINE find_last_header_vbn = ; 0475 ; 0476 BEGIN ; 0477 ; 0478 BIND7; 0479 byitmap_array = .bitmap_ptr::; 0480 VECTOR [,LONG]; ; 0481 ; 0482 OWN%; 0483 eof_from_index_header:; 0484 LONG,!; 0485 index_file_header:"; 0486 BLOCK [512,BYTE],; 0487 status:; 0488 LONG; ; 0489 ; 0490 BINDM; 0491 file_attributes = index_file_header [fh2$w_recattr]:F; 0492 BLOCK [fh2$s_recattr,BYTE]; ; 04 z93 ; 0494 !#; 0495 ! Read index file header ; 0496 !9; P 0497 IF ( status = $qiow ( efn = buffer_count,>; P 0498 chan = .disk_acp_channel,9; P 0499 func = io$_readvblk,<; P 0500 iosb = index_file_iosb,>; P 0501 p1 = index_file_header,0; P 0502 p2 = 512,D; 0503 p3 = .first_header_vbn)) THEN; 0504 { IF .status THEN/; 0505 status = .index_file_iosb [0];; 0506 IF .status THEN; 0507 BEGINO; 0508 eof_from_index_header <16,16> = .file_attributes [fat$w_efblkh];O; 0509 eof_from_index_header <0,16> = .file_attributes [fat$w_efblkl];M; 0510 DECR longword_number FROM 128 * .index_bitmap_size - 1 TO 0 DO; 0511 BEGIN?; 0512 IF .bitmap_array [.longword_number] NEQ 0 THEN; 0513 BEGINB; 0514 l|ast_header_vbn = MAXU (32 * .longword_number +W; 0515 leftmost_set_bit_of (bitmap_array [.longword_number]) +6; 0516 .first_header_vbn - 1,8; 0517 .eof_from_index_header);; 0518 EXITLOOP;; 0519 END;; 0520 END;&; 0521 status = owner_success;; 0522 END;; 0523 RETURN .status;; 0524 END; .PSECT $OWN$,NOEXE,2;EOF_FROM_INDEX_HEADERU.32: }.BLKB 4;INDEX_FILE_HEADERU.33: .BLKB 512;STATUSU.34: .BLKB 4U.35= U.33+20 .PSECT $CODE$,NOWRT,2e .ENTRY FIND_LAST_HEADER_VBN, ^M ; ;3 MOVAB W^U.34, R5 ;U.34, R5 ;B MOVL W^BITMAP_PTR, R4 ;BITMAP_PTR, R4 ; 04761 CLRQ -(SP) ;-(SP) ; 0503, CLRL -(SP) ;-(SP) ;A PUSHL W^FIR ~ST_HEADER_VBN ;FIRST_HEADER_VBN ;6 MOVZWL #512, -(SP) ;#512, -(SP) ;9 PUSHAB -512(R5) ;INDEX_FILE_HEADER ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;7 MOVL R0, (R5) ;R0, STATUS ; 0497. BLBC R0, 1$ ;R0, 1$ ;7 BLBC (R5), 6$ ;STATUS, 6$ ; 0504Q MOVZWL W^INDEX_FILE_IOSB, (R5) ;INDEX_FILE_IOSB, STATUS ; 0505:1$: BLBC (R5), 6$ ;STATUS, 6$ ; 0506\ MOVW -484(R5), -514(R5) ;FILE_ATTRIBUTES+8, EOF_FROM_INDEX_HEADER+2 ; 0508\ MOVW -482(R5), -516(R5) ;FILE_ATTRIBUTES+10, EOF_FROM_INDEX_HEADER ; 0509O MOVZWL W^INDEX_BITMA €P_SIZE, R2 ;INDEX_BITMAP_SIZE, R2 ; 05104 ASHL #7, R2, R2 ;#7, R2, R2 ;9 MOVL R2, R3 ;R2, LONGWORD_NUMBER ;& BRB 4$ ;4$ ;D2$: TSTL (R4)[R3] ;(R4)[LONGWORD_NUMBER] ; 0512& BEQL 4$ ;4$ ;E ASHL #5, R3, R2 ;#5, LONGWORD_NUMBER, R2 ; 0514A PUSHAL (R4)[R3] ;(R4)[LONGWORD_NUMBER] ; 05153 CALLS #1, W^U.28 ;#1, U.28 ;3 ADDL2 R2, R0 ;R2, R0 ; 0514M ADDL2 W^FIRST_HEADER_VBN, R0 ;FIRST_HEADER_VBN, R0 ; 0515+ DECL R0 ;R0 ; 0516I CMPL R0, -516(R5) ;R0, EOF_FROM_INDEX_HEADER ; 0514& BGEQU 3$ ;3$ ;D MOVL -516(R5), R0 ;EOF_FROM_INDEX_HEADER, R0 ;I3$: MOVL R0, W^LAST_HEADER_VBN ;R0, LAST_HEADER_VBN ;+ BRB 5$ ;5$ ; 0513A4$: SO‚BGEQ R3, 2$ ;LONGWORD_NUMBER, 2$ ; 0510P5$: MOVL #OWNER_SUCCESS, (R5) ;#OWNER_SUCCESS, STATUS ; 0521:6$: MOVL (R5), R0 ;STATUS, R0 ; 0476( RET ; ; 0474;; Routine Size: 155 bytes, Routine Base: $CODE$ + 0334 ; 0525 ; 0526 C; 0527 GLOBAL ROUTINE get_next_header ( current_header_vbn_ptr,C; 0528 header_address_ptr): NOVALUE = ; 0529 ; 0530 BEGƒIN ; 0531 ; 0532 BINDC; 0533 current_header_vbn = .current_header_vbn_ptr:0; 0534 LONG,?; 0535 header_address = .header_address_ptr:0; 0536 LONG,>; 0537 header_buffer = .header_buffer_ptr:C; 0538 BLOCKVECTOR [,512,BYTE]; ; 0539 ; 0540 OWN; 0541 buffer_index:; 0542 LONG,; 0543 s„tatus:; 0544 LONG; ; 0545 ; 0546 !; 0547 ! Revision History; 0548 ! ======== ======= ; 0549 !0; 0550 ! WVD001 - W. V. DIXON 2/17/83=; 0551 ! correct order of ch$fill arguments ; 0552 ! ; 0553 @; 0554 IF .current_header_vbn GTR .last_vbn_in_buffer THENH; 0555 BEGIN ! {* index file read *}=; 0556 first_vbn_in_buffer = .last_vbn_in_buffer + 1;@; 0557 last_vbn_in_buffe …r = MINU (.first_vbn_in_buffer +<; 0558 .header_count - 1,<; 0559 .last_header_vbn);:; P 0560 IF (status = $qiow ( efn = buffer_count,?; P 0561 chan = .disk_acp_channel,:; P 0562 func = io$_readvblk,=; P 0563 iosb = index_file_iosb,;; P 0564 p1 = header_buffer,C; P 0565 †p2 = (.last_vbn_in_buffer -L; P 0566 .first_vbn_in_buffer + 1)*512,H; 0567 p3 = .first_vbn_in_buffer)) THEN0; 0568 status = .index_file_iosb [0];"; 0569 IF NOT .status THENR; 0570 BEGIN ! {* block read failed *}@; 0571 INCR block_number FROM .first_vbn_in_buffer TO >; 0572 .last_vbn_in_buffer DOO; 0573 B‡EGIN ! {* read one block *}G; 0574 buffer_index = .block_number - .first_vbn_in_buffer;<; P 0575 IF (status = $qiow ( efn = buffer_count,A; P 0576 chan = .disk_acp_channel,<; P 0577 func = io$_readvblk,?; P 0578 iosb = index_file_iosb,U; P 0579 p1 = header_buffer [.buffer_index,0,0,0,0],3; P 0580 ˆ p2 = 512,C; 0581 p3 = .block_number)) THEN3; 0582 status = .index_file_iosb [0];&; 0583 IF NOT .status THEN ; 0584 CH$FILL (0,X; 0585 512, !WVD001X; 0586 CH$PTR (header_buffer [.buffer_index,0,0,0,0])); !WVD001O; 0587 END; ! {* read one block *}R; 0588 ‰ END; ! {* block read failed *}P; 0589 END; ! {* index file read *}G; 0590 buffer_index = .current_header_vbn - .first_vbn_in_buffer;D; 0591 header_address = header_buffer [.buffer_index,0,0,0,0];; 0592 END; .PSECT $OWN$,NOEXE,2 ;BUFFER_INDEXU.40: .BLKB 4;STATUSU.41: .BLKB 4 .PSECT $CODE$,NOWRT,2r .ENTRY GET_NEXT_HEADER, ^M ; ;O MOVAB W^FIRST_VBN_IN_BUFFER, R11 ;FIRST_VBN_IN_BUFFER, R11 ;M MOVAB W^LAST_VBN_IN_BUFFER, R10 ;LAST_VBN_IN_BUFFER, R10 ;3 MOVAB W^U.41, R9 ;U.41, R9 ;O MOVL W^HEADER_BUFFER_PTR, R6 ;HEADER_BUFFER_PTR, R6 ; 0530Y CMPL @4(AP), (R10) ;@CURRENT_HEADER_VBN_PTR, LAST_VBN_IN_BUFFER ; 0554& BGTR 1$ ‹ ;1$ ;& BRW 7$ ;7$ ;^1$: ADDL3 #1, (R10), (R11) ;#1, LAST_VBN_IN_BUFFER, FIRST_VBN_IN_BUFFER ; 0556D MOVL (R11), R1 ;FIRST_VBN_IN_BUFFER, R1 ; 0557H ADDL3 W^HEADER_COUNT, R1, R0 ;HEADER_COUNT, R1, R0 ;+ DECL R0 ;R0 ; 0558K CMPL R0, W^LAST_HEADER_VBN ;R0, LAST_HEADER_VBN ; 0557& BLEQU 2$ ;2$ ;F MOVL W^LAST_HEADER_VBN, R0 ;LA ŒST_HEADER_VBN, R0 ;A2$: MOVL R0, (R10) ;R0, LAST_VBN_IN_BUFFER ;1 CLRQ -(SP) ;-(SP) ; 0567, CLRL -(SP) ;-(SP) ;& PUSHL R1 ;R1 ;E SUBL3 R1, (R10), R0 ;R1, LAST_VBN_IN_BUFFER, R0 ;4 ASHL #9, R0, R0 ;#9, R0, R0 ;0 PUSHAB 512(R0) ;512(R0) ;& PUSHL R6 ;R6 ;, CLRQ -(SP) ;-(SP) ;? PUSHA B W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;7 MOVL R0, (R9) ;R0, STATUS ; 0560. BLBC R0, 3$ ;R0, 3$ ;Q MOVZWL W^INDEX_FILE_IOSB, (R9) ;INDEX_FILE_IOSB, STATUS ; 0568:3$: BLBS (R9), 7$ ;STATUS, 7$ Ž ; 0569C MOVL (R10), R8 ;LAST_VBN_IN_BUFFER, R8 ; 0572T SUBL3 #1, (R11), R7 ;#1, FIRST_VBN_IN_BUFFER, BLOCK_NUMBER ; 0571& BRB 6$ ;6$ ;c4$: SUBL3 (R11), R7, -4(R9) ;FIRST_VBN_IN_BUFFER, BLOCK_NUMBER, BUFFER_INDEX ; 05741 CLRQ -(SP) ;-(SP) ; 0581, CLRL -(SP) ;-(SP) ;/ PUSHL R7 ;BLOCK_NUMBER ;6 MOVZWL #512, -(SP) ;#512, -(SP) ;A ASHL #9, -4(R9), R0 ;#9, BUFFER_INDEX, R0 ;1 PUSHAB (R0)[R6] ;(R0)[R6] ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW ;7 MOVL R0, (R9) ;R0, STATUS ; 0575. BLBC R0, 5$ ;R0, 5$ ;Q MOVZWL W^INDEX_FILE_IOSB, (R9) ;INDEX_FILE_IOSB, STATUS ; 0582:5$: BLBS (R9), 6$ ;STATUS, 6$ ; 0583F ASHL #9, -4(R9), R0 ;#9, BUFFER_INDEX, R0 ; 0586Y MOVC5 #0, (SP), #0, #512, (R0)[R6] ;#0, (SP), #0, #512, (R0)[R6] ; 0584E6$: AOBLEQ R8, R7, 4$ ;R8, BLOCK_NUMBER, 4$ ; 0571p7$: SUBL3 (R11), @4(AP), -4(R9) ;FIRST_VBN_IN_BUFFER, @CURRENT‘_HEADER_VBN_PTR, BUFFER_INDEX ; 0590F ASHL #9, -4(R9), R0 ;#9, BUFFER_INDEX, R0 ; 0591G ADDL3 R6, R0, @8(AP) ;R6, R0, @HEADER_ADDRESS_PTR ;( RET ; ; 0527;; Routine Size: 219 bytes, Routine Base: $CODE$ + 03CF ; 0593 ; 0594 I; 0595 ROUTINE in_header_buffer (file_number_ptr,cache_address_ptr) = ; 0596 ; 0597 BEGIN ; 0598 ; 0599 BIND<; 0600 file_number =’ .file_number_ptr:1; 0601 WORD,>; 0602 cache_address = .cache_address_ptr:0; 0603 LONG,>; 0604 header_buffer = .header_buffer_ptr:C; 0605 BLOCKVECTOR [,512,BYTE]; ; 0606 ; 0607 OWN; 0608 status,; 0609 vbn:; 0610 LONG; ; 0611 8; 0612 vbn = .file_number + .first_header_vbn - 1;; 0613 sta“tus = false;1; 0614 IF .vbn GEQ .first_vbn_in_buffer AND1; 0615 .vbn LEQ .last_vbn_in_buffer THEN; 0616 BEGINS; 0617 cache_address = header_buffer [.vbn - .first_vbn_in_buffer,0,0,0,0];; 0618 status = true;; 0619 END;; 0620 RETURN .status;; 0621 END; .PSECT $OWN$,NOEXE,2;STATUSU.46: .BLKB 4;VBNU.47: .BLKB 4 .PSECT $CODE$,NOWRT,2;IN_HEADER_BUFFER9U.42: .WORD ^M ;Save R2 ” ; 05953 MOVAB W^U.46, R2 ;U.46, R2 ;B MOVZWL @4(AP), R0 ;@FILE_NUMBER_PTR, R0 ; 0612H ADDL2 W^FIRST_HEADER_VBN, R0 ;FIRST_HEADER_VBN, R0 ;8 MOVAB -1(R0), 4(R2) ;-1(R0), VBN ;1 CLRL (R2) ;STATUS ; 06136 MOVL 4(R2), R0 ;VBN, R0 ; 0614M CMPL R0, W^FIRST_VBN_IN_BUFFER ;R0, FIRST_VBN_IN_BUFFER ;& BLSS 1$ ;1$ ;P C•MPL R0, W^LAST_VBN_IN_BUFFER ;R0, LAST_VBN_IN_BUFFER ; 0615& BGTR 1$ ;1$ ;R SUBL2 W^FIRST_VBN_IN_BUFFER, R0 ;FIRST_VBN_IN_BUFFER, R0 ; 06174 ASHL #9, R0, R0 ;#9, R0, R0 ;c MOVAB @W^HEADER_BUFFER_PTR[R0], @8(AP) ;@HEADER_BUFFER_PTR[R0], @CACHE_ADDRESS_PTR ;7 MOVL #1, (R2) ;#1, STATUS ; 0618:1$: MOVL (R2), R0 ;STATUS, R0 ; 0597( RET ; – ; 0595:; Routine Size: 64 bytes, Routine Base: $CODE$ + 04AA ; 0622 ; 0623 :; 0624 GLOBAL ROUTINE qioast (qioblock_ptr): NOVALUE = ; 0625 ; 0626 BEGIN ; 0627 ; 0628 BIND9; 0629 qioblock = .qioblock_ptr:9; 0630 BLOCK [,BYTE],F; 0631 qioblock_iosb = qioblock [qioblock$q_iosb]::; 0632 VECTOR [,WORD],F; 0633 name_descr — = qioblock [qioblock$q_name]:9; 0634 BLOCK [,BYTE]; ; 0635 ; 0636 OWN; 0637 cache_address,; 0638 done,; 0639 issued_qio; ; 0640 ; 0641 DOZ; 0642 BEGIN ! {* loop until done or do qio *}; 0643 BINDI; 0644 header = .qioblock [qioblock$l_header]:9; 0645 BLOCK [,BYTE],N; 0646 ˜ ident_area = header + 2*.header[fh2$b_idoffset]::; 0647 VECTOR [,BYTE]; ; 0648 -; 0649 IF NOT .qioblock_iosb [0] THENK; 0650 BEGIN ! {* qio failed *}&; 0651 SIGNAL (owner_fnmabt,; 0652 1,$; 0653 name_descr,,; 0654 .qioblock_iosb [0],; 0655 0);+; 0656 release_buffer (qioblock);; ™0657 EXITLOOP;K; 0658 END ! {* qio failed *}; 0659 ELSE`; 0660 BEGIN ! {* qio successful or header cached *} ; 0661 !O; 0662 ! Add file name from this header to accumulated file name string ; 0663 !,; 0664 update_filename (qioblock); ; 0665 !5; 0666 ! Update file name status information. ; 0667 !I; 0668 IF .qioblock [qioblock$b_state] EQL š initial_segment THEN; 0669 BEGIN:; 0670 qioblock [qioblock$b_terminal] = %C'.';8; 0671 qioblock [qioblock$b_format] = %C']';B; 0672 IF .header [fh2$w_bk_fidnum] NEQ fid$c_mfd THEND; 0673 qioblock [qioblock$b_state] = filename_segment;; 0674 ENDO; 0675 ELSE IF .qioblock [qioblock$b_state EQL filename_segment] THEN; 0676 BEGIN8; 0677 qioblock [qioblock$b_format] = %C'.';C; 0678 › qioblock [qioblock$b_state] = directory_segment;; 0679 END; ; 0680 !N; 0681 ! If the current header is a directory, and it is not in cache,!; 0682 ! add it to cache. ; 0683 !1; 0684 IF .header [fh2$v_directory] ANDJ; 0685 NOT cached (header [fh2$w_fid_num],cache_address) THEN*; 0686 update_cache (header); ; 0687 !G; 0688 ! See if we have reached the end of the back link chain. ; 0689 !8; 0690 œ IF .header [fh2$w_bk_fidnum] EQL 0 THENP; 0691 BEGIN ! {* backlink is nil *}0; 0692 complete_filename (qioblock);6; 0693 perform (save_filename (qioblock));-; 0694 release_buffer (qioblock);; 0695 done = true;P; 0696 END ! {* backlink is nil *}E; 0697 ELSE IF .header [fh2$w_bk_fidnum] EQL fid$c_mfd THENW; 0698 BEGIN ! {* backlink points to mfd *}=; 0699 qioblock [qioblock$l_header] = mfd_header;.; 0700 update_filename (qioblock);0; 0701 complete_filename (qioblock);,; 0702 save_filename (qioblock);-; 0703 release_buffer (qioblock);; 0704 done = true;W; 0705 END ! {* backlink points to mfd *}; 0706 ELSEU; 0707 BEGIN ž ! {* still searchin links *} ; 0708 done = false; ; 0709 !O; 0710 ! Begin search for back link header. First look in cache, thenI; 0711 ! in header buffer. If all else fails, get it from disk. ; 0712 !J; 0713 IF cached (header [fh2$w_bk_fidnum],cache_address) THENI; 0714 BEGIN ! {* in cache *}(; 0715 issued_qio = false;C; 0716 qioblock [qioblock$l_header] = .c Ÿache_address;I; 0717 END ! {* in cache *}Y; 0718 ELSE if in_header_buffer (header [fh2$w_bk_fidnum],cache_address) THENQ; 0719 BEGIN ! {* in header_buffer *}(; 0720 issued_qio = false;C; 0721 qioblock [qioblock$l_header] = .cache_address;Q; 0722 END ! {* in header_buffer *}; 0723 ELSEJ; 0724   BEGIN ! {* issue qio *}'; 0725 issued_qio = true;G; P 0726 $qio ( efn = .qioblock [qioblock$b_event_flag],7; P 0727 chan = .disk_acp_channel,2; P 0728 func = io$_readvblk,3; P 0729 iosb = qioblock_iosb,.; P 0730 astprm = qioblock,,; P 0731 astadr = qioast,B; P 0732 p1 = qioblock [qioblock$t_header],); P ¡0733 p2 = 512,@; P 0734 p3 = .header [fh2$w_bk_fidnum] +<; 0735 .first_header_vbn - 1);Q; 0736 qioblock [qioblock$l_header] = qioblock [qioblock$t_header];J; 0737 END; ! {* issue qio *}P; 0738 END; ! {* still searching *}`; 0739 END; ! {* qio successful or header cached *}¢[; 0740 END ! {* loop until done or qio issued*; 0741 UNTIL .done OR .issued_qio;; 0742 END; .PSECT $OWN$,NOEXE,2;CACHE_ADDRESSU.52: .BLKB 4;DONEU.53: .BLKB 4 ;ISSUED_QIOU.54: .BLKB 4 .EXTRN SYS$QIO .PSECT $CODE$,NOWRT,2g .ENTRY QIOAST, ^M ; ;D MOVAB G^SAVE_FILENAME, R10 £ ;SAVE_FILENAME, R10 ;J MOVAB G^COMPLETE_FILENAME, R9 ;COMPLETE_FILENAME, R9 ;6 MOVAB G^CACHED, R8 ;CACHED, R8 ;F MOVAB G^UPDATE_FILENAME, R7 ;UPDATE_FILENAME, R7 ;D MOVAB G^RELEASE_BUFFER, R6 ;RELEASE_BUFFER, R6 ;3 MOVAB W^U.52, R5 ;U.52, R5 ;> MOVL 4(AP), R2 ;QIOBLOCK_PTR, R2 ; 0626;1$: MOVAB 4(R2), R4 ;4(R2), R4 ; 06446 MOVL (R4), ¤ R3 ;(R4), R3 ; 06429 BLBS 20(R2), 2$ ;20(R2), 2$ ; 06491 CLRL -(SP) ;-(SP) ; 0651: MOVZWL 20(R2), -(SP) ;20(R2), -(SP) ;. PUSHAB 28(R2) ;28(R2) ;& PUSHL #1 ;#1 ;: PUSHL #OWNER_FNMABT ;#OWNER_FNMABT ;= CALLS #5, G^LIB$SIGNAL ;#5, LIB$SIGNAL ;+ PUSHL R2 ;R2 ; 06569 CALLS #1, (R6) ;#1, RELE ¥ASE_BUFFER ;( RET ; ; 0650.2$: PUSHL R2 ;R2 ; 0664: CALLS #1, (R7) ;#1, UPDATE_FILENAME ;1 TSTB 1(R2) ;1(R2) ; 0668& BNEQ 3$ ;3$ ;? MOVW #11869, 2(R2) ;#11869, 2(R2) ; 06719 CMPW 66(R3), #4 ;66(R3), #4 ; 0672& BEQL 4$ ;4$ ;8 MOVB #1, 1(R2) ;#1, 1(R2) ; 0673+ BRB 4$ ¦ ;4$ ; 0668;3$: BLBC 1(R2), 4$ ;1(R2), 4$ ; 0675? MOVW #11778, 1(R2) ;#11778, 1(R2) ; 0678D4$: BBC #5, 53(R3), 5$ ;#5, 53(R3), 5$ ; 0684+ PUSHL R5 ;R5 ; 0685, PUSHAB 8(R3) ;8(R3) ;2 CALLS #2, (R8) ;#2, CACHED ;. BLBS R0, 5$ ;R0, 5$ ;+ PUSHL R3 ;R3 ; 0686A CALLS #1, G^UPDATE_CACHE ;#1, § UPDATE_CACHE ;65$: TSTW 66(R3) ;66(R3) ; 0690& BNEQ 6$ ;6$ ;+ PUSHL R2 ;R2 ; 0692< CALLS #1, (R9) ;#1, COMPLETE_FILENAME ;+ PUSHL R2 ;R2 ; 0693: CALLS #1, (R10) ;#1, SAVE_FILENAME ;& PUSHL R0 ;R0 ;8 CALLS #1, G^PERFORM ;#1, PERFORM ;+ BRB 7$ ;7$ ; 0694<6$: CMPW 66(R3), #4 ¨ ;66(R3), #4 ; 0697& BNEQ 8$ ;8$ ;F MOVAB W^MFD_HEADER, (R4) ;MFD_HEADER, (R4) ; 0699+ PUSHL R2 ;R2 ; 0700: CALLS #1, (R7) ;#1, UPDATE_FILENAME ;+ PUSHL R2 ;R2 ; 0701< CALLS #1, (R9) ;#1, COMPLETE_FILENAME ;+ PUSHL R2 ;R2 ; 0702: CALLS #1, (R10) ;#1, SAVE_FILENAME ;.7$: PUSHL R2 ;R2 © ; 07039 CALLS #1, (R6) ;#1, RELEASE_BUFFER ;7 MOVL #1, 4(R5) ;#1, DONE ; 0704- BRB 11$ ;11$ ; 069738$: CLRL 4(R5) ;DONE ; 0708+ PUSHL R5 ;R5 ; 0713. PUSHAB 66(R3) ;66(R3) ;2 CALLS #2, (R8) ;#2, CACHED ;. BLBS R0, 9$ ;R0, 9$ ;+ PUSHL R5 ;R5 ; 0718. PUSHAB 66(R3) ;66(R3) ª ;3 CALLS #2, W^U.42 ;#2, U.42 ;0 BLBC R0, 10$ ;R0, 10$ ;89$: CLRL 8(R5) ;ISSUED_QIO ; 0720A MOVL (R5), (R4) ;CACHE_ADDRESS, (R4) ; 0721- BRB 11$ ;11$ ; 0718@10$: MOVL #1, 8(R5) ;#1, ISSUED_QIO ; 07251 CLRQ -(SP) ;-(SP) ; 0735, CLRL -(SP) ;-(SP) ;4 MOVZWL 66(R3), R0 ;66(R3), R0 « ;H ADDL2 W^FIRST_HEADER_VBN, R0 ;FIRST_HEADER_VBN, R0 ;. PUSHAB -1(R0) ;-1(R0) ;6 MOVZWL #512, -(SP) ;#512, -(SP) ;0 PUSHAB 256(R2) ;256(R2) ;& PUSHL R2 ;R2 ;/ PUSHAB W^QIOAST ;QIOAST ;. PUSHAB 20(R2) ;20(R2) ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;6 MOVZBL (R2), -(SP) ¬ ;(R2), -(SP) ;: CALLS #12, G^SYS$QIO ;#12, SYS$QIO ;? MOVAB 256(R2), (R4) ;256(R2), (R4) ; 0736=11$: BLBS 4(R5), 12$ ;DONE, 12$ ; 07419 BLBS 8(R5), 12$ ;ISSUED_QIO, 12$ ;& BRW 1$ ;1$ ;,12$: RET ; ; 0624;; Routine Size: 319 bytes, Routine Base: $CODE$ + 04EA ; 0743 ; 0744 +; 0745 GLOBAL ROUTINE read_mfd_header = ­; 0746 ; 0747 BEGIN ; 0748 ; 0749 OWN; 0750 status:; 0751 LONG; ; 0752 8; P 0753 IF (status = $qiow ( efn = buffer_count,=; P 0754 chan = .disk_acp_channel,8; P 0755 func = io$_readvblk,;; P 0756 iosb = index_file_iosb,6; P 0757 p1 = mfd_header,/; P 0758 p2 = 512,>; P 0759 p3® = .first_header_vbn +?; 0760 fid$c_mfd - 1)) THEN-; 0761 status = .index_file_iosb [0];; 0762 RETURN .status;; 0763 END; .PSECT $OWN$,NOEXE,2;STATUSU.58: .BLKB 4 .PSECT $CODE$,NOWRT,2R .ENTRY READ_MFD_HEADER, ^M ;READ_MFD_HEADER, Save R2 ; 07453 MOVAB W^U.58, R2 ;U.58, R2 ;1 CLRQ -(SP) ;-(SP) ; 0760, CLRL -(SP) ;-(SP) ¯ ;T ADDL3 #3, W^FIRST_HEADER_VBN, -(SP) ;#3, FIRST_HEADER_VBN, -(SP) ;6 MOVZWL #512, -(SP) ;#512, -(SP) ;6 PUSHAB W^MFD_HEADER ;MFD_HEADER ;, CLRQ -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;( PUSHL #49 ;#49 ;A PUSHL W^DISK_ACP_CHANNEL ;DISK_ACP_CHANNEL ;& PUSHL #6 ;#6 ;< CALLS #12, G^SYS$QIOW ° ;#12, SYS$QIOW ;7 MOVL R0, (R2) ;R0, STATUS ; 0753. BLBC R0, 1$ ;R0, 1$ ;Q MOVZWL W^INDEX_FILE_IOSB, (R2) ;INDEX_FILE_IOSB, STATUS ; 0761:1$: MOVL (R2), R0 ;STATUS, R0 ; 0747( RET ; ; 0745:; Routine Size: 62 bytes, Routine Base: $CODE$ + 0629; 0764 END; 0765 ELUDOM .EXTRN LIB$SIGNAL; PSECT SUMMARY;#; Name Bytes ± Attributes;T; $OWN$ 632 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 1639 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 59 0 428; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST ²CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Compilation Complete .ENDww­ÀÆ†æ¸ Œ.; 0001 MODULE output ( IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 0005 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 LITERAL-; 0078 sts_v_terminal = 0,-; 0079 sts_v_vt100 = 1,-; 0080 sts_v_pause = 2; ; 0081 ; 0082 EXTERNAL; 0083 current_tim ³e:; 0084 VECTOR [2,LONG],; 0085 device_name_descr:; 0086 BLOCK [8,BYTE],; 0087 index_file_iosb:; 0088 VECTOR [,WORD]; ; 0089 ; 0090 EXTERNAL ROUTINEK; 0091 cli$get_value: ADDRESSING_MODE (GENERAL),K; 0092 cli$present: ADDRESSING_MODE (GENERAL),K; 0093 ots$cvt_ti_l: ADDRESSING_MODE (GENERAL),K; 0094 return_record: ADDRESSING_MO´DE (GENERAL); ; 0095 ; 0096 OWN; 0097 reply_buffer:(; 0098 VECTOR [reply_size,BYTE],; 0099 output_es:*; 0100 VECTOR [nam$c_maxrss,BYTE],; 0101 output_rs:*; 0102 VECTOR [nam$c_maxrss,BYTE],; 0103 output_nam:); P 0104 $NAM ( ess = nam$c_maxrss,&; P 0105 esa = output_es,); P 0106 rss = nam$c_maxrss,'; 0107 rsa = output_rs),; 0108 output_fab:&; P 0109 $FAB ( fac = (pµut,get),'; P 0110 nam = output_nam, ; 0111 rat = cr),; 0112 output_rab:'; P 0113 $RAB ( fab = output_fab,; P 0114 mbc = 4,; P 0115 mbf = 2,&; P 0116 rop = (rah,wbh),); P 0117 ubf = reply_buffer,(; 0118 usz = reply_size); ; 0119 ; 0120 OWN; 0121 last_uic:; 0122 LONG,; 0123 lines_per_page:; 0124 LONG,; 0125 lines_written:; 01¶26 LONG,; 0127 output_status:; 0128 BITVECTOR [32],; 0129 page_number:; 0130 LONG; ; 0131 ,; 0132 GLOBAL ROUTINE open_output_file = ; 0133 ; 0134 BEGIN ; 0135 ; 0136 OWN ; 0137 output_file_name:; 0138 BLOCK [8,BYTE]*; 0139 INITIAL (%X'020E0000',0),; 0140 status:; 0141 LONG; ; 0142 @; 0143 IF (status = cli$get_value ($DESCRIPTOR ('OUTPUT'),@; 0144 · output_file_name)) THEN; 0145 BEGINI; 0146 output_fab [fab$b_fns] = .output_file_name [dsc$w_length];J; 0147 output_fab [fab$l_fna] = .output_file_name [dsc$a_pointer];<; 0148 IF (status = $create (fab = output_fab)) THEN6; 0149 status = $connect (rab = output_rab);; 0150 END;; 0151 RETURN .status;; 0152 END; .TITLE OUTPUT .IDENT \V03-0000\ .PSECT $PLIT$,NOWRT,NOEXE,20P.AAB: .ASCII \¸OUTPUT\ ; ; .BLKB 2*P.AAA: .LONG 6 ; ;) .ADDRESS P.AAB ; ; .PSECT $OWN$,NOEXE,2 ;REPLY_BUFFERU.1: .BLKB 10 .BLKB 2 ;OUTPUT_ESU.2: .BLKB 252 ;OUTPUT_RSU.3: .BLKB 252 ;OUTPUT_NAM(U.4: .BYTE 2 ; ;% .BYTE 96 ; ;% .BYTE -4 ; ;$ .BYTE 0 ; ;' .ADDRESS U.3 ; ;$ .WORD 0 ; ¹ ;% .BYTE -4 ; ;$ .BYTE 0 ; ;' .ADDRESS U.2 ; ;$ .LONG 0 ; ;' .WORD 0[8] ; ;' .WORD 0[3] ; ;' .WORD 0[3] ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 º ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .WORD 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;' .LONG 0[2] ; ; ;OUTPUT_FAB(U.5: .BYTE 3 ; ;% .BYTE 80 ; ;$ .WO»RD 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .WORD 0 ; ;$ .BYTE 3 ; ;$ .BYTE 0 ; ;$ .LONG 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .BYTE 2 ; ;$ .BYTE 2 ; ;$ .LONG 0 ¼ ; ;$ .LONG 0 ; ;' .ADDRESS U.4 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .WORD 0 ; ;$ .LONG 0 ; ;$ .WORD 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ½ ;$ .WORD 0 ; ;$ .WORD 0 ; ;$ .LONG 0 ; ; ;OUTPUT_RAB(U.6: .BYTE 1 ; ;% .BYTE 68 ; ;$ .WORD 0 ; ;' .LONG 1536 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;' .WORD 0[3] ; ;$ .WORD 0 ; ;$ .LONG 0 ; ;$ .WORD ¾ 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;% .WORD 10 ; ;$ .WORD 0 ; ;' .ADDRESS U.1 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .LONG 0 ; ;$ .BYTE 0 ; ;$ .BYTE 0 ; ;$ .BYTE 2 ; ;$ .BYTE 4 ; ;$ .LONG 0 ¿ ; ;' .ADDRESS U.5 ; ;$ .LONG 0 ; ; ;LAST_UICU.7: .BLKB 4;LINES_PER_PAGEU.8: .BLKB 4;LINES_WRITTENU.9: .BLKB 4;OUTPUT_STATUSU.10: .BLKB 4 ;PAGE_NUMBERU.11: .BLKB 4;OUTPUT_FILE_NAME2U.13: .LONG 34471936, 0 ; ;;STATUSU.14: .BLKB 4c .EXTRN CURRENT_TIME, DEVICE_NAME_DESCR, INDEX_FILE_IOSB, CLI$GET_VALUE, CLI$PRESENT, OTS$CVT_TI_L/ .EXTRN RETURN_RECORD, SYS$CREATE, SY ÀS$CONNECT .PSECT $CODE$,NOWRT,2S .ENTRY OPEN_OUTPUT_FILE, ^M ;OPEN_OUTPUT_FILE, Save R2 ; 01323 MOVAB W^U.14, R2 ;U.14, R2 ;< PUSHAB -8(R2) ;OUTPUT_FILE_NAME ; 0143. PUSHAB W^P.AAA ;P.AAA ;C CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;Q MOVB -8(R2), -124(R2) ;OUTPUT_FILE Á_NAME, OUTPUT_FAB+52 ; 0146S MOVL -4(R2), -132(R2) ;OUTPUT_FILE_NAME+4, OUTPUT_FAB+44 ; 01477 PUSHAB -176(R2) ;OUTPUT_FAB ; 0148= CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;7 PUSHAB -96(R2) ;OUTPUT_RAB ; 0149? CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT ;2 MOVL R0, (R2) ;R0, STATÂUS ;:1$: MOVL (R2), R0 ;STATUS, R0 ; 0134( RET ; ; 0132:; Routine Size: 72 bytes, Routine Base: $CODE$ + 0000 ; 0153 ; 0154 *; 0155 GLOBAL ROUTINE output_control = ; 0156 ; 0157 BEGIN ; 0158 ; 0159 OWN$; 0160 ascii_lines_per_page:; 0161 BLOCK [8,BYTE]*; 0162 INITIAL (%X'020E0000',0),; 0163 device_class:; 0164 LONG,; 0165 devicÃe_type:; 0166 LONG,; 0167 class_length:; 0168 LONG,; 0169 type_length:; 0170 LONG,#; 0171 device_info_request: ; 0172 VECTOR [7,LONG]$; 0173 INITIAL ( WORD (4),0; 0174 WORD (dvi$_devclass),(; 0175 device_class,(; 0176 class_length,#; 0177 WORD(4),/; 0178 WORD (dvi$_devtype),'; 0179 devic Äe_type,'; 0180 type_length,; 0181 0),#; 0182 output_device_descr:; 0183 BLOCK [8,BYTE]A; 0184 INITIAL (%X'010E0000',output_nam [nam$t_dvi]+1),; 0185 status; ; 0186 ; 0187 CH$MOVE (1,6; 0188 CH$PTR (output_nam [nam$t_dvi]),C; 0189 CH$PTR (output_device_descr [dsc$w_length]));9; P 0190 IF (status = $getdvi (efn = buffer_count,@; P 0191 Å devnam = output_device_descr,<; P 0192 iosb = index_file_iosb,F; 0193 itmlst = device_info_request)) THEN6; 0194 IF (status = .index_file_iosb [0]) THEN; 0195 BEGINO; 0196 output_status [sts_v_terminal] = (.device_class EQL dc$_term);L; 0197 output_status [sts_v_vt100] = (.device_type EQL dt$_vt100);; 0198 END;4; 0199 IF .output_status [sts_v_terminal] THEN; 0200 BEGIN2 Æ; 0201 output_status [sts_v_pause] = true;#; 0202 lines_per_page = 22;; 0203 END; 0204 ELSE#; 0205 lines_per_page = 60;; 0206 page_number = 0;; 0207 last_uic = 0;9; 0208 IF cli$present ($DESCRIPTOR('NOPAUSE')) THEN3; 0209 output_status [sts_v_pause] = false;L; 0210 IF .status AND cli$present ($DESCRIPTOR('LINES_PER_PAGE')) THENJ; 0211 IF (status = cli$get_value ($DESCRIPTOR ('LINES_PER_PAGE'),G; 0212 Ç ascii_lines_per_page)) THENM; 0213 status = ots$cvt_ti_l (ascii_lines_per_page,lines_per_page);1; 0214 lines_written = .lines_per_page + 1;; 0215 RETURN .status;; 0216 END; .PSECT $PLIT$,NOWRT,NOEXE,21P.AAD: .ASCII \NOPAUSE\ ; ; .BLKB 1*P.AAC: .LONG 7 ; ;) .ADDRESS P.AAD ; ;7P.AAF: .ASCII \LINES_PER_PAGE\ ; ; .BLKB 2È+P.AAE: .LONG 14 ; ;) .ADDRESS P.AAF ; ;7P.AAH: .ASCII \LINES_PER_PAGE\ ; ; .BLKB 2+P.AAG: .LONG 14 ; ;) .ADDRESS P.AAH ; ; .PSECT $OWN$,NOEXE,2;ASCII_LINES_PER_PAGE2U.16: .LONG 34471936, 0 ; ; ;DEVICE_CLASSU.17: .BLKB 4 ;DEVICE_TYPEU.18: .BLKB 4 ;CLASS_LENGTHU.19: .BLKB 4 ;TYPE_LENGTHU.20: .BLKB 4;DEVICE_INFO_REQUEÉST)U.21: .WORD 4 ; ;$ .WORD 4 ; ;- .ADDRESS U.17, U.19 ; ;$ .WORD 4 ; ;$ .WORD 6 ; ;- .ADDRESS U.18, U.20 ; ;$ .LONG 0 ; ;;OUTPUT_DEVICE_DESCR/U.22: .LONG 17694720 ; ;* .ADDRESS U.4+21 ; ;;STATUSU.23: .BLKB 4 .EXTRN SYS$GETDVI .PSECT $CODE$,NOWRT,2T .ENTRY OUT ÊPUT_CONTROL, ^M ;OUTPUT_CONTROL, Save R2,R3 ; 0155? MOVAB G^CLI$PRESENT, R3 ;CLI$PRESENT, R3 ;3 MOVAB W^U.23, R2 ;U.23, R2 ;S MOVB -316(R2), -8(R2) ;OUTPUT_NAM+20, OUTPUT_DEVICE_DESCR ; 01571 CLRQ -(SP) ;-(SP) ; 0193, CLRL -(SP) ;-(SP) ;? PUSHAB W^INDEX_FILE_IOSB ;INDEX_FILE_IOSB ;: PUSHAB -36(R2) ;DEVICE_INFO_REQUEST ;9 P ËUSHAB -8(R2) ;OUTPUT_DEVICE_DESCR ;3 MOVQ #6, -(SP) ;#6, -(SP) ;= CALLS #8, G^SYS$GETDVI ;#8, SYS$GETDVI ;7 MOVL R0, (R2) ;R0, STATUS ; 0190. BLBC R0, 3$ ;R0, 3$ ;K MOVZWL W^INDEX_FILE_IOSB, R0 ;INDEX_FILE_IOSB, R0 ; 01942 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 3$ ;R0, 3$ ;+ CLRL R0 ;R0 ; 0196= Ì CMPL -52(R2), #66 ;DEVICE_CLASS, #66 ;& BNEQ 1$ ;1$ ;& INCL R0 ;R0 ;M1$: INSV R0, #0, #1, -80(R2) ;R0, #0, #1, OUTPUT_STATUS ;+ CLRL R0 ;R0 ; 0197< CMPL -48(R2), #96 ;DEVICE_TYPE, #96 ;& BNEQ 2$ ;2$ ;& INCL R0 ;R0 ;M2$: INSV R0, #1, #1, -80(R2) ;R0, #1, #1, OUTPUT_STATUS ;D3$: BLBC -8 Í0(R2), 4$ ;OUTPUT_STATUS, 4$ ; 0199A BISB2 #4, -80(R2) ;#4, OUTPUT_STATUS ; 0201C MOVL #22, -88(R2) ;#22, LINES_PER_PAGE ; 0202+ BRB 5$ ;5$ ; 0199F4$: MOVL #60, -88(R2) ;#60, LINES_PER_PAGE ; 0205;5$: CLRL -76(R2) ;PAGE_NUMBER ; 02066 CLRL -92(R2) ;LAST_UIC ; 02073 PUSHAB W^P.AAC ;P.AAC ; 02087 CALLS #1, (R3) Î ;#1, CLI$PRESENT ;. BLBC R0, 6$ ;R0, 6$ ;A BICB2 #4, -80(R2) ;#4, OUTPUT_STATUS ; 0209:6$: BLBC (R2), 7$ ;STATUS, 7$ ; 0210. PUSHAB W^P.AAE ;P.AAE ;7 CALLS #1, (R3) ;#1, CLI$PRESENT ;. BLBC R0, 7$ ;R0, 7$ ;@ PUSHAB -60(R2) ;ASCII_LINES_PER_PAGE ; 0211. PUSHAB W^P.AAG ;P.AAG ;C CALLS #2, G^CLI$GET_VAL ÏUE ;#2, CLI$GET_VALUE ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 7$ ;R0, 7$ ;; PUSHAB -88(R2) ;LINES_PER_PAGE ; 0213; PUSHAB -60(R2) ;ASCII_LINES_PER_PAGE ;A CALLS #2, G^OTS$CVT_TI_L ;#2, OTS$CVT_TI_L ;2 MOVL R0, (R2) ;R0, STATUS ;Z7$: ADDL3 #1, -88(R2), -84(R2) ;#1, LINES_PER_PAGE, LINES_WRITTEN ; 02147 MOVL (R2), R0 ;ÐSTATUS, R0 ; 0157( RET ; ; 0155;; Routine Size: 198 bytes, Routine Base: $CODE$ + 0048 ; 0217 ; 0218 /; 0219 ROUTINE new_page (current_group_ptr,;; 0220 current_member_ptr): NOVALUE = ; 0221 ; 0222 BEGIN ; 0223 ; 0224 BIND>; 0225 current_group = .current_group_ptr:0; 0226 WORD,?; 0227 current_member = .currenÑt_member_ptr:0; 0228 WORD,6; 0229 reply_rab = output_rab:9; 0230 BLOCK [,BYTE]; ; 0231 ; 0232 LITERAL.; 0233 esc = 27; ; 0234 ; 0235 OWN; 0236 other_preface:; 0237 BYTE%; 0238 INITIAL (BYTE (12)), ; 0239 terminal_preface:; 0240 BYTE$; 0241 INITIAL (BYTE (0)),; 0242 vt100Ò_preface:!; 0243 VECTOR [12,BYTE]%; 0244 INITIAL (BYTE (esc),'; 0245 BYTE (%C'<'),%; 0246 BYTE (esc),'; 0247 BYTE (%C'['),'; 0248 BYTE (%C'2'),'; 0249 BYTE (%C'J'),%; 0250 BYTE (esc),'; 0251 BYTE (%C'['),'; 0252 BYTE (%C'0'),'; 0253 BYTE (%C';'),'; 0254 BYTE (%C'0'),(; Ó 0255 BYTE (%C'f')),#; 0256 other_preface_descr:; 0257 BLOCK [8,BYTE]'; 0258 INITIAL (%X'010E0001',); 0259 other_preface),&; 0260 terminal_preface_descr:; 0261 BLOCK [8,BYTE]'; 0262 INITIAL (%X'010E0000',,; 0263 terminal_preface),#; 0264 vt100_preface_descr:; 0265 BLOCK [8,BYTE]'; 0266 INITIAL (%X'010E000C',); 0267 vt100_Ôpreface); ; 0268 ; 0269 OWN%; 0270 device_and_uic_length:; 0271 LONG,; 0272 heading:,; 0273 VECTOR [heading_size,BYTE],; 0274 heading_descr:; 0275 BLOCK [8,BYTE]7; 0276 INITIAL (%X'010E0000' OR heading_size,#; 0277 heading),; 0278 start_of_device:; 0279 LONG; ; 0280 ,; 0281 page_number = .page_number + 1;(; 0282 IF (.page_number GTR 1) AND1; 0283 Õ .output_status [sts_v_pause] THEN*; 0284 $get (rab = reply_rab);K; 0285 device_and_uic_length = .device_name_descr[dsc$w_length] + 10;?; 0286 start_of_device = (80 - .device_and_uic_length)/2;F; P 0287 $fao ($DESCRIPTOR('!AS!#%D!AS[!3OW,!3OW]!#* Page!4UL!/'),*; P 0288 output_rab [rab$w_rsz],!; P 0289 heading_descr,Y; P 0290 (IF .output_status [sts_v_vt100] AND .output_status [sts_v_pause] THEN); P 0291 vt100_pr Öeface_descr@; P 0292 ELSE IF .output_status [sts_v_terminal] THEN,; P 0293 terminal_preface_descr; P 0294 ELSE+; P 0295 other_preface_descr),%; P 0296 .start_of_device,!; P 0297 current_time,&; P 0298 device_name_descr,#; P 0299 .current_group,$; P 0300 .current_member,'; P 0301 .start_of_device-8,"; 0302 .page_number);.; 0303 output_rab [rab$l_rbf] = ×heading;&; 0304 $put ( rab = output_rab);; 0305 lines_written = 2;; 0306 END; .PSECT $PLIT$,NOWRT,NOEXE,2EP.AAJ: .ASCII \!AS!#%D!AS[!3OW,!3OW]!#* Page!4UL!/\; ; .BLKB 1+P.AAI: .LONG 35 ; ;) .ADDRESS P.AAJ ; ; .PSECT $OWN$,NOEXE,2;OTHER_PREFACE*U.28: .BYTE 12 ; ;;TERMINAL_PREFACE)U.29: .BYTE 0 ; ; .BLKB 2;VT100_PREFACE*U.30: .BØYTE 27 ; ;% .BYTE 60 ; ;% .BYTE 27 ; ;% .BYTE 91 ; ;% .BYTE 50 ; ;% .BYTE 74 ; ;% .BYTE 27 ; ;% .BYTE 91 ; ;% .BYTE 48 ; ;% .BYTE 59 ; ;% .BYTE 48 ; ;& .BYTE 102 ; ;;OTHER_PREFACE_DESCR/U.31: .LÙONG 17694721 ; ;( .ADDRESS U.28 ; ;;TERMINAL_PREFACE_DESCR/U.32: .LONG 17694720 ; ;( .ADDRESS U.29 ; ;;VT100_PREFACE_DESCR/U.33: .LONG 17694732 ; ;( .ADDRESS U.30 ; ;;DEVICE_AND_UIC_LENGTHU.34: .BLKB 4;HEADINGU.35: .BLKB 128;HEADING_DESCR/U.36: .LONG 17694848 ; ;( .ADDRESS U.35 ; ;;START_OF_ÚDEVICEU.37: .BLKB 4U.27= U.6" .EXTRN SYS$GET, SYS$FAO, SYS$PUT .PSECT $CODE$,NOWRT,2 ;NEW_PAGE9U.24: .WORD ^M ;Save R2 ; 02193 MOVAB W^U.10, R2 ;U.10, R2 ;6 INCL 4(R2) ;PAGE_NUMBER ; 0281= CMPL 4(R2), #1 ;PAGE_NUMBER, #1 ; 0282& BLEQ 1$ ;1$ ;E BBC #2, (R2), 1$ ;#2, OUTPUT_STATUS, 1$ ; 02837 PUSHAB -80(R2) ;REPLY_RAB Û ; 02848 CALLS #1, G^SYS$GET ;#1, SYS$GET ;g1$: MOVZWL W^DEVICE_NAME_DESCR, 124(R2) ;DEVICE_NAME_DESCR, DEVICE_AND_UIC_LENGTH ; 0285D ADDL2 #10, 124(R2) ;#10, DEVICE_AND_UIC_LENGTH ;P SUBL3 #80, 124(R2), R0 ;#80, DEVICE_AND_UIC_LENGTH, R0 ; 0286. DIVL2 #2, R0 ;#2, R0 ;= MNEGL R0, 264(R2) ;R0, START_OF_DEVICE ;6 PUSHL 4(R2) ;PAGE_NUMBER ; 0302I SÜUBL3 #8, 264(R2), -(SP) ;#8, START_OF_DEVICE, -(SP) ;E MOVZWL @8(AP), -(SP) ;@CURRENT_MEMBER_PTR, -(SP) ;E MOVZWL @4(AP), -(SP) ;@CURRENT_GROUP_PTR, -(SP) ;C PUSHAB W^DEVICE_NAME_DESCR ;DEVICE_NAME_DESCR ;: PUSHAB W^CURRENT_TIME ;CURRENT_TIME ;7 PUSHL 264(R2) ;START_OF_DEVICE ;@ BBC #1, (R2), 2$ ;#1, OUTPUT_STATUS, 2$ ;@ BBC #2, (R2), 2$ ;#2, ÝOUTPUT_STATUS, 2$ ;A MOVAB 116(R2), R0 ;VT100_PREFACE_DESCR, R0 ;& BRB 4$ ;4$ ;<2$: BLBC (R2), 3$ ;OUTPUT_STATUS, 3$ ;C MOVAB 108(R2), R0 ;TERMINAL_PREFACE_DESCR, R0 ;& BRB 4$ ;4$ ;D3$: MOVAB 100(R2), R0 ;OTHER_PREFACE_DESCR, R0 ;)4$: PUSHL R0 ;R0 ;5 PUSHAB 256(R2) ;HEADING_DESCR ;5 PUSHAB -46(R2) Þ ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAI ;P.AAI ;: CALLS #11, G^SYS$FAO ;#11, SYS$FAO ;I MOVAB 128(R2), -40(R2) ;HEADING, OUTPUT_RAB+40 ; 03037 PUSHAB -80(R2) ;OUTPUT_RAB ; 03048 CALLS #1, G^SYS$PUT ;#1, SYS$PUT ;@ MOVL #2, -4(R2) ;#2, LINES_WRITTEN ; 0305( RET ; ; 0219;; Routine Size: 154 bytes, Routine Base: $CODE$ + 010Eß ; 0307 ; 0308 =; 0309 ROUTINE print_one_line (sortrecord_ptr): NOVALUE = ; 0310 ; 0311 BEGIN ; 0312 ; 0313 BIND;; 0314 sortrecord = .sortrecord_ptr:9; 0315 BLOCK [,BYTE]; ; 0316 ; 0317 OWN; 0318 output_record:+; 0319 VECTOR [output_size,BYTE],#; 0320 output_record_descr:; 0321 BLOCK [8,BYTE]6; 0322 INITIAL (%X'010E0000' OR output_s àize,); 0323 output_record); ; 0324 A; 0325 IF (.sortrecord [sortrecord$l_uic] NEQ .last_uic) OR9; 0326 (.lines_written GTR .lines_per_page) THEN=; 0327 new_page (sortrecord [sortrecord$w_uic_group],?; 0328 sortrecord [sortrecord$w_uic_member]);2; P 0329 $fao ($DESCRIPTOR ('!67AD!5UL/!5UL'),*; P 0330 output_rab [rab$w_rsz],'; P 0331 output_record_descr,5; P 0332 .sortrecord [sortrecord$b_lenágth],6; P 0333 sortrecord [sortrecord$t_filename],7; P 0334 .sortrecord [sortrecord$l_blksused],9; 0335 .sortrecord [sortrecord$l_blksalloc]);4; 0336 output_rab [rab$l_rbf] = output_record;&; 0337 $put ( rab = output_rab);0; 0338 lines_written = .lines_written + 1;; 0339 END; .PSECT $PLIT$,NOWRT,NOEXE,27P.AAL: .ASCII \!67AD!5UL/!5UL\ ; ; .BLKB 2+P.AAK: .LONG 14 ; ;) .ADâDRESS P.AAL ; ; .PSECT $OWN$,NOEXE,2;OUTPUT_RECORDU.40: .BLKB 90 .BLKB 2;OUTPUT_RECORD_DESCR/U.41: .LONG 17694810 ; ;( .ADDRESS U.40 ; ; .PSECT $CODE$,NOWRT,2;PRINT_ONE_LINE=U.38: .WORD ^M ;Save R2,R3 ; 03091 MOVAB W^U.9, R3 ;U.9, R3 ;? MOVL 4(AP), R2 ;SORTRECORD_PTR, R2 ; 0311? CMPL (R2), -8(R3) ;(R2), LAST_UIC ã ; 0325& BNEQ 1$ ;1$ ;L CMPL (R3), -4(R3) ;LINES_WRITTEN, LINES_PER_PAGE ; 0326& BLEQ 2$ ;2$ ;.1$: PUSHL R2 ;R2 ; 0327, PUSHAB 2(R2) ;2(R2) ;3 CALLS #2, W^U.24 ;#2, U.24 ;42$: PUSHL 4(R2) ;4(R2) ; 0335, PUSHL 8(R2) ;8(R2) ;. PUSHAB 13(R2) ;13(R2) ;: MOVZBL 12(R2), -(SP) ä;12(R2), -(SP) ;: PUSHAB 364(R3) ;OUTPUT_RECORD_DESCR ;5 PUSHAB -42(R3) ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAK ;P.AAK ;8 CALLS #7, G^SYS$FAO ;#7, SYS$FAO ;N MOVAB 272(R3), -36(R3) ;OUTPUT_RECORD, OUTPUT_RAB+40 ; 03367 PUSHAB -76(R3) ;OUTPUT_RAB ; 03378 CALLS #1, G^SYS$PUT ;#1, SYS$PUT ;7 INCL (R3) ;LINES_WRITTEN ; 0338(å RET ; ; 0309:; Routine Size: 83 bytes, Routine Base: $CODE$ + 01A8 ; 0340 ; 0341 6; 0342 ROUTINE swap_word (longword_ptr): NOVALUE = ; 0343 ; 0344 BEGIN ; 0345 ; 0346 BIND9; 0347 longword = .longword_ptr::; 0348 BLOCK [4,BYTE]; ; 0349 ; 0350 MACRO6; 0351 low_word = 0,0,16,0 %,6; 0352 high_word = 2,0æ,16,0 %; ; 0353 ; 0354 OWN; 0355 temp_word:; 0356 WORD; ; 0357 .; 0358 temp_word = .longword [low_word];9; 0359 longword [low_word] = .longword [high_word];/; 0360 longword [high_word] = .temp_word;; 0361 END; .PSECT $OWN$,NOEXE,2 ;TEMP_WORDU.44: .BLKB 2 .PSECT $CODE$,NOWRT,2 ;SWAP_WORD;U.42: .WORD ^M<> ;Save nothing ; 0342> MOVL 4(AP), R0 ;LONGWORD_PTR, R0 ç ; 0344; MOVW (R0), W^U.44 ;(R0), U.44 ; 0358; MOVW 2(R0), (R0) ;2(R0), (R0) ; 0359= MOVW W^U.44, 2(R0) ;U.44, 2(R0) ; 0360( RET ; ; 0342:; Routine Size: 22 bytes, Routine Base: $CODE$ + 01FB ; 0362 ; 0363 :; 0364 ROUTINE test_page (lines_needed_ptr): NOVALUE = ; 0365 ; 0366 BEGIN ; 0367 ; 0368 BIND=; 0369 lines_needed = .lines_neèeded_ptr:0; 0370 LONG; ; 0371 I; 0372 IF .lines_needed GTR (.lines_per_page - .lines_written) THEN*; 0373 new_page (last_uic <16,16>,*; 0374 last_uic <0,16>);; 0375 END; ;TEST_PAGE;U.45: .WORD ^M<> ;Save nothing ; 0364@ SUBL3 W^U.9, W^U.8, R0 ;U.9, U.8, R0 ; 0372> CMPL @4(AP), R0 ;@LINES_NEEDED_PTR, R0 ;& BLEQ 1$ ;1$ é ;/ PUSHAB W^U.7 ;U.7 ; 03743 PUSHAB W^U.7+2 ;U.7+2 ; 03733 CALLS #2, W^U.24 ;#2, U.24 ;+1$: RET ; ; 0364:; Routine Size: 30 bytes, Routine Base: $CODE$ + 0211 ; 0376 ; 0377 M; 0378 ROUTINE print_totals (files_ptr,used_ptr,allocated_ptr): NOVALUE = ; 0379 ; 0380 BEGIN ; 0381 ; 0382 BIND6; 0383 files = .files_ptr:0; 03 ê84 LONG,5; 0385 used = .used_ptr:0; 0386 LONG,:; 0387 allocated = .allocated_ptr:0; 0388 LONG; ; 0389 ; 0390 OWN; 0391 output_record:+; 0392 VECTOR [output_size,BYTE],#; 0393 output_record_descr:; 0394 BLOCK [8,BYTE]6; 0395 INITIAL (%X'010E0000' OR output_size,); 0396 ë output_record); ; 0397 !; 0398 test_page (%REF(8));4; 0399 output_rab [rab$l_rbf] = output_record;Q; P 0400 $fao ($DESCRIPTOR('!/!/!/Disk usage summary for UIC [!3OW,!3OW]!/'),*; P 0401 output_rab [rab$w_rsz],'; P 0402 output_record_descr,%; P 0403 .last_uic <16,16>,%; 0404 .last_uic <0,16>);%; 0405 $put (rab = output_rab);9; P 0406 $fao ($DESCRIPTOR('!30!5UL'),*; P 0407 o ìutput_rab [rab$w_rsz],'; P 0408 output_record_descr,; 0409 .files);&; 0410 $put ( rab = output_rab);?; P 0411 $fao ($DESCRIPTOR('!30!5UL'),*; P 0412 output_rab [rab$w_rsz],'; P 0413 output_record_descr,; 0414 .used);&; 0415 $put ( rab = output_rab);D; P 0416 $fao ($DESCRIPTOR('!30!5UL'),*; P 0417 output_rab [rab$w_rsz],'; P 0418 output_record_desícr,; 0419 .allocated);&; 0420 $put ( rab = output_rab);; 0421 END; .PSECT $PLIT$,NOWRT,NOEXE,2?P.AAN: .ASCII \!/!/!/Disk usage summary for UIC [!3OW,!3OW]!/\ ; ; .BLKB 2+P.AAM: .LONG 46 ; ;) .ADDRESS P.AAN ; ;>P.AAP: .ASCII \!30!5UL\ ; ; .BLKB 2+P.AAO: .LONG 22 ; ;) .ADDRESS P.AAP ; ;DP.îAAR: .ASCII \!30!5UL\ ; ;+P.AAQ: .LONG 28 ; ;) .ADDRESS P.AAR ; ;EP.AAT: .ASCII \!30!5UL\ ; ; .BLKB 3+P.AAS: .LONG 33 ; ;) .ADDRESS P.AAT ; ; .PSECT $OWN$,NOEXE,2 .BLKB 2;OUTPUT_RECORDU.51: .BLKB 90 .BLKB 2;OUTPUT_RECORD_DESCR/U.52: .LONG 17694810 ; ;( .ADDRESS U.51 ï ; ; .PSECT $CODE$,NOWRT,2 ;PRINT_TOTALSCU.47: .WORD ^M ;Save R2,R3,R4 ; 03788 MOVAB G^SYS$PUT, R4 ;SYS$PUT, R4 ;8 MOVAB G^SYS$FAO, R3 ;SYS$FAO, R3 ;3 MOVAB W^U.52, R2 ;U.52, R2 ;+ PUSHL #8 ;#8 ; 0398& PUSHL SP ;SP ;3 CALLS #1, B^U.45 ;#1, U.45 ;O MOVAB -92(R2), -504(R2) ;OUTPUT_RECORD, O ðUTPUT_RAB+40 ; 0399C MOVZWL -476(R2), -(SP) ;LAST_UIC, -(SP) ; 0404@ MOVZWL -474(R2), -(SP) ;LAST_UIC+2, -(SP) ;& PUSHL R2 ;R2 ;5 PUSHAB -510(R2) ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAM ;P.AAM ;3 CALLS #5, (R3) ;#5, SYS$FAO ;7 PUSHAB -544(R2) ;OUTPUT_RAB ; 04053 CALLS #1, (R4) ;#1, SYS$PUT ;6 PUSHL @4(AP) ;@FI ñLES_PTR ; 0409& PUSHL R2 ;R2 ;5 PUSHAB -510(R2) ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAO ;P.AAO ;3 CALLS #4, (R3) ;#4, SYS$FAO ;7 PUSHAB -544(R2) ;OUTPUT_RAB ; 04103 CALLS #1, (R4) ;#1, SYS$PUT ;6 PUSHL @8(AP) ;@USED_PTR ; 0414& PUSHL R2 ;R2 ;5 PUSHAB -510(R2) ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAQ ò ;P.AAQ ;3 CALLS #4, (R3) ;#4, SYS$FAO ;7 PUSHAB -544(R2) ;OUTPUT_RAB ; 04153 CALLS #1, (R4) ;#1, SYS$PUT ;; PUSHL @12(AP) ;@ALLOCATED_PTR ; 0419& PUSHL R2 ;R2 ;5 PUSHAB -510(R2) ;OUTPUT_RAB+34 ;. PUSHAB W^P.AAS ;P.AAS ;3 CALLS #4, (R3) ;#4, SYS$FAO ;7 PUSHAB -544(R2) ;OUTPUT_RAB ó ; 04203 CALLS #1, (R4) ;#1, SYS$PUT ;( RET ; ; 0378;; Routine Size: 135 bytes, Routine Base: $CODE$ + 022F ; 0422 ; 0423 2; 0424 GLOBAL ROUTINE display_files: NOVALUE = ; 0425 ; 0426 BEGIN ; 0427 ; 0428 OWN ; 0429 blocks_allocated:; 0430 LONG,; 0431 blocks_used:; 0432 LONG,; 0433 files_owned:; 0434 LONG,; 0435 record_lengthô:; 0436 LONG,"; 0437 sortrecord_address:; 0438 LONG; ; 0439 "; 0440 blocks_allocated = 0;; 0441 blocks_used = 0;; 0442 files_owned = 0;8; 0443 WHILE return_record (sortrecord_address) DO; 0444 BEGIN; 0445 BIND?; 0446 sortrecord = .sortrecord_address:9; 0447 BLOCK [,BYTE];>; 0448 swap_word (sortrecord [sortrecord$l_blksused]);?; 0449 õ swap_word (sortrecord [sortrecord$l_blksalloc]);+; 0450 print_one_line (sortrecord);.; 0451 files_owned = .files_owned + 1;P; 0452 blocks_used = .blocks_used + .sortrecord [sortrecord$l_blksused];[; 0453 blocks_allocated = .blocks_allocated + .sortrecord [sortrecord$l_blksalloc];9; 0454 last_uic = .sortrecord [sortrecord$l_uic];; 0455 END;E; 0456 print_totals (files_owned,blocks_used,blocks_allocated);; 0457 END; .PSöECT $OWN$,NOEXE,2;BLOCKS_ALLOCATEDU.54: .BLKB 4 ;BLOCKS_USEDU.55: .BLKB 4 ;FILES_OWNEDU.56: .BLKB 4;RECORD_LENGTHU.57: .BLKB 4;SORTRECORD_ADDRESSU.58: .BLKB 4 .PSECT $CODE$,NOWRT,2X .ENTRY DISPLAY_FILES, ^M ;DISPLAY_FILES, Save R2,R3,R4 ; 04243 MOVAB W^U.42, R4 ;U.42, R4 ;3 MOVAB W^U.54, R3 ;U.54, R3 ;: CLRQ (R3) ;BLOCKS_ALLOCATED ; 04406 CLRL 8(R3) ÷ ;FILES_OWNED ; 0442@1$: PUSHAB 16(R3) ;SORTRECORD_ADDRESS ; 0443C CALLS #1, G^RETURN_RECORD ;#1, RETURN_RECORD ;. BLBC R0, 2$ ;R0, 2$ ;D MOVL 16(R3), R2 ;SORTRECORD_ADDRESS, R2 ; 04441 PUSHAB 8(R2) ;8(R2) ; 04485 CALLS #1, (R4) ;#1, SWAP_WORD ;1 PUSHAB 4(R2) ;4(R2) ; 04495 CALLS #1, (R4) ;#1, SWAP_WORD ø;+ PUSHL R2 ;R2 ; 0450< CALLS #1, -83(R4) ;#1, PRINT_ONE_LINE ;6 INCL 8(R3) ;FILES_OWNED ; 0451B ADDL2 8(R2), 4(R3) ;8(R2), BLOCKS_USED ; 0452F ADDL2 4(R2), (R3) ;4(R2), BLOCKS_ALLOCATED ; 0453A MOVL (R2), -484(R3) ;(R2), LAST_UIC ; 0454+ BRB 1$ ;1$ ; 0443.2$: PUSHL R3 ;R3 ; 04561 PUSHAB 4(R3) ;BLOCKS_USED ù ;1 PUSHAB 8(R3) ;FILES_OWNED ;: CALLS #3, 52(R4) ;#3, PRINT_TOTALS ;( RET ; ; 0424:; Routine Size: 84 bytes, Routine Base: $CODE$ + 02B6 ; 0458 ; 0459 -; 0460 GLOBAL ROUTINE close_output_file = ; 0461 ; 0462 BEGIN ; 0463 .; 0464 RETURN $close (fab = output_fab); ; 0465 ; 0466 END; .EXTRN SYS$CLOSEX .ENTRY CLOSE_OUTPUT_FILE, ^M<> ;CLOSE_úOUTPUT_FILE, Save nothing ; 0460/ PUSHAB W^U.5 ;U.5 ; 0464< CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE ;( RET ; ; 0460:; Routine Size: 14 bytes, Routine Base: $CODE$ + 030A; 0467 END; 0468 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;T; $OWN$ 1264 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $PLIT$ 316 NOVEC,NOWRT, û RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 792 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 46 0 439; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Coümpilation Complete .ENDww­@“Œ+; 0001 MODULE owner ( IDENT = 'V03-0000','; 0002 main = owner) = ; 0003 ; 0004 BEGIN ; 0005 %; 0006 LIBRARY 'sys$library:lib';(; 0007 REQUIRE 'sys$library:tpamac';; 0313 REQUIRE 'owner.req'; ; 0383 ; 0384 EXTERNAL ROUTINEC; 0385 access_index_file: ADDRESSING_MODE (GENERAL),C; 0386 cli$get_value: ADDRESSING_MODE (GENERAL),C; 0387 cli$presentý: ADDRESSING_MODE (GENERAL),C; 0388 close_output_file: ADDRESSING_MODE (GENERAL),K; 0389 display_files: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0390 do_sort: ADDRESSING_MODE (GENERAL),K; 0391 end_sort: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0392 find_last_header_vbn: ADDRESSING_MODE (GENERAL),C; 0393 initialize_qioblock_array: ADDRESSING_MODE (GENERAL),C; 0394 initialize_þsort: ADDRESSING_MODE (GENERAL),K; 0395 lib$free_vm: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0396 lib$get_vm: ADDRESSING_MODE (GENERAL),K; 0397 lib$signal: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0398 lib$tparse: ADDRESSING_MODE (GENERAL),C; 0399 open_output_file: ADDRESSING_MODE (GENERAL),C; 0400 ots$cvt_ti_l: ADDRESSING_MODE (GENERAL),C; 0401 output_cont ÿrol: ADDRESSING_MODE (GENERAL),K; 0402 process_all_files: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0403 process_home_block: ADDRESSING_MODE (GENERAL),C; 0404 read_home_block: ADDRESSING_MODE (GENERAL),C; 0405 read_index_bitmap: ADDRESSING_MODE (GENERAL),C; 0406 read_mfd_header: ADDRESSING_MODE (GENERAL),C; 0407 str$copy_r: ADDRESSING_MODE (GENERAL); ; 0408 ; 0409 GLOBAL; 0410 bitmap_ptr:; 0411 LONG,; 0412 cache_buffer_ptr:; 0413 LONG, ; 0414 cache_header_count:; 0415 LONG,; 0416 cluster_factor:; 0417 LONG, ; 0418 current_header_vbn:; 0419 LONG,; 0420 current_time:; 0421 VECTOR [2,LONG],; 0422 device_name_descr:; 0423 BLOCK [8,BYTE](; 0424 INITIAL (%X'020E0000',0),; 0425 disk_acp_channel:; 0426 LONG,; 0427 first_header_vbn:; 0428 LONG,!; 0429 first_vbn_in_buffer:; 0430 LONG,; 0431 free_buffer_mask:; 0432 LONG; 0433 INITIAL (0),; 0434 header_buffer_ptr:; 0435 LONG,; 0436 header_count:; 0437 LONG,; 0438 index_bitmap_size:; 0439 WORD,; 0440 index_bitmap_vbn:; 0441 LONG,; 0442 index_file_iosb:; 0443 VECTOR [4,WORD],; 0444 last_header_vbn:; 0445  LONG, ; 0446 last_vbn_in_buffer:; 0447 LONG,; 0448 max_cache:; 0449 LONG,; 0450 mfd_header: ; 0451 BLOCK [512,BYTE],!; 0452 next_display_record:; 0453 LONG,; 0454 next_sort_record:; 0455 LONG,#; 0456 qioblock_base_address:; 0457 LONG,!; 0458 reference_count_ptr:; 0459 LONG,+; 0460 start_of_record_address_table:; 0461 LONG,; 0462 uic_flags:; 0463 BITVECTOR [32],; 0464 uic_group:; 0465 WORD,; 0466 uic_member:; 0467 WORD,$; 0468 volume_structure_level:; 0469 BYTE,; 0470 worst_error:; 0471 LONG$; 0472 INITIAL (ss$_normal); ; 0473 ; 0474 ; 0475 OWN; 0476 home_block: ; 0477 BLOCK [512,BYTE]; ; 0478 ; 0479 +; 0480 ROUTINE allocate_header_buffer = ; 0481 ; 0482 BEGIN ; 0483 ; 0484 OWN"; 04 85 header_count_descr:; 0486 BLOCK [8,BYTE]*; 0487 INITIAL (%X'020E0000',0),; 0488 status:; 0489 LONG; ; 0490 F; 0491 IF (status = cli$get_value ($DESCRIPTOR ('HEADER_COUNT'),B; 0492 header_count_descr)) THEN>; 0493 IF (status = ots$cvt_ti_l (header_count_descr,>; 0494 header_count)) THENB; 0495 status = lib$get_vm (%REF (512 * .header_count),:;  0496 header_buffer_ptr);; 0497 RETURN .status;; 0498 END; .TITLE OWNER .IDENT \V03-0000\ .PSECT $PLIT$,NOWRT,NOEXE,26P.AAB: .ASCII \HEADER_COUNT\ ; ;+P.AAA: .LONG 12 ; ;) .ADDRESS P.AAB ; ; .PSECT $OWN$,NOEXE,2 ;HOME_BLOCKU.31: .BLKB 512;HEADER_COUNT_DESCR2U.33: .LONG 34471936, 0 ; ;;STATUSU.34: .BLKB 4 .PSECT  $GLOBAL$,NOEXE,2 BITMAP_PTR:: .BLKB 4CACHE_BUFFER_PTR:: .BLKB 4CACHE_HEADER_COUNT:: .BLKB 4CLUSTER_FACTOR:: .BLKB 4CURRENT_HEADER_VBN:: .BLKB 4CURRENT_TIME:: .BLKB 8DEVICE_NAME_DESCR::- .LONG 34471936, 0 ; ;DISK_ACP_CHANNEL:: .BLKB 4FIRST_HEADER_VBN:: .BLKB 4FIRST_VBN_IN_BUFFER:: .BLKB 4FREE_BUFFER_MASK::$ .LONG 0 ; ;HEADER_BUFFER_PTR:: .BLKB 4HEADER_COUNT:: .BLKB 4INDEX_BITM AP_SIZE:: .BLKB 2 .BLKB 2INDEX_BITMAP_VBN:: .BLKB 4INDEX_FILE_IOSB:: .BLKB 8LAST_HEADER_VBN:: .BLKB 4LAST_VBN_IN_BUFFER:: .BLKB 4 MAX_CACHE:: .BLKB 4 MFD_HEADER:: .BLKB 512NEXT_DISPLAY_RECORD:: .BLKB 4NEXT_SORT_RECORD:: .BLKB 4QIOBLOCK_BASE_ADDRESS:: .BLKB 4REFERENCE_COUNT_PTR:: .BLKB 4START_OF_RECORD_ADDRESS_TABLE:: .BLKB 4 UIC_FLAGS:: .BLKB 4 UIC_GROUP:: .BLKB 2 UIC_MEMBER:: .BLKB 2VOLUME_STRUCTURE_LEV EL:: .BLKB 1 .BLKB 3 WORST_ERROR::$ .LONG 1 ; ;a .EXTRN ACCESS_INDEX_FILE, CLI$GET_VALUE, CLI$PRESENT, CLOSE_OUTPUT_FILE, DISPLAY_FILES, DO_SORT` .EXTRN END_SORT, FIND_LAST_HEADER_VBN, INITIALIZE_QIOBLOCK_ARRAY, INITIALIZE_SORT, LIB$FREE_VM[ .EXTRN LIB$GET_VM, LIB$SIGNAL, LIB$TPARSE, OPEN_OUTPUT_FILE, OTS$CVT_TI_L, OUTPUT_CONTROLc .EXTRN PROCESS_ALL_FILES, PROCESS_HOME_BLOCK, READ_HOME_BLOCK, READ_INDEX_BITMAP, READ_MFD_HEADER .EXTRN STR$COPY_R . PSECT $CODE$,NOWRT,2;ALLOCATE_HEADER_BUFFER9U.32: .WORD ^M ;Save R2 ; 04803 MOVAB W^U.34, R2 ;U.34, R2 ;. SUBL2 #4, SP ;#4, SP ;= PUSHAB -8(R2) ;HEADER_COUNT_DESCR ; 0491. PUSHAB W^P.AAA ;P.AAA ;C CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;? PUSHAB W ^HEADER_COUNT ;HEADER_COUNT ; 04938 PUSHAB -8(R2) ;HEADER_COUNT_DESCR ;A CALLS #2, G^OTS$CVT_TI_L ;#2, OTS$CVT_TI_L ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;H PUSHAB W^HEADER_BUFFER_PTR ;HEADER_BUFFER_PTR ; 0495M ASHL #9, W^HEADER_COUNT, 4(SP) ;#9, HEADER_COUNT, 4(SP) ;, PUSHAB 4(SP) ;4(SP) ;= CALLS #2, G^LIB$GET_V M ;#2, LIB$GET_VM ;2 MOVL R0, (R2) ;R0, STATUS ;:1$: MOVL (R2), R0 ;STATUS, R0 ; 0482( RET ; ; 0480:; Routine Size: 78 bytes, Routine Base: $CODE$ + 0000 ; 0499 *; 0500 ROUTINE allocate_cache_buffer = ; 0501 ; 0502 BEGIN ; 0503 ; 0504 OWN!; 0505 cache_count_descr:; 0506 BLOCK [8,BYTE]*; 0507 INITIAL (%X'020E0000',0),; 0508  status:; 0509 LONG; ; 0510 D; 0511 IF (status = cli$get_value ($DESCRIPTOR ('CACHE_SIZE'),A; 0512 cache_count_descr)) THEN=; 0513 IF (status = ots$cvt_ti_l (cache_count_descr,;; 0514 max_cache)) THENC; 0515 IF (status = lib$get_vm (%REF (512 * .max_cache),B; 0516 cache_buffer_ptr)) THEN?; 0517 status = lib$get_vm (%REF (4 * .max_ca che),>; 0518 reference_count_ptr);; 0519 RETURN .status;; 0520 END; .PSECT $PLIT$,NOWRT,NOEXE,24P.AAD: .ASCII \CACHE_SIZE\ ; ; .BLKB 2+P.AAC: .LONG 10 ; ;) .ADDRESS P.AAD ; ; .PSECT $OWN$,NOEXE,2;CACHE_COUNT_DESCR2U.36: .LONG 34471936, 0 ; ;;STATUSU.37: .BLKB 4 .PSECT $CODE$,NOWRT,2;ALLOCATE_CACHE_BUFFERCU. 35: .WORD ^M ;Save R2,R3,R4 ; 0500= MOVAB G^LIB$GET_VM, R4 ;LIB$GET_VM, R4 ;< MOVAB W^MAX_CACHE, R3 ;MAX_CACHE, R3 ;3 MOVAB W^U.37, R2 ;U.37, R2 ;. SUBL2 #4, SP ;#4, SP ;= PUSHAB -8(R2) ;CACHE_COUNT_DESCR ; 0511. PUSHAB W^P.AAC ;P.AAC ;C CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE ;2 MOVL R0, (R2) ;R0 , STATUS ;. BLBC R0, 1$ ;R0, 1$ ;+ PUSHL R3 ;R3 ; 05138 PUSHAB -8(R2) ;CACHE_COUNT_DESCR ;A CALLS #2, G^OTS$CVT_TI_L ;#2, OTS$CVT_TI_L ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;= PUSHAB -80(R3) ;CACHE_BUFFER_PTR ; 0515B ASHL #9, (R3), 4(SP) ;#9, MAX_CACHE, 4(SP) ;, PUSHAB 4(SP) ;4(SP)  ;6 CALLS #2, (R4) ;#2, LIB$GET_VM ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;? PUSHAB 528(R3) ;REFERENCE_COUNT_PTR ; 0517B ASHL #2, (R3), 4(SP) ;#2, MAX_CACHE, 4(SP) ;, PUSHAB 4(SP) ;4(SP) ;6 CALLS #2, (R4) ;#2, LIB$GET_VM ;2 MOVL R0, (R2) ;R0, STATUS ;:1$: MOVL (R2), R0 ;STATUS, R0  ; 0502( RET ; ; 0500;; Routine Size: 102 bytes, Routine Base: $CODE$ + 004E ; 0521 ; 0522 5; 0523 GLOBAL ROUTINE perform (status): NOVALUE = ; 0524 ; 0525 BEGIN ; 0526 ; 0527 BUILTIN; 0528 AP,; 0529 CALLG; ; 0530 ; 0531 BIND/; 0532 argument_list = .AP::; 0533 VECTOR [,LONG]; ; 0534 ; 0535 LITERAL-; 0536 primary_signal = 1; ; 0537 8; 0538 IF NOT .argument_list [primary_signal] THEN0; 0539 CALLG (argument_list,lib$signal);; 0540 END;F .ENTRY PERFORM, ^M<> ;PERFORM, Save nothing ; 05238 BLBS 4(AP), 1$ ;4(AP), 1$ ; 0538F CALLG (AP), G^LIB$SIGNAL ;(AP), LIB$SIGNAL ; 0539+1$: RET ; ; 0523:; Routine Size: 14 bytes, Routine Base: $CODE$ + 00B4 ; 0541  ; 0542 :; 0543 ROUTINE get_parameter (device_name_descr_ptr) = ; 0544 ; 0545 BEGIN ; 0546 ; 0547 BINDB; 0548 device_name_descr = .device_name_descr_ptr:9; 0549 BLOCK [,BYTE]; ; 0550 ; 0551 OWN"; 0552 device_name_length:; 0553 WORD,; 0554 done:; 0555 LONG,; 0556 status:; 0557 LONG, ; 0558 temporary_buffer:3; 0559 VECTO R [logical_name_length,BYTE],&; 0560 temporary_buffer_descr:; 0561 BLOCK [8,BYTE]>; 0562 INITIAL (%X'010E0000' OR logical_name_length,,; 0563 temporary_buffer); ; 0564 ]; 0565 done = false; ! initially not done]; 0566 IF (status = cli$get_value ($DESCRIPTOR ('INPUT1'), ! get next parameterA; 0567 device_name_descr)) THENa; 0568 WHILE .status AND NOT .done DO ! continue to do logicala; 0569 BEGIN ! name translation untila; P 0570 status = $trnlog (lognam = device_name_descr, ! either get an error or_; P 0571 rsllen = device_name_length, ! run out of things toT; 0572 rslbuf = temporary_buffer_descr); ! translate; 0573 SELECT true OF; 05 74 SETb; 0575 [(.status EQL ss$_notran) OR (status<0,1> EQL 0)]: ! error or no translation!; 0576 done = true;d; 0577 [.status]: ! success or no translation<; 0578 status = str$copy_r (device_name_descr,=; 0579 device_name_length,R; 0580 .temporary_buffer_descr [dsc$a_pointer]); 0581 TES;; 0582  END;; 0583 RETURN .status;; 0584 END; .PSECT $PLIT$,NOWRT,NOEXE,20P.AAF: .ASCII \INPUT1\ ; ; .BLKB 2*P.AAE: .LONG 6 ; ;) .ADDRESS P.AAF ; ; .PSECT $OWN$,NOEXE,2;DEVICE_NAME_LENGTHU.42: .BLKB 2 .BLKB 2;DONEU.43: .BLKB 4;STATUSU.44: .BLKB 4;TEMPORARY_BUFFERU.45: .BLKB 256;TEMPORARY_BUFFER_DESCR/U.46: .LONG 17694976 ; ;( .ADDRESS U.45 ; ; .EXTRN SYS$TRNLOG .PSECT $CODE$,NOWRT,2;GET_PARAMETER=U.40: .WORD ^M ;Save R2,R3 ; 05433 MOVAB W^U.44, R3 ;U.44, R3 ;1 CLRL -4(R3) ;DONE ; 0565? PUSHL 4(AP) ;DEVICE_NAME_DESCR_PTR ; 0566. PUSHAB W^P.AAE ;P.AAE ;C CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE ;2 MOVL R0, (R3) ;R0, STATUS  ;. BLBC R0, 5$ ;R0, 5$ ;:1$: BLBC (R3), 5$ ;STATUS, 5$ ; 05683 BLBS -4(R3), 5$ ;DONE, 5$ ;1 CLRQ -(SP) ;-(SP) ; 0572, CLRL -(SP) ;-(SP) ;= PUSHAB 260(R3) ;TEMPORARY_BUFFER_DESCR ;8 PUSHAB -8(R3) ;DEVICE_NAME_LENGTH ;: PUSHL 4(AP) ;DEVICE_NAME_DESCR_PTR ;= CALLS #6, G^SYS$TRNLOG ;#6, SYS$TRNLOG  ;2 MOVL R0, (R3) ;R0, STATUS ;+ CLRL R2 ;R2 ; 05758 CMPL (R3), #1577 ;STATUS, #1577 ;& BNEQ 2$ ;2$ ;& INCL R2 ;R2 ;52$: MOVAB (R3), R1 ;STATUS, R1 ;& CLRL R0 ;R0 ;& TSTL R1 ;R1 ;& BNEQ 3$ ;3$ ;& INCL R0 ;R0 ;13$: BISL2 R2, R0 ;R2, R0 ;3 CMPL R0, #1 ;R0, #1 ; 0573& BNEQ 4$ ;4$ ;8 MOVL #1, -4(R3) ;#1, DONE ; 0576:4$: CMPL (R3), #1 ;STATUS, #1 ; 0573& BNEQ 1$ ;1$ ;D PUSHL 264(R3) ;TEMPORARY_BUFFER_DESCR+4 ; 05788 PUSHAB -8(R3) ;DEVICE_NAME_LENGTH ;: PUSHL 4(AP) ;DEVICE_NAME_DESCR_PTR ;= CALLS #3, G^STR$COPY_R ;#3, STR$COPY_R ;2 MOVL R0, (R3) ;R0, STATUS ;+ BRB 1$ ;1$ ; 0568:5$: MOVL (R3), R0 ;STATUS, R0 ; 0545( RET ; ; 0543;; Routine Size: 128 bytes, Routine Base: $CODE$ + 00C2 ; 0585 ; 0586 ; 0587 ROUTINE get_uic = ; 0588 P; 0589 BEGIN ! {* routine get_uic *} ; 0590 ; 0591 !+; 0592 ! Revision History; 0593 ! ======== ======= ; 0594 !4; 0595 ! WVD001 W. Dixon 23-Mar-1983H; 0596 ! Change _v refernce to _m format in tparse state$; 0597 ! transition. ; 0598 ! ; 0599 !- ; 0600 ; 0601 OWN; 0602 flags: ; 0603 BITVECTOR [32],; 0604 group_number:; 0605 LONG,; 0606 member_number:; 0607 LONG,; 0608 status:; 0609 LONG,; 0610 tparse_block:+; 0611 BLOCK [tpa$k_length0,BYTE](; 0612 INITIAL (tpa$k_count0),; 0613 uic_descr:; 0614 BLOCK [8,BYTE]*; 0615 INITIAL (%X'020E0000',0);; 0616 -; 0617 $init_state (uic_state,uic_key); ; 0618 ; P 0619 $state (,; P 0620 ('['); 0621 ); ; 0622 ; P 0623 $state (,1; P 0624 (TPA$_OCTAL,,,,group_number),Q; P 0625 ('*',,,wild_m_group,flags) ! wvd001; 0626  ); ; 0627 ; P 0628 $state (,; P 0629 (','); 0630 ); ; 0631 ; P 0632 $state (,2; P 0633 (TPA$_OCTAL,,,,member_number),Q; P 0634 ('*',,,wild_m_member,flags) ! wvd001; 0635 ); ; 0636 ; P 0637 $state (,#; P 0638 (']',TPA$_EXIT); 0639 ); ; 0640 ); 0641 PSECT OWN = $OWN$;,; 0642 PSECT GLOBAL = $GLOBAL$; ; 0643  A; 0644 IF (status =cli$get_value ($DESCRIPTOR('OWNER_UIC'),8; 0645 uic_descr)) THENM; 0646 BEGIN ! {* /UIC present *}0; 0647 uic_flags [wild_v_group] = false;1; 0648 uic_flags [wild_v_member] = false;J; 0649 tparse_block [tpa$l_stringcnt] = .uic_descr [dsc$w_length];K; 0650 tparse_block [tpa$l_stringptr] = .uic_descr [dsc$a_pointer];M; 0651 IF (status = lib$tparse ( !tparse_block,uic_state,uic_key)) THENJ; 0652 BEGIN ! {* valid uic *}+; 0653 uic_group = .group_number;-; 0654 uic_member = .member_number;B; 0655 uic_flags [wild_v_group] = .flags [wild_v_group];D; 0656 uic_flags [wild_v_member] = .flags [wild_v_member];J; 0657 END; ! {* valid uic *}M; 0658 END; ! {* /UIC present *}; " 0659 RETURN .status;P; 0660 END; ! {* routine get_uic *}( .PSECT _LIB$STATE$,NOWRT, SHR, PIC,0 UIC_STATE:: .BLKB 0 ;TPA$TYPE,U.56: .WORD 1115 ; ; ;TPA$TYPE-U.57: .WORD 16884 ; ; ;TPA$ADDR6U.58: .LONG <-4> ; ; ;TPA$TYPE-U.59: .WORD 25642 ; ; ;TPA$ADDR6U.60: .LONG <-4> ; ; ;TPA$M#ASK)U.61: .LONG 1 ; ; ;TPA$TYPE,U.62: .WORD 1068 ; ; ;TPA$TYPE-U.63: .WORD 16884 ; ; ;TPA$ADDR6U.64: .LONG <-4> ; ; ;TPA$TYPE-U.65: .WORD 25642 ; ; ;TPA$ADDR6U.66: .LONG <-4> ; ; ;TPA$MASK)U.67: .LONG 2 ; ; ;TPA$TYPE,U.68: .WORD 5213 ; ; ;TPA$TARGET*U.69: .WORD $-1 ; ;' .PSECT _LIB$KEY0$,NOWRT, SHR, PIC,1 UIC_KEY:: .BLKB 0 ;TPA$KEY0U.55: .BLKB 0 .PSECT $PLIT$,NOWRT,NOEXE,23P.AAH: .ASCII \OWNER_UIC\ ; ; .BLKB 3*P.AAG: .LONG 9 ; ;) .ADDRESS P.AAH ; ; .PSECT $OWN$,NOEXE,2;FLAGSU.48: .BLKB 4 ;GROUP_NUMBERU.49: .BLKB 4;MEMBER_NUMBERU.50: .BLKB 4;STATUSU.51: .BLKB 4 ;TPARSE_BLOCK)U.52: .LONG 8 % ; ; .BLKB 32 ;UIC_DESCR2U.53: .LONG 34471936, 0 ; ; .PSECT $CODE$,NOWRT,2;GET_UIC=U.47: .WORD ^M ;Save R2,R3 ; 0587< MOVAB W^UIC_FLAGS, R3 ;UIC_FLAGS, R3 ;3 MOVAB W^U.51, R2 ;U.51, R2 ;6 PUSHAB 40(R2) ;UIC_DESCR ; 0644. PUSHAB W^P.AAG ;P.AAG ;C CALLS #2, G^CLI$GET_VALUE ;#2, CLI$GET_VALUE ;2 MOVL & R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;: BICB2 #3, (R3) ;#3, UIC_FLAGS ; 0648K MOVZWL 40(R2), 12(R2) ;UIC_DESCR, TPARSE_BLOCK+8 ; 0649M MOVL 44(R2), 16(R2) ;UIC_DESCR+4, TPARSE_BLOCK+12 ; 06506 PUSHAB W^UIC_KEY ;UIC_KEY ; 06515 PUSHAB W^UIC_STATE ;UIC_STATE ;2 PUSHAB 4(R2) ;TPARSE_BLOCK ;= CALLS #3, G^LIB$TPARSE ' ;#3, LIB$TPARSE ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;H MOVW -8(R2), 4(R3) ;GROUP_NUMBER, UIC_GROUP ; 0653J MOVW -4(R2), 6(R3) ;MEMBER_NUMBER, UIC_MEMBER ; 0654P INSV -12(R2), #0, #1, (R3) ;FLAGS, #0, #1, UIC_FLAGS ; 0655H EXTZV #1, #1, -12(R2), R0 ;#1, #1, FLAGS, R0 ; 0656C INSV R0, #1, #1, (R3) ;R0, #1, #1, UIC_FLAGS (;:1$: MOVL (R2), R0 ;STATUS, R0 ; 0589( RET ; ; 0587;; Routine Size: 100 bytes, Routine Base: $CODE$ + 0142 ; 0661 ; 0662 ; 0663 ROUTINE owner = ; 0664 ; 0665 BEGIN ; 0666 8; 0667 perform ($gettim ( timadr = current_time));1; 0668 perform (allocate_header_buffer ());0; 0669 perform (allocate_cache_buffer ());4; 0670 perform (initialize_qioblock_array ());+; 0671 perform ( )open_output_file ());); 0672 perform (output_control ());7; 0673 WHILE get_parameter (device_name_descr) DO; 0674 BEGIN<; P 0675 perform ($assign ( chan = disk_acp_channel,?; 0676 devnam = device_name_descr));.; 0677 perform (access_index_file ());7; 0678 perform (read_home_block ( home_block));9; 0679 perform (process_home_block (home_block));.; 0680 perform (read_index_bitmap ());1; 0681 p *erform (find_last_header_vbn ());,; 0682 perform (initialize_sort ());$; 0683 perform (get_uic ());:; 0684 last_vbn_in_buffer = .first_header_vbn - 1;,; 0685 perform (read_mfd_header ());&; 0686 cache_header_count = 0;$; 0687 process_all_files ();4; 0688 $dassgn (chan = .disk_acp_channel);(; 0689 IF .bitmap_ptr NEQ 0 THEN>; 0690 lib$free_vm (%REF (512 * .index_bitmap_size),*; 0691 bitmap_ptr);+$; 0692 perform (do_sort ()); ; 0693 display_files ();; 0694 end_sort ();; 0695 END;,; 0696 perform (close_output_file ());!; 0697 RETURN .worst_error;; 0698 END;+ .EXTRN SYS$GETTIM, SYS$ASSIGN, SYS$DASSGNOWNER:=U.70: .WORD ^M ;Save R2,R3 ; 0663J MOVAB W^DEVICE_NAME_DESCR, R3 ;DEVICE_NAME_DESCR, R3 ;8 MOVAB W^PERFORM, R2 ;PERFORM, R2 ;. SUBL2 #4, SP , ;#4, SP ;8 PUSHAB -8(R3) ;CURRENT_TIME ; 0667= CALLS #1, G^SYS$GETTIM ;#1, SYS$GETTIM ;& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;I CALLS #0, -180(R2) ;#0, ALLOCATE_HEADER_BUFFER ; 0668& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;I CALLS #0, -102(R2) ;#0, ALLOCATE_CACHE_BUFFER ; 0669& PUSHL R0 - ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;] CALLS #0, G^INITIALIZE_QIOBLOCK_ARRAY ;#0, INITIALIZE_QIOBLOCK_ARRAY ; 0670& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;M CALLS #0, G^OPEN_OUTPUT_FILE ;#0, OPEN_OUTPUT_FILE ; 0671& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;I CALLS #0, G^OUTPUT_CONTROL ;#0, OUTPUT_CONTROL . ; 0672& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;.1$: PUSHL R3 ;R3 ; 0673; CALLS #1, 14(R2) ;#1, GET_PARAMETER ;. BLBS R0, 2$ ;R0, 2$ ;& BRW 4$ ;4$ ;42$: CLRQ -(SP) ;-(SP) ; 06766 PUSHAB 8(R3) ;DISK_ACP_CHANNEL ;& PUSHL R3 ;R3 ;= CALLS #4, G^SYS$ASSIGN ;#4, SYS$ASSIGN / ;& PUSHL R0 ;R0 ;8 CALLS #1, (R2) ;#1, PERFORM ; 0675O CALLS #0, G^ACCESS_INDEX_FILE ;#0, ACCESS_INDEX_FILE ; 0677& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;1 PUSHAB W^U.31 ;U.31 ; 0678F CALLS #1, G^READ_HOME_BLOCK ;#1, READ_HOME_BLOCK ;& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;1 0 PUSHAB W^U.31 ;U.31 ; 0679K CALLS #1, G^PROCESS_HOME_BLOCK ;#1, PROCESS_HOME_BLOCK ;& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;O CALLS #0, G^READ_INDEX_BITMAP ;#0, READ_INDEX_BITMAP ; 0680& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;T CALLS #0, G^FIND_LAST_HEADER_VBN ;#0, FIND_LAST_HEADER_VBN ; 0681& PUSHL R0 1;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;K CALLS #0, G^INITIALIZE_SORT ;#0, INITIALIZE_SORT ; 0682& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;; CALLS #0, 142(R2) ;#0, GET_UIC ; 0683& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;[ SUBL3 #1, 12(R3), 52(R3) ;#1, FIRST_HEADER_VBN, LAST_VBN_IN_BUFFER ; 0684K CALLS # 20, G^READ_MFD_HEADER ;#0, READ_MFD_HEADER ; 0685& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;> CLRL -20(R3) ;CACHE_HEADER_COUNT ; 0686O CALLS #0, G^PROCESS_ALL_FILES ;#0, PROCESS_ALL_FILES ; 0687; PUSHL 8(R3) ;DISK_ACP_CHANNEL ; 0688= CALLS #1, G^SYS$DASSGN ;#1, SYS$DASSGN ;7 TSTL -28(R3) ;BITMAP_PTR ; 0689& BEQL 3$ 3 ;3$ ;7 PUSHAB -28(R3) ;BITMAP_PTR ; 0690> MOVZWL 32(R3), R0 ;INDEX_BITMAP_SIZE, R0 ;: ASHL #9, R0, 4(SP) ;#9, R0, 4(SP) ;, PUSHAB 4(SP) ;4(SP) ;? CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM ;@3$: CALLS #0, G^DO_SORT ;#0, DO_SORT ; 0692& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;H CALLS #0, G^DISPLAY_FIL 4ES ;#0, DISPLAY_FILES ; 0693? CALLS #0, G^END_SORT ;#0, END_SORT ; 0694+ BRW 1$ ;1$ ; 0673R4$: CALLS #0, G^CLOSE_OUTPUT_FILE ;#0, CLOSE_OUTPUT_FILE ; 0696& PUSHL R0 ;R0 ;3 CALLS #1, (R2) ;#1, PERFORM ;? MOVL 604(R3), R0 ;WORST_ERROR, R0 ; 0665( RET ; ; 0663;; Routine Size: 318 bytes, Routine Base: $CODE$ + 01A56; 0699 END; 0700 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;W; $GLOBAL$ 636 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)T; $OWN$ 872 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $PLIT$ 76 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 740 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)Y; _LIB$KEY0$ 0 6 NOVEC,NOWRT, RD , EXE, SHR, LCL, REL, CON, PIC,ALIGN(1)Z; _LIB$STATE$ 40 NOVEC,NOWRT, RD , EXE, SHR, LCL, REL, CON, PIC,ALIGN(0); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 13 0 407; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PR7OCESS,SORT; Compilation Complete .END OWNERww­ •+B5Œ, .TITLE OWNER_ERROR_MESSAGES- .FACILITY SET,253/PREFIX=OWNER_ .SEVERITY SUCCESS/ SUCCESS  .SEVERITY WARNING. BADLEVEL Q FNMABT/FAO=1 .ENDww­@ôhè¸ Œ9; 0001 MODULE process_all_files ( IDENT = 'V803-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 0005 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 EXTERNAL; 0078 bitmap_ptr:; 0079 LONG,; 0080 cluster_factor:; 0081 LONG, ; 0082 current_header_vbn:; 0083 LONG,; 0084 disk_acp_channel:; 0085 LONG,; 0086 first_header_vbn:; 0087 LONG,!; 0088 first_vbn_in_buffer:; 0089 LONG,; 0090 free_bu9ffer_mask:; 0091 BITVECTOR [32],; 0092 header_buffer_ptr:; 0093 LONG,; 0094 header_count:; 0095 LONG,; 0096 index_bitmap_size:; 0097 WORD,; 0098 index_bitmap_vbn:; 0099 LONG,; 0100 index_file_iosb:; 0101 VECTOR [4,WORD],; 0102 last_header_vbn:; 0103 LONG, ; 0104 last_vbn_in_buffer:; 0105 LONG,; 0106 mfd_header:; 0107 BLOCK [,BYTE],#; 0108 : qioblock_base_address:; 0109 LONG,; 0110 uic_flags:; 0111 BITVECTOR [32],; 0112 uic_group:; 0113 WORD,; 0114 uic_member:; 0115 WORD,$; 0116 volume_structure_level:; 0117 BYTE,; 0118 worst_error:; 0119 LONG; ; 0120 ; 0121 ; 0122 EXTERNAL LITERAL; 0123 owner_fnmabt; ; 0124 ; 0125 EXTERNAL ROUTINEK; 0126 allocate_buffer: ADDRESSING_MODE (GENERAL) NOV;ALUE,K; 0127 complete_filename: ADDRESSING_MODE (GENERAL) NOVALUE,K; 0128 get_next_header: ADDRESSING_MODE (GENERAL) NOVALUE,K; 0129 qioast: ADDRESSING_MODE (GENERAL) NOVALUE,K; 0130 release_buffer: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0131 save_filename: ADDRESSING_MODE (GENERAL),K; 0132 update_filename: ADDRESSING_MODE (GENERAL) NOVALUE,C; 0133 verify_header: < ADDRESSING_MODE (GENERAL); ; 0134 ; 0135 5; 0136 ROUTINE uic_match (group_ptr,member_ptr) = ; 0137 ; 0138 BEGIN ; 0139 ; 0140 BIND6; 0141 group = .group_ptr:0; 0142 WORD,7; 0143 member = .member_ptr:0; 0144 WORD; ; 0145 M; 0146 IF (.uic_flags [wild_v_group] AND .uic_flags [wild_v_member]) ORL; 0147 (.uic_fl=ags [wild_v_group] AND (.uic_member EQL .member)) ORK; 0148 (.uic_flags [wild_v_member] AND (.uic_group EQL .group)) ORL; 0149 ((.uic_group EQL .group) AND (.uic_member EQL .member)) THEN; 0150 RETURN true; 0151 ELSE; 0152 RETURN false;; 0153 END; .TITLE PROCESS_ALL_FILES .IDENT \V03-0000\[ .EXTRN BITMAP_PTR, CLUSTER_FACTOR, CURRENT_HEADER_VBN, DISK_ACP_CHANNEL, FIRST_HEADER_VBNb .EXTRN FIRST_VBN_IN_BUFFER, FREE_BUFFER_MASK, >HEADER_BUFFER_PTR, HEADER_COUNT, INDEX_BITMAP_SIZE[ .EXTRN INDEX_BITMAP_VBN, INDEX_FILE_IOSB, LAST_HEADER_VBN, LAST_VBN_IN_BUFFER, MFD_HEADERe .EXTRN QIOBLOCK_BASE_ADDRESS, UIC_FLAGS, UIC_GROUP, UIC_MEMBER, VOLUME_STRUCTURE_LEVEL, WORST_ERRORb .EXTRN OWNER_FNMABT, ALLOCATE_BUFFER, COMPLETE_FILENAME, GET_NEXT_HEADER, QIOAST, RELEASE_BUFFER6 .EXTRN SAVE_FILENAME, UPDATE_FILENAME, VERIFY_HEADER .PSECT $CODE$,NOWRT,2 ;UIC_MATCH8U.1: .WORD ^M ;Save R2 ; 0136< ? MOVAB W^UIC_FLAGS, R2 ;UIC_FLAGS, R2 ;: BLBC (R2), 1$ ;UIC_FLAGS, 1$ ; 0146= BBS #1, (R2), 3$ ;#1, UIC_FLAGS, 3$ ;: BLBC (R2), 1$ ;UIC_FLAGS, 1$ ; 0147I CMPW W^UIC_MEMBER, @8(AP) ;UIC_MEMBER, @MEMBER_PTR ;& BEQL 3$ ;3$ ;E1$: BBC #1, (R2), 2$ ;#1, UIC_FLAGS, 2$ ; 0148F CMPW W^UIC_GROUP, @4(AP) ;UIC_GROUP, @GROUP_PTR ;& @ BEQL 3$ ;3$ ;N2$: CMPW W^UIC_GROUP, @4(AP) ;UIC_GROUP, @GROUP_PTR ; 0149& BNEQ 4$ ;4$ ;I CMPW W^UIC_MEMBER, @8(AP) ;UIC_MEMBER, @MEMBER_PTR ;& BNEQ 4$ ;4$ ;63$: MOVL #1, R0 ;#1, R0 ; 0138# RET ; ;)4$: CLRL R0 ;R0 ;( RET ; ; 0136:; Routine Size: 60 bytes, Routine Base: $COADE$ + 0000 ; 0154 ; 0155 A; 0156 ROUTINE name_that_file (current_header_ptr): NOVALUE = ; 0157 ; 0158 BEGIN ; 0159 ; 0160 BIND?; 0161 current_header = .current_header_ptr:9; 0162 BLOCK [,BYTE],J; 0163 record_attributes = current_header [fh2$w_recattr]:9; 0164 BLOCK [,BYTE]; ; 0165 ; 0166 OWN ; 0167 qioblock_address:; 0168 B LONG; ; 0169 G; 0170 allocate_buffer (qioblock_address); ! get a buffer; 0171 BEGIN; 0172 BIND=; 0173 qioblock = .qioblock_address:9; 0174 BLOCK [,BYTE],F; 0175 qioblock_iosb = qioblock [qioblock$q_iosb]::; 0176 VECTOR [,WORD],F; 0177 name_descr = qioblock [qioblock$q_name]:9; 0178 C BLOCK [,BYTE]; ; 0179 !0; 0180 ! Simulate successful io completion ; 0181 !.; 0182 qioblock_iosb [0] = ss$_normal; ; 0183 !9; 0184 ! Copy info into qio block from file header. ; 0185 !M; 0186 qioblock [qioblock$l_uic] = .current_header [fh2$l_fileowner];R; 0187 qioblock [qioblock$l_blksalloc] = .record_attributes [fat$l_hiblk];Q; 0188 qioblock [qioblock$l_blksused] = .record_attributes [fat$l_efblk]; ; 0189 !=; 0190 ! D initialize state, format, and terminal context ; 0191 !=; 0192 qioblock [qioblock$b_state] = initial_segment;0; 0193 qioblock [qioblock$b_format] = 0;6; 0194 qioblock [qioblock$b_terminal] = %C' '; ; 0195 !.; 0196 ! initialize file name descriptor ; 0197 !-; 0198 name_descr [dsc$w_length] = 0;I; 0199 name_descr [dsc$a_pointer] = qioblock [qioblock$t_header]; ; 0200 !N; 0201 ! make header pointer in qio block point to header Epassed to this; 0202 ! routine. ; 0203 !=; 0204 qioblock [qioblock$l_header] = current_header; ; 0205 !&; 0206 ! simulate io completion. ; 0207 !$; 0208 $setast (enbflg = 0);!; 0209 qioast (qioblock);$; 0210 $setast (enbflg = 1);; 0211 END;; 0212 END; .PSECT $OWN$,NOEXE,2;QIOBLOCK_ADDRESSU.7: .BLKB 4 .EXTRN SYS$SETAST .PSECT $CODE$,NOWRT,2;NAME_THAT_FILEHU.4: .WORD ^M F ;Save R2,R3,R4,R5 ; 0156= MOVAB G^SYS$SETAST, R5 ;SYS$SETAST, R5 ;C MOVL 4(AP), R4 ;CURRENT_HEADER_PTR, R4 ; 01584 MOVAB 20(R4), R3 ;20(R4), R3 ;/ PUSHAB W^U.7 ;U.7 ; 0170F CALLS #1, G^ALLOCATE_BUFFER ;#1, ALLOCATE_BUFFER ;6 MOVL W^U.7, R2 ;U.7, R2 ; 01714 MOVAB 28(R2), R0 ;28(R2), R0 ;9 MOVW #1, 20(R2) ;#1, 20(R2) G ; 0182? MOVL 60(R4), 8(R2) ;60(R4), 8(R2) ; 0186? MOVL 4(R3), 16(R2) ;4(R3), 16(R2) ; 0187? MOVL 8(R3), 12(R2) ;8(R3), 12(R2) ; 01881 CLRW 1(R2) ;1(R2) ; 01929 MOVB #32, 3(R2) ;#32, 3(R2) ; 0194/ CLRW (R0) ;(R0) ; 0198A MOVAB 256(R2), 4(R0) ;256(R2), 4(R0) ; 01998 MOVL R4, 4(R2) ;R4, 4(R2) ; 02041 CHLRL -(SP) ;-(SP) ; 02086 CALLS #1, (R5) ;#1, SYS$SETAST ;+ PUSHL R2 ;R2 ; 02096 CALLS #1, G^QIOAST ;#1, QIOAST ;+ PUSHL #1 ;#1 ; 02106 CALLS #1, (R5) ;#1, SYS$SETAST ;( RET ; ; 0156:; Routine Size: 95 bytes, Routine Base: $CODE$ + 003C ; 0213 ; 0214 6; 0215 GLOBAL ROUTINE process_all_files: NOVALUE = ; 0216I ; 0217 BEGIN ; 0218 ; 0219 OWN&; 0220 current_header_address:; 0221 LONG,; 0222 file_id:+; 0223 BLOCK [fid$c_length,BYTE],; 0224 file_number:; 0225 LONG; ; 0226 R; 0227 INCR current_header_vbn FROM .first_header_vbn TO .last_header_vbn DO; 0228 BEGIN3; 0229 get_next_header (current_header_vbn,8; 0230 current_header_address);; 0231 BEGIN; 0232 J BINDK; 0233 current_header = .current_header_address:A; 0234 BLOCK [,BYTE],S; 0235 file_characteristics = current_header [fh2$l_filechar]:A; 0236 BLOCK [,BYTE]; ; 0237 K; 0238 file_number = .current_header_vbn - .first_header_vbn + 1;;; 0239 file_id [fid$w_num] = .file_number <0,16>;;; 0240 file_id [fid$b_nmx] = . Kfile_number <16,8>;G; 0241 file_id [fid$w_seq] = .current_header [fh2$w_fid_seq];); 0242 file_id [fid$b_rvn] = 1;>; 0243 IF verify_header (current_header,file_id) AND=; 0244 .current_header [fh2$w_seg_num] EQL 0 ANDC; 0245 .file_characteristics [fch$v_markdel] EQL 0 AND?; 0246 uic_match (current_header [fh2$w_uicgroup],E; 0247 current_header [fh2$w_uicmember]) THEN:; 0248 name_Lthat_file ( current_header);; 0249 END;; 0250 END;; 0251 END; .PSECT $OWN$,NOEXE,2;CURRENT_HEADER_ADDRESSU.12: .BLKB 4;FILE_IDU.13: .BLKB 6 .BLKB 2 ;FILE_NUMBERU.14: .BLKB 4 .PSECT $CODE$,NOWRT,2` .ENTRY PROCESS_ALL_FILES, ^M ;PROCESS_ALL_FILES, Save R2,R3,R4 ; 02153 MOVAB W^U.14, R4 ;U.14, R4 ;K MOVL W^LAST_HEADER_VBN, R3 ;LAST_HEADER_VBN, R3 ; 0227`M SUBL3 #1, W^FIRST_HEADER_VBN, -(SP) ;#1, FIRST_HEADER_VBN, CURRENT_HEADER_VBN ;& BRB 2$ ;2$ ;E1$: PUSHAB -12(R4) ;CURRENT_HEADER_ADDRESS ; 02297 PUSHAB 4(SP) ;CURRENT_HEADER_VBN ;F CALLS #2, G^GET_NEXT_HEADER ;#2, GET_NEXT_HEADER ;H MOVL -12(R4), R2 ;CURRENT_HEADER_ADDRESS, R2 ; 0231d SUBL3 W^FIRST_HEADER_VBN, (SP), R0 ;FIRST_HEADER_VBN, CURRENT_HEADER_VBN, R0 N ; 0238< MOVAB 1(R0), (R4) ;1(R0), FILE_NUMBER ;D MOVW (R4), -8(R4) ;FILE_NUMBER, FILE_ID ; 0239I MOVB 2(R4), -3(R4) ;FILE_NUMBER+2, FILE_ID+5 ; 0240D MOVW 10(R2), -6(R4) ;10(R2), FILE_ID+2 ; 0241< MOVB #1, -4(R4) ;#1, FILE_ID+4 ; 02424 PUSHAB -8(R4) ;FILE_ID ; 0243& PUSHL R2 ;R2 ;C CALLS #2, G^VERIFY_HEADER ;#2, VERIFY_HEADER O ;. BLBC R0, 2$ ;R0, 2$ ;1 TSTW 4(R2) ;4(R2) ; 0244& BNEQ 2$ ;2$ ;A BBS #7, 53(R2), 2$ ;#7, 53(R2), 2$ ; 02453 PUSHAB 60(R2) ;60(R2) ; 02473 PUSHAB 62(R2) ;62(R2) ; 02461 CALLS #2, W^U.1 ;#2, U.1 ;. BLBC R0, 2$ ;R0, 2$ ;+ PUSHL R2 ;R2 ; 02481 CALLS #1, W^U.4 ;#1, U.4 P ;L2$: AOBLEQ R3, (SP), 1$ ;R3, CURRENT_HEADER_VBN, 1$ ; 0227( RET ; ; 0215;; Routine Size: 116 bytes, Routine Base: $CODE$ + 009B; 0252 END; 0253 ELUDOM; PSECT SUMMARY;#; Name Bytes Attributes;U; $CODE$ 271 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)T; $OWN$ 20 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)Q; LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 19 0 406; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Compilation Complete .ENDww­cøè¸ Œ,; 0001 MODULE sort ( IDENT = 'V03-0000') = ; 0002 ; 0003 BEGIN ; 0004 %; 00R05 LIBRARY 'sys$library:lib';; 0006 REQUIRE 'owner.req'; ; 0076 ; 0077 ; 0078 EXTERNAL; 0079 first_header_vbn:; 0080 LONG,; 0081 last_header_vbn:; 0082 LONG,!; 0083 next_display_record:; 0084 LONG,; 0085 next_sort_record:; 0086 LONG,+; 0087 start_of_record_address_table:; 0088 LONG; ; 0089 ; 0090 EXTERNAL ROUTINEK; 0091 lib$free_vm: ADDRESSING_MODE (GENESRAL) NOVALUE,C; 0092 lib$get_vm: ADDRESSING_MODE (GENERAL); ; 0093 ; 0094 2; 0095 GLOBAL ROUTINE release_record (uic_ptr,?; 0096 blocks_allocated_ptr,:; 0097 blocks_used_ptr,?; 0098 filename_descr_ptr) = ; 0099 ; 0100 BEGIN ; 0101 ; 0102 BIND4; 0103 uic = .uic_ptr:0; 0104 T LONG,A; 0105 blocks_allocated = .blocks_allocated_ptr:0; 0106 LONG,<; 0107 blocks_used = .blocks_used_ptr:0; 0108 LONG,?; 0109 filename_descr = .filename_descr_ptr:9; 0110 BLOCK [,BYTE]; ; 0111 ; 0112 BINDJ; 0113 record_address_table = .start_of_record_address_table::; 0114 U VECTOR [,LONG]; ; 0115 ; 0116 OWN; 0117 bytes_required:; 0118 LONG,; 0119 status:; 0120 LONG; ; 0121 ; 0122 BUILTIN; 0123 ACTUALCOUNT; ; 0124 ; 0125 ; 0126 !6; 0127 ! Calculate space required for this record. ; 0128 !); 0129 IF ACTUALCOUNT () EQL 3 THEN ; 0130 !N; 0131 ! No file name. This is a special case for first or last records.5; 0132 ! These records are dVelimeters for sort. ; 0133 !2; 0134 bytes_required = sortrecord$s_fixed; 0135 ELSE ; 0136 !K; 0137 ! Normal case. File name is stored with record. This record is; 0138 ! actually sorted. ; 0139 !T; 0140 bytes_required = sortrecord$s_fixed + .filename_descr [dsc$w_length]; ; 0141 !L; 0142 ! Now that we have calculated length of record, allocate space to; 0143 ! store information. ; 0144 !5; 0145 IF (status = lib$get_vm (byte Ws_required,L; 0146 record_address_table [.next_sort_record])) THEN; 0147 BEGIN; 0148 BINDU; 0149 sortrecord = .record_address_table [.next_sort_record]:9; 0150 BLOCK [,BYTE];8; 0151 next_sort_record = .next_sort_record + 1;4; 0152 sortrecord [sortrecord$l_uic] = .uic;A; 0153 sortrecord [sortrecord$l_blksused] = .blocks_used;G; 0154 sortrecord [sortrecord$l_bl Xksalloc] = .blocks_allocated;+; 0155 IF ACTUALCOUNT () EQL 3 THEN5; 0156 sortrecord [sortrecord$b_length] = 0; 0157 ELSE; 0158 BEGINS; 0159 sortrecord [sortrecord$b_length] = .filename_descr [dsc$w_length];<; 0160 CH$MOVE (.sortrecord [sortrecord$b_length],C; 0161 CH$PTR (.filename_descr [dsc$a_pointer]),G; 0162 CH$PTR (sortrecord [sortrecord$t_filename]));; 0163 END;; 0164 Y END;; 0165 RETURN .status;; 0166 END; .TITLE SORT .IDENT \V03-0000\ .PSECT $OWN$,NOEXE,2;BYTES_REQUIREDU.7: .BLKB 4;STATUSU.8: .BLKB 4p .EXTRN FIRST_HEADER_VBN, LAST_HEADER_VBN, NEXT_DISPLAY_RECORD, NEXT_SORT_RECORD, START_OF_RECORD_ADDRESS_TABLE .EXTRN LIB$FREE_VM, LIB$GET_VM .PSECT $CODE$,NOWRT,2e .ENTRY RELEASE_RECORD, ^M ; Z;H MOVAB W^NEXT_SORT_RECORD, R7 ;NEXT_SORT_RECORD, R7 ;1 MOVAB W^U.7, R6 ;U.7, R6 ;D MOVL 16(AP), R2 ;FILENAME_DESCR_PTR, R2 ; 0100\ MOVL W^START_OF_RECORD_ADDRESS_TABLE, R3 ;START_OF_RECORD_ADDRESS_TABLE, R3 ;6 CMPB (AP), #3 ;(AP), #3 ; 0129& BNEQ 1$ ;1$ ;@ MOVL #13, (R6) ;#13, BYTES_REQUIRED ; 0134+ BRB 2$ ;2$ ; 0129E1$: [MOVZWL (R2), (R6) ;(R2), BYTES_REQUIRED ; 0140; ADDL2 #13, (R6) ;#13, BYTES_REQUIRED ;C2$: MOVL (R7), R0 ;NEXT_SORT_RECORD, R0 ; 01461 PUSHAL (R3)[R0] ;(R3)[R0] ;+ PUSHL R6 ;R6 ; 0145= CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM ;3 MOVL R0, 4(R6) ;R0, STATUS ;. BLBC R0, 4$ ;R0, 4$ ;@ MOVL (R7), R0 ;NEXT_SORT_RECORD \, R0 ; 0149= MOVL (R3)[R0], R0 ;(R3)[R0], R0 ; 0147: INCL (R7) ;NEXT_SORT_RECORD ; 0151? MOVL @4(AP), (R0) ;@UIC_PTR, (R0) ; 0152I MOVL @12(AP), 8(R0) ;@BLOCKS_USED_PTR, 8(R0) ; 0153L MOVL @8(AP), 4(R0) ;@BLOCKS_ALLOCATED_PTR, 4(R0) ; 01546 CMPB (AP), #3 ;(AP), #3 ; 0155& BNEQ 3$ ;3$ ;3 CLRB 12(R0) ;12(R0) ] ; 0156+ BRB 4$ ;4$ ; 0155@3$: MOVB (R2), 12(R0) ;(R2), 12(R0) ; 01599 MOVZBL 12(R0), R1 ;12(R0), R1 ; 0160B MOVC3 R1, @4(R2), 13(R0) ;R1, @4(R2), 13(R0) ;;4$: MOVL 4(R6), R0 ;STATUS, R0 ; 0100( RET ; ; 0095;; Routine Size: 111 bytes, Routine Base: $CODE$ + 0000 ; 0167 ; 0168 @; 0169 GLOBAL ROUTINE return_record (starting_address_^ptr) = ; 0170 ; 0171 BEGIN ; 0172 ; 0173 OWN; 0174 record_size; ; 0175 ; 0176 BINDI; 0177 starting_address = .starting_address_ptr:8; 0178 LONG; ; 0179 ; 0180 BINDR; 0181 record_address_table = .start_of_record_address_table:B; 0182 VECTOR [,LONG]; ; 0183 ; 0184 E; 0185 IF .next_display_re _cord LSS (.next_sort_record - 1) THEN ; 0186 !;; 0187 ! There is at least one more record to return. ; 0188 !; 0189 BEGIN; 0190 BIND\; 0191 sortrecord = .record_address_table [.next_display_record - 1]:9; 0192 BLOCK [,BYTE]; ; 0193 !V; 0194 ! There will always be a previous record. Free the previous record before0; 0195 ! returning address of next record. ; 0196 !T; 0197 recor `d_size = sortrecord$s_fixed + .sortrecord [sortrecord$b_length];(; 0198 lib$free_vm (record_size,M; 0199 record_address_table [.next_display_record - 1]); ; 0200 !Q; 0201 ! Return starting address of next record and calculate index of next&; 0202 ! record to be displayed. ; 0203 !O; 0204 starting_address = .record_address_table [.next_display_record];>; 0205 next_display_record = .next_display_record + 1;; 0206 RETURN tr aue;; 0207 ENDI; 0208 ELSE IF .next_display_record EQL (.next_sort_record -1) THEN ; 0209 !Q; 0210 ! We have just returned the last useful record -- only the terminalT; 0211 ! delimeter remains. Free this last record and return saying that there#; 0212 ! are no more records. ; 0213 !; 0214 BEGIN6; 0215 lib$free_vm (%REF (sortrecord$s_fixed),F; 0216 record_address_table [.next_sort_record]);; 0217 RETURN bfalse;; 0218 END; 0219 ELSE ; 0220 !$; 0221 ! Error. Nothing to do. ; 0222 !; 0223 RETURN false;; 0224 END; .PSECT $OWN$,NOEXE,2 ;RECORD_SIZEU.11: .BLKB 4 .PSECT $CODE$,NOWRT,2a .ENTRY RETURN_RECORD, ^M ;RETURN_RECORD, Save R2,R3,R4,R5,R6 ; 01693 MOVAB W^U.11, R6 ;U.11, R6 ;M MOVAB W^NEXT_DISPLAY_RECORD, R5 ;NEXT_DISPLAY_RECORD, R5 ;? MOVAB G^LIB c$FREE_VM, R4 ;LIB$FREE_VM, R4 ;. SUBL2 #4, SP ;#4, SP ;a MOVL W^START_OF_RECORD_ADDRESS_TABLE, R3 ;START_OF_RECORD_ADDRESS_TABLE, R3 ; 0171C MOVL (R5), R0 ;NEXT_DISPLAY_RECORD, R0 ; 0185H MOVL W^NEXT_SORT_RECORD, R1 ;NEXT_SORT_RECORD, R1 ;4 MOVAB -1(R1), R2 ;-1(R1), R2 ;. CMPL R0, R2 ;R0, R2 ;& BGEQ 1$ ;1$ ;A MOVL -4(R3)[R0], d R1 ;-4(R3)[R0], R1 ; 0189C MOVZBL 12(R1), (R6) ;12(R1), RECORD_SIZE ; 01979 ADDL2 #13, (R6) ;#13, RECORD_SIZE ;9 PUSHAL -4(R3)[R0] ;-4(R3)[R0] ; 0199+ PUSHL R6 ;R6 ; 01987 CALLS #2, (R4) ;#2, LIB$FREE_VM ;C MOVL (R5), R0 ;NEXT_DISPLAY_RECORD, R0 ; 0204L MOVL (R3)[R0], @4(AP) ;(R3)[R0], @STARTING_ADDRESS_PTR ;< INCL (R5) e ;NEXT_DISPLAY_RECORD ; 02053 MOVL #1, R0 ;#1, R0 ; 0171# RET ; ;.1$: BNEQ 2$ ;2$ ; 02086 PUSHAL (R3)[R1] ;(R3)[R1] ; 02169 MOVL #13, 4(SP) ;#13, 4(SP) ; 0215, PUSHAB 4(SP) ;4(SP) ;7 CALLS #2, (R4) ;#2, LIB$FREE_VM ;.2$: CLRL R0 ;R0 ; 0208( RET ; ; 0169:; Routinfe Size: 97 bytes, Routine Base: $CODE$ + 006F ; 0225 ; 0226 +; 0227 GLOBAL ROUTINE initialize_sort = ; 0228 ; 0229 BEGIN ; 0230 ; 0231 OWN; 0232 status:; 0233 LONG; ; 0234 ; 0235 !N; 0236 ! Calculate maximum number of files on this disk and allocate space&; 0237 ! for sort record pointers. ; 0238 !Z; 0239 IF (status = lib$get_vm (%REF (4*(.last_header_vbn - .first_header_vbn + 1)),J; 0240 g start_of_record_address_table)) THEN; 0241 BEGINV; 0242 next_sort_record = 0; ! index of next available sort record:; 0243 ! pointerR; 0244 next_display_record = 1; ! we do not display the first (or@; 0245 ! last) recordsR; 0246 status = release_record (%REF (0),! This record will always be lessG; 0247 %REF (0)h,! than any real record2; 0248 %REF (0));; 0249 END;; 0250 RETURN .status;; 0251 END; .PSECT $OWN$,NOEXE,2;STATUSU.16: .BLKB 4 .PSECT $CODE$,NOWRT,2R .ENTRY INITIALIZE_SORT, ^M ;INITIALIZE_SORT, Save R2 ; 02273 MOVAB W^U.16, R2 ;U.16, R2 ;0 SUBL2 #12, SP ;#12, SP ;] PUSHAB W^START_OF_RECORD_ADDRESS_TABLE ;START_OF_RECORD_ADDRESS_TAB iLE ; 0239V SUBL3 W^FIRST_HEADER_VBN, - ;FIRST_HEADER_VBN, LAST_HEADER_VBN, R0 ;/ W^LAST_HEADER_VBN, R0 ; ;< ASHL #2, R0, 12(SP) ;#2, R0, 12(SP) ;4 ADDL2 #4, 12(SP) ;#4, 12(SP) ;. PUSHAB 12(SP) ;12(SP) ;= CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM ;2 MOVL R0, (R2) ;R0, STATUS ;. BLBC R0, 1$ ;R0, 1$ ;F CLRL W^NEXT_SO jRT_RECORD ;NEXT_SORT_RECORD ; 0242R MOVL #1, W^NEXT_DISPLAY_RECORD ;#1, NEXT_DISPLAY_RECORD ; 02441 CLRL 8(SP) ;8(SP) ; 0248, PUSHAB 8(SP) ;8(SP) ;1 CLRL 8(SP) ;8(SP) ; 0247, PUSHAB 8(SP) ;8(SP) ;1 CLRL 8(SP) ;8(SP) ; 0246, PUSHAB 8(SP) ;8(SP) ;D CALLS #3, W^RELEASE_RECORD ;#3, RELEASE_RECORD ;2 MOVkL R0, (R2) ;R0, STATUS ;:1$: MOVL (R2), R0 ;STATUS, R0 ; 0229( RET ; ; 0227:; Routine Size: 86 bytes, Routine Base: $CODE$ + 00D0 ; 0252 ; 0253 -; 0254 GLOBAL ROUTINE end_sort: NOVALUE = ; 0255 ; 0256 BEGIN ; 0257 N; 0258 lib$free_vm (%REF (4*(.last_header_vbn - .first_header_vbn + 1)),9; 0259 start_of_record_address_table);; 0260 END;H .ENlTRY END_SORT, ^M<> ;END_SORT, Save nothing ; 0254. SUBL2 #4, SP ;#4, SP ;] PUSHAB W^START_OF_RECORD_ADDRESS_TABLE ;START_OF_RECORD_ADDRESS_TABLE ; 0258V SUBL3 W^FIRST_HEADER_VBN, - ;FIRST_HEADER_VBN, LAST_HEADER_VBN, R0 ;/ W^LAST_HEADER_VBN, R0 ; ;: ASHL #2, R0, 4(SP) ;#2, R0, 4(SP) ;3 ADDL2 #4, 4(SP) ;#4, 4(SP) ;, PUSHAB 4(SP) ;4(SP) m ;? CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM ;( RET ; ; 0254:; Routine Size: 37 bytes, Routine Base: $CODE$ + 0126 ; 0261 ; 0262 6; 0263 ROUTINE sort (key_ptr,count_ptr): NOVALUE = ; 0264 ; 0265 BEGIN ; 0266 ; 0267 BUILTIN; 0268 SP; ; 0269 ; 0270 BIND4; 0271 key = .key_ptr::; 0272 VECTOR [,LONG],6; 0273 n count = .count_ptr:0; 0274 LONG,/; 0275 stack_top = .SP:0; 0276 LONG; ; 0277 ; 0278 LITERAL.; 0279 cutoff = 10; ; 0280 ; 0281 ! LITERAL-; 0282 ! true = 1,-; 0283 ! false = 0; ; 0284 ; 0285 ! MACRO6; 0286 ! sortrecord$l_uic = 0,0,32,0 %,6; 0287 ! o sortrecord$b_length = 12,0,8,0 %,6; 0288 ! sortrecord$t_filename = 13,0,0,0 %; ; 0289 %; M 0290 MACRO compare (x,op,y) = ; M 0291 ; M 0292 BEGIN; M 0293 BINDD; M 0294 recordx = x: BLOCK [,BYTE],D; M 0295 recordy = y: BLOCK [,BYTE]; ; M 0296 S; M 0297 (IF .recordx [sortrecord$l_uic] EQL .recordy [sortrecord$l_uic] THENC; M 0298 (%NAME ('CH$',op) (.recordx [sortrecordp$b_length],C; M 0299 CH$PTR (recordx [sortrecord$t_filename]),9; M 0300 .recordy [sortrecord$b_length],C; M 0301 CH$PTR (recordy [sortrecord$t_filename]),!; M 0302 %C' ')); M 0303 ELSEM; M 0304 (.recordx [sortrecord$l_uic] op .recordy [sortrecord$l_uic])); 0305 END %; ; 0306 ; 0307 ; M 0308 MACRO empty =); M 0309 (IF .SP EQL stack_top THEN; M 0310 true; M 0311 q ELSE; 0312 false) %; ; 0313 +; M 0314 MACRO exchange (data1,data2) =; M 0315 BEGIN; M 0316 SP = .SP -4;; M 0317 .SP = .data1;; M 0318 data1 = .data2;; M 0319 data2 = ..SP;; M 0320 SP = .SP + 4;; 0321 END %; ; 0322 &; M 0323 MACRO pop (data1,data2) =; M 0324 BEGIN; M 0325 data2 = ..SP;; M 0326 SP = .SP + 4;; M 0327 data1 = ..SP;; M 0328 SP = .SP + 4;; 0329r END %; ; 0330 '; M 0331 MACRO push (data1,data2) =; M 0332 BEGIN; M 0333 SP = .SP - 4;; M 0334 .SP = data1;; M 0335 SP = .SP - 4;; M 0336 .SP = data2;; 0337 END %; ; 0338 ; 0339 OWN; 0340 l,r,i,j; ; 0341 &; 0342 IF .count GEQ cutoff THENN; 0343 BEGIN ! {* use quicksort *}; 0344 PUSH (1,.count);!; 0345 WHILE NOT empty DOP; 0346 s BEGIN ! {* stack not empty *}; 0347 POP (l,r);; 0348 i = .l;; 0349 j = .r + 1;; 0350 DOG; 0351 BEGIN ! {* i le j *}; 0352 DON; 0353 BEGIN ! {* k[i] lss k[l] *} ; 0354 i = .i + 1;N; 0355 END ! {* k[i] lss k[l] *}>; 0356 WHILE compare(. tkey [.i], LSS, .key [.l]);; 0357 DON; 0358 BEGIN ! {* k[l] lss k[j] *}; 0359 j = .j-1;N; 0360 END ! {* k[l] lss k[j] *}=; 0361 WHILE compare(.key[.l], LSS, .key [.j]);$; 0362 IF .j LEQ .i THEN; 0363 BEGIN0; 0364 exchange (key[.l],key[.j]);; 0365 END; 0366 ELSE; 0367 BEGIN2; u 0368 exchange (key [.i],key [.j]);; 0369 END;H; 0370 END ! {* i lss j *}#; 0371 WHILE .j GTR .i; ; 0372 1; 0373 IF ((.r - .j) GEQ (.j - .l)) AND/; 0374 ((.j - .l) GTR cutoff) THEN; 0375 BEGIN#; 0376 push (.j+1,.r);#; 0377 push (.l,.j-1);; 0378 END6; 0379 ELSE IF ((.j - .l) GTR (.r - .j)) AND4; 0380 v ((.r - .j) GTR cutoff) THEN; 0381 BEGIN"; 0382 push (.l,.j-1);"; 0383 push (.j+1,.r);; 0384 END3; 0385 ELSE IF ((.r - .j) GTR cutoff) AND6; 0386 ( cutoff GEQ (.j - . l)) THEN!; 0387 push (.j+1,.r)4; 0388 ELSE IF ((.j - . l) GTR cutoff) AND5; 0389 ( cutoff GEQ (.r - .j)) THEN"; 0390 push (.l,.j-1);P; 0391 END; w ! {* while not empty *}Q; 0392 END; ! {* count gtr cutoff *}!; 0393 IF cutoff GTR 1 THEN); 0394 INCR j FROM 2 TO .count DO>; 0395 IF compare( .key [.j-1], GTR, .key [.j]) THEN; 0396 BEGIN ; 0397 SP = .SP - 4;#; 0398 .SP = .key [.j];; 0399 i = .j - 1;; 0400 DO; 0401 BEGIN,; 0402 key [.i+1] = .key [.i]; ; 0403 ix = .i - 1;; 0404 END:; 0405 UNTIL compare (.key [.i], LEQ, ..SP);%; 0406 key [.i+1] = ..SP;!; 0407 SP = . SP + 4;; 0408 END;; 0409 END; .PSECT $OWN$,NOEXE,2;LU.22: .BLKB 4;RU.23: .BLKB 4;IU.24: .BLKB 4;JU.25: .BLKB 4 .PSECT $CODE$,NOWRT,2;SORThU.18: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,R11 ; 02639 MOVL 4(AP), R8 y ;KEY_PTR, R8 ; 02656 MOVAL -(SP), (SP) ;-(SP), (SP) ;? CMPL @8(AP), #10 ;@COUNT_PTR, #10 ; 0342& BGEQ 2$ ;2$ ;+1$: BRW 17$ ;17$ ;62$: SUBL2 #4, SP ;#4, SP ; 03441 MOVL #1, (SP) ;#1, (SP) ;. SUBL2 #4, SP ;#4, SP ;< MOVL @8(AP), (SP) ;@COUNT_PTR, (SP) ;93$: CMPL SP, (SP) ;SP, (SP) z ; 0345& BEQL 1$ ;1$ ;; MOVL (SP), W^U.23 ;(SP), U.23 ; 0347. ADDL2 #4, SP ;#4, SP ;6 MOVL (SP), W^U.22 ;(SP), U.22 ;. ADDL2 #4, SP ;#4, SP ;8 MOVQ W^U.22, R9 ;U.22, R9 ; 03483 MOVL R9, W^U.24 ;R9, U.24 ;? MOVAB 1(R10), W^U.25 ;1(R10), U.25 ; 0349; ASHL #2, R9, R11 ;#2, R9, R11 { ; 035644$: INCL W^U.24 ;U.24 ; 03548 MOVL W^U.24, R7 ;U.24, R7 ; 03568 MOVL (R8)[R7], R0 ;(R8)[R7], R0 ;3 PUSHAB (R11)[R8] ;(R11)[R8] ;4 MOVL @(SP)+, R5 ;@(SP)+, R5 ;4 CMPL (R0), (R5) ;(R0), (R5) ;& BNEQ 5$ ;5$ ;4 MOVZBL 12(R0), R2 ;12(R0), R2 ;4 MOVZBL 12(R5), R1 ;12(R5), R1 ;R CMPC5 R2, 13( |R0), #32, R1, 13(R5) ;R2, 13(R0), #32, R1, 13(R5) ;& BGEQU 6$ ;6$ ;& BRB 4$ ;4$ ;)5$: BLSS 4$ ;4$ ;46$: DECL W^U.25 ;U.25 ; 03598 MOVL W^U.25, R4 ;U.25, R4 ; 03618 MOVL (R8)[R4], R6 ;(R8)[R4], R6 ;4 CMPL (R5), (R6) ;(R5), (R6) ;& BNEQ 7$ ;7$ ;4 MOVZBL 12(R5), R1 ;12(R5), R1 } ;4 MOVZBL 12(R6), R0 ;12(R6), R0 ;R CMPC5 R1, 13(R5), #32, R0, 13(R6) ;R1, 13(R5), #32, R0, 13(R6) ;& BGEQU 8$ ;8$ ;& BRB 6$ ;6$ ;)7$: BLSS 6$ ;6$ ;68$: CMPL R4, R7 ;R4, R7 ; 0362& BGTR 9$ ;9$ ;3 SUBL2 #4, SP ;#4, SP ; 03641 MOVL R5, (SP) ;R5, (SP) ;3 PUSHAB (R11)[R8] ;(R11)[R8] ~ ;4 MOVL R6, @(SP)+ ;R6, @(SP)+ ;( BRB 10$ ;10$ ;69$: SUBL2 #4, SP ;#4, SP ; 0368< MOVL (R8)[R7], (SP) ;(R8)[R7], (SP) ;8 MOVL R6, (R8)[R7] ;R6, (R8)[R7] ;@10$: MOVL (SP), (R8)[R4] ;(SP), (R8)[R4] ;. ADDL2 #4, SP ;#4, SP ;3 CMPL R4, R7 ;R4, R7 ; 0371& BGTR 4$ ;4$ ;; SUBL3 R 4, R10, R1 ;R4, R10, R1 ; 03734 SUBL3 R9, R4, R0 ;R9, R4, R0 ;. CMPL R1, R0 ;R1, R0 ;( BLSS 11$ ;11$ ;9 MOVAB 10(R9), R2 ;10(R9), R2 ; 0374. CMPL R4, R2 ;R4, R2 ;( BLEQ 11$ ;11$ ;3 SUBL2 #4, SP ;#4, SP ; 03766 MOVAB 1(R4), (SP) ;1(R4), (SP) ;. SUBL2 #4, SP ;#4, SP ;3 M €OVL R10, (SP) ;R10, (SP) ;- BRB 15$ ;15$ ; 0377711$: CMPL R0, R1 ;R0, R1 ; 0379( BLEQ 12$ ;12$ ;9 MOVAB 10(R4), R0 ;10(R4), R0 ; 03800 CMPL R10, R0 ;R10, R0 ;( BLEQ 12$ ;12$ ;3 SUBL2 #4, SP ;#4, SP ; 03821 MOVL R9, (SP) ;R9, (SP) ;. SUBL2 #4, SP ;#4, SP ;8  MOVAB -1(R4), (SP) ;-1(R4), (SP) ;- BRB 13$ ;13$ ; 0383=12$: MOVAB 10(R4), R1 ;10(R4), R1 ; 03850 CMPL R10, R1 ;R10, R1 ;( BLEQ 14$ ;14$ ;9 MOVAB 10(R9), R0 ;10(R9), R0 ; 0386. CMPL R4, R0 ;R4, R0 ;( BGTR 14$ ;14$ ;713$: SUBL2 #4, SP ;#4, SP ; 03876 MOVAB 1(R4), (SP) ;1(R4), ‚(SP) ;. SUBL2 #4, SP ;#4, SP ;3 MOVL R10, (SP) ;R10, (SP) ;- BRB 16$ ;16$ ; 0385=14$: MOVAB 10(R9), R0 ;10(R9), R0 ; 0388. CMPL R4, R0 ;R4, R0 ;( BLEQ 16$ ;16$ ;5 CMPL R10, R1 ;R10, R1 ; 0389( BGTR 16$ ;16$ ;715$: SUBL2 #4, SP ;#4, SP ; 03901 MOVL R9, (SP) ; ƒR9, (SP) ;. SUBL2 #4, SP ;#4, SP ;8 MOVAB -1(R4), (SP) ;-1(R4), (SP) ;/16$: BRW 3$ ;3$ ; 0345617$: MOVL #1, R5 ;#1, J ; 0393( BRB 24$ ;24$ ;D18$: MOVL -4(R8)[R5], R1 ;-4(R8)[J], R1 ; 03957 MOVL (R8)[R5], R0 ;(R8)[J], R0 ;4 CMPL (R1), (R0) ;(R1), (R0) ;( BNEQ 19$ ;19$ ;4 M „OVZBL 12(R1), R3 ;12(R1), R3 ;4 MOVZBL 12(R0), R2 ;12(R0), R2 ;R CMPC5 R3, 13(R1), #32, R2, 13(R0) ;R3, 13(R1), #32, R2, 13(R0) ;( BLEQU 24$ ;24$ ;( BRB 20$ ;20$ ;,19$: BLEQ 24$ ;24$ ;720$: SUBL2 #4, SP ;#4, SP ; 0397@ MOVL (R8)[R5], (SP) ;(R8)[J], (SP) ; 0398? MOVAB -1(R5), W^U.24 ;-1(R5), U.24 ; 039 …98 MOVL W^U.24, R4 ;U.24, R4 ; 04024 ASHL #2, R4, R6 ;#2, R4, R6 ;521$: PUSHAB (R6)[R8] ;(R6)[R8] ;A MOVL @(SP)+, 4(R8)[R4] ;@(SP)+, 4(R8)[R4] ;1 DECL W^U.24 ;U.24 ; 04038 MOVL W^U.24, R4 ;U.24, R4 ; 04054 ASHL #2, R4, R6 ;#2, R4, R6 ;1 PUSHAB (R6)[R8] ;(R6)[R8] ;4 MOVL @(SP)+, R1 ;@(SP)+, R1 † ;1 MOVL (SP), R0 ;(SP), R0 ;4 CMPL (R1), (R0) ;(R1), (R0) ;( BNEQ 22$ ;22$ ;4 MOVZBL 12(R1), R3 ;12(R1), R3 ;4 MOVZBL 12(R0), R2 ;12(R0), R2 ;R CMPC5 R3, 13(R1), #32, R2, 13(R0) ;R3, 13(R1), #32, R2, 13(R0) ;( BGTRU 21$ ;21$ ;( BRB 23$ ;23$ ;,22$: BGTR 21$ ;21$ ;G23$: MOVL (SP), 4(R8)[R4] ‡ ;(SP), 4(R8)[R4] ; 04063 ADDL2 #4, SP ;#4, SP ; 0407I24$: AOBLEQ @8(AP), R5, 18$ ;@COUNT_PTR, J, 18$ ; 0393( RET ; ; 0263;; Routine Size: 463 bytes, Routine Base: $CODE$ + 014B ; 0410 ; 0411 #; 0412 GLOBAL ROUTINE do_sort = ; 0413 ; 0414 BEGIN ; 0415 ; 0416 OWN; 0417 status; ; 0418 >; 0419 IF (status = release_record (%REF (%X'3FFF3FFF'),3ˆ; 0420 %REF (0),9; 0421 %REF (0))) THEN4; 0422 sort (.start_of_record_address_table,3; 0423 %REF (.next_sort_record - 1));; 0424 RETURN .status; 0425 END; .PSECT $OWN$,NOEXE,2;STATUSU.35: .BLKB 4 .PSECT $CODE$,NOWRT,2F .ENTRY DO_SORT, ^M<> ;DO_SORT, Save nothing ; 04120 SUBL2 #12, SP ;#12, SP ;1 CLRL 8(SP) ‰ ;8(SP) ; 0421, PUSHAB 8(SP) ;8(SP) ;1 CLRL 8(SP) ;8(SP) ; 0420, PUSHAB 8(SP) ;8(SP) ;G MOVL #1073692671, 8(SP) ;#1073692671, 8(SP) ; 0419, PUSHAB 8(SP) ;8(SP) ;D CALLS #3, W^RELEASE_RECORD ;#3, RELEASE_RECORD ;3 MOVL R0, W^U.35 ;R0, U.35 ;. BLBC R0, 1$ ;R0, 1$ ;Y SUBL3 #1, W^NEXT_SORT_RECORD, 8(SŠP) ;#1, NEXT_SORT_RECORD, 8(SP) ; 0423, PUSHAB 8(SP) ;8(SP) ;] PUSHL W^START_OF_RECORD_ADDRESS_TABLE ;START_OF_RECORD_ADDRESS_TABLE ; 04223 CALLS #2, W^U.18 ;#2, U.18 ;;1$: MOVL W^U.35, R0 ;U.35, R0 ; 0414( RET ; ; 0412:; Routine Size: 66 bytes, Routine Base: $CODE$ + 031A; 0426 END; 0427 ELUDOM; PSECT SUMMARY;#; Name‹ Bytes Attributes;T; $OWN$ 36 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)U; $CODE$ 860 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2); LIBRARY STATISTICS;.; -------- Symbols -------- Blocks2; File Total Loaded Percent Read;I; SYS$SYSROOT:[SYSLIB]LIB.L32;1 10834 2 0 393; COMMAND QUALIFIERSb; BLISS /MAC=(ASS,NOBIN,UNIQ)/SOU=NOHEAD/LIST=*.LST CACHE,FILENAME,INDEX,OUTPUT,OWNER,PROCESS,SORT; Compilation Complete .ENDww