; 0001 0 ; 0002 0 module hot_files(ident = 'V01-006', main = hf, version = 'BOs proto') = ; 0003 0 ; 0004 0 ! ; 0005 0 ! COPYRIGHT (©) 1988 BY ; 0006 0 ! DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS. ; 0007 0 ! ALL RIGHTS RESERVED. DIGITAL INTERNAL USE ONLY. ; 0008 0 ! ; 0009 0 ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; 0010 0 ! ONLY IN ACCORDANCE OF THE TERMS OF SUCH LICENSE AND WITH THE ; 0011 0 ! INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; 0012 0 ! COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; 0013 0 ! OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; 0014 0 ! TRANSFERRED. ; 0015 0 ! ; 0016 0 ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; 0017 0 ! AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; 0018 0 ! CORPORATION. ; 0019 0 ! ; 0020 0 ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; 0021 0 ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; 0022 0 ; 0023 0 ! Build instructions: ; 0024 0 ! ; 0025 0 ! $ BLISS HOT_FILES ; 0026 0 ! $ LINK HOT_FILES, SYS$SYSTEM:SYS.STB/SELECT ; 0027 0 ; 0028 1 begin ; 0029 1 ; 0030 1 ! 001 Main version ; 0031 1 ! 002 Rework logic around "foolish FCBs" ; 0032 1 ! 003 Don't chase down ss member FCBs ; 0033 1 ! 004 Change 'and' to 'or' in display logic (bug fix) ; 0034 1 ! 005 Fix bug introduced by memory expansion failing to expand SORT_BASE array. ; 0035 1 ! 006 SMP Support ; 0036 1 builtin movpsl, mtpr; ; 0037 1 ; 0038 1 library 'sys$library:lib'; ; 0039 1 ; 0040 1 linkage ; 0041 1 ioc_linkage = JSB : global(ucb = 10, ddb = 11), ; 0042 1 sch_linkage = JSB(register=4) : nopreserve(0,1,2); ; 0043 1 ; 0044 1 external ; 0045 1 CTL$GL_PHD : Addressing_mode (General), ; 0046 1 CTL$GL_PCB : Addressing_mode (Absolute), ; 0047 1 SGN$GW_MAXPRCCT : Word Addressing_mode (Absolute); ; 0048 1 ; 0049 1 external routine ; 0050 1 IOC$SCAN_IODB : Addressing_mode(Absolute) ioc_linkage, ; 0051 1 FOR$CVT_D_TF : Addressing_mode(General), ; 0052 1 LIB$FID_TO_NAME : Addressing_mode(General), ; 0053 1 LIB$FREE_VM : Addressing_mode(General), ; 0054 1 LIB$GET_VM : Addressing_mode(General), ; 0055 1 LIB$SUBX : Addressing_mode(General), ; 0056 1 SCH$IOLOCKR : Addressing_mode(Absolute) sch_linkage novalue, ; 0057 1 SCH$IOUNLOCK : Addressing_mode(Absolute) sch_linkage novalue; ; 0058 1 ; 0059 1 field bb_field = ; 0060 1 SET ; 0061 1 bb_top = [ 0, 0, 8, 0], ! First byte of each block ; 0062 1 bb_fcb = [ 0, 0, 32, 0], ! FCB address ; 0063 1 bb_ucb = [ 4, 0, 32, 0], ! UCB address ; 0064 1 bb_rd = [ 8, 0, 32, 0], ! Read count ; 0065 1 bb_wr = [12, 0, 32, 0], ! Write count ; 0066 1 bb_ord = [16, 0, 32, 0], ! Old read count ; 0067 1 bb_owr = [20, 0, 32, 0], ! Old write count ; 0068 1 bb_ = [24, 0, 16, 0], ! Unused ; 0069 1 bb_ok = [26, 0, 8, 0], ! 1 if found this scan, else 0 ; 0070 1 bb_kps = [27, 0, 8, 0], ! Kount-down value to re-get name ; 0071 1 bb_naml= [28, 0, 8, 0], ! ASCIC filename length ; 0072 1 bb_name= [29, 0, 8, 0] ! ASCIC filename text (MUST BE LAST!!!) ; 0073 1 TES; ; 0074 1 ; 0075 1 ; 0076 1 global ; 0077 1 fb_ddb, ; 0078 1 fb_fcb, ; 0079 1 fb_ucb, ; 0080 1 fcb, ; 0081 1 vcb, ; 0082 1 wcb, ; 0083 1 sv_wcb; ; 0084 1 ; 0085 1 literal ; 0086 1 bb_len= 92, ! Block length ; 0087 1 c_len = 132, ! Output string length ; 0088 1 d_len = 31, ! Device name string ; 0089 1 f_len = 300, ! File spec string ; 0090 1 o_len = 7, ! String to display ; 0091 1 initial_kps = 10; ! Kountdown Kontrol ; 0092 1 ; 0093 1 macro ; 0094 1 ob(a,b,c,d) = a%, ; 0095 1 ok = if not .s then signal(.s)%, ; 0096 1 ; M 0097 1 put_desc(desc) = ; M 0098 1 (if .desc[DSC$W_LENGTH] gtr .line_width then ; M 0099 1 out_rab[RAB$W_RSZ] = .line_width else ; M 0100 1 out_rab[RAB$W_RSZ] = .desc[DSC$W_LENGTH]; ; M 0101 1 out_rab[RAB$L_RBF] = .desc[DSC$A_POINTER]; ; 0102 1 s = $put(rab=out_rab); ok)%; ; 0103 1 ; 0104 1 map ; 0105 1 fb_ddb: ref $bblock[DDB$K_LENGTH], ; 0106 1 fb_fcb: ref $bblock[FCB$K_LENGTH], ; 0107 1 fb_ucb: ref $bblock[UCB$K_LENGTH], ; 0108 1 fcb : ref $bblock[FCB$K_LENGTH], ; 0109 1 vcb : ref $bblock[VCB$K_LENGTH], ; 0110 1 sv_wcb: ref $bblock[WCB$K_LENGTH], ; 0111 1 wcb : ref $bblock[WCB$K_LENGTH]; ; 0112 1 ; 0113 1 own ; 0114 1 base_priority : volatile, ; 0115 1 bbase : ref blockvector[ , bb_len, byte] field(bb_field), ; 0116 1 bmax, ! Maximum bb index currently in use ; 0117 1 bnum, ! Pointer to bb of interest ; 0118 1 bsize, ! Size of blockvector to allocate ; 0119 1 bcount : initial (200), ! Count of bb's actually allocated ; 0120 1 class : initial(0) volatile, ! SYS$OUTPUT device class ; 0121 1 clr_screen : $bblock[8], ; 0122 1 clue_efn : initial(5), ! Efn for drop_clue to use ; 0123 1 clue_time : vector[2, long] initial(-10000000 * 1, -1), ; 0124 1 count_text : $bblock[c_len], ; 0125 1 count_desc : $bblock[8], ; 0126 1 device_name : $bblock[d_len], ; 0127 1 dev_desc : $bblock[8], ; 0128 1 efn_flag : initial(4), ! Efn for main timer ; 0129 1 elapsed_seconds, ; 0130 1 run_priority : initial(8) volatile, ; 0131 1 file_name : $bblock[f_len], ; 0132 1 file_desc : $bblock[8], ; 0133 1 last_wcb, ; 0134 1 line_width : initial(c_len) volatile, ; 0135 1 lock_mem : initial(0), ; 0136 1 node_name : volatile vector[16, byte], ; 0137 1 node_name_len : volatile, ; 0138 1 old_pri : initial(0) volatile, ; 0139 1 out_fab : $fab(fnm='sys$output', dnm='hot_files.lis', rat=cr), ; 0140 1 out_rab : $rab(fab=out_fab, rop=eof), ; 0141 1 out_str : volatile $bblock[c_len], ; 0142 1 out_str_desc : volatile $bblock[8], ; 0143 1 page_size : initial(0) volatile, ; 0144 1 proc_name : volatile vector[80, byte], ; 0145 1 proc_name_len : volatile, ; 0146 1 read_rate : vector[o_len, byte], ; 0147 1 rc, wc, ! read-count, write-count ; 0148 1 s, ! generic status value ; 0149 1 sort_base : ref vector[], ; 0150 1 start_time : vector[2, long], ; 0151 1 time : vector[2, long] initial(-10 * 1000 * 1000 * 10, -1), ; 0152 1 tt_wrap : initial(1) volatile, ; 0153 1 write_rate : vector[o_len, byte], ; 0154 1 zero_time : vector[2, long]; ; 0155 1 ; 0156 1 bind esc_seq = uplit( byte( %ascic '')); ; 0157 1 ; 0158 1 bind dvi_ptr = uplit ( ; 0159 1 word(4), word(DVI$_DEVCLASS), long(class), long(0), ; 0160 1 long(0) ); ; 0161 1 ; 0162 1 bind tt_ptr = uplit ( ; 0163 1 word(4), word(DVI$_TT_PAGE), long(page_size), long(0), ; 0164 1 word(4), word(DVI$_DEVBUFSIZ),long(line_width), long(0), ; 0165 1 long(0) ); ; 0166 1 ; 0167 1 bind jpi_ptr = uplit ( ; 0168 1 word( 4), word(JPI$_PRIB), long(base_priority), long(0), ; 0169 1 word(16), word(JPI$_PRCNAM), long(proc_name+1), ; 0170 1 long(proc_name_len), ; 0171 1 long(0) ); ; 0172 1 ; 0173 1 bind syi_ptr = uplit ( ; 0174 1 word(16), word(SYI$_NODENAME), long(node_name+1), ; 0175 1 long(node_name_len), ; 0176 1 long(0) ); ; 0177 1 ; 0178 1 ! ------- Special patch area for customization -------- ; 0179 1 ; 0180 1 psect global = $$patch( Align(9), ; 0181 1 Write, Execute, Concatenate, Global, Read, Noshare, Nopic); ; 0182 1 ; 0183 1 literal patch_size = 2040; ; 0184 1 ; 0185 1 forward patch_area: $bblock[patch_size]; ; 0186 1 ; 0187 1 global ; 0188 1 patch_descriptor : vector[2, long] psect($$patch) ; 0189 1 initial(patch_size, patch_area), ; 0190 1 patch_area : $bblock[patch_size] psect($$patch); ; 0191 1 ; 0193 1 ! ------- Code ------- ; 0194 1 ; 0195 1 routine drop_clue(txt, locn) : novalue = ! Debugging help ; 0196 2 begin ; 0197 2 ; 0198 2 local psl: $bblock[4]; ; 0199 2 ; 0200 2 movpsl(psl); ! Do nothing if Kernel mode (can't call RMS) ; 0201 2 if .psl[PSL$V_CURMOD] eql 0 then return; ; 0202 2 ; 0203 2 count_desc[DSC$A_POINTER] = count_text; ; 0204 2 count_desc[DSC$W_LENGTH] = c_len; ; P 0205 2 $fao( $Descriptor('Trace point: !AS !XL'), count_desc, count_desc, ; 0206 2 .txt, .locn); ; 0207 2 put_desc(count_desc); ; 0208 2 $setimr(efn= .clue_efn, daytim= clue_time); ; 0209 2 $waitfr(efn= .clue_efn); ; 0210 1 end; ! drop_clue .TITLE HOT_FILES .IDENT \V01-006\ .PSECT $GLOBAL$,NOEXE,2 FB_DDB::.BLKB 4 ; 00000 FB_FCB::.BLKB 4 ; 00004 FB_UCB::.BLKB 4 ; 00008 FCB:: .BLKB 4 ; 0000C VCB:: .BLKB 4 ; 00010 WCB:: .BLKB 4 ; 00014 SV_WCB::.BLKB 4 ; 00018 .PSECT $OWN$,NOEXE,2 BASE_PRIORITY: .BLKB 4 ; 00000 BBASE: .BLKB 4 ; 00004 BMAX: .BLKB 4 ; 00008 BNUM: .BLKB 4 ; 0000C BSIZE: .BLKB 4 ; 00010 BCOUNT: .LONG 200 ; 000000C8 00014 CLASS: .LONG 0 ; 00000000 00018 CLR_SCREEN: .BLKB 8 ; 0001C CLUE_EFN: .LONG 5 ; 00000005 00024 CLUE_TIME: .LONG -10000000, -1 ; FFFFFFFF FF676980 00028 COUNT_TEXT: .BLKB 132 ; 00030 COUNT_DESC: .BLKB 8 ; 000B4 DEVICE_NAME: .BLKB 31 ; 000BC .BLKB 1 ; 000DB DEV_DESC: .BLKB 8 ; 000DC EFN_FLAG: .LONG 4 ; 00000004 000E4 ELAPSED_SECONDS: .BLKB 4 ; 000E8 RUN_PRIORITY: .LONG 8 ; 00000008 000EC FILE_NAME: .BLKB 300 ; 000F0 FILE_DESC: .BLKB 8 ; 0021C LAST_WCB: .BLKB 4 ; 00224 LINE_WIDTH: .LONG 132 ; 00000084 00228 LOCK_MEM: .LONG 0 ; 00000000 0022C NODE_NAME: .BLKB 16 ; 00230 NODE_NAME_LEN: .BLKB 4 ; 00240 OLD_PRI:.LONG 0 ; 00000000 00244 OUT_FAB:.BYTE 3 ; 03 00248 .BYTE 80 ; 50 00249 .WORD 0 ; 0000 0024A .LONG 0 ; 00000000 0024C .LONG 0 ; 00000000 00250 .LONG 0 ; 00000000 00254 .LONG 0 ; 00000000 00258 .WORD 0 ; 0000 0025C .BYTE 2 ; 02 0025E .BYTE 0 ; 00 0025F .LONG 0 ; 00000000 00260 .BYTE 0 ; 00 00264 .BYTE 0 ; 00 00265 .BYTE 2 ; 02 00266 .BYTE 2 ; 02 00267 .BYTE 0 ; 00 00268 .BYTE 0 ; 00 00269 .WORD 0 ; 0000 0026A .LONG 0 ; 00000000 0026C .LONG 0 ; 00000000 00270 .ADDRESS P.AAA ; 00000000' 00274 .ADDRESS P.AAB ; 00000000' 00278 .BYTE 10 ; 0A 0027C .BYTE 13 ; 0D 0027D .WORD 0 ; 0000 0027E .LONG 0 ; 00000000 00280 .WORD 0 ; 0000 00284 .BYTE 0 ; 00 00286 .BYTE 0 ; 00 00287 .LONG 0 ; 00000000 00288 .LONG 0 ; 00000000 0028C .WORD 0 ; 0000 00290 .BYTE 0 ; 00 00292 .BYTE 0 ; 00 00293 .LONG 0 ; 00000000 00294 OUT_RAB:.BYTE 1 ; 01 00298 .BYTE 68 ; 44 00299 .WORD 0 ; 0000 0029A .LONG 256 ; 00000100 0029C .LONG 0 ; 00000000 002A0 .LONG 0 ; 00000000 002A4 .WORD 0[3] ; 0000# 002A8 .WORD 0 ; 0000 002AE .LONG 0 ; 00000000 002B0 .WORD 0 ; 0000 002B4 .BYTE 0 ; 00 002B6 .BYTE 0 ; 00 002B7 .WORD 0 ; 0000 002B8 .WORD 0 ; 0000 002BA .LONG 0 ; 00000000 002BC .LONG 0 ; 00000000 002C0 .LONG 0 ; 00000000 002C4 .LONG 0 ; 00000000 002C8 .BYTE 0 ; 00 002CC .BYTE 0 ; 00 002CD .BYTE 0 ; 00 002CE .BYTE 0 ; 00 002CF .LONG 0 ; 00000000 002D0 .ADDRESS OUT_FAB ; 00000000' 002D4 .LONG 0 ; 00000000 002D8 OUT_STR:.BLKB 132 ; 002DC OUT_STR_DESC: .BLKB 8 ; 00360 PAGE_SIZE: .LONG 0 ; 00000000 00368 PROC_NAME: .BLKB 80 ; 0036C PROC_NAME_LEN: .BLKB 4 ; 003BC READ_RATE: .BLKB 7 ; 003C0 .BLKB 1 ; 003C7 RC: .BLKB 4 ; 003C8 WC: .BLKB 4 ; 003CC S: .BLKB 4 ; 003D0 SORT_BASE: .BLKB 4 ; 003D4 START_TIME: .BLKB 8 ; 003D8 TIME: .LONG -100000000, -1 ; FFFFFFFF FA0A1F00 003E0 TT_WRAP:.LONG 1 ; 00000001 003E8 WRITE_RATE: .BLKB 7 ; 003EC .BLKB 1 ; 003F3 ZERO_TIME: .BLKB 8 ; 003F4 .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAA: .ASCII \sys$output\ ; 70 74 75 6F 24 73 79 73 00000 ; 74 75 00008 P.AAB: .ASCII \hot_files.lis\ ; 65 6C 69 66 5F 74 6F 68 0000A ; 73 69 6C 2E 73 00012 .BLKB 1 ; 00017 P.AAC: .ASCII <6><27>\[H\<27>\[J\ ; 4A 5B 1B 48 5B 1B 06 00018 .BLKB 1 ; 0001F P.AAD: .WORD 4 ; 0004 00020 .WORD 4 ; 0004 00022 .ADDRESS CLASS ; 00000000' 00024 .LONG 0 ; 00000000 00028 .LONG 0 ; 00000000 0002C P.AAE: .WORD 4 ; 0004 00030 .WORD 170 ; 00AA 00032 .ADDRESS PAGE_SIZE ; 00000000' 00034 .LONG 0 ; 00000000 00038 .WORD 4 ; 0004 0003C .WORD 8 ; 0008 0003E .ADDRESS LINE_WIDTH ; 00000000' 00040 .LONG 0 ; 00000000 00044 .LONG 0 ; 00000000 00048 P.AAF: .WORD 4 ; 0004 0004C .WORD 777 ; 0309 0004E .ADDRESS BASE_PRIORITY ; 00000000' 00050 .LONG 0 ; 00000000 00054 .WORD 16 ; 0010 00058 .WORD 796 ; 031C 0005A .ADDRESS PROC_NAME+1 ; 00000000' 0005C .ADDRESS PROC_NAME_LEN ; 00000000' 00060 .LONG 0 ; 00000000 00064 P.AAG: .WORD 16 ; 0010 00068 .WORD 4313 ; 10D9 0006A .ADDRESS NODE_NAME+1 ; 00000000' 0006C .ADDRESS NODE_NAME_LEN ; 00000000' 00070 .LONG 0 ; 00000000 00074 P.AAI: .ASCII \Trace point: !AS !XL\ ; 6F 70 20 65 63 61 72 54 00078 ; 53 41 21 20 3A 74 6E 69 00080 ; 4C 58 21 20 00088 P.AAH: .LONG 20 ; 00000014 0008C .ADDRESS P.AAI ; 00000000' 00090 .PSECT $$PATCH, GBL,9 PATCH_DESCRIPTOR:: .LONG 2040 ; 000007F8 00000 .ADDRESS PATCH_AREA ; 00000000' 00004 PATCH_AREA:: .BLKB 2040 ; 00008 ESC_SEQ= P.AAC DVI_PTR= P.AAD TT_PTR= P.AAE JPI_PTR= P.AAF SYI_PTR= P.AAG .EXTRN CTL$GL_PHD, CTL$GL_PCB, SGN$GW_MAXPRCCT, IOC$SCAN_IODB, FOR$CVT_D_TF, LIB$FID_TO_NAME .EXTRN LIB$FREE_VM, LIB$GET_VM, LIB$SUBX, SCH$IOLOCKR, SCH$IOUNLOCK, SYS$FAO, SYS$PUT, SYS$SETIMR .EXTRN SYS$WAITFR .PSECT $CODE$,NOWRT,2 DROP_CLUE: .WORD ^M ;Save R2 0195 0004 00000 MOVAB W^COUNT_DESC, R2 ;COUNT_DESC, R2 52 0000' CF 9E 00002 MOVPSL R0 ;PSL 0200 50 DC 00007 CMPZV #24, #2, R0, #0 ;#24, #2, PSL, #0 0201 02 18 ED 00009 ; 00 50 0000C BEQL 4$ ;4$ 78 13 0000E MOVAB -132(R2), 4(R2) ;COUNT_TEXT, COUNT_DESC+4 0203 04 A2 FF7C C2 9E 00010 MOVZBW #132, (R2) ;#132, COUNT_DESC 0204 62 84 8F 9B 00016 MOVQ 4(AP), -(SP) ;TXT, -(SP) 0206 7E 04 AC 7D 0001A PUSHL R2 ;R2 52 DD 0001E PUSHL R2 ;R2 52 DD 00020 PUSHAB W^P.AAH ;P.AAH 0000' CF 9F 00022 CALLS #5, G^SYS$FAO ;#5, SYS$FAO 00000000G 00 05 FB 00026 CMPZV #0, #16, (R2), 372(R2) ;#0, #16, COUNT_DESC, LINE_WIDTH 0207 10 00 ED 0002D ; 0174 C2 62 00030 BLEQ 1$ ;1$ 09 15 00034 MOVW 372(R2), 518(R2) ;LINE_WIDTH, OUT_RAB+34 0206 C2 0174 C2 B0 00036 BRB 2$ ;2$ 05 11 0003D 1$: MOVW (R2), 518(R2) ;COUNT_DESC, OUT_RAB+34 0206 C2 62 B0 0003F 2$: MOVL 4(R2), 524(R2) ;COUNT_DESC+4, OUT_RAB+40 020C C2 04 A2 D0 00044 PUSHAB 484(R2) ;OUT_RAB 01E4 C2 9F 0004A CALLS #1, G^SYS$PUT ;#1, SYS$PUT 00000000G 00 01 FB 0004E MOVL R0, 796(R2) ;R0, S 031C C2 50 D0 00055 BLBS 796(R2), 3$ ;S, 3$ 0B 031C C2 E8 0005A PUSHL 796(R2) ;S 031C C2 DD 0005F CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00063 3$: CLRQ -(SP) ;-(SP) 0208 7E 7C 0006A CLRL -(SP) ;-(SP) 7E D4 0006C PUSHAB -140(R2) ;CLUE_TIME FF74 C2 9F 0006E PUSHL -144(R2) ;CLUE_EFN FF70 C2 DD 00072 CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 00076 PUSHL -144(R2) ;CLUE_EFN 0209 FF70 C2 DD 0007D CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 00081 4$: RET ; 0210 04 00088 ; Routine Size: 137 bytes, Routine Base: $CODE$ + 0000 ; 0211 1 ; 0212 1 routine calc_ratio(a,b,outto) : novalue = ! Calculate a/b to 2 decimal places ; 0213 2 begin ; 0214 2 builtin cvtlf, divf; ; 0215 2 local af, bf, flo: vector[2, long], ostr: $bblock[8]; ; 0216 2 map outto: ref $bblock[o_len]; ; 0217 2 ; 0218 2 ostr[DSC$W_LENGTH] = o_len - 1; ; 0219 2 ostr[DSC$A_POINTER] = .outto + 1; ; 0220 2 ; 0221 2 cvtlf(a, af); cvtlf(b, bf); flo[1] = 0; ; 0222 2 if .b eql 0 then flo[0] = 0 else divf(bf, af, flo); ; 0223 2 s = FOR$CVT_D_TF(flo, ostr, 2); ; 0224 2 (.outto)<0,8> = o_len; ; 0225 1 end; ! of calc_ratio CALC_RATIO: .WORD ^M<> ;Save nothing 0212 0000 00000 SUBL2 #16, SP ;#16, SP 5E 10 C2 00002 MOVW #6, (SP) ;#6, OSTR 0218 6E 06 B0 00005 ADDL3 #1, 12(AP), 4(SP) ;#1, OUTTO, OSTR+4 0219 0C AC 01 C1 00008 ; 04 AE 0000C CVTLF 4(AP), R1 ;A, AF 0221 51 04 AC 4E 0000E CVTLF 8(AP), R0 ;B, BF 50 08 AC 4E 00012 CLRL 12(SP) ;FLO+4 0C AE D4 00016 TSTL 8(AP) ;B 0222 08 AC D5 00019 BNEQ 1$ ;1$ 05 12 0001C CLRL 8(SP) ;FLO 08 AE D4 0001E BRB 2$ ;2$ 05 11 00021 1$: DIVF3 R0, R1, 8(SP) ;BF, AF, FLO 51 50 47 00023 ; 08 AE 00026 2$: PUSHL #2 ;#2 0223 02 DD 00028 PUSHAB 4(SP) ;OSTR 04 AE 9F 0002A PUSHAB 16(SP) ;FLO 10 AE 9F 0002D CALLS #3, G^FOR$CVT_D_TF ;#3, FOR$CVT_D_TF 00000000G 00 03 FB 00030 MOVL R0, W^S ;R0, S 0000' CF 50 D0 00037 MOVB #7, @12(AP) ;#7, @OUTTO 0224 0C BC 07 90 0003C RET ; 0225 04 00040 ; Routine Size: 65 bytes, Routine Base: $CODE$ + 0089 ; 0226 1 ; 0227 1 routine lock_everything : novalue = ; 0228 2 begin ; 0229 2 local ; 0230 2 phd : $bblock[PHD$K_LENGTH], ; 0231 2 ! checksum_pre, checksum_post, ; 0232 2 range : vector[2, long]; ; 0233 2 ; 0234 2 phd = .CTL$GL_PHD; ; 0235 2 range[0] = %X'200'; ; 0236 2 range[1] = .phd[PHD$L_FREP0VA] - 1; ; 0237 2 ! checksum_pre = 0; ; 0238 2 ! incr i from .range[0] to .range[1] by 4 do ; 0239 2 ! checksum_pre = (.checksum_pre ^ 1) + ..i; ; 0240 2 ; 0241 2 lock_mem = $lkwset(inadr = range); ; 0242 2 ; 0243 2 ! checksum_post = 0; ; 0244 2 ! incr i from .range[0] to .range[1] by 4 do ; 0245 2 ! checksum_post = (.checksum_post ^ 1) + ..i; ; 0246 2 ; 0247 2 ! if .checksum_pre eql .checksum_post then return; ; 0248 2 ! drop_clue($descriptor('****CHECKSUM ERROR after $LKWSET call')); ; 0249 2 ! $exit(code=SS$_BUGCHECK); ; 0250 1 end; ! lock_everything .EXTRN SYS$LKWSET LOCK_EVERYTHING: .WORD ^M<> ;Save nothing 0227 0000 00000 MOVAB -408(SP), SP ;-408(SP), SP 5E FE68 CE 9E 00002 MOVL G^CTL$GL_PHD, 4(SP) ;CTL$GL_PHD, PHD 0234 04 AE 00000000G 00 D0 00007 MOVZWL #512, -(SP) ;#512, RANGE 0235 7E 0200 8F 3C 0000F SUBL3 #1, 164(SP), 4(SP) ;#1, PHD+156, RANGE+4 0236 00A4 CE 01 C3 00014 ; 04 AE 00019 CLRQ -(SP) ;-(SP) 0241 7E 7C 0001B PUSHAB 8(SP) ;RANGE 08 AE 9F 0001D CALLS #3, G^SYS$LKWSET ;#3, SYS$LKWSET 00000000G 00 03 FB 00020 MOVL R0, W^LOCK_MEM ;R0, LOCK_MEM 0000' CF 50 D0 00027 RET ; 0250 04 0002C ; Routine Size: 45 bytes, Routine Base: $CODE$ + 00CA ; 0251 1 ; 0252 1 routine check_expansion : novalue = ! See if we've run out of storage space ; 0253 2 begin ; 0254 2 local ; 0255 2 temp_bbase, ; 0256 2 temp_bcount, ; 0257 2 temp_bsize; ; 0258 2 ; 0259 2 if .bmax + 4 lss .bcount then return; ! Lots of room for expansion ; 0260 2 ; 0261 2 temp_bcount = (3 * .bcount / 2) + 1; ; 0262 2 drop_clue($descriptor('Expanding entry count to '), .temp_bcount); ; 0263 2 ; 0264 2 temp_bsize = bb_len * .temp_bcount; ; 0265 2 s = LIB$GET_VM(temp_bsize,temp_bbase); if not .s then return; ; 0266 2 ch$move(.bsize, .bbase, .temp_bbase); ! Copy old area ; 0267 2 LIB$FREE_VM(bsize, bbase); ; 0268 2 LIB$FREE_VM(%ref(%upval * .bcount), sort_base); ; 0269 2 s = LIB$GET_VM( %ref(%upval * .temp_bcount), sort_base); ; 0270 2 if not .s then return; ; 0271 2 ; 0272 2 bsize = .temp_bsize; ; 0273 2 bbase = .temp_bbase; ; 0274 2 bcount= .temp_bcount; ; 0275 2 lock_everything(); ; 0276 2 return ; 0277 1 end; ! Check expansion .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAK: .ASCII \Expanding entry count to \ ; 6E 69 64 6E 61 70 78 45 00094 ; 20 79 72 74 6E 65 20 67 0009C ; 6F 74 20 74 6E 75 6F 63 000A4 ; 20 000AC .BLKB 3 ; 000AD P.AAJ: .LONG 25 ; 00000019 000B0 .ADDRESS P.AAK ; 00000000' 000B4 .PSECT $CODE$,NOWRT,2 CHECK_EXPANSION: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8,R9 0252 03FC 00000 MOVAB G^LIB$FREE_VM, R9 ;LIB$FREE_VM, R9 59 00000000G 00 9E 00002 MOVAB G^LIB$GET_VM, R8 ;LIB$GET_VM, R8 58 00000000G 00 9E 00009 MOVAB W^BCOUNT, R7 ;BCOUNT, R7 57 0000' CF 9E 00010 SUBL2 #12, SP ;#12, SP 5E 0C C2 00015 ADDL3 #4, -12(R7), R0 ;#4, BMAX, R0 0259 F4 A7 04 C1 00018 ; 50 0001C CMPL R0, (R7) ;R0, BCOUNT 67 50 D1 0001D BLSS 1$ ;1$ 7A 19 00020 MULL3 #3, (R7), R6 ;#3, BCOUNT, R6 0261 67 03 C5 00022 ; 56 00025 DIVL2 #2, R6 ;#2, R6 56 02 C6 00026 INCL R6 ;TEMP_BCOUNT 56 D6 00029 PUSHL R6 ;TEMP_BCOUNT 0262 56 DD 0002B PUSHAB W^P.AAJ ;P.AAJ 0000' CF 9F 0002D CALLS #2, W^DROP_CLUE ;#2, DROP_CLUE FED3 CF 02 FB 00031 MULL3 #92, R6, 8(SP) ;#92, TEMP_BCOUNT, TEMP_BSIZE 0264 56 0000005C 8F C5 00036 ; 08 AE 0003D PUSHAB 4(SP) ;TEMP_BBASE 0265 04 AE 9F 0003F PUSHAB 12(SP) ;TEMP_BSIZE 0C AE 9F 00042 CALLS #2, (R8) ;#2, LIB$GET_VM 68 02 FB 00045 MOVL R0, 956(R7) ;R0, S 03BC C7 50 D0 00048 BLBC 956(R7), 1$ ;S, 1$ 4A 03BC C7 E9 0004D MOVC3 -4(R7), @-16(R7), @4(SP) ;BSIZE, @BBASE, @TEMP_BBASE 0266 F0 B7 FC A7 28 00052 ; 04 BE 00057 PUSHAB -16(R7) ;BBASE 0267 F0 A7 9F 00059 PUSHAB -4(R7) ;BSIZE FC A7 9F 0005C CALLS #2, (R9) ;#2, LIB$FREE_VM 69 02 FB 0005F PUSHAB 960(R7) ;SORT_BASE 0268 03C0 C7 9F 00062 ASHL #2, (R7), 4(SP) ;#2, BCOUNT, 4(SP) 67 02 78 00066 ; 04 AE 00069 PUSHAB 4(SP) ;4(SP) 04 AE 9F 0006B CALLS #2, (R9) ;#2, LIB$FREE_VM 69 02 FB 0006E PUSHAB 960(R7) ;SORT_BASE 0269 03C0 C7 9F 00071 ASHL #2, R6, 4(SP) ;#2, TEMP_BCOUNT, 4(SP) 56 02 78 00075 ; 04 AE 00078 PUSHAB 4(SP) ;4(SP) 04 AE 9F 0007A CALLS #2, (R8) ;#2, LIB$GET_VM 68 02 FB 0007D MOVL R0, 956(R7) ;R0, S 03BC C7 50 D0 00080 BLBC 956(R7), 1$ ;S, 1$ 0270 12 03BC C7 E9 00085 MOVL 8(SP), -4(R7) ;TEMP_BSIZE, BSIZE 0272 FC A7 08 AE D0 0008A MOVL 4(SP), -16(R7) ;TEMP_BBASE, BBASE 0273 F0 A7 04 AE D0 0008F MOVL R6, (R7) ;TEMP_BCOUNT, BCOUNT 0274 67 56 D0 00094 CALLS #0, W^LOCK_EVERYTHING ;#0, LOCK_EVERYTHING 0275 FF37 CF 00 FB 00097 1$: RET ; 0276 04 0009C ; Routine Size: 157 bytes, Routine Base: $CODE$ + 00F7 ; 0278 1 ; 0279 1 routine cleanup(v) : novalue = ; 0280 2 begin ; 0281 2 if .old_pri gtr 0 then $setpri(pri= .old_pri); ; 0282 2 $close(fab= out_fab); ; 0283 3 $exit(code= .s) ; 0284 1 end; .EXTRN SYS$SETPRI, SYS$CLOSE, SYS$EXIT CLEANUP:.WORD ^M<> ;Save nothing 0279 0000 00000 TSTL W^OLD_PRI ;OLD_PRI 0281 0000' CF D5 00002 BLEQ 1$ ;1$ 0F 15 00006 CLRL -(SP) ;-(SP) 7E D4 00008 PUSHL W^OLD_PRI ;OLD_PRI 0000' CF DD 0000A CLRQ -(SP) ;-(SP) 7E 7C 0000E CALLS #4, G^SYS$SETPRI ;#4, SYS$SETPRI 00000000G 00 04 FB 00010 1$: PUSHAB W^OUT_FAB ;OUT_FAB 0282 0000' CF 9F 00017 CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE 00000000G 00 01 FB 0001B PUSHL W^S ;S 0283 0000' CF DD 00022 CALLS #1, G^SYS$EXIT ;#1, SYS$EXIT 00000000G 00 01 FB 00026 RET ; 0284 04 0002D ; Routine Size: 46 bytes, Routine Base: $CODE$ + 0194 ; 0285 1 ; 0286 1 routine sort_table : novalue = ; 0287 2 begin ; 0288 2 local i,j,t; ; 0289 2 ; 0290 2 if .bmax leq 0 then return; ! Really a debugging aid ; 0291 2 ; 0292 2 incr i from 0 to .bmax do ; 0293 2 if .bbase[.i, bb_ok] eql 0 then ; 0294 3 begin ! Remove expired files ; 0295 3 ch$move(bb_len, bbase[.bmax, bb_top], bbase[.i, bb_top]); ; 0296 3 bbase[.bmax, bb_ok] = 0; ! Avoid duplication ; 0297 3 bmax = .bmax - 1; ; 0298 2 end; ! Remove expired files ; 0299 2 ; 0300 2 incr i from 0 to .bmax do sort_base[.i] = .i; ; 0301 2 ; 0302 2 incr ii from 0 to .bmax do ; 0303 2 incr jj from 0 to .ii do ; 0304 3 begin ; 0305 3 i = .sort_base[.ii]; j = .sort_base[.jj]; ; 0306 5 if ((.bbase[.i, bb_rd] - .bbase[.i, bb_ord]) ; 0307 4 + (.bbase[.i, bb_wr] - .bbase[.i, bb_owr]) gtr ; 0308 5 (.bbase[.j, bb_rd] - .bbase[.j, bb_ord]) ; 0309 3 + (.bbase[.j, bb_wr] - .bbase[.j, bb_owr])) then ; 0310 4 begin ; 0311 4 t=.sort_base[.ii]; sort_base[.ii]=.sort_base[.jj]; sort_base[.jj]=.t; ; 0312 3 end; ; 0313 2 end; ; 0314 1 end; SORT_TABLE: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 0286 07FC 00000 MOVAB W^BMAX, R10 ;BMAX, R10 5A 0000' CF 9E 00002 MOVL (R10), R9 ;BMAX, R9 0290 59 6A D0 00007 BGTR 1$ ;1$ 01 14 0000A RET ; 04 0000C 1$: MOVL -4(R10), R7 ;BBASE, R7 0293 57 FC AA D0 0000D MNEGL #1, R6 ;#1, I 0292 56 01 CE 00011 BRB 3$ ;3$ 24 11 00014 2$: MULL3 #92, R6, R0 ;#92, I, R0 0293 56 0000005C 8F C5 00016 ; 50 0001D TSTB 26(R0)[R7] ;26(R0)[R7] 1A A047 95 0001E BNEQ 3$ ;3$ 16 12 00022 MULL3 #92, (R10), R8 ;#92, BMAX, R8 0295 6A 0000005C 8F C5 00024 ; 58 0002B MOVC3 #92, (R8)[R7], (R0)[R7] ;#92, (R8)[R7], (R0)[R7] 6847 005C 8F 28 0002C ; 6047 00032 CLRB 26(R8)[R7] ;26(R8)[R7] 0296 1A A847 94 00034 DECL (R10) ;BMAX 0297 6A D7 00038 3$: AOBLEQ R9, R6, 2$ ;R9, I, 2$ 0292 56 59 F3 0003A ; D8 0003D MOVL 972(R10), R5 ;SORT_BASE, R5 0300 55 03CC CA D0 0003E MNEGL #1, R0 ;#1, I 50 01 CE 00043 BRB 5$ ;5$ 04 11 00046 4$: MOVL R0, (R5)[R0] ;I, (R5)[I] 6540 50 D0 00048 5$: AOBLEQ (R10), R0, 4$ ;BMAX, I, 4$ 50 6A F3 0004C ; F8 0004F MNEGL #1, R3 ;#1, II 0302 53 01 CE 00050 BRB 9$ ;9$ 69 11 00053 6$: MNEGL #1, R4 ;#1, JJ 0303 54 01 CE 00055 BRB 8$ ;8$ 60 11 00058 7$: MOVL (R5)[R3], R1 ;(R5)[II], I 0305 51 6543 D0 0005A MOVL (R5)[R4], R0 ;(R5)[JJ], J 50 6544 D0 0005E MULL3 #92, R1, R2 ;#92, I, R2 0306 51 0000005C 8F C5 00062 ; 52 00069 PUSHAB 8(R2)[R7] ;8(R2)[R7] 08 A247 9F 0006A PUSHAB 16(R2)[R7] ;16(R2)[R7] 10 A247 9F 0006E SUBL3 @(SP)+, @(SP)+, R8 ;@(SP)+, @(SP)+, R8 9E 9E C3 00072 ; 58 00075 PUSHAB 12(R2)[R7] ;12(R2)[R7] 0307 0C A247 9F 00076 PUSHAB 20(R2)[R7] ;20(R2)[R7] 14 A247 9F 0007A SUBL3 @(SP)+, @(SP)+, R2 ;@(SP)+, @(SP)+, R2 9E 9E C3 0007E ; 52 00081 ADDL2 R2, R8 ;R2, R8 58 52 C0 00082 MULL3 #92, R0, R2 ;#92, J, R2 0308 50 0000005C 8F C5 00085 ; 52 0008C PUSHAB 8(R2)[R7] ;8(R2)[R7] 08 A247 9F 0008D PUSHAB 16(R2)[R7] ;16(R2)[R7] 10 A247 9F 00091 SUBL3 @(SP)+, @(SP)+, R6 ;@(SP)+, @(SP)+, R6 9E 9E C3 00095 ; 56 00098 PUSHAB 12(R2)[R7] ;12(R2)[R7] 0309 0C A247 9F 00099 PUSHAB 20(R2)[R7] ;20(R2)[R7] 14 A247 9F 0009D SUBL3 @(SP)+, @(SP)+, R2 ;@(SP)+, @(SP)+, R2 9E 9E C3 000A1 ; 52 000A4 ADDL2 R2, R6 ;R2, R6 56 52 C0 000A5 CMPL R8, R6 ;R8, R6 56 58 D1 000A8 BLEQ 8$ ;8$ 0D 15 000AB MOVL (R5)[R3], R9 ;(R5)[II], T 0311 59 6543 D0 000AD MOVL (R5)[R4], (R5)[R3] ;(R5)[JJ], (R5)[II] 6543 6544 D0 000B1 MOVL R9, (R5)[R4] ;T, (R5)[JJ] 6544 59 D0 000B6 8$: AOBLEQ R3, R4, 7$ ;II, JJ, 7$ 0303 54 53 F3 000BA ; 9C 000BD 9$: AOBLEQ (R10), R3, 6$ ;BMAX, II, 6$ 0302 53 6A F3 000BE ; 93 000C1 RET ; 0314 04 000C2 ; Routine Size: 195 bytes, Routine Base: $CODE$ + 01C2 ; 0315 1 ; 0316 1 routine signal_screwup(xx, dd) : novalue = ; 0317 2 begin ; 0318 2 map dd: ref $bblock[]; ; 0319 2 ; 0320 2 count_desc[DSC$A_POINTER] = count_text; ; 0321 2 count_desc[DSC$W_LENGTH] = c_len; ; P 0322 2 s = $fao( $descriptor('Screw-up (!8XL) on !AF(!UL,!UW,!UW)'), ; P 0323 2 count_desc, count_desc, ; P 0324 2 .xx, .dd[DSC$W_LENGTH], .dd[DSC$A_POINTER], ; P 0325 2 .fb_fcb[FCB$B_FID_NMX] ^ 16 + .fb_fcb[FCB$W_FID_NUM], ; 0326 2 .fb_fcb[FCB$W_FID_SEQ], .fb_fcb[FCB$B_FID_RVN]); ; 0327 3 put_desc(count_desc) ; 0328 3 ; 0329 1 end; ! signal_screwup .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAM: .ASCII \Screw-up (!8XL) on !AF(!UL,!UW,!UW)\ ; 70 75 2D 77 65 72 63 53 000B8 ; 20 29 4C 58 38 21 28 20 000C0 ; 21 28 46 41 21 20 6E 6F 000C8 ; 21 2C 57 55 21 2C 4C 55 000D0 ; 29 57 55 000D8 .BLKB 1 ; 000DB P.AAL: .LONG 35 ; 00000023 000DC .ADDRESS P.AAM ; 00000000' 000E0 .PSECT $CODE$,NOWRT,2 SIGNAL_SCREWUP: .WORD ^M ;Save R2 0316 0004 00000 MOVAB W^COUNT_DESC, R2 ;COUNT_DESC, R2 52 0000' CF 9E 00002 MOVAB -132(R2), 4(R2) ;COUNT_TEXT, COUNT_DESC+4 0320 04 A2 FF7C C2 9E 00007 MOVZBW #132, (R2) ;#132, COUNT_DESC 0321 62 84 8F 9B 0000D MOVL W^FB_FCB, R0 ;FB_FCB, R0 0326 50 0000' CF D0 00011 MOVZBL 40(R0), -(SP) ;40(R0), -(SP) 7E 28 A0 9A 00016 MOVZWL 38(R0), -(SP) ;38(R0), -(SP) 7E 26 A0 3C 0001A MOVZBL 41(R0), R1 ;41(R0), R1 51 29 A0 9A 0001E ASHL #16, R1, R1 ;#16, R1, R1 51 10 78 00022 ; 51 00025 MOVZWL 36(R0), R0 ;36(R0), R0 50 24 A0 3C 00026 PUSHAB (R0)[R1] ;(R0)[R1] 6041 9F 0002A MOVL 8(AP), R0 ;DD, R0 50 08 AC D0 0002D PUSHL 4(R0) ;4(R0) 04 A0 DD 00031 MOVZWL (R0), -(SP) ;(R0), -(SP) 7E 60 3C 00034 PUSHL 4(AP) ;XX 04 AC DD 00037 PUSHL R2 ;R2 52 DD 0003A PUSHL R2 ;R2 52 DD 0003C PUSHAB W^P.AAL ;P.AAL 0000' CF 9F 0003E CALLS #9, G^SYS$FAO ;#9, SYS$FAO 00000000G 00 09 FB 00042 MOVL R0, 796(R2) ;R0, S 031C C2 50 D0 00049 CMPZV #0, #16, (R2), 372(R2) ;#0, #16, COUNT_DESC, LINE_WIDTH 0327 10 00 ED 0004E ; 0174 C2 62 00051 BLEQ 1$ ;1$ 09 15 00055 MOVW 372(R2), 518(R2) ;LINE_WIDTH, OUT_RAB+34 0206 C2 0174 C2 B0 00057 BRB 2$ ;2$ 05 11 0005E 1$: MOVW (R2), 518(R2) ;COUNT_DESC, OUT_RAB+34 0206 C2 62 B0 00060 2$: MOVL 4(R2), 524(R2) ;COUNT_DESC+4, OUT_RAB+40 020C C2 04 A2 D0 00065 PUSHAB 484(R2) ;OUT_RAB 01E4 C2 9F 0006B CALLS #1, G^SYS$PUT ;#1, SYS$PUT 00000000G 00 01 FB 0006F MOVL R0, 796(R2) ;R0, S 031C C2 50 D0 00076 BLBS 796(R2), 3$ ;S, 3$ 0B 031C C2 E8 0007B PUSHL 796(R2) ;S 031C C2 DD 00080 CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00084 3$: RET ; 0329 04 0008B ; Routine Size: 140 bytes, Routine Base: $CODE$ + 0285 ; 0330 1 ; 0331 1 routine print_filename(index) : novalue = ; 0332 2 begin ; 0333 2 local ; 0334 2 msg_desc : $bblock[8], ; 0335 2 msg_text : $bblock[c_len], ; 0336 2 dev_node : vector[7,byte], ; 0337 2 sb : ref $bblock[]; ; 0338 2 ; 0339 2 calc_ratio(.rc, .elapsed_seconds, read_rate); ; 0340 2 calc_ratio(.wc, .elapsed_seconds, write_rate); ; 0341 2 ; 0342 2 if .rc + .wc gtr 65000 then drop_clue( ; 0343 2 $descriptor(' out-of-range value at '), .index); ; 0344 2 ; 0345 2 ! Construct a device name string ; 0346 2 ; 0347 2 fb_ucb = .bbase[.index, bb_ucb]; ; 0348 2 fb_fcb = .bbase[.index, bb_fcb]; ; 0349 2 fb_ddb = .fb_ucb[UCB$L_DDB]; ; 0350 2 sb = .fb_ddb[DDB$L_SB]; ; 0351 2 dev_desc[DSC$A_POINTER] = device_name; ; 0352 2 dev_desc[DSC$W_LENGTH] = d_len; ; 0353 2 if .sb eql 0 then dev_node[0] = 0 else ; 0354 2 ch$move(7, sb[ob(SB$T_NODENAME), 0, 8, 0], dev_node[0]); ; 0355 2 ; P 0356 2 s = $fao( $descriptor('!AC$!AC!UW:'), dev_desc, dev_desc, ; 0357 2 dev_node[0], fb_ddb[DDB$T_NAME], .fb_ucb[UCB$W_UNIT]); ok; ; 0358 2 ; 0359 2 if .dev_node[0] eql 0 then ! If no nodename ; 0360 3 begin ! Trim spurious leading '$' ; 0361 3 dev_desc[DSC$A_POINTER] = .dev_desc[DSC$A_POINTER] + 1; ; 0362 3 dev_desc[DSC$W_LENGTH] = .dev_desc[DSC$W_LENGTH] - 1 ; 0363 2 end; ; 0364 2 ; 0365 2 count_desc[DSC$A_POINTER] = count_text; ; 0366 2 count_desc[DSC$W_LENGTH] = c_len; ; 0367 2 file_desc[DSC$A_POINTER] = file_name; ; 0368 2 file_desc[DSC$W_LENGTH] = f_len; ; 0369 2 if .bbase[.index, bb_kps] eql 0 then ; 0370 3 begin ; 0371 3 s = LIB$FID_TO_NAME(dev_desc, fb_fcb[FCB$W_FID_NUM], file_desc,file_desc); ; 0372 3 if .s then ; 0373 4 begin ; 0374 4 bbase[.index, bb_kps] = initial_kps; ; 0375 4 bbase[.index, bb_naml] = min(.file_desc[DSC$W_LENGTH], ; 0376 4 bb_len - %FIELDEXPAND(bb_name,0)); ; 0377 4 ch$move( .bbase[.index, bb_naml], ; 0378 4 .file_desc[DSC$A_POINTER], bbase[.index, bb_name]); ; 0379 4 end ; 0380 2 end else ; 0381 3 begin ! Typical case ; 0382 3 bbase[.index, bb_kps] = .bbase[.index, bb_kps] - 1; ; 0383 3 s = SS$_NORMAL ! Fake up a successful FID_TO_NAME call ; 0384 2 end; ; 0385 2 ; 0386 2 if .s eql SS$_NOSUCHFILE then s = .s or 1; ; 0387 2 ; 0388 2 if not .s then ; 0389 3 begin ; 0390 3 bbase[.index, bb_naml] = 0; ! Forget any file name ; 0391 3 msg_desc[DSC$A_POINTER] = msg_text; ; 0392 3 msg_desc[DSC$W_LENGTH] = c_len; ; 0393 3 s = $getmsg(msgid = .s, msglen = msg_desc, bufadr = msg_desc, flags = 1); ; 0394 4 if (.msg_text[0, 0, 8, 0] geq %C'a') and (.msg_text[0, 0, 8, 0] leq %C'z') ; 0395 3 then msg_text[0, 0, 8, 0] = .msg_text[0, 0, 8, 0] - %C'a' + %C'A'; ; P 0396 3 s = $fao( $descriptor('!7UL !6AC !6AC !AF(!UL,!UW,!UW) !AS'), ; P 0397 3 count_desc, count_desc, .rc + .wc, read_rate, write_rate, ; P 0398 3 .dev_desc[DSC$W_LENGTH], .dev_desc[DSC$A_POINTER], ; P 0399 3 .fb_fcb[FCB$B_FID_NMX] ^ 16 + .fb_fcb[FCB$W_FID_NUM], ; 0400 3 .fb_fcb[FCB$W_FID_SEQ], .fb_fcb[FCB$B_FID_RVN], msg_desc); ok; ; 0401 3 put_desc(count_desc); ; 0402 3 return ; 0403 2 end; ; 0404 2 ; 0405 2 if .s eql (SS$_NOSUCHFILE or 1) then ; 0406 3 begin ; P 0407 3 s = $fao( $descriptor('!7UL !6AC !6AC !AF(!XL,!XW,!XW)'), ; P 0408 3 count_desc, count_desc, .rc + .wc, read_rate, write_rate, ; P 0409 3 .dev_desc[DSC$W_LENGTH], .dev_desc[DSC$A_POINTER], ; P 0410 3 .fb_fcb[FCB$B_FID_NMX] ^ 16 + .fb_fcb[FCB$W_FID_NUM], ; 0411 3 .fb_fcb[FCB$W_FID_SEQ], .fb_fcb[FCB$B_FID_RVN]); ok; ; 0412 2 end else ; 0413 3 begin ! This is the normal case ; P 0414 3 s = $fao( $descriptor('!7UL !6AC !6AC !AC'), ; P 0415 3 count_desc, count_desc, .rc + .wc, read_rate, write_rate, ; 0416 3 bbase[.index, bb_naml]); ok; ; 0417 2 end; ! Normal case ; 0418 3 put_desc(count_desc) ; 0419 1 end; ! print_filename .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAO: .ASCII \ out-of-range value at \ ; 2D 66 6F 2D 74 75 6F 20 000E4 ; 61 76 20 65 67 6E 61 72 000EC ; 20 74 61 20 65 75 6C 000F4 .BLKB 1 ; 000FB P.AAN: .LONG 23 ; 00000017 000FC .ADDRESS P.AAO ; 00000000' 00100 P.AAQ: .ASCII \!AC$!AC!UW:\ ; 21 43 41 21 24 43 41 21 00104 ; 3A 57 55 0010C .BLKB 1 ; 0010F P.AAP: .LONG 11 ; 0000000B 00110 .ADDRESS P.AAQ ; 00000000' 00114 P.AAS: .ASCII \!7UL !6AC !6AC !AF(!UL,!UW,!UW) !AS\ ; 41 36 21 20 4C 55 37 21 00118 ; 20 20 43 41 36 21 20 43 00120 ; 2C 4C 55 21 28 46 41 21 00128 ; 29 57 55 21 2C 57 55 21 00130 ; 53 41 21 20 00138 P.AAR: .LONG 36 ; 00000024 0013C .ADDRESS P.AAS ; 00000000' 00140 P.AAU: .ASCII \!7UL !6AC !6AC !AF(!XL,!XW,!XW)\ ; 41 36 21 20 4C 55 37 21 00144 ; 20 20 43 41 36 21 20 43 0014C ; 2C 4C 58 21 28 46 41 21 00154 ; 29 57 58 21 2C 57 58 21 0015C P.AAT: .LONG 32 ; 00000020 00164 .ADDRESS P.AAU ; 00000000' 00168 P.AAW: .ASCII \!7UL !6AC !6AC !AC\ ; 41 36 21 20 4C 55 37 21 0016C ; 20 20 43 41 36 21 20 43 00174 ; 43 41 21 0017C .BLKB 1 ; 0017F P.AAV: .LONG 19 ; 00000013 00180 .ADDRESS P.AAW ; 00000000' 00184 .EXTRN SYS$GETMSG .PSECT $CODE$,NOWRT,2 PRINT_FILENAME: .WORD ^M ;R11 MOVAB G^SYS$FAO, R11 ;SYS$FAO, R11 5B 00000000G 00 9E 00002 MOVAB W^FB_FCB, R10 ;FB_FCB, R10 5A 0000' CF 9E 00009 MOVAB W^S, R9 ;S, R9 59 0000' CF 9E 0000E MOVAB -148(SP), SP ;-148(SP), SP 5E FF6C CE 9E 00013 PUSHAB -16(R9) ;READ_RATE 0339 F0 A9 9F 00018 PUSHL -744(R9) ;ELAPSED_SECONDS FD18 C9 DD 0001B PUSHL -8(R9) ;RC F8 A9 DD 0001F CALLS #3, W^CALC_RATIO ;#3, CALC_RATIO FD51 CF 03 FB 00022 PUSHAB 28(R9) ;WRITE_RATE 0340 1C A9 9F 00027 PUSHL -744(R9) ;ELAPSED_SECONDS FD18 C9 DD 0002A PUSHL -4(R9) ;WC FC A9 DD 0002E CALLS #3, W^CALC_RATIO ;#3, CALC_RATIO FD42 CF 03 FB 00031 ADDL3 -4(R9), -8(R9), R0 ;WC, RC, R0 0342 F8 A9 FC A9 C1 00036 ; 50 0003B CMPL R0, #65000 ;R0, #65000 0000FDE8 8F 50 D1 0003C BLEQ 1$ ;1$ 0C 15 00043 PUSHL 4(AP) ;INDEX 0343 04 AC DD 00045 PUSHAB W^P.AAN ;P.AAN 0000' CF 9F 00048 CALLS #2, W^DROP_CLUE ;#2, DROP_CLUE FC9E CF 02 FB 0004C 1$: MULL3 #92, 4(AP), R6 ;#92, INDEX, R6 0347 04 AC 0000005C 8F C5 00051 ; 56 00059 ADDL3 -972(R9), R6, R0 ;BBASE, R6, R0 56 FC34 C9 C1 0005A ; 50 0005F MOVL 4(R0), 4(R10) ;4(R0), FB_UCB 04 AA 04 A0 D0 00060 ADDL3 -972(R9), R6, R0 ;BBASE, R6, R0 0348 56 FC34 C9 C1 00065 ; 50 0006A MOVL (R0), (R10) ;(R0), FB_FCB 6A 60 D0 0006B MOVL 4(R10), R8 ;FB_UCB, R8 0349 58 04 AA D0 0006E MOVL 44(R8), -4(R10) ;44(R8), FB_DDB FC AA 2C A8 D0 00072 MOVL -4(R10), R7 ;FB_DDB, R7 0350 57 FC AA D0 00077 MOVL 52(R7), R0 ;52(R7), SB 50 34 A7 D0 0007B MOVAB -788(R9), -752(R9) ;DEVICE_NAME, DEV_DESC+4 0351 FD10 C9 FCEC C9 9E 0007F MOVW #31, -756(R9) ;#31, DEV_DESC 0352 FD0C C9 1F B0 00086 TSTL R0 ;SB 0353 50 D5 0008B BNEQ 2$ ;2$ 04 12 0008D CLRB (SP) ;DEV_NODE 6E 94 0008F BRB 3$ ;3$ 05 11 00091 2$: MOVC3 #7, 68(R0), (SP) ;#7, 68(SB), DEV_NODE 0354 44 A0 07 28 00093 ; 6E 00097 3$: MOVZWL 104(R8), -(SP) ;104(R8), -(SP) 0357 7E 68 A8 3C 00098 PUSHAB 20(R7) ;20(R7) 14 A7 9F 0009C PUSHAB 8(SP) ;DEV_NODE 08 AE 9F 0009F PUSHAB -756(R9) ;DEV_DESC FD0C C9 9F 000A2 PUSHAB -756(R9) ;DEV_DESC FD0C C9 9F 000A6 PUSHAB W^P.AAP ;P.AAP 0000' CF 9F 000AA CALLS #6, (R11) ;#6, SYS$FAO 6B 06 FB 000AE MOVL R0, (R9) ;R0, S 69 50 D0 000B1 BLBS (R9), 4$ ;S, 4$ 09 69 E8 000B4 PUSHL (R9) ;S 69 DD 000B7 CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 000B9 4$: TSTB (SP) ;DEV_NODE 0359 6E 95 000C0 BNEQ 5$ ;5$ 08 12 000C2 INCL -752(R9) ;DEV_DESC+4 0361 FD10 C9 D6 000C4 DECW -756(R9) ;DEV_DESC 0362 FD0C C9 B7 000C8 5$: MOVAB -928(R9), -792(R9) ;COUNT_TEXT, COUNT_DESC+4 0365 FCE8 C9 FC60 C9 9E 000CC MOVZBW #132, -796(R9) ;#132, COUNT_DESC 0366 FCE4 C9 84 8F 9B 000D3 MOVAB -736(R9), -432(R9) ;FILE_NAME, FILE_DESC+4 0367 FE50 C9 FD20 C9 9E 000D9 MOVW #300, -436(R9) ;#300, FILE_DESC 0368 FE4C C9 012C 8F B0 000E0 ADDL3 -972(R9), R6, R0 ;BBASE, R6, R0 0369 56 FC34 C9 C1 000E7 ; 50 000EC TSTB 27(R0) ;27(R0) 1B A0 95 000ED BNEQ 7$ ;7$ 48 12 000F0 PUSHAB -436(R9) ;FILE_DESC 0371 FE4C C9 9F 000F2 PUSHAB -436(R9) ;FILE_DESC FE4C C9 9F 000F6 ADDL3 #36, (R10), -(SP) ;#36, FB_FCB, -(SP) 6A 24 C1 000FA ; 7E 000FD PUSHAB -756(R9) ;DEV_DESC FD0C C9 9F 000FE CALLS #4, G^LIB$FID_TO_NAME ;#4, LIB$FID_TO_NAME 00000000G 00 04 FB 00102 MOVL R0, (R9) ;R0, S 69 50 D0 00109 BLBC (R9), 8$ ;S, 8$ 0372 31 69 E9 0010C MOVL -972(R9), R0 ;BBASE, R0 0374 50 FC34 C9 D0 0010F MOVB #10, 27(R6)[R0] ;#10, 27(R6)[R0] 1B A640 0A 90 00114 MOVZWL -436(R9), R1 ;FILE_DESC, R1 0376 51 FE4C C9 3C 00119 CMPW R1, #63 ;R1, #63 3F 51 B1 0011E BLEQU 6$ ;6$ 03 1B 00121 MOVL #63, R1 ;#63, R1 51 3F D0 00123 6$: MOVB R1, 28(R6)[R0] ;R1, 28(R6)[R0] 1C A640 51 90 00126 MOVZBL 28(R6)[R0], R1 ;28(R6)[R0], R1 0377 51 1C A640 9A 0012B MOVC3 R1, @-432(R9), 29(R6)[R0] ;R1, @FILE_DESC+4, 29(R6)[R0] 0378 FE50 D9 51 28 00130 ; 1D A640 00135 BRB 8$ ;8$ 06 11 00138 7$: DECB 27(R0) ;27(R0) 0382 1B A0 97 0013A MOVL #1, (R9) ;#1, S 0383 69 01 D0 0013D 8$: CMPL (R9), #2320 ;S, #2320 0386 00000910 8F 69 D1 00140 BNEQ 9$ ;9$ 03 12 00147 BISB2 #1, (R9) ;#1, S 69 01 88 00149 9$: BLBC (R9), 10$ ;S, 10$ 0388 03 69 E9 0014C BRW 12$ ;12$ 0083 31 0014F 10$: ADDL3 -972(R9), R6, R0 ;BBASE, R6, R0 0390 56 FC34 C9 C1 00152 ; 50 00157 CLRB 28(R0) ;28(R0) 1C A0 94 00158 MOVAB 8(SP), -4(FP) ;MSG_TEXT, MSG_DESC+4 0391 FC AD 08 AE 9E 0015B MOVZBW #132, -8(FP) ;#132, MSG_DESC 0392 F8 AD 84 8F 9B 00160 MOVQ #1, -(SP) ;#1, -(SP) 0393 7E 01 7D 00165 PUSHAB -8(FP) ;MSG_DESC F8 AD 9F 00168 PUSHAB -8(FP) ;MSG_DESC F8 AD 9F 0016B PUSHL (R9) ;S 69 DD 0016E CALLS #5, G^SYS$GETMSG ;#5, SYS$GETMSG 00000000G 00 05 FB 00170 MOVL R0, (R9) ;R0, S 69 50 D0 00177 CMPB 8(SP), #97 ;MSG_TEXT, #97 0394 61 8F 08 AE 91 0017A BLSSU 11$ ;11$ 0B 1F 0017F CMPB 8(SP), #122 ;MSG_TEXT, #122 7A 8F 08 AE 91 00181 BGTRU 11$ ;11$ 04 1A 00186 SUBB2 #32, 8(SP) ;#32, MSG_TEXT 0395 08 AE 20 82 00188 11$: PUSHAB -8(FP) ;MSG_DESC 0400 F8 AD 9F 0018C MOVL (R10), R0 ;FB_FCB, R0 50 6A D0 0018F MOVZBL 40(R0), -(SP) ;40(R0), -(SP) 7E 28 A0 9A 00192 MOVZWL 38(R0), -(SP) ;38(R0), -(SP) 7E 26 A0 3C 00196 MOVZBL 41(R0), R1 ;41(R0), R1 51 29 A0 9A 0019A ASHL #16, R1, R1 ;#16, R1, R1 51 10 78 0019E ; 51 001A1 MOVZWL 36(R0), R0 ;36(R0), R0 50 24 A0 3C 001A2 PUSHAB (R0)[R1] ;(R0)[R1] 6041 9F 001A6 PUSHL -752(R9) ;DEV_DESC+4 FD10 C9 DD 001A9 MOVZWL -756(R9), -(SP) ;DEV_DESC, -(SP) 7E FD0C C9 3C 001AD PUSHAB 28(R9) ;WRITE_RATE 1C A9 9F 001B2 PUSHAB -16(R9) ;READ_RATE F0 A9 9F 001B5 ADDL3 -4(R9), -8(R9), -(SP) ;WC, RC, -(SP) F8 A9 FC A9 C1 001B8 PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 001BE PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 001C2 PUSHAB W^P.AAR ;P.AAR 0000' CF 9F 001C6 CALLS #12, (R11) ;#12, SYS$FAO 6B 0C FB 001CA MOVL R0, (R9) ;R0, S 69 50 D0 001CD BLBC (R9), 15$ ;S, 15$ 72 69 E9 001D0 BRB 16$ ;16$ 0401 79 11 001D3 12$: ADDL3 -4(R9), -8(R9), R2 ;WC, RC, R2 0411 F8 A9 FC A9 C1 001D5 ; 52 001DA CMPL (R9), #2321 ;S, #2321 0405 00000911 8F 69 D1 001DB BNEQ 13$ ;13$ 3C 12 001E2 MOVL (R10), R0 ;FB_FCB, R0 0411 50 6A D0 001E4 MOVZBL 40(R0), -(SP) ;40(R0), -(SP) 7E 28 A0 9A 001E7 MOVZWL 38(R0), -(SP) ;38(R0), -(SP) 7E 26 A0 3C 001EB MOVZBL 41(R0), R1 ;41(R0), R1 51 29 A0 9A 001EF ASHL #16, R1, R1 ;#16, R1, R1 51 10 78 001F3 ; 51 001F6 MOVZWL 36(R0), R0 ;36(R0), R0 50 24 A0 3C 001F7 PUSHAB (R0)[R1] ;(R0)[R1] 6041 9F 001FB PUSHL -752(R9) ;DEV_DESC+4 FD10 C9 DD 001FE MOVZWL -756(R9), -(SP) ;DEV_DESC, -(SP) 7E FD0C C9 3C 00202 PUSHAB 28(R9) ;WRITE_RATE 1C A9 9F 00207 PUSHAB -16(R9) ;READ_RATE F0 A9 9F 0020A PUSHL R2 ;R2 52 DD 0020D PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 0020F PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 00213 PUSHAB W^P.AAT ;P.AAT 0000' CF 9F 00217 CALLS #11, (R11) ;#11, SYS$FAO 6B 0B FB 0021B BRB 14$ ;14$ 1F 11 0021E 13$: PUSHAB @-972(R9)[R6] ;@BBASE[R6] 0416 FC34 D946 9F 00220 ADDL2 #28, (SP) ;#28, (SP) 6E 1C C0 00225 PUSHAB 28(R9) ;WRITE_RATE 1C A9 9F 00228 PUSHAB -16(R9) ;READ_RATE F0 A9 9F 0022B PUSHL R2 ;R2 52 DD 0022E PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 00230 PUSHAB -796(R9) ;COUNT_DESC FCE4 C9 9F 00234 PUSHAB W^P.AAV ;P.AAV 0000' CF 9F 00238 CALLS #7, (R11) ;#7, SYS$FAO 6B 07 FB 0023C 14$: MOVL R0, (R9) ;R0, S 69 50 D0 0023F BLBS (R9), 16$ ;S, 16$ 09 69 E8 00242 15$: PUSHL (R9) ;S 69 DD 00245 CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00247 16$: CMPZV #0, #16, -796(R9), -424(R9) ;#0, #16, COUNT_DESC, LINE_WIDTH 0418 10 00 ED 0024E ; FE58 C9 FCE4 C9 00251 BLEQ 17$ ;17$ 09 15 00257 MOVW -424(R9), -278(R9) ;LINE_WIDTH, OUT_RAB+34 FEEA C9 FE58 C9 B0 00259 BRB 18$ ;18$ 07 11 00260 17$: MOVW -796(R9), -278(R9) ;COUNT_DESC, OUT_RAB+34 FEEA C9 FCE4 C9 B0 00262 18$: MOVL -792(R9), -272(R9) ;COUNT_DESC+4, OUT_RAB+40 FEF0 C9 FCE8 C9 D0 00269 PUSHAB -312(R9) ;OUT_RAB FEC8 C9 9F 00270 CALLS #1, G^SYS$PUT ;#1, SYS$PUT 00000000G 00 01 FB 00274 MOVL R0, (R9) ;R0, S 69 50 D0 0027B BLBS (R9), 19$ ;S, 19$ 09 69 E8 0027E PUSHL (R9) ;S 69 DD 00281 CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00283 19$: RET ; 0419 04 0028A ; Routine Size: 651 bytes, Routine Base: $CODE$ + 0311 ; 0420 1 ; 0421 1 routine locate_bb : ioc_linkage = ; 0422 2 begin ; 0423 2 ; 0424 2 external register ; 0425 2 ddb = 11 : ref $bblock[DDB$K_LENGTH], ; 0426 2 ucb = 10 : ref $bblock[UCB$K_LENGTH]; ; 0427 2 ; 0428 3 bnum = (incr i from 0 to .bmax do ; 0429 2 if .bbase[.i, bb_fcb] eql .fcb then exitloop .i); ; 0430 2 ; 0431 2 if .bnum geq 0 then begin bbase[.bnum, bb_ok] = 1; return .bnum; end; ; 0432 2 ; 0433 2 ! Allocate new bb. If there aren't enough, we lose for now -- inner mode ; 0434 2 ; 0435 2 if .bmax geq .bcount - 1 then return -1;! Out of space (cause expansion later) ; 0436 2 ; 0437 2 bmax = .bmax + 1; ; 0438 2 bnum = .bmax; ! So allocate it already ; 0439 2 bbase[.bnum, bb_fcb] = .fcb; ; 0440 2 bbase[.bnum, bb_ucb] = .ucb; ; 0441 2 bbase[.bnum, bb_rd] = 0; ; 0442 2 bbase[.bnum, bb_wr] = 0; ; 0443 2 bbase[.bnum, bb_ok] = 1; ; 0444 2 bbase[.bnum, bb_kps] = 0; ; 0445 2 .bnum ; 0446 1 end; LOCATE_BB: PUSHL R2 ;R2 0421 52 DD 00000 MOVL W^BBASE, R1 ;BBASE, R1 0429 51 0000' CF D0 00002 MNEGL #1, R0 ;#1, I 0428 50 01 CE 00007 BRB 2$ ;2$ 12 11 0000A 1$: MULL3 #92, R0, R2 ;#92, I, R2 0429 50 0000005C 8F C5 0000C ; 52 00013 PUSHAB (R2)[R1] ;(R2)[R1] 6241 9F 00014 CMPL @(SP)+, W^FCB ;@(SP)+, FCB 0000' CF 9E D1 00017 BEQL 3$ ;3$ 09 13 0001C 2$: AOBLEQ W^BMAX, R0, 1$ ;BMAX, I, 1$ 0428 50 0000' CF F3 0001E ; E8 00023 MNEGL #1, R0 ;#1, R0 50 01 CE 00024 3$: MOVL R0, W^BNUM ;R0, BNUM 0000' CF 50 D0 00027 MOVL W^BNUM, R2 ;BNUM, R2 0431 52 0000' CF D0 0002C BLSS 4$ ;4$ 12 19 00031 MULL3 #92, R2, R0 ;#92, R2, R0 52 0000005C 8F C5 00033 ; 50 0003A MOVB #1, 26(R0)[R1] ;#1, 26(R0)[R1] 1A A041 01 90 0003B MOVL R2, R0 ;R2, R0 50 52 D0 00040 BRB 6$ ;6$ 50 11 00043 4$: SUBL3 #1, W^BCOUNT, R0 ;#1, BCOUNT, R0 0435 0000' CF 01 C3 00045 ; 50 0004A CMPL W^BMAX, R0 ;BMAX, R0 50 0000' CF D1 0004B BLSS 5$ ;5$ 05 19 00050 MNEGL #1, R0 ;#1, R0 50 01 CE 00052 BRB 6$ ;6$ 3E 11 00055 5$: INCL W^BMAX ;BMAX 0437 0000' CF D6 00057 MOVL W^BMAX, W^BNUM ;BMAX, BNUM 0438 0000' CF 0000' CF D0 0005B MULL3 #92, W^BNUM, R0 ;#92, BNUM, R0 0439 0000' CF 0000005C 8F C5 00062 ; 50 0006B PUSHAB (R0)[R1] ;(R0)[R1] 6041 9F 0006C MOVL W^FCB, @(SP)+ ;FCB, @(SP)+ 9E 0000' CF D0 0006F PUSHAB 4(R0)[R1] ;4(R0)[R1] 0440 04 A041 9F 00074 MOVL R10, @(SP)+ ;UCB, @(SP)+ 9E 5A D0 00078 PUSHAB 8(R0)[R1] ;8(R0)[R1] 0441 08 A041 9F 0007B CLRL @(SP)+ ;@(SP)+ 9E D4 0007F PUSHAB 12(R0)[R1] ;12(R0)[R1] 0442 0C A041 9F 00081 CLRL @(SP)+ ;@(SP)+ 9E D4 00085 MOVB #1, 26(R0)[R1] ;#1, 26(R0)[R1] 0443 1A A041 01 90 00087 CLRB 27(R0)[R1] ;27(R0)[R1] 0444 1B A041 94 0008C MOVL W^BNUM, R0 ;BNUM, R0 0446 50 0000' CF D0 00090 6$: POPR #^M ;#^M 04 BA 00095 RSB ; 05 00097 ; Routine Size: 152 bytes, Routine Base: $CODE$ + 059C ; 0447 1 ; 0448 1 routine scan_file_chain : ioc_linkage novalue = ; 0449 2 begin ! Scan an FCB chain for good files ; 0450 2 ; 0451 2 external register ; 0452 2 ddb = 11 : ref $bblock[DDB$K_LENGTH], ; 0453 2 ucb = 10 : ref $bblock[UCB$K_LENGTH]; ; 0454 2 ; 0455 2 last_wcb = .fcb[FCB$L_WLFL]; ; 0456 2 wcb = .fcb[FCB$L_WLBL]; ; 0457 2 ; 0458 2 if .wcb geq 0 then return; ! Just in case ; 0459 2 if .wcb eql .wcb[WCB$L_WLFL] then return; ! No WCB (e.g., installed file) ; 0460 2 ; 0461 2 ! WCB, hence IOs to count. Find the bb for this FCB, create one if none exists ; 0462 2 ; 0463 2 bnum = locate_bb(); ; 0464 2 if .bnum lss 0 then return; ! No room, can't use this FCB, expand later ; 0465 2 ; 0466 2 ! Move WCB data to be "old" WCB data; initialize for new round of additions ; 0467 2 ; 0468 2 bbase[.bnum, bb_ord] = .bbase[.bnum, bb_rd]; ; 0469 2 bbase[.bnum, bb_owr] = .bbase[.bnum, bb_wr]; ; 0470 2 bbase[.bnum, bb_rd] = 0; ; 0471 2 bbase[.bnum, bb_wr] = 0; ; 0472 2 ; 0473 2 ! Go thru the WCB chain, adding up IO counts ; 0474 2 ; 0475 2 do if .wcb neq 0 then ; 0476 3 begin ! Chain thru WCBs for a file ; 0477 3 sv_wcb = .wcb; ; 0478 3 ; 0479 3 if .sv_wcb[WCB$B_TYPE] eql DYN$C_WCB then ; 0480 3 while .sv_wcb neq 0 do ; 0481 4 begin ! Chain thru WCBs for this channel ; 0482 4 bbase[.bnum, bb_rd] = .bbase[.bnum, bb_rd] + .sv_wcb[WCB$L_READS]; ; 0483 4 bbase[.bnum, bb_wr] = .bbase[.bnum, bb_wr] + .sv_wcb[WCB$L_WRITES]; ; 0484 4 sv_wcb = .sv_wcb[WCB$L_LINK]; ; 0485 3 end; ; 0486 3 ; 0487 3 wcb = .wcb[WCB$L_WLBL]; ! Step to next entry ; 0488 3 if .wcb[WCB$B_TYPE] neq DYN$C_WCB then return ; 0489 2 end until (.wcb eql .last_wcb); ! End of chain ; 0490 1 end; SCAN_FILE_CHAIN: PUSHR #^M ;#^M 0448 0C BB 00000 MOVL W^FCB, R0 ;FCB, R0 0455 50 0000' CF D0 00002 MOVL 16(R0), W^LAST_WCB ;16(R0), LAST_WCB 0000' CF 10 A0 D0 00007 MOVL 20(R0), W^WCB ;20(R0), WCB 0456 0000' CF 14 A0 D0 0000D MOVL W^WCB, R0 ;WCB, R0 0458 50 0000' CF D0 00013 BLSS 2$ ;2$ 03 19 00018 1$: BRW 7$ ;7$ 0089 31 0001A 2$: CMPL R0, (R0) ;R0, (R0) 0459 60 50 D1 0001D BEQL 1$ ;1$ F8 13 00020 BSBW LOCATE_BB ;LOCATE_BB 0463 FF43 30 00022 MOVL R0, W^BNUM ;R0, BNUM 0000' CF 50 D0 00025 MOVL W^BNUM, R1 ;BNUM, R1 0464 51 0000' CF D0 0002A BLSS 7$ ;7$ 75 19 0002F MOVL W^BBASE, R0 ;BBASE, R0 0468 50 0000' CF D0 00031 MULL2 #92, R1 ;#92, R1 51 0000005C 8F C4 00036 MOVAB 8(R1)[R0], R3 ;8(R1)[R0], R3 53 08 A140 9E 0003D PUSHAB 16(R1)[R0] ;16(R1)[R0] 10 A140 9F 00042 MOVL (R3), @(SP)+ ;(R3), @(SP)+ 9E 63 D0 00046 MOVAB 12(R1)[R0], R2 ;12(R1)[R0], R2 0469 52 0C A140 9E 00049 PUSHAB 20(R1)[R0] ;20(R1)[R0] 14 A140 9F 0004E MOVL (R2), @(SP)+ ;(R2), @(SP)+ 9E 62 D0 00052 CLRL (R3) ;(R3) 0470 63 D4 00055 CLRL (R2) ;(R2) 0471 62 D4 00057 MOVL W^WCB, R1 ;WCB, R1 0475 51 0000' CF D0 00059 3$: TSTL R1 ;R1 51 D5 0005E BEQL 6$ ;6$ 38 13 00060 MOVL R1, W^SV_WCB ;R1, SV_WCB 0477 0000' CF 51 D0 00062 MOVL W^SV_WCB, R0 ;SV_WCB, R0 0479 50 0000' CF D0 00067 CMPB 10(R0), #18 ;10(R0), #18 12 0A A0 91 0006C BNEQ 5$ ;5$ 17 12 00070 4$: MOVL W^SV_WCB, R0 ;SV_WCB, R0 0480 50 0000' CF D0 00072 BEQL 5$ ;5$ 10 13 00077 ADDL2 36(R0), (R3) ;36(R0), (R3) 0482 63 24 A0 C0 00079 ADDL2 40(R0), (R2) ;40(R0), (R2) 0483 62 28 A0 C0 0007D MOVL 32(R0), W^SV_WCB ;32(R0), SV_WCB 0484 0000' CF 20 A0 D0 00081 BRB 4$ ;4$ E9 11 00087 5$: MOVL 4(R1), W^WCB ;4(R1), WCB 0487 0000' CF 04 A1 D0 00089 MOVL W^WCB, R0 ;WCB, R0 0488 50 0000' CF D0 0008F CMPB 10(R0), #18 ;10(R0), #18 12 0A A0 91 00094 BNEQ 7$ ;7$ 0C 12 00098 6$: MOVL W^WCB, R1 ;WCB, R1 0489 51 0000' CF D0 0009A CMPL R1, W^LAST_WCB ;R1, LAST_WCB 0000' CF 51 D1 0009F BNEQ 3$ ;3$ B8 12 000A4 7$: POPR #^M ;#^M 0490 0C BA 000A6 RSB ; 05 000A8 ; Routine Size: 169 bytes, Routine Base: $CODE$ + 0634 ; 0491 1 ; 0492 1 routine scan_volume : ioc_linkage novalue = ; 0493 2 begin ! Scan a volume for FCBs ; 0494 2 ; 0495 2 external register ; 0496 2 ddb = 11 : ref $bblock[DDB$K_LENGTH], ; 0497 2 ucb = 10 : ref $bblock[UCB$K_LENGTH]; ; 0498 2 ; 0499 2 bind dc2 = ucb[UCB$L_DEVCHAR2] : $bblock[4]; ; 0500 2 ; 0501 2 local psl: $bblock[4]; ; 0502 2 ; 0503 2 if .dc2[DEV$V_SSM] then return; ! ss member, skip it (only do master) ; 0504 2 ; 0505 2 movpsl(psl); ! If possible, raise IPL and synch with IO database ; 0506 2 if .psl[PSL$V_CURMOD] eql 0 then ; 0507 3 begin ; 0508 3 SCH$IOLOCKR(.CTL$GL_PCB); ; 0509 4 if .lock_mem then SYS_LOCK(FILSYS,IPL$_SYNCH) ! Raise IPL ; 0510 2 end; ! K-mode ; 0511 2 ; 0512 2 fcb = .vcb[VCB$L_FCBFL]; ; 0513 2 while (.fcb neqa .vcb) and (.fcb lss 0) do ; 0514 3 begin ; 0515 3 if .fcb[FCB$B_TYPE] neq DYN$C_FCB then ; 0516 4 begin ; 0517 4 drop_clue($descriptor('Foolish FCB at '), .fcb); ; 0518 4 exitloop ; 0519 4 end ; 0520 3 else scan_file_chain(); ; 0521 3 fcb = .fcb[FCB$L_FCBFL] ! Step to next FCB on this volume ; 0522 2 end; ; 0523 2 ; 0524 2 if .psl[PSL$V_CURMOD] eql 0 then ; 0525 3 begin ; 0526 3 SCH$IOUNLOCK(.ctl$GL_PCB); ; 0527 4 SYS_UNLOCK(FILSYS,0) ! Lower IPL to 0 ; 0528 2 end; ; 0529 1 end; ! scan_volume .PSECT $PLIT$,NOWRT,NOEXE,2 P.AAY: .ASCII \Foolish FCB at \ ; 20 68 73 69 6C 6F 6F 46 00188 ; 20 74 61 20 42 43 46 00190 .BLKB 1 ; 00197 P.AAX: .LONG 15 ; 0000000F 00198 .ADDRESS P.AAY ; 00000000' 0019C .EXTRN SMP$ACQUIRE, SMP$RESTORE, SMP$RELEASE .PSECT $CODE$,NOWRT,2 SCAN_VOLUME: PUSHR #^M ;#^M 0492 18 BB 00000 PUSHL R2 ;R2 52 DD 00002 BBS #6, 64(R10), 5$ ;#6, 64(UCB), 5$ 0503 40 AA 06 E0 00004 ; 7A 00008 MOVPSL R0 ;PSL 0505 50 DC 00009 CLRL R3 ;R3 0506 53 D4 0000B CMPZV #24, #2, R0, #0 ;#24, #2, PSL, #0 02 18 ED 0000D ; 00 50 00010 BNEQ 1$ ;1$ 1D 12 00012 INCL R3 ;R3 53 D6 00014 MOVL @#CTL$GL_PCB, R4 ;@#CTL$GL_PCB, R4 0508 54 00000000G 9F D0 00016 JSB @#SCH$IOLOCKR ;@#SCH$IOLOCKR 00000000G 9F 16 0001D BLBC W^LOCK_MEM, 1$ ;LOCK_MEM, 1$ 0509 09 0000' CF E9 00023 MOVL #53, R0 ;#53, R0 50 35 D0 00028 JSB G^SMP$ACQUIRE ;SMP$ACQUIRE 00000000G 00 16 0002B 1$: MOVL @W^VCB, W^FCB ;@VCB, FCB 0512 0000' CF 0000' DF D0 00031 2$: MOVL W^FCB, R0 ;FCB, R0 0513 50 0000' CF D0 00038 CMPL R0, W^VCB ;R0, VCB 0000' CF 50 D1 0003D BEQL 4$ ;4$ 23 13 00042 TSTL R0 ;R0 50 D5 00044 BGEQ 4$ ;4$ 1F 18 00046 CMPB 10(R0), #7 ;10(R0), #7 0515 07 0A A0 91 00048 BEQL 3$ ;3$ 0D 13 0004C PUSHL R0 ;R0 0517 50 DD 0004E PUSHAB W^P.AAX ;P.AAX 0000' CF 9F 00050 CALLS #2, W^DROP_CLUE ;#2, DROP_CLUE F8CA CF 02 FB 00054 BRB 4$ ;4$ 0518 0C 11 00059 3$: BSBW SCAN_FILE_CHAIN ;SCAN_FILE_CHAIN 0520 FEF9 30 0005B MOVL @W^FCB, W^FCB ;@FCB, FCB 0521 0000' CF 0000' DF D0 0005E BRB 2$ ;2$ D1 11 00065 4$: BLBC R3, 5$ ;R3, 5$ 0524 19 53 E9 00067 MOVL @#CTL$GL_PCB, R4 ;@#CTL$GL_PCB, R4 0526 54 00000000G 9F D0 0006A JSB @#SCH$IOUNLOCK ;@#SCH$IOUNLOCK 00000000G 9F 16 00071 MOVL #53, R0 ;#53, R0 0527 50 35 D0 00077 JSB G^SMP$RELEASE ;SMP$RELEASE 00000000G 00 16 0007A MTPR #0, #18 ;#0, #18 12 00 DA 00080 5$: POPR #^M ;#^M 0529 1C BA 00083 RSB ; 05 00085 ; Routine Size: 134 bytes, Routine Base: $CODE$ + 06DD ; 0530 1 ; 0531 1 routine scan_system = ! Scan all mounted disks ; 0532 1 ; 0533 2 begin ; 0534 2 ; 0535 2 global register ; 0536 2 ddb = 11: ref $bblock[DDB$K_LENGTH], ; 0537 2 ucb = 10: ref $bblock[UCB$K_LENGTH]; ; 0538 2 ; 0539 2 incr i from 0 to .bmax do bbase[.i, bb_ok] = 0; ! Invalidate entries ; 0540 2 ddb = 0; ; 0541 2 ucb = 0; ; 0542 2 ; 0543 2 while 1 do ; 0544 3 begin ; 0545 3 if IOC$SCAN_IODB() eql 0 then return SS$_NORMAL; ; 0546 3 if .ucb[UCB$B_DEVCLASS] eql DC$_DISK then ; 0547 4 begin ; 0548 4 if (vcb = .ucb[UCB$L_VCB]) neq 0 then scan_volume(); ; 0549 3 end else ucb = 0; ; 0550 2 end; ! while 1 ; 0551 2 ; 0552 1 SS$_NORMAL end; ! scan_system SCAN_SYSTEM: .WORD ^M ;R11 MNEGL #1, R0 ;#1, I 0539 50 01 CE 00002 BRB 2$ ;2$ 10 11 00005 1$: MULL3 #92, R0, R1 ;#92, I, R1 50 0000005C 8F C5 00007 ; 51 0000E ADDL2 W^BBASE, R1 ;BBASE, R1 51 0000' CF C0 0000F CLRB 26(R1) ;26(R1) 1A A1 94 00014 2$: AOBLEQ W^BMAX, R0, 1$ ;BMAX, I, 1$ 50 0000' CF F3 00017 ; EA 0001C CLRL R11 ;DDB 0540 5B D4 0001D 3$: CLRL R10 ;UCB 0541 5A D4 0001F 4$: JSB @#IOC$SCAN_IODB ;@#IOC$SCAN_IODB 0545 00000000G 9F 16 00021 TSTL R0 ;R0 50 D5 00027 BEQL 5$ ;5$ 13 13 00029 CMPB 76(R10), #1 ;76(UCB), #1 0546 01 4C AA 91 0002B BNEQ 3$ ;3$ EE 12 0002F MOVL 56(R10), W^VCB ;56(UCB), VCB 0548 0000' CF 38 AA D0 00031 BEQL 4$ ;4$ E8 13 00037 BSBW SCAN_VOLUME ;SCAN_VOLUME FF3E 30 00039 BRB 4$ ;4$ E3 11 0003C 5$: MOVL #1, R0 ;#1, R0 0552 50 01 D0 0003E RET ; 04 00041 ; Routine Size: 66 bytes, Routine Base: $CODE$ + 0763 ; 0553 1 ; 0554 1 routine blank_screen : novalue = ! Called to start a new screenful ; 0555 2 begin ; 0556 2 builtin ediv; ; 0557 2 local delta: vector[2, long]; ; 0558 2 ; 0559 2 s = LIB$SUBX( zero_time, start_time, delta); ; 0560 2 if not .s then signal(.s); ; 0561 2 s = ediv( %ref(10000000), delta, elapsed_seconds, s); ; 0562 2 if .class eql DC$_DISK then ; 0563 3 begin ; 0564 3 count_desc[DSC$W_LENGTH] = 0; ; 0565 3 incr i from 1 to 4 do put_desc(count_desc); ; 0566 2 end; ! If to file ; 0567 2 count_desc[DSC$A_POINTER] = count_text; ; 0568 2 count_desc[DSC$W_LENGTH] = c_len; ; P 0569 2 s = $fao( $descriptor( ; P 0570 2 '!AC Total reads writes !AC file activity as of !20%D'), ; 0571 2 count_desc, count_desc, clr_screen, node_name, zero_time); ok; ; 0572 2 put_desc(count_desc); ; P 0573 2 s = $fao( $descriptor(' count /sec /sec '), ; 0574 2 count_desc, count_desc); ; 0575 2 put_desc(count_desc); ; 0576 2 count_desc[DSC$W_LENGTH] = 0; ; 0577 2 put_desc(count_desc); ; 0578 1 end; ! blank_screen .PSECT $PLIT$,NOWRT,NOEXE,2 P.ABA: .ASCII \!AC Total reads writes !AC file activity as of !20%D\ ; 74 6F 54 20 20 43 41 21 001A0 ; 64 61 65 72 20 20 6C 61 001A8 ; 73 65 74 69 72 77 20 73 001B0 ; 69 66 20 43 41 21 20 20 001B8 ; 76 69 74 63 61 20 65 6C 001C0 ; 6F 20 73 61 20 79 74 69 001C8 ; 44 25 30 32 21 20 66 001D0 .BLKB 1 ; 001D7 P.AAZ: .LONG 55 ; 00000037 001D8 .ADDRESS P.ABA ; 00000000' 001DC P.ABC: .ASCII \ count /sec /sec \ ; 20 74 6E 75 6F 63 20 20 001E0 ; 20 20 63 65 73 2F 20 20 001E8 ; 20 20 20 63 65 73 2F 001F0 .BLKB 1 ; 001F7 P.ABB: .LONG 23 ; 00000017 001F8 .ADDRESS P.ABC ; 00000000' 001FC .PSECT $CODE$,NOWRT,2 BLANK_SCREEN: .WORD ^M ;Save R2,R3,R4,R5,R6 0554 007C 00000 MOVAB G^SYS$FAO, R6 ;SYS$FAO, R6 56 00000000G 00 9E 00002 MOVAB G^SYS$PUT, R5 ;SYS$PUT, R5 55 00000000G 00 9E 00009 MOVAB G^LIB$SIGNAL, R4 ;LIB$SIGNAL, R4 54 00000000G 00 9E 00010 MOVAB W^S, R3 ;S, R3 53 0000' CF 9E 00017 SUBL2 #8, SP ;#8, SP 5E 08 C2 0001C PUSHL SP ;SP 0559 5E DD 0001F PUSHAB 8(R3) ;START_TIME 08 A3 9F 00021 PUSHAB 36(R3) ;ZERO_TIME 24 A3 9F 00024 CALLS #3, G^LIB$SUBX ;#3, LIB$SUBX 00000000G 00 03 FB 00027 MOVL R0, (R3) ;R0, S 63 50 D0 0002E BLBS (R3), 1$ ;S, 1$ 0560 05 63 E8 00031 PUSHL (R3) ;S 63 DD 00034 CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 00036 1$: EDIV #10000000, (SP), -744(R3), (R3) ;#10000000, DELTA, ELAPSED_SECONDS, - 0561 6E 00989680 8F 7B 00039 ;S 63 FD18 C3 00040 MOVPSL R0 ;R0 50 DC 00044 MOVL R0, (R3) ;R0, S 63 50 D0 00046 CMPL -952(R3), #1 ;CLASS, #1 0562 01 FC48 C3 D1 00049 BNEQ 6$ ;6$ 3F 12 0004E CLRW -796(R3) ;COUNT_DESC 0564 FCE4 C3 B4 00050 MOVL #1, R2 ;#1, I 0565 52 01 D0 00054 2$: CMPZV #0, #16, -796(R3), -424(R3) ;#0, #16, COUNT_DESC, LINE_WIDTH 10 00 ED 00057 ; FE58 C3 FCE4 C3 0005A BLEQ 3$ ;3$ 09 15 00060 MOVW -424(R3), -278(R3) ;LINE_WIDTH, OUT_RAB+34 FEEA C3 FE58 C3 B0 00062 BRB 4$ ;4$ 07 11 00069 3$: MOVW -796(R3), -278(R3) ;COUNT_DESC, OUT_RAB+34 FEEA C3 FCE4 C3 B0 0006B 4$: MOVL -792(R3), -272(R3) ;COUNT_DESC+4, OUT_RAB+40 FEF0 C3 FCE8 C3 D0 00072 PUSHAB -312(R3) ;OUT_RAB FEC8 C3 9F 00079 CALLS #1, (R5) ;#1, SYS$PUT 65 01 FB 0007D MOVL R0, (R3) ;R0, S 63 50 D0 00080 BLBS (R3), 5$ ;S, 5$ 05 63 E8 00083 PUSHL (R3) ;S 63 DD 00086 CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 00088 5$: AOBLEQ #4, R2, 2$ ;#4, I, 2$ 52 04 F3 0008B ; C8 0008E 6$: MOVAB -928(R3), -792(R3) ;COUNT_TEXT, COUNT_DESC+4 0567 FCE8 C3 FC60 C3 9E 0008F MOVZBW #132, -796(R3) ;#132, COUNT_DESC 0568 FCE4 C3 84 8F 9B 00096 PUSHAB 36(R3) ;ZERO_TIME 0571 24 A3 9F 0009C PUSHAB -416(R3) ;NODE_NAME FE60 C3 9F 0009F PUSHAB -948(R3) ;CLR_SCREEN FC4C C3 9F 000A3 PUSHAB -796(R3) ;COUNT_DESC FCE4 C3 9F 000A7 PUSHAB -796(R3) ;COUNT_DESC FCE4 C3 9F 000AB PUSHAB W^P.AAZ ;P.AAZ 0000' CF 9F 000AF CALLS #6, (R6) ;#6, SYS$FAO 66 06 FB 000B3 MOVL R0, (R3) ;R0, S 63 50 D0 000B6 BLBS (R3), 7$ ;S, 7$ 05 63 E8 000B9 PUSHL (R3) ;S 63 DD 000BC CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 000BE 7$: CMPZV #0, #16, -796(R3), -424(R3) ;#0, #16, COUNT_DESC, LINE_WIDTH 0572 10 00 ED 000C1 ; FE58 C3 FCE4 C3 000C4 BLEQ 8$ ;8$ 09 15 000CA MOVW -424(R3), -278(R3) ;LINE_WIDTH, OUT_RAB+34 FEEA C3 FE58 C3 B0 000CC BRB 9$ ;9$ 07 11 000D3 8$: MOVW -796(R3), -278(R3) ;COUNT_DESC, OUT_RAB+34 FEEA C3 FCE4 C3 B0 000D5 9$: MOVL -792(R3), -272(R3) ;COUNT_DESC+4, OUT_RAB+40 FEF0 C3 FCE8 C3 D0 000DC PUSHAB -312(R3) ;OUT_RAB FEC8 C3 9F 000E3 CALLS #1, (R5) ;#1, SYS$PUT 65 01 FB 000E7 MOVL R0, (R3) ;R0, S 63 50 D0 000EA BLBS (R3), 10$ ;S, 10$ 05 63 E8 000ED PUSHL (R3) ;S 63 DD 000F0 CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 000F2 10$: PUSHAB -796(R3) ;COUNT_DESC 0574 FCE4 C3 9F 000F5 PUSHAB -796(R3) ;COUNT_DESC FCE4 C3 9F 000F9 PUSHAB W^P.ABB ;P.ABB 0000' CF 9F 000FD CALLS #3, (R6) ;#3, SYS$FAO 66 03 FB 00101 MOVL R0, (R3) ;R0, S 63 50 D0 00104 CMPZV #0, #16, -796(R3), -424(R3) ;#0, #16, COUNT_DESC, LINE_WIDTH 0575 10 00 ED 00107 ; FE58 C3 FCE4 C3 0010A BLEQ 11$ ;11$ 09 15 00110 MOVW -424(R3), -278(R3) ;LINE_WIDTH, OUT_RAB+34 FEEA C3 FE58 C3 B0 00112 BRB 12$ ;12$ 07 11 00119 11$: MOVW -796(R3), -278(R3) ;COUNT_DESC, OUT_RAB+34 FEEA C3 FCE4 C3 B0 0011B 12$: MOVL -792(R3), -272(R3) ;COUNT_DESC+4, OUT_RAB+40 FEF0 C3 FCE8 C3 D0 00122 PUSHAB -312(R3) ;OUT_RAB FEC8 C3 9F 00129 CALLS #1, (R5) ;#1, SYS$PUT 65 01 FB 0012D MOVL R0, (R3) ;R0, S 63 50 D0 00130 BLBS (R3), 13$ ;S, 13$ 05 63 E8 00133 PUSHL (R3) ;S 63 DD 00136 CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 00138 13$: CLRW -796(R3) ;COUNT_DESC 0576 FCE4 C3 B4 0013B CMPZV #0, #16, -796(R3), -424(R3) ;#0, #16, COUNT_DESC, LINE_WIDTH 0577 10 00 ED 0013F ; FE58 C3 FCE4 C3 00142 BLEQ 14$ ;14$ 09 15 00148 MOVW -424(R3), -278(R3) ;LINE_WIDTH, OUT_RAB+34 FEEA C3 FE58 C3 B0 0014A BRB 15$ ;15$ 07 11 00151 14$: MOVW -796(R3), -278(R3) ;COUNT_DESC, OUT_RAB+34 FEEA C3 FCE4 C3 B0 00153 15$: MOVL -792(R3), -272(R3) ;COUNT_DESC+4, OUT_RAB+40 FEF0 C3 FCE8 C3 D0 0015A PUSHAB -312(R3) ;OUT_RAB FEC8 C3 9F 00161 CALLS #1, (R5) ;#1, SYS$PUT 65 01 FB 00165 MOVL R0, (R3) ;R0, S 63 50 D0 00168 BLBS (R3), 16$ ;S, 16$ 05 63 E8 0016B PUSHL (R3) ;S 63 DD 0016E CALLS #1, (R4) ;#1, LIB$SIGNAL 64 01 FB 00170 16$: RET ; 0578 04 00173 ; Routine Size: 372 bytes, Routine Base: $CODE$ + 07A5 ; 0579 1 ; 0580 1 routine print_top_files : novalue = ; 0581 2 begin ; 0582 2 own ; 0583 2 argl : vector[2, long] initial(1,0), ; 0584 2 i, ; 0585 2 out_count; ; 0586 2 ; 0587 2 out_count = 0; ; 0588 2 incr ii from 0 to .bmax do ; 0589 3 begin ; 0590 3 i = .sort_base[.ii]; ; 0591 3 if (.out_count geq .page_size - 3) and (.page_size gtr 0) then exitloop; ; 0592 3 wc = .bbase[.i, bb_wr] - .bbase[.i, bb_owr]; ! Calculate read- ; 0593 3 rc = .bbase[.i, bb_rd] - .bbase[.i, bb_ord]; ! and write-count ; 0594 3 ; 0595 3 if .bbase[.i, bb_ok] and ; 0596 3 ((.rc gtr 0) or (.wc gtr 0)) and ; 0597 4 ((.bbase[.i, bb_rd] gtr .bbase[.i, bb_ord]) or ; 0598 3 (.bbase[.i, bb_wr] gtr .bbase[.i, bb_owr])) then ; 0599 4 begin ! Something to print. Check pre-print-activity. ; 0600 4 if .out_count eql 0 then blank_screen(); ; 0601 4 out_count = .out_count + 1; ; 0602 4 argl[1] = .i; ; 0603 5 $cmexec(routin=print_filename, arglst=argl) ; 0604 3 end; ! Output file data ; 0605 2 end; ; 0606 2 if .out_count gtr 0 then $flush(rab= out_rab); ; 0607 1 end; ! Print_top_files .PSECT $OWN$,NOEXE,2 ARGL: .LONG 1, 0 ; 00000000 00000001 003FC I: .BLKB 4 ; 00404 OUT_COUNT: .BLKB 4 ; 00408 .EXTRN SYS$CMEXEC, SYS$FLUSH .PSECT $CODE$,NOWRT,2 PRINT_TOP_FILES: .WORD ^M ;Save R2,R3,R4 0580 001C 00000 MOVAB W^OUT_COUNT, R4 ;OUT_COUNT, R4 54 0000' CF 9E 00002 CLRL (R4) ;OUT_COUNT 0587 64 D4 00007 MOVL -1024(R4), R3 ;BMAX, R3 0588 53 FC00 C4 D0 00009 MNEGL #1, R2 ;#1, II 52 01 CE 0000E BRW 6$ ;6$ 0084 31 00011 1$: MOVL @-52(R4)[R2], -4(R4) ;@SORT_BASE[II], I 0590 FC A4 CC B442 D0 00014 SUBL3 #3, -160(R4), R0 ;#3, PAGE_SIZE, R0 0591 FF60 C4 03 C3 0001A ; 50 0001F CMPL (R4), R0 ;OUT_COUNT, R0 50 64 D1 00020 BLSS 2$ ;2$ 06 19 00023 TSTL -160(R4) ;PAGE_SIZE FF60 C4 D5 00025 BGTR 7$ ;7$ 73 14 00029 2$: MOVL -1028(R4), R0 ;BBASE, R0 0592 50 FBFC C4 D0 0002B MULL3 #92, -4(R4), R1 ;#92, I, R1 FC A4 0000005C 8F C5 00030 ; 51 00038 PUSHAB 12(R1)[R0] ;12(R1)[R0] 0C A140 9F 00039 PUSHAB 20(R1)[R0] ;20(R1)[R0] 14 A140 9F 0003D SUBL3 @(SP)+, @(SP)+, -60(R4) ;@(SP)+, @(SP)+, WC 9E 9E C3 00041 ; C4 A4 00044 PUSHAB 8(R1)[R0] ;8(R1)[R0] 0593 08 A140 9F 00046 PUSHAB 16(R1)[R0] ;16(R1)[R0] 10 A140 9F 0004A SUBL3 @(SP)+, @(SP)+, -64(R4) ;@(SP)+, @(SP)+, RC 9E 9E C3 0004E ; C0 A4 00051 BBC #0, 26(R1)[R0], 6$ ;#0, 26(R1)[R0], 6$ 0595 1A A140 00 E1 00053 ; 3F 00058 BGTR 3$ ;3$ 0596 05 14 00059 TSTL -60(R4) ;WC C4 A4 D5 0005B BLEQ 6$ ;6$ 38 15 0005E 3$: PUSHAB 16(R1)[R0] ;16(R1)[R0] 0597 10 A140 9F 00060 PUSHAB 8(R1)[R0] ;8(R1)[R0] 08 A140 9F 00064 CMPL @(SP)+, @(SP)+ ;@(SP)+, @(SP)+ 9E 9E D1 00068 BGTR 4$ ;4$ 0D 14 0006B PUSHAB 20(R1)[R0] ;20(R1)[R0] 0598 14 A140 9F 0006D PUSHAB 12(R1)[R0] ;12(R1)[R0] 0C A140 9F 00071 CMPL @(SP)+, @(SP)+ ;@(SP)+, @(SP)+ 9E 9E D1 00075 BLEQ 6$ ;6$ 1E 15 00078 4$: TSTL (R4) ;OUT_COUNT 0600 64 D5 0007A BNEQ 5$ ;5$ 05 12 0007C CALLS #0, W^BLANK_SCREEN ;#0, BLANK_SCREEN FE09 CF 00 FB 0007E 5$: INCL (R4) ;OUT_COUNT 0601 64 D6 00083 MOVL -4(R4), -8(R4) ;I, ARGL+4 0602 F8 A4 FC A4 D0 00085 PUSHAB -12(R4) ;ARGL 0603 F4 A4 9F 0008A PUSHAB W^PRINT_FILENAME ;PRINT_FILENAME F967 CF 9F 0008D CALLS #2, G^SYS$CMEXEC ;#2, SYS$CMEXEC 00000000G 00 02 FB 00091 6$: ACBL R3, #1, R2, 1$ ;R3, #1, II, 1$ 0588 01 53 F1 00098 ; FF76 52 0009B 7$: TSTL (R4) ;OUT_COUNT 0606 64 D5 0009E BLEQ 8$ ;8$ 0B 15 000A0 PUSHAB -368(R4) ;OUT_RAB FE90 C4 9F 000A2 CALLS #1, G^SYS$FLUSH ;#1, SYS$FLUSH 00000000G 00 01 FB 000A6 8$: RET ; 0607 04 000AD ; Routine Size: 174 bytes, Routine Base: $CODE$ + 0919 ; 0608 1 ; 0609 1 ! Main code ; 0610 1 ; 0611 1 routine hf = ; 0612 2 begin ; 0613 2 ; 0614 2 own ; 0615 2 exit_block : vector[4, long] initial(0, cleanup, 1, s), ; 0616 2 scratch_desc: $bblock[8], ; 0617 2 scratch_text: $bblock[c_len]; ; 0618 2 ; 0619 2 s = $getjpiw(itmlst= jpi_ptr); ok; ; 0620 2 s = $dclexh(desblk= exit_block); ok; ; 0621 2 if .base_priority lss .run_priority then ! Increasing priority? ; 0622 2 s = $setpri(pri= .run_priority, prvpri= old_pri); ; 0623 2 s = $create(fab=out_fab); ok; ; 0624 2 s = $connect(rab=out_rab); ok; ; 0625 2 ; 0626 2 s = $getsyiw(itmlst = syi_ptr); ok; ; 0627 2 node_name[0] = .node_name_len; ; 0628 2 scratch_desc[DSC$A_POINTER] = .out_fab[FAB$L_FNA]; ; 0629 2 scratch_desc[DSC$W_LENGTH] = .out_fab[FAB$B_FNS]; ; 0630 2 s = $getdviw(devnam=scratch_desc, itmlst=dvi_ptr); ; 0631 2 if not .s then ; 0632 3 begin ! Can't get terminal information? OK, set for non-terminal ; 0633 3 clr_screen[0, 0, 8, 0] = 0; ; 0634 3 page_size = 0; ; 0635 3 line_width = c_len; ; 0636 3 class = DC$_DISK ; 0637 2 end; ! PPF ; 0638 2 ; 0639 2 if .class eql DC$_TERM then ; 0640 3 begin ; 0641 3 ch$move(.esc_seq<0,8> + 1, esc_seq, clr_screen); ; 0642 3 s = $getdviw(devnam=scratch_desc, itmlst= tt_ptr); ok ; 0643 2 end; ! If terminal ; 0644 2 ; 0645 2 bmax = -1; ; 0646 2 bcount = .SGN$GW_MAXPRCCT * 5 + 30; ! Guess how many files (can expand) ; 0647 2 bsize = bb_len * .bcount; ; 0648 2 s = LIB$GET_VM(bsize,bbase); ok; ; 0649 2 ; 0650 2 ! sort_base is a vector of indices -- exchange pointers, not data blocks ; 0651 2 ; 0652 2 s = LIB$GET_VM( %ref(%upval * .bcount), sort_base); ok; ; 0653 2 lock_everything(); ! TRY to lock all of our memory ; 0654 2 ; 0655 2 ch$fill(0, 8, start_time); ! 1st time flag (that's a pun, folks) ; 0656 2 ; 0657 2 while 1 do ; 0658 3 begin ; 0659 3 s = $setimr(efn=.efn_flag, daytim=time); ok; ; 0660 3 s = $cmkrnl(routin=scan_system); ; 0661 3 if .s eql SS$_NOPRIV then s = $cmexec(routin=scan_system); ok; ; 0662 3 ; 0663 3 sort_table(); ! Set up vector sort_base to point to descending entries ; 0664 3 ; 0665 3 if (.start_time[0] or .start_time[1]) neq 0 then print_top_files(); ; 0666 3 ; 0667 3 check_expansion(); ; 0668 3 ch$move(8, zero_time, start_time); ; 0669 3 $gettim(timadr = zero_time); ; 0670 3 s = $waitfr(efn= .efn_flag); ok; ; 0671 2 end; ! Loop forever ; 0672 2 ; 0673 1 SS$_NORMAL end; ! of hf .PSECT $OWN$,NOEXE,2 EXIT_BLOCK: .LONG 0 ; 00000000 0040C .ADDRESS CLEANUP ; 00000000' 00410 .LONG 1 ; 00000001 00414 .ADDRESS S ; 00000000' 00418 SCRATCH_DESC: .BLKB 8 ; 0041C SCRATCH_TEXT: .BLKB 132 ; 00424 .EXTRN SYS$GETJPIW, SYS$DCLEXH, SYS$CREATE, SYS$CONNECT, SYS$GETSYIW, SYS$GETDVIW, SYS$CMKRNL .EXTRN SYS$GETTIM .PSECT $CODE$,NOWRT,2 HF: .WORD ^M ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 0611 07FC 00000 MOVAB G^LIB$GET_VM, R10 ;LIB$GET_VM, R10 5A 00000000G 00 9E 00002 MOVAB G^SYS$GETDVIW, R9 ;SYS$GETDVIW, R9 59 00000000G 00 9E 00009 MOVAB W^ESC_SEQ, R8 ;ESC_SEQ, R8 58 0000' CF 9E 00010 MOVAB G^LIB$SIGNAL, R7 ;LIB$SIGNAL, R7 57 00000000G 00 9E 00015 MOVAB W^S, R6 ;S, R6 56 0000' CF 9E 0001C SUBL2 #4, SP ;#4, SP 5E 04 C2 00021 CLRQ -(SP) ;-(SP) 0619 7E 7C 00024 CLRL -(SP) ;-(SP) 7E D4 00026 PUSHAB 52(R8) ;JPI_PTR 34 A8 9F 00028 CLRQ -(SP) ;-(SP) 7E 7C 0002B CLRL -(SP) ;-(SP) 7E D4 0002D CALLS #7, G^SYS$GETJPIW ;#7, SYS$GETJPIW 00000000G 00 07 FB 0002F MOVL R0, (R6) ;R0, S 66 50 D0 00036 BLBS (R6), 1$ ;S, 1$ 05 66 E8 00039 PUSHL (R6) ;S 66 DD 0003C CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 0003E 1$: PUSHAB 60(R6) ;EXIT_BLOCK 0620 3C A6 9F 00041 CALLS #1, G^SYS$DCLEXH ;#1, SYS$DCLEXH 00000000G 00 01 FB 00044 MOVL R0, (R6) ;R0, S 66 50 D0 0004B BLBS (R6), 2$ ;S, 2$ 05 66 E8 0004E PUSHL (R6) ;S 66 DD 00051 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00053 2$: CMPL -976(R6), -740(R6) ;BASE_PRIORITY, RUN_PRIORITY 0621 FD1C C6 FC30 C6 D1 00056 BGEQ 3$ ;3$ 14 18 0005D PUSHAB -396(R6) ;OLD_PRI 0622 FE74 C6 9F 0005F PUSHL -740(R6) ;RUN_PRIORITY FD1C C6 DD 00063 CLRQ -(SP) ;-(SP) 7E 7C 00067 CALLS #4, G^SYS$SETPRI ;#4, SYS$SETPRI 00000000G 00 04 FB 00069 MOVL R0, (R6) ;R0, S 66 50 D0 00070 3$: PUSHAB -392(R6) ;OUT_FAB 0623 FE78 C6 9F 00073 CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE 00000000G 00 01 FB 00077 MOVL R0, (R6) ;R0, S 66 50 D0 0007E BLBS (R6), 4$ ;S, 4$ 05 66 E8 00081 PUSHL (R6) ;S 66 DD 00084 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00086 4$: PUSHAB -312(R6) ;OUT_RAB 0624 FEC8 C6 9F 00089 CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT 00000000G 00 01 FB 0008D MOVL R0, (R6) ;R0, S 66 50 D0 00094 BLBS (R6), 5$ ;S, 5$ 05 66 E8 00097 PUSHL (R6) ;S 66 DD 0009A CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 0009C 5$: CLRQ -(SP) ;-(SP) 0626 7E 7C 0009F CLRL -(SP) ;-(SP) 7E D4 000A1 PUSHAB 80(R8) ;SYI_PTR 50 A8 9F 000A3 CLRQ -(SP) ;-(SP) 7E 7C 000A6 CLRL -(SP) ;-(SP) 7E D4 000A8 CALLS #7, G^SYS$GETSYIW ;#7, SYS$GETSYIW 00000000G 00 07 FB 000AA MOVL R0, (R6) ;R0, S 66 50 D0 000B1 BLBS (R6), 6$ ;S, 6$ 05 66 E8 000B4 PUSHL (R6) ;S 66 DD 000B7 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 000B9 6$: MOVB -400(R6), -416(R6) ;NODE_NAME_LEN, NODE_NAME 0627 FE60 C6 FE70 C6 90 000BC MOVL -348(R6), 80(R6) ;OUT_FAB+44, SCRATCH_DESC+4 0628 50 A6 FEA4 C6 D0 000C3 MOVZBW -340(R6), 76(R6) ;OUT_FAB+52, SCRATCH_DESC 0629 4C A6 FEAC C6 9B 000C9 CLRQ -(SP) ;-(SP) 0630 7E 7C 000CF CLRQ -(SP) ;-(SP) 7E 7C 000D1 PUSHAB 8(R8) ;DVI_PTR 08 A8 9F 000D3 PUSHAB 76(R6) ;SCRATCH_DESC 4C A6 9F 000D6 CLRQ -(SP) ;-(SP) 7E 7C 000D9 CALLS #8, (R9) ;#8, SYS$GETDVIW 69 08 FB 000DB MOVL R0, (R6) ;R0, S 66 50 D0 000DE BLBS (R6), 7$ ;S, 7$ 0631 12 66 E8 000E1 CLRB -948(R6) ;CLR_SCREEN 0633 FC4C C6 94 000E4 CLRL -104(R6) ;PAGE_SIZE 0634 98 A6 D4 000E8 MOVZBL #132, -424(R6) ;#132, LINE_WIDTH 0635 FE58 C6 84 8F 9A 000EB MOVL #1, -952(R6) ;#1, CLASS 0636 FC48 C6 01 D0 000F1 7$: CMPL -952(R6), #66 ;CLASS, #66 0639 00000042 8F FC48 C6 D1 000F6 BNEQ 8$ ;8$ 25 12 000FF MOVZBL (R8), R0 ;ESC_SEQ, R0 0641 50 68 9A 00101 INCL R0 ;R0 50 D6 00104 MOVC3 R0, (R8), -948(R6) ;R0, ESC_SEQ, CLR_SCREEN 68 50 28 00106 ; FC4C C6 00109 CLRQ -(SP) ;-(SP) 0642 7E 7C 0010C CLRQ -(SP) ;-(SP) 7E 7C 0010E PUSHAB 24(R8) ;TT_PTR 18 A8 9F 00110 PUSHAB 76(R6) ;SCRATCH_DESC 4C A6 9F 00113 CLRQ -(SP) ;-(SP) 7E 7C 00116 CALLS #8, (R9) ;#8, SYS$GETDVIW 69 08 FB 00118 MOVL R0, (R6) ;R0, S 66 50 D0 0011B BLBS (R6), 8$ ;S, 8$ 05 66 E8 0011E PUSHL (R6) ;S 66 DD 00121 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00123 8$: MNEGL #1, -968(R6) ;#1, BMAX 0645 FC38 C6 01 CE 00126 MOVZWL @#SGN$GW_MAXPRCCT, R0 ;@#SGN$GW_MAXPRCCT, R0 0646 50 00000000G 9F 3C 0012B MULL2 #5, R0 ;#5, R0 50 05 C4 00132 MOVAB 30(R0), -956(R6) ;30(R0), BCOUNT FC44 C6 1E A0 9E 00135 MULL3 #92, -956(R6), -960(R6) ;#92, BCOUNT, BSIZE 0647 FC44 C6 0000005C 8F C5 0013B ; FC40 C6 00144 PUSHAB -972(R6) ;BBASE 0648 FC34 C6 9F 00147 PUSHAB -960(R6) ;BSIZE FC40 C6 9F 0014B CALLS #2, (R10) ;#2, LIB$GET_VM 6A 02 FB 0014F MOVL R0, (R6) ;R0, S 66 50 D0 00152 BLBS (R6), 9$ ;S, 9$ 05 66 E8 00155 PUSHL (R6) ;S 66 DD 00158 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 0015A 9$: PUSHAB 4(R6) ;SORT_BASE 0652 04 A6 9F 0015D ASHL #2, -956(R6), 4(SP) ;#2, BCOUNT, 4(SP) FC44 C6 02 78 00160 ; 04 AE 00165 PUSHAB 4(SP) ;4(SP) 04 AE 9F 00167 CALLS #2, (R10) ;#2, LIB$GET_VM 6A 02 FB 0016A MOVL R0, (R6) ;R0, S 66 50 D0 0016D BLBS (R6), 10$ ;S, 10$ 05 66 E8 00170 PUSHL (R6) ;S 66 DD 00173 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00175 10$: CALLS #0, W^LOCK_EVERYTHING ;#0, LOCK_EVERYTHING 0653 F586 CF 00 FB 00178 MOVC5 #0, (SP), #0, #8, 8(R6) ;#0, (SP), #0, #8, START_TIME 0655 6E 00 2C 0017D ; 08 00 00180 ; 08 A6 00182 11$: CLRQ -(SP) ;-(SP) 0659 7E 7C 00184 CLRL -(SP) ;-(SP) 7E D4 00186 PUSHAB 16(R6) ;TIME 10 A6 9F 00188 PUSHL -748(R6) ;EFN_FLAG FD14 C6 DD 0018B CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 0018F MOVL R0, (R6) ;R0, S 66 50 D0 00196 BLBS (R6), 12$ ;S, 12$ 05 66 E8 00199 PUSHL (R6) ;S 66 DD 0019C CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 0019E 12$: CLRL -(SP) ;-(SP) 0660 7E D4 001A1 PUSHAB W^SCAN_SYSTEM ;SCAN_SYSTEM FBF5 CF 9F 001A3 CALLS #2, G^SYS$CMKRNL ;#2, SYS$CMKRNL 00000000G 00 02 FB 001A7 MOVL R0, (R6) ;R0, S 66 50 D0 001AE CMPL (R6), #36 ;S, #36 0661 24 66 D1 001B1 BNEQ 13$ ;13$ 10 12 001B4 CLRL -(SP) ;-(SP) 7E D4 001B6 PUSHAB W^SCAN_SYSTEM ;SCAN_SYSTEM FBE0 CF 9F 001B8 CALLS #2, G^SYS$CMEXEC ;#2, SYS$CMEXEC 00000000G 00 02 FB 001BC MOVL R0, (R6) ;R0, S 66 50 D0 001C3 13$: BLBS (R6), 14$ ;S, 14$ 05 66 E8 001C6 PUSHL (R6) ;S 66 DD 001C9 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 001CB 14$: CALLS #0, W^SORT_TABLE ;#0, SORT_TABLE 0663 F628 CF 00 FB 001CE BISL3 12(R6), 8(R6), R0 ;START_TIME+4, START_TIME, R0 0665 08 A6 0C A6 C9 001D3 ; 50 001D8 BEQL 15$ ;15$ 05 13 001D9 CALLS #0, W^PRINT_TOP_FILES ;#0, PRINT_TOP_FILES FD72 CF 00 FB 001DB 15$: CALLS #0, W^CHECK_EXPANSION ;#0, CHECK_EXPANSION 0667 F54B CF 00 FB 001E0 MOVC3 #8, 36(R6), 8(R6) ;#8, ZERO_TIME, START_TIME 0668 24 A6 08 28 001E5 ; 08 A6 001E9 PUSHAB 36(R6) ;ZERO_TIME 0669 24 A6 9F 001EB CALLS #1, G^SYS$GETTIM ;#1, SYS$GETTIM 00000000G 00 01 FB 001EE PUSHL -748(R6) ;EFN_FLAG 0670 FD14 C6 DD 001F5 CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 001F9 MOVL R0, (R6) ;R0, S 66 50 D0 00200 BLBS (R6), 16$ ;S, 16$ 05 66 E8 00203 PUSHL (R6) ;S 66 DD 00206 CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00208 16$: BRW 11$ ;11$ 0657 FF76 31 0020B ; Routine Size: 526 bytes, Routine Base: $CODE$ + 09C7 ; 0674 1 ; 0675 0 end eludom .EXTRN LIB$SIGNAL .END HF