A macro FNFDINOTIFY fornece a declaração para que a função de notificação de retorno de chamada definida pelo aplicativo atualize o aplicativo sobre o status do decodificador.
Sintaxe
void FNFDINOTIFY(
fn
);
Parâmetros
fn
O tipo de notificação.
Valor
Significado
fdintCABINET_INFO
0x00
Informações gerais sobre o gabinete.
Quando esse valor é definido, a estrutura FDINOTIFICATION é preenchida com as seguintes informações:
psz1 apontará para o nome do próximo gabinete (excluindo informações de caminho)
psz2 apontará para o nome do próximo disco
psz3 apontará para o nome do caminho do gabinete
setID será igual à ID definida do gabinete atual
iCabinet será igual ao número do gabinete dentro do conjunto de gabinetes (0 para o primeiro gabinete, 1 para o segundo gabinete etc.)
O aplicativo deve retornar 0 para indicar êxito ou -1 para indicar falha, o que anulará FDICopy. Uma notificação fdintCABINET_INFO será fornecida uma vez para cada gabinete aberto por FDICopy; isso inclui gabinetes de continuação abertos devido a arquivos que abrangem os limites do gabinete.
fdintPARTIAL_FILE
0x01
O primeiro arquivo no gabinete é uma continuação de um arquivo do gabinete anterior.
Quando esse valor é definido, a estrutura FDINOTIFICATION é preenchida com as seguintes informações:
psz1 apontará para o nome do arquivo continuado de um gabinete anterior
psz2 apontará para o nome do gabinete no qual o primeiro segmento do arquivo existe
psz3 apontará para o nome do disco no qual o primeiro segmento do arquivo existe
A notificação fdintPARTIAL_FILE é chamada para arquivos no início de um gabinete que continuaram de um gabinete anterior. Essa notificação ocorrerá somente quando FDICopy for iniciado no segundo ou posterior gabinete de uma série, que tem arquivos continuados de um gabinete anterior. O aplicativo deve retornar 0 para êxito ou -1 para indicar falha.
fdintCOPY_FILE
0x02
Informações que identificam o arquivo a ser copiado.
Quando esse valor é definido, a estrutura FDINOTIFICATION é preenchida com as seguintes informações:
psz1 apontará para o nome de um arquivo no gabinete
cb será igual ao tamanho descompactado do arquivo
data será igual à data de MS-DOS de 16 bits do arquivo
tempo será igual ao tempo de MS-DOS de 16 bits do arquivo
atribuições será igual aos atributos de MS-DOS de 16 bits do arquivo. Além disso, o sinalizador _A_NAME_IS_UTF será definido se o nome do arquivo for destinado a ser interpretado como UTF-8.
Observe que os membros acima vêm diretamente do arquivo do gabinete.
Se o arquivo de gabinete for mal-intencionado, o nome poderá conter caracteres de nome de arquivo ilegais ou mal-intencionados.
O aplicativo deve retornar um dos três valores; 0 para ignorar (ou seja, não copiar) o arquivo; -1 (negativo) para anular FDICopy; ou um identificador de arquivo diferente de zero (e não negativo-um) que indica onde gravar o arquivo. O identificador de arquivo deve ser compatível com a função PFNCLOSE fornecida para FDICreate. A notificação fdintCOPY_FILE é chamada para cada arquivo que começa no gabinete atual, fornecendo a oportunidade para o aplicativo solicitar que o arquivo seja copiado ou ignorado.
fdintCLOSE_FILE_INFO
0x03
Feche o arquivo, defina informações relevantes.
Quando esse valor é definido, a estrutura FDINOTIFICATION é preenchida com as seguintes informações:
psz1 apontará para o nome de um arquivo no gabinete
hf será um identificador de arquivo (que se originou de fdintCOPY_FILE)
data data será igual à data de MS-DOS de 16 bits do arquivo
hora tempo será igual ao tempo de MS-DOS de 16 bits do arquivo
atribuições atributos serão iguais aos atributos de MS-DOS de 16 bits do arquivo (menos o bit _A_EXEC)
cb será igual a 0 ou 1, indicando se o arquivo deve ser executado após extração (1) ou não (0)
É responsabilidade do aplicativo executar o arquivo se cb igual a 1. A notificação de fdintCLOSE_FILE_INFO é chamada depois que todos os dados são gravados em um arquivo de destino. O aplicativo deve fechar o arquivo (usando o identificador de hf fornecido) e definir a data, a hora e os atributos do arquivo. O aplicativo deve retornar TRUE para êxito e FALSE ou -1 para anular FDICopy. A FDI pressupõe que o arquivo de destino foi fechado, mesmo que esse retorno de chamada retorne uma falha; A FDI não tentará usar PFNCLOSE para fechar o arquivo.
fdintNEXT_CABINET
0x04
O arquivo continuou para o próximo gabinete.
Quando esse valor é definido, a estrutura FDINOTIFICATION é preenchida com as seguintes informações:
psz1 apontará para o nome do próximo gabinete no qual o arquivo atual continua
psz2 será um identificador de arquivo (que se originou de fdintCOPY_FILE)
psz3 apontará para as informações do caminho do gabinete
fdie será igual a um valor de êxito ou erro
Essa notificação será chamada somente se fdintCOPY_FILE for instruído a copiar um arquivo, que continua de um gabinete subsequente, para o gabinete atual. Como é possível que o aplicativo modifique o nome do gabinete, é importante que o nome do caminho do gabinete, indicado por psz3, seja validado antes de ser retornado. Além disso, o aplicativo deve garantir que o gabinete exista e seja legível antes de retornar; se necessário, o aplicativo deve emitir um prompt de alteração de disco para confirmar.
Quando essa função retornar à FDI, a FDI verificará se os campos setID e iCabinet do gabinete fornecido correspondem aos valores esperados para esse gabinete. Caso contrário, a FDI continuará a enviar mensagens de notificação fdintNEXT_CABINET com o campo fdie definido como FDIERROR_WRONG_CABINET, até que o arquivo de gabinete correto seja especificado ou até que essa função retorne -1 e anule a chamada do FDICopy. Se, depois de retornar dessa função, o arquivo de gabinete não estiver presente, legível ou tiver sido danificado, o campo fdie será igual a um dos seguintes valores:
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
Se não houver erro, fdie será igual a FDIERROR_NONE. O aplicativo deve retornar 0 para indicar êxito ou -1 para indicar falha, o que anulará FDICopy.