You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
435 lines
6.6 KiB
435 lines
6.6 KiB
/*++
|
|
|
|
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
|