Este es un ejemplo de uso de los comandos de búsqueda de ficheros y del uso de la DTA. Aquí usamos la gestión de defectos de EROR.MAC
ATRIB.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/>.
include dos.mac
include error.mac
include argum.mac
include io.mac
include stdio.mac
include string.mac
include main.mac
.model compact,pascal
.stack 100
.data
todo db "*.*",0
espac db ".........",0
retor db 10,13,0
mens1 db "(c) J.A. MONEO Fdez",10,13
db 'formato: ATRIB [unidad:][path]<nombre de fichero> <parametros>',10,13
DB 'O..oculto,V..visible,L..solo lectura,E..lectura/escritura,',10,13
db 'S..sistema,N..normal',10,13,0
PATH DB 40 DUP (0)
completo db 40 dup (0)
dta _dta ?
.code
oculto proc far
main
; este borrado de pantalla no sería necesario en dos
;pero al usar al ventana de windows, por alguna razón no se refresca la pantalla
; si no lo usamos antes.
clrscr
xor cx,cx
setdta dta
argc cl
cmp cl, 2 ;dos parámetros , se indica atributo
jne sig
jmp oculto0
sig:
cmp cl,1 ;un parámetro, se pide listar atributos
je busca1
Faltan:
puts mens1 ; faltan parámetros
exit 1
busca1:
argv 1,si
findfirst todo,_TODOS
jc error
lis2:
call p_atr
findnext
jnc lis2
puts retor
exit 0
oculto0:
argv 1,si
getpath path,[si]
findfirst dta,_TODOS
jnc bueno
error:
errext
puts retor
exit 1
bueno:
;analisis del parámetro
argv 2,bx
strupr [bx]
oculto2:
mov dl,dta._attr
cmp byte ptr [bx],'L'
jne oculto3
or dl,_O_READ
JMP fin_oculto
OCULTO3:
CMP byte ptr [BX],'E'
JNE OCULTO4
MOV Al,_O_READ
XOR Al,0FFH
AND Dl,Al
JMP fin_oculto
oculto4:
cmp byte ptr [bx],'O'
jne oculto5
mov al,_hide
or dl,al
JMP fin_oculto
oculto5:
cmp byte ptr [bx], 'V'
jne oculto6
mov al,_hide
xor al,0ffh
and dl,al
JMP fin_oculto
oculto6:
cmp byte ptr [bx],'S'
jne oculto7
mov al,_SISTEM
or dl,al
JMP fin_oculto
oculto7:
cmp byte ptr [bx], 'N'
jne FIN_OCULTO
mov al,_SISTEM
xor al,0ffh
and dl,al
fin_oculto:
inc bx
cmp byte ptr [bx], 0
je fin_oculto1
jmp oculto2
fin_oculto1:
strcat completo,path,dta._nombre
setattr completo,dx
jnc seguir
cmp ax,5
je seguir
jmp error
seguir:
findnext
jc salir
jmp oculto2
salir:
ret
oculto endp
p_atr proc near
;imprime los atributos del fichero
puts retor
puts dta._nombre
puts espac
test dta._attr,_o_read
jz ot1
putchar 'L'
ot1:
test dta._attr,_hide
jz ot2
putchar 'O'
ot2:
test dta._attr,_sistem
jz ot3
putchar 'S'
ot3:
test dta._attr,_vol
jz ot4
putchar 'I'
ot4:
test dta._attr,_Dir
jz ot5
putchar 'D'
ot5:
test dta._attr,_archivo
jz ot6
putchar 'A'
ot6:
ret
p_atr endp
end oculto
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.