515 lines
17 KiB
C
515 lines
17 KiB
C
|
/*===========================================================================*/
|
||
|
/* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */
|
||
|
/* Houston, Texas */
|
||
|
/*===========================================================================*/
|
||
|
|
||
|
#define NOLSTRING TRUE /* jtf win3 mod */
|
||
|
#include <windows.h>
|
||
|
#include "port1632.h"
|
||
|
#include "dcrc.h"
|
||
|
#include "dynacomm.h"
|
||
|
#include "video.h"
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* offCursor() - Turn off terminal emulation cursor. [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID offCursor ()
|
||
|
{
|
||
|
if (activTerm)
|
||
|
{
|
||
|
cursorOn--;
|
||
|
if (cursorOn == 0)
|
||
|
{
|
||
|
if (cursBlinkOn)
|
||
|
toggleCursor(&cursorRect);
|
||
|
}
|
||
|
else
|
||
|
if(cursorOn < 0)
|
||
|
cursorOn = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* onCursor() - Turn on the terminal emulation cursor. [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID onCursor ()
|
||
|
{
|
||
|
if (activTerm)
|
||
|
{
|
||
|
cursorOn++;
|
||
|
if (cursorOn == 1)
|
||
|
{
|
||
|
cursorTick = 1;
|
||
|
rectCursor (&cursorRect);
|
||
|
cursBlinkOn = FALSE;
|
||
|
toggleCursor (&cursorRect);
|
||
|
}
|
||
|
else
|
||
|
if (cursorOn > 1)
|
||
|
cursorOn = 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* rectCursor() - Set the terminal cursor rectangle. [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID rectCursor(RECT *theRect)
|
||
|
{
|
||
|
if(activCursor > 0)
|
||
|
{
|
||
|
if(statusLine)
|
||
|
theRect->top = statusRect.top + (STATUSRECTBORDER / 2);
|
||
|
else
|
||
|
theRect->top = (savTopLine - curTopLine + curLin) * chrHeight;
|
||
|
|
||
|
theRect->bottom = theRect->top + chrHeight;
|
||
|
if(trmParams.termCursor != ITMBLKCURSOR)
|
||
|
theRect->top += ((3 * chrHeight) / 4);
|
||
|
else
|
||
|
theRect->top++; /* jtf terminal changed to make cursor smaller */
|
||
|
|
||
|
if(statusLine || (attrib[curLin][LATTRIB] == LNORMAL))
|
||
|
{
|
||
|
theRect->left = (curCol - curLeftCol) * chrWidth;
|
||
|
theRect->right = theRect->left + chrWidth;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
theRect->left = curCol * chrWidth * 2 - curLeftCol * chrWidth;
|
||
|
theRect->right = theRect->left + chrWidth * 2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* toggleCursor() - Toggle the terminal emulation cursor visible or not */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID toggleCursor(RECT *theRect)
|
||
|
{
|
||
|
RECT clientRect;
|
||
|
|
||
|
if(activCursor > 0)
|
||
|
{
|
||
|
getPort();
|
||
|
|
||
|
cursBlinkOn = !cursBlinkOn;
|
||
|
/* mbbx 1.04: for lack of a better method... */
|
||
|
if(theRect->top == statusRect.top + (STATUSRECTBORDER / 2))
|
||
|
clipRect(&statusRect);
|
||
|
else
|
||
|
clipRect(&hTE.viewRect);
|
||
|
InvertRect(thePort, theRect);
|
||
|
|
||
|
releasePort();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* hideTermCursor */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID hideTermCursor ()
|
||
|
{
|
||
|
if (activCursor == 1)
|
||
|
offCursor ();
|
||
|
activCursor--;
|
||
|
}
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* showTermCursor */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID showTermCursor ()
|
||
|
{
|
||
|
activCursor++;
|
||
|
if (activCursor == 1)
|
||
|
onCursor ();
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* stripBlanks() - Purge unecessary CHFILL's for text file. [scf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID stripBlanks (LPBYTE ptr, DWORD *len)
|
||
|
{
|
||
|
register INT src;
|
||
|
register INT dst;
|
||
|
INT deltaLen;
|
||
|
|
||
|
ptr[*len] = 0; /* Terminate for 'C' */
|
||
|
for (src = (INT) *len; src > 0; src = dst - 1)
|
||
|
{
|
||
|
while ( (src > 0) && (ptr[src] != CR) ) /* jtf 3.11 fixed segmentation error */
|
||
|
src--;
|
||
|
dst = src - 1;
|
||
|
while ((dst > 0) && (ptr[dst] == CHFILL) ) /* jtf 3.11 fixed segmentation error */
|
||
|
dst--;
|
||
|
dst++;
|
||
|
deltaLen = src - dst;
|
||
|
lmovmem (&ptr[src], &ptr[dst], (DWORD) (*len - src));
|
||
|
*len -= (DWORD) deltaLen;
|
||
|
}
|
||
|
ptr[*len] = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* loadTermFont() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID loadTermFont(LOGFONT *logFont)
|
||
|
{
|
||
|
HFONT hOldFont;
|
||
|
TEXTMETRIC fontMetrics;
|
||
|
INT ndx;
|
||
|
|
||
|
hOldFont = hTE.hFont;
|
||
|
|
||
|
if((hTE.hFont = CreateFontIndirect(logFont)) != hOldFont)
|
||
|
{
|
||
|
getPort();
|
||
|
SelectObject(thePort, hTE.hFont);
|
||
|
GetTextMetrics(thePort, &fontMetrics);
|
||
|
releasePort();
|
||
|
|
||
|
stdChrHeight = chrHeight = fontMetrics.tmHeight;
|
||
|
stdChrWidth = chrWidth = fontMetrics.tmMaxCharWidth;
|
||
|
|
||
|
for(ndx = 0; ndx < 256; ndx += 1)
|
||
|
vidCharWidths[ndx] = chrWidth;
|
||
|
|
||
|
if(hOldFont != NULL)
|
||
|
{
|
||
|
DeleteObject(hOldFont);
|
||
|
clearFontCache();
|
||
|
resetEmul();
|
||
|
if(!IsIconic(hItWnd)) /* rjs bugs 015 */
|
||
|
sizeTerm(0L);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* nextFontSize() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
INT APIENTRY nextFontSize(const LOGFONT *lpLogFont, const TEXTMETRIC *lpTextMetrics,
|
||
|
DWORD FontType, LPARAM lpParam)
|
||
|
{
|
||
|
LPSTR lpData = (LPSTR)lpParam;
|
||
|
INT ndx, ndx2;
|
||
|
|
||
|
if(*lpData != 0)
|
||
|
{
|
||
|
if (FontType & RASTER_FONTTYPE)
|
||
|
{
|
||
|
for(ndx = 1; ndx <= 5; ndx += 1)
|
||
|
{
|
||
|
if((ndx2 = lpLogFont->lfHeight * ndx) > *lpData)
|
||
|
break;
|
||
|
lpData[ndx2] = (char)lpLogFont->lfHeight;
|
||
|
|
||
|
if(lpLogFont->lfQuality == PROOF_QUALITY) /* no scaling... */
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else /* vector font... */
|
||
|
lsetmem(lpData+1, lpLogFont->lfHeight, *lpData);
|
||
|
}
|
||
|
else if(lpLogFont->lfHeight == lpData[1])
|
||
|
{
|
||
|
lmovmem(lpLogFont, lpData, sizeof(LOGFONT));
|
||
|
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE); /* continue... */
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* listFontSizes() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID listFontSizes(BYTE *faceName, BYTE *sizeList, INT maxSize)
|
||
|
{
|
||
|
memset(sizeList+1, 0, *sizeList = (BYTE)maxSize);
|
||
|
|
||
|
getPort();
|
||
|
EnumFonts(thePort, faceName, nextFontSize, (LPARAM) sizeList);
|
||
|
releasePort();
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* buildTermFont() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID buildTermFont() /* mbbx 2.00: font selection... */
|
||
|
{
|
||
|
BYTE sizeList[64];
|
||
|
LOGFONT logFont;
|
||
|
|
||
|
if((hTE.hFont != NULL) && (trmParams.fontSize > 0))
|
||
|
{
|
||
|
strcpy(sizeList, trmParams.fontFace);
|
||
|
AnsiUpper((LPSTR)sizeList);
|
||
|
if(!strcmp(sizeList, "SYSTEM"))
|
||
|
LoadString(hInst, STR_INI_FONTFACE, trmParams.fontFace, LF_FACESIZE);
|
||
|
|
||
|
listFontSizes(trmParams.fontFace, sizeList, 64-1);
|
||
|
|
||
|
if((logFont.lfHeight = (sizeList[trmParams.fontSize] * 256)) != 0)
|
||
|
{
|
||
|
getPort();
|
||
|
EnumFonts(thePort, trmParams.fontFace, nextFontSize, (LPARAM) &logFont);
|
||
|
releasePort();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
logFont.lfHeight = 0;
|
||
|
|
||
|
if(LOBYTE(logFont.lfHeight) == 0)
|
||
|
{
|
||
|
logFont.lfEscapement = 0;
|
||
|
logFont.lfOrientation = 0;
|
||
|
logFont.lfWeight = 0; /* rjs bugs 017 -> 0 to 200 */
|
||
|
logFont.lfItalic = FALSE;
|
||
|
logFont.lfUnderline = FALSE;
|
||
|
logFont.lfStrikeOut = FALSE;
|
||
|
logFont.lfCharSet = ANSI_CHARSET;
|
||
|
logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
|
||
|
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
||
|
logFont.lfQuality = DEFAULT_QUALITY;
|
||
|
logFont.lfPitchAndFamily = FF_DONTCARE;
|
||
|
strcpy(logFont.lfFaceName, trmParams.fontFace);
|
||
|
}
|
||
|
|
||
|
logFont.lfHeight = trmParams.fontSize;
|
||
|
logFont.lfWidth = 0;
|
||
|
|
||
|
loadTermFont(&logFont);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* clearFontCache() - [mbb] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID clearFontCache() /* mbbx 1.10 ... */
|
||
|
{
|
||
|
INT ndx;
|
||
|
|
||
|
for(ndx = 0; ndx < VID_MAXFONTCACHE; ndx += 1)
|
||
|
{
|
||
|
if(vidFontCache[ndx].hFont != NULL)
|
||
|
{
|
||
|
DeleteObject(vidFontCache[ndx].hFont);
|
||
|
vidFontCache[ndx].hFont = NULL;
|
||
|
vidFontCache[ndx].flags = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* calcDefaultAttrib() - [jtf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID calcDefaultAttrib() /* mbbx 1.03 ... */
|
||
|
{
|
||
|
INT ndx;
|
||
|
|
||
|
for(ndx = 3; ndx < 32; ndx += 1) /* skip NORMAL, BOLD, REVERSE */
|
||
|
{
|
||
|
if((ndx == ABLINK) || (ndx == AUNDERLINE) || (ndx == APROTECT))
|
||
|
continue;
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = 0;
|
||
|
vidAttr[ndx].text[VID_GREEN] = 0;
|
||
|
vidAttr[ndx].text[VID_BLUE] = 0;
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = 0;
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = 0;
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = 0;
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags &= (VID_CALCTEXT | VID_CALCBKGD | VID_CALCATTR);
|
||
|
|
||
|
if(ndx & ABOLD)
|
||
|
{
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = min(vidAttr[ndx].text[VID_RED] + vidAttr[ABOLD].text[VID_RED], 255);
|
||
|
vidAttr[ndx].text[VID_GREEN] = min(vidAttr[ndx].text[VID_GREEN] + vidAttr[ABOLD].text[VID_GREEN], 255);
|
||
|
vidAttr[ndx].text[VID_BLUE] = min(vidAttr[ndx].text[VID_BLUE] + vidAttr[ABOLD].text[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = min(vidAttr[ndx].bkgd[VID_RED] + vidAttr[ABOLD].bkgd[VID_RED], 255);
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = min(vidAttr[ndx].bkgd[VID_GREEN] + vidAttr[ABOLD].bkgd[VID_GREEN], 255);
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = min(vidAttr[ndx].bkgd[VID_BLUE] + vidAttr[ABOLD].bkgd[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags |= (vidAttr[ABOLD].flags & VID_MASK);
|
||
|
}
|
||
|
|
||
|
if(ndx & AREVERSE)
|
||
|
{
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = min(vidAttr[ndx].text[VID_RED] + vidAttr[AREVERSE].text[VID_RED], 255);
|
||
|
vidAttr[ndx].text[VID_GREEN] = min(vidAttr[ndx].text[VID_GREEN] + vidAttr[AREVERSE].text[VID_GREEN], 255);
|
||
|
vidAttr[ndx].text[VID_BLUE] = min(vidAttr[ndx].text[VID_BLUE] + vidAttr[AREVERSE].text[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = min(vidAttr[ndx].bkgd[VID_RED] + vidAttr[AREVERSE].bkgd[VID_RED], 255);
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = min(vidAttr[ndx].bkgd[VID_GREEN] + vidAttr[AREVERSE].bkgd[VID_GREEN], 255);
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = min(vidAttr[ndx].bkgd[VID_BLUE] + vidAttr[AREVERSE].bkgd[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags |= (vidAttr[AREVERSE].flags & VID_MASK);
|
||
|
}
|
||
|
|
||
|
if(ndx & ABLINK)
|
||
|
{
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = min(vidAttr[ndx].text[VID_RED] + vidAttr[ABLINK].text[VID_RED], 255);
|
||
|
vidAttr[ndx].text[VID_GREEN] = min(vidAttr[ndx].text[VID_GREEN] + vidAttr[ABLINK].text[VID_GREEN], 255);
|
||
|
vidAttr[ndx].text[VID_BLUE] = min(vidAttr[ndx].text[VID_BLUE] + vidAttr[ABLINK].text[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = min(vidAttr[ndx].bkgd[VID_RED] + vidAttr[ABLINK].bkgd[VID_RED], 255);
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = min(vidAttr[ndx].bkgd[VID_GREEN] + vidAttr[ABLINK].bkgd[VID_GREEN], 255);
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = min(vidAttr[ndx].bkgd[VID_BLUE] + vidAttr[ABLINK].bkgd[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags |= (vidAttr[ABLINK].flags & VID_MASK);
|
||
|
}
|
||
|
|
||
|
if(ndx & AUNDERLINE)
|
||
|
{
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = min(vidAttr[ndx].text[VID_RED] + vidAttr[AUNDERLINE].text[VID_RED], 255);
|
||
|
vidAttr[ndx].text[VID_GREEN] = min(vidAttr[ndx].text[VID_GREEN] + vidAttr[AUNDERLINE].text[VID_GREEN], 255);
|
||
|
vidAttr[ndx].text[VID_BLUE] = min(vidAttr[ndx].text[VID_BLUE] + vidAttr[AUNDERLINE].text[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = min(vidAttr[ndx].bkgd[VID_RED] + vidAttr[AUNDERLINE].bkgd[VID_RED], 255);
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = min(vidAttr[ndx].bkgd[VID_GREEN] + vidAttr[AUNDERLINE].bkgd[VID_GREEN], 255);
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = min(vidAttr[ndx].bkgd[VID_BLUE] + vidAttr[AUNDERLINE].bkgd[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags |= (vidAttr[AUNDERLINE].flags & VID_MASK);
|
||
|
}
|
||
|
|
||
|
if(ndx & APROTECT)
|
||
|
{
|
||
|
if(vidAttr[ndx].flags & VID_CALCTEXT)
|
||
|
{
|
||
|
vidAttr[ndx].text[VID_RED] = min(vidAttr[ndx].text[VID_RED] + vidAttr[APROTECT].text[VID_RED], 255);
|
||
|
vidAttr[ndx].text[VID_GREEN] = min(vidAttr[ndx].text[VID_GREEN] + vidAttr[APROTECT].text[VID_GREEN], 255);
|
||
|
vidAttr[ndx].text[VID_BLUE] = min(vidAttr[ndx].text[VID_BLUE] + vidAttr[APROTECT].text[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCBKGD)
|
||
|
{
|
||
|
vidAttr[ndx].bkgd[VID_RED] = min(vidAttr[ndx].bkgd[VID_RED] + vidAttr[APROTECT].bkgd[VID_RED], 255);
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = min(vidAttr[ndx].bkgd[VID_GREEN] + vidAttr[APROTECT].bkgd[VID_GREEN], 255);
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = min(vidAttr[ndx].bkgd[VID_BLUE] + vidAttr[APROTECT].bkgd[VID_BLUE], 255);
|
||
|
}
|
||
|
|
||
|
if(vidAttr[ndx].flags & VID_CALCATTR)
|
||
|
vidAttr[ndx].flags |= (vidAttr[APROTECT].flags & VID_MASK);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/* setDefaultAttrib() - [jtf] */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
|
||
|
VOID setDefaultAttrib(BOOL bLoad)
|
||
|
{
|
||
|
BYTE szSection[MINRESSTR], szKeyWord[MINRESSTR], szDefault[MINRESSTR];
|
||
|
BYTE work[16];
|
||
|
#ifdef ORGCODE
|
||
|
INT text[3], bkgd[3];
|
||
|
#else
|
||
|
DWORD text[3], bkgd[3]; // -sdj 10/8/91 bug#3279
|
||
|
#endif
|
||
|
INT ndx;
|
||
|
|
||
|
clearFontCache();
|
||
|
|
||
|
|
||
|
LoadString(hInst, STR_INI_COLORS, szSection, MINRESSTR);
|
||
|
LoadString(hInst, STR_INI_WINDOWTEXT, szKeyWord, MINRESSTR);
|
||
|
LoadString(hInst, STR_INI_TEXTCOLOR, szDefault, MINRESSTR);
|
||
|
GetProfileString(szSection, szKeyWord, szDefault, work, 16-1);
|
||
|
|
||
|
sscanf(work, "%d %d %d", text+0, text+1, text+2);
|
||
|
|
||
|
LoadString(hInst, STR_INI_WINDOW, szKeyWord, MINRESSTR);
|
||
|
LoadString(hInst, STR_INI_BKGDCOLOR, szDefault, MINRESSTR);
|
||
|
GetProfileString(szSection, szKeyWord, szDefault, work, 16-1);
|
||
|
|
||
|
sscanf(work, "%d %d %d", bkgd+0, bkgd+1, bkgd+2);
|
||
|
|
||
|
for(ndx = 0; ndx < 32; ndx += 1)
|
||
|
|
||
|
{
|
||
|
// -sdj 10/8/91 bug#3279 remove the hardcoded color stuff, new crt libs are in
|
||
|
|
||
|
vidAttr[ndx].text[VID_RED] = (BYTE)text[VID_RED];
|
||
|
vidAttr[ndx].text[VID_GREEN] = (BYTE)text[VID_GREEN];
|
||
|
vidAttr[ndx].text[VID_BLUE] = (BYTE)text[VID_BLUE];
|
||
|
|
||
|
vidAttr[ndx].bkgd[VID_RED] = (BYTE)bkgd[VID_RED];
|
||
|
vidAttr[ndx].bkgd[VID_GREEN] = (BYTE)bkgd[VID_GREEN];
|
||
|
vidAttr[ndx].bkgd[VID_BLUE] = (BYTE)bkgd[VID_BLUE];
|
||
|
vidAttr[ndx].flags = VID_CALCATTR | VID_CALCBKGD | VID_CALCTEXT;
|
||
|
}
|
||
|
|
||
|
vidAttr[ANORMAL].flags = 0;
|
||
|
vidAttr[ABOLD].flags = VID_BOLD;
|
||
|
vidAttr[AREVERSE].flags = VID_REVERSE;
|
||
|
vidAttr[ABLINK].flags = VID_BOLD;
|
||
|
vidAttr[AUNDERLINE].flags = VID_UNDERLINE;
|
||
|
vidAttr[APROTECT].flags = VID_REVERSE;
|
||
|
|
||
|
calcDefaultAttrib();
|
||
|
}
|