|
|
/*++
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
|