/************************************************************/
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
/************************************************************/

#include "machdefs.h"

#define cfcPage         ((typeFC)cbSector)
#define ibpNil          255
#define lruMax          ((unsigned) 65535)
#define fnMax           5
#define fnInsert        (fnNil - 1)
#define fnScratch       0
#define osfnNil         (-1)
#define rfnNil          rfnMax /* Stored in 7 bits */
#define rfnFree         (rfnMax + 1)
#define wMW             ('M' + ('W' << 8))
#define wSY             ('S' + ('Y' << 8))
#define wHP             ('H' + ('P' << 8))
#define cwSector        (cbSector / sizeof (int))
#define cbpMustKeep     6       /* assume no bp will be dislodged for this
                                   many calls to IbpEnsureValid */
#define cbOpenFileBuf   128

#ifdef SAND
#define wMagic          0177062
#define wMagicOld       0137061
#else /* not SAND */
#define wMagic          0137061
#endif /* not SAND */

#define wMagicTool      ((0253 << 8) + 0)

#define fcMax           ((typeFC) 2147483647)

#define fpeNoSuch       (-5)
#define fpeDiskFull     (-7)

struct BPS
        {
        typePN     pn;
        int        fn;
        typeTS     ts;          /* time stamp - used in LRU algorithm */
        unsigned   fDirty : 1;
        unsigned   cch : 15;
        CHAR       ibpHashNext; /* link for external chained hashing
                                                        collision resolution */
        };


struct FCB
        {
        typeFC    fcMac;          /* includes FIB, but not FKP's */
        unsigned char fFormatted : 1;
        unsigned char fDelete : 1;
        unsigned char fReferenced : 1;
        unsigned char dty : 4;
        unsigned char fOpened: 1;   /* Whether file has been opened before */
        unsigned char rfn : 7;
        unsigned char fSearchPath: 1; /* Search path when first opened */
        int       mdExt;
        int       mdFile;
        typePN    pnChar;
        typePN    pnPara;
        typePN    pnFntb;
        typePN    pnSep;
        typePN    pnSetb;
        typePN    pnBftb;
        typePN    pnFfntb;      /* font family name table offset */
        typePN    pnMac;  /* # of pages actually in existence */
        typeFC    (**hgfcChp)[];
        typeFC    (**hgfcPap)[];
        CHAR      (**hszFile)[];
        CHAR      (**hszSsht)[];
        CHAR      rgbOpenFileBuf[ cbOpenFileBuf ]; /* OpenFile's work space */

#ifdef SAND
        int       version;      /* version byte */
        int       vref;         /* volume reference number */
#endif /* SAND */

        unsigned int fDisableRead: 1; /* disable reading of file */
        };

#define cbFCB   (sizeof (struct FCB))
#define cwFCB   (sizeof (struct FCB) / sizeof (int))

struct ERFN
        { /* Real file (opened in os) */
        int     osfn;
        int     fn;
        typeTS  ts;     /* time stamp - used in LRU algorithm */
        };


#define cchToolHeader   14

struct FIB
        {
        int             wIdent; /* Word-specific magic number */
        int             dty;
        int             wTool;
        int             cReceipts; /* Number of external receipts allowed */
        int             cbReceipt; /* Length of each receipt */
        int             bReceipts; /* One word offset from beginning of file
                                        to beginning of receipts */
        int             isgMac;    /* Number of code segments included */
        /* End of Multi-Tool standard header */
        typeFC          fcMac;
        typePN          pnPara;
        typePN          pnFntb;
        typePN          pnSep;
        typePN          pnSetb;
        typePN          pnBftb; /* Also pnPgtb */
        typePN          pnFfntb;        /* font family name table */
        CHAR            szSsht[66]; /* Style sheet name */
        typePN          pnMac;
        CHAR            rgbJunk[cbSector - (cchToolHeader + sizeof (typeFC)
                             + 7 * sizeof (typePN) + 66)];
        };

#define cchFIB  (sizeof (struct FIB))

#define CONVFROMWORD (TRUE + 2)  /* used by FWriteFn to convert Word file
                                  characters to Write ANSI set */
