Número 4 · Julio-Septiembre 1995
NOTA: Pulsando sobre las fotos con borde azul ampliarás la imagen.
|
Cómo
utilizar
código
ASCII de PC
en nuestros
programas
de AMIGA |
Éste mes vamos a hacer un alto en el curso de C para resolver una de las consultar llegadas a la redacción de AMIGA.InFo.
Concretamente, nos preguntaron si hay alguna forma de trabajar, sólo con texto, de forma parecida a como lo hacen los PC's. Esto nos permitirá programar en AMIGA y, haciendo unos pequeños retoques al código fuente, pasarlo a PC y que funcione más o menos igual.
¿Código ASCII?
La mayoría de los programas informáticos, por no decir todos, suelen trabajar con texto. Unas veces en forma de números y otras en forma de letras pero, siempre se trata de una información que se debe mostrar por la pantalla.
Este mes puedes encontrar en los discos de portada una versión del menú preparada para trabajar con código ASCII de PC. Los pequeños caracteres gráficos aparecen en la ventana velozmente ya que se trata de un simple texto y no de un gráfico. |
En cualquier caso, interesa mostrar esta información lo más rápidamente posible y de forma estándar, es decir, que la representación gráfica escogida para mostrar el texto sea la misma para todas las plataformas. Muchos programadores defienden la postura de que la información hay que mostrarla lo más rápidamente posible y sin perder el tiempo en pequeños detalles de maquillaje. Es decir, si tengo que mostrar cuánto vale el perímetro de una circunferencia, seguro que acabaré antes si muestro únicamente el valor correspondiente, en vez de liarme a preparar "gadgets" y botones en tres dimensiones para que la información se vea muy espectacular en la pantalla.
Este tipo de programas requieren de un tipo de representación gráfica que sea estándar para la mayoría de máquinas y que, además, tenga una serie de caracteres gráficos para poder hacer pequeños recuadros que resalten aquella porciones de información más importante. A esta representación se le llamó código ASCII (Código eStándar Americano para el Intercambio de Información).
Por otro lado, están los programadores más modernos (incluidos los que diseñaron el interfaz gráfico del AMIGA) que son partidarios de que "la información se asimila más fácilmente si está muy bien presentada".
Este tipo de programadores necesitan para el texto un tipo de representación gráfica igual de estándar que los anteriores. No necesitan caracteres gráficos, ya que para presentar la información en pantalla, utilizan sus propias rutinas gráficas del sistema operativo.
Estas dos necesidades han dado lugar a que se incompatibilizara "un poco" los programas de un tipo con los del otro, dando lugar a versiones de un programa específicas para MS-DOS y versiones del mismo programa específica para AmigaDOS, por citar dos tipos de plataformas.
¿Qué diferencias hay entre el Código ASCII de AMIGA y el de PC?
Mas abajo podéis ver unas tablas que muestran la descripción completa de los dos códigos ASCII.
En primer lugar, podemos ver la tabla de 256 códigos ASCII de PC. Lo más representativo es que, junto a unas definiciones para el texto, se encuentran unas representaciones gráficas de muy diverso estilo. Unos caracteres gráficos nos permiten crear recuadros, otros nos permiten mostrar símbolos matemáticos, otros nos permitirán hacer enumeraciones y, por último, nos encontramos con toda una serie de flechas. Este código ASCII es el escogido por los seguidores del primer tipo.
Por otro lado, está el código ASCII de AMIGA, partidario de la sencillez, y de aprovechar al máximo su magnífico sistema operativo para las tareas de presentación en pantalla. Como podéis ver en su tabla, no tiene caracteres gráficos y, además, posee una serie de equivalencias de teclado que nos permitirán ir más rápido utilizando estos atajos de teclado.
¿Cómo puedo utilizar el código ASCII de PC?
El Amiga es una máquina totalmente configurable por el usuario y eston os va a permitir poder hacer una pequeña trampa para utilizar el código ASCII de PC en el Amiga. El truco consiste básicamente en poner una fuente de texto de PC en el texto del sistema por defecto.
| Código ASCII de PC |
 |
|
Cómo utilizar esta tabla:
Cada casilla indica el código en hexadecimal, en decimal y el código ASCII equivalente. Por ejemplo:
|
1 y 0 Estos dos dígitos forman el código en notación hexadecimal
(Triángulo) Representación gráfica del código ASCII de PC).
16 - Código en decimal |
|
| Código ASCII de AMIGA |
 |
|
| Dec |
Código ASCII
de AMIGA |
Descripción |
65
66 |
67
68 |
69
70 |
71
72 |
73
74 |
75
76 |
77
78 |
79
80 |
81
82 |
83
84 |
85
86 |
87
88 |
89
90 |
91
92 |
93
94 |
95
96 |
97
98 |
99
100 |
101
102 |
103
104 |
105
106 |
107
108 |
109
110 |
111
112 |
113
114 |
115
116 |
117
118 |
119
120 |
121
122 |
123
124 |
125
126 |
| 127 |
|
A (A mayúscula)
B (B mayúscula) |
C (C mayúscula)
D (D mayúscula) |
E (E mayúscula)
F (F mayúscula) |
G (G mayúscula)
H (H mayúscula) |
I (I mayúscula)
J (J mayúscula) |
K (K mayúscula)
L (L mayúscula) |
M (M mayúscula)
N (N mayúscula) |
O (O mayúscula)
P (P mayúscula) |
Q (Q mayúscula)
R (R mayúscula) |
S (S mayúscula)
T (T mayúscula) |
U (U mayúscula)
V (V mayúscula) |
W (W mayúscula)
X (X mayúscula) |
Y (Y mayúscula)
Z (Z mayúscula) |
[ (abre corchete)
\ (barra inversa) |
] (cierra corchetes)
^ (intercalación o circunflejo) |
_ (subrayado o línea baja)
' (abre comilla única) |
a (a minúscula)
b (b minúscula) |
c (c minúscula)
d (d minúscula) |
e (e minúscula)
f (f minúscula) |
g (g minúscula)
h (h minúscula) |
i (i minúscula)
j (j minúscula) |
k (k minúscula)
l (l minúscula) |
m (m minúscula)
n (n minúscula) |
o (o minúscula)
p (p minúscula) |
q (q minúscula)
r (r minúscula) |
s (s minúscula)
t (t minúscula) |
u (u minúscula)
v (v minúscula) |
w (w minúscula)
x (x minúscula) |
y (y minúscula)
z (z minúscula) |
{ (abre paréntesis de llaves)
| (línea vertical) |
} (cierra paréntesis de llaves)
~ (aproximación o tilde) |
| DEL (borrar o eliminar) |
|
A
B |
C
D |
E
F |
G
H |
I
J |
K
L |
M
N |
O
P |
Q
R |
S
T |
U
V |
W
X |
Y
Z |
[
\ |
]
^ |
_
' |
a
b |
c
d |
e
f |
g
h |
i
j |
k
l |
m
n |
o
p |
q
r |
s
t |
u
v |
w
x |
y
z |
{
| |
}
~ |
| DELETE |
|
|
| Dec |
Código ASCII
de AMIGA |
Descripción |
0
1 |
2
3 |
4
5 |
6
7 |
8
9 |
10
11 |
12
13 |
14
15 |
16
17 |
18
19 |
20
21 |
22
23 |
24
25 |
26
27 |
28
29 |
30
31 |
32
33 |
34
35 |
36
37 |
38
39 |
40
41 |
42
43 |
44
45 |
46
47 |
48
49 |
50
51 |
52
53 |
54
55 |
56
57 |
58
59 |
60
61 |
62
63 |
| 64 |
|
NUL (nulo)
SOX (comienzo de cabecera) |
STX (comienzo de texto)
ETX (fin de texto) |
EOT (fin de transmisioón
ENQ (consulta) |
ACK (reconocer)
BELL (campanilla) |
BS (retroceso)
HT (tabulación horizontal) |
LF (avance de línea)
VT (tabulación vertical) |
FF (salto de página)
CR (retorno de carro) |
SO (quitar mayúsculas)
SI (pulsar mayúsculas) |
DLE (escape enlace de datos)
DC1 (control disp. 1 o X-ON) |
DC2 (control dispositivo 2)
DC3 (control disp.3 o X-OFF) |
DC4 (control dispositivo 4)
NAK (reconocimiento negativo) |
SYN (carácter sincronización)
ETB (fin bloque tranmisión) |
CAN (cancelar)
EM (fin medio de impresión) |
SUB (substituto)
ESC(escape) |
FS (separador de ficheros)
GS (separador de grupo) |
RS (separador de registro)
US (separador de unidades) |
SP (espacio)
! (cierra admiración) |
" (comillas inglesas)
# (signo de número) |
$ (signo de dólar)
% (signo de porcentaje) |
& (etcétera)
' (comilla única de cierre) |
( (abre paréntesis)
) (cierra paréntesis) |
* (asterisco)
+ (más) |
, (coma)
- (guión) |
. (punto)
/ (barra) |
0 (cero)
1 (uno) |
2 (dos)
3 (tres) |
4 (cuatro)
5 (cinco) |
6 (seis)
7 (siete) |
8 (ocho)
9 (nueve) |
: (dos puntos)
; (punto y coma) |
< (signo menor que)
= (signo igual) |
> (signo mayor que)
? (cierre interrogación) |
| @ (signo de arroba) |
|
CTRL/1
CTRL/A |
CTRL/B
CTRL/C |
CTRL/D
CTRL/E |
CTRL/F
CTRL/G |
CTRL/H, BACKSPACE
CTRL/I, TAB |
CTRL/J, RETURN, ENTER
CTRL/K |
CTRL/L
CTRL/M, RETURN |
CTRL/N
CTRL/O |
CTRL/P
CTRL/Q |
CTRL/R
CTRL/S |
CTRL/T
CTRL/U |
CTRL/V
CTRL/W |
CTRL/X
CTRL/Y |
CTRL/Z
ESC. ESCAPE |
CTRL<
CTRL/ |
CTRL/=
CTRL/- |
SPACE
! |
"
# |
$
% |
&
' (apóstrofe) |
(
) |
*
+ |
,
- |
.
/ |
0
1 |
2
3 |
4
5 |
6
7 |
8
9 |
:
; |
<
= |
>
? |
| @ |
|
|
Figura 1. Si cargamos un texto que contiene caracteres del código ASCII de PC sin tener seleccionada una Font de PC, veremos caracteres extraños como los que se ven en la figura. |
Vamos a verlo paso por paso
-
En primer lugar, necesitaremos una Font de PC. En el disco de portada, que contiene los listados pertenecientes al artículo del curso de C de este mes, podrás encontrar un directorio llamado "FontDePCparaelSistema". En su interior se encuentra la Font de PC más utilizada en Amiga. Se trata de la Font del programa "HyperANSI.font" y el directorio llamado "HyperANSI.font" y el directorio llamado "HyperANSI" y los copiaremos dentro del directorio "Fonts" de nuestro sistema.
-
El siguiente paso que hay que hacer es seleccionar la nueva Font de PC como la Font por defecto para el texto del sistema. Esto se consigue seleccionar el cajón llamado "Prefs" situado en nuestro sistema. Tras abrirlo, veremos algunos iconos de programas de configuración. Seleccionaremos el icono llamado "Font" que nos abrirá una pequeña ventana con información referente a los fonts que tenemos escogidos para el texto de los iconos del Workbench, el texto del sistema por defecto y por último, el texto de pantalla. Pulsaremos, con el ratón, sobre el gadget que sirve para seleccionar el texto del sistema por defecto y entonces nos aparecerá una ventana pidiéndonos que marquemos uno de los fonts que aparecen. Marcamos el HyperANSI tamaño 8 y después pulsamos sobre "OK" y sobre "USAR". A partir de este momento, ya podremos ver los caracteres gráficos típicos de PC.
-
Para probar que todo funcione perfectamente, vamos a hacer un pequeño test con el editor de textos CygnusED.
Cargamos el fichero llamado "Menu.c" que se encuentra también en el disco de portada. Como el CygnusED utiliza por defecto la Font llamada "Topaz", lo que veremos en la pantalla será algo parecido a lo que vemos en la figura 1.
Ahora, seleccionamos la opción situada en la barra del menú del CygnusED llamada "Select font --> Select disk font". Nos abrirá una ventana, como la mostrada en la figura 2, donde escogeremos de nuevo el Font llamado HyperANSI.
A partir de este momento, ya podremos ver correctamente cualquier texto que carguemos en el CygnusED que contenga código ASCII de PC. En la figura 3 podéis ver el aspecto que toma la pantalla tras seleccionar el Font adecuado.
¿Cómo podemos ejecutar el ejemplo del menú?
Para ejecutar el ejemplo del menú puedes hacer dos cosas: o lo ejecutas mediante el comando "Ejecutar comando" (Amiga Derecha + E) situado en el menú del Workbench o, bien, a través de un Shell.
Hay que tener en cuenta que, de momento y para no hacer demasiado extenso el listado, hemos preparado el ejemplo para funcionar correctamente en un Workbench abierto en modo PAL Hires-interlaced con ocho colores.
¿Qué debemos hacer para compilarlo?
Para compilar el ejemplo, primero copiaremos los ficheros llamados "ANSIpant.h" y "Menu.c" a la RAM:
Una vez copiados, abriremos un Shell y pasaremos a compilar el código fuente utilizando la versión REGISTRADA del DICE C. Vamos a utilizar ficheros de cabecera (#include) propiedad de ESCOM (?) que no van incluidos en la versión "Shareware" del DICE que incluimos en los discos de protada del número 0 del AI. Por lo tanto, empieza a ser necesario que compréis un compilador completo, si es que de verdad queréis secarle el máximo partido a AMIGA.InFo.
Podéis encontrar más información de cómo y dónde conseguir el DICE C 3.0 en la publicidad de la revista o llamando directamente a nuestro teléfono.
NOTA ENCANTA: El teléfono ha sido omitido por ser un dato antiguo.
Figura 4. Muestra del Shell utilizado para copiar el ejemplo. Es necesario tener un compilador de C que contenga los "Includes" del sistema operativo o de lo contrario no podremos compilarlo. |
En la figura 4 podéis ver cómo compilar el ejemplo del menú. Es algo tan sencillo como escribir en un Shell el comando:
dcc ram:Menu.c -o Menu.exe
Una vez compilado correctamente, puedes ejecutarlo escribiendo:
Menu.exe
En ese momento aparecerá una ventana mostrando el nuevo "look" del programa. El funcionamiento es exactamente igual que en versiones anteriores. Escoge la opción que quieras y mira qué ocurre. Para salir del programa, simplemente cierra la ventana.
Podremos compilar el ejemplo con cualquiera de los otros compiladores de C que contengan los "includes" del sistema operativo aunque, puede que se requiera hacer alguna pequeña modificación al código fuente para que se produzca su correcta compilación.
¿Cómo podemos aplicar esta técnica a nuestros programas?
Figura 2. Seleccionamos el Font de PC llamado HyperANSI con tamaño 8. La opción de cambiar el tipo de font se encuentra en la barra de menú, en el campo llamado "Global Settings". |
Figura 3. Pantalla mostrando el código fuente del menú, con código ASCII de PC. |
Realmente, para aplicar esta técnica a nuestros programas, únicamente necesitamos dos cosas: la primera de ellas es tener un Font de PC puesto como el tipo de letra por defecto del sistema; la segunda es incluir código ASCII de PC dentro de las cadenas de caracteres que mostraremos al usuario.
Por ejemplo, si miramos la Tabla de código ASCII de PC, veremos que hay cuatro recuadros que tienen por nombre: Tipo de recuadro... 1, 2, 3 y 4. Estas cuatro cajas indican las secuencias de caracteres ASCII que tendremos que introducir dentro de cada una de las cadenas que mostraremos en nuestro programa, para mostrar cuadros de varios tipos.
Para introducir en el código fuente estas secuencias de caracteres ASCII, podemos utilizar varios programas. Por ejemplo, nosotros hemos usado la opción de introducir un valor ASCII que tiene el editor de textos CygnusED pero, podríamos haber utilizado el programa HyperANSI (figura 5) para definir toda una pantalla completa de golpe y, después, mostrarla con una única llamada a un printf().
Este programa lo podéis encontrar en el directorio "AMINET/tex/edit" de Internet, en la colección en CDROM AMINET SET 1 1995, o también en la colección Fred Fish 851. HyperANSI es un editor ANSI utilizado prioritariamente para crear las cabeceras de la mayoría de BBS. Nos permite editar hasta 999 páginas a la vez y tiene opciones para copiar, mover, hacer rellenos, reemplazar, alinear y justificar texto, dibujar líneas, permite editar con diferentes colores y, además, soporta totalmente el set completo de 255 caracteres del IBM PC. Este programa te será de gran ayuda si quieres programar utilizando código ASCII de PC.
Figura 5. Programa HyperANSI, especializado en la realización de pantallas que incluyen código ASCII de PC junto a códigos ANSI. |
El listado del Menú
El listado de este mes está compuesto por dos ficheros. El primero de ellos se llama "ANSIpant.h" y es un fichero de cabecera que será incluido por el segundo: "Menu.c", cuando lo compilemos.
ANSIpant.h contiene las definiciones necesarias para utilizar comandos del tipo ANSI X3.64: borrar la pantalla, poner en negrita o itálica, poner el cursor en una cierta posición de la pantalla, insertar o borrar líneas, etc... Este fichero es independiente así que, podremos incluirlo en nuestros programas cada vez que vayamos a necesitar cualquiera de los comandos ANSI definidos en el mismo.
Menu.c contiene el cuerpo del programa. La verdad es que la dificultad del ejemplo es exagerada para el nivel en que nos encontramos del curso de C, pero nos pareció poco apropiado resolver la consulta un dar un ejemplo de cómo hay que programar en Amiga para utilizar código ASCII de PC: Podíamos haber dicho cómo hay que hacerlo, pero sin un ejemplo al que acudir en los momentos de duda, sería poco útil. Si de momento te pierdes siguiendo el listado, no te preocupes, dentro de muy poco estarás en condiciones de entenderlo todo completamente e incluso de mejorarlo considerablemente. De momento, basta con saber que el programa realiza lo siguiente:
- En primer lugar, nos ponemos en contacto con el sistema operativo para inicializar una serie de "datos" que necesitaremos.
- Abriremos una ventan en el Workbench e imprimimos en ella el menú.
- Nos quedamos leyendo el teclado para ver que opción escoge el usuario.
- Cuando cierren la ventana acabaremos la ejecución dejando el sistema tal y como lo encontramos al principio.
De momento, esto es todo por este mes. Saludos y hasta el mes que viene.
|