Give names to the windows.
[super-star-trek.git] / io.c
diff --git a/io.c b/io.c
index ec30ccffc676959c9c59bd9cfe7dacf4e58fdb17..12a1993e693272f9fd29ce546229e63d92ff7e88 100644 (file)
--- a/io.c
+++ b/io.c
@@ -33,6 +33,17 @@ static int curses = FALSE;
 static int curses = TRUE;
 #endif /* SERGEEV */
 
+#ifdef SERGEEV
+wnd wnds[6]={{1,1,80,25},      /* FULLSCREEN_WINDOW */
+            {1,1,25,12},       /* LEFTUPPER_WINDOW */
+            {26,2,80,12},      /* SRSCAN_WINDOW */
+            {65,1,80,10},      /* LRSCAN_WINDOW */
+            {1,13,80,23},      /* LOWER_WINDOW */
+            {1,24,80,25},      /* BOTTOM_WINDOW */
+};
+short curwnd;
+#endif /* SERGEEV */
+
 static void outro(int sig) {
 /* wrap up, either normally or due to signal */
     if (curses) {
@@ -81,25 +92,6 @@ void ioend(void) {
     outro(0);
 }
 
-void clearscreen(void) {
-       /* Somehow we need to clear the screen */
-#ifdef __BORLANDC__
-       extern void clrscr(void);
-       clrscr();
-#else
-       if (curses) {
-           wclear(stdscr);
-           wrefresh(stdscr);
-       } else {
-               // proutn("\033[2J"); /* Hope for an ANSI display */
-               /* much more in that old-TTY spirit to just throw linefeeds */
-               int i;
-               for (i = 0; i < screenheight; i++)
-                   putchar('\n');
-       }
-#endif
-}
-
 void waitfor(void) {
 /* wait for user action -- OK to do nothing if on a TTY */
 #ifdef SERGEEV
@@ -113,7 +105,7 @@ void pause_game(int i) {
         char buf[BUFSIZ];
 #else /* SERGEEV */
         drawmaps(0);
-        setwnd(5);
+        setwnd(BOTTOM_WINDOW);
 #endif /* SERGEEV */
        if (i==1) {
                if (skill > 2)
@@ -140,7 +132,10 @@ void pause_game(int i) {
                proutn(prompt);
                fgets(buf, sizeof(buf), stdin);
                if (i != 0) {
-                       clearscreen();
+                   /* much more in that old-TTY spirit to throw linefeeds */
+                   int j;
+                   for (j = 0; j < screenheight; j++)
+                       putchar('\n');
                }
                linecount = 0;
        }
@@ -148,7 +143,7 @@ void pause_game(int i) {
        proutn(prompt);
        getche();
         clrscr();
-        setwnd(4);
+        setwnd(LOWER_WINDOW);
         clrscr();
 #endif /* SERGEEV */
 }
@@ -179,7 +174,7 @@ static void vproutn(char *fmt, va_list ap) {
     char *s, *p;
     vasprintf(&s, fmt, ap);
     p=s;
-    if ((curwnd==4)&&(wherey()==wnds[curwnd].wndbottom-wnds[curwnd].wndtop)){
+    if ((curwnd==LOWER_WINDOW)&&(wherey()==wnds[curwnd].wndbottom-wnds[curwnd].wndtop)){
        if (strchr(s,'\n')) {
           p=strchr(s,'\n');
           p[0]=0;
@@ -190,7 +185,7 @@ static void vproutn(char *fmt, va_list ap) {
 #endif /* SERGEEV */
     }
 #ifdef SERGEEV
-    if ((curwnd==4)&&(wherey()>wnds[curwnd].wndbottom-wnds[curwnd].wndtop+1))
+    if ((curwnd==LOWER_WINDOW)&&(wherey()>wnds[curwnd].wndbottom-wnds[curwnd].wndtop+1))
        cprintf("\r");
 //        setwnd(curwnd);
     if (strchr(s,'\n') || strchr(s,'\r')) clreol();
@@ -293,6 +288,20 @@ void prouts(char *fmt, ...) {
 #endif /* SERGEEV */
 }
 
+void c_printf (char *format, ... )
+{
+    char buffer[BUFSIZ]; /* Well, BUFSIZ is from ncurses...  */
+    va_list argp;
+    va_start(argp,format);
+    vsprintf(buffer,format,argp);
+    va_end(argp);
+#ifdef SERGEEV
+    waddstr(conio_scr,buffer);
+#else
+    proutn(buffer);
+#endif /* SERGEEV */
+}
+
 void warble(void)
 /* sound and visual effects for teleportation */
 {
@@ -301,7 +310,7 @@ void warble(void)
     posx=wherex();
     posy=wherey();
     drawmaps(1);
-    setwnd(4);
+    setwnd(LOWER_WINDOW);
     gotoxy(posx,posy);
     sound(50);
     delay(1000);
@@ -343,5 +352,21 @@ void getline(char *line, int max) {
     }
 }
 
+void setwnd(short wndnum){
+/* change windows -- OK for this to be a no-op in tty mode */
+#ifdef SERGEEV
+     int cury;
+     cury=wherey()+wnds[curwnd].wndtop-wnds[wndnum].wndtop;
+     if ((curwnd==FULLSCREEN_WINDOW)&&(wndnum!=FULLSCREEN_WINDOW)) clrscr();
+     window(wnds[wndnum].wndleft, wnds[wndnum].wndtop, wnds[wndnum].wndright, wnds[wndnum].wndbottom);
+     if ((curwnd==wndnum)&&(cury>wnds[wndnum].wndbottom-wnds[wndnum].wndtop+1)){
+        gotoxy(wnds[wndnum].wndright-wnds[wndnum].wndleft+1,wnds[wndnum].wndbottom-wnds[wndnum].wndtop+1);
+       skip(1);
+     }
+     curwnd=wndnum;
+     gotoxy(1,cury);
+#endif /* SERGEEV */
+}
+
 void commandhook(char *cmd, int before) {
 }