sb_buf = malloc(65536);
for (i = 0; i < 809; i++)
sb_bufstr[i] = sb_buf+(81*i);
}
void exit_scrollback(void)
{
free(sb_buf);
}
static void chk_firstup(void)
{
int i;
if (firstup) {
firstup = FALSE;
for (i = tnc_y; i > 0 ; i--) {
if (++lncntr > lines_in_buffer) break;
if (--sb_up < 0) sb_up = 808;
}
}
}
static void plot_uppage(int refresh)
{
char buf[1440], *p;
int i, j;
j = sb_up;
memset(buf, 0x20, 1440);
p = buf;
for (i = 1; i <= tnc_y; i++) {
if (++j > 808) j = 0;
memcpy(p, sb_bufstr[j], strlen(sb_bufstr[j]));
p += 80;
}
wmove(sbwin, 0, 0);
waddnstr(sbwin, buf, 1440);
if (refresh)
wrefresh(sbwin);
}
static void plot_dnpage(int refresh)
{
char buf[1440], *p;
int i, j;
j = sb_dn;
memset(buf, 0x20, 1440);
p = buf + 1360;
for (i = tnc_y; i > 0; i--) {
if ((--j) < 0) j = 808;
memcpy(p, sb_bufstr[j], strlen(sb_bufstr[j]));
p -= 80;
}
wmove(sbwin, 0, 0);
waddnstr(sbwin, buf, 1440);
if (refresh)
wrefresh(sbwin);
}
static void home(void)
{
chk_firstup();
if (lncntr <= lines_in_buffer) {
while (lncntr <= lines_in_buffer) {
if (--sb_up < 0) sb_up = 808;
if (--sb_dn < 0) sb_dn = 808;
lncntr++;
}
plot_uppage(1);
}
}
static void end(void)
{
if (lncntr > 18){
while (lncntr > 18) {
if (++sb_up > 808) sb_up = 0;
if (++sb_dn > 808) sb_dn = 0;
lncntr--;
}
plot_dnpage(1);
}
}
static void pgup(int refresh)
{
int i;
chk_firstup();
if (lncntr <= lines_in_buffer) {
for (i = 1; i < 19; i++) {
if (--sb_up < 0) sb_up = 808;
if (--sb_dn < 0) sb_dn = 808;
if (++lncntr > lines_in_buffer) break;
}
plot_uppage(refresh);
}
}
static void pgdn(int refresh)
{
int i;
if (lncntr > 18) {
for (i = 1; i < 19; i++){
if (++sb_up > 808) sb_up = 0;
if (++sb_dn > 808) sb_dn = 0;
if (--lncntr == 18) break;
}
plot_dnpage(refresh);
}
}
static void lnup(void)
{
char *s;
chk_firstup();
if (lncntr <= lines_in_buffer) {
wmove(sbwin, 0, 0);
wscrl(sbwin, -1);
s = sb_bufstr[sb_up];
waddstr(sbwin, s);
wrefresh(sbwin);
if (--sb_up < 0) sb_up = 808;
if (--sb_dn < 0) sb_dn = 808;
lncntr++;
}
}
static void lndn(void)
{
char *s;
if (lncntr > 18) {
wmove(sbwin, 17, 0);
wscrl(sbwin, 1);
s = sb_bufstr[sb_dn];
waddstr(sbwin, s);
wrefresh(sbwin);
if (++sb_up > 808) sb_up = 0;
if (++sb_dn > 808) sb_dn = 0;
lncntr--;
}
}