La macro FNFDINOTIFY proporciona la declaración de la función de notificación de devolución de llamada definida por la aplicación para actualizar la aplicación en el estado del descodificador.
Sintaxis
void FNFDINOTIFY(
fn
);
Parámetros
fn
Tipo de notificación.
Valor
Significado
fdintCABINET_INFO
0x00
Información general sobre el gabinete.
Cuando se establece este valor, la estructura IDFNOTIFICATION se rellena con la siguiente información:
psz1 apuntará al nombre del siguiente gabinete (excepto la información de ruta de acceso)
psz2 apuntará al nombre del siguiente disco.
psz3 apuntará al nombre de la ruta de acceso del gabinete.
setID será igual al identificador de conjunto del gabinete actual.
iCabinet será igual al número de gabinete dentro del conjunto de gabinetes (0 para el primer gabinete, 1 para el segundo gabinete, etc.)
La aplicación debe devolver 0 para indicar que se ha realizado correctamente o -1 para indicar un error, lo que anulará IDFCopy. Una notificación fdintCABINET_INFO se proporcionará una vez para cada gabinete abierto por IDFCopy; esto incluye los gabinetes de continuación abiertos debido a archivos que abarcan los límites del gabinete.
fdintPARTIAL_FILE
0x01
El primer archivo del gabinete es una continuación de un archivo del gabinete anterior.
Cuando se establece este valor, la estructura IDFNOTIFICATION se rellena con la siguiente información:
psz1 apuntará al nombre del archivo que continuó desde un gabinete anterior.
psz2 señalará el nombre del gabinete en el que existe el primer segmento del archivo.
psz3 apuntará al nombre del disco en el que existe el primer segmento del archivo.
Se llama a la notificación fdintPARTIAL_FILE para los archivos al principio de un gabinete que han continuado desde un gabinete anterior. Esta notificación solo se producirá cuando de IEDCopy se inicie en el segundo gabinete o posterior de una serie, que tiene archivos continuados de un gabinete anterior. La aplicación debe devolver 0 para que se realice correctamente o -1 para indicar un error.
fdintCOPY_FILE
0x02
Información que identifica el archivo que se va a copiar.
Cuando se establece este valor, la estructura IDFNOTIFICATION se rellena con la siguiente información:
psz1 apuntará al nombre de un archivo en el gabinete.
cb será igual al tamaño sin comprimir del archivo.
fecha será igual a la fecha de MS-DOS de 16 bits del archivo
hora será igual a la hora de MS-DOS de 16 bits del archivo.
attribs será igual a los atributos de MS-DOS de 16 bits del archivo. Además, la marca _A_NAME_IS_UTF se establece si el nombre de archivo está pensado para interpretarse como UTF-8.
Tenga en cuenta que los miembros anteriores proceden directamente del archivo del gabinete.
Si el archivo del gabinete es malintencionado, el nombre puede contener caracteres de nombre de archivo no válidos o malintencionados.
La aplicación debe devolver uno de los tres valores; 0 para omitir (es decir, no copiar) el archivo; -1 (uno negativo) para anular de IEDCopy ; o un identificador de archivo distinto de cero (y no negativo) que indica dónde escribir el archivo. El identificador de archivo debe ser compatible con la función PFNCLOSE proporcionada para IDFCreate. Se llama a la notificación fdintCOPY_FILE para cada archivo que se inicia en el gabinete actual, lo que proporciona la oportunidad de que la aplicación solicite que se copie o omita el archivo.
fdintCLOSE_FILE_INFO
0x03
Cierre el archivo y establezca la información pertinente.
Cuando se establece este valor, la estructura IDFNOTIFICATION se rellena con la siguiente información:
psz1 apuntará al nombre de un archivo en el gabinete.
hf será un identificador de archivo (que se originó en fdintCOPY_FILE)
fecha fecha será igual a la fecha de MS-DOS de 16 bits del archivo
tiempo tiempo será igual al tiempo de MS-DOS de 16 bits del archivo.
atributos de de attribs será igual a los atributos de MS-DOS de 16 bits del archivo (menos el bit de _A_EXEC)
cb será igual a 0 o 1, lo que indica si el archivo se debe ejecutar después de extraer (1) o no (0)
Es responsabilidad de la aplicación ejecutar el archivo si cb es igual a 1. Se llama a la notificación fdintCLOSE_FILE_INFO después de escribir todos los datos en un archivo de destino. La aplicación debe cerrar el archivo (con el identificador hf proporcionado) y establecer la fecha, hora y atributos del archivo. La aplicación debe devolver TRUE para que se realice correctamente y false o -1 para anular . LA IED supone que el archivo de destino se cerró, incluso si esta devolución de llamada devuelve un error; LA IED no intentará usar PFNCLOSE para cerrar el archivo.
fdintNEXT_CABINET
0x04
El archivo continuó hasta el siguiente gabinete.
Cuando se establece este valor, la estructura IDFNOTIFICATION se rellena con la siguiente información:
psz1 señalará el nombre del siguiente gabinete en el que se continúa el archivo actual.
psz2 será un identificador de archivo (que se originó en fdintCOPY_FILE)
psz3 apuntará a la información de la ruta de acceso del gabinete
de iede será igual a un valor correcto o de error
Esta notificación solo se llama si se indica a fdintCOPY_FILE copiar un archivo, que continúa desde un gabinete posterior, al gabinete actual. Puesto que es posible que la aplicación modifique el nombre del gabinete, es importante que el nombre de la ruta de acceso del gabinete, indicado por psz3, se valide antes de que se devuelva. Además, la aplicación debe asegurarse de que el gabinete existe y es legible antes de volver; si es necesario, la aplicación debe emitir un mensaje de cambio de disco para confirmarlo.
Cuando esta función vuelve a la IED, la IED comprobará que el setID y iCabinet campos del gabinete suministrado coinciden con los valores esperados para ese gabinete. Si no es así, la IED seguirá enviando mensajes de notificación fdintNEXT_CABINET con el campo iede establecido en FDIERROR_WRONG_CABINET, hasta que se especifique el archivo de gabinete correcto, o hasta que esta función devuelva -1 y anule la llamada IDFCopy. Si, después de volver de esta función, el archivo del gabinete no está presente, legible o se ha dañado, el campo será igual a uno de los valores siguientes:
FDIERROR_CABINET_NOT_FOUND
FDIERROR_NOT_A_CABINET
FDIERROR_UNKNOWN_CABINET_VERSION
FDIERROR_CORRUPT_CABINET
FDIERROR_BAD_COMPR_TYPE
FDIERROR_RESERVE_MISMATCH
FDIERROR_WRONG_CABINET
Si no se produjo ningún error, iede será igual a FDIERROR_NONE. La aplicación debe devolver 0 para indicar que se ha realizado correctamente o -1 para indicar un error, lo que anulará IDFCopy.