• No results found

MASTER’S PROJECT TOPICS INTEGRATED URBAN PROJECTS CONTENT FRAMEWORK: INTRODUCING NEW INSTRUMENTS: IUPS INTEGRATE

In document integrated urban planning: (Page 75-79)

The Case of Pančevo

MASTER’S PROJECT TOPICS INTEGRATED URBAN PROJECTS CONTENT FRAMEWORK: INTRODUCING NEW INSTRUMENTS: IUPS INTEGRATE

Este handler se debe ser invocado por la interface cada vez que esta arranque, en el se implementa la conexión con el kernel usando las funciones implementadas en la librería común, descripta anteriormente en el Capitulo IV.

En este ejemplo se implemento también otra DLL usada para que toolbook determine dado un nombre, la identificación Interna del objeto y dada la identificación interna de un objeto el nombre de este para toolbook. Esta DLL lee el archivo de nombres mencionado en el Capitulo IV y llena unas estructuras internas a la DLL con estos datos, los cuales permanecen accesibles a toolbook el resto del tiempo que dure la ejecución de la Interface.

Esta DLL posee las siguientes rutinas que debe invocar la Interface que la use :

function buildTablef w ord ) : w ord ; e x p o r t;

Esta función carga la tabla de nombres en las estructuras internas de la DLL, el parámetro que recibe es el handler al área de memoria donde se encuentra el nombre del archivo, en forma de un string terminado en el carácter nulo.

Esta función retorna uno si la operación fue exitosa y cero en caso contrarío, function le n T a b le f): w ord ; e x p o r t;

Esta función retoma la cantidad de elementos que tiene la tabla que se arma con la función previa, si esta no fue armada o hubo un error en el armado, retorna cero.

Ejemplo de implementación.

fun ction hayNameAt( w ord ) : w ord ; e x p o r t;

Determina si, dada una identificación intema de un objeto de la hiperhistoria, hay un nombre de interface asociado a ella. Si es asi esta función retorna uno, en caso contrario retorna cero,

fun ction nameAt( w ord ) : w ord ; e x p o r t;

Dada una identificación Interna, esta función retorna el nombre de interface que corresponda, en realidad, retorna el handler al área de memoria donde se encuentra este nombre en forma de un string terminado en carácter cero,

fun ction idOf( w o rd ) : w ord ; e x p o r t;

Esta función determina, dado el nombre de interface del objeto, la identificación intema de este, el parámetro que se pasa debe ser el handler de un área de memoria donde estará el nombre como un string terminado en cero. Esta función retorna la identificación Interna del objeto en caso que este exista, en caso contrario retorna FFFF hex.

Ahora veremos la implementación del handler utilizado para la inicialización de la interface y su conexión con el K ernel:

to handle initialize aC onfigFile system _a_Pascal, _a_Message

linkD LL "NCOMMON.DLL" w ord inrtlib()

w ord registrarTool( w o r d ) w o rd pasHandle()

w o rd tPostM essage( w ord, w ord, w ord, dw ord ) end linkD LL

Handler del kernel y mensaje común que se usará para la comunicación.

Se liga con la librería común para usar sus funciones. Inicializa la librería y determina el mensaje común. Función para registrar la interface en la librería Determina el handler de la aplicación ( Kernel).

Implementa la función postM essage de Windows.

linkD LL kernel Librería de Windows para el manejo de la memoria.

w ord globalA lloc( w ord, dw ord ) po in te r globalLock( w o r d ) w o rd globalU nlock( w o r d ) w o rd globalFree( w o r d ) end linkDLL

linkD LL "FORINTER.DLL" Librería especifica para la interface toolbook. Manejo de nombres

w o rd buildTable( w ord ) w o rd lenTable() w o rd hayNameAt( w o r d ) w ord nameAt( w o r d ) w ord idOf( w o r d ) end linkDLL

linkD LL "TB30DO S.DLL" Función para determinar si un archivo existe.

in t file E xists( string ) end linkD LL

if aC onfigFile=NULL then Si no se especifica un archivo de configuración usar config.pas

set aC onfigFile to "co nfig .p as” end

Ejemplo de implementación.

if fileExists( aConfigFile ) * 1 Si existe el archivo de configuración, seguir con la inicialización.

get putName( aConfigFile ) Guarda el nombre en un área de memoria y obtiene su handler.

get buildTable( it ) if it a 0 then

Arma la tabla de nombres interna con el archivo que se indica. Si no pudo arm arla tabla entonces cancela la inicialización.

send errorEnLaTabla end

set _a_Message to initLib() Inicializa NCOMMON.DLL y obtiene el mensaje de Windows común.

get registrarTool( SYSWINDOWHANDLE ) Registra en NCOMMON.DLL el handler de la instancia de la

else

if itoO

translateWindowMessage send iniciaConn to this book

interface que esta ejecutándose.

Si ya había una interface activa (re g ls tr a rT o o l retornó 1). Comienza el contacto con la interface.

En caso contrario.

Hace que toolbook cuando reciba el mensaje común envíe el evento

In ic ia C o n n al libro ( espera la activación del kernel)

before (_a_Message) send IniciaConn to this book end

end if

else Si no encuentra el archivo de nombres cancela la inicialización.

send fileNotFound aConfigFile to this book end if

end initialize

La función putName que aparece en el código precedente lo que hace es reservar un área de memoria y almacenar el string que se pasa como parámetro en ella, retornando el handler a dicha área.

El siguiente handler se ejecutará una vez que el kemel este activo, para redireccionar los mensajes de Windows para que cuando toolbook los reciba invoque el handler msgPascal.

to handle iniciaConn hwnd, winmsg, wp, Iplo, Iphi

system _a_Pascal, _a_Message Handler del kemel y mensaje común que se usará para la comunicación.

set _a_Pascal to pasHandlef) Obtiene el handler del kernel.

unTranslateWindowMessage (_a_Message) Desactiva el reenvío anterior del mensaje común de Windows.

translateWindowMessage Hace que toolbook cuando reciba el mensaje común envíe el evento

m s g P a s c a l al libro ( espera evento del K ernel)

before (_a_Message) send msgPascal to this book end

end iniciaConn

Luego, a partir de que este último handler se ejecute, la comunicación con la interface queda establecida, a partir de este momento el Kernel esta funcionando y envía eventos hacia la interface y esta puede hacer lo propio según las acciones del usuario.

In document integrated urban planning: (Page 75-79)