Vistas de página en total

jueves, 19 de septiembre de 2013

COMANDO DEL SISTEMA "ATRIB"

   Este es otro ejemplo de construcción de un comando para DOS. En este caso es un Atrib. Muestra o modifica los atributos de uno o más ficheros.
   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.