[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [superglus] txtPAWS Tema: Macros.




     Hola !

Es una tonteria... pero al leer el manual me di cuenta
de que cuando se da la explicacion de las macros se
dice que estas han de ocupar una sola linea


¿Estás seguro? Debo haberte pasado una versión antigua del manual ... lo he mirado y no lo he encontrado. Te lo vuelvo a mandar.

y lo que yo me pregunto es...

 Seria valido una macro tal que asi?

AT 4 MESSAGE 105 PAUSE 50 MESSAGE 106 PAUSE 50 MESSAGE
107 ANYKEY

     No, debe ser:

     #define macro mcrMacro "AT 4"
           + "    MESSAGE 105"
           + "    PAUSE 50"
                  + "    MESSAGE 106"
               + "     PAUSE 50"
               + "    MESSAGE 107"
               + "    ANYKEY"

Seria eso valido siempre que se escriba en una linea?
estoy casi seguro de que si,

     No, lo siento, superglus/paguaglús no lo compilaríana adecuadamente.

pero de ser cierto seria interesante que en el ejemplo del manual usaseis un
ejemplo de este estilo para no dar lugar a equivocos

     Es que ya está, por eso estoy confuso ...

     Por cierto, gracias a tus elogios sobre txtPAWS, es muy reconfortante.

     Salud !

--


PBC -- J. Baltasar García Perez-Schofield
jbgarcia en uvigo de es  http://webs.uvigo.es/jbgarcia/
Dep. Informática, Universidad de Vigo, España (Spain)


Seguimiento de bugs:
http://yokiyoki.dyndns.org/cgi-bin/cvstrac/superglus

http://groups.yahoo.com/group/superglus/


_____
Yahoo! Groups Links


*	To visit your group on the web, go to:
http://groups.yahoo.com/group/superglus/
* To unsubscribe from this group, send an email to:
superglus-unsubscribe@xxxxxxxxxxxxxxx
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
Title: txtPAWS

txtPAWS


Para empezar rápidamente ...

NOTA: Este documento trata sólo sobre txtPAWS: no esperes aprender a hacer aventuras en PAWS con él.

txtPAWS permite definir identificadores para evitar tener que recordar qué número era qué localidad, objeto ... etc. Se puede utilizar ese identificador en lugar del número, en cualquier lugar donde antes se utilizaba ese número.

A la hora de definir una localidad, o un objeto, o un mensaje en SCE PAWS, puede aprovecharse para definir un nuevo identificador. Por ejemplo:


/LTX
/1 = lCasa
Una casa ...
; más cosas ...

/OTX
/1 = oLlave
; más cosas ...

/MSG
/1 = mCasa
Sí, es una casa
/1 = oLlave
No puedes coger la llave, porque es rosa.
; más cosas ...

/PRO 0
EXAMINA CASA AT lCasa
  MESSAGE mCasa
  DONE
COGE LLAVE PRESENT oLlave
  MESSAGE mLlave
  DONE

En este ejemplo, los identificadores que se han colocado en lugar de los números, en la tabla de respuestas, serán sustituidos por los números a los que se corresponden, quedando así:


/PRO 0
EXAMINA CASA AT 1
  MESSAGE 1
  DONE
COGE LLAVE PRESENT 1
  MESSAGE 2
  DONE

Introducción

Esta documentación debería acompañar al programa txtPAWS. txtPAWS es un complemento para Paguaglús y Superglús. Si bien no es necesario utilizarlo para programar en estos sistemas, (ya que éstos admiten formato SCE PAWS), es mucho más cómodo puesto que facilita el trabajo enormemente.

Se trata, finalmente, de poder utilizar nombres de objetos, localidades y mensajes para referirse a esos objetos en lugar de por sus números de definición en SCE PAWS. También permite dividir un fichero SCE PAWS en trozos, haciendo más manejable el código.

Para saber más acerca de los términos aquí empleados, y sobre qué es una aventura conversacional, consúltese la web del CAAD

El formato de entrada es SCE PAWS (fichero *.sce), modificado, un fichero *.txp

La salida comprende:

  1. un fichero .sce con comentarios según las sustituciones. Cada sustitución e inclusión de fichero que se realiza supone incluir un comentario en el punto del programa en el que se produjo. Así:

    #include objetos.txp
    EXAMI ANCHOA PRESENT anchoa
      MESSAGE anchoa_desc
      DONE

    Pasa a ser:
    ;#include objetos.txp
    ...
    (contenido de objetos.txp)
    ...
    EXAMI ANCHOA PRESENT 5 ; sust(anchoa)
    MESSAGE 32 ; sust(anchoa_desc)
    DONE

  2. un fichero .log. Este fichero es sólo informativo. En caso de producirse un error, contiene la información de ese error. Contiene mucha otra información incluso en caso de una compilación correcta.

El fichero .sce generado no es exactamente igual al original, se recomienda guardar siempre el fichero .txp, pues requeriría bastante esfuerzo (aunque sería posible) reconstruirlo.

El formato de SCE, pawcomp y pawint son copyright de Graham Yeandle.

Un fichero SCE generado con txtPAWS o directamente escrito sin utilizar txtPAWS sirve de entrada para al menos tres compiladores importantes:

  1. Paguaglús/Superglús. Generan directamente código .ulx, es decir, código para la máquina Glulx. (Esta opción es muy recomendable). Son los compiladores para los cuáles txtPAWS ha sido realizado.
  2. El compilador pawseZ de Zak, que genera código inform a partir de un archivo .sce. Esta opción podría ser recomendable, ya que inform puede generar tanto ficheros .z5 (máquina Z) como .ulx (máquina Glulx). Sin embargo, el proyecto pawseZ, pese a ser funcional, es un proyecto sin soporte actualmente.
  3. El de Graham Yeandle para MS-DOS, pawcomp. Genera un fichero .pdb que se puede ejecutar con pawint (esta opción no es muy recomendable). pawcomp y pawint están limitados a aventuras en modo texto, de 32k, sin gráficos ni sonidos, y con una apariencia, en general, bastante pobre.

Instrucciones de manejo


Ejecución desde línea de comando

La ejecución, independientemente del sistema, se hace de la siguiente forma:

$ txtpaws [-MAXNUMLOCS=n] <nombre_fichero>

Por ejemplo, suponiendo una aventura en un archivo "legado.txp":

$ txtpaws legado.txp
$ txtpaws -MAXNUMLOCALIDADES=1024 legado.txp

txtPAWS sin parámetros indica la sintaxis a utilizar.

Opciones:

Incluir otros ficheros

Para hacer esto, debe escribirse la siguiente línea, en el lugar donde se desea que el fichero sea incluido.

#include <nomfich>
ó
#include "<nomfich>"

Por ejemplo:


#include sysmsg.txp
#include "/usr/includes/superglus/start.txp"
#include "c:\superglus\includes\start.txp"

EL nombre del fichero no puede incluir espacios, si se emplea la primera forma (sin comillas). Por otra parte, el nombre de fichero debe incluir toda la información necesaria, incluso el path completo si no está en el mismo directorio, siendo en ese caso la forma más aconsejada la segunda (con comillas). La palabra clave a utilizar puede ser ##include o #include.
Esto permite factorizar el típico SCE dividido en secciones en varios ficheros más manejables.
También, dependiendo de la habilidad del programador, se podrían definir librerías, aunque hay que tener presente que las limitaciones de PAWS siguen siendo las mismas, #include simplemente incluye un fichero de texto en la línea en la que se encuentra.

Esta facilidad no es de demasiado utilidad si se está usando Superglús, ya que el mismo editor divide el fichero en sus secciones (mensajes, localidades, objetos ...).

Definición de identificadores

Introducción

Al comienzo del programa, antes de cualquier otra sección se puede hacer cualquier definición, objeto, localidad o mensaje y NO se comprueba su validez. Son total responsabilidad del programador. Esta sección se denomina DEF.

La sintaxis genérica es:

#define [obj|flg|loc|msg|snd|msc|pic|grf|const|macro] identificador [=] <numero> | "<texto>"

Es posible utilizar #define, y ##define, así como el signo igual, que es opcional.
Normalmente, al identificador o etiqueta se le asocia un número, mientras que en el caso concreto de una macro, se le asocia un texto.

Nótese que también es posible, en el caso de localidades, objetos y mensajes, definirlos símplemente utilizando el número de PAWS, tal y como se explica en la sección de comienzo. Así:
/LTX
/0 = locInicial
** Aventura **
/1 = locCasa
Una casa de ladrillos rojos se sitúa en frente de ti. Además, puedes ver un buzón.

Esto definiría locInicial y locCasa como localidades con los identificadores 0 y 1, respectivamente.

Otro ejemplo sobre localidades:

##define loc locInicial = 0

En las secciones de objetos, localidades, procesos y mensajes, se pueden definir identificadores: Se aconseja dejar líneas de separación con ';' (el comentario). Así:

/LTX
/1
...
/21
esta localidad es una cueva fría
##define loc locCuevaFria 21
;

Se comprueba que es un id de localidad ('loc') definida dentro de la localidad, y que el número se corresponde con la localidad actual, para evitar errores.

El tutorial del ticket de PAWS se acompaña como ejemplo, con el nombre mt.txp. Varios otros proyectos están a tu disposición en la carpeta /paguagls/prys.

Definición de sustituciones en profundidad

Realización de reemplazos

No se utiliza ninguna sintaxis especial. Como compatibilidad hacia atrás, se puede colocar "&&" antes de los identificadores, pero no es necesario. Para reemplazar:

CARRIED 7; llevas la linterna

por:

##define obj linterna 7
...
CARRIED linterna ; llevas la linterna

... suponiendo que se haya ##definido el objeto 7 como linterna.

Es IMPORTANTE que haya un espacio delimitando el final del identificador, antes del ';', es decir, del comentario, si éste existe.

Nota: El símbolo '#' no puede ser utilizado duplicado si no se trata de una
definición. Sobre todo, no se debe utilizar
en los textos de los mensajes y localidades. Por ejemplo, si apareciera:

/MTX
/12
Do##Re

El programa trataría de definir un identificador para sustituirlo,
provocando un error de ejecución.

Sí es factible:

/12
Do#Re

Historial de cambios y agradecimientos

Debo agradecer, sobre todo y especialmente, a dos personas, el desarrollo de txtPAWS. Yokiyoki acogió con alegría este proyecto, me animó a mejorarlo y lo incluyó rápidamente entre los "complementos oficiales" de Paguaglús. Me sugirió mejoras, y lo testeó en varias ocasiones con muy interesantes comentarios. También Uto, que hizo lo mismo que Yokiyoki, pero con Superglús en esta ocasión, incluyéndolo entusiásticamente "de serie" en el paquete, como "complemento oficial", por considerarlo "muy útil". Además, Uto es hoy por hoy casi el betatester oficial, sugiriendo mejoras y encontrando bugs (cada vez menos, afortunadamente) a resolver.

Gracias también a todos aquellos que desarrolláis con txtPAWS como preprocesador, y que por tanto estáis de acuerdo en no utilizar lápiz y papel para vuestras aventuras. Este pequeño programa está dedicado a vosotros.

Versión 0.1 Permite sustituciones de localidades, mensajes, objetos y banderas.
Versión 0.5 Añade las posibilidad de sustituir gráficos y música. Los identificadores son ("msc","pic", "grf", "snd")), correspondientes con gráficos y música por habitación, gráficos "libres" y efectos sonoros "libres". Genera el fichero de recursos automáticamente.
Versión 0.6 Añade las posibilidad de definir constantes con "const" como clave. Permite definir objetos en /OTX.
Versión 0.7 Corrige varios bugs, introduciendo otro.
Versión 0.71 Corrige un bug introducido en una versión anterior: al eliminar los espacios en blanco antes de cada línea, que hacía que las tablas de procesos fueran incompilables, ya que cada entrada debe empezar en la primera columna, y no volver a esa columna hasta la siguiente entrada.
Versión 0.75 Introduce la posibilidad de definir constantes de texto, no sólo numéricas, con nombre "macro". El nombre es debido a que la siguiente versión estable, la 0.8 contendrá macros similares al del preprocesador de C.
Versión 0.76 Corrige un pequeño bug que se producía al descartar el resto de la línea cuando ésta contenía un /21, /CTL, ... es decir, un cambio de estado. Afectaba sobre todo a los objetos, que suelen definirse cada uno de ellos en una sola línea, y que no obtenían sus sustituciones realizadas.
Versión 0.78 Corrección de varios bugs pequeños no detectados desde la inclusión de la posibilidad de macrosustituciones, en la versión 0.75. El código ahora ha sido revisado para que no sea posible que el preprocesador aborte debido a un error de sobreescritura en memoria, posibilidad que no había sucedido hasta ahora, pero ...
Como adiciones:

  1. se mejoran los mensajes de error

  2. se añade la posibilidad de que una macro ocupe varias líneas

  3. se añaden los parámetros a las macros

  4. ya no es necesario colocar "&&" antes de los identificadores
Versión 0.85 Corrección de varios bugs.
Versión 0.9 Varios cambios, de ellos el más importante es que ahora es posible reemplazar identificadores pegados a una barra, y el reemplazo se hace antes de considerar ninguna estructura de control, por lo que es mucho más útil.
Como adiciones:

  1. se puede poner #define y ##define, ##include e #include

  2. define, include y el resto de palabras clave ya no son sensibles al contexto

  3. arreglado algún bug (sustituir con '@' pegado, por ejemplo)

  4. es posible definir mensaje, identificadores ... etc, cuando se definen en PAWS, /1 = casa, por ejemplo.

Licencias y otras yerbas

Licencia

Este programa se entrega tal cuál está. No se admitirá ningún tipo de reclamación respecto al funcionamiento del mismo, incluyendo especialmente cualquier daño, físico, moral o material que pudiera derivarse. Este programa es GPL. Ésto quiere decir que puede ser copiado, utilizado, e incluso, modificado, libremente, si bien se agradecerá el contactar con el autor para que autorice una modificación (y que, de ser útil, probablemente prefiera hacerla él mismo). En caso de no recibir autorización, o de no poder contactar con el autor, se agradecería en gran medida cambiar el nombre del programa, e indicar expresamente, en cualquier caso, que se ha utilizado como base el código fuente de txtPAWS, de Baltasar, con e.mail baltasarq@xxxxxxxx y página web http://caad.mine.nu/baltasarq/, en un lugar visible de la documentación.
La principal restricción de la licencia GPL es que "cualquier cosa" que se haga con este código deberá seguir siendo GPL.

Bugs y dudas

Ante cualquier error, consultar la línea en el fichero .txp, .txi, .txp.log y txi.log. El programa genera dos ficheros, el .txi donde están todos los ficheros txp ya incluidos, y el sce, cuando ya se han hecho todas las sustituciones. Además, genera otros logs, que describen todos los procesos que realiza.

Si el error sigue sin explicación, consultar el SCE y el log del TXI: ahí se han anotado todas las sustituciones e inclusiones realizadas.

Para cualquier duda o bug encontrado:
Baltasar

Comentarios técnicos

Compilación

Para compilar este programa en Linux (o en Windows, con mingw):

$ g++ txtpaws.cpp -otxtpaws

Para compilar este programa en Windows, con Borland C++ Builder:

c:\> bcc32 txtpaws.cpp

No es posible compilar directamente este programa con MVC++, debido a que este compilador no parece soportar correctamente el estándar.

Integración con otros programas

Este preprocesador puede integrarse (está especialmente pensado para ello) en cualquier otra herramienta. Al final del fichero "txtpaws.cpp" se encuentra el código que permite que txtpaws sea una herramienta de consola. De querer integrarlo, probablemente en una herramienta gráfica, basta estudiar esta parte del código para saber cómo invocar a los objetos que realizan el proceso. También será necesario comentar la línea, al principio de txtpaws.cpp:

#define __TEXT__UI // Ejecución en línea de comando

Concretamente, existen dos funciones a proporcionar (al margen del main(), el punto de entrada):

El siguiente conjunto de funciones puede ser de utilidad: