diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/irc.c | 9 | ||||
| -rw-r--r-- | src/screen.c | 19 | ||||
| -rw-r--r-- | src/screen.h | 1 |
3 files changed, 28 insertions, 1 deletions
@@ -812,10 +812,17 @@ void irc_register(void) { } static void scrollback() { + char c; scr_scrollback(); while(!keypress()) irc_read(); - kgetc(); + c = kgetc(); + if(c == '-') { + scr_scrollback_bonus(); + while(!keypress()) + irc_read(); + kgetc(); + } scr_end_scrollback(); } diff --git a/src/screen.c b/src/screen.c index 42a7e65..2d4436f 100644 --- a/src/screen.c +++ b/src/screen.c @@ -8,6 +8,10 @@ #define SDLST ((u16 *)0x0230) +/* if DOS isn't being used, the config will carve up the $0700-$1fff + area for extra scrollback. */ +unsigned int *bonus_addrs = (unsigned int *)0xf0; + char scr_status[MAX_SCREENS]; /* the screen that's currently displaying */ @@ -26,12 +30,20 @@ void scr_waitvcount(u8 c) { } static void scr_clear(char s) { + if(bonus_addrs[s]) { + memset(bonus_addrs[s], 0, 1000); + strcpy(bonus_addrs[s], "This is bonus scrollback!"); + } memset(screen_top_addrs[s], 0, 1000); memset(screen_bot_addrs[s], 0, 1000); memset(scr_names[s], 0, 32); } static void scr_scroll(char s) { + if(bonus_addrs[s]) { + memmove(bonus_addrs[s], bonus_addrs[s] + 40, 960); + memmove(bonus_addrs[s] + 960, screen_top_addrs[s], 40); + } memmove(screen_top_addrs[s], screen_top_addrs[s] + 40, 960); memmove(screen_top_addrs[s] + 960, screen_bot_addrs[s], 40); memmove(screen_bot_addrs[s], screen_bot_addrs[s] + 40, 920); @@ -115,6 +127,13 @@ void scr_display(char s) { scr_show_status(s); } +void scr_scrollback_bonus(void) { + if(bonus_addrs[scr_current]) { + scr_waitvcount(112); + *dlist_top_lms = (u16)bonus_addrs[scr_current]; + } +} + void scr_scrollback(void) { // OS.color2 = 0; scr_waitvcount(112); diff --git a/src/screen.h b/src/screen.h index 9acd720..0d3e268 100644 --- a/src/screen.h +++ b/src/screen.h @@ -57,6 +57,7 @@ void scr_display(char s); note that it's a bad idea to write to the screen while it's scrolled back! */ void scr_scrollback(void); +void scr_scrollback_bonus(void); /* end scrollback mode (display the bottom 23 lines + status) */ void scr_end_scrollback(void); |
