436 lines
6.2 KiB
C
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
|