Daniel, esto fue mucho mas de lo que
esperaba, la verdad te agradezco mucho el tiempo que le pusiste a este mail que
seguro no fue poco. En cuanto empiece a trabajar y tenga algo
te iré contando. Gracias otra vez Dani. Sebastian De: Estaba pensando que no se exactamente por donde pasan tus dudas,
entonces tal vez sea mejor decirte que necesitas implementar. Conceptos generales: Por un la lado necesitas un area en donde mostrar la salida por consola
tal lo representaría la terminal. En tu caso te recomiendo escribir un UserControl y sobre escribir el
metodo paint, o mejor capturar el onpaint. Basicamente esa area debería tener 80 caracteres de ancho. ( esto
dependiendo delos modos de emulacion que quieras soportar ) Debería tener 25 lineas de alto. Esta area, como ves las medidas te las doy en caracteres, será escrita
en función del stream de entrada. Normalmente en una termnial las secuencias a ser representadas tienen
dos posibles origenes. 1 El canal de ingreso de datos a la terminal. Lo que esta mandando el host. 2 El teclado de la misma terminal. Normalmente se da solo el caso 1. Si la terminal esta configurada con eco local, debes mandar todo lo que
se tipea en el teclado a la salida y ademas a la entrada para que sea
representada por la terminal. Que cosas debes conocer sobre las terminales? 1 - Tienen un cursor que representa la posición sobre la que se esta
parado en pantalla. Este no es un detalle menor, casi todas las
operaciones que se jecutan afectan la posición del cursor. 2 - Podes imaginar el areas de salida como un archivo secuencial. Todo
lo que se envía, cada caracter se pone en la posición siguiente a la que esta
parado el cursor y como contrapartida, representar un nuevo caracter altera la
posicion del cursor. 3 - Conocer las reglas que regulan el cursor, su posicion: La posicion esta dada por dos coordenadas, la
esquina superior izq. es la ( 1,1 ) y la inferior derecha es la ( 80,24
) u ( 80,25 ). ( dependiendo si trabajo en 24 o 25 lineas. Si se envia un caracter siempre actualiza la
posicion del cursor. hay algunos caracteres, o secuencias de caracteres que
afectan la posicion de alguna forma especifica. ( Por ejemplo ir a la posicion
(1, 1) o el clear que ademas de borrar la pantalla, pone el cursor en la
posicion (1,1). Si estoy en la columna 80 el proximo caracter se
ubicara en la columna 1 de la lenea siguiente a la actual. Si la linea en la que estaba es la ultima linea eso
produce un desplazamiento de toda el area una línea para arriba, ( con lo cual
se pierde la primer linea) y se pone en blanoc la ultima lines, luego se
escribe sobre ella. 4 - Caracteres especiales Como complemento de lo anterior hay que tener en cuenta
que hay algunos caracteres que no tienen una representación, producen un
efecto. Ejemplo: Tab -> chr(9) -----> Avanza el cursor al proximo stop de
tabulacion. Bell -> chr(7) ----> Pitido, el famoso Bell. LF -> chr(10) ---> Avance de linea CR -> chr(13) ---> Retorno de carro Ej.: CR + LF , Avanza una linea y se
posiciona en la columna 1 Como esto hay unos cuantos mas. 5 - Secuencias de control Además de caracteres especiales las terminales
reconocen cadenas o secuencias que le indican la activación de alguna función o
la ejecución de una acción determinada. Ej: ESC Y" "SPACE" "o" Mover el cursor a la posicion del ultimo caracter de
la primer línea. Las secuencias de control no solo manejan la
posicion del cusrsor, dependiendo el tipo de emulación, osea, que terminal
emulo hay secuencias para manejar colores de salida, atributos tipo blinking,
activar salida por impresora, etc, etc. Porque te hago toda esta introducción?, para
explicarte que deberias implementar para resolver tu cuestion. Tendría una serie de arctefactos. A - User control de salida. Representaria el area de salida y es el que te
contaba antes. B - Una clase controladora que implemente la logica de
presentación independiente del tipo de emulación. Esto es algo asi como decir, mi emulador
soportara, tales operaciones de cursor, soportara tales atributos de salida, (
Color, blinking, redirección a impresora, etc) Soportara tales caracteres de control,
independiente del valor, por ejemplo TAB, BEL, etc, etc. Por otra parte tenes que enviar secuencias a un
host, un host que espera tener conectada una Terminal XXX sabe que una
secuencia determinada enviada por la terminal corresponde a una tecla
determinada. Esto implica que tenes que hace conversiones de salida
tambien, debes emular como representa y como enviar en función de Terminal XXX. Esta clase conocería el dispositivo de salida y un
procesador de teclado. Normalmente esto lo haria con dos clases distintas. Tambien conacería proveedores genericos que le entreguen
las secuencias provenientes del host ya traducidas o adaptadas a las secuencias
que soportas. De esta forma te aseguras que tengas la flexibilidad
necesaria para manejar determinadas cuestiones, por ejemplo: Vos mencionas dos modos, Consola y Monitor: Consola debes emular VT52 procesando y
renderizando todas las secuencias recibidas desde el host. Monitor debes enviar lo que sea que recibas y
mostrarlo sin renderizarlo como una VT52. De esta forma solo cambiaría un tercer artefacto que es el que te
agrego ahora. C - Un clase que sea algo asi como un Proveedor de
emulación. Contruiría un emulador que convierta los
codigos VT52 as los códigos que espero en el controlador B para la función
solicitada. Esto que parece mucho código al divino baton
es muy piola, me permite decir tal función de VT52 no la implemento o la
implemneto com si fuera tal otra. Si metiera todo en B esto no lo podría
hacer. Construiría un emulador generico, para
las funciones de monitor que aplanaría todas las secuencia recibidas para
enviarlas sin renderizar como VT52. D - Por último un artefacto emulador de terminal Este artefecato contendría los
anteriores, mas un controlador de comunicaciones de I/O, por lo que vos
contaste un simple Stream de entrada y otro de salida. También contendría las funciones de
configuraciób básicas. Ej.: Poner en Eco
local o no. Set de
caracteres ASCII, 7 bit, 8bit Bueno Sebastian contame si esto te va sirviendo y te lo voy completando. Como te darás cuenta no es un tema menor, vas a tener que trabajar
bastante. Mucho dependerá de que tan rica debería ser la emulación de VT52 que
tengas que hacer. Saludos Daniel Calvin PD: Contame...
2006/9/24, Daniel Calvin <[EMAIL PROTECTED]>:
Hola Sebastian En modo consola me imagino que se hace el render del stream emulando
VT52. En modo monitor te muestra el stream crudo, sin intrepertar los codigos
de control de VT52. Es asi? Voy buscar los machetes viejo a ver si puedo rescatar algo. Confirmame si entendi lo que se hace n las dos modalidades. Daniel Calvin
El día 22/09/06, Dani, el tema es así. Este aparato tiene 2 modos, Terminal y protocolo. Si esta en modo Terminal es una consola normal donde la
consola muestra un prompt y el usuario escribe un comando y el aparato devuelve
el resultado y así sucesivamente. Si esta en modo protocolo vos mandas una cadena X y el
aparato en base a eso te tira otra cadena, tal como vos decís los recibo vio
stream. De: puntonet@mug.org.ar
[mailto:puntonet@mug.org.ar]
En nombre de Daniel Calvin Vamos por
partes entonces.. Vos
recibirias de alguna forma un stream o algo parecido y deberías volcarlo en la
consola?, verdad? ( Rendear como si fuera una VT52 ) La otra,
tenes que enviar secuencias de teclado PC convertidas a secuencias de teclado
de VT52. Si es
asi, contame cual es tu punto de contacto con el resto del sistema y te armo un
prototipo berreta. Por
ejemplo, las cadenas de salida a consola, como las recibis?, te colgas de un
evento?, te invocan por callback? Como
envias los gestos del usuario? Contame
eso, si podes. Daniel Calvin
El día
22/09/06, Hola Daniel, espero no haber despertado un sentimiento
nostálgico. ;-) Esta es una aplicación que se comunica con unos surtidores de
nafta vía SERIE y también vía TCP por intermedio de un conversor de señal. La comunicación ya esta resuelta, pero ahora también
necesitan tener una consola igual al HIPERTERMINAL pero incrustada dentro de la
aplicación. No se si con esto aclare un poco el panorama. Gracias de antemano. De: puntonet@mug.org.ar
[mailto:puntonet@mug.org.ar]
En nombre de Daniel Calvin Hola
Sebastian Tenes dos
temas. 1 - Uno
es el tema de comunicaciones, sea serie o lo que implementes. 2 - El
otro es la emulación de terminal, en tu caso interpretar las secuencias de
comandos para VT52. Cuales
son tus dudas? en el punto 1? o en el punto 2? o en 1 y 2? Desarrolle
emuladores de terminal durante varios años, los escribía en Assembler, los
últimos los escribi en MS C 7.0 Te cuento
esto porque algo me acuerdo del tema. Saludos Daniel
Calvin MCP -
Desde 1984 hasta 1994 escribiendo sofware de comunicaciones, emulación de
terminal, implementación de protocolos sincrónicos y asincrónicos. Drivers
para distintos tipos de terminal para Sistemas Operativos Bull Progue. Se me
pianta un lagrimon.... El día
22/09/06, Buenas
tardes lista, alguien tiene alguna data para hacer una Terminal que emule VT52
en c3 o vb .net ,en codeproject no encontré mucho. Algún paper también seria
bueno para empezar a leer. Desde
ya muchas gracias
|
- [puntonet] VT52 Angel \"Java\" Lopez
- [puntonet] VT52 Daniel Calvin
- [puntonet] VT52 Daniel Calvin
- [puntonet] VT52 Sebastian Renzi
- [puntonet] VT52 Sebastian Renzi