mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
474 lines
15 KiB
474 lines
15 KiB
#ifdef WIN32
|
|
#pragma pack(1)
|
|
#endif
|
|
/*****************************************************************************
|
|
* *
|
|
* IMVFS.H *
|
|
* *
|
|
* Copyright (C) Microsoft Corporation 1990. *
|
|
* All Rights reserved. *
|
|
* *
|
|
******************************************************************************
|
|
* *
|
|
* Module intent *
|
|
* *
|
|
* Declares all privately available MVFS.DLL routines *
|
|
* *
|
|
******************************************************************************
|
|
* *
|
|
* Current Owner: DAVIDJES *
|
|
* *
|
|
******************************************************************************
|
|
*
|
|
* Revision History:
|
|
* -- MAR 92 Created DAVIDJES
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
// requires windows.h and orkin.h
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* File Moniker
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#define fmNil ((FM)0)
|
|
#define qafmNil ((QAFM)0)
|
|
|
|
/*
|
|
When creating an FM (in other words, specifying the location of a new
|
|
or extant file), the caller must specify the directory in which that file
|
|
is located. There are a finite number of directories available to Help.
|
|
These are:
|
|
*/
|
|
|
|
#define dirNil 0x0000 // No directory specified
|
|
#define dirCurrent 0x0001 // Whatever the OS thinks the current dir. is
|
|
#define dirTemp 0x0002 // The directory temporary files are created in
|
|
#define dirHelp 0x0004 // Wherever the Help Application lives
|
|
#define dirSystem 0x0008 // The Windows and Windows System directories
|
|
#define dirPath 0x0010 // Searches the $PATH
|
|
//(includes Current dir and System dirs)
|
|
#define dirAll 0xFFFF // Search all directories, in the above order
|
|
#define dirFirst dirCurrent // The lowest bit that can be set
|
|
#define dirLast dirPath // The highest bit that can be set
|
|
|
|
/*
|
|
To specify which parts of a full filename you want to extract, add
|
|
(logical or) the following part codes:
|
|
*/
|
|
|
|
#define partNone 0x0000 // return nothing
|
|
#define partDrive 0x0001 // D: Vol
|
|
#define partDir 0x0002 // dir\dir\ :dir:dir:
|
|
#define partBase 0x0004 // basename filename
|
|
#define partExt 0x0008 // ext <usu. nothing>
|
|
#define partAll 0xFFFF
|
|
|
|
/*
|
|
max. string lengths of file names
|
|
*/
|
|
#define cchMaxPath 260 // = _MAX_PATH in <stdlib.h>
|
|
|
|
/*
|
|
An FM is a magic cookie which refers to some structure describing the
|
|
location of a file, including the volume/drive, path, and filename.
|
|
*/
|
|
|
|
typedef struct {
|
|
char rgch[cchMaxPath]; // Fully canonicalized pathname
|
|
// short wCount; // for FM caching; number of references
|
|
} AFM; // ÒAllocation of FMÓ
|
|
typedef AFM FAR *QAFM;
|
|
|
|
typedef HANDLE FM; // Handle to an AFM
|
|
typedef WORD DIR; // Help directory flag
|
|
|
|
#define FValidFm(fm) ((fm)!=fmNil)
|
|
|
|
/*** MATTSMI 2/5/92 -- ADDED FROM DOS VERSION OF THIS HEADER TO SUPPORT WMVC ***/
|
|
|
|
#define VerifyFm(fm) assert(fm == fmNil || FCheckGh((HANDLE) fm))
|
|
|
|
FM FAR PASCAL FmNewSzDir (LPSTR sz, DIR dir);
|
|
FM FAR PASCAL FmNewExistSzDir (LPSTR sz, DIR dir);
|
|
FM FAR PASCAL FmNewExistSzIni (LPSTR sz, LPSTR lpstrExe, LPSTR lpstrCap);
|
|
FM FAR PASCAL FmNewGetExist (HWND hwndParent, LPSTR szTemplate, LPSTR szPrompt);
|
|
FM FAR PASCAL FmNewGetNew (HWND hwndParent, LPSTR szTemplate, LPSTR szPrompt, LPSTR szName);
|
|
FM FAR PASCAL FmNewTemp (void);
|
|
FM FAR PASCAL FmNewSameDirFmSz (FM fm, LPSTR szName);
|
|
VOID FAR PASCAL DisposeFm (FM fm);
|
|
FM FAR PASCAL FmCopyFm(FM fm);
|
|
BOOL FAR PASCAL FExistFm(FM fm);
|
|
short FAR PASCAL CbPartsFm(FM fm, INT grfPart);
|
|
LPSTR FAR PASCAL SzPartsFm(FM fm, LPSTR szDest, INT cbDest, INT grfPart);
|
|
BOOL FAR PASCAL FSameFmFm (FM fm1, FM fm2);
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* FIDs - file access
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#define wRead 0x0001
|
|
#define wWrite 0x0002
|
|
#define wReadOnly wRead
|
|
#define wReadWrite (wRead | wWrite)
|
|
#define wRWMask (wRead | wWrite)
|
|
|
|
#define wShareRead 0x0004
|
|
#define wShareWrite 0x0008
|
|
#define wShareAll (wShareRead | wShareWrite)
|
|
#define wShareNone 0x000
|
|
#define wShareMask (wShareRead | wShareWrite)
|
|
#define wShareShift 2
|
|
|
|
#define fidNil ((FID)-1)
|
|
|
|
#define wSeekSet 0 /* SEEK_SET from stdio.h */
|
|
#define wSeekCur 1 /* SEEK_CUR from stdio.h */
|
|
#define wSeekEnd 2 /* SEEK_END from stdio.h */
|
|
|
|
#ifndef WIN32
|
|
typedef WORD FID;
|
|
#else
|
|
typedef HFILE FID;
|
|
#endif
|
|
|
|
|
|
#define FUnlinkFm(fm) ((BOOL)(RcUnlinkFm(fm)==rcSuccess))
|
|
|
|
FID FidCreateFm(FM fm, WORD wOpenMode, WORD wPerm);
|
|
FID FidOpenFm(FM fm, WORD wOpenMode);
|
|
|
|
|
|
RC RcUnlinkFm(FM fm);
|
|
|
|
FID FidOpenFm(FM fm, WORD wOpenMode);
|
|
LONG LcbReadFid(FID, LPVOID, LONG);
|
|
|
|
#define FCloseFid(fid) ((BOOL)(_lclose((int)fid) == 0))
|
|
RC RcCloseFid(FID);
|
|
|
|
LONG LcbWriteFid(FID, LPVOID, LONG);
|
|
LONG LTellFid(FID);
|
|
LONG LSeekFid(FID, LONG, WORD);
|
|
BOOL FEofFid(FID);
|
|
LONG LcbReadFid (FID, LPVOID, LONG);
|
|
LONG LcbWriteFid (FID, LPVOID, LONG);
|
|
|
|
#define FChSizeFid(fid, lcb) ((BOOL)(chsize((fid), (lcb)) == 0))
|
|
RC RcChSizeFid(FID, LONG);
|
|
|
|
BOOL FAR FDriveOk(LPSTR);
|
|
|
|
RC FAR PASCAL RcGetIOError(void);
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* FS - file system
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/* FS magic number */
|
|
#define wFileSysMagic 0x5F3F // ?_ - the help icon (with shadow)
|
|
|
|
//#define bFileSysVersion 2 // sorted free list
|
|
/* Current FS version */
|
|
#define bFileSysVersion (BYTE)3 // different sorting functions
|
|
|
|
/* file mode flags */
|
|
|
|
|
|
#define fFSReadOnly (BYTE)0x01 // file (FS) is readonly
|
|
#define fFSOpenReadOnly (BYTE)0x02 // file (FS) is opened in readonly mode
|
|
#define fFSReadWrite (BYTE)0x00 // file (FS) is readwrite
|
|
#define fFSOpenReadWrite (BYTE)0x00 // file (FS) is opened in read/write mode
|
|
#define fFSOptCdRom (BYTE)0x20 // align file optimally for CDROM
|
|
#define fFSNoFlushDir (BYTE)0x40 // don't flush directory when closing
|
|
// file (for compilation only)
|
|
|
|
/* other (reserved) file flags */
|
|
|
|
#define fFSIsDirectory (BYTE)0x04 // file is really the FS directory
|
|
#define fFSDirty (BYTE)0x08 // file (FS) is dirty and needs writing
|
|
#define fFSNoBlock (BYTE)0x10 // file has no associated block yet
|
|
|
|
/* flags for FlushHfs */
|
|
|
|
#define fFSCloseFile (BYTE)0x01 // close fid associated with the FS
|
|
#define fFSFreeBtreeCache (BYTE)0x02 // free the btree's cache
|
|
|
|
|
|
/* seek origins */
|
|
|
|
#define wFSSeekSet 0 // seek relative to start of file
|
|
#define wFSSeekCur 1 // seek relative to current position
|
|
#define wFSSeekEnd 2 // seek relative to end of file
|
|
|
|
/* low level info options */
|
|
|
|
#define wLLSameFid 0 // reuse the FID
|
|
#define wLLDupFid 1 // dup() the FID
|
|
#define wLLNewFid 2 // reopen the file
|
|
|
|
/*
|
|
Opaque identifier of an open FS.
|
|
Actual typedef is in misc.h so this file needn't be included everywhere.
|
|
*/
|
|
|
|
typedef HANDLE HFS;
|
|
|
|
/*
|
|
Opaque identifier of an open FS file.
|
|
*/
|
|
|
|
typedef HANDLE HF; /* handle to file */
|
|
|
|
/*
|
|
The FS_PARAMS structure contains tuning information and is passed
|
|
to HfsCreateFileSysFm().
|
|
*/
|
|
|
|
typedef struct _fs_params
|
|
{
|
|
WORD wFudge; // unused (bytes or -% padding when saving a file)
|
|
WORD cbBlock; // directory btree blocksize in bytes
|
|
} FS_PARAMS;
|
|
|
|
RC FAR PASCAL RcGetFSError (void);
|
|
|
|
/* File System Operations */
|
|
|
|
HFS FAR PASCAL HfsCreateFileSysFm(FM, FS_PARAMS FAR *);
|
|
RC FAR PASCAL RcDestroyFileSysFm(FM);
|
|
HFS FAR PASCAL HfsOpenFm (FM, BYTE);
|
|
RC FAR PASCAL RcCloseHfs (HFS);
|
|
|
|
HFS FAR PASCAL HfsTransformHfs (HFS /* , ??? */);
|
|
HFS FAR PASCAL HfsFillFileSys (/* ??? */);
|
|
RC FAR PASCAL RcFlushHfs (HFS, BYTE);
|
|
|
|
#define VerifyHfs(hfs)
|
|
|
|
RC RcTimestampHfs (HFS, LPLONG);
|
|
|
|
|
|
/* File Operations */
|
|
|
|
HF FAR PASCAL HfCreateFileHfs (HFS, LPSTR, BYTE);
|
|
RC FAR PASCAL RcUnlinkFileHfs (HFS, LPSTR);
|
|
HF FAR PASCAL HfOpenHfs (HFS, LPSTR, BYTE);
|
|
RC FAR PASCAL RcCloseOrFlushHf (HF, BOOL, LONG);
|
|
RC FAR PASCAL RcFlushHf (HF);
|
|
RC FAR PASCAL RcCloseHf (HF);
|
|
LONG FAR PASCAL LcbReadHf (HF, LPVOID, LONG);
|
|
LONG FAR PASCAL LcbWriteHf (HF, LPVOID, LONG);
|
|
LONG FAR PASCAL LTellHf (HF);
|
|
LONG FAR PASCAL LSeekHf (HF, LONG, WORD);
|
|
BOOL FAR PASCAL FEofHf (HF);
|
|
BOOL FAR PASCAL FChSizeHf (HF, LONG);
|
|
LONG FAR PASCAL LcbSizeHf (HF);
|
|
BOOL FAR PASCAL FAccessHfs (HFS, LPSTR, BYTE);
|
|
RC FAR PASCAL RcAbandonHf (HF);
|
|
RC FAR PASCAL RcRenameFileHfs (HFS, LPSTR, LPSTR);
|
|
|
|
#define VerifyHf(hf)
|
|
|
|
// These functions require the FID type. They only make sense
|
|
// if the caller already needs H_LLFILE.
|
|
#ifdef H_LLFILE
|
|
RC FAR PASCAL RcLLInfoFromHf (HF, WORD, FID FAR *, LPLONG, LPLONG);
|
|
RC FAR PASCAL RcLLInfoFromHfsSz (HFS, LPSTR, WORD, FID FAR *, LPLONG, LPLONG);
|
|
#endif // H_LLFILE
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* BTREE api
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#define bBtreeVersionBonehead 0 /* fixed size key, array */
|
|
|
|
|
|
#define wBtreeMagic 0x293B /* magic number for btrees; a winky: ;) */
|
|
|
|
#define bBtreeVersion 2 /* back to strcmp for 'z' keys */
|
|
|
|
|
|
#define bkNil ((BK)-1)/* nil value for BK */
|
|
|
|
|
|
#define wMaxFormat 15 /* length of format string */
|
|
|
|
|
|
#define cbBtreeBlockDefault 1024 /* default btree block size */
|
|
|
|
|
|
/* key types */
|
|
|
|
|
|
#define KT_SZ 'z'
|
|
#define KT_SZMIN 'm' /* not supported */
|
|
#define KT_SZDEL 'r' /* not supported */
|
|
#define KT_SZDELMIN 'k' /* not supported */
|
|
#define KT_SZI 'i'
|
|
#define KT_ST 't' /* not supported */
|
|
#define KT_STMIN 'M' /* not supported */
|
|
#define KT_STDEL 'R' /* not supported */
|
|
#define KT_STDELMIN 'K' /* not supported */
|
|
#define KT_STI 'I'
|
|
#define KT_LONG 'L'
|
|
#define KT_SZISCAND 'S'
|
|
|
|
|
|
/*
|
|
Btree record formats
|
|
|
|
In addition to these #defines, '1'..'9', 'a'..'f' for fixed length
|
|
keys & records of 1..15 bytes are accepted.
|
|
*/
|
|
|
|
|
|
#define FMT_BYTE_PREFIX 't'
|
|
#define FMT_WORD_PREFIX 'T'
|
|
#define FMT_SZ 'z'
|
|
|
|
/* elevator constants */
|
|
|
|
|
|
#define btelevMax ((BT_ELEV)32767)
|
|
#define btelevNil ((BT_ELEV)-1)
|
|
|
|
typedef LONG KEY; /* btree key */
|
|
typedef BYTE KT; /* key type */
|
|
|
|
|
|
typedef HANDLE HBT; /* handle to a btree */
|
|
typedef HANDLE HMAPBT; /* handle to a btree map */
|
|
|
|
|
|
/*
|
|
Btree creation parameters
|
|
*/
|
|
|
|
typedef struct _btree_params
|
|
{
|
|
HFS hfs; /* fs btree lives in */
|
|
int cbBlock; /* number of bytes in a btree block */
|
|
BYTE bFlags; /* same as FS flags (rw, isdir, etc) */
|
|
|
|
char rgchFormat[ wMaxFormat + 1 ]; /* key and record format string */
|
|
|
|
} BTREE_PARAMS;
|
|
|
|
|
|
typedef UINT BK; /* btree block index */
|
|
|
|
/*
|
|
Btree position struct
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
BK bk; /* block number */
|
|
int cKey; /* which key in block (0 means first) */
|
|
int iKey; /* key's index db.rgbBlock (in bytes) */
|
|
} BTPOS, FAR *QBTPOS;
|
|
|
|
|
|
typedef int BTELEV, FAR *QBTELEV; /* elevator location: 0 .. 32767 legal */
|
|
|
|
RC FAR PASCAL RcGetBtreeError (void);
|
|
//RC FAR PASCAL SetBtreeErrorRc (RC);
|
|
|
|
HBT FAR PASCAL HbtCreateBtreeSz(LPSTR, BTREE_PARAMS FAR *);
|
|
RC FAR PASCAL RcDestroyBtreeSz(LPSTR, HFS);
|
|
|
|
HBT FAR PASCAL HbtOpenBtreeSz (LPSTR, HFS, BYTE, BYTE far *); /* >>>> BYTE big enough? */
|
|
RC FAR PASCAL RcCloseBtreeHbt (HBT);
|
|
RC FAR PASCAL RcAbandonHbt (HBT);
|
|
#ifdef DEBUG
|
|
VOID FAR PASCAL VerifyHbt (HBT);
|
|
#else
|
|
#define VerifyHbt(hbt)
|
|
#endif //!def DEBUG
|
|
|
|
|
|
RC FAR PASCAL RcLookupByPos (HBT, QBTPOS, KEY, INT, LPVOID);
|
|
RC FAR PASCAL RcLookupByKeyAux(HBT, KEY, QBTPOS, LPVOID, BOOL);
|
|
|
|
#define RcLookupByKey( hbt, key, qbtpos, qv) \
|
|
RcLookupByKeyAux((hbt), (key), (qbtpos), (qv), FALSE)
|
|
|
|
RC FAR PASCAL RcFirstHbt (HBT, KEY, LPVOID, QBTPOS);
|
|
RC FAR PASCAL RcLastHbt (HBT, KEY, LPVOID, QBTPOS);
|
|
RC FAR PASCAL RcNextPos (HBT, QBTPOS, QBTPOS);
|
|
RC FAR PASCAL RcOffsetPos (HBT, QBTPOS, LONG, LPLONG, QBTPOS);
|
|
|
|
#ifdef DEBUG
|
|
#define FValidPos(qbtpos) \
|
|
((qbtpos) == NULL ? FALSE : (qbtpos)->bk != bkNil)
|
|
#else /* !DEBUG */
|
|
|
|
#define FValidPos(qbtpos) ((qbtpos)->bk != bkNil)
|
|
#endif /* !DEBUG */
|
|
|
|
RC FAR PASCAL RcInsertHbt (HBT, KEY, LPVOID);
|
|
RC FAR PASCAL RcDeleteHbt (HBT, KEY);
|
|
RC FAR PASCAL RcUpdateHbt (HBT, KEY, LPVOID);
|
|
|
|
RC FAR PASCAL RcPackHbt (HBT); /* >>>> unimplemented */
|
|
RC FAR PASCAL RcCheckHbt (HBT); /* >>>> unimplemented */
|
|
RC FAR PASCAL RcLeafBlockHbt (HBT, KEY, LPVOID); /* >>>> unimplemented */
|
|
|
|
HBT FAR PASCAL HbtInitFill (LPSTR, BTREE_PARAMS FAR *);
|
|
RC FAR PASCAL RcFillHbt (HBT, KEY, LPVOID);
|
|
RC FAR PASCAL RcFiniFillHbt (HBT);
|
|
|
|
RC FAR PASCAL RcFreeCacheHbt (HBT);
|
|
RC FAR PASCAL RcFlushHbt (HBT);
|
|
RC FAR PASCAL RcCloseOrFlushHbt(HBT, BOOL);
|
|
|
|
RC FAR PASCAL RcPos2Elev(HBT, QBTPOS, QBTELEV); /* >>>> unimplemented */
|
|
RC FAR PASCAL RcElev2Pos(HBT, QBTELEV, QBTPOS); /* >>>> unimplemented */
|
|
|
|
RC FAR PASCAL RcGetBtreeInfo(HBT, LPBYTE, QL, QI);
|
|
|
|
/* Map utility functions */
|
|
|
|
RC FAR PASCAL RcCreateBTMapHfs(HFS, HBT, LPSTR);
|
|
HMAPBT FAR PASCAL HmapbtOpenHfs(HFS, LPSTR);
|
|
RC FAR PASCAL RcCloseHmapbt(HMAPBT);
|
|
RC FAR PASCAL RcIndexFromKeyHbt(HBT, HMAPBT, LPLONG, KEY);
|
|
RC FAR PASCAL RcKeyFromIndexHbt(HBT, HMAPBT, KEY, INT, LONG);
|
|
|
|
BOOL FAR PASCAL FIsPrefix(HBT, KEY, KEY);
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* Viewer File Handling
|
|
*
|
|
*****************************************************************************/
|
|
BOOL FAR PASCAL LooseFileCompare(LPSTR, LPSTR);
|
|
FM FAR PASCAL LocateViewerFile(FM, LPSTR, LPSTR, LPSTR);
|
|
HANDLE FAR PASCAL LocateViewerDLL(LPSTR,LPSTR,LPSTR, LPWORD);
|
|
|
|
typedef BOOL (FAR PASCAL * PROGFUNC)(WORD);
|
|
RC FAR PASCAL CopyFileToSubfile(HFS, LPSTR, LPSTR, LONG, BYTE, PROGFUNC);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#define _MAX_PATH 260
|
|
#ifdef WIN32
|
|
#pragma pack()
|
|
#endif
|