txtPAWS
Introducción

Esta documentación debería acompañar al programa txtPAWS. txtPAWS es un complemento para Paguaglús. Si bien no es necesario utilizarlo para programar en Paguaglús, (ya que éste admite formato SCE PAWS), es mucho más cómodo puesto que automatiza las tareas enormemente.

Se trata 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 modificado (fichero *.sce), 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 ; sustituido &&anchoa por 5
    MESSAGE 32 ; sustituido &&anchoa_desc por 32
    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. Genera directamente código .ulx, es decir, código para la máquina Glulx. (Esta opción es muy recomendable). Es el compilador para el cuál 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 de 32k, sin gráficos ni sonidos.

Ejemplo

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.

Instrucciones
Incluir otros ficheros

EL nombre de fichero no puede incluir espacios.
Para hacer esto, debe incluirse la línea:

##include

Por ejemplo:

##include sysmsg.txp

Incluyendo toda la información necesaria, incluso el path si no está en el mismo directorio.
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.

Definición de identificadores

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 es:

##define [obj|flg|loc|msg|snd|msc|pic|grf] identificador numero

Por ejemplo:

##define loc loc_inicial 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). Por ejemplo:

/LTX
/1
...
/21
esta localidad es una cueva fría
##define loc cueva_fria 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.
Véase el fuente del ticket para más ejemplos.

Definición de reemplazos

Se utiliza la siguiente sintaxis:

&&(identificador)

Para reemplazar:
CARRIED 7; llevas la linterna
por:
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

Los símbolos '#' y '&' no pueden ser utilizados duplicados si no se trata de una definición o de un reemplazo. Sobre todo, no se deben utilizar en los textos de los mensajes y localidades. Por ejemplo, si apareciera:

/12
Whisky J&&B

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

Sí es factible:

/12
Whisky J&B

Errores, sugerencias, comentarios

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.

Bugs y dudas

Para cualquier duda o bug encontrado:
Baltasar, el arquero.