Bringing flexcat 2.15 into the main branch (again)
[AROS.git] / tools / flexcat / doc / FlexCat_spanish.texinfo
bloba8eb55965b8b73e1b73bc819e4a51c0ec2161aa2
1 \input amigatexinfo
2 \input texinfo
3 @c %**start of header
4 @setfilename FlexCat_español.guide
5 @settitle Documentación de  FlexCat @value{VERSION}
6 @setchapternewpage off
8 @c
9 @c  FlexCat:                El generador flexible de catálogos          V1.2
10 @c  Copyright (C)   1993    Jochen Wiedmann
12 @c  Este programa es software gratuito; lo puedes redistribuir y/o modificar
13 @c  bajo los términos de la `GNU General Public License' según se publica
14 @c  por la `Free Software Foundation'; ya sea la versión 2 de la licencia,
15 @c  o (tu eliges) cualquier versión posterior.
17 @c  Este programa se distribuye con la esperanza de que sea útil, pero
18 @c  SIN NINGUNA GARANTÍA; incluso sin la garantía implicita de MERCADERÍA
19 @c  o ADECUACIÓN PARA UN PROPÓSITO EN PARTICULAR.  Mira la `GNU General
20 @c  Public License' para más detalles.
22 @c  Deberías haber recibido una copia de la `GNU General Public License'
23 @c  con este programa; si no es así, escribe a:
24 @c  Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 @c  Este fichero contiene la documentación en castellano.
29 @c  Ordenador:  Amiga 1200                 Compilador:   DICE V2.07.54 (3.0)
31 @c  Autor:      Jochen Wiedmann
32 @c              Am Eisteich 9
33 @c              72555 Metzingen
34 @c              Tel. 07123 / 14881
35 @c              Internet: wiedmann@uni-tuebingen.de
37 @c  La traducción ha sido realizada por:
38 @c              Antonio J. Gomez Gonzalez
39 @c              Venezuela 14, 2 - I
40 @c              33213 Gijon - Asturias
41 @c              Tel. (98) 531 58 47
42 @c              Internet: u0868551@oboe.etsiig.uniovi.es
43 @c              (dirección de e-mail válida hasta Sep-94 como mínimo)
46 @set VERSION 1.2
47 @iftex
48 @parskip=0.75em
49 @end iftex
50 @c %**end of header
52 @titlepage
54 @title{FlexCat}
55 @subtitle{El generador flexible de catálogos}
56 @subtitle{}
57 @subtitle{Versión @value{VERSION}}
58 @author Jochen Wiedmann
59 @vskip 0pt plus 1filll
60 @tex
61 @halign{@hfil#&#@hfil@cr
62 Copyright @copyright 1993 & Jochen Wiedmann@cr
63            & Am Eisteich 9@cr
64           72555 & Metzingen (Deutschland)@cr
65            & Tel. 07123 / 14881@cr
66            & Internet: wiedmann@@uni-tuebingen.de@cr
68 @end tex
70 Se garantiza el permiso para realizar y distribuir copias intactas o
71 modificadas de este manual y del programa FlexCat siguiendo los términos
72 de la ``GNU General Public License'' siempre que se preserven, en todas
73 las copias, las notas de Derechos de Autor y ésta nota de permiso, además
74 de distribuir tambien la ``GNU General Public License'' (en el fichero
75 @file{COPYING}).
77 @ignore
78 Se permite procesar este fichero por TeX así como imprimir los resultados
79 siempre que el documento impreso incluya una nota de permiso de copia
80 idéntica a esta, a excepción de éste párrafo (este párrafo no es
81 relevante para el manual impreso).
82 @end ignore
84 El autor @strong{no da} garantía alguna de que el programa que se
85 describe es esta documentación así como los resultados producidos por él
86 sean correctos. El autor no se puede responsabilizar por @strong{cualquier}
87 daño debido al uso de este software.
89 @cite{La traducción a Castellano ha sido realizada por Antonio J. Gomez Gonzalez}
90 @end titlepage
91 @iftex
92 @headings double
93 @end iftex
95 @ifinfo
96 @node Top
97 @top Documentación de FlexCat V@value{VERSION}
98 Este fichero describe la Utilización de Flexcat V@value{VERSION}, un
99 programa que genera catálogos, y el fuente para manejarlos.  FlexCat
100 opera de forma parecida a como lo hacen @code{CatComp} y
101 @code{KitCat}, pero se diferencia de ellos en que genera el código
102 fuente que quieras.  Esto se hace usando las @code{Descripciones de
103 Fuente}, las cuales son un patrón del código que se va a generar. Se
104 pueden editar, y por tanto, adaptar a cualquier lenguaje de programación o
105 necesidades individuales. (¡Eso espero!)
107 @menu
108 General:
110 * Renuncias   ::              Derechos de Autor, (NO) garantía
111 * Vistazo     ::                       ¿ Qúe es FlexCat ?
112 * Instalacion ::               ¿ Cómo lo hago funcionar ?
114 Usando FlexCat:
116 * Inicio del programa    ::             Llamando a FlexCat desde el CLI
117 * Descripcion de catalogo:: Ficheros descripción de catálogo  (ficheros @key{.cd})
118 * Traduccion de catalogo ::   Ficheros traducción de catálogo (ficheros @key{.ct})
119 * Descripcion fuente     ::            Descripcion fuente.  (ficheros @key{.sd})
120 * Usando fuentes FlexCat ::  Usando el fuente de Flexcat en programas propios
122 Otras cosas:
124 * Futuro  ::           Futuro del desarrollo de  FlexCat
125 * Creditos::           Lo que siempre quise decir@dots{}
126 * Indice  ::     Donde encontrar lo que no vas a buscar nunca.
127 @end menu
128 @end ifinfo
130 @ifinfo
131 @node Renuncias
132 @chapter Derechos de Autor y demás materia legal
133 @cindex Derechos
134 @cindex Distribución
135 @cindex Permisos
136 @cindex Prohibiciones
137 @cindex Autor
138 @cindex Dirección
139 @cindex Internet
140 @cindex Mail
141 @example
142 Copyright @copyright{} 1993     Jochen Wiedmann
143             Am Eisteich 9
144             72555 Metzingen (Deutschland)
145             Tel. 07123 / 14881
146             Internet: wiedmann@@uni-tuebingen.de
147 @end example
149 Se garantiza el permiso para hacer y distribuir copias intactas y
150 modificadas de este manual y el programa FlexCat siguiendo los términos
151 de ``GNU General Public License'' simpre que se preserven en todas las
152 copias las notas de Derechos de Autor y ésta nota de permiso, además de
153 que se distribuya tambien la ``GNU General Public License'' (en el
154 fichero @file{COPYING}).
156 @ignore
157 Se permite procesar este fichero por TeX así como imprimir los resultados,
158 siempre que el documento impreso incluya una nota de permiso de copia
159 idéntica a esta, a excepción de éste párrafo (este párrafo no es
160 relevante para el manual impreso).
161 @end ignore
163 El autor @strong{no da} garantía alguna de que el programa que se
164 describe en esta documentación y los resultados producidos por él sean
165 correctos. El autor no se puede responsabilizar de @strong{cualquier}
166 daño resultado del uso de este software.
167 @end ifinfo
169 @node Vistazo
170 @chapter Vistazo
171 @cindex Vistazo
172 A partir del Workbench 2.1 el Amiga ofrece un sistema bastante cómodo para
173 usar programas en diferentes idiomas: La @code{locale.library}. (A esto
174 se le llama localización, que es para lo que vale el nombre.)
176 La idea es sencilla: Eliges un idioma, el castellano la mayoría de los
177 casos, y escribes tu programa de la misma forma que que lo hacías sin
178 localización a excepción de que las cadenas constantes se substituyen
179 por ciertas llamadas a función. Otra llamada a una función permite que los
180 usuarios elijan otro idioma al iniciar el programa. (Esta última
181 llamada lee un fichero externo, el llamado @code{catálogo}, y hace
182 que se lean las cadenas o textos del catálogo en vez de las predefinidas).
184 Estos catálogos son independientes del programa. Todo lo que necesitas
185 para añadir otro idioma es crear un nuevo catálogo, lo cual se puede
186 hacer en cualquier momento sin falta de modificar el programa.
188 Sin embargo hay tareas adicionales para el programador: Necesita crear
189 los catálogos, las cadenas predefinidas, y algo de código fuente para
190 manejarlas. (Las funciones que se mencionaron antes). Flexcat está
191 diseñado para hacer esto de una forma sencilla y casi automática sin
192 perder flexibilidad, especialmente al crear el código fuente. Lo veremos
193 más claro con un ejemplo:
195 Supongamos que queremos escribir un @file{HolaMundoLocal.c}. Nuestro
196 programa final quedaría como:
197 @example
198  #include <stdio.h>
199  #include <stdlib.h>
200  #include <HolaMundoLocal_Cat.h>        /* ¡@strong{Debes} incluirlo! */
201  #include <clib/exec_protos.h>
203  struct Library *LocaleBase;
205  void main(int argc, char *argv[])
206  @{ /*  Abre la librería tú mismo aunque el compilador permita la    */
207    /*  apertura automática. @strong{NO} salgas si falla OpenLibrary, en ese */
208    /*  caso usaremos las cadenas internas.                          */
209    LocaleBase = OpenLibrary("locale.library", 38);
211    OpenHolaMundoLocalCatalog(NULL, NULL);
213    printf("%s\n", GetHolaMundoLocalString(msgHola));
215    CloseHolaMundoLocalCatalog();
216    if (LocaleBase)
217       CloseLibrary(LocaleBase);
218  @}
219 @end example
220 @noindent
221 Fíjate que es casi igual que el @file{HolaMundo.c} original a
222 excepción de que sustituye la cadena "¡Hola mundo!" por una llamada a una
223 función y que contiene algunas inicializaciones adicionales.
225 El programa anterior usa la constante msgHola. La llamada a
226 @code{GetHolaMundoLocalString} hace la sustitución por la cadena
227 correspondiente. Estas constantes y cadenas están definidas en el fichero
228 @code{Descripción de Catálogo}. (@pxref{Descripcion de catalogo}).
229 Siempre se empieza creando un fichero de ese tipo, el
230 @file{HolaMundoLocal.cd}, que podría ser como el siguiente:
231 @example
232  ; Por supuesto, se permiten comentarios. Toda línea que empieze
233  ; con un punto y coma se supone un comentario.
235  ; El idioma de las cadenas internas:
236  #language español
238  ; Versión del catálogo, se usa en la llamada a Locale/OpenCatalog().
239  ; Esto es diferente a Exec/OpenLibrary(): 0 significa cualquier
240  ; versión de catálogo, ¡otro, significa coincidir exactamente!
241  #version 0
243  ; Esto define una cadena y el ID que permite usarla.
244  ; El número 4 indica que la cadena no debe tener menos de 4
245  ; caracteres.
246  msgHola (/4/)
247  ¡Hola mundo!
248 @end example
250 Usando FlexCat puedes crear otros dos ficheros a partir de la descripción
251 de catálogo: el fichero include @file{HolaMundoLocal_Cat.h} que define las
252 constantes (ID), y el @file{HolaMundoLocal_Cat.c}, el cual contiene un
253 vector con las cadenas
254 y las funciones @code{OpenHolaMundoLocalCatalog()},
255 @code{GetHolaMundoLocalString()} y @code{CloseHolaMundoLocalCatalog()}.
256 No necesitas saber como son, sólo cómo usarlas.¡ Especialmente si no
257 necesitas saber nada sobre la @code{locale.library}!
259 En cambio, podrías estar interesado en el funcionamiento de estos
260 ficheros o incluso podrías querer cambiarlos. Esta es la diferencia
261 entre FlexCat y los demás generadores de catálogos: FlexCat no
262 necesita usar un formato interno especial para la creación de esos
263 ficheros. En su lugar usa ficheros externos, las @code{Descripciones de
264 fuente}. Esto permite, por ejemplo, el uso de catálogos con AmigaDOS 2.0.
265 @pxref{Descripcion fuente}. Si usas las descripciones de código fuente
266 de la distribución de FlexCat puedes crear los ficheros fuente con los
267 siguientes comandos:
268 @example
269     @samp{FlexCat HolaMundoLocal.cd HolaMundoLocal_Cat.c=C_c_V21}
270     @samp{FlexCat HolaMundoLocal.cd HolaMundoLocal_Cat.h=C_h.sd}
271 @end example
273 Una vez que tengas tu programa listo usarás FlexCat de nuevo
274 para crear los ficheros @code{Traducción de Catálogo}, uno para cada
275 idioma que quieras soportar. (Excepto para español, que es interno).
276 @xref{Traduccion de catalogo}. Vamos a crear una traducción de catálogo
277 en inglés.
278 @example
279     @samp{FlexCat HolaMundoLocal.cd NEWCTFILE English.ct}
280 @end example
281 @noindent
282 Este fichero sería como sigue:
283 @example
284  ## version
285  ## language
286  ## codeset 0
287  ; Por supuesto, se permiten comentarios. Toda línea que empieze
288  ; con un punto y coma se supone un comentario.
290  ; El idioma de las cadenas internas:
292  ; Versión del catálogo, se usa en la llamada a Locale/OpenCatalog().
293  ; Esto es diferente a Exec/OpenLibrary(): 0 significa cualquier
294  ; versión de catálogo, ¡otro, significa coincidir exactamente!
296  ; Esto define una cadena y el ID que permite usarla.
297  ; El número 4 indica que la cadena no debe tener menos de 4
298  ; caracteres.
299  msgHola
301  ; ¡Hola mundo!
302 @end example
303 @noindent
304 Como ves, se parece mucho a la descripción de catálogo. FlexCat incluye
305 los comentarios de la descripción de catálogo, incluso los que no tienen
306 mucho sentido: Fíjate en el comentario de la longitud de cadena, el cual
307 no debería aparecer ahí ya que esa información sólo debe estar en la
308 descripción de catálogo. Todo lo que tienes que hacer ahora es rellenar
309 la información sobre la versión (se espera una cadena típica de versión
310 como @samp{$VER: English.catalog 1.0 (22.05.94)}, el idioma de la
311 traducción de catálogo (aquí para inglés sería @samp{english}), el
312 codeset (que debería ser siempre 0 por ahora, para más detalles mira en
313 Locale/Catalogs() ) y, por supuesto, las propias cadenas. FlexCat
314 incluye las cadenas originales en forma de comentarios de forma que
315 siempre sepas que es lo que tienes que poner.
317 Finalmente, creas los catálogos con comandos como:
318 @example
319     @samp{FlexCat HolaMundoLocal.cd English.ct CATALOG English.catalog}
320 @end example
321 @noindent
322 Fíjate que ¡no necesitas el programa o los ficheros fuentes creados
323 con FlexCat para los catálogos! Puedes crear nuevos catálogos en
324 cualquier momento. Es usual ofrecer distribuciones con un fichero
325 CatalogoNuevo.ct, de forma que los usuarios puedan crear sus propios
326 catálogos.
328 Pero, ¿qué ocurre si cambias el programa más tarde? Simplemente edita la
329 descripción de catálogo y usa FlexCat para actualizar las traducciones de
330 catálogo:
331 @example
332     @samp{FlexCat HolaMundoLocal.cd English.ct NEWCTFILE English.ct}
333 @end example
334 @noindent
335 Todo lo que tienes que hacer ahora es introducir las nuevas cadenas si es
336 necesario.
338 @node Instalacion
339 @chapter Instalación
340 @cindex Instalación
341 @cindex Requisitos
342 FlexCat está escrito en Ansi-C puro (excepto la localización), por ello,
343 debería correr en cualquier Amiga y con suerte en otras máquinas después
344 de compilarlo. (La localización queda como comentarios en ese caso). Esto
345 tambien es aplicable a los programas: Flexcat está escrito utilizándose a
346 sí mismo. Todas las descripciones de fuente distribuidas deberían crear
347 programas que se ejecuten en cualquier Amiga, e incluso en cualquier
348 máquina. (Por supuesto, debes asegurarte de que la variable LocaleBase
349 tiene un valor @samp{NULL} en este último caso). Sin embargo, la
350 localización sólo es posible a partir del Workbench 2.1 porque la
351 @code{locale.library} no estaba disponible antes.
353 No es imposible ofrecer localización sin la @code{locale.library}: Los
354 ficheros de descripción de fuente @file{C_c_V20.sd} y @file{C_h_V20.sd}
355 ofrecen un ejemplo en el que se usa la @code{iffparse.library} para
356 sustituir la @code{locale.library} si ésta no está disponible. Esto
357 permite Localización en el Workbench 2.0. @xref{C}.
359 Instalar FlexCat es simple: Copia el programa en un directorio en tu
360 camino de búsqueda y elige un lugar para las descripciones de fuente que
361 necesites. (Éstas son los ficheros que tienen nombres de la forma
362 @file{xx_yy.sd}, donde @file{xx} es el lenguaje de programación). Si
363 quieres usar FlexCat en otro idioma distinto del inglés tambien
364 necesitas copiar los catálogos correspondientes. Ej. para el castellano
365 debes copiar @file{Catalogs/español/FlexCat.catalog} en
366 @file{Locale:Catalogs/español/FlexCat.catalog} o
367 @file{PROGDIR:Catalogs/español/FlexCat.catalog}, donde @file{PROGDIR:}
368 es el directorio del programa FlexCat. @xref{Usando fuentes FlexCat}.
370 @node Inicio del programa
371 @chapter Llamando a FlexCat desde el CLI
372 @cindex CLI
373 @cindex Workbench
374 Flexcat es un programa basado en el CLI y no funciona desde el Workbench.
375 Su sintaxis de llamada es
376 @example
377     FlexCat CDFILE/a,CTFILE,CATALOG/k,NEWCTFILE/k,SOURCES/m
378 @end example
379 @noindent
380 donde el significado de los argumentos es
381 @table @strong
382 @item CDFILE
383 es el nombre de la descripción de catálogo a leer. Siempre es necesario.
384 Señalar que el nombre base de la descripción de fuente se crea de éste
385 distinguiendo entre mayúsculas y minúsculas. @xref{Descripcion fuente}.
386 @item CTFILE
387 es el nombre del fichero traducción de catálogo que se leerá. Se
388 necesita para la creación de catálogos o la actualización de una
389 traducción de catálogo antigua usando el argumento NEWCTFILE: FlexCat lee
390 el fichero viejo y la descripción de catálogo, y crea un fichero
391 traducción de catálogo nuevo conteniendo las cadenas viejas y,
392 posiblemente, líneas vacías para las cadenas nuevas.
393 @item CATALOG
394 es el nombre del fichero catálogo que se creará. Este argumento necesita
395 que también se indique el argumento CDFILE.
396 @item NEWCTFILE
397 es el nombre del fichero traducción de catálogo que se creará. FlexCat
398 lee, si se dá, cadenas de CTFILE, y las cadenas que falten de la
399 traducción de catálogo se sustituyen con líneas vacías. (La nueva
400 traducción de catálogo sólo contendrá líneas vacías como cadenas si se
401 omite el CTFILE).
402 @item SOURCES
403 son los nombres de los ficheros de código fuente que se van a crear. Se debería
404 poner en forma de @samp{fuente=patrón} donde @samp{fuente} es el fichero
405 a crear y @samp{patrón} es el nombre del fichero de descripción de
406 fuente que se analizará.
407 @end table
409 Ver @ref{Vistazo} para ejemplos de líneas de comandos.
411 @node Descripcion de catalogo
412 @chapter Ficheros de descripción de catálogo
413 @cindex Descripcion de catalogo
414 @cindex .cd
415 Un fichero descripción de catálogo contiene cuatro tipos de líneas.
417 @table @strong
418 @item Líneas de comentario
419 Cualquier linea que empieze por un punto y coma se supone una línea de
420 comentario, y por tanto se ignora. (Las siguientes líneas de cadena son
421 una excepción y pueden empezar con un punto y coma).
423 @item Líneas de comando
424 Cualquier línea que empieze con un '#' (con la misma excepción que antes)
425 se suponen líneas de comando. Los posible comandos son:
426 @table @code
427 @item #language <cad>
428 indica el idioma por defecto del programa, el idioma de las cadenas de la
429 descripción de catálogo. Por defecto es @samp{#laguage english}.
430 @item #version <num>
431 indica el número de versión de los catálogos a abrir. Señalar que este
432 número debe coincidir exactamente y no ser el mismo o superior como en
433 @cite{Exec/Openlibrary}. Una excepción es el número 0, que acepta
434 cualquier catálogo. El valor por omisión es @samp{#versión 0}. En
435 @code{Locale/OpenCatalog} encontrarás más información sobre el idioma del
436 catálogo y la versión.
437 @item #lengthbytes <num>
438 Indica a Flexcat que ponga el número de bytes dado antes de cada cadena
439 que contenga su longitud. La longitud es el número de bytes de la cadena
440 sin bytes de longitud ni el byte @samp{NUL} del final. (Los ficheros catálogo,
441 y por tanto las cadenas del catálogo siempre tendrán un byte @samp{NUL}
442 al final. Esto no siempre es cierto para las cadenas por defecto, depende
443 del fichero de descripción de fuente).
444 @samp{<num>} debe estar entre 0 y sizeof(long)=4, por omisión es
445 @samp{#lengthbytes 0}.
446 @item #basename <cad>
447 Pone el nombre-base de la descripción de fuente. @xref{Descripcion fuente}.
448 Esto anula el nombre-base del argumento CDFILE de la línea de comandos.
449 @xref{Inicio del programa}.
450 @end table
451 En los comandos no se distinguen mayúsculas de minúscalas.
452 @item Líneas de descripción
453 declaran una cadena. Son de la forma @samp{IDCAD (id/longmin/longmax)}
454 donde @samp{IDCAD} es un identificador (cadena que consta de los
455 caracteres a-z,A-Z y 0-9), @samp{id} es un número único (desde ahora lo
456 llamaremos ID), @samp{longmin} y @samp{longmax} son la longitud mínima y
457 máxima respectivamente de la cadena. Los tres últimos se pueden omitir
458 (¡aunque no los caracteres @samp{(//)}!), en cuyo caso FlexCat elige un
459 número y no restringe la longitud de la cadena.
460 Lo mejor es no usar los IDs si no los necesitas. Las líneas que las
461 siguen son
462 @item Líneas de cadena
463 @cindex Caracteres de control
464 @cindex Codigo-ASCII
465 contienen la propia cadena y nada más. Pueden contener ciertos
466 caracteres de control que empiezan con una barra inversa:
467 @table @samp
468 @item \b
469 Borra atrás (Ascii 8)
470 @item \c
471 CSI (Introductor de Sequencia de Control) (Ascii 155)
472 @item \e
473 Escape (Ascii 27)
474 @item \f
475 Salto página (Ascii 12)
476 @item \g
477 Pitido pantalla (Ascii 7)
478 @item \n
479 Salto de línea, (newline) (Ascii 10)
480 @item \r
481 Retorno de Carro (Ascii 13)
482 @item \t
483 Tabulador (Ascii 9)
484 @item \v
485 Tabulador Vertical (Ascii 11)
486 @item \)
487 El paréntesis final que puede necesitarse como parte de una sequencia
488 @samp{(..)}, ver @ref{Descripcion fuente}.
489 @item \\
490 La propia barra inversa.
491 @item \xHH
492 El caracter dado por el código ASCII @samp{HH}, donde @samp{HH} son
493 dígitos hexadecimales.
494 @item \OOO
495 El caracter dado por el código ASCII @samp{OOO}, donde @samp{OOO} son
496 dígitos octales.
497 @end table
498 Finalmente, una barra inversa sóla al final de la línea provoca la
499 concatenación con la siguente línea. Esto permite usar cadenas de
500 cualquier longitud, FlexCat no hace suposiciones sobre la longitud de la
501 cadena.
502 @end table
504 Por tanto, una cadena se dá con una línea de descripción seguida de un
505 línea de cadena. Veamos un ejemplo:
506 @example
507     msgHola (/4/)
508     ¡Hola, esto es castellano!\n
509 @end example
510 @noindent
511 @cindex FlexCat.cd
512 Aquí se omite el ID, por lo que FlexCat elige un número apropiado. El
513 número 4 indica a FlexCat que la cadena siguiente no debe tener menos de
514 4 caracteres, y que puede ser de cualquier longitud. Mira en el fichero
515 @file{FlexCat.cd} para más ejemplos.
517 @node Traduccion de catalogo
518 @chapter Ficheros traducción de catálogo
519 @cindex Traduccion de catalogo
520 @cindex .ct
521 Los ficheros traducción de catálogo son bastante parecidos a las
522 descripciones de catálogo, a excepción de comandos diferentes y por no
523 tener información sobre el ID de cadena ni sobre la longitud. (Éstos se
524 toman de la descripción de catálogo). Deben aparecer todas las
525 cadenas de la descripción de catálogo, (sin embargo, FlexCat no escribe
526 en el catálogo las cadenas que son idénticas a la cadena por omisión), y
527 no debe tener identificadores adicionales. Esto se puede asegurar
528 fácilmente si se usa FlexCat para crear las traducciones de catálogo
529 nuevas. @xref{Vistazo}.
531 Los comandos que se permiten en traducciones de catálogo son:
532 @table @code
533 @item ##version <cad>
534 Indica la versión del catálogo en forma de cadena de Versión de AmigaDOS.
535 Ejemplo:
536 @example
537     @samp{##version $VER: English.ct 8.1 (22.05.94)}
538 @end example
539 El número de versión de este catálogo es 8. De hecho, la versión de la
540 descripción de catálogo debe ser 0 u 8.
541 @item ##language <cad>
542 El idioma del catálogo. Por supuesto, debe ser otro idioma distinto del
543 idioma de la descripción de catálogo. Los comandos @samp{##language} y
544 @samp{##version} deben estar presentes en la traducción de catálogo.
545 @item ##codeset <num>
546 Actualmente no se usa, debe ser 0. Este es el valor por defecto.
547 @end table
549 @cindex English.ct
550 La cadena de antes sería algo como lo siguiente en la traducción de
551 catálogo:
552 @example
553     msgHola
554     Hello, this is english!\n
555 @end example
556 @noindent
557 Mira en @file{Español.ct} para más ejemplos de una traducción de catálogo.
559 @node Descripcion fuente
560 @chapter Ficheros de descripción de fuente
561 @cindex Descripcion de fuente
562 @cindex .sd
563 Esta es la parte especial de FlexCat. Hasta ahora no hay nada que no
564 puedan ofrecer CatComp, KitCat u otros. El código fuente creado debe
565 hacer fácil el uso de los catálogos sin perder flexibilidad. Debería
566 poder utilizarse cualquier lenguaje de programación y debería poder
567 satisfacerse cualquier requisito. Esto parece una contradición, pero
568 la solución de FlexCat son los ficheros descripción de fuente que
569 contienen un patrón del código fuente que se creará. Éstos son
570 editables de la misma forma que lo son los ficheros descripción de
571 catálogo y traducción de catálogo, por ello, FlexCat puede crear
572 cualquier código.
574 Se analizan las descripciones de fuente para encontrar ciertos símbolos
575 que se substituyen por ciertos valores. Símbolos posibles son los
576 caracteres de barra inversa anteriores y, además, secuencias que empiezen
577 con @samp{%}. (Esto lo conocen bien los programadores en C).
578 @table @samp
579 @item %b
580 es el nombre base de la descripción de catálogo. @xref{Inicio del programa}.
581 @item %v
582 es el número de versión de la descripción de catálogo. No lo confundas
583 con la cadena de versión de la traducción de catálogo.
584 @item %l
585 es el idioma de la descripción de catálogo. Señalar que ésta se inserta
586 como una cadena. Mira @samp{%} más adelante.
587 @item %n
588 es el número de cadenas de la descripción de catálogo.
589 @item %%
590 es el propio caracter @samp{%}.
591 @end table
593 Pero lo más importante son las siguientes secuencias. Éstas representan a
594 las cadenas del catálogo de diferentes formas. Las líneas que contienen
595 uno o más de estos símbolos se repiten para cada cadena.
597 @table @samp
598 @item %i
599 es el identificador de la descripción de catálogo.
600 @item %d
601 es el ID de la cadena.
602 @item %s
603 es la propia cadena; se insertará dependiendo del lenguaje de
604 programación, y se puede controlar con los comandos @samp{##stringtype}
605 y @samp{##shortstrings}.
606 @item %(...)
607 inserta el texto entre los paréntesis en todas las cadenas menos en la
608 última. Esto se necesitará probablemente en vectores si las entradas del
609 vector se deben separar con comas pero la última no se debe seguir con
610 una coma. Señalar que entre los paréntesis no se substituirán las
611 secuencias @samp{%}. Se permiten, sin embargo, las secuencias de barra
612 inversa.
613 @end table
614 Las secuencias de control @samp{%l} y @samp{%s} crean cadenas. Aunque la
615 forma en que queden las cadenas depende del lenguaje de programación. Ese
616 es el motivo de que la descripción de fuente permita líneas similares a
617 las de la traducción de catálogo. Éstas deben empezar con el primer
618 caracter de la línea y cada comando debe tener su propia línea. Los posibles
619 comandos son:
620 @table @code
621 @item ##shortstrings
622 hace que las cadenas más largas se dividan en varias líneas. Esto no
623 siempre será posible o no estará implementado en FlexCat, y por ello, la
624 opción por defecto es crear sólo una cadena, probablemente, bastante larga.
625 @item ##stringtype <tipo>
626 Indica a FlexCat cómo deben aparecer las cadenas. Los tipos posibles son:
627 @table @strong
628 @item None
629 No se crean caracteres adicionales. Se inserta una imagen de la cadena y
630 nada más. No se pueden poner caracteres binarios (las secuencias con barra
631 inversa).
632 @item C
633 crea cadenas de acuerdo con el C. Las cadenas se preceden y finalizan con
634 el caracter @samp{"}. Las cadenas se dividen usando secuencias @samp{"\}
635 al final de la línea y @samp{"} al principio de la nueva línea. (La
636 barra inversa se necesita en macros). Los caracteres binarios se
637 insertan usando @samp{\OOO}. @xref{C}.
638 @item Oberon
639 es como el tipo de cadena C, excepto por la barra final al final de la
640 línea.
641 @item Assembler
642 Las cadenas se crean usando @samp{dc.b}. Los caracteres ASCII legibles se
643 preceden y siguen con el caracter @samp{'}, los caracteres binarios se
644 insertan como @samp{$XX}. @xref{Ensamblador}.
645 @item E
646 Las cadenas se preceden y siguen con el caracter @samp{'}. Un @samp{+}
647 concatena cadenas que se reparten por varias líneas. Los caracteres
648 binarios se insertan de la misma forma que en C.
649 @end table
650 @end table
652 Veamos un fragmento del fichero @file{C_h.sd} creando un fichero include
653 para el lenguaje de programación C.
654 @example
655 ##stringtype C
656 ##shortstrings
658 #ifndef %b_CAT_H    /* Nos aseguramos de que sólo se lea una vez. */
659 #define %b_CAT_H
661 /*  Leemos los demás includes */
662 #include <exec/types.h>
663 #include <libraries/locale.h>
665 /*  Prototipos  */
666 extern void Open%bCatalog(struct Locale *, STRPTR);
667 extern void Close%bCatalog(void);
668 extern STRPTR Get%bString(LONG);
670 /*  Definiciones de los identificadores y sus IDs. */
671 /*  Esta línea se repetirá para cada cadena.       */
672 #define %i %d
674 #endif
675 @end example
677 @node Usando fuentes FlexCat
678 @chapter Incluyendo fuentes de FlexCat en programas propios
679 @cindex Usando fuentes FlexCat
680 @cindex Fuentes FlexCat
681 Por supuesto, esto depende del tipo de código fuente que se desee crear,
682 y por tanto de la descripción de fuente. De lo que estamos hablando aquí
683 es de los ficheros descripción de fuente que se distribuyen con FlexCat.
684 @xref{Descripcion fuente}.
686 Todas las descripciones de fuente deberían permitir el uso del programa
687 sin la @code{locale.library}. Sin embargo, debe estar presente una
688 variable llamada @samp{LocaleBase} (@samp{_LocaleBase} para ensamblador)
689 e inicializarse con NULL o con una llamada a @cite{Exec/OpenLibrary}. En
690 el primer caso no es posible la localización a no ser que se use el
691 fichero de descripción de fuente @file{C_c_V20.sd}. Éste permite la
692 localización bajo 2.0 sustituyendo la @code{locale.library} por la
693 @code{iffparse.library}. (Para ello debe estar presente e inicializada
694 una variable @samp{IFFParseBase} como con @samp{LocaleBase}). @xref{C}. El
695 programador no necesita conocer estas librerías a no ser que quiera crear
696 sus propias descripciones de fuente.
698 Hay tres funciones, y llamarlas es bastante sencillo.
699 @deffn {} OpenCatalog (locale, idioma)
700 Esta función probablemente abrirá el catálogo. El argumento @code{locale}
701 es un puntero a la estructura Locale y @code{idioma} es una cadena que
702 contiene el nombre del idioma que se debería abrir. En la mayoría de los
703 casos deberían ser ambos @samp{NULL} o @samp{NIL}, respectivamente, ya que en
704 otro caso se anulan los valores que predefine el usuario. Para más
705 detalles mira en @cite{Locale/OpenCatalog}.
707 Si el usario tiene @samp{español} y @samp{Deutsch} como idiomas por
708 omisión y el nombre base del programa es @samp{XXX}, buscará los
709 siguientes ficheros:
710 @example
711     @file{PROGDIR:Catalogs/español/XXX.catalog}
712     @file{LOCALE:Catalogs/español/XXX.catalog}
713     @file{PROGDIR:Catalogs/Deutsch/XXX.catalog}
714     @file{LOCALE:Catalogs/Deutsch/XXX.catalog}
715 @end example
716 @noindent
717 donde @file{PROGDIR:} es el directorio actual del programa. (Se puede
718 cambiar el orden de @file{PROGDIR:} y @file{LOCALE:} para evitar los
719 requeters del tipo @samp{Inserta volumen YYY}.
721 OpenCatalog es de tipo void (para programadores en Pascal un procedimiento)
722 y por tanto no devuelve nada.
723 @end deffn
725 @deffn {} GetString (ID)
726 Devuelve un puntero a la cadena con ese ID de la descripción de catálogo.
727 Por supuesto estas cadenas son propiedad de @code{locale.library} y no
728 se deben modificadar.
730 Podría ser útil un ejemplo. Cojamos la cadena de la descripción de
731 catálogo del ejemplo, que se llamaba @code{msgHola}. Las descripciones de
732 fuente declaran una cosntante @samp{msgHola} representando el ID. Se
733 podría imprimir en C usando:
734 @example
735     printf("%s\n", GetString(msgHola));
736 @end example
737 @end deffn
739 @deffn {} CloseCatalog (void)
740 Esta función libera el catálogo (que está reservado en RAM) antes de
741 terminar el programa. Puedes llamar a esta fucnión en cualquier momento,
742 incluso antes de llamar a OpenCatalog.
743 @end deffn
745 @menu
746 * C          ::            Fuentes de FlexCat en programas en C
747 * Oberon     ::       Fuentes de FlexCat en programas en Oberon
748 * Ensamblador::  Fuentes de FlexCat en programas en Ensamblador
749 * E          ::            Fuentes de FlexCat en programas en E
750 @end menu
752 @node C
753 @section Fuentes de FlexCat en programas en C
754 @cindex C
755 @cindex C_c_V20.sd
756 @cindex C_h.sd
757 @cindex C_c_V21.sd
758 El fuente en C cosiste en dos partes: Un fichero @file{.c} que debería
759 compilar y linkar sin problemas, y un fichero include que debería
760 incluirse desde cualquier parte del fuente que use cadenas de catálogo y
761 el cual define los IDs como macros.
763 Hay dos versiones diferentes para la parte @file{.c}:
764 @file{C_c_V21.sd} es un versión bastante simple usando las funciones
765 correspondientes de la @code{locale.library} y que permite la
766 localización a partir del Workbench 2.1. Por otro lado la
767 @file{C_c_V20.sd} substituye la @code{locale.library} con la
768 @code{iffparse.library} si la primera no está disponible y lo está la
769 útlima. Esto permite la localización para el Workbench 2.0 también. Los
770 programas que usen ésta deberían tener una opción @code{Idioma} y dar el
771 argumento correspondiente a @samp{OpenCatalog}. Esta opción no se debería
772 usar en 2.1 y posteriores, y por ello el argumento de idioma de
773 @samp{OpenCatalog} debería seguir siendo @samp{NULL}.
775 Por supuesto, sería posible escribir una tercera versión usando catálogos
776 con Ansi-C, pero no quiero soportar la 1.3 más.
778 Para diferenciar las funciones @samp{OpenCatalog} y @samp{CloseCatalog}
779 de las funciones respectivas de @code{Locale} con los mismos nombres, y
780 para permitir diferentes catálogos en un mismo programa, las funciones de
781 FlexCat obtienen nombres ligeramente modificados: @samp{OpenXXXCatalog} y
782 @samp{CloseXXXCatalog}, donde @samp{XXX} es el nombre base de la
783 descripción de fuente. El concepto ha sido copiado de GadToolsBox y,
784 según creo, parece bueno. @xref{Descripcion fuente}.
786 Los prototipos de las funciones son:
787 @example
788     void OpenXXXCatalog(struct Locale *loc, char *idioma);
789     STRPTR GetXXXString(ULONG);
790     void CloseXXXCatalog(void);
791 @end example
793 Mira en @code{HolaMundoLocal.c} para ver un ejemplo. (@pxref{Vistazo})
795 @node Oberon
796 @section Fuentes de FlexCat en programas en Oberon
797 @cindex Oberon
798 @cindex Oberon_V38.sd
799 @cindex Oberon_V39.sd
800 Hay dos descripciones de fuentes diferentes: @file{Oberon_V38.sd} crea el
801 fuente usando @file{Locale.mod} de Harmut Goebel. @file{Oberon_V39.sd}
802 crea el fuente usando el @file{Locale.mod} distribuido con
803 @code{AmigaOberon}.
805 Los prototipos de las funciones son:
806 @example
807     XXX.OpenCatalog(loc: Locale.LocalePtr; idioma : ARRAY OF CHAR);
808     XXX.GetString(num: LONGINT): Exec.StrPtr;
809     XXX.CloseCatalog();
810 @end example
811 @noindent
812 donde @samp{XXX} es el nombre base de la descripción de fuente.
813 @xref{Descripcion fuente}.
815 Finalmente veamos un ejemplo de fuente de FlexCat:
816 @example
817     MODULE HolaMundoLocal;
819     IMPORT  x:=HolaMundoLocal_Cat; Dos;
821     BEGIN
822       x.OpenCatalog(NIL, "");
824       Dos.PrintF("%s\n", x.GetString(x.msgHola));
825       (* El catálogo se cerrará automáticamente  *)
826       (* al finalizar el programa.               *)
827     END CualquierCosa;
828 @end example
830 @node Ensamblador
831 @section Fuente de FlexCat en programas en ensamblador
832 @cindex Ensamblador
833 @cindex AztecAs_asm.sd
834 @cindex AztecAs_i.sd
835 El fuente en ensamblador se crea para usarlo con el ensamblador de Aztec.
836 No debría ser muy diferente a otros ensambladores y deberías ser capaz de
837 implementar descripciones de fuente propias. El fuente consiste de dos
838 partes: Un fichero @file{.asm} que debería ensamblarse  y linkarse sin
839 problemas, y un fichero include @file{.i} que define los IDs de las
840 cadenas y debe incluirse en el porgrama que las use.
842 Como siempre, el resultado de la función se da en d0, y las funciones
843 guardan los registros d2-d7 y a2-a7. OpenCatalog espera sus argumentos en
844 a0 (un puntero a una estructura Locale) y a1 (puntero a la cadena del
845 idioma), que deberían ser NULL en la mayoría de los casos. GetString
846 espera el ID de cadena en d0.
848 Finalmente, veamos un programa de ejemplo usando fuentes de FlexCat:
849 @example
850 *   HolaMundoLocal.asm
851     include "XXX.i" ; Es obligatorio abrirlo. Contiene
852                     ; "xref OpenHolaMundoLocalCatalog", ...
853     xref    _LVOOpenLibrary
854     xref    _LVOCloseLibrary
855     xref    _AbsExecBase
857     dseg
858 LocNam: dc.b    "locale.library",0
859     dc.l    _LocaleBase,4       ; Debe estar con este nombre
861     cseg
862 main:    move.l  #38,d0         ; Abre la locale.library
863     lea LocName,a1
864     move.l  _AbsExecBase.a6
865     jsr _LVOOpenLibrary(a6)
866 *   NO salir si falla OpenLibrary
867     sub.l   a0,a0               ; Abre el catálogo
868     sub.l   a1,a1
869     jsr OpenHolaMundoLocalCatalog
871     move.l  #msgHola,d0         ; Obtiene puntero a la cadena
872     jsr GetHolaMundoLocalString
873     jsr PrintD0                 ; y la imprime
875 Final:
876     jsr CloseHolaMundoLocalCatalog ; Cierra el Catálogo
877     move.l  _LocaleBase,a1         ; Cierra la locale.library
878     move.l  a1,d0                  ; este test es necesario para 1.3
879     beq Final1
880     jsr CloseLibrary
881 Final1:
882     rts
883     end
884 @end example
886 @node E
887 @section Fuentes de FlexCat en programas en E
888 @cindex E
889 @cindex E21b.sd
890 @cindex E21b_defs.sd
891 @cindex E21b_procs.sd
892 @cindex EPP
893 E se diferencia drásticamente de otros lenguajes de programación en un
894 punto: No puedes compilar módulos separados y luego linkarlos juntos. Todo
895 el código fuente debe estar en un fichero. La mejor solución a este
896 problema es usar EPP de Barry Wills. (Origen: Aminet, directorio @file{dev/e},
897 disco de Fred Fish). Esto te permite integrar los fuentes creados con la
898 descripción de fuente @code{E21b.sd} en una línea:
899 @example
900     PMODULE 'xxx_cat'
901 @end example
902 @noindent
903 donde xxx es el nombre-base de tu aplicación. Sin EPP necesitas insertar
904 el fuente de FlexCat manualmente en tu propio fuente. Debes insertar el
905 fuente después de tus propias definiciones, y antes del primer
906 procedimiento. (De otra forma estarías obligado a crear e insertar más
907 de un fichero con código fuente de FlexCat).
909 Las funciones @samp{get_xxx_string}, @samp{open_xxx_catalog} y
910 @samp{close_xxx_catalog} están en el código fuente creado. (Estos nombres
911 ligeramente modificados se necesitan para permitir catálogos diferentes
912 en un mismo programa). Señalar que (al contrario que en C, por ejemplo)
913 ¡no debes llamar a get_xx_string antes de open_xx_catalog!
915 Un @file{HolaMundoLocal.e} usando EPP podría parecerse a:
916 @example
917     /*  HolaMundoLocal.e  */
919     PMODULE holamundolocal_cat
921     PROC main()
922     /*  Abre Locale.library; ¡@strong{No} salir, si falla!  */
923     localebase := OpenLibrary('locale.library', 0)
925     /*  Abre el fichero catálogo.                           */
926         open_holamundolocal_catalog(NIL, NIL)
928         WriteF('\s\n', get_holamundolocal_string(MSG_HOLA_MUNDO))
930         close_holamundolocal_catalog()
931     ENDPROC
932 @end example
934 @node Futuro
935 @unnumbered Próximo desarrollo de FlexCat
936 @cindex Futuro
937 @cindex FlexCat
938 @cindex Contribuciones
939 No espero mucho más desarrollo de FlexCat porque que pienso que ya es
940 bastante completo. Por supuesto, estoy abierto a sugerencias, trucos o
941 críticas. Especialmente, me ofrezco a incluir nuevos tipos de cadenas, ya
942 que ésto se puede hacer con cambios mínimos.
944 Estaría muy agradecido si me enviarais cualquie nueva descripcione de fuente
945 para poder incluirlas en próximas distribiciones. Cualquier lenguaje de
946 programación, cualquier extensión, siempre y cuando se haya comprobado
947 bien el código fuente en un programa real. Tambien apreciaría recibir
948 nuevos catálogos. Es suficiente insertar las cadenas en el fichero
949 @file{NewCatalogs.ct} que es parte de la distribución.
951 @node Creditos
952 @unnumbered Créditos
953 @cindex Creditos
954 Agradezco especialmente a:
955 @table @strong
956 @item Albert Weinert
957 por KitCat, el predecesor de FlexCat que me hizo grandes cosas, pero que
958 finalmente no era lo suficientemente flexible.
960 @item Reinhard Spisser und Sebastiano Vigna
961 por la versión de texinfo para Amiga. Esta documentación está escrita
962 utilizándolo. (La traducción también :-)).
964 @item The Free Software Foundation
965 por la versión original de texinfo y muchas otras excelentes cosas.
967 @item Matt Dillon
968 por DICE y especialmente por DME.
970 @item Alessandro Galassi
971 por el catálogo italiano.
973 @item Lionel Vintenat
974 por la descripción de fuente de E y su documentación, los catálogos en
975 francés y por informar sobre errores.
977 @item The people of #AmigaGer
978 por contestarme muchas preguntas estúpidas, y por la diversión, por
979 ejemplo stefanb (Stefan Becker), PowerStat (Kai Hoffmann), \
980 ill (Markus Illenseer), Quarvon (Jürgen Lang), ZZA (Bernhard Möllemann),
981 Tron (Mathias Scheler), mungo (Ignatios Souvlatzis), \
982 jow (Jürgen Weinelt) und Stargazer (Petra Zeidler).
984 @item Commodore
985 por el Amiga y el Kickstart 2.0. Seguid desarrollando sobre él y siguiré
986 siendo un usuario de Amiga durante los próximos 8 años. ;-)
987 @end table
989 La traducción a castellano de este manual, así como de los catálogos del
990 programa han sido realizados por:
991 @example
992           Antonio Joaquín Gomez Gonzalez
993           C/ Venezuela, 14 - 2 I
994           33213 Gijon - Asturias (ESPAÑA)
995           E-mail: u0868551@@oboe.etsiig.uniovi.es (mínimo hasta Sept. 94)
996 @end example
998 @headings off
999 @node Indice
1000 @unnumbered Índice
1001 @printindex cp
1003 @contents
1005 @bye