/***************************** MODULE HEADER ********************************
 * fontgen.h
 *      The visible parts of the font file generation process - common to
 *      NT printer driver font installers.
 *
 * HISTORY:
 *  15:02 on Sat 22 Feb 1992    -by-    Lindsay Harris   [lindsayh]
 *      Started work on it for the general NT font installer
 *
 *   Copyright (C)  1992  Microsoft Corporation
 *
 *****************************************************************************/


/*
 *   A structure that collects all the information we need to do our
 * stuff.  The caller is returned one of these at FIOpen() time, and
 * returns it to us for each and every call.  This gives us the
 * information we need to do our job.
 */

typedef  struct
{
    HANDLE   hCurFile;          /* The existing font file - if any */
    HANDLE   hFixFile;          /* The new header part of file */
    HANDLE   hVarFile;          /* The variable part of the file */

    PWSTR    pwstrCurName;      /* Current name (may not exist) */
    PWSTR    pwstrFixName;      /* Name of temporary fixed file */
    PWSTR    pwstrVarName;      /* Name of temporary variable part of file */

    HANDLE   hHeap;             /* The heap - convenient at times */

    BYTE    *pbCurFile;         /* Memory mapped view of existing file */

    DWORD    dwID;              /* For verification of validity */
} FID;

#define FID_ID  0x66696420      /* "fid " */


/*
 *   The user builds a linked list of the following, and passes it to
 * us to allow us to add the nominated files to the existing font file.
 */

typedef  struct  _FONTLIST
{
    struct  _FONTLIST   *pFLNext;       /* Next in chain,  0 for the last */

    void       *pvFixData;              /* Address of fixed data */
    void       *pvVarData;              /* Variable component file name - 0
                                                if there is none.  */
} FONTLIST;

/*
 *   Function prototypes for dealing with these structures.
 */


FID   *pFIOpen( PWSTR, HANDLE );
BOOL   bFIClose( FID *, BOOL );
BOOL   bFIUpdate( FID *, int *, FONTLIST * );


/*
 *   Some function prototypes.  These are included here for our convenience.
 * The third parameter may differ on the actual function - that is up
 * to individual drivers.
 *   THESE FUNCTIONS ARE REQUIRED TO BE IN THE DRIVER CALLING US.  IF YOU
 *   DO NOT WANT TO USE A PARTICULAR FUNCTION,  HAVE IT RETURN 0.  NOTHING
 *   WILL BE INSERTED INTO THE FILE UNDER THESE CONDITIONS.
 */

int  iFIWriteVar( HANDLE, HANDLE, void * );
int  iFIWriteFix( HANDLE, HANDLE, void * );