|
|
|||||||||
Sí puedes leer esta frase, la página ha sido actualizada. |
| El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España. |
| INFORMACIÓN de ICONOS |
|
Por David T. McClellan
Los programas que se ejecutan desde el CLI (Command Line Interface) son sencillos. Sin embargo, los escritos en Modula-2, C o ensamblador, cogen todos sus argumentos desde una simple línea de comandos. Los usuarios no están acostumbrados a estos métodos, no obstante, deben de utilizar cualquiera de estos lenguajes o scripts CLI para ejecutar los programas. Generalmente, los usuarios prefieren programas que puedan ejecutarse desde el Workbench simplemente haciendo un doble click sobre la aplicación. ¿Cómo conseguir que un programa haga feliz al usuario y a la vez obtener una buena recepción de los argumentos y otras definiciones del usuario?. Esto requiere información en el programa y unos iconos para archivar los datos. Usted deberá saber como se encuentra almacenada la información de los iconos. Como primer paso, deberá de crear y salvar un pequeño archivo de documento con Notepad o cualquier otro editor de textos, seleccionar el archivo del icono, y cambiar la información desde la opción Info en el menú del Workbench. Esta opción abre una opción, listando el tipo de archivo (proyecto), la herramienta por defecto (el path hacia Notepad), y un listado ampliable de Tipos de Herramientas. Los Tipos de Herramientas se encuentran donde sus programas se almacenan y buscan una información adicional. Cada Tipo de Herramienta esta en el formato: NAME: cadena de parámetros Como en: NAME es el nombre de las opciones de Tipo de Herramienta, y la cadena igualada representa los parámetros al usar Notepad. En el segundo ejemplo, la barra (/) separa dos subopciones del Tipo de Herramienta FILETYPE. Ahora, al seleccionar el icono de Notepad, podrá ver la información -el tipo de archivo es herramienta, no es una herramienta por defecto, y es una lista de Tipos de Herramientas.
|
|
El programa puede extraer similar información de los iconos de archivos transferidos a otro WBArgs. Por ejemplo, Notepad contiene un tamaño de ventana, una fuente de letra base, y archivos de tipos de información en el icono de cada documento salvado, y usa estos cuando usted inicia la vía de un icono de cualquier documento.
Cada icono es una estructura DickObject que puede obtener utilizando el nombre del icono. La parte de este DiskObject es una lista de Tipos de Herramientas del programa a los cambios del comando Info del Workbench. Para cargar el DiskObject, su programa deberá llamar al GetDiskObject() con el campo waName de una estructura WBarg. Luego puede analizar las opciones con otros dos métodos desde MODULE Workbench FindToolType() y MatchToolValue(). FindToolType saca la cadena NAME= Tipo de Herramienta, mientras MatchToolValue() escanea estas cadenas para /-separar subopciones y llamar a su programa.
Por ejemplo, usted tiene un pequeño programa en Modula-2 llamado Fred, con un icono llamado fred.info. Usando Info, usted almacena el siguiente Tipo de Herramientas en Fred.info:
SCREEN=320*200
Prince=title/red/corvette
El veloz juego de los fragmentos de código se muestra a continuación:
MODULE Fred:
(* lo que necesita para importar desde icono *)
FROM SYSTEM IMPORT ADDRESS, ADR;
FROM AmigaDos IMPORT FileLock, CurrentDir;
FROM System IMPORT argc, argv, WBenchMsg;
FROM Libraries IMPORT OpenLibrary, CloseLibrary;
FROM Workbench IMPORT IconName, IconBase;
DIskObject, DiskObjectPtr, DiskObjectType, WBArg, WBArgPtr, WBStartupPtr, GetDiskObject, FreeDiskObject, FindToolType, MatchToolValue;
(* comenzando el módulo principal *)
1 CONST
ScreenOpt="SCREEN";
PrinceOpt="Prince";
rdOpt="red";
2 VAR
wbArg : WBArgPtr
wbStartup : WBSTartupPtr;
dObj : DiskObjectPtr;
toolType : ADDRESS;
isRed : CARDINAL;
nArgs : INTEGER;
formerDir : FileLock;
BEGIN
3 IF argc=0 THEN
(* llamada desde el Workbench. Abre librería de iconos *)
4 IconBase :=OpenLibrary(ADR(IconName),0D);
IF IconBase=NIL THEN
CleanQuit("No icon.library");
END
wbStartup :=WBenchMsg;
wbArg :=ADDRESS(wbStartup^.smArgList);
nArgs :=wbStartup^.smNumArgs;
(* ahora chequea los iconos del programa *)
5 IF wbArg^.waLock # NIL THEN
formerDir
:=CurrentDir(wbArg^.waLock);END;
dObj :=GetDiskObject (wbArg^.waName);
IF wbArg^.waLock # NIL THEN
formerDir :=CurrentDir(formerDir):END;
IF dObj=NUL THEN
CleanQuit
END;
6 toolType
:=FindToolType(dObj^.doToolTypes, aDR (Screen));
IF toolType # NIL THEN
ELSE
END;
toolType
:=FindToolType(dObj^.doToolTypes,ADR(PrinceOpt));
IF toolType # NIL YHEN
7 isRed := MatchToolValue(toolType,ADR(redOpt));
ELSE
isRed :=0,END;
IF isRed=1 THEN
END;
8 FreeDiskObject (dObj^);
CloseLibrary (IconBase^);
Primero configure las constantes y variables. El paso 1 contiene las constantes de cadenas necesarias para FindToolType() y MatchToolValue(). El paso 2 saca las variables del WBStartup. WBArg y la estructura de datos del archivo, en la misma medida que un puntero regresa hacia la cadena del byte por FindToolType(), se saca un CARDINAL al 1 ó 0 regresando hasta MatchToolValue(), y un FileLock si el programa ha cambiado los directorios al cargar un icono.
En el paso 3, si un programa es llamado desde el Workbench, su valor argc es 0. Si argc es distinto de 0, Fred sería llamado desde el CLI y en denominado de complemento.
Una vez Fred conozca estos datos, comenzará desde el Workbench, cargará la icon.library para usar las funciones de los iconos.
Para hacerlo, se llama al OpenLibrary() para el IconBase. Paso 4 debería comprobar el fallo, Fred llamada CleanQuit(), una rutina lo comprueba y si falla lo anuncia en pantalla. Una vez se ha mostrado el icono, la librería se carga. Fred inicializa la variable WBArg para ser listada en wbStartup y cargada como su propio icono.
Paso 5, el programa chequea para ver si necesita cambiar el directorio en uso para cargar el archivo de icono. Se wbArgwaLock no es NIL, Fred usa CurrentDir (una función del AmigaDOS) con wbArg.waLock para cambiar los directorios hacia el lugar del icono. Después se carga el DiskObject del icono en el interior de dObj y, si es necesario, de nuevo recurre a CurrentDir para regresar al directorio previo.
Paso 6, Fred esta finalmente preparado para chequear los cambios del Tipo de Herramienta SCREEN. Llama a FindToolType() con un puntero hacia la cadena SCREEN y el listado del Tipo de Herramienta DiskObject, en dObj^.doToolTypes. Si FindToolTypes() encuentra SCREEN, regresa el puntero hacia Fred dependiendo del tamaño de la cadena. Si es imposible que esto suceda, FindToolType() regresa a NIL, dejando a Fred libre para elegir por defecto.
A continuación en el paso 7, Fred chequeará para ver si existe Prince y contiene "red" como una subopción. Fred coge primero la cadena para Prince con FindToolType() y rojo. Si MatchToolValue() localiza la subopción "red", regresa a 1, si no regresa a 0. Paso 8, esto es todo amigos.
Para establecer tu propio valor, puede modificar (cuidadosamente) el listado Tool-Types (Tipo de Herramientas), situando memoria extra sobre el FreeList de DiskObject y copiar valores dentro de él. Seguidamente use el procedimiento PutDiskObject() con waName. Intente todo esto fuera, para realizar sus propios programas.
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|