windows-nt/Source/XPSP1/NT/sdktools/mep/extens/mbrowse/calbak.c
2020-09-26 16:20:57 +08:00

436 lines
6.2 KiB
C

/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
calbak.c
Abstract:
Callback functions needed by the bsc library.
Author:
Ramon Juan San Andres (ramonsa) 06-Nov-1990
Revision History:
--*/
/**************************************************************************/
#include "stdlib.h"
#include "mbr.h"
typedef char bscbuf[2048];
/**************************************************************************/
LPV
BSC_API
LpvAllocCb (
IN WORD cb
)
/*++
Routine Description:
Allocates block of memory.
Arguments:
cb - Supplies size of block.
Return Value:
Pointer to block of memory of size cb, or NULL
--*/
{
return (LPV)malloc(cb);
}
/**************************************************************************/
VOID
BSC_API
FreeLpv (
IN LPV lpv
)
/*++
Routine Description:
Frees a block of memory.
Arguments:
lpv - Suplies a pointer to the block of memory to free.
Return Value:
None.
--*/
{
free(lpv);
}
/**************************************************************************/
VOID
BSC_API
SeekError (
IN LSZ lszFileName
)
/*++
Routine Description:
Error handling for seek operations.
Arguments:
lszFileName - Supplies the name of the file.
Return Value:
None.
--*/
{
errstat(MBRERR_BSC_SEEK_ERROR, lszFileName);
}
/**************************************************************************/
VOID
BSC_API
ReadError (
IN LSZ lszFileName
)
/*++
Routine Description:
Error handling for read operations.
Arguments:
lszFileName - Supplies the name of the file.
Return Value:
None.
--*/
{
errstat(MBRERR_BSC_READ_ERROR, lszFileName);
}
/**************************************************************************/
VOID
BSC_API
BadBSCVer (
IN LSZ lszFileName
)
/*++
Routine Description:
Error handling for bad version number.
Arguments:
lszFileName - Supplies the name of the file.
.
.
Return Value:
None.
--*/
{
errstat(MBRERR_BAD_BSC_VERSION, lszFileName);
}
/**************************************************************************/
FILEHANDLE
BSC_API
BSCOpen (
IN LSZ lszFileName,
IN FILEMODE mode
)
/*++
Routine Description:
Opens a file.
Arguments:
lszFileName - Supplies the name of the file.
mode - Supplies the mode with which to open the file.
Return Value:
File handle for the opened file. -1 if error.
--*/
{
#if defined (OS2)
bscbuf b;
strcpy(b, lszFileName);
return open(b, mode);
#else
return CreateFile( lszFileName, mode, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
#endif
}
/**************************************************************************/
int
BSC_API
BSCRead (
IN FILEHANDLE handle,
OUT LPCH lpchBuf,
IN WORD cb
)
/*++
Routine Description:
Reads in the specified number of bytes.
Arguments:
handle - Supplies the file handle.
lpchBuf - Supplies pointer to buffer.
cb - Supplies number of bytes to read.
Return Value:
Number of bytes read
--*/
{
#if defined (OS2)
bscbuf b;
while (cb > sizeof(b)) {
if (read(handle, b, sizeof(b)) == -1) {
return -1;
}
memcpy(lpchBuf, b, sizeof(b));
cb -= sizeof(b);
lpchBuf += sizeof(b);
}
if (read(handle, b, cb) == -1) {
return -1;
}
memcpy(lpchBuf, b, cb);
return cb;
#else
DWORD BytesRead;
if ( !ReadFile(handle, lpchBuf, cb, &BytesRead, NULL) ) {
return -1;
} else {
return BytesRead;
}
#endif
}
/**************************************************************************/
int
BSC_API
BSCClose (
IN FILEHANDLE handle
)
/*++
Routine Description:
Closes a handle.
Arguments:
handle - Supplies the handle to be closed.
Return Value:
0 if the file was successfully closed, -! if error.
--*/
{
#if defined (OS2)
return close(handle);
#else
return !CloseHandle( handle );
#endif
}
/**************************************************************************/
int
BSC_API
BSCSeek (
FILEHANDLE handle,
long lPos,
FILEMODE mode
)
/*++
Routine Description:
Seek (change file pointer).
Arguments:
handle - Supplies the file handle.
lPos - Supplies the offset from the position specified by mode.
mode - Supplies the initial position. Must be one of the SEEK_*
values of the lseek C library function.
Return Value:
0 if successful, -1 if error.
--*/
{
#if defined (OS2)
if (lseek(handle, lPos, mode) == -1) {
return -1;
} else {
return 0;
}
#else
if (SetFilePointer( handle, lPos, 0L, mode) == -1) {
return -1;
} else {
return 0;
}
#endif
}
/**************************************************************************/
VOID
BSC_API
BSCOutput (
IN LSZ lsz
)
/*++
Routine Description:
Outputs a given string.
Arguments:
lsz - Supplies the string to be output.
Return Value:
None.
--*/
{
// PWND pWinCur;
// winContents wc;
USHORT len; // Length of string
PBYTE p;
PFILE pFile; // Current file
pFile = FileNameToHandle("", NULL);
//GetEditorObject (RQ_WIN_HANDLE, 0, &pWinCur);
//GetEditorObject (RQ_WIN_CONTENTS | 0xff, pWinCur, &wc);
len = strlen(lsz);
while (len) {
//
// We output the string one line at a time.
//
p = lsz;
while (len--) {
if (*lsz != '\n') {
lsz++;
} else {
*lsz++ = '\00';
break;
}
}
// if ((wc.pFile == pBrowse) && BscInUse) {
if ((pFile == pBrowse) && BscInUse) {
//
// Display in Browser window
//
PutLine(BrowseLine++, p, pBrowse);
} else {
//
// Display in status line
//
errstat(p,NULL);
}
}
}
/**************************************************************************/
#ifdef DEBUG
VOID BSC_API
BSCDebugOut(LSZ lsz)
// ignore debug output by default
//
{
// unreferenced lsz
lsz = NULL;
}
#endif