269 lines
7.7 KiB
C
269 lines
7.7 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"
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* updateTermScrollBars() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID updateTermScrollBars(BOOL bScroll)
|
|
{
|
|
INT saveScrollRange, offset;
|
|
|
|
saveScrollRange = nScrollRange.y;
|
|
if((offset = maxScreenLine - visScreenLine) < 0)
|
|
offset = 0;
|
|
if((nScrollRange.y = savTopLine + offset) < 0)
|
|
nScrollRange.y = 0;
|
|
|
|
if(((nScrollPos.y > 0) && (nScrollPos.y == saveScrollRange)) || (nScrollPos.y > nScrollRange.y))
|
|
nScrollPos.y = nScrollRange.y;
|
|
|
|
if(!trmParams.fHideTermVSB)
|
|
{
|
|
SetScrollRange(hTermWnd, SB_VERT, 0, (nScrollRange.y > 0) ? nScrollRange.y : 1, FALSE);
|
|
if (GetScrollPos(hTermWnd, SB_VERT) != nScrollPos.y) /* jtf 3.14 */
|
|
SetScrollPos(hTermWnd, SB_VERT, nScrollPos.y, TRUE);
|
|
}
|
|
else
|
|
SetScrollRange(hTermWnd, SB_VERT, 0, 0, TRUE);
|
|
|
|
if(!trmParams.fHideTermHSB)
|
|
{
|
|
SetScrollRange(hTermWnd, SB_HORZ, 0, (nScrollRange.x > 0) ? nScrollRange.x : 1, FALSE);
|
|
if (GetScrollPos(hTermWnd, SB_HORZ) != nScrollPos.x) /* jtf 3.14 */
|
|
SetScrollPos(hTermWnd, SB_HORZ, nScrollPos.x, TRUE);
|
|
}
|
|
else
|
|
SetScrollRange(hTermWnd, SB_HORZ, 0, 0, TRUE);
|
|
|
|
if(bScroll)
|
|
scrollBits();
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* scrollTermWindow() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
proc scrollTermWindow(INT dh, INT dv)
|
|
{
|
|
ScrollWindow(hTermWnd, -dh*chrWidth, -dv*chrHeight, (LPRECT) &hTE.viewRect,
|
|
(LPRECT) &hTE.viewRect);
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* scrollTermLine() - [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
proc scrollTermLine(INT newLine, INT dh, INT dv)
|
|
{
|
|
RECT r;
|
|
|
|
getPort();
|
|
hTE.active = 0;
|
|
|
|
if(dv > 0)
|
|
r.top = hTE.viewRect.bottom - stdChrHeight;
|
|
else
|
|
r.top = 0;
|
|
r.left = hTE.viewRect.left;
|
|
r.bottom = r.top + stdChrHeight;
|
|
r.right = hTE.viewRect.right;
|
|
|
|
scrollTermWindow(dh, dv);
|
|
ValidateRect(hTermWnd, (LPRECT) &r);
|
|
|
|
reDrawTermLine(newLine, 0, maxChars);
|
|
clipRect(&r);
|
|
termActivate(&hTE);
|
|
releasePort();
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* scrollBits() - Move text on term. screen + some IT house keeping. [mbb] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID scrollBits()
|
|
{
|
|
INT oldTopLine;
|
|
INT oldLeftCol;
|
|
INT dh, dv;
|
|
INT offset;
|
|
INT lin;
|
|
|
|
oldLeftCol = curLeftCol;
|
|
oldTopLine = curTopLine;
|
|
|
|
curLeftCol = nScrollPos.x;
|
|
curTopLine = nScrollPos.y;
|
|
dh = curLeftCol - oldLeftCol;
|
|
dv = curTopLine - oldTopLine;
|
|
|
|
hideTermCursor();
|
|
if(dh != 0)
|
|
{
|
|
scrollTermWindow(dh, dv);
|
|
UpdateWindow(hTermWnd);
|
|
}
|
|
else if(dv == 1)
|
|
scrollTermLine(curTopLine-savTopLine+visScreenLine, dh, dv);
|
|
else if(dv == -1)
|
|
scrollTermLine(curTopLine-savTopLine, dh, dv);
|
|
else if(dv != 0)
|
|
{
|
|
termDeactivate(&hTE);
|
|
reDrawTermScreen(0, visScreenLine+1, curTopLine - savTopLine); /* mbbx 2.00: jtf disp2... */
|
|
termActivate(&hTE);
|
|
}
|
|
showTermCursor();
|
|
|
|
if((curTopLine + visScreenLine) > (savTopLine + maxScreenLine)) /* mbbx 2.00.06: jtf disp2... */
|
|
cleanRect(maxScreenLine+1, (visScreenLine + curTopLine) - (savTopLine + maxScreenLine));
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* scrollUp() - */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID scrollUp(INT nBar, INT partCode, INT deltaLines)
|
|
{
|
|
LONG *pScrollPos;
|
|
|
|
if(partCode == SB_LINEUP)
|
|
{
|
|
pScrollPos = ((nBar == SB_VERT) ? &nScrollPos.y : &nScrollPos.x);
|
|
|
|
if(*pScrollPos > 0)
|
|
{
|
|
*pScrollPos -= deltaLines;
|
|
updateTermScrollBars(TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* scrollDown() - */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID scrollDown(INT nBar, INT partCode, INT deltaLines)
|
|
{
|
|
LONG *pScrollRange, *pScrollPos;
|
|
|
|
if(partCode == SB_LINEDOWN)
|
|
{
|
|
if(nBar == SB_VERT)
|
|
{
|
|
pScrollRange = &nScrollRange.y;
|
|
pScrollPos = &nScrollPos.y;
|
|
}
|
|
else
|
|
{
|
|
pScrollRange = &nScrollRange.x;
|
|
pScrollPos = &nScrollPos.x;
|
|
}
|
|
|
|
if(*pScrollPos < *pScrollRange)
|
|
{
|
|
*pScrollPos += deltaLines;
|
|
updateTermScrollBars(TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* pageScroll() - */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID pageScroll(INT which)
|
|
{
|
|
if(which == SB_PAGEUP)
|
|
{
|
|
if((nScrollPos.y -= (visScreenLine + 1)) < 0)
|
|
nScrollPos.y = 0;
|
|
}
|
|
else
|
|
{
|
|
if((nScrollPos.y += (visScreenLine + 1)) > nScrollRange.y)
|
|
nScrollPos.y = nScrollRange.y;
|
|
}
|
|
|
|
updateTermScrollBars(TRUE);
|
|
termCleanUp();
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* hPageScroll() - */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID hPageScroll(INT which)
|
|
{
|
|
nScrollPos.x = ((which == SB_PAGEUP) ? 0 : nScrollRange.x);
|
|
updateTermScrollBars(TRUE);
|
|
termCleanUp(); /* mbbx 1.04: per jtfx */
|
|
}
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* trackScroll() - [scf] */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID trackScroll(INT nBar, INT partCode)
|
|
{
|
|
LONG *pScrollRange, *pScrollPos;
|
|
INT amount;
|
|
|
|
if(nBar == SB_VERT)
|
|
{
|
|
pScrollRange = &nScrollRange.y;
|
|
pScrollPos = &nScrollPos.y;
|
|
}
|
|
else
|
|
{
|
|
pScrollRange = &nScrollRange.x;
|
|
pScrollPos = &nScrollPos.x;
|
|
}
|
|
|
|
amount = (((partCode == SB_LINEUP) || (partCode == SB_PAGEUP)) ? -1 : 1);
|
|
|
|
if(((amount == -1) && (*pScrollPos > 0)) || ((amount == 1) && (*pScrollPos < *pScrollRange)))
|
|
{
|
|
if((partCode == SB_PAGEUP) || (partCode == SB_PAGEDOWN))
|
|
{
|
|
if(nBar == SB_VERT)
|
|
{
|
|
if(amount == -1)
|
|
{
|
|
if((*pScrollPos -= ((hTE.viewRect.bottom - hTE.viewRect.top) / chrHeight)) < 0)
|
|
*pScrollPos = 0;
|
|
}
|
|
else
|
|
{
|
|
if((*pScrollPos += ((hTE.viewRect.bottom - hTE.viewRect.top) / chrHeight)) > *pScrollRange)
|
|
*pScrollPos = *pScrollRange;
|
|
}
|
|
}
|
|
else
|
|
*pScrollPos += ((amount == -1) ? 0 : *pScrollRange);
|
|
}
|
|
else
|
|
*pScrollPos += amount;
|
|
|
|
updateTermScrollBars(FALSE);
|
|
}
|
|
}
|