539 lines
17 KiB
C
539 lines
17 KiB
C
/*===========================================================================*/
|
|
/* Copyright (c) 1985 - 1986, 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 "task.h"
|
|
|
|
|
|
WORD fDisableMoreCtrl;
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* dbmyControls() - Function keys dialog box message processor. [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
INT_PTR APIENTRY dbmyControls(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BOOL result = FALSE;
|
|
RECT clipRect;
|
|
WORD wTemp;
|
|
|
|
switch(message)
|
|
{
|
|
case WM_ACTIVATE:
|
|
result = GET_WM_ACTIVATE_STATE(wParam, lParam);
|
|
break;
|
|
|
|
case WM_ERASEBKGND: /* mbbx 2.00: dlg & ctrl bkgd... */
|
|
GetClipBox((HDC) wParam, &clipRect);
|
|
FillRect((HDC) wParam, &clipRect, (HBRUSH) GetStockObject(GRAY_BRUSH));
|
|
return(TRUE);
|
|
|
|
case WM_CTLCOLOR:
|
|
return((INT_PTR) GetStockObject(HOLLOW_BRUSH));
|
|
|
|
case WM_COMMAND:
|
|
switch(GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDSTOP: /* mbbx 2.00: xfer ctrls... */
|
|
if(result = updateFKeyButton(wParam, lParam, FKB_UPDATE_BKGD))
|
|
xferStopBreak(!xferBreak);
|
|
break;
|
|
|
|
case IDPAUSE: /* mbbx 2.00: xfer ctrls... */
|
|
if(result = updateFKeyButton(wParam,lParam, FKB_UPDATE_BKGD))
|
|
xferPauseResume(!xferPaused, xferPaused);
|
|
break;
|
|
|
|
case IDFK1:
|
|
case IDFK2:
|
|
case IDFK3:
|
|
case IDFK4:
|
|
case IDFK5:
|
|
case IDFK6:
|
|
case IDFK7:
|
|
case IDFK8:
|
|
#ifdef ORGCODE
|
|
|
|
if(result = updateFKeyButton(lParam, FKB_UPDATE_BKGD |
|
|
((*trmParams.fKeyText[curLevel-1][wParam-IDFK1] != 0) ? 0 : FKB_DISABLE_CTRL)))
|
|
#else
|
|
|
|
wTemp = GET_WM_COMMAND_ID(wParam,lParam);
|
|
if(result = updateFKeyButton(wParam, lParam,
|
|
FKB_UPDATE_BKGD |
|
|
((*trmParams.fKeyText[curLevel-1][wTemp-IDFK1] != 0) ? 0 : FKB_DISABLE_CTRL)))
|
|
#endif
|
|
{
|
|
selectFKey((UINT)wParam);
|
|
}
|
|
break;
|
|
|
|
case IDMORE:
|
|
case IDFK9:
|
|
#ifdef ORGCODE
|
|
if(result = updateFKeyButton(lParam, FKB_UPDATE_BKGD | fDisableMoreCtrl)) /* mbbx 2.00: fkeys */
|
|
#else
|
|
if(result = updateFKeyButton(wParam, lParam, FKB_UPDATE_BKGD | fDisableMoreCtrl)) /* mbbx 2.00: fkeys */
|
|
#endif
|
|
setFKeyLevel(-1, FALSE); /* mbbx 2.00: bReset */
|
|
break;
|
|
|
|
case IDTIMER:
|
|
case IDFK10:
|
|
#ifdef ORGCODE
|
|
if(result = updateFKeyButton(lParam, FKB_UPDATE_BKGD | FKB_UPDATE_TIMER)) /* mbbx 2.00: fkeys */
|
|
#else
|
|
if(result = updateFKeyButton(wParam, lParam, FKB_UPDATE_BKGD | FKB_UPDATE_TIMER)) /* mbbx 2.00: fkeys */
|
|
#endif
|
|
timerToggle(FALSE); /* mbbx 1.03 */
|
|
break;
|
|
}
|
|
|
|
if(result && (hDlg == hdbXferCtrls))
|
|
BringWindowToTop(hTermWnd);
|
|
break;
|
|
}
|
|
|
|
if(result)
|
|
selectTopWindow();
|
|
|
|
return(result);
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* updateFKeyButton() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
BOOL fKeyStrBuffer(BYTE *str, WORD len)
|
|
{
|
|
if(fKeyNdx > *fKeyStr)
|
|
{
|
|
if(len == 1)
|
|
return(sendKeyInput(*str));
|
|
|
|
memcpy(fKeyStr+1, str, *fKeyStr = (BYTE)len);
|
|
fKeyNdx = 1;
|
|
return(TRUE);
|
|
}
|
|
|
|
if(fKeyNdx > 1)
|
|
{
|
|
memcpy(fKeyStr+1, fKeyStr+fKeyNdx, (*fKeyStr+1)-fKeyNdx);
|
|
*fKeyStr -= (fKeyNdx-1);
|
|
fKeyNdx = 1;
|
|
}
|
|
|
|
if(*fKeyStr+len >= STR255-1)
|
|
return(FALSE);
|
|
|
|
memcpy(fKeyStr+(*fKeyStr+1), str, len);
|
|
*fKeyStr += len;
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
void selectFKey(UINT wIDFKey)
|
|
//WORD wIDFKey;
|
|
{
|
|
fKeyStrBuffer(trmParams.fKeyText[curLevel-1][wIDFKey-IDFK1],
|
|
strlen(trmParams.fKeyText[curLevel-1][wIDFKey-IDFK1]));
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* setFKeyTitles() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID setFKeyTitles()
|
|
{
|
|
INT ndx;
|
|
BYTE str[STR255];
|
|
CHAR szBuffer[16];
|
|
DEBOUT("setKKeyTitles: curLevel = %d\n",curLevel);
|
|
DEBOUT("setKKeyTitles:%s\n","SetWindowText BUG? check this out, HACK return");
|
|
|
|
for(ndx = 0; ndx < DCS_NUMFKEYS; ndx += 1)
|
|
{
|
|
DEBOUT("setFKeyTitles: fKH[ndx]=%lx\n",fKeyHandles[ndx]);
|
|
DEBOUT("setFKeyTitles: fKT[curlevel-1][ndx]=%s\n",(LPSTR) trmParams.fKeyTitle[curLevel-1][ndx]);
|
|
SetWindowText(fKeyHandles[ndx], (LPSTR) trmParams.fKeyTitle[curLevel-1][ndx]);
|
|
}
|
|
|
|
if(*trmParams.fKeyNext == 0)
|
|
{
|
|
LoadString(hInst, STR_LEVEL, szBuffer, 15);
|
|
sprintf(str, szBuffer, curLevel);
|
|
}
|
|
else
|
|
strcpy(str, trmParams.fKeyNext);
|
|
|
|
SetWindowText(GetDlgItem(hdbmyControls, IDMORE), (LPSTR) str);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* testFkeyLevel() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
BOOL NEAR testFKeyLevel(INT level)
|
|
//INT level;
|
|
{
|
|
INT ndx;
|
|
|
|
for(ndx = 0; ndx < DCS_NUMFKEYS; ndx += 1)
|
|
if((*trmParams.fKeyTitle[level][ndx] != 0) || (*trmParams.fKeyText[level][ndx] != 0))
|
|
return(TRUE);
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* nextFkeyLevel() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
INT NEAR nextFKeyLevel(INT level)
|
|
{
|
|
INT ndx;
|
|
|
|
for(ndx = 0; ndx < DCS_FKEYLEVELS; ndx += 1)
|
|
{
|
|
if(level >= DCS_FKEYLEVELS)
|
|
level = 0;
|
|
if(testFKeyLevel(level++))
|
|
return(level);
|
|
}
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* setFKeyLevel() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID setFKeyLevel(INT newLevel, BOOL bReset)
|
|
{
|
|
if(newLevel == -1)
|
|
newLevel = nextFKeyLevel(curLevel);
|
|
|
|
if((newLevel < 1) || (newLevel > DCS_FKEYLEVELS))
|
|
newLevel = bReset ? 1 : curLevel;
|
|
|
|
if(bReset || (newLevel != curLevel))
|
|
{
|
|
fDisableMoreCtrl = ((newLevel = nextFKeyLevel(curLevel = newLevel)) &&
|
|
(newLevel != curLevel)) ? 0 : FKB_DISABLE_CTRL;
|
|
setFKeyTitles();
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* timerAction() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID timerAction(BOOL bTimer, BOOL bReset)
|
|
{
|
|
DWORD tickCount;
|
|
|
|
if(bTimer != timerActiv)
|
|
{
|
|
CheckMenuItem(hMenu, FMTIMER, timerActiv = bTimer ? MF_CHECKED : MF_UNCHECKED);
|
|
PostMessage(hdbmyControls, WM_COMMAND, GET_WM_COMMAND_MPS(IDTIMER, GetDlgItem(hdbmyControls, IDTIMER), BN_PAINT));
|
|
}
|
|
|
|
if(bReset)
|
|
readDateTime(startTimer);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* timerToggle() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID timerToggle(BOOL bReset)
|
|
{
|
|
timerAction(!timerActiv, bReset);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* sizeFkeys() - Resize fkeys dialog [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID sizeFkeys(LONG clientSize)
|
|
{
|
|
RECT fKeysRect, fCtrlRect;
|
|
GetWindowRect(hdbmyControls, (LPRECT) &fKeysRect);
|
|
/* --------------------------------------------------------------
|
|
if ((HIWORD(clientSize) - fKeysRect.bottom) < 0) jtf 3.15
|
|
clientSize = (LOWORD(clientSize),fKeysRect.bottom);
|
|
-------------------------------------------------------------- */
|
|
|
|
fKeysRect.top += (HIWORD(clientSize) - fKeysRect.bottom);
|
|
|
|
MoveWindow(hdbmyControls, 0, fKeysRect.top,
|
|
LOWORD(clientSize), HIWORD(clientSize) - fKeysRect.top, TRUE);
|
|
|
|
GetWindowRect(fKeyHandles[1], (LPRECT) &fKeysRect);
|
|
GetWindowRect(fKeyHandles[2], (LPRECT) &fCtrlRect);
|
|
fKeysRect.left = fCtrlRect.left - fKeysRect.right;
|
|
fKeysRect.top -= fCtrlRect.bottom;
|
|
|
|
fCtrlRect.left = 0;
|
|
fCtrlRect.bottom -= fCtrlRect.top;
|
|
fCtrlRect.right = (LOWORD(clientSize) / ((DCS_NUMFKEYS/2)+1));
|
|
for(fCtrlRect.top = 0; fCtrlRect.top < DCS_NUMFKEYS; fCtrlRect.top += 2)
|
|
{
|
|
MoveWindow(fKeyHandles[fCtrlRect.top], fCtrlRect.left, 0,
|
|
fCtrlRect.right, fCtrlRect.bottom, TRUE);
|
|
MoveWindow(fKeyHandles[fCtrlRect.top+1], fCtrlRect.left, fCtrlRect.bottom + fKeysRect.top,
|
|
fCtrlRect.right, fCtrlRect.bottom, TRUE);
|
|
fCtrlRect.left += (fCtrlRect.right + fKeysRect.left);
|
|
}
|
|
|
|
fCtrlRect.right = LOWORD(clientSize) - fCtrlRect.left;
|
|
MoveWindow(GetDlgItem(hdbmyControls, IDMORE), fCtrlRect.left, 0,
|
|
fCtrlRect.right, fCtrlRect.bottom, TRUE);
|
|
MoveWindow(GetDlgItem(hdbmyControls, IDTIMER), fCtrlRect.left, fCtrlRect.bottom + fKeysRect.top,
|
|
fCtrlRect.right, fCtrlRect.bottom, TRUE);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* initChildSize() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID initChildSize(RECT *pRect)
|
|
{
|
|
if(IsIconic(hItWnd))
|
|
{
|
|
SetRectEmpty((LPRECT) pRect);
|
|
pRect->right = GetSystemMetrics(SM_CXSCREEN);
|
|
pRect->bottom = GetSystemMetrics(SM_CYSCREEN) - GetSystemMetrics(SM_CYCAPTION) -
|
|
GetSystemMetrics(SM_CYMENU);
|
|
}
|
|
else
|
|
{
|
|
GetClientRect(hItWnd, (LPRECT) pRect);
|
|
if(IsWindowVisible(hdbmyControls)) /* mbbx 1.04: fkeys... */
|
|
pRect->bottom -= fKeysHeight;
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* childZoomSize() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
BOOL bZoomFlag = FALSE; /* prevents recursive calls */
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* childWindowZoom() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#define ZC_NOTZOOMED 0x0000
|
|
#define ZC_ZOOMED 0x0001
|
|
#define ZC_ZOOMNEXT 0x4000
|
|
#define ZC_NORESTORE 0x8000
|
|
|
|
WORD fZoomChild = ZC_NOTZOOMED;
|
|
|
|
WORD childZoomStatus(WORD wTest, WORD wSet)
|
|
{
|
|
WORD childZoomStatus = (fZoomChild & wTest);
|
|
|
|
fZoomChild |= wSet;
|
|
|
|
return(childZoomStatus);
|
|
}
|
|
|
|
|
|
VOID setAppTitle()
|
|
{
|
|
BYTE work[STR255];
|
|
|
|
strcpy(work, szMessage);
|
|
|
|
strcpy(work+strlen(work), " - ");
|
|
GetWindowText(hTermWnd, (LPSTR) work+strlen(work), 80);
|
|
|
|
SetWindowText(hItWnd, (LPSTR) work);
|
|
}
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* sizeTerm() - Resize terminal window [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID sizeTerm(LONG termSize)
|
|
{
|
|
RECT termRect, ctrlRect;
|
|
|
|
GetClientRect(hItWnd, (LPRECT) &termRect);
|
|
if(IsWindowVisible(hdbmyControls))
|
|
termRect.bottom -= fKeysHeight;
|
|
|
|
MoveWindow(hTermWnd, 0, 0, termRect.right,termRect.bottom,TRUE);
|
|
|
|
GetClientRect(hTermWnd, (LPRECT) &termRect);
|
|
|
|
CopyRect((LPRECT) &statusRect, (LPRECT) &termRect);
|
|
statusRect.top = termRect.bottom - (chrHeight + STATUSRECTBORDER);
|
|
|
|
CopyRect((LPRECT) &ctrlRect, (LPRECT) &statusRect);
|
|
if((ctrlRect.bottom - ctrlRect.top) < ctrlsHeight)
|
|
ctrlRect.top = termRect.bottom - ctrlsHeight;
|
|
MoveWindow(hdbXferCtrls, 0, ctrlRect.top, ctrlRect.right - ctrlRect.left,
|
|
ctrlRect.bottom - ctrlRect.top, FALSE);
|
|
updateIndicators();
|
|
|
|
if(chrHeight != 0)
|
|
visScreenLine = (ctrlRect.top / chrHeight) - 1;
|
|
CopyRect((LPRECT) &hTE.viewRect, (LPRECT) &termRect);
|
|
hTE.viewRect.bottom = (visScreenLine + 1) * chrHeight;
|
|
|
|
curTopLine = min(curTopLine, savTopLine + maxScreenLine - visScreenLine);
|
|
|
|
if (curTopLine < 0)
|
|
curTopLine = 0;
|
|
|
|
if((nScrollRange.x = maxChars - (termRect.right / chrWidth)) < 0)
|
|
nScrollRange.x = 0;
|
|
if(nScrollPos.x > nScrollRange.x)
|
|
nScrollPos.x = nScrollRange.x;
|
|
|
|
updateTermScrollBars(TRUE);
|
|
InvalidateRect(hTermWnd, NULL, FALSE); /* rjs swat - was TRUE */
|
|
UpdateWindow(hTermWnd);
|
|
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* countChildWindows() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
INT countChildWindows(BOOL bUnzoom)
|
|
{
|
|
INT nWndCount = 0;
|
|
HWND hNextWnd;
|
|
|
|
hNextWnd = hdbmyControls; /* mbb?: reasonable assumption? */
|
|
while((hNextWnd = GetNextWindow(hNextWnd, GW_HWNDPREV)) != NULL)
|
|
if(IsWindowVisible(hNextWnd))
|
|
nWndCount++;
|
|
|
|
if(bUnzoom && IsZoomed(hNextWnd = GetTopWindow(hItWnd))) /* AFTER count!!! */
|
|
ShowWindow(hNextWnd, SW_RESTORE);
|
|
|
|
return(nWndCount);
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* showTerminal() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID showTerminal(BOOL bShow, BOOL bReset)
|
|
{
|
|
if((bShow != (!(termData.flags & TF_HIDE) ? TRUE : FALSE)) || bReset)
|
|
{
|
|
if(bShow)
|
|
{
|
|
termData.flags &= ~TF_HIDE;
|
|
|
|
if(activTerm)
|
|
{
|
|
SetWindowPos(hTermWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
|
|
SetFocus(hTermWnd);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
termData.flags |= TF_HIDE;
|
|
|
|
if(activTerm)
|
|
{
|
|
if(childZoomStatus(ZC_ZOOMED, 0) && (countChildWindows(FALSE) == 1))
|
|
{
|
|
childZoomStatus(0, ZC_ZOOMNEXT);
|
|
ShowWindow(hTermWnd, SW_RESTORE);
|
|
}
|
|
/* typecasted the 2nd param to HWND -sdj*/
|
|
SetWindowPos(hTermWnd,(HWND) 1, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_HIDEWINDOW);
|
|
selectTopWindow(); /* mbbx 1.03 ... */
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* showHidedbmyControls() - */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID showHidedbmyControls(BOOL bShow, BOOL bArrange)
|
|
{
|
|
BYTE strShowHide[TMPNSTR+1];
|
|
|
|
if(bShow != fKeysShown)
|
|
{
|
|
if(fKeysShown = bShow)
|
|
{
|
|
ShowWindow(hdbmyControls, SW_SHOW);
|
|
LoadString(hInst, STR_HIDEFKEYS, (LPSTR) strShowHide, TMPNSTR);
|
|
ChangeMenu(hMenu, WMFKEYS, (LPSTR) strShowHide, WMFKEYS, MF_CHANGE);
|
|
}
|
|
else
|
|
{
|
|
ShowWindow(hdbmyControls, SW_HIDE);
|
|
LoadString(hInst, STR_SHOWFKEYS, (LPSTR) strShowHide, TMPNSTR);
|
|
ChangeMenu(hMenu, WMFKEYS, (LPSTR) strShowHide, WMFKEYS, MF_CHANGE);
|
|
}
|
|
if(!IsIconic(hItWnd)) /* rjs bugs 015 */
|
|
sizeTerm(0L); /* jtf 3.21 */
|
|
|
|
|
|
// make sure hTermWnd gets cleaned so there's no
|
|
// garbage left on hTermWnd.
|
|
InvalidateRect (hTermWnd, NULL, TRUE);
|
|
UpdateWindow (hTermWnd);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* makeActiveNext() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID makeActiveNext(BOOL bPrevWnd)
|
|
{
|
|
HWND hNextWnd, hTopWnd;
|
|
|
|
if((hNextWnd = GetNextWindow(hdbmyControls, GW_HWNDPREV)) != (hTopWnd = GetTopWindow(hItWnd)))
|
|
{
|
|
if(childZoomStatus(ZC_ZOOMED, 0))
|
|
{
|
|
childZoomStatus(0, ZC_NORESTORE);
|
|
ShowWindow(hTopWnd, SW_RESTORE);
|
|
}
|
|
|
|
if(bPrevWnd)
|
|
BringWindowToTop(hNextWnd);
|
|
else
|
|
{
|
|
SetWindowPos(hTopWnd, hNextWnd, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
hNextWnd = GetTopWindow(hItWnd);
|
|
}
|
|
|
|
SetFocus(hNextWnd);
|
|
}
|
|
}
|