115 lines
1.8 KiB
C
115 lines
1.8 KiB
C
|
|
||
|
//
|
||
|
// printf.c
|
||
|
//
|
||
|
// simple minded printf replacement
|
||
|
//
|
||
|
// only supports %s and %d but it is *small*
|
||
|
//
|
||
|
#include <string.h>
|
||
|
#include <io.h>
|
||
|
#include <stdlib.h>
|
||
|
#if defined(OS2)
|
||
|
#define INCL_NOCOMMON
|
||
|
#define INCL_DOSPROCESS
|
||
|
#define INCL_DOSSEMAPHORES
|
||
|
#define INCL_DOSFILEMGR
|
||
|
#define INCL_DOSERRORS
|
||
|
#define INCL_DOSMISC
|
||
|
#include <os2.h>
|
||
|
#else
|
||
|
#include <windows.h>
|
||
|
#endif
|
||
|
|
||
|
#include <dos.h>
|
||
|
|
||
|
#include "hungary.h"
|
||
|
#include "bsc.h"
|
||
|
#include "bscsup.h"
|
||
|
|
||
|
static char lpchBuf[1024];
|
||
|
static LPCH lpchPos = NULL;
|
||
|
|
||
|
VOID BSC_API
|
||
|
BSCPrintf(LSZ lszFormat, ...)
|
||
|
// printf replacement
|
||
|
//
|
||
|
{
|
||
|
va_list va;
|
||
|
LPCH lpch;
|
||
|
char ch;
|
||
|
|
||
|
if (!lpchPos) {
|
||
|
lpchPos = lpchBuf;
|
||
|
}
|
||
|
|
||
|
va_start(va, lszFormat);
|
||
|
|
||
|
BSCFormat(lpchPos, lszFormat, va);
|
||
|
|
||
|
// write out a line at a time
|
||
|
//
|
||
|
for (;;) {
|
||
|
lpch = strchr(lpchPos, '\n');
|
||
|
if (!lpch) {
|
||
|
lpchPos += strlen(lpchPos);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ch = *++lpch;
|
||
|
*lpch = 0;
|
||
|
BSCOutput(lpchBuf);
|
||
|
*lpch = ch;
|
||
|
strcpy(lpchBuf, lpch);
|
||
|
if (!ch)
|
||
|
lpchPos = lpchBuf;
|
||
|
else
|
||
|
lpchPos = lpchBuf + strlen(lpchBuf);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
|
||
|
static char lpchDBuf[256];
|
||
|
static LPCH lpchDPos = NULL;
|
||
|
|
||
|
VOID BSC_API
|
||
|
BSCDebug(LSZ lszFormat, ...)
|
||
|
// printf clone for debug output
|
||
|
//
|
||
|
{
|
||
|
va_list va;
|
||
|
LPCH lpch;
|
||
|
char ch;
|
||
|
|
||
|
if (!lpchDPos) {
|
||
|
lpchDPos = lpchDBuf;
|
||
|
}
|
||
|
|
||
|
va_start(va, lszFormat);
|
||
|
|
||
|
BSCFormat(lpchDPos, lszFormat, va);
|
||
|
|
||
|
// write out a line at a time
|
||
|
//
|
||
|
for (;;) {
|
||
|
lpch = strchr(lpchDPos, '\n');
|
||
|
if (!lpch) {
|
||
|
lpchDPos += strlen(lpchDPos);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ch = *++lpch;
|
||
|
*lpch = 0;
|
||
|
BSCDebugOut(lpchDBuf);
|
||
|
*lpch = ch;
|
||
|
strcpy(lpchDBuf, lpch);
|
||
|
if (!ch)
|
||
|
lpchDPos = lpchDBuf;
|
||
|
else
|
||
|
lpchDPos = lpchDBuf + strlen(lpchDBuf);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|