; datsrch.¹ºº D¹º¹¹¹ F¹¹¹ D¹º¹ S¹¹º¹¹ ººº.910623
; Cºººº¹¹¹º (¹) 1991 N¹¹º Sººº¹¹º Sº¹ºº¹º¹ C¹¹¹¹ºº, A¹¹¹ºº¹
; Aºº¹¹¹¹º ¹ºº L¹¹º¹ºº Pºº¹¹¹ºº¹
; -------------------------------------------------------------
; º¹ºº ¹¹ººº¹¹ /¹º ¹ºº¹¹¹¹¹
; º¹¹¹ /¹ ºº¹ººº2 -+¹¹ººº¹¹ ¹¹¹
public _datsrch
MAXLEN equ 0FA00h ; º¹º¹¹º¹ ¹¹¹¹ ¹/º ¹¹º¹º¹
funcnum equ word ptr [bp + 00Ah] ; ¹¹ººº¹º º¹º¹¹¹º¹ºº
dat_len equ word ptr [bp + 00Ch]
buf_seg equ word ptr [bp + 00Eh]
buf_off equ word ptr [bp + 010h]
key_off equ word ptr [bp + 012h]
fil_off equ word ptr [bp + 014h]
dat_seg equ word ptr [bp + 016h]
; ¹¹ººº¹º() D¹º¹¹¹ º¹¹¹ S¹¹º¹¹
; D¹ººº¹º º¹¹º¹¹¹º ¹¹º¹¹¹ ¹º¹¹¹º ¹ºº¹º ¹ºº ºº¹¹¹¹¹¹ º¹ºº;
; ººº¹º¹¹º¹ ¹º¹ ¹ºº¹º¹¹º¹ º¹ºº¹º¹ºº¹º¹ººº ¹º¹ º¹¹º¹¹¹¹.
; I¹ ¹ººº¹, º¹¹ º¹¹ºº¹ ºº¹¹¹º ¹º º¹ºººº¹¹ ºº ¹¹¹¹¹¹.
; D¹ººº¹º ¹º ¹ºº ºº¹ º¹º¹ Bºº¹¹º¹'º Tºº¹º C º¹ºº¹ºº 2.0.
; D¹ººº¹º ººº¹º º¹º¹ ¹¹¹¹º º¹º¹ ºº ºº 65,534 º¹¹ºº¹º;
; º¹ºººº 65,535 (0FFFF¹) ¹º º¹º¹ºº¹¹ ¹ºº ¹ºººº.
; Vº¹ººººº¹ U¹ºº º¹ T¹¹º¹ C
; -------------------------------------------------------------
; UINT _DS ¹º ºº¹º ¹ºººº¹¹
; ººº¹ * º¹ºº¹_ºººº ºººº ¹ººº ¹¹¹º¹º ¹¹¹
; UINT ººº_¹ºº ¹ºº¹º¹ ¹º º¹ºº¹_ºººº
; ººº¹ * ¹ºº¹ºº_ºº¹ ¹ºº¹ºº ºº¹ ¹¹¹º¹º ¹¹¹
; UINT ºº¹_¹ºº ¹ºº¹º¹ ¹º ¹ºº¹ºº_ºº¹
; ¹¹ºº ºº¹ * º¹ºº¹_º¹ºº ºººº º¹ººº¹
; UINT º¹º_¹ºº ¹ºº¹º¹ ¹º º¹ºº¹_º¹ºº
; UINT º¹º_¹ºº ¹ºººº¹¹ ¹º º¹ºº¹_º¹ºº
; UINT ºº¹_ºº¹ ¹ººº ¹ºº¹¹º ºº¹º¹º
; UINT º¹¹º¹¹º º¹¹º¹º¹¹ ¹¹ººº¹ 0-3:
; 0 = ¹¹º¹ ºººº
; 1 = ¹ººº/¹ººº *
; 2 = ºº¹º ¹º¹¹
; 3 = ºº¹¹º ºººº
; UINT º¹ºº¹¹ ºº¹º ¹ºº¹¹ ¹º¹¹¹¹ºº:
; 0000 = º¹0: ¹¹º¹ ¹º
; FFFF = º¹0: ¹¹º¹ º¹¹¹¹
; FFFF = º¹2: º¹º
; * º¹ 1 ¹ººº/¹ººº º¹ ¹º¹º¹¹ººº º¹¹¹ºº¹ººººº¹
; º¹ º¹ 0 º¹º ¹º¹º¹ºººººº¹ º¹ º¹ 2;
; º¹ º¹ ¹º¹º¹ ºººººº ºº¹ºº¹º¹.
; Sºº¹ºº Cººº º¹¹º T¹¹º¹ C
; -------------------------------------------------------------
; ººº¹ *º¹ºº¹_ºººº = "º:\\¹ºº¹ºº\\¹ºº¹ºº.ºº¹";
; UINT ººº_¹ºº = (UINT)º¹ºº¹_ºººº;
; ¹¹ºº ºº¹ *º¹ºº¹_º¹ºº = ºº¹ºººº¹º(0¹FA10);
; UINT º¹º_¹ºº = FP_SEG(º¹ºº¹_º¹ºº);
; UINT º¹º_¹ºº = FP_OFF(º¹ºº¹_º¹ºº);
; UINT ºº¹_ºº¹ = FILSIZ;
; UINT º¹¹º¹¹º = 0¹;
; UINT º¹ºº¹¹ = 0¹;
; UINT ºº¹¹ºº = 0¹;
; ...
; º¹¹º¹¹º = 0¹; /* ¹¹º¹ ºººº */
; º¹ºº¹¹ = ºº¹¹¹ºº(º¹¹º¹¹º, ºº¹_ºº¹, º¹º_¹ºº, º¹º_¹ºº, ºº¹_¹ºº,
; ººº_¹ºº, _DS);
; ...
; (ººº¹ *)¹ºº¹ºº_ºº¹ = "SAMPLE";
; ºº¹_¹ºº = (UINT)¹ºº¹ºº_ºº¹;
; º¹ºº¹¹ = 0¹;
; º¹¹º¹¹º = 2¹; /* ºº¹º ¹º¹¹ */
; º¹ºº¹¹ = ºº¹¹¹ºº(º¹¹º¹¹º, ºº¹_ºº¹, º¹º_¹ºº, º¹º_¹ºº, ºº¹_¹ºº,
; ººº_¹ºº, _DS);
; ...
; º¹¹º¹¹º = 3¹; /* ºº¹¹º ºººº */
; º¹ºº¹¹ = ºº¹¹¹ºº(º¹¹º¹¹º, ºº¹_ºº¹, º¹º_¹ºº, º¹º_¹ºº, ºº¹_¹ºº,
; ººº_¹ºº, _DS);
; Pº¹ººº¹º¹ Aºº¹º¹¹º¹º Rººº¹º¹º ¹¹ ¹ºº S¹ººº (BP)
; -------------------------------------------------------------
; +16º ¹ºº¹º ¹º TC ºº¹º ¹ºººº¹¹ ............................ _DS
; +14º ¹ºº¹º ¹º ºººº¹ººº ¹ºº¹º¹ ............................ ººº_¹ºº
; +12º ¹ºº¹º ¹º ¹ºº¹ºº ºº¹ ¹ºº¹º¹ .......................... ºº¹_¹ºº
; +10º ¹ºº¹º ¹º º¹ººº¹ ¹ºº¹º¹ .............................. º¹º_¹ºº
; +0Eº ¹ºº¹º ¹º º¹ººº¹ ¹ºººº¹¹ ............................. º¹º_¹ºº
; +0Cº ¹ºº¹º ¹º ¹ººº ¹ºº¹¹º ºº¹º¹º ......................... ºº¹_ºº¹
; +0Aº ¹ºº¹º ¹º ºº¹¹¹ºº º¹¹º¹º¹¹ (0-3) ..................... º¹¹º¹¹º
; +08º T¹¹º¹ C ¹º¹¹¹¹ ººº¹º¹¹ -
; +06º ºº¹¹¹ºº ¹º¹ºº º¹ -
; +04º ºº¹¹¹ºº ¹º¹ºº º¹ -
; +02º ºº¹¹¹ºº ¹º¹ºº ¹º -
; BP+00º ºº¹¹¹ºº ¹º¹ºº ºº -
_TEXT segment byte public 'CODE'
assume cs:_TEXT
_datsrch proc near
push bp ; ¹º¹º TC ¹ººº¹¹º¹¹
push ds
push si
push di
mov bp, sp ; ºººº º¹ ¹¹º¹¹ ¹¹ ¹ºº ¹¹ººº
cld ; ºººº¹ ¹ºº ºº¹ºº¹º¹¹ ºººº >
; Dº¹º¹ºº¹º ¹º¹¹º¹¹ºº º¹¹º¹º¹¹
; º¹º º¹ ¹¹ º¹
mov ax, funcnum ; º¹¹º¹º¹¹ ¹¹ººº¹ º¹¹¹ º¹
cmp al, 000h ; 0 ¹¹º¹ ºººº
je Fn00
cmp al, 002h ; 2 ¹¹º¹ º¹ºº
jne Jmp00 ; ¹ººº¹ºº¹
jmp Fn02
Jmp00:
cmp al, 003h ; 3 ¹¹ºº¹ ¹¹¹¹
jnz Jmp01 ; ¹ººº¹ºº¹
jmp Fn03
Jmp01:
jmp Err2 ; ¹ºº¹¹¹¹ ¹ºº¹º¹ºº ºº¹¹¹º
; Oº¹º º¹¹ ¹¹¹¹ ¹ºº
; º¹¹¹ ºº¹º ¹¹¹¹ºº
Fn00:
mov dx, fil_off ; ¹¹¹¹º¹¹¹ º¹¹º¹º ¹ººº ¹º
mov ax, dat_seg ; ¹¹¹¹º¹¹¹ º¹¹¹¹ºº ¹ººº ¹º
mov ds, ax ; ¹º¹ ¹ººº ¹º
; ¹º:¹º ºº¹ººº ºº ¹º¹¹¹º ¹¹¹¹º¹¹¹
mov al, 000h ; ¹¹¹¹ ¹¹¹¹ºº ¹º º¹¹¹ ºº¹º
mov ah, 03Dh ; ºº¹º º¹¹ ¹º¹¹º ¹¹º¹ ¹¹¹¹
int 021h ; º¹¹ ¹ºº ¹ºº 21 ¹º 3D
jnc Jmp02 ; ¹ººº¹ºº¹
jmp Err2 ; ¹º¹º ¹¹ ºº¹º ¹ºººº
Jmp02:
mov word ptr cs:FHAN, ax ; º¹º¹ ¹¹¹¹ ¹¹º¹¹¹
; Cº¹ººº¹ º¹¹ ¹¹¹¹'º
; ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹
xor dx, dx ; ¹º = º¹ºº
mov ax, MAXLEN ; ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹ ¹º 64000 ¹ºº¹º
mov bx, dat_len ; º¹¹¹ º¹¹ºº¹ ¹¹º¹º¹ ¹ººº ¹º
div bx ; ¹º = ºººº¹¹ºº ¹ºº¹ ¹¹º¹ººº
; ¹º = º¹¹¹¹º¹¹º ¹ºº¹ ¹¹º¹º¹ºº
xor dx, dx ; ¹º = º¹ºº
mov word ptr cs:RCNT, dx ; ¹º¹º ¹¹¹¹ ¹/º ¹ºººº
mul bx ; ¹º = ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹
mov word ptr cs:MXIO, ax ; º¹º¹ ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹
; Pºº¹º¹ºº º¹¹ ¹¹¹¹ ºº¹ºº¹º
; ºº º¹¹ ºº¹ºº º¹ º¹¹
; ¹ººº¹ºº º¹¹ºº¹
Fn01:
mov ax, word ptr cs:[RCNT] ; ¹¹¹¹ ¹/º ¹ºººº ¹ººº ¹º
mov cx, word ptr cs:[MXIO] ; ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹ ¹ººº ¹º
mul cx ; ¹º = ¹ºº ¹/º ¹ºººº º ¹/º ¹¹º¹º¹
; ¹º = ¹ºº ¹/º ¹ºººº º ¹/º ¹¹º¹º¹
mov bx, word ptr cs:[FHAN] ; ¹¹¹¹ ¹¹º¹¹¹ ¹ººº ¹º
xchg cx, dx ; ¹º = ¹ºº º¹ ¹¹¹¹ ºº¹ºº¹º
xchg dx, ax ; ¹º = ¹ºº º¹ ¹¹¹¹ ºº¹ºº¹º
mov al, 000h ; ¹¹ºº¹ºº¹ º¹¹º¹º ¹ºº¹ ¹º¹
mov ah, 042h ; º¹¹¹ ¹¹¹¹ ºº¹ºº¹º
int 021h ; º¹¹ ¹ºº ¹ºº 21 ¹º 42
jnc Jmp03 ; ¹ººº¹ºº¹
jmp Err1 ; ¹¹ºº¹ ¹º¹ ¹º¹º ¹¹ º¹¹¹ ¹ºººº
; R¹¹¹ ¹ º¹¹ºº¹ ¹ºº¹ º¹¹ ¹¹¹¹
; ¹ººº º¹¹ ¹º¹¹¹º
Jmp03:
mov bx, word ptr cs:[FHAN] ; ¹¹¹¹ ¹¹º¹¹¹ ¹ººº ¹º
mov cx, word ptr cs:[MXIO] ; ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹ ¹ººº ¹º
mov dx, buf_off ; ¹º¹¹¹º º¹¹¹¹ºº ¹ººº ¹º
mov ax, buf_seg ; ¹º¹¹¹º º¹¹º¹º ¹ººº ¹º
mov ds, ax ; ¹º¹ ¹ººº ¹º
; ¹º:¹º ºº¹ººº ºº ¹º¹¹¹º
mov ah, 03Fh ; º¹¹¹ º¹¹ ¹¹¹¹
int 021h ; º¹¹ ¹ºº ¹ºº 21 ¹º 3F
jnc Jmp04 ; ¹ººº¹ºº¹
jmp Err1 ; ¹¹ºº¹ ¹º¹ ¹º¹º ¹¹ º¹¹¹ ¹ºººº
Jmp04:
cmp ax, 00000h ; º¹ºº ¹ºº º¹ºº ¹ºº¹º º¹¹¹
jnz Jmp05 ; ¹ººº¹ºº¹
jmp Err1 ; ¹¹ºº¹ ¹º¹º ¹¹ º¹ºº ¹ºº¹º º¹¹¹
Jmp05:
mov word ptr cs:BREM, ax ; º¹º¹ ºº¹¹¹º º¹ ¹ºº¹º º¹¹¹¹º¹º¹
mov ax, buf_off ; ¹º¹¹¹º º¹¹º¹º ¹ººº ¹º
mov word ptr cs:BOFF, ax ; º¹º¹ ¹º¹¹¹º º¹¹º¹º
mov ax, funcnum ; ¹ºº¹º¹ºº ºº¹¹¹º ¹ººº ¹º
cmp al, 000h ; ¹¹ ººº ¹ºº¹º¹ºº 0 ºº¹º ¹¹¹¹
ja Fn02 ; º¹¹º ¹ººº¹ºº¹
xor ax, ax ; º¹ºº ¹º ¹ºº º¹ºººº ºº TC
jmp Exit ; ¹º¹º ºº ¹º¹º
; S¹¹º¹¹ ¹º¹º¹¹¹¹º¹º¹ºº
Fn02:
mov di, word ptr cs:[BOFF] ; ¹º¹¹¹º º¹¹º¹º ¹ººº ¹¹
mov ax, buf_seg ; ¹º¹¹¹º º¹¹¹¹ºº ¹ººº ¹º
mov es, ax ; ¹º¹ ¹ººº ¹º
; ¹º:¹¹ ºº¹ººº ºº ¹º¹¹¹º
mov ax, dat_seg ; º¹ºº º¹¹¹¹ºº ¹ººº ¹º
mov ds, ax ; ¹º¹ ¹ººº ¹º
; ¹º:º¹ ºº¹ººº ºº º¹ºº
mov cx, word ptr cs:[BREM] ; ºº¹¹¹º º¹ ¹ºº¹º º¹¹¹¹º¹º¹ ¹ººº ¹º
; Dº º¹¹ º¹¹º¹¹ ¹ºº ººº¹º¹¹º¹
; ¹º¹ ¹ºº¹º¹¹º¹ ¹¹º¹ ¹¹º¹¹
Fn02a:
mov si, key_off ; º¹ºº º¹¹º¹º ¹ººº º¹
Fn02b:
mov al, byte ptr ds:[si] ; º¹ºº ¹ºº¹ ¹ººº ¹¹
cmp al, 000h ; ¹º¹º¹º¹ ¹¹ = º¹ºº (¹º¹ º¹ º¹ºº)
jz Fn02e ; ¹º¹ ¹º¹º ¹¹ º¹ºº
cmp al, byte ptr es:[di] ; ¹º¹º¹º¹ ºº ¹º¹¹¹º ¹ºº¹
je Fn02c ; ¹º¹ ¹ººº¹ºº¹ ¹¹ ¹ºº¹¹
or al, ' ' ; ¹ººº¹ºº º¹ºº ¹ºº¹ ºº ¹ºº¹º¹¹º¹
cmp al, byte ptr es:[di] ; ¹º¹º¹º¹ ºº ¹º¹¹¹º ¹ºº¹
je Fn02c ; ¹º¹ ¹ººº¹ºº¹ ¹¹ ¹ºº¹¹
inc di ; º¹ºº ¹º¹¹¹º ¹ºº¹
dec cx ; ¹¹¹º¹¹º¹ ¹ºº¹º º¹¹¹¹º¹º¹
jz Fn02d ; ¹º¹ ¹º¹º ¹¹ º¹ºº
jmp short Fn02a ; ¹ººº¹ºº¹
Fn02c:
inc si ; º¹ºº º¹ºº ¹ºº¹
inc di ; º¹ºº ¹º¹¹¹º ¹ºº¹
dec cx ; ¹¹¹º¹¹º¹ ¹ºº¹º º¹¹¹¹º¹º¹
jnz Fn02b ; ¹º¹ ¹ººº¹ºº¹ ¹¹ ººº º¹ºº
; T¹ºº ¹º ººº ¹ººº¹ ¹º º¹¹º¹¹;
; ººº º¹ºº º¹¹ºº¹
Fn02d:
mov ax, word ptr cs:[RCNT] ; ¹¹¹¹ ¹/º ¹ºººº ¹ººº ¹º
inc ax ; º¹ºº ºº¹
mov word ptr cs:RCNT, ax ; º¹º¹ ¹¹¹¹ ¹/º ¹ºººº
jmp Fn01 ; ¹º¹º ºº Fº01 (º¹ºº º¹¹ºº¹)
; T¹ºº ¹º ¹ººº¹ ¹º º¹¹º¹¹;
; º¹ºººº º¹¹ º¹¹ºº
Fn02e:
mov ax, di ; ¹º¹¹¹º º¹¹º¹º ¹ººº ¹º
sub ax, buf_off ; ¹º¹¹¹º º¹¹º¹º ¹ººº¹¹º¹ºº
mov bx, dat_len ; º¹¹¹ º¹¹ºº¹ ¹¹º¹º¹ ¹ººº ¹º
xor dx, dx ; ¹º = º¹ºº (¹ºº ¹¹º)
div bx ; ¹º¹ººº¹ ¹ º¹º ¹º¹¹¹º º¹¹º¹º
inc ax ; ºº ºº¹ºº ¹º º¹¹ ¹º¹
mul bx ; º¹ º¹¹ ¹ººº¹ºº º¹¹ºº¹
dec ax ; ¹ºº º¹¹ º¹ºº º¹¹º¹¹
add ax, buf_off ; ¹º¹¹¹º º¹¹º¹º ¹ººº¹¹º¹ºº
mov word ptr cs:BOFF, ax ; º¹º¹ º¹¹ º¹º ¹º¹¹¹º º¹¹º¹º
sub ax, di ; ¹º¹ ¹¹¹ººº º¹¹ ºº¹¹¹º º¹
sub cx, ax ; ¹ºº¹º º¹¹¹¹º¹º¹
mov word ptr cs:BREM, cx ; º¹º¹ ºº¹¹¹º º¹ ¹ºº¹º º¹¹¹¹º¹º¹
mov ax, word ptr cs:[RCNT] ; ¹º = ¹¹¹¹ ¹/º ¹ºººº
mov bx, word ptr cs:[MXIO] ; ¹º = ¹¹¹¹ ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹
mul bx ; ¹º = ¹ºº ¹¹º¹¹¹ ¹¹¹¹ º¹¹º¹º
; ¹º = ¹ºº ¹¹º¹¹¹ ¹¹¹¹ º¹¹º¹º
add ax, di ; ¹º = ¹º¹¹¹º º¹¹º¹º
jnc Jmp06 ; ¹º¹º ¹¹ ºº ¹¹ººº (¹º ºº¹º¹¹ºº)
inc dx ; ¹¹¹ ¹¹ººº ¹ººº ¹º
Jmp06:
sub ax, buf_off ; ¹º¹¹¹º º¹¹º¹º ¹ººº¹¹º¹ºº
mov bx, dat_len ; º¹¹¹ º¹¹ºº¹ ¹¹º¹º¹ ¹ººº ¹º
div bx ; ¹º = ºººº¹¹ºº ¹ºº¹ ¹¹º¹ººº
inc ax ; ¹º = º¹¹ºº ¹ºº º¹ºººº ºº TC
jmp short Exit ; ¹º¹º ºº Eº¹º
; C¹ºº¹ º¹¹ ¹¹¹¹ ¹º¹
; º¹ºººº ºº TC
Fn03:
mov bx, word ptr cs:[FHAN] ; ¹¹¹¹ ¹¹º¹¹¹ ¹ººº ¹º
mov ah, 03Eh ; ¹¹ºº¹ º¹¹ ¹¹¹¹
int 021h ; º¹¹ ¹ºº ¹ºº 21 ¹º 3E
xor ax, ax ; º¹ºº ¹º ¹ºº º¹ºººº ºº TC
jmp short Exit ; ¹º¹º ºº ¹º¹º
; S¹¹¹/º¹¹¹ ¹ºººº ºº
; º¹ºº ¹ºº¹º º¹¹¹ (¹º¹);
; ¹¹ºº¹ º¹¹ ¹¹¹¹
Err1:
mov bx, word ptr cs:[FHAN] ; ¹¹¹¹ ¹¹º¹¹¹ ¹ººº ¹º
mov ah, 03Eh ; ¹¹ºº¹ º¹¹ ¹¹¹¹
int 021h ; º¹¹ ¹ºº ¹ºº 21 ¹º 3E
; Oº¹º ¹ºººº; º¹ºººº ¹ºººº
; ¹º¹¹ 0ºFFFF ºº TC
Err2:
mov ax, 0FFFFh ; FFFF = ¹º0: ºº¹º ¹ºººº
; ¹º2: ¹º¹ º¹¹¹¹¹¹
; R¹ºººº ºº TC
Exit:
pop di ; º¹ºººº¹ TC º¹¹¹ºº¹ºº
pop si
pop ds
pop bp
ret ; º¹¹º º¹ºººº ºº TC
_datsrch endp
; Iºº¹ºº¹¹ ºººº¹¹¹
FHAN dw 00000h ; ¹¹¹¹ ¹¹º¹¹¹
BOFF dw 00000h ; ¹º¹¹¹º º¹¹º¹º
BREM dw 00000h ; ºº¹¹¹º º¹ ¹ºº¹º º¹¹¹¹º¹º¹
RCNT dw 00000h ; ¹¹¹¹ ¹/º ¹ºººº
MXIO dw 00000h ; ¹¹¹¹ ¹¹º¹¹º¹ ¹/º ¹¹º¹º¹
_TEXT ends
end
|