|
|
//*********************************************************************
//
// DOSDLL.H
//
// Copyright (c) 1992 - Microsoft Corp.
// All rights reserved.
// Microsoft Confidential
//
// This header file contains the typedefs and #defines needed when
// calling into and calling back from a DOS type DLL.
//
// PROGRAMMER CAVEAT:
// Remember that all pointers in the DLL must be far because
// the C runtime libraries which use near pointers always assume
// that DS == SS which is not the case with a DLL.
//*********************************************************************
#define CMD_YIELD 0 // Standard callback cmd to call Yield()
#define SIGNAL_ABORT 1 // Signal to abort DLL process
//*********************************************************************
// Windows memory allocation functions used in the implementation
// of GetMemory() and FreeMemory().
//*********************************************************************
#ifndef GMEM_FIXED
#define GMEM_FIXED 0
unsigned _far _pascal GlobalAlloc( unsigned Flags, unsigned long Bytes ); unsigned _far _pascal GlobalFree( unsigned ); void * _far _pascal GlobalLock( unsigned ); unsigned _far _pascal GlobalUnlock( unsigned ); unsigned long _far _pascal GlobalHandle( unsigned );
#endif
//#define DllYield() ((void)(*CallBackAddr)( NULL, CMD_YIELD, 0, 0, 0, 0 ))
//*********************************************************************
// TO_DLL - Declaration for a DLL entry function.
// TO_DLL_PTR - Declaration for a pointer to a DLL entry function.
//*********************************************************************
// #define TO_DLL unsigned long _far _cdecl
typedef unsigned long _far _cdecl TO_DLL( unsigned, unsigned, ... );
typedef unsigned long (_far _cdecl *TO_DLL_PTR)();
//*********************************************************************
// FROM_DLL - Declaration for a callback dispatcher function.
// FROM_DLL_PTR- Declaration for a pointer to a callback dispatcher funct.
// FROM_DLL_ARGS- Argument prototype for callback dispatcher function.
//*********************************************************************
#define FROM_DLL unsigned long _loadds _far _pascal
#define FROM_DLL_ARGS CB_FUNC_PTR,unsigned,unsigned,unsigned long,unsigned, unsigned
typedef unsigned long (_loadds _far _pascal *FROM_DLL_PTR)();
//*********************************************************************
// CB_FUNC - Declaration for a callback function.
// CB_FUNC_PTR - Declaration for a pointer to a callback function.
// CB_FUNC_ARGS- Argument prototype for callback function.
//*********************************************************************
#define CB_FUNC unsigned long _far
#define CB_FUNC_ARGS unsigned,unsigned,unsigned long
typedef unsigned long (_far *CB_FUNC_PTR)();
//*********************************************************************
#define PTR_TYPE FPTR_TYPE
#define SZPTR_TYPE FSZPTR_TYPE
#define CODE_PTR_TYPE DWORD_TYPE
//*********************************************************************
#define WORD_TYPE 00
#define DWORD_TYPE 01U
#define NPTR_TYPE 02U
#define FPTR_TYPE 03U
#define NSZPTR_TYPE 04U
#define FSZPTR_TYPE 05U
#define VARI_TYPE 07U
#define TRANS_NONE 00
#define TRANS_SRC (01U << 14)
#define TRANS_DEST (02U << 14)
#define TRANS_BOTH (03U << 14)
#define LEN_SHIFT 12
//*********************************************************************
// DllCall() - Entry function for call DLL.
// CallBack() - Function in control program which dispatches callbacks
//*********************************************************************
// TO_DLL DllCall( unsigned Cmd, unsigned ArgCount, unsigned Descriptor, ... );
// FROM_DLL CallBack( unsigned long (_far *Func)(CB_FUNC_ARGS),
// unsigned Cmd, unsigned uParam, unsigned long lParam,
// unsigned Descriptor, unsigned Size );
//*********************************************************************
// The following #defines are used to simulate a function call from the
// control program to the DLL. There is only one entry point into the
// DLL so a function number is used to specify the function being called.
// A complete and detailed description of how the transport descriptors
// should be specified is in ENTRY.ASM.
//
// PROGRAMMER CAVEAT:
// Remember that these are #defines and not function prototypes
// so all references to types must be done as casts....
// Also remember that any pointer to data must be FAR because
// DS is always set to the DLL own heap on entry and SS != DS.
//*********************************************************************
#define DLL_SIGNAL 0 // DllSignal()
#define DLL_SET_CALLBACK 1 // SetCallBackAddr()
#define DLL_COPY 2 // DllCopyMain()
#define DLL_DELETE 3 // DllDeleteMain()
#define DLL_DIR 4 // DllDirMain()
#define DLL_GET_DISK_FREE 5 // DllGetDiskFree()
#define DLL_LOAD_MSGS 6 // DllLoadMsgs()
#define DLL_LOAD_STRING 7 // DllLoadString()
#define DLL_EXT_OPEN_FILE 8 // DllDosExtOpen()
#define DLL_OPEN_FILE 9 // DllDosOpen()
#define DLL_READ_FILE 10 // DllDosRead()
#define DLL_WRITE_FILE 11 // DllDosWrite()
#define DLL_CLOSE_FILE 12 // DllDosClose()
#define DLL_SEEK_FILE 13 // DllDosSeek()
#define DLL_GET_MEDIA_ID 14 // DllDosGetMediaId()
#define DLL_GET_CWD_ID 15 // DllGetCwd()
#define DLL_SET_CWD_ID 16 // DllSetCwd()
#define DLL_GET_DRV_ID 17 // DllGetDrive()
#define DLL_SET_DRV_ID 18 // DllSetDrive()
#define DLL_MKDIR 19 // DllMakeDir()
#define DLL_RMDIR 20 // DllRemoveDir()
#define DLL_MKDIR_TREE 21 // DllCreateDirTree()
#define DLL_RENAME 22 // DllRenameFiles()
#define DLL_MOVE 23 // DllRenameFiles()
#define DLL_FIND 24 // DllFindFiles()
#define DLL_TOUCH 25 // DllTouchFiles()
#define DLL_ATTRIB 26 // DllAttribFiles()
#define DLL_SET_CNTRY_INF 27 // DllSetCntryInfo()
#define DLL_RELEASE 28 // DllReleaseInstance()
//*********************************************************************
// DLL function which is called by the user of the DLL to set a global
// callback address where all callback will be routed thru. The
// callback function must follow the criteria exampled in CB_ENTRY.ASM.
// This function will initialize the SignalValue and the DOS version
// number.
//
// void DllSetCallBackAddr( long (far cdecl *FuncPtr)() )
//
// ARGUMENTS:
// FunctPtr - Pointer to callback entry function (TO_DLL_PTR)
// RETURNS:
// int - OK
//
//*********************************************************************
#define DllSetCallBackAddr( CallBackAddr )\
((void)(*DllEntry)( DLL_SET_CALLBACK, 1,\ DWORD_TYPE + TRANS_NONE,\ CallBackAddr ))
//*********************************************************************
// DLL function to set a signal value which will cause the currently
// executing function to abort and return an error code. If the
// SignalValue is < 0 it will be returned returned unchanged as the
// error code. If the value > 0 it will be considered a user abort
// and ERR_USER_ABORT will be returned.
//
// void DllSignal( int Signal )
//
// ARGUMENTS:
// Signal - Signal value.
// RETURNS:
// void
//
//*********************************************************************
#define DllSignal( x )\
((void)(*DllEntry)( DLL_SIGNAL, 1,\ WORD_TYPE + TRANS_NONE,\ (int)x ))
//*********************************************************************
// Main entry point for the copy/move engine. Accepts a command line and
// copies the files meeting the specified criteria.
//
// int DllCopyFiles( char *szCmdLine, char *szEnvStr, CPY_CALLBACK CpyCallBack )
// int DllMoveFiles( char *szCmdLine, char *szEnvStr, CPY_CALLBACK CpyCallBack )
//
// ARGUMENTS:
// szCmdLine - Ptr to command line string, less command name
// szEnvStr - Ptr to optional enviroment cmd string or NULL
// CpyCallBack - Ptr to copy callback function.
// RETURNS:
// int - OK if all files copies successfull else error code
// which is < 0 if a parse error and > 0 if a DOS
// or C runtime error.
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [dest] [SrchCriteria] [/E][/M][/N][/P][/R][/S][/U][/V][/W]
//
// source Specifies the file or files to be copied.
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// destination Specifies the directory and/or filename
// for the new file(s).
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// /C Confirm on overwrite of existing file.
//
// /D Prompt for next disk when current on is full
//
// /E Copies any subdirectories, even if empty.
//
// /M Turns the source files archive attribute bit off after
// copying the file.
//
// /N Adds new files to destination directory. "CAN" be used
// with /S or /U switches.
//
// /O Replace existing files regardless of date not compable
// with /N or /U.
//
// /P Prompts for confirmation before copying each file.
//
// /R Overwrites read-only files as well as reqular files.
//
// /S Copies files from specified directory and it's
// subdirectories.
//
// /U Replaces (updates) only files that are older than
// source files (May be used with /A)
//
// /V Verifies that new files are written correctly.
//
// /W Prompts you to press a key before copying. (Not implemented)
//
// /X Emulate XCOPY's ablity to read as many files as possible
// before writing them to the destination.
//
// CpyCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// int far CPY_CALLBACK)( int Func, unsigned long ulArg0, void far *pArg1,
// void far *pArg2, void far *pArg3 );
//
// CB_CPY_FLGS 0x0001 // Passing back parsed copy flags
// CB_CPY_ENVERR 0x0002 // Passing back non-fatal error
// CB_CPY_SWITCH 0x0003 // Passing back unrecongized switch
// CB_CPY_ERR_STR 0x0004 // Passing back error error string
// CB_CPY_FOUND 0x0005 // File was found and ready to copy
// CB_CPY_FWRITE 0x0006 // Destination is about to be written
// CB_CPY_QISDIR 0x0007 // Query user if dest is file or dir
//
// Option bits which may be passed by by CB_CPY_FLGS are:
//
// CPY_CONFIRM 0x0001 /C Confirm before overwrite existing file
// CPY_EMPTY 0x0002 /E Copy empty subdirectories
// CPY_MODIFY 0x0004 /M Set the archive bit on source
// CPY_NEW 0x0008 /N Copy if file !exist on destination
// CPY_EXISTING 0x0010 /O Copy over existing files only.
// CPY_PROMPT 0x0020 /P Prompt before copying file
// CPY_RDONLY 0x0040 /R Overwrite readonly files
// CPY_UPDATE 0x0080 /U Copy only files new than destin
// CPY_VERIFY 0x0100 /V Turn DOS verify to ON
// CPY_WAIT 0x0200 /W Prompt before first file
// CPY_XCOPY 0x0400 /X Use buffered copy.
// CPY_FULL 0x1000 /D Prompt for next disk when current is full
// CPY_HELP 0x0800 /? Display help
//
//*********************************************************************
#define DllCopyFiles( szCmdLine, szEnv, CB_CpyCallBack )\
((int)(*DllEntry)( DLL_COPY, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (far pascal *)())CB_CpyCallBack ))
//*********************************************************************
#define DllMoveFiles( szCmdLine, szEnv, CB_CpyCallBack )\
((int)(*DllEntry)( DLL_MOVE, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (far pascal *)())CB_CpyCallBack ))
//*********************************************************************
// Main entry point for the file delete engine. Accepts a command line
// and deletes the files meeting the specified criteria.
//
// int DllDelFiles( char *szCmdLine, char *szEnvStr, DEL_CALLBACK DelCallBack )
//
// ARGUMENTS:
// szCmdLine - Ptr to command line string, less command name
// szEnvStr - Ptr to optional enviroment cmd string or NULL
// DelCallBack - Ptr to delete callback function.
// RETURNS:
// int - OK if all files deleted successfull else error code
// which is < 0 if a parse error and > 0 if a DOS
// or C runtime error.
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [/E] [/P] [/R] [/S] [/U]"
//
// source Specifies the file or files to be deleted
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// /E Delete empty subdirectories
// /P Prompts for confirmation before copying each file
// /R Delete readonly files which match search criteria
// /S Delete files in specified path and all its subdirectories
// /U Alias for /A*/R/E
//
//
// DelCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// int far DEL_CALLBACK)( int Func, unsigned long ulArg0, void far *pArg1,
// void far *pArg2 )
//
// CB_DEL_FLGS 0x0001 // Passing back parsed delete flags
// CB_DEL_ENVERR 0x0002 // Passing back non-fatal error
// CB_DEL_SWITCH 0x0003 // Passing back unrecongized switch
// CB_DEL_ERR_STR 0x0004 // Passing back error error string
// CB_DEL_FOUND 0x0005 // File was found and ready to delete
// CB_DEL_QDELALL 0x0006 // Query user if should delete *.*
// CB_DEL_QDELALL 0x0006 // Query user if should delete *.*
//
//*********************************************************************
#define DllDeleteFiles( szCmdLine, szEnv, CB_DelCallBack )\
((int)(*DllEntry)( DLL_DELETE, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (far pascal *)())CB_DelCallBack ))
//*********************************************************************
// Main entry point for the file dir engine. Accepts a command line
// and does an application callback the files meeting the specified
// criteria.
//
// int DllDirFiles( char *szCmdLine, char *szEnvStr, DIR_CALLBACK DirCallBack )
//
// ARGUMENTS:
// szCmdLine - Ptr to command line string, less command name
// szEnvStr - Ptr to optional enviroment cmd string or NULL
// DirCallBack - Ptr to dir callback function.
// RETURNS:
// int - OK if all files directoried successfull else error code
// which is < 0 if a parse error and > 0 if a DOS
// or C runtime error.
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [/B] [/L] [/O] [/P] [/S] [/V] [/W] [/?]
//
// source Specifies the file or files to be directoried
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// Switches: #defined value in DirFlgs
//
// /B Display a bare listing DIR_BARE 0x0001
// /L Display in lower case DIR_LCASE 0x0002
// /O Display in sorted order DIR_ORDERED 0x0004
// /P Paged output DIR_PAGED 0x0008
// /S Recurse subdirectories DIR_SUBDIRS 0X0010
// /V Display verbose information DIR_VERBOSE 0x0020
// /W Display wide listing DIR_WIDE 0x0040
// /? Display help DIR_HELP 0x0080
//
//
// DelCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// int far DIR_CALLBACK)( int Func, unsigned long ulArg0, void far *pArg1,
// void far *pArg2 )
//
// CB_DIR_FLGS 0x0001 // Passing back parsed dir flags
// CB_DIR_ENVERR 0x0002 // Passing back non-fatal error
// CB_DIR_SWITCH 0x0003 // Passing a non-search switch
// CB_DIR_ERR_STR 0x0004 // Passing back an error string
// CB_DIR_FOUND 0x0005 // File was found and ready to delete
// CB_DIR_ENTER 0x0006 // A search is starting on a new directory
// CB_DIR_LEAVE 0x0007 // No more files on current directory
// CB_DIR_NEWSEARCH 0x0008 // Starting a new srch with diff. filespec
// CB_DIR_ENDPATH 0x0009 // End of current search path
// CB_QUERY_ACCESS 0x000a // Query if access date is required.
//
//*********************************************************************
#define DllDirFiles( szCmdLine, szEnv, CB_DirCallBack )\
((int)(*DllEntry)( DLL_DIR, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (pascal far *)())CB_DirCallBack))
//**********************************************************************
// Returns disk free information for the specified drive.
//
// int DllGetDiskFree( int cDrvLetter, struct _diskfree_t *DrvInfo )
//
// ARGUMENTS:
// DrvLetter - Drive letter to get disk free information about
// pDrvInfo - Ptr to a drive information structure to fill in
// RETURNS:
// int - OK if no errors else errno from C runtime
//
//**********************************************************************
#define DllGetDiskFree( DriveLetter, DiskFreeStruc )\
((int)(*DllEntry)( DLL_GET_DISK_FREE, 2,\ WORD_TYPE + TRANS_NONE,\ PTR_TYPE + TRANS_DEST,\ sizeof( struct diskfree_t ),\ DriveLetter,\ (struct diskfree_t _far *)DiskFreeStruc ))
//*********************************************************************
// Main entry point for the file rename engine. Accepts a command line
// and renames the files meeting the specified criteria.
//
// int DllRenameFiles( char *szCmdLine, char *szEnvStr, REN_CALLBACK RenCallBack )
//
// ARGUMENTS:
// szCmdLine - Ptr to command line string, less command name
// szEnvStr - Ptr to optional enviroment cmd string or NULL
// DelCallBack - Ptr to rename callback function.
// RETURNS:
// int - OK if all files renamed successfull else error code
// which is < 0 if a parse error and > 0 if a DOS
// or C runtime error.
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [/P] [/S]"
//
// source Specifies the file or files to be renamed
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// /P Prompts for confirmation before copying each file
// /S Rename files in specified path and all its subdirectories
//
//
// DelCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// int far REN_CALLBACK)( int Func, unsigned long ulArg0, void far *pArg1,
// void far *pArg2 )
//
// CB_REN_FLGS 0x0001 // Passing back parsed rename flags
// CB_REN_ENVERR 0x0002 // Passing back non-fatal error
// CB_REN_SWITCH 0x0003 // Passing back unrecongized switch
// CB_REN_ERR_STR 0x0004 // Passing back error error string
// CB_REN_FOUND 0x0005 // File was found and ready to rename
//
//*********************************************************************
#define DllRenameFiles( szCmdLine, szEnv, CB_DelCallBack )\
((int)(*DllEntry)( DLL_RENAME, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (far pascal *)())CB_DelCallBack ))
//*********************************************************************
// Loads a group of messages from the resource file in the specified
// file into memory for latter retrieval by LoadStr(). In addition to
// the requested messages the function will also load all error messages
// in the ranges of 0-0xff and 0xff00 - 0xffff (-256 thru +255) on
// the first call to the function. The resource table is built in
// StrTable and then sorted, and then StrBuf is allocated and the
// resource strings are read into the buffer.
//
// NOTE:
// Currently this function may only be called once.
//
// int LoadMsgs( char *szFile, unsigned uStart, unsigned uEnd )
//
// ARGUMENTS:
// szFile - Ptr to .EXE file containing the messages to load
// uStart - Starting message number to load into memory
// uEnd - Ending message number to be loaded into memory.
// RETURNS:
// int - OK if all messages (including normal preloaded messages)
// are successfully loaded, else an error code.
//
//*********************************************************************
#define DllLoadMsgs( szFile, uStart, uEnd )\
((int)(*DllEntry)( DLL_LOAD_MSGS, 3,\ FSZPTR_TYPE + TRANS_SRC,\ WORD_TYPE + TRANS_NONE,\ WORD_TYPE + TRANS_NONE,\ (char far *)szFile,\ (unsigned)uStart,\ (unsigned)uEnd ))
//*********************************************************************
// Windows emulatation function for accessing a string resource. Copies
// the specified string resource into a caller supplied buffer and
// appends a terminating zero to it. Because string groups are aligned
// standard boundaries there is normally a lot of trailing zeros which
// we strip off after reading in a group of strings.
//
// NOTE:
// Currently this functions requires that the string resource was
// previously loaded into memory by LoadMsgs() which should be called
// once at the begining of the program to preload all required
// messages.
//
// int DllLoadString( unsigned hInst, unsigned idResource, char far *szBuf,
// int iBufLen )
//
// ARGUMENTS:
// hInst - Instance of the calling program (should be zero)
// idResource - The string ID as specified in the .RC file
// szBuf - Buffer to copy the string to
// iBufLen - Max characters to copy into the specified buffer
// RETURNS:
// int - The number of bytes copied. This number will be
// 0 if the specified resource cannot be located in
// StrTable[].
//
//*********************************************************************
#define DllLoadString( hInst, idResource, szBuf, iBufLen )\
((int)(*DllEntry)( DLL_LOAD_STRING, 4,\ WORD_TYPE + TRANS_NONE,\ WORD_TYPE + TRANS_NONE,\ FSZPTR_TYPE + TRANS_SRC,\ WORD_TYPE + TRANS_NONE,\ (unsigned)hInst,\ (unsigned)idResource,\ (char far *)szBuf,\ (int)iBufLen ))
//*********************************************************************
// Extended file open function used DOS function 6ch to open a file
// and return a file handle.
//
// unsigned DllDosExtOpen( char *szFile, unsigned uMode, unsigned uAttribs,
// unsigned uCreat, unsigned *uFhandle )
//
// ARGUMENTS:
// szFile - Ptr to buffer containing a fully qualified filespec string
// uMode - Open mode for file access and sharing. (BX)
// uAttribs - Attributes for file if being created. (CX)
// uCreate - Create action flags. (DX)
// uFhandle- Ptr to unsigned file handle
// RETURNS:
// unsigned - OK if no errors and open file handle stored in *uFhandle
// ELSE DOS error code and errno set to C runtime erro code
//
//*********************************************************************
#define DllDosExtOpen( szFile, uMode, uAttribs, uCreate, pHandle )\
((int)(*DllEntry)( DLL_EXT_OPEN_FILE, 5,\ FSZPTR_TYPE + TRANS_SRC,\ WORD_TYPE + TRANS_NONE,\ WORD_TYPE + TRANS_NONE,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( int ),\ (char far *)szFile,\ (unsigned)uMode,\ (unsigned)uAttribs,\ (unsigned)uCreate,\ (int far *)pHandle ))
//*********************************************************************
// See C_RUNTIME _dos_open() for complete description.
//*********************************************************************
// unsigned DosOpenFile( char far *szFileSpec, unsigned uMode, int *pHandle );
#define DllDosOpen( szFile, uMode, pHandle )\
((int)(*DllEntry)( DLL_OPEN_FILE, 3,\ FSZPTR_TYPE + TRANS_SRC,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( int ),\ (char far *)szFile,\ (unsigned)uMode,\ (int far *)pHandle ))
//*********************************************************************
// See C_RUNTIME _dos_read() for complete description.
//*********************************************************************
// unsigned DosReadFile( int fHandle, char far *Buf, unsigned Bytes,
// unsigned *puRead );
#define DllDosRead( fHandle, pBuf, Bytes, pRead )\
((int)(*DllEntry)( DLL_READ_FILE, 4,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ Bytes,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( int ),\ (int)fHandle,\ (void far *)pBuf,\ (unsigned)Bytes,\ (unsigned far *)pRead ))
//*********************************************************************
// See C_RUNTIME _dos_write() for complete description.
//*********************************************************************
// unsigned DosWriteFile( int fHandle, char far *Buf, unsigned Bytes,
// unsigned *puWrite );
#define DllDosWrite( fHandle, pBuf, Bytes, pWritten )\
((int)(*DllEntry)( DLL_WRITE_FILE, 4,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_SRC,\ Bytes,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( int ),\ (int)fHandle,\ (void far *)pBuf,\ (unsigned)Bytes,\ (unsigned far *)pWritten ))
//*********************************************************************
// See C_RUNTIME _dos_close() for complete description.
//*********************************************************************
// unsigned DosCloseFile( int fHandle );
#define DllDosClose( fHandle )\
((int)(*DllEntry)( DLL_CLOSE_FILE, 1,\ WORD_TYPE + TRANS_NONE,\ (int)fHandle ))
//*********************************************************************
// Seeks to a new position in an open file using DOS function 0x42.
//
// unsigned _dos_seek( int fHandle, long lOffset, int iOrgin, long *plCurPos );
//
// ARGUMENTS:
// fHandle - Open DOS file handle
// lOffset - Offset to seek to in the file
// iOrigin - Origin to seek from can be:
// SEEK_SET From begining of file
// SEEK_CUR From current position if the file
// SEEK_END From the end of the file
// plCurPos - Ptr to dword value where absolute position in the file will
// be stored after the seek
// RETURNS:
// unsigned - OK if no errors and open file handle stored in *uFhandle
// ELSE DOS error code and errno set to C runtime erro code
//
//*********************************************************************
// DllDosSeek( int fHandle, long 0L, int SEEK_SET, long *lPos )
#define DllDosSeek( fHandle, lPos, Type, lpNewPos )\
((int)(*DllEntry)( DLL_SEEK_FILE, 4,\ WORD_TYPE + TRANS_NONE,\ DWORD_TYPE + TRANS_NONE,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( long ),\ (int)fHandle,\ (long)lPos,\ (int)Type,\ (long far *)lpNewPos )) //**********************************************************************
// Fills in a media ID information structure passed by the caller.
//
// NOTE: The _dos_getmedia_id call may return a volume id which does
// not match that found with a _dos_findfirst() so we do the
// _dos_findfirst() to be compatible with DOS 5.0 DIR cmd.
//
// int GetMediaId( int cDrvLetter, struct MEDIA_ID_INF *pMediaInf )
//
// ARGUMENTS:
// cDrvLetter - Drive letter to get media information about
// pMediaInf - Ptr to a media information structure to fill in
// RETURNS:
// int - OK if no errors else errno from C runtime
//
//**********************************************************************
// DllGetMediaId( char DrvLetter, struct MEDIA_ID_INF *pMediaInf )
#define DllGetMediaId( DrvLetter, pMediaInf )\
((int)(*DllEntry)( DLL_GET_MEDIA_ID, 2,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( struct MEDIA_ID_INF ),\ (char)DrvLetter,\ (struct MEDIA_ID_INF far *)pMediaInf ))
//**********************************************************************
// Fills in a user supplied buffer with the current directory path string
// for a specified drive. The path does not contain the drive letter or
// root directory specifier, ie: "dos\user\bin". To get the current
// directory on the current drive call the function with drive
// specified as 0.
//
// int DllGetdCwd( int iDrive, char *szBuf )
//
// ARGUMENTS:
// iDrive - Drive specifier (0=default,1=A:,2=B:,3=C:,...)
// szBuf - Ptr to buffer to accept path string which should be 256
// bytes in length.
// RETURNS:
// int - OK if specified drive C runtime error code
//
//**********************************************************************
#define DllGetdCwd( iDrive, szBuf )\
((int)(*DllEntry)( DLL_GET_CWD_ID, 2,\ WORD_TYPE + TRANS_NONE,\ FSZPTR_TYPE + TRANS_DEST,\ (int)iDrive,\ (char far *)szBuf ))
//**********************************************************************
// Sets the working directory to that specified by a path string passed
// by the caller. The path string may include a drive specifier and the
// path may be relative to the current directory on the drive affected.
//
// int DllSetCwd( char *szBuf )
//
// ARGUMENTS:
// szBuf - Ptr to string which specifies the directory to change to.
// RETURNS:
// int - OK if specified drive C runtime error code
//
//**********************************************************************
#define DllSetCwd( szBuf )\
((int)(*DllEntry)( DLL_SET_CWD_ID, 1,\ FSZPTR_TYPE + TRANS_SRC,\ (char far *)szBuf ))
//**********************************************************************
// Gets the current drive using DOS function 0x19. The value obtained is
// the based 1 drive (A:=1, B:=2, C:=3, ...)
//
// void DllGetDrive( unsigned *pDrive )
//
// ARGUMENTS:
// pDrive - Pointer to unsigned value where the drive number will
// be stored.
// RETURNS:
// void
//
//**********************************************************************
#define DllGetDrive( pDrive )\
((void)(*DllEntry)( DLL_GET_DRV_ID, 1,\ FPTR_TYPE + TRANS_DEST,\ sizeof( unsigned ),\ (unsigned far *)pDrive ))
//**********************************************************************
// Sets the current drive using DOS function 0x0e. The drive is specified
// using base 1 so that A:=1, B:=2, C:=3, etc.
//
// void DllSetDrive( unsigned uDrive, unsigned *pNumDrvs )
//
// ARGUMENTS:
// uDrive - Drive number to set as current drive.
// pNumDrvs - Pointer to unsigned value where the total number of drives
// in the system will be store. (This is the value of
// lastdrive= in the config.sys).
// RETURNS:
// void - No return value is passed. Use DllGetDrive() to determine
// if the call was successful.
//
//**********************************************************************
#define DllSetDrive( uDrive, pNumDrvs )\
((void)(*DllEntry)( DLL_SET_DRV_ID, 2,\ WORD_TYPE + TRANS_NONE,\ FPTR_TYPE + TRANS_DEST,\ sizeof( unsigned ),\ (unsigned)(uDrive),\ (unsigned far *)pNumDrvs ))
//**********************************************************************
// Creates a new directory with the specified name. The string specifying
// the name may be a fully qualified path or relative to the current
// drive and directory.
//
// int DllMakeDir( char *szDir )
//
// ARGUMENTS:
// szDir - Ptr to path directory name string
// RETURNS:
// int - OK in successfull else C runtime error code of
// EACCESS if directory already exists or conflicting
// file name, or ENOENT if the path is invalid
//
//**********************************************************************
#define DllMakeDir( szDir )\
((int)(*DllEntry)( DLL_MKDIR, 1,\ FSZPTR_TYPE + TRANS_SRC,\ (char far *)szDir ))
//**********************************************************************
// Deletes the directory with the specified name. The string specifying
// the name may be a fully qualified path or relative to the current
// drive and directory.
//
// int DllRemoveDir( char *szDir )
//
// ARGUMENTS:
// szDir - Ptr to directory name string
// RETURNS:
// int - OK in successfull else C runtime error code of
// EACCESS if name given is not a directory or the
// directory is not empty or is the current or
// root directory, or ENOENT if the path is invalid.
//
//**********************************************************************
#define DllRemoveDir( szDir )\
((int)(*DllEntry)( DLL_RMDIR, 1,\ FSZPTR_TYPE + TRANS_SRC,\ (char far *)szDir ))
//**********************************************************************
// Creates a complete directory path from a caller supplied path string.
// Any or all of the directories in the specified path may already
// exist when the function is called. The path string may be drive or
// UNC based and may include a trailing backslash.
//
// int DllCreateDirTree( char *szPath )
//
// ARGUMENTS:
// szPath - Fully qualified path string.
// RETURNS:
// int - OK if successful else EACCES or ENOENT
//
//**********************************************************************
#define DllCreateDirTree( szDir )\
((int)(*DllEntry)( DLL_MKDIR_TREE, 1,\ FSZPTR_TYPE + TRANS_SRC,\ (char far *)szDir ))
//**********************************************************************
// Main entry point for the find/grep engine. Accepts a command line and
// emulates the DOS FIND command.
//
//
// int FindFiles( char *szCmdLine, FIND_CALLBACK FindCallBack )
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [/V] [/C] [/N] [/I]
//
// source Specifies the file or files to be finds
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// /V Displays all lines NOT containing the specified string.
// /C Displays only the count of lines containing the string.
// /N Displays line numbers with the displayed lines.
// /I Ignores the case of characters when searching for the string.
//
// FindCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// long (far pascal *FIND_CALLBACK)( int Func, unsigned uArg0,
// void far *pArg1, void far *pArg2,
// void far *pArg3 );
//
// CB_FIND_FLGS 0x0001 // Passing back parsed FIND flags
// CB_FIND_ENVERR 0x0002 // Passing back non-fatal error
// CB_FIND_SWITCH 0x0003 // Passing back unrecongized switch
// CB_FIND_ERR_STR 0x0004 // Passing back error error string
// CB_FIND_FOUND 0x0005 // File matching search criteria found
// CB_FIND_MATCH 0x0006 // Passing back matching line from file
// CB_FIND_COUNT 0x0007 // Passing back count of matching lines
//
//***********************************************************************
#define DllFindFiles( szCmdLine, szEnv, CB_FindCallBack )\
((int)(*DllEntry)( DLL_FIND, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (pascal far *)())CB_FindCallBack))
//**********************************************************************
// File touch engine entry function. Allows setting the time/date
// stamp on files.
//
// int TouchFiles( char *szCmdLine, TOUCH_CALLBACK TouchCallBack )
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [/TDM:mm-dd-yy[:hh:mm:ss]]
// [/TTA:hh:mm:ss]
// [/TDA:mm-dd-yy]
//
// source Specifies the file or files to be touches
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// /TDM: Set last write date and optional time to specified value.
// /TTM: Set last write time to specified value.
// /TDA: Set last access date and optional time to specified value.
// /TTA: Set last access time to specified value.
//
// TouchCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// long (far pascal *TOUCH_CALLBACK)( int Func, unsigned uArg0,
// void far *pArg1, void far *pArg2,
// void far *pArg3 );
//
// CB_TOUCH_FLGS 0x0001 // Passing back parsed TOUCH flags
// CB_TOUCH_ENVERR 0x0002 // Passing back non-fatal error
// CB_TOUCH_SWITCH 0x0003 // Passing back unrecongized switch
// CB_TOUCH_ERR_STR 0x0004 // Passing back error error string
// CB_TOUCH_FOUND 0x0005 // File matching search criteria found
//
//***********************************************************************
#define DllTouchFiles( szCmdLine, szEnv, CB_TouchCallBack )\
((int)(*DllEntry)( DLL_TOUCH, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (pascal far *)())CB_TouchCallBack))
//**********************************************************************
// File Attrib engine entry function. Allows setting access attributes
// on files
//
// int AttribFiles( char *szCmdLine, char *szEnvStr,
// ATTRIB_CALLBACK CB_AttrMain )
//
// szCmdLine is ptr to commandline string.
//
// "srcfiles [SrchCriteria] [{+|-}A] [{+|-}H] [{+|-}R] [{+|-}S]
//
// source Specifies the file or files to be attribs
// and may be substituted with /F:filename
// to use filespecs from a text file.
//
// SrchCriteria Any extended search criteria supported by
// by the findfile engine.
//
// + Sets an attribute.
// - Clears an attribute.
// R Read-only file attribute.
// A Archive file attribute.
// S System file attribute.
// H Hidden file attribute.
// /S Processes files in all directories in the specified path.
//
//
// AttribCallBack is a ptr to a callback function which supports these
// these callback functions.
//
// long (far pascal *ATTRIB_CALLBACK)( int Func, unsigned uArg0,
// void far *pArg1, void far *pArg2,
// void far *pArg3 );
//
// CB_ATTRIB_FLGS 0x0001 // Passing back parsed ATTRIB flags
// CB_ATTRIB_ENVERR 0x0002 // Passing back non-fatal error
// CB_ATTRIB_SWITCH 0x0003 // Passing back unrecongized switch
// CB_ATTRIB_ERR_STR 0x0004 // Passing back error error string
// CB_ATTRIB_FOUND 0x0005 // File matching search criteria found
//
//***********************************************************************
#define DllAttribFiles( szCmdLine, szEnv, CB_AttribCallBack )\
((int)(*DllEntry)( DLL_ATTRIB, 3,\ FSZPTR_TYPE + TRANS_SRC,\ FSZPTR_TYPE + TRANS_SRC,\ DWORD_TYPE + TRANS_NONE,\ (char far *)szCmdLine,\ (char far *)szEnv,\ (int (pascal far *)())CB_AttribCallBack))
//**********************************************************************
// Sets up the country specific information for the .DLL. The country
// information is passed in a a buffer containg:
//
// Offset
// 0 Case map table
// 256 Collate table
// 512 File name char table
// 768 Extended country information structure
// 808 END
//
// int DllSetCntryInfo( char far *pBuf )
//
// ARGUMENTS:
// pBuf - Ptr to buffer described above
// RETURNS:
// void
//
//**********************************************************************
#define DllSetCntryInfo( pBuf )\
((void)(*DllEntry)( DLL_SET_CNTRY_INF, 1,\ FPTR_TYPE + TRANS_SRC,\ (unsigned)(808),\ (char far *)pBuf ))
//**********************************************************************
// Frees the instance data for the current instance of the DLL. Should
// be the last call a Windows App makes to the DLL.
//
// int ReleaseDataSeg( void )
//
// ARGUMENTS:
// NONE
// RETURNS:
// int - OK if successful else ERR_MEM_CORRUPT
//
//**********************************************************************
#define DllReleaseInstance( )\
((int)(*DllEntry)( DLL_RELEASE, 0 ))
|