Ejemplo de lenguaje Fortran
Este ejemplo utiliza el siguiente nombre de archivo: ' libenv.f.
Código
Las clases de entorno y biblioteca compartida proporcionan información sobre el entorno y las bibliotecas asociadas a un AE. Este ejemplo toma un argumento, un entero. Si el entero es igual a 0, el AE emite el entorno que ve. Si el entero es igual a 1, el AE busca el entorno como biblioteca.
program logRunUdtf
call nzaeRun()
stop
end
subroutine nzaeHandleRequest(handle)
integer outputType, hasNext, isNull
hasNext = -1
outputType = -1
isNull = -1
c GET INPUT.
call nzaeGetNext(handle, hasNext)
if (hasNext .eq. 0) then
return
endif
c OUTPUT EITHER THE ENVIRONMENT OR THE LIBRARIES.
call nzaeGetInputInt32(handle, 0, outputType, isNull)
if (outputType .eq. 0) then
call outputEnvironment(handle)
else
call outputLibraries(handle)
endif
return
end
subroutine outputEnvironment(handle)
character(1000) name, value
integer hasNext
name = "init"
value = "init"
hasNext = -1
c OUTPUT THE FIRST VALUE.
call nzaeGetFirstEnvironmentVariable(handle, name, value)
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, value)
call nzaeOutputResult(handle)
100 call nzaeGetNextEnvironmentVariable(handle, name, value, hasNext)
if (hasNext .eq. 0) then
return
endif
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, value)
call nzaeOutputResult(handle)
goto 100
end
subroutine outputLibraries(handle)
character(1000) name, path
integer number, autoload, onLibrary
name = "init"
path = "init"
number = -1
autoload = -1
onLibrary = 0
c GET THE NUMBER OF SHARED LIBRARIES.
call nzaeGetNumberOfSharedLibraries(handle, number)
c GET SHARED LIBRARY INFO.
200 if (onLibrary .eq. number) then
return
endif
call nzaeGetSharedLibraryInfo
+ (handle, onLibrary, name, path, autoload)
onLibrary = onLibrary + 1
c OUTPUT THE NAME AND PATH.
call nzaeSetOutputString(handle, 0, name)
call nzaeSetOutputString(handle, 1, path)
call nzaeOutputResult(handle)
goto 200
endUna compilación
Utilice la compilación estándar:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language fortran --version 3 \
--template compile libenv.fRegistro
Registra el ejemplo:
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language fortran --version 3 \
--template udtf --exe libenv --sig "lib_env(int4)" \
--return "table(name varchar(1000), value varchar(1000))"En ejecución
Tenga en cuenta que la salida de este ejemplo es específica del entorno. Por lo tanto, su resultado real se parecerá, pero no coincidirá, con el texto siguiente.
SELECT * FROM TABLE WITH FINAL(lib_env(1));
NAME | VALUE
----------------+--------------------------------------------------------
LIBNZAEADAPTERS | /nz/DATA/base/1/library/200245/host/libnzaeadapters.so
LIBNZAECHILD | /nz/DATA/base/1/library/200247/host/libnzaechild.so
LIBNZAEPARENT | /nz/DATA/base/1/library/200244/host/libnzaeparent.so
(3 rows)
SELECT * FROM TABLE WITH FINAL (lib_env(0)) LIMIT 5;
NAME | VALUE
-----------------------+-------------------------------------------------
NZAE_NZREP_VERSION | 6
NZREP_TEMP_FILE | /nz/tmp/nzrep_DYxBgF
NZREP_PARAMETER1 | 12
NZREP_PARAMETER0 | 11
NZAE_EXECUTABLE_PATH_RUN | /nz/export/ae/applications/system/admin/host/libenv
(5 rows)Nota: Esta salida puede variar, ya que el nombre puede ir precedido de un nombre de base de datos con puntos que lo separan del nombre de la biblioteca. Por ejemplo,
xxx..LIBNZAECHILD. Además, los números que aparecen en el nombre de la ruta de valores pueden ser diferentes y de la forma /nz/DATA/base/<dbOID>/library/<objectOID>/host/<libraryname>.so.