La macro FNFDINOTIFY fornisce la dichiarazione per la funzione di notifica di callback definita dall'applicazione per aggiornare l'applicazione sullo stato del decodificatore.
Sintassi
void FNFDINOTIFY(
fn
);
Parametri
fn
Il tipo di notifica.
Valore
Significato
fdintCABINET_INFO
0x00
Informazioni generali sul gabinetto.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punta al nome del successivo gabinetto (escluse le informazioni sul percorso)
psz2 punta al nome del disco successivo
psz3 punta al nome del percorso del gabinetto
setID sarà uguale all'ID set del gabinetto corrente
iCabinet sarà uguale al numero di gabinetto all'interno del set di gabinetto (0 per il primo gabinetto, 1 per il secondo gabinetto e così via)
L'applicazione deve restituire 0 per indicare l'esito positivo o -1 per indicare l'errore, che interromperà FDICopy. Una notifica di fdintCABINET_INFO verrà fornita una volta per ogni gabinetto aperto da FDICopy; sono inclusi i contenitori di continuazione aperti a causa di file che coprono i limiti del gabinetto.
fdintPARTIAL_FILE
0x01
Il primo file nel gabinetto è una continuazione di un file dal gabinetto precedente.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punta al nome del file continuato da un archivio precedente
psz2 punta al nome del gabinetto su cui esiste il primo segmento del file
psz3 punta al nome del disco in cui esiste il primo segmento del file
La notifica fdintPARTIAL_FILE viene chiamata per i file all'inizio di un archivio che hanno continuato da un archivio precedente. Questa notifica si verifica solo quando FDICopy viene avviato nel secondo o successivo gabinetto in una serie, che ha file continuati da un archivio precedente. L'applicazione deve restituire 0 per esito positivo o -1 per indicare l'errore.
fdintCOPY_FILE
0x02
Informazioni che identificano il file da copiare.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punta al nome di un file nel gabinetto; cb sarà uguale alla dimensione non compressa del file
data uguale alla data MS-DOS a 16 bit del file
tempo uguale al tempo di MS-DOS a 16 bit del file
attribs corrisponderà agli attributi MS-DOS a 16 bit del file
L'applicazione deve restituire uno dei tre valori; 0 per ignorare (ad esempio, non copiare) il file; -1 (uno negativo) per interrompere FDICopy; o un handle di file non zero (e non negativo-uno) che indica dove scrivere il file. L'handle di file deve essere compatibile con la funzione PFNCLOSE fornita a FDICrea. La notifica di fdintCOPY_FILE viene chiamata per ogni file che inizia all'interno dell'archivio corrente, fornendo la possibilità all'applicazione di richiedere che il file venga copiato o ignorato.
fdintCLOSE_FILE_INFO
0x03
Chiudere il file, impostare informazioni pertinenti.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punta al nome di un file nel gabinetto
hf sarà un handle di file (che ha origine da fdintCOPY_FILE)
Data di data uguale alla data di MS-DOS a 16 bit del file
tempo uguale al tempo di MS-DOS a 16 bit del file
gli attributi attribs equivalgono agli attributi MS-DOS a 16 bit del file (meno il bit di _A_EXEC)
cb sarà uguale a 0 o 1, che indica se il file deve essere eseguito dopo l'estrazione (1) o meno (0)
È responsabilità dell'applicazione eseguire il file se cb è uguale a 1. La notifica fdintCLOSE_FILE_INFO viene chiamata dopo che tutti i dati sono stati scritti in un file di destinazione. L'applicazione deve chiudere il file (usando l'handle hf fornito) e impostare la data, l'ora e gli attributi del file. L'applicazione deve restituire TRUE per esito positivo e FALSE o -1 per interrompere FDICopy. L'ide presuppone che il file di destinazione sia stato chiuso, anche se questo callback restituisce un errore; FdI non tenterà di usare PFNCLOSE per chiudere il file.
fdintNEXT_CABINET
0x04
Il file continuava a eseguire il gabinetto successivo.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punta al nome del successivo gabinetto in cui viene continuato il file corrente
psz2 sarà un handle di file (che ha origine da fdintCOPY_FILE)
psz3 punta alle informazioni sul percorso del gabinetto
fdie sarà uguale a un valore di esito positivo o di errore
Questa notifica viene chiamata solo se fdintCOPY_FILE viene incaricato di copiare un file, che viene continuato da un archivio successivo, al gabinetto corrente. Poiché è possibile che l'applicazione modifichi il nome del gabinetto, è importante che il nome del percorso del gabinetto, indicato da psz3, venga convalidato prima che venga restituito. Inoltre, l'applicazione deve assicurarsi che l'archivio esista e sia leggibile prima di restituire; se necessario, l'applicazione deve emettere una richiesta di modifica del disco per confermare.
Quando questa funzione viene restituita all'istanza di fdI, il setID e iCabinet campi del gabinetto fornito corrispondono ai valori previsti per tale archivio. In caso contrario, l'istanza fdI continuerà a inviare messaggi di notifica fdintNEXT_CABINET con il campo fdie impostato su FDIERROR_WRONG_CABINET, fino a quando non viene specificato il file di cabinet corretto o fino a quando questa funzione restituisce -1 e interrompe la chiamata FDICopy . Se, dopo aver restituito da questa funzione, il file di cabinet non è presente, leggibile o danneggiato, il campo fdie sarà uguale a uno dei valori seguenti:
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 non si è verificato alcun errore, fdie sarà uguale a FDIERROR_NONE. L'applicazione deve restituire 0 per indicare l'esito positivo o -1 per indicare l'errore, che interromperà FDICopy.