home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
progjour
/
1991
/
02
/
vtree
/
sourcer.lst
< prev
next >
Wrap
File List
|
1991-01-06
|
13KB
|
309 lines
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 1
PAGE 59,132
;██████████████████████████████████████████████████████████████████████████
;██ ██
;██ VTREE ██
;██ ██
;██ Created: 1-Nov-86 ██
;██ Version: ██
;██ Passes: 5 Analysis Options on: QRS ██
;██ (C) Copyright Charles Petzold, 1985Invalid disk dr ██
;██ ██
;██████████████████████████████████████████████████████████████████████████
.err Target Assembler set to NONE, re-assembly not recomended
= 005C data_1e equ 5Ch ; (70A1:005C=0)
= 0080 data_2e equ 80h ; (70A1:0080=0)
= 0095 data_3e equ 95h ; (70A1:0095=0)
= 02FC data_13e equ 2FCh ; (70A1:02FC=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
vtree proc far
70A1:0100 start:
70A1:0100 EB 5F jmp short loc_1 ; (0161)
70A1:0102 90 db 90h
70A1:0103 00 data_4 db 0 ; xref 70A1:018E, 01AD, 02B9
70A1:0104 3A db 3Ah
70A1:0105 5C 2A 2E 2A 00 db '\*.*', 0
70A1:010A 28 43 29 20 43 6F copyright db '(C) Copyright Charles Petzold, 1'
70A1:0110 70 79 72 69 67 68
70A1:0116 74 20 43 68 61 72
70A1:011C 6C 65 73 20 50 65
70A1:0122 74 7A 6F 6C 64 2C
70A1:0128 20 31
70A1:012A 39 38 35 49 6E 76 db '985Invalid disk dr'
70A1:0130 61 6C 69 64 20 64
70A1:0136 69 73 6B 20 64 72
70A1:013C 69 76 65 24 db 'ive$'
70A1:0140 52 65 71 75 69 72 db 'Requires DOS 2.0 +$'
70A1:0146 65 73 20 44 4F 53
70A1:014C 20 32 2E 30 20 2B
70A1:0152 24
70A1:0153 00 data_7 db 0 ; xref 70A1:01A0, 0293, 02E4
70A1:0154 0000 data_8 dw 0 ; xref 70A1:019A, 01D8, 028F, 02A0
; 02E0
70A1:0156 5C data_9 db 5Ch ; xref 70A1:0287, 02D7
70A1:0157 2A 2E 2A 00 db 2Ah, 2Eh, 2Ah, 00h
70A1:015B 0106 data_10 dw 106h ; xref 70A1:0267, 027F, 0283, 02CF
; 02D3
70A1:015D 033C data_11 dw 33Ch ; xref 70A1:0192, 01C2, 0219, 0298
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 2
; 02E9
70A1:015F 0000 data_12 dw 0 ; xref 70A1:020D, 027B
70A1:0161 loc_1: ; xref 70A1:0100
70A1:0161 3C FF cmp al,0FFh
70A1:0163 75 0A jne loc_3 ; Jump if not equal
70A1:0165 8D 16 012D lea dx,cs:[12Dh] ; Load effective addr
70A1:0169 loc_2: ; xref 70A1:017B
70A1:0169 B4 09 mov ah,9
70A1:016B CD 21 int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
70A1:016D CD 20 int 20h ; Program Terminate
70A1:016F loc_3: ; xref 70A1:0163
70A1:016F B4 30 mov ah,30h ; '0'
70A1:0171 CD 21 int 21h ; DOS Services ah=function 30h
; get DOS version number ax
70A1:0173 3C 02 cmp al,2
70A1:0175 73 06 jae loc_4 ; Jump if above or =
70A1:0177 8D 16 0140 lea dx,cs:[140h] ; Load effective addr
70A1:017B EB EC jmp short loc_2 ; (0169)
70A1:017D loc_4: ; xref 70A1:0175
70A1:017D A0 005C mov al,ds:data_1e ; (70A1:005C=0)
70A1:0180 0A C0 or al,al ; Zero ?
70A1:0182 75 06 jnz loc_5 ; Jump if not zero
70A1:0184 B4 19 mov ah,19h
70A1:0186 CD 21 int 21h ; DOS Services ah=function 19h
; get default drive al (0=a:)
70A1:0188 FE C0 inc al
70A1:018A loc_5: ; xref 70A1:0182
70A1:018A 8A D0 mov dl,al
70A1:018C 04 40 add al,40h ; '@'
70A1:018E A2 0103 mov data_4,al ; (70A1:0103=0)
70A1:0191 FC cld ; Clear direction
70A1:0192 loc_6: ; xref 70A1:029D, 02EE
70A1:0192 8B 16 015D mov dx,data_11 ; (70A1:015D=33Ch)
70A1:0196 B4 1A mov ah,1Ah
70A1:0198 CD 21 int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
70A1:019A 8B 1E 0154 mov bx,data_8 ; (70A1:0154=0)
70A1:019E 03 DB add bx,bx
70A1:01A0 80 3E 0153 00 cmp data_7,0 ; (70A1:0153=0)
70A1:01A5 75 12 jne loc_7 ; Jump if not equal
70A1:01A7 C7 87 02FC 0000 mov word ptr ds:data_13e[bx],0 ; (70A1:02FC=0)
70A1:01AD .BA 0103 mov dx,offset data_4 ; (70A1:0103=0)
70A1:01B0 B9 0010 mov cx,10h
70A1:01B3 B4 4E mov ah,4Eh ; 'N'
70A1:01B5 CD 21 int 21h ; DOS Services ah=function 4Eh
; find 1st filenam match @ds:dx
70A1:01B7 EB 04 jmp short loc_8 ; (01BD)
70A1:01B9 loc_7: ; xref 70A1:01A5, 01CA, 01D2
70A1:01B9 B4 4F mov ah,4Fh ; 'O'
70A1:01BB CD 21 int 21h ; DOS Services ah=function 4Fh
; find next filename match
70A1:01BD loc_8: ; xref 70A1:01B7
70A1:01BD 73 03 jnc loc_9 ; Jump if carry=0
70A1:01BF E9 00DE jmp loc_21 ; (02A0)
70A1:01C2 loc_9: ; xref 70A1:01BD
70A1:01C2 8B 36 015D mov si,data_11 ; (70A1:015D=33Ch)
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 3
70A1:01C6 80 7C 15 10 cmp byte ptr [si+15h],10h
70A1:01CA 75 ED jne loc_7 ; Jump if not equal
70A1:01CC 83 C6 1E add si,1Eh
70A1:01CF 80 3C 2E cmp byte ptr [si],2Eh ; '.'
70A1:01D2 74 E5 je loc_7 ; Jump if equal
70A1:01D4 FF 87 02FC inc word ptr ds:data_13e[bx] ; (70A1:02FC=0)
70A1:01D8 8B 0E 0154 mov cx,data_8 ; (70A1:0154=0)
70A1:01DC E3 3A jcxz loc_15 ; Jump if cx=0
70A1:01DE 83 BF 02FC 01 cmp word ptr ds:data_13e[bx],1 ; (70A1:02FC=0)
70A1:01E3 74 21 je loc_13 ; Jump if equal
70A1:01E5 2B DB sub bx,bx
70A1:01E7 locloop_10: ; xref 70A1:0204
70A1:01E7 B0 B3 mov al,0B3h
70A1:01E9 F7 87 02FC 8000 test word ptr ds:data_13e[bx],8000h ; (70A1:02FC=0)
70A1:01EF 74 02 jz loc_11 ; Jump if zero
70A1:01F1 B0 20 mov al,20h ; ' '
70A1:01F3 loc_11: ; xref 70A1:01EF
70A1:01F3 E8 00FD call sub_1 ; (02F3)
70A1:01F6 51 push cx
70A1:01F7 B9 0010 mov cx,10h
70A1:01FA locloop_12: ; xref 70A1:01FF
70A1:01FA B0 20 mov al,20h ; ' '
70A1:01FC E8 00F4 call sub_1 ; (02F3)
70A1:01FF E2 F9 loop locloop_12 ; Loop if cx > 0
70A1:0201 59 pop cx
70A1:0202 43 inc bx
70A1:0203 43 inc bx
70A1:0204 E2 E1 loop locloop_10 ; Loop if cx > 0
70A1:0206 loc_13: ; xref 70A1:01E3
70A1:0206 83 BF 02FC 01 cmp word ptr ds:data_13e[bx],1 ; (70A1:02FC=0)
70A1:020B 75 0B jne loc_15 ; Jump if not equal
70A1:020D 8B 0E 015F mov cx,data_12 ; (70A1:015F=0)
70A1:0211 locloop_14: ; xref 70A1:0216
70A1:0211 B0 C4 mov al,0C4h
70A1:0213 E8 00DD call sub_1 ; (02F3)
70A1:0216 E2 F9 loop locloop_14 ; Loop if cx > 0
70A1:0218 loc_15: ; xref 70A1:01DC, 020B
70A1:0218 56 push si
70A1:0219 8B 36 015D mov si,data_11 ; (70A1:015D=33Ch)
70A1:021D .BF 0080 mov di,data_2e ; (70A1:0080=0)
70A1:0220 8B D7 mov dx,di
70A1:0222 B9 002B mov cx,2Bh
70A1:0225 F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
70A1:0227 5E pop si
70A1:0228 B4 1A mov ah,1Ah
70A1:022A CD 21 int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
70A1:022C loc_16: ; xref 70A1:0237
70A1:022C B4 4F mov ah,4Fh ; 'O'
70A1:022E CD 21 int 21h ; DOS Services ah=function 4Fh
; find next filename match
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 4
70A1:0230 72 14 jc loc_17 ; Jump if carry Set
70A1:0232 80 3E 0095 10 cmp byte ptr ds:data_3e,10h ; (70A1:0095=0)
70A1:0237 75 F3 jne loc_16 ; Jump if not equal
70A1:0239 B0 C2 mov al,0C2h
70A1:023B 83 BF 02FC 01 cmp word ptr ds:data_13e[bx],1 ; (70A1:02FC=0)
70A1:0240 74 15 je loc_18 ; Jump if equal
70A1:0242 B0 C3 mov al,0C3h
70A1:0244 EB 11 jmp short loc_18 ; (0257)
70A1:0246 loc_17: ; xref 70A1:0230
70A1:0246 B0 C4 mov al,0C4h
70A1:0248 83 BF 02FC 01 cmp word ptr ds:data_13e[bx],1 ; (70A1:02FC=0)
70A1:024D 74 08 je loc_18 ; Jump if equal
70A1:024F B0 C0 mov al,0C0h
70A1:0251 81 8F 02FC 8000 or word ptr ds:data_13e[bx],8000h ; (70A1:02FC=0)
70A1:0257 loc_18: ; xref 70A1:0240, 0244, 024D
70A1:0257 E8 0099 call sub_1 ; (02F3)
70A1:025A B0 C4 mov al,0C4h
70A1:025C E8 0094 call sub_1 ; (02F3)
70A1:025F B0 20 mov al,20h ; ' '
70A1:0261 E8 008F call sub_1 ; (02F3)
70A1:0264 B9 000D mov cx,0Dh
70A1:0267 8B 3E 015B mov di,data_10 ; (70A1:015B=106h)
70A1:026B locloop_19: ; xref 70A1:0274
70A1:026B AC lodsb ; String [si] to al
70A1:026C 0A C0 or al,al ; Zero ?
70A1:026E 74 06 jz loc_20 ; Jump if zero
70A1:0270 AA stosb ; Store al to es:[di]
70A1:0271 E8 007F call sub_1 ; (02F3)
70A1:0274 E2 F5 loop locloop_19 ; Loop if cx > 0
70A1:0276 loc_20: ; xref 70A1:026E
70A1:0276 B0 20 mov al,20h ; ' '
70A1:0278 E8 0078 call sub_1 ; (02F3)
70A1:027B 89 0E 015F mov data_12,cx ; (70A1:015F=0)
70A1:027F 89 3E 015B mov data_10,di ; (70A1:015B=106h)
70A1:0283 FF 06 015B inc data_10 ; (70A1:015B=106h)
70A1:0287 .BE 0156 mov si,offset data_9 ; (70A1:0156=5Ch)
70A1:028A B9 0005 mov cx,5
70A1:028D F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
70A1:028F FF 06 0154 inc data_8 ; (70A1:0154=0)
70A1:0293 C6 06 0153 00 mov data_7,0 ; (70A1:0153=0)
70A1:0298 83 06 015D 2B add data_11,2Bh ; (70A1:015D=33Ch)
70A1:029D E9 FEF2 jmp loc_6 ; (0192)
70A1:02A0 loc_21: ; xref 70A1:01BF
70A1:02A0 83 3E 0154 00 cmp data_8,0 ; (70A1:0154=0)
70A1:02A5 74 4A je loc_23 ; Jump if equal
70A1:02A7 F7 87 02FC 7FFF test word ptr ds:data_13e[bx],7FFFh ; (70A1:02FC=0)
70A1:02AD 75 0A jnz loc_22 ; Jump if not zero
70A1:02AF B0 0D mov al,0Dh
70A1:02B1 E8 003F call sub_1 ; (02F3)
70A1:02B4 B0 0A mov al,0Ah
70A1:02B6 E8 003A call sub_1 ; (02F3)
70A1:02B9 loc_22: ; xref 70A1:02AD
70A1:02B9 .BF 0103 mov di,offset data_4 ; (70A1:0103=0)
70A1:02BC B9 0046 mov cx,46h
70A1:02BF B0 00 mov al,0
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 5
70A1:02C1 F2/ AE repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
70A1:02C3 4F dec di
70A1:02C4 B9 0040 mov cx,40h
70A1:02C7 B0 5C mov al,5Ch ; '\'
70A1:02C9 FD std ; Set direction flag
70A1:02CA F2/ AE repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
70A1:02CC F2/ AE repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
70A1:02CE 47 inc di
70A1:02CF 89 3E 015B mov data_10,di ; (70A1:015B=106h)
70A1:02D3 FF 06 015B inc data_10 ; (70A1:015B=106h)
70A1:02D7 .BE 0156 mov si,offset data_9 ; (70A1:0156=5Ch)
70A1:02DA B9 0005 mov cx,5
70A1:02DD FC cld ; Clear direction
70A1:02DE F3/ A4 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
70A1:02E0 FF 0E 0154 dec data_8 ; (70A1:0154=0)
70A1:02E4 C6 06 0153 01 mov data_7,1 ; (70A1:0153=0)
70A1:02E9 83 2E 015D 2B sub data_11,2Bh ; (70A1:015D=33Ch)
70A1:02EE E9 FEA1 jmp loc_6 ; (0192)
70A1:02F1 loc_23: ; xref 70A1:02A5
70A1:02F1 CD 20 int 20h ; Program Terminate
vtree endp
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;
; Called from: 70A1:01F3, 01FC, 0213, 0257, 025C, 0261, 0271
; 0278, 02B1, 02B6
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
sub_1 proc near
70A1:02F3 52 push dx
70A1:02F4 8A D0 mov dl,al
70A1:02F6 B4 02 mov ah,2
70A1:02F8 CD 21 int 21h ; DOS Services ah=function 02h
; display char dl
70A1:02FA 5A pop dx
70A1:02FB C3 retn
sub_1 endp
seg_a ends
end start
vtree.lst (C) Copyright Charles Petzold, 1 Sourcer Listing v3.13 6-Jan-91 2:36 pm Page 6
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ CROSS REFERENCE - KEY ENTRY POINTS ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
seg:off type label
---- ---- ---- ---------------
70A1:0100 far start
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Interrupt Usage Synopsis ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Interrupt 20h : Program Terminate
Interrupt 21h : display char dl
Interrupt 21h : display char string at ds:dx
Interrupt 21h : get default drive al (0=a:)
Interrupt 21h : set DTA to ds:dx
Interrupt 21h : get DOS version number ax
Interrupt 21h : find 1st filenam match @ds:dx
Interrupt 21h : find next filename match
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ I/O Port Usage Synopsis ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
No I/O ports used.