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.