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
Tipo di notifica.
Valore
Significato
fdintCABINET_INFO
0x00
Informazioni generali sull'armadio.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punterà al nome del successivo cabinet (escluse le informazioni sul percorso)
psz2 punterà al nome del disco successivo
psz3 punterà al nome del percorso cab
setID sarà uguale all'ID set del cabinet corrente
iCabinet sarà uguale al numero di gabinetto all'interno del set di armadi (0 per il primo cabinet, 1 per il secondo cabinet e così via).
L'applicazione deve restituire 0 per indicare l'esito positivo o -1 per indicare un errore, che interrompe FDICopy. Verrà fornita una notifica di fdintCABINET_INFO una volta per ogni cabinet aperto da FDICopy; sono inclusi i contenitori di continuazione aperti a causa di file che si estendono sui limiti del cabinet.
fdintPARTIAL_FILE
0x01
Il primo file nell'archivio cab è una continuazione di un file dal file cab precedente.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punterà al nome del file continuato da un cabinet precedente
psz2 punterà al nome del cabinet in cui esiste il primo segmento del file
psz3 punterà 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 cabinet che hanno continuato da un gabinetto precedente. Questa notifica si verificherà solo quando FDICopy viene avviato nel secondo o successivo cabrio di una serie, con file continui da un archivio precedente. L'applicazione deve restituire 0 per esito positivo o -1 per indicare un 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 punterà al nome di un file nel cabinet
cb sarà uguale alla dimensione non compressa del file
data sarà uguale alla data di MS-DOS a 16 bit del file
tempo sarà uguale all'ora di MS-DOS a 16 bit del file
attribs sarà uguale agli attributi di MS-DOS a 16 bit del file. Inoltre, il flag _A_NAME_IS_UTF viene impostato se il nome del file deve essere interpretato come UTF-8.
Si noti che i membri precedenti provengono direttamente dal file cab.
Se il file cab è dannoso, il nome potrebbe contenere caratteri di nome file non validi o dannosi.
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 diverso da zero (e non negativo-uno) che indica dove scrivere il file. L'handle di file deve essere compatibile con la funzione PFNCLOSE fornita per FDICreare. La notifica fdintCOPY_FILE viene chiamata per ogni file che inizia all'interno dell'archivio cabrio corrente, offrendo all'applicazione la possibilità di richiedere che il file venga copiato o ignorato.
fdintCLOSE_FILE_INFO
0x03
Chiudere il file, impostare le informazioni pertinenti.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punterà al nome di un file nel cabinet
fdintCOPY_FILE
data data sarà uguale alla data di MS-DOS a 16 bit del file
tempo tempo sarà uguale all'ora di MS-DOS a 16 bit del file
attributi di di attribs sarà uguale agli attributi di 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 (utilizzando il handle di) e impostare la data, l'ora e gli attributi del file. L'applicazione deve restituire TRUE per l'esito positivo e false o -1 per interrompere FDICopy. FDI presuppone che il file di destinazione sia stato chiuso, anche se il callback restituisce un errore; FdI non tenterà di usare PFNCLOSE per chiudere il file.
fdintNEXT_CABINET
0x04
Il file ha continuato a passare all'archivio successivo.
Quando questo valore viene impostato, la struttura FDINOTIFICATION viene popolata con le informazioni seguenti:
psz1 punterà al nome del successivo cabinet in cui il file corrente è continuato
psz2 sarà un handle di file (originato da fdintCOPY_FILE)
psz3 punterà alle informazioni sul percorso cab
fdie sarà uguale a un valore di esito positivo o di errore
Questa notifica viene chiamata solo se fdintCOPY_FILE viene richiesto di copiare un file, che viene continuato da un archivio successivo, al cab corrente. Poiché è possibile che l'applicazione modifichi il nome cab, è importante che il nome del percorso cab, indicato da psz3, venga convalidato prima che venga restituito. Inoltre, l'applicazione deve garantire che il cabinet esista ed è leggibile prima di restituire; se necessario, l'applicazione deve emettere una richiesta di modifica del disco per confermare.
Quando questa funzione torna a FDI, fdi verificherà che il setID e iCabinet campi del cabinet fornito corrispondano ai valori previsti per tale cabinet. In caso contrario, fdI continuerà a inviare fdintNEXT_CABINET messaggi di notifica con il campo fdie impostato su FDIERROR_WRONG_CABINET, fino a quando non viene specificato il file CAB corretto o fino a quando questa funzione non restituisce -1 e interrompe la chiamata FDICopy. Se, dopo la restituzione da questa funzione, il file cab 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 un errore, che interromperà FDICopy.