#include <stdlib.h>
#include <stdio.h>
#include "wv.h"

void wvInitFIB(FIB *item)
	{
	item->wIdent = 0;
	item->nFib = 0;
	item->nProduct = 0;
	item->lid = 0;
	item->pnNext = 0;
	item->fDot = 0;
	item->fGlsy = 0;
	item->fComplex = 0;
	item->fHasPic = 0;
	item->cQuickSaves = 0;
	item->fEncrypted = 0;
	item->fWhichTblStm = 0;
	item->fReadOnlyRecommended = 0;
	item->fWriteReservation = 0;
	item->fExtChar = 0;
	item->fLoadOverride = 0;
	item->fFarEast = 0;
	item->fCrypto = 0;
	item->nFibBack = 0;
	item->lKey = 0;
	item->envr = 0;
	item->fMac = 0;
	item->fEmptySpecial = 0;
	item->fLoadOverridePage = 0;
	item->fFutureSavedUndo = 0;
	item->fWord97Saved = 0;
	item->fSpare0 = 0;
	item->chse = 0;
	item->chsTables = 0;
	item->fcMin = 0;
	item->fcMac = 0;
	item->csw = 0;
	item->wMagicCreated = 0;
	item->wMagicRevised = 0;
	item->wMagicCreatedPrivate = 0;
	item->wMagicRevisedPrivate = 0;
	item->pnFbpChpFirst_W6 = 0;
	item->pnChpFirst_W6 = 0;
	item->cpnBteChp_W6 = 0;
	item->pnFbpPapFirst_W6 = 0;
	item->pnPapFirst_W6 = 0;
	item->cpnBtePap_W6 = 0;
	item->pnFbpLvcFirst_W6 = 0;
	item->pnLvcFirst_W6 = 0;
	item->cpnBteLvc_W6 = 0;
	item->lidFE = 0;
	item->clw = 0;
	item->cbMac = 0;
	item->lProductCreated = 0;
	item->lProductRevised = 0;
	item->ccpText = 0;
	item->ccpFtn = 0;
	item->ccpHdr = 0;
	item->ccpMcr = 0;
	item->ccpAtn = 0;
	item->ccpEdn = 0;
	item->ccpTxbx = 0;
	item->ccpHdrTxbx = 0;
	item->pnFbpChpFirst = 0;
	item->pnChpFirst = 0;
	item->cpnBteChp = 0;
	item->pnFbpPapFirst = 0;
	item->pnPapFirst = 0;
	item->cpnBtePap = 0;
	item->pnFbpLvcFirst = 0;
	item->pnLvcFirst = 0;
	item->cpnBteLvc = 0;
	item->fcIslandFirst = 0;
	item->fcIslandLim = 0;
	item->cfclcb = 0;
	item->fcStshfOrig = 0;
	item->lcbStshfOrig = 0;
	item->fcStshf = 0;
	item->lcbStshf = 0;
	item->fcPlcffndRef = 0;
	item->lcbPlcffndRef = 0;
	item->fcPlcffndTxt = 0;
	item->lcbPlcffndTxt = 0;
	item->fcPlcfandRef = 0;
	item->lcbPlcfandRef = 0;
	item->fcPlcfandTxt = 0;
	item->lcbPlcfandTxt = 0;
	item->fcPlcfsed = 0;
	item->lcbPlcfsed = 0;
	item->fcPlcpad = 0;
	item->lcbPlcpad = 0;
	item->fcPlcfphe = 0;
	item->lcbPlcfphe = 0;
	item->fcSttbfglsy = 0;
	item->lcbSttbfglsy = 0;
	item->fcPlcfglsy = 0;
	item->lcbPlcfglsy = 0;
	item->fcPlcfhdd = 0;
	item->lcbPlcfhdd = 0;
	item->fcPlcfbteChpx = 0;
	item->lcbPlcfbteChpx = 0;
	item->fcPlcfbtePapx = 0;
	item->lcbPlcfbtePapx = 0;
	item->fcPlcfsea = 0;
	item->lcbPlcfsea = 0;
	item->fcSttbfffn = 0;
	item->lcbSttbfffn = 0;
	item->fcPlcffldMom = 0;
	item->lcbPlcffldMom = 0;
	item->fcPlcffldHdr = 0;
	item->lcbPlcffldHdr = 0;
	item->fcPlcffldFtn = 0;
	item->lcbPlcffldFtn = 0;
	item->fcPlcffldAtn = 0;
	item->lcbPlcffldAtn = 0;
	item->fcPlcffldMcr = 0;
	item->lcbPlcffldMcr = 0;
	item->fcSttbfbkmk = 0;
	item->lcbSttbfbkmk = 0;
	item->fcPlcfbkf = 0;
	item->lcbPlcfbkf = 0;
	item->fcPlcfbkl = 0;
	item->lcbPlcfbkl = 0;
	item->fcCmds = 0;
	item->lcbCmds = 0;
	item->fcPlcmcr = 0;
	item->lcbPlcmcr = 0;
	item->fcSttbfmcr = 0;
	item->lcbSttbfmcr = 0;
	item->fcPrDrvr = 0;
	item->lcbPrDrvr = 0;
	item->fcPrEnvPort = 0;
	item->lcbPrEnvPort = 0;
	item->fcPrEnvLand = 0;
	item->lcbPrEnvLand = 0;
	item->fcWss = 0;
	item->lcbWss = 0;
	item->fcDop = 0;
	item->lcbDop = 0;
	item->fcSttbfAssoc = 0;
	item->lcbSttbfAssoc = 0;
	item->fcClx = 0;
	item->lcbClx = 0;
	item->fcPlcfpgdFtn = 0;
	item->lcbPlcfpgdFtn = 0;
	item->fcAutosaveSource = 0;
	item->lcbAutosaveSource = 0;
	item->fcGrpXstAtnOwners = 0;
	item->lcbGrpXstAtnOwners = 0;
	item->fcSttbfAtnbkmk = 0;
	item->lcbSttbfAtnbkmk = 0;
	item->fcPlcdoaMom = 0;
	item->lcbPlcdoaMom = 0;
	item->fcPlcdoaHdr = 0;
	item->lcbPlcdoaHdr = 0;
	item->fcPlcspaMom = 0;
	item->lcbPlcspaMom = 0;
	item->fcPlcspaHdr = 0;
	item->lcbPlcspaHdr = 0;
	item->fcPlcfAtnbkf = 0;
	item->lcbPlcfAtnbkf = 0;
	item->fcPlcfAtnbkl = 0;
	item->lcbPlcfAtnbkl = 0;
	item->fcPms = 0;
	item->lcbPms = 0;
	item->fcFormFldSttbs = 0;
	item->lcbFormFldSttbs = 0;
	item->fcPlcfendRef = 0;
	item->lcbPlcfendRef = 0;
	item->fcPlcfendTxt = 0;
	item->lcbPlcfendTxt = 0;
	item->fcPlcffldEdn = 0;
	item->lcbPlcffldEdn = 0;
	item->fcPlcfpgdEdn = 0;
	item->lcbPlcfpgdEdn = 0;
	item->fcDggInfo = 0;
	item->lcbDggInfo = 0;
	item->fcSttbfRMark = 0;
	item->lcbSttbfRMark = 0;
	item->fcSttbCaption = 0;
	item->lcbSttbCaption = 0;
	item->fcSttbAutoCaption = 0;
	item->lcbSttbAutoCaption = 0;
	item->fcPlcfwkb = 0;
	item->lcbPlcfwkb = 0;
	item->fcPlcfspl = 0;
	item->lcbPlcfspl = 0;
	item->fcPlcftxbxTxt = 0;
	item->lcbPlcftxbxTxt = 0;
	item->fcPlcffldTxbx = 0;
	item->lcbPlcffldTxbx = 0;
	item->fcPlcfhdrtxbxTxt = 0;
	item->lcbPlcfhdrtxbxTxt = 0;
	item->fcPlcffldHdrTxbx = 0;
	item->lcbPlcffldHdrTxbx = 0;
	item->fcStwUser = 0;
	item->lcbStwUser = 0;
	item->fcSttbttmbd = 0;
	item->cbSttbttmbd = 0;
	item->fcUnused = 0;
	item->lcbUnused = 0;
	item->fcPgdMother = 0;
	item->lcbPgdMother = 0;
	item->fcBkdMother = 0;
	item->lcbBkdMother = 0;
	item->fcPgdFtn = 0;
	item->lcbPgdFtn = 0;
	item->fcBkdFtn = 0;
	item->lcbBkdFtn = 0;
	item->fcPgdEdn = 0;
	item->lcbPgdEdn = 0;
	item->fcBkdEdn = 0;
	item->lcbBkdEdn = 0;
	item->fcSttbfIntlFld = 0;
	item->lcbSttbfIntlFld = 0;
	item->fcRouteSlip = 0;
	item->lcbRouteSlip = 0;
	item->fcSttbSavedBy = 0;
	item->lcbSttbSavedBy = 0;
	item->fcSttbFnm = 0;
	item->lcbSttbFnm = 0;
	item->fcPlcfLst = 0;
	item->lcbPlcfLst = 0;
	item->fcPlfLfo = 0;
	item->lcbPlfLfo = 0;
	item->fcPlcftxbxBkd = 0;
	item->lcbPlcftxbxBkd = 0;
	item->fcPlcftxbxHdrBkd = 0;
	item->lcbPlcftxbxHdrBkd = 0;
	item->fcDocUndo = 0;
	item->lcbDocUndo = 0;
	item->fcRgbuse = 0;
	item->lcbRgbuse = 0;
	item->fcUsp = 0;
	item->lcbUsp = 0;
	item->fcUskf = 0;
	item->lcbUskf = 0;
	item->fcPlcupcRgbuse = 0;
	item->lcbPlcupcRgbuse = 0;
	item->fcPlcupcUsp = 0;
	item->lcbPlcupcUsp = 0;
	item->fcSttbGlsyStyle = 0;
	item->lcbSttbGlsyStyle = 0;
	item->fcPlgosl = 0;
	item->lcbPlgosl = 0;
	item->fcPlcocx = 0;
	item->lcbPlcocx = 0;
	item->fcPlcfbteLvc = 0;
	item->lcbPlcfbteLvc = 0;
	wvInitFILETIME(&item->ftModified);
	item->fcPlcflvc = 0;
	item->lcbPlcflvc = 0;
	item->fcPlcasumy = 0;
	item->lcbPlcasumy = 0;
	item->fcPlcfgram = 0;
	item->lcbPlcfgram = 0;
	item->fcSttbListNames = 0;
	item->lcbSttbListNames = 0;
	item->fcSttbfUssr = 0;
	item->lcbSttbfUssr = 0;
	}

void wvGetFIB(FIB *item,wvStream *fd)
	{
	U16 temp16;
	U8 temp8;

    item->fEncrypted=0;

	wvStream_goto(fd,0);
#ifdef PURIFY
	wvInitFIB(item);
#endif
	item->wIdent = read_16ubit(fd);
	item->nFib = read_16ubit(fd);

	if ( (wvQuerySupported(item,NULL) == WORD5) || (wvQuerySupported(item,NULL) == WORD6) || (wvQuerySupported(item,NULL) == WORD7) )
		{
		wvInitFIB(item);
		wvStream_offset(fd,-4);
		wvGetFIB6(item,fd);
		return;
		}

	item->nProduct = read_16ubit(fd);
	item->lid = read_16ubit(fd);
	wvTrace(("lid is %x\n",item->lid));
	item->pnNext = (S16)read_16ubit(fd);
	temp16 = read_16ubit(fd);
	item->fDot = (temp16 & 0x0001);
	item->fGlsy = (temp16 & 0x0002) >> 1;
	item->fComplex = (temp16 & 0x0004) >> 2;
	item->fHasPic = (temp16 & 0x0008) >> 3;
	item->cQuickSaves = (temp16 & 0x00F0) >> 4;
	item->fEncrypted = (temp16 & 0x0100) >> 8;
	item->fWhichTblStm = (temp16 & 0x0200) >> 9;
	item->fReadOnlyRecommended = (temp16 & 0x0400) >> 10;
	item->fWriteReservation = (temp16 & 0x0800) >> 11;
	item->fExtChar = (temp16 & 0x1000) >> 12;
	wvTrace(("fExtChar is %d\n",item->fExtChar));
	item->fLoadOverride = (temp16 & 0x2000) >> 13;
	item->fFarEast = (temp16 & 0x4000) >> 14;
	item->fCrypto = (temp16 & 0x8000) >> 15;
	item->nFibBack = read_16ubit(fd);
	item->lKey = read_32ubit(fd);
	item->envr = read_8ubit(fd);
	temp8 = read_8ubit(fd);
	item->fMac = (temp8 & 0x01);
	item->fEmptySpecial = (temp8 & 0x02) >> 1;
	item->fLoadOverridePage = (temp8 & 0x04) >> 2;
	item->fFutureSavedUndo = (temp8 & 0x08) >> 3;
	item->fWord97Saved = (temp8 & 0x10) >> 4;
	item->fSpare0 = (temp8 & 0xFE) >> 5;
	item->chse = read_16ubit(fd);
	item->chsTables = read_16ubit(fd);
	item->fcMin = read_32ubit(fd);
	item->fcMac = read_32ubit(fd);
	item->csw = read_16ubit(fd);
	item->wMagicCreated = read_16ubit(fd);
	item->wMagicRevised = read_16ubit(fd);
	item->wMagicCreatedPrivate = read_16ubit(fd);
	item->wMagicRevisedPrivate = read_16ubit(fd);
	item->pnFbpChpFirst_W6 = (S16)read_16ubit(fd);
	item->pnChpFirst_W6 = (S16)read_16ubit(fd);
	item->cpnBteChp_W6 = (S16)read_16ubit(fd);
	item->pnFbpPapFirst_W6 = (S16)read_16ubit(fd);
	item->pnPapFirst_W6 = (S16)read_16ubit(fd);
	item->cpnBtePap_W6 = (S16)read_16ubit(fd);
	item->pnFbpLvcFirst_W6 = (S16)read_16ubit(fd);
	item->pnLvcFirst_W6 = (S16)read_16ubit(fd);
	item->cpnBteLvc_W6 = (S16)read_16ubit(fd);
	item->lidFE = (S16)read_16ubit(fd);
	item->clw = read_16ubit(fd);
	item->cbMac = (S32)read_32ubit(fd);
	item->lProductCreated = read_32ubit(fd);
	item->lProductRevised = read_32ubit(fd);
	item->ccpText = read_32ubit(fd);
	item->ccpFtn = (S32)read_32ubit(fd);
	item->ccpHdr = (S32)read_32ubit(fd);
	item->ccpMcr = (S32)read_32ubit(fd);
	item->ccpAtn = (S32)read_32ubit(fd);
	item->ccpEdn = (S32)read_32ubit(fd);
	item->ccpTxbx = (S32)read_32ubit(fd);
	item->ccpHdrTxbx = (S32)read_32ubit(fd);
	item->pnFbpChpFirst = (S32)read_32ubit(fd);
	item->pnChpFirst = (S32)read_32ubit(fd);
	item->cpnBteChp = (S32)read_32ubit(fd);
	item->pnFbpPapFirst = (S32)read_32ubit(fd);
	item->pnPapFirst = (S32)read_32ubit(fd);
	item->cpnBtePap = (S32)read_32ubit(fd);
	item->pnFbpLvcFirst = (S32)read_32ubit(fd);
	item->pnLvcFirst = (S32)read_32ubit(fd);
	item->cpnBteLvc = (S32)read_32ubit(fd);
	item->fcIslandFirst = (S32)read_32ubit(fd);
	item->fcIslandLim = (S32)read_32ubit(fd);
	item->cfclcb = read_16ubit(fd);
	item->fcStshfOrig = (S32)read_32ubit(fd);
	item->lcbStshfOrig = read_32ubit(fd);
	item->fcStshf = (S32)read_32ubit(fd);
	item->lcbStshf = read_32ubit(fd);

	item->fcPlcffndRef = (S32)read_32ubit(fd);
	item->lcbPlcffndRef = read_32ubit(fd);
	item->fcPlcffndTxt = (S32)read_32ubit(fd);
	item->lcbPlcffndTxt = read_32ubit(fd);
	item->fcPlcfandRef = (S32)read_32ubit(fd);
	item->lcbPlcfandRef = read_32ubit(fd);
	item->fcPlcfandTxt = (S32)read_32ubit(fd);
	item->lcbPlcfandTxt = read_32ubit(fd);
	item->fcPlcfsed = (S32)read_32ubit(fd);
	item->lcbPlcfsed = read_32ubit(fd);
	item->fcPlcpad = (S32)read_32ubit(fd);
	item->lcbPlcpad = read_32ubit(fd);
	item->fcPlcfphe = (S32)read_32ubit(fd);
	item->lcbPlcfphe = read_32ubit(fd);
	item->fcSttbfglsy = (S32)read_32ubit(fd);
	item->lcbSttbfglsy = read_32ubit(fd);
	item->fcPlcfglsy = (S32)read_32ubit(fd);
	item->lcbPlcfglsy = read_32ubit(fd);
	item->fcPlcfhdd = (S32)read_32ubit(fd);
	item->lcbPlcfhdd = read_32ubit(fd);
	item->fcPlcfbteChpx = (S32)read_32ubit(fd);
	item->lcbPlcfbteChpx = read_32ubit(fd);
	item->fcPlcfbtePapx = (S32)read_32ubit(fd);
	item->lcbPlcfbtePapx = read_32ubit(fd);
	item->fcPlcfsea = (S32)read_32ubit(fd);
	item->lcbPlcfsea = read_32ubit(fd);
	item->fcSttbfffn = (S32)read_32ubit(fd);
	item->lcbSttbfffn = read_32ubit(fd);
	item->fcPlcffldMom = (S32)read_32ubit(fd);
	item->lcbPlcffldMom = read_32ubit(fd);
	item->fcPlcffldHdr = (S32)read_32ubit(fd);
	item->lcbPlcffldHdr = read_32ubit(fd);
	item->fcPlcffldFtn = (S32)read_32ubit(fd);
	item->lcbPlcffldFtn = read_32ubit(fd);
	item->fcPlcffldAtn = (S32)read_32ubit(fd);
	item->lcbPlcffldAtn = read_32ubit(fd);
	item->fcPlcffldMcr = (S32)read_32ubit(fd);
	item->lcbPlcffldMcr = read_32ubit(fd);
	item->fcSttbfbkmk = (S32)read_32ubit(fd);
	item->lcbSttbfbkmk = read_32ubit(fd);
	item->fcPlcfbkf = (S32)read_32ubit(fd);
	item->lcbPlcfbkf = read_32ubit(fd);
	item->fcPlcfbkl = (S32)read_32ubit(fd);
	item->lcbPlcfbkl = read_32ubit(fd);
	item->fcCmds = (S32)read_32ubit(fd);
	item->lcbCmds = read_32ubit(fd);
	item->fcPlcmcr = (S32)read_32ubit(fd);
	item->lcbPlcmcr = read_32ubit(fd);
	item->fcSttbfmcr = (S32)read_32ubit(fd);
	item->lcbSttbfmcr = read_32ubit(fd);
	item->fcPrDrvr = (S32)read_32ubit(fd);
	item->lcbPrDrvr = read_32ubit(fd);
	item->fcPrEnvPort = (S32)read_32ubit(fd);
	item->lcbPrEnvPort = read_32ubit(fd);
	item->fcPrEnvLand = (S32)read_32ubit(fd);
	item->lcbPrEnvLand = read_32ubit(fd);
	item->fcWss = (S32)read_32ubit(fd);
	item->lcbWss = read_32ubit(fd);
	item->fcDop = (S32)read_32ubit(fd);
	item->lcbDop = read_32ubit(fd);
	item->fcSttbfAssoc = (S32)read_32ubit(fd);
	item->lcbSttbfAssoc = read_32ubit(fd);
	item->fcClx = (S32)read_32ubit(fd);
	item->lcbClx = read_32ubit(fd);
	item->fcPlcfpgdFtn = (S32)read_32ubit(fd);
	item->lcbPlcfpgdFtn = read_32ubit(fd);
	item->fcAutosaveSource = (S32)read_32ubit(fd);
	item->lcbAutosaveSource = read_32ubit(fd);
	item->fcGrpXstAtnOwners = (S32)read_32ubit(fd);
	item->lcbGrpXstAtnOwners = read_32ubit(fd);
	item->fcSttbfAtnbkmk = (S32)read_32ubit(fd);
	item->lcbSttbfAtnbkmk = read_32ubit(fd);
	item->fcPlcdoaMom = (S32)read_32ubit(fd);
	item->lcbPlcdoaMom = read_32ubit(fd);
	item->fcPlcdoaHdr = (S32)read_32ubit(fd);
	item->lcbPlcdoaHdr = read_32ubit(fd);
	item->fcPlcspaMom = (S32)read_32ubit(fd);
	item->lcbPlcspaMom = read_32ubit(fd);
	item->fcPlcspaHdr = (S32)read_32ubit(fd);
	item->lcbPlcspaHdr = read_32ubit(fd);
	item->fcPlcfAtnbkf = (S32)read_32ubit(fd);
	item->lcbPlcfAtnbkf = read_32ubit(fd);
	item->fcPlcfAtnbkl = (S32)read_32ubit(fd);
	item->lcbPlcfAtnbkl = read_32ubit(fd);
	item->fcPms = (S32)read_32ubit(fd);
	item->lcbPms = read_32ubit(fd);
	item->fcFormFldSttbs = (S32)read_32ubit(fd);
	item->lcbFormFldSttbs = read_32ubit(fd);
	item->fcPlcfendRef = (S32)read_32ubit(fd);
	item->lcbPlcfendRef = read_32ubit(fd);
	item->fcPlcfendTxt = (S32)read_32ubit(fd);
	item->lcbPlcfendTxt = read_32ubit(fd);
	item->fcPlcffldEdn = (S32)read_32ubit(fd);
	item->lcbPlcffldEdn = read_32ubit(fd);
	item->fcPlcfpgdEdn = (S32)read_32ubit(fd);
	item->lcbPlcfpgdEdn = read_32ubit(fd);
	item->fcDggInfo = (S32)read_32ubit(fd);
	item->lcbDggInfo = read_32ubit(fd);
	item->fcSttbfRMark = (S32)read_32ubit(fd);
	item->lcbSttbfRMark = read_32ubit(fd);
	item->fcSttbCaption = (S32)read_32ubit(fd);
	item->lcbSttbCaption = read_32ubit(fd);
	item->fcSttbAutoCaption = (S32)read_32ubit(fd);
	item->lcbSttbAutoCaption = read_32ubit(fd);
	item->fcPlcfwkb = (S32)read_32ubit(fd);
	item->lcbPlcfwkb = read_32ubit(fd);
	item->fcPlcfspl = (S32)read_32ubit(fd);
	item->lcbPlcfspl = read_32ubit(fd);
	item->fcPlcftxbxTxt = (S32)read_32ubit(fd);
	item->lcbPlcftxbxTxt = read_32ubit(fd);
	item->fcPlcffldTxbx = (S32)read_32ubit(fd);
	item->lcbPlcffldTxbx = read_32ubit(fd);
	item->fcPlcfhdrtxbxTxt = (S32)read_32ubit(fd);
	item->lcbPlcfhdrtxbxTxt = read_32ubit(fd);
	item->fcPlcffldHdrTxbx = (S32)read_32ubit(fd);
	item->lcbPlcffldHdrTxbx = read_32ubit(fd);
	item->fcStwUser = (S32)read_32ubit(fd);
	item->lcbStwUser = read_32ubit(fd);
	item->fcSttbttmbd = (S32)read_32ubit(fd);
	item->cbSttbttmbd = read_32ubit(fd);
	item->fcUnused = (S32)read_32ubit(fd);
	item->lcbUnused = read_32ubit(fd);
	item->fcPgdMother = (S32)read_32ubit(fd);
	item->lcbPgdMother = read_32ubit(fd);
	item->fcBkdMother = (S32)read_32ubit(fd);
	item->lcbBkdMother = read_32ubit(fd);
	item->fcPgdFtn = (S32)read_32ubit(fd);
	item->lcbPgdFtn = read_32ubit(fd);
	item->fcBkdFtn = (S32)read_32ubit(fd);
	item->lcbBkdFtn = read_32ubit(fd);
	item->fcPgdEdn = (S32)read_32ubit(fd);
	item->lcbPgdEdn = read_32ubit(fd);
	item->fcBkdEdn = (S32)read_32ubit(fd);
	item->lcbBkdEdn = read_32ubit(fd);
	item->fcSttbfIntlFld = (S32)read_32ubit(fd);
	item->lcbSttbfIntlFld = read_32ubit(fd);
	item->fcRouteSlip = (S32)read_32ubit(fd);
	item->lcbRouteSlip = read_32ubit(fd);
	item->fcSttbSavedBy = (S32)read_32ubit(fd);
	item->lcbSttbSavedBy = read_32ubit(fd);
	item->fcSttbFnm = (S32)read_32ubit(fd);
	item->lcbSttbFnm = read_32ubit(fd);
	item->fcPlcfLst = (S32)read_32ubit(fd);
	item->lcbPlcfLst = read_32ubit(fd);
	item->fcPlfLfo = (S32)read_32ubit(fd);
	item->lcbPlfLfo = read_32ubit(fd);
	item->fcPlcftxbxBkd = (S32)read_32ubit(fd);
	item->lcbPlcftxbxBkd = read_32ubit(fd);
	item->fcPlcftxbxHdrBkd = (S32)read_32ubit(fd);
	item->lcbPlcftxbxHdrBkd = read_32ubit(fd);
	item->fcDocUndo = (S32)read_32ubit(fd);
	item->lcbDocUndo = read_32ubit(fd);
	item->fcRgbuse = (S32)read_32ubit(fd);
	item->lcbRgbuse = read_32ubit(fd);
	item->fcUsp = (S32)read_32ubit(fd);
	item->lcbUsp = read_32ubit(fd);
	item->fcUskf = (S32)read_32ubit(fd);
	item->lcbUskf = read_32ubit(fd);
	item->fcPlcupcRgbuse = (S32)read_32ubit(fd);
	item->lcbPlcupcRgbuse = read_32ubit(fd);
	item->fcPlcupcUsp = (S32)read_32ubit(fd);
	item->lcbPlcupcUsp = read_32ubit(fd);
	item->fcSttbGlsyStyle = (S32)read_32ubit(fd);
	item->lcbSttbGlsyStyle = read_32ubit(fd);
	item->fcPlgosl = (S32)read_32ubit(fd);
	item->lcbPlgosl = read_32ubit(fd);
	item->fcPlcocx = (S32)read_32ubit(fd);
	item->lcbPlcocx = read_32ubit(fd);
	item->fcPlcfbteLvc = (S32)read_32ubit(fd);
	item->lcbPlcfbteLvc = read_32ubit(fd);
	wvGetFILETIME(&(item->ftModified),fd);
	item->fcPlcflvc = (S32)read_32ubit(fd);
	item->lcbPlcflvc = read_32ubit(fd);
	item->fcPlcasumy = (S32)read_32ubit(fd);
	item->lcbPlcasumy = read_32ubit(fd);
	item->fcPlcfgram = (S32)read_32ubit(fd);
	item->lcbPlcfgram = read_32ubit(fd);
	item->fcSttbListNames = (S32)read_32ubit(fd);
	item->lcbSttbListNames = read_32ubit(fd);
	item->fcSttbfUssr = (S32)read_32ubit(fd);
	item->lcbSttbfUssr = read_32ubit(fd);
	}

wvStream *wvWhichTableStream(FIB *fib,wvParseStruct *ps)
    {
    wvStream *ret;

	if ((wvQuerySupported(fib,NULL)&0x7fff) == WORD8)
		{
		if (fib->fWhichTblStm)
			{
			wvTrace(("1Table\n"));
			ret = ps->tablefd1;
			if (ret == NULL)
				{
				wvError(("!!, the FIB lied to us, (told us to use the 1Table) making a heroic effort to use the other table stream, hold on tight\n"));
				ret = ps->tablefd0;
				}
			}
		else
			{
			wvTrace(("0Table\n"));
			ret = ps->tablefd0;
			if (ret == NULL)
				{
				wvError(("!!, the FIB lied to us, (told us to use the 0Table) making a heroic effort to use the other table stream, hold on tight\n"));
				ret = ps->tablefd1;
				}
			}
		}
	else									/* word 7-*/
		ret = ps->mainfd;
    return(ret);
    }


version wvQuerySupported(FIB *fib,int *reason)
    {
	int ret=WORD8;

	if (fib->wIdent == 0x37FE)
		ret = WORD5;
	else
		{
		/*begin from microsofts kb q 40*/
		if (fib->nFib <101)
			{
			if (reason) *reason=1;
			ret = WORD2;
			}
		else
			{
			switch (fib->nFib)
				{
				case 101:
					if (reason) *reason=2;
					ret = WORD6;
					break;  /* I'm pretty sure we should break here, Jamie. */
				case 103:
				case 104:
					if (reason) *reason=3;
					ret = WORD7;
					break;  /* I'm pretty sure we should break here, Jamie. */
				default:
					break;
				}
			}
		/*end from microsofts kb q 40*/
		}
	wvTrace(("RET is %d\n",ret));
    if (fib->fEncrypted)
        {
        if (reason) *reason=4;
        ret|=0x8000;
        }
    return(ret);
    }


void wvGetFIB6(FIB *item,wvStream *fd)
	{
	U16 temp16;
	U8 temp8;
	
	item->wIdent = read_16ubit(fd);
	item->nFib = read_16ubit(fd);

	item->nProduct = read_16ubit(fd);
	item->lid = read_16ubit(fd);
	wvTrace(("lid is %x\n",item->lid));
	item->pnNext = (S16)read_16ubit(fd);
	temp16 = read_16ubit(fd);

	item->fDot = (temp16 & 0x0001);
	item->fGlsy = (temp16 & 0x0002) >> 1;
	item->fComplex = (temp16 & 0x0004) >> 2;
	item->fHasPic = (temp16 & 0x0008) >> 3;
	item->cQuickSaves = (temp16 & 0x00F0) >> 4;
	item->fEncrypted = (temp16 & 0x0100) >> 8;
	item->fWhichTblStm = 0;		/* word 6 files only have one table stream*/
	item->fReadOnlyRecommended = (temp16 & 0x0400) >> 10;
	item->fWriteReservation = (temp16 & 0x0800) >> 11;
	item->fExtChar = (temp16 & 0x1000) >> 12;
	wvTrace(("fExtChar is %d\n",item->fExtChar));
	item->fLoadOverride = 0;
	item->fFarEast = 0;
	item->fCrypto = 0;
	item->nFibBack = read_16ubit(fd);
	item->lKey = read_32ubit(fd);
	item->envr = read_8ubit(fd);
	temp8 = read_8ubit(fd);
	item->fMac = 0;
	item->fEmptySpecial = 0;
	item->fLoadOverridePage = 0;
	item->fFutureSavedUndo = 0;
	item->fWord97Saved = 0;
	item->fSpare0 = 0;
	item->chse = read_16ubit(fd);
	item->chsTables = read_16ubit(fd);
	item->fcMin = read_32ubit(fd);
	item->fcMac = read_32ubit(fd);

	item->csw = 14;
	item->wMagicCreated = 0xCA0;	/*this is the unique id of the creater, so its me :-)*/

	item->cbMac = read_32ubit(fd);

	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);
	read_16ubit(fd);

	item->ccpText = read_32ubit(fd);
	item->ccpFtn = (S32)read_32ubit(fd);
	item->ccpHdr = (S32)read_32ubit(fd);
	item->ccpMcr = (S32)read_32ubit(fd);
	item->ccpAtn = (S32)read_32ubit(fd);
	item->ccpEdn = (S32)read_32ubit(fd);
	item->ccpTxbx = (S32)read_32ubit(fd);
	item->ccpHdrTxbx = (S32)read_32ubit(fd);

	read_32ubit(fd);

	item->fcStshfOrig = (S32)read_32ubit(fd);
	item->lcbStshfOrig = read_32ubit(fd);
	item->fcStshf = (S32)read_32ubit(fd);
	item->lcbStshf = read_32ubit(fd);
	item->fcPlcffndRef = (S32)read_32ubit(fd);
	item->lcbPlcffndRef = read_32ubit(fd);
	item->fcPlcffndTxt = (S32)read_32ubit(fd);
	item->lcbPlcffndTxt = read_32ubit(fd);
	item->fcPlcfandRef = (S32)read_32ubit(fd);
	item->lcbPlcfandRef = read_32ubit(fd);
	item->fcPlcfandTxt = (S32)read_32ubit(fd);
	item->lcbPlcfandTxt = read_32ubit(fd);
	item->fcPlcfsed = (S32)read_32ubit(fd);
	item->lcbPlcfsed = read_32ubit(fd);
	item->fcPlcpad = (S32)read_32ubit(fd);
	item->lcbPlcpad = read_32ubit(fd);
	item->fcPlcfphe = (S32)read_32ubit(fd);
	item->lcbPlcfphe = read_32ubit(fd);
	item->fcSttbfglsy = (S32)read_32ubit(fd);
	item->lcbSttbfglsy = read_32ubit(fd);
	item->fcPlcfglsy = (S32)read_32ubit(fd);
	item->lcbPlcfglsy = read_32ubit(fd);
	item->fcPlcfhdd = (S32)read_32ubit(fd);
	item->lcbPlcfhdd = read_32ubit(fd);
	item->fcPlcfbteChpx = (S32)read_32ubit(fd);
	item->lcbPlcfbteChpx = read_32ubit(fd);
	item->fcPlcfbtePapx = (S32)read_32ubit(fd);
	item->lcbPlcfbtePapx = read_32ubit(fd);
	item->fcPlcfsea = (S32)read_32ubit(fd);
	item->lcbPlcfsea = read_32ubit(fd);
	item->fcSttbfffn = (S32)read_32ubit(fd);
	item->lcbSttbfffn = read_32ubit(fd);
	item->fcPlcffldMom = (S32)read_32ubit(fd);
	item->lcbPlcffldMom = read_32ubit(fd);
	item->fcPlcffldHdr = (S32)read_32ubit(fd);
	item->lcbPlcffldHdr = read_32ubit(fd);
	item->fcPlcffldFtn = (S32)read_32ubit(fd);
	item->lcbPlcffldFtn = read_32ubit(fd);
	item->fcPlcffldAtn = (S32)read_32ubit(fd);
	item->lcbPlcffldAtn = read_32ubit(fd);
	item->fcPlcffldMcr = (S32)read_32ubit(fd);
	item->lcbPlcffldMcr = read_32ubit(fd);
	item->fcSttbfbkmk = (S32)read_32ubit(fd);
	item->lcbSttbfbkmk = read_32ubit(fd);
	item->fcPlcfbkf = (S32)read_32ubit(fd);
	item->lcbPlcfbkf = read_32ubit(fd);
	item->fcPlcfbkl = (S32)read_32ubit(fd);
	item->lcbPlcfbkl = read_32ubit(fd);
	item->fcCmds = (S32)read_32ubit(fd);
	item->lcbCmds = read_32ubit(fd);
	item->fcPlcmcr = (S32)read_32ubit(fd);
	item->lcbPlcmcr = read_32ubit(fd);
	item->fcSttbfmcr = (S32)read_32ubit(fd);
	item->lcbSttbfmcr = read_32ubit(fd);
	item->fcPrDrvr = (S32)read_32ubit(fd);
	item->lcbPrDrvr = read_32ubit(fd);
	item->fcPrEnvPort = (S32)read_32ubit(fd);
	item->lcbPrEnvPort = read_32ubit(fd);
	item->fcPrEnvLand = (S32)read_32ubit(fd);
	item->lcbPrEnvLand = read_32ubit(fd);
	item->fcWss = (S32)read_32ubit(fd);
	item->lcbWss = read_32ubit(fd);
	item->fcDop = (S32)read_32ubit(fd);
	item->lcbDop = read_32ubit(fd);
	item->fcSttbfAssoc = (S32)read_32ubit(fd);
	item->lcbSttbfAssoc = read_32ubit(fd);
	item->fcClx = (S32)read_32ubit(fd);
	item->lcbClx = read_32ubit(fd);
	item->fcPlcfpgdFtn = (S32)read_32ubit(fd);
	item->lcbPlcfpgdFtn = read_32ubit(fd);
	item->fcAutosaveSource = (S32)read_32ubit(fd);
	item->lcbAutosaveSource = read_32ubit(fd);
	item->fcGrpXstAtnOwners = (S32)read_32ubit(fd);
	item->lcbGrpXstAtnOwners = read_32ubit(fd);
	item->fcSttbfAtnbkmk = (S32)read_32ubit(fd);
	item->lcbSttbfAtnbkmk = read_32ubit(fd);
	
	read_16ubit(fd);

	item->pnChpFirst = (S32)read_16ubit(fd);
	item->pnPapFirst = (S32)read_16ubit(fd);
	item->cpnBteChp = (S32)read_16ubit(fd);
	item->cpnBtePap = (S32)read_16ubit(fd);
	item->fcPlcdoaMom = (S32)read_32ubit(fd);
	item->lcbPlcdoaMom = read_32ubit(fd);
	item->fcPlcdoaHdr = (S32)read_32ubit(fd);
	item->lcbPlcdoaHdr = read_32ubit(fd);
	
	read_32ubit(fd);
	read_32ubit(fd);
	read_32ubit(fd);
	read_32ubit(fd);

	item->fcPlcfAtnbkf = (S32)read_32ubit(fd);
	item->lcbPlcfAtnbkf = read_32ubit(fd);
	item->fcPlcfAtnbkl = (S32)read_32ubit(fd);
	item->lcbPlcfAtnbkl = read_32ubit(fd);
	item->fcPms = (S32)read_32ubit(fd);
	item->lcbPms = read_32ubit(fd);
	item->fcFormFldSttbs = (S32)read_32ubit(fd);
	item->lcbFormFldSttbs = read_32ubit(fd);
	item->fcPlcfendRef = (S32)read_32ubit(fd);
	item->lcbPlcfendRef = read_32ubit(fd);
	item->fcPlcfendTxt = (S32)read_32ubit(fd);
	item->lcbPlcfendTxt = read_32ubit(fd);
	item->fcPlcffldEdn = (S32)read_32ubit(fd);
	item->lcbPlcffldEdn = read_32ubit(fd);
	item->fcPlcfpgdEdn = (S32)read_32ubit(fd);
	item->lcbPlcfpgdEdn = read_32ubit(fd);

	read_32ubit(fd);
	read_32ubit(fd);

	item->fcSttbfRMark = (S32)read_32ubit(fd);
	item->lcbSttbfRMark = read_32ubit(fd);
	item->fcSttbCaption = (S32)read_32ubit(fd);
	item->lcbSttbCaption = read_32ubit(fd);
	item->fcSttbAutoCaption = (S32)read_32ubit(fd);
	item->lcbSttbAutoCaption = read_32ubit(fd);
	item->fcPlcfwkb = (S32)read_32ubit(fd);
	item->lcbPlcfwkb = read_32ubit(fd);

	read_32ubit(fd);
	read_32ubit(fd);


	item->fcPlcftxbxTxt = (S32)read_32ubit(fd);
	item->lcbPlcftxbxTxt = read_32ubit(fd);
	item->fcPlcffldTxbx = (S32)read_32ubit(fd);
	item->lcbPlcffldTxbx = read_32ubit(fd);
	item->fcPlcfhdrtxbxTxt = (S32)read_32ubit(fd);
	item->lcbPlcfhdrtxbxTxt = read_32ubit(fd);
	item->fcPlcffldHdrTxbx = (S32)read_32ubit(fd);
	item->lcbPlcffldHdrTxbx = read_32ubit(fd);
	item->fcStwUser = (S32)read_32ubit(fd);
	item->lcbStwUser = read_32ubit(fd);
	item->fcSttbttmbd = (S32)read_32ubit(fd);
	item->cbSttbttmbd = read_32ubit(fd);
	item->fcUnused = (S32)read_32ubit(fd);
	item->lcbUnused = read_32ubit(fd);
	item->fcPgdMother = (S32)read_32ubit(fd);
	item->lcbPgdMother = read_32ubit(fd);
	item->fcBkdMother = (S32)read_32ubit(fd);
	item->lcbBkdMother = read_32ubit(fd);
	item->fcPgdFtn = (S32)read_32ubit(fd);
	item->lcbPgdFtn = read_32ubit(fd);
	item->fcBkdFtn = (S32)read_32ubit(fd);
	item->lcbBkdFtn = read_32ubit(fd);
	item->fcPgdEdn = (S32)read_32ubit(fd);
	item->lcbPgdEdn = read_32ubit(fd);
	item->fcBkdEdn = (S32)read_32ubit(fd);
	item->lcbBkdEdn = read_32ubit(fd);
	item->fcSttbfIntlFld = (S32)read_32ubit(fd);
	item->lcbSttbfIntlFld = read_32ubit(fd);
	item->fcRouteSlip = (S32)read_32ubit(fd);
	item->lcbRouteSlip = read_32ubit(fd);
	item->fcSttbSavedBy = (S32)read_32ubit(fd);
	item->lcbSttbSavedBy = read_32ubit(fd);
	item->fcSttbFnm = (S32)read_32ubit(fd);
	item->lcbSttbFnm = read_32ubit(fd);
	}
