windows-nt/Source/XPSP1/NT/sdktools/mep/help/enginlib/helpdll.c
2020-09-26 16:20:57 +08:00

192 lines
3.6 KiB
C

/*************************************************************************
**
** helpdll - stubs for call-back routines when used as dll.
**
** Copyright <C> 1987, Microsoft Corporation
**
** Purpose:
**
** Revision History:
**
** 12-Mar-1990 ln CloseFile -> HelpCloseFile
** [] 22-Jan-1988 LN Created
**
*************************************************************************/
#include <stdio.h>
#include <malloc.h>
#if defined (OS2)
#define INCL_BASE
#include <os2.h>
#else
#include <windows.h>
#endif
#include "help.h" /* global (help & user) decl */
#include "helpsys.h" /* internal (help sys only) decl*/
#ifdef OS2
int _acrtused; /* define to disable crt0 */
#endif
char far * pascal near hfstrchr(char far *, char);
/************************************************************************
*
* OpenFileOnPath - Open a file located somewhere on the PATH
*
* Purpose:
*
* Entry:
* pszName - far pointer to filename to open
* mode - read/write mode
*
* Exit:
* returns file handle
*
* Exceptions:
* return 0 on error.
*
*/
FILE *
pascal
far
OpenFileOnPath(
char far *pszName,
int mode
)
{
FILE *fh;
char szNameFull[260];
char szNameFull1[260];
fh = (FILE *)pathopen(pszName, szNameFull, "rb");
if (!fh) {
char *pszPath;
char *pT;
if (*pszName == '$') {
if (pT = hfstrchr(pszName,':')) { /* if properly terminated */
*pT = 0; /* terminate env variable */
pszPath = pszName+1; /* get path name */
pszName = pT+1; /* and point to filename part */
}
} else {
pszPath = "PATH";
}
sprintf(szNameFull, "$%s:%s", pszPath, pszName);
fh = (FILE *)pathopen(szNameFull, szNameFull1, "rb");
}
return fh;
}
/************************************************************************
*
* HelpCloseFile - Close a file
*
* Purpose:
*
* Entry:
* fh = file handle
*
* Exit:
* none
*
*/
void
pascal
far
HelpCloseFile(
FILE* fh
)
{
fclose(fh);
}
/************************************************************************
*
* ReadHelpFile - locate and read data from help file
*
* Purpose:
* reads cb bytes from the file fh, at file position fpos, placing them in
* pdest. Special case of pdest==0, returns file size of fh.
*
* Entry:
* fh = File handle
* fpos = position to seek to first
* pdest = location to place it
* cb = count of bytes to read
*
* Exit:
* returns length of data read
*
* Exceptions:
* returns 0 on errors.
*
*/
unsigned long
pascal
far
ReadHelpFile (
FILE *fh,
unsigned long fpos,
char far *pdest,
unsigned short cb
)
{
unsigned long cRet = 0;
if (pdest) {
//
// Read cb bytes
//
if (!fseek(fh, fpos, SEEK_SET)) {
cRet = fread(pdest, 1, cb, fh);
}
} else {
//
// Return size of file (yuck!)
//
if (!fseek(fh, 0, SEEK_END)) {
fgetpos(fh, (fpos_t *) &cRet);
}
}
return cRet;
}
/************************************************************************
**
** HelpAlloc - Allocate a segment of memory for help
**
** Purpose:
**
** Entry:
** size = size of memory segment desired
**
** Exit:
** returns handle on success
**
** Exceptions:
** returns NULL on failure
*/
mh pascal far HelpAlloc(ushort size)
{
return (mh)malloc(size);
/* end HelpAlloc */}