aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/irc.c9
-rw-r--r--src/screen.c19
-rw-r--r--src/screen.h1
3 files changed, 28 insertions, 1 deletions
diff --git a/src/irc.c b/src/irc.c
index b8237d2..e4c0184 100644
--- a/src/irc.c
+++ b/src/irc.c
@@ -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);