Personalizando Filer48


Introducción


Filer48 es completamente personalizable, puedes correr tus propios programas desde Filer48, y también puedes usar todas las Funciones internas, además, cada programa puede tener su propia tecla de acceso rápido; esto es logrado utilizando un Menu personal que despliega etiquetas para cada uno de tus programas. Si presionasdentro de Filer48, el programa intentará localizar el archivo F48.CST, este archivo es usado para crear tu menu personal.


Estructura de F48.CST


Este archivo es una lista que especifica los elementos del menu y las teclas de acceso rápido. Esta lista contiene una sublista por cada elemento del menu. Cada sublista puede contener desde 3 hasta 5 argumentos. Puedes usar una sublista vacia como separador.


La estructura general es asi:

{

   {

      ( Elemento 1 )

      Elemento_Nombre

      Elemento_Lugar

      Elemento_Accion

      [ Programa_Personal ]

      [ Tecla_AccesoRapido ]

   }

   {

      ( Elemento 2 )

      ...

   }

   ...

}


Cada argumento de la sublista se describe a continuación.


Elemento_Nombre


Este argumento especifica lo que será desplegado en la etiqueta del menu. Puede ser una String, un Grob 21 x 8 o un programa que al ser evaluado regrese una String o un Grob 21 x 8.


Elemento_Lugar


Este argumento te permite controlar cuando se ejecutará la acción asociada a esta etiqueta.  Este puede ser un número hex o un bint. Existen 5 posibles valores, los cuales se listan en la siguiente tabla.


Valor Constante Significado
0 fEverywhere La acción se puede correr en todos lados (VAR, PORT, BACKUP, LIB)
1 fVar La acción sólo correrá si el usuario explora HOME o alguna de sus carpetas.
2 fNoLib La acción no correrá si el usuario explora una librería.
3 fNoBackup La acción no correrá si el usuario explora un Backup dentro de un puerto.
4 fHomePort La acción sólo correrá en la raíz de los puertos.
5 fVar&HomePort La accion correra en HOME y en la raiz de los puertos.

NOTA: La columna Constante lista el nombre de una constante que deberias usar cuando programes, estas constantes estan definidas en el archivo Filer48.h incluido en la carpeta Custom.

Elemento_Acción


Este argumento define que pasará cuando el usuario presione la tecla correspondiente a esa etiqueta del menu o la tecla de acceso rápido. Puede ser un número hex o un bint Es posible llamar una Función interna de Filer48, o definir una propia. La siguiente tabla lista todas las llamadas internas disponibles, para estos valores no es necesario incluir un programa dentro de la sublista:


Valor Constante Accion
0 cQUIT Sale del Filer.
1 cSORT Muestra un dialogo con opciones para ordenar los objetos.
2 cSELECT Muestra un dialogo con opciones para seleccionar los objetos.
3 cVIEW Visualiza el objeto en el visor mas adecuado.
4 cTREE Muestra el arbol de carpetas.
5 cUp Mueve el cursor hacia arriba.
6 cMaxUp Mueve el cursor al primer objeto.
7 cDown Mueve el cursor hacia abajo.
8 cMaxDown Mueve el cursor al ultimo objeto.
9 cSelect Selecciona el objeto actual.
10 cUpDir Ir a la carpeta padre.
11 cDownDir Visita la carpeta actual.
12 cPreviousMenu Muestra pagina anterior del menu.
13 cNextMenu Muestra pagina siguiente del menu.
14 cEVAL Ejecuta el objeto actual.
15 cChangeHeader Cambia la linea del encabezado.
24 cChangeMode Cambia el modo del Filer.
25 cEDIT Edita el objeto actual.
26 cCOPY Copia los objetos seleccionados.
27 cMOVE Mueve los objetos seleccionados.
28 cRCL Recupera los objetos seleccionados a la pila.
29 cPURGE Elimina los objetos seleccionados.
30 cRENAME Renombra el objeto actual.
31 cNewObject Mustra un dialogo con opciones para crear un nuevo objeto.
32 cORDER Reordena las variables en la carpeta actual.
33 cZIP Si BZ esta presente muestra un dialogo con opciones para comprimir el objeto actual.
34 cLINK Muestra un dialogo con opciones para enviar/recibir variables.
35 cCustom Cambia el menu actual con la lista almacenada en la variable F48.CST
36 cPageUp Desplaza el Filer una ventana arriba.
37 cPageDown Desplaza el Filer una ventana abajo.

Para ejecutar un programa personal, el Elemento_Acción deberá de encontrarse en el rango 16-23. Cada uno de estos siete valores especifica lo que habrá en la pila y cómo tu programa será ejecutado.

La siguiente tabla lista la forma de cada llamada:


Valor Constante Descripcion
16 cPathOnly Recupera sólo el path.
1: Path
17 cSingleObject Recupera el nombre y el contenido del objeto actual.
3: Path
2: Objeto
1: Nombre
18 cMultipleObjects Equivalente al anterior, pero maneja los objetos seleccionados.
2n+2: Path
...
5: Objeto 2
4: Nombre 2
3: Objeto 1
2: Nombre 1
1: Número de objetos (número real)
19 cProgramLoop El programa es llamado una vez por cada objeto seleccionado. Cada vez lo siguiente estará en la pila antes de ejecutar el programa.
3: Path
2: Objeto
1: Nombre
20 cSingleName Recupera sólo el nombre del objeto actual.
2: Path
1: Nombre
21 cMultipleNames Recupera todos los nombres seleccionados.
n+2: Path
...
3: Nombre 2
2: Nombre 1
1: Número de nombres (número real)
22 cStrSingle Recupera el objeto actual en una String de direcciones.
2: Path
1: String
23 cStrMultiple Recupera los objetos seleccionados en una String de direcciones.
2: Path
1: String

Cuando el programa es llamado sobre una libreria en la raíz de algún puerto, el nombre será el número de la librería como un real


Explicación de la String (llamadas 22 & 23)

La string regresada por Filer48 es una lista de direcciones. Sólo la puedes utilizar desde Lenguaje Ensamblador.

La string es como sigue:


Prologo

02A2C  Tamaño  DirNombre1  DirObjeto1  DirNombre2  DirObjeto2...

Cada dirección ocupa 5 Nibbles.


Programa_Personal


Cuando utilices un programa personal, este argumento debe contener dicho programa. Hay algunas caracteristicas adicionales que pueden ser utiles:


1 Si corres el programa desde VAR, tu programa iniciara en la carpeta explorada actualmente.
2 Un programa solo puede ser ejecutado sobre objetos existentes.
3 Si quieres salir de Filer48 luego de correr tu programa, debes dejar TakeOver en la pila, ejemplo: { "QUIT" fEverywhere cPathOnly :: DROP ' TakeOver ; }

Tecla_AccesoRápido


Utiliza este argumento para asignar un programa a una tecla de la HP. Este argumento puede ser un número hex o un bint en la forma # axx, donde a es 1 o 0, queriendo decir con alpha o sin alpha respectivamente. xx es el código de la tecla, opcionalmente le puedes sumar #40 para el Shift Izquierdo o #C0 para el Shift Derecho.

Por ejemplo, si quieres asignar un programa a: Shift_Izquierdo + MTH, el número deberá ser # 47h:  donde #07 representa la tecla MTH, y #40 para el Shift Izquierdo.


NOTA: Para las llamadas Internas éste argumento deberá ser el cuarto dentro de la sublista y para las llamadas Personales deberá ser el quinto argumento. Porfavor revisa todos los ejemplos incluídos en la carpeta Custom.

Advertencia: Para ahorrar memoria, utilicé apuntadores para llevar la pista de los objetos dentro del Filer, así que si modificas la estructura de las carpetas en tus programas (usando, STO, PURGE, etc) entonces NUNCA uses la llamada 19 porque la HP se colgará. Y si eres un buen programador con experiencia, puedes utilizar las llamadas 22 y 23.