;
;       FuckFile - обнуляет размер файлов
;       Автор - Александр Белоусов (Mirex)
IDEAL

segment DSEG
Parametr        db 128 dup (?)
FileName        db 13  dup (?)
MsgParametr     db "Использование : FuckFile маска_файла",13,10,"$"
ends    DSEG

segment CSEG
ASSUME cs:CSEG, ds:DSEG
Start:
        mov     ax,DSEG
        mov     ds,ax
        ; получить PSP
        mov     ah,62h
        int     21h
        mov     es,bx
        ; длинна праметра - CL
        mov     cl,[es:80h]
        or      cl,cl
        jz      InvalidParametr         ; не введён параметр
        xor     ch,ch
        ; скопировать параметр
        mov     si,81h+1
        mov     di,offset Parametr
        dec     cx
NextChar:
        mov     al,[es:si]
        mov     [di],al
        inc     di
        inc     si
        loop    NextChar
        xor     al,al
        mov     [di],al
        ; FindFirst
        mov     ah,4Eh
        mov     cx,027h   ; аттрибут
        mov     dx,offset Parametr
        int     21h
        jc      NotFound
        call    CopyName
        mov     dx,offset FileName
        call    Truncate
NextFile:
        ; FindNext
        mov     ah,4Fh
        int     21h
        jc      NotFound
        call    CopyName
        mov     dx,offset FileName
        call    Truncate
        jmp     near NextFile
NotFound:
        jmp     near TheEnd
InvalidParametr:
        mov     ah,9
        mov     dx,offset MSGParametr
        int     21h
TheEnd:
        ; выход
        mov     ax,4C00h
        int     21h

;===========================
; скопировать имя файла
;===========================
PROC CopyName
        mov     si,80h+1Eh  ; имя найденного файла
        mov     di,offset FileName
        mov     cx,13
@@NextNameChar:
        mov     al,[es:si]
        mov     [di],al
        inc     di
        inc     si
        loop    @@NextNameChar
        ret
ENDP CopyName

;===========================
; DS:DX - имя ASCIIZ
;===========================
PROC Truncate
        mov     ah,3Ch
        mov     cx,027h
        int     21h
        ; закрыть
        mov     bx,ax
        mov     ah,3Eh
        int     21h
        ret
ENDP Truncate

ends    CSEG

END     Start