Vistas de página en total

sábado, 24 de agosto de 2013

LIBRERIA WINDOW (1/2)

     Voy a ir colocando las funciones de la librería de window.
     Tened en cuenta que se trata de ventanas en modo texto, no de ventanas gráficas. Se manejan como el resto de mis funciones de gestión de pantalla trabajando directamente en memoria de pantalla.

     Estas son las funciones más usadas de la librería.
      _cls_window se apoya en la interrupción 10h para realizar un scroll y borrar la pantalla
      _get_put_window nos permitirá tomar y reponer de la memoria de pantalla el contenido pudiendo con ellas hacer popup de las pantallas y si lo deseamos moverlas y situarlas por el área total de la pantalla.



WINDOW1.MAC 
; 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/>.


.model compact,pascal

.code
        public _get_put_window
        public _cls_window
 
;toma el color en dentro de lineas
proc _cls_window uses bx cx dx,FsCiz,FinCde,lineas
        mov ah,6
        cmp al,1  ; up =1 dow=2
        je up
        mov ah,7 
up:       
        mov bx,lineas     
        mov al,bl
        mov cx,FsCiz
        mov dx,FinCde
        int 10h
        ret
_cls_window endp

;esta función realizar tres opciones, según se indique en opcion

; 0 salva pantalla, 1 recoloca pantalla, 2 cambia color
proc _get_put_window  uses es di bx dx cx, FsCiz, FinCde, buffer,opcion
        mov ax,40h
        mov es,ax
        mov dl,es:[4ah]
        mov al,byte ptr FsCiz+1    ;coordenada y inicial
        xor dh,dh
        mul dl
        xor dx,dx
        mov dl,byte ptr FsCiz
        add ax,dx
        shl ax,1
        mov di,ax
        mov al,es:[49h]
        cmp al,7
        jb sb800
        ja sa000
        mov ax,0b000h
        jmp listo

sb800:
        mov ax,0b800h
        jmp listo
sa000:
        mov ax,0a000h
 listo:
        mov es,ax
        mov bx,buffer

        mov cx,FinCde
        sub cx,FsCiz
        inc ch
        inc cl
otralinea:
        push di
        push cx
copia:
        cmp opcion,2   ; opción color
        jne _get_put
        mov es:[di+1],bl
        jmp fin
_get_put:
        cmp opcion,0    ;opción get
        jnz put
        mov ax,es:[di]
        mov [bx],ax
        jmp fin_if

put:    mov ax,[bx]       ;opción put
        mov es:[di],ax

fin_if:
        inc bx
        inc bx
fin:
        inc di
        inc di
        dec cl
        jnz copia
        push es
        mov ax,40h
        mov es,ax
        mov al,es:[4ah]
        pop es
        cbw
        shl ax,1
        pop cx
        pop di
        add di,ax
        dec ch
        jnz otralinea
        ret     
_get_put_window endp

end


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.