192 lines
3.6 KiB
C
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 */}
|