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: puntonet@mug.org.ar [mailto:puntonet@mug.org.ar] En nombre de Daniel Calvin
Enviado el: domingo, 24 de septiembre de 2006 21:45
Para: puntonet List Member
Asunto: [puntonet] VT52

 

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, Sebastian Renzi <[EMAIL PROTECTED] > escribió:

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
Enviado el: viernes, 22 de septiembre de 2006 16:44
Para: puntonet List Member
Asunto: [puntonet] VT52

 

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, Sebastian Renzi < [EMAIL PROTECTED]> escribió:

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
Enviado el: viernes, 22 de septiembre de 2006 15:14
Para: puntonet List Member
Asunto: [puntonet] VT52

 

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, Sebastian Renzi < [EMAIL PROTECTED]> escribió:

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

 

Sebastian Renzi




--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional




--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional




--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional




--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Responder a