]> code.citadel.org Git - citadel.git/commitdiff
* curses client: allow goodbye message to be seen on some terminals
authorMichael Hampton <io_error@uncensored.citadel.org>
Sun, 20 Jan 2002 05:22:07 +0000 (05:22 +0000)
committerMichael Hampton <io_error@uncensored.citadel.org>
Sun, 20 Jan 2002 05:22:07 +0000 (05:22 +0000)
citadel/ChangeLog
citadel/screen.c
citadel/screen.h

index 9a52292773095c7e2b4db1455ddd59797520f0b3..82068c97370c5fa1c639531085048a9dde7546c0 100644 (file)
@@ -1,4 +1,7 @@
  $Log$
+ Revision 590.77  2002/01/20 05:22:07  error
+ * curses client:  allow goodbye message to be seen on some terminals
+
  Revision 590.76  2002/01/19 16:56:31  error
  * Fixed color support, now works when rc_ansi_color is on or auto
 
@@ -3203,4 +3206,3 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
 
 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
        * Initial CVS import 
-
index 3ef86483776078eac09607f91d3447735290e7ba..eec5666cc74b48f1dad15bc7b6771273868ae514 100644 (file)
@@ -19,6 +19,9 @@
 /* Ancient curses implementations, this needs testing. Anybody got XENIX? */
 #define _vwprintw vwprintw
 #endif
+#ifndef HAVE_SNPRINTF
+#include "snprintf.h"
+#endif
 #include "citadel.h"
 #include "commands.h"
 #include "screen.h"
@@ -61,7 +64,7 @@ void status_line(const char *humannode, const char *bbs_city,
                        waddch(statuswindow, ACS_VLINE);
                        sln_printf(" %d unread mail", newmailcount);
                }
-               mvwinch(statuswindow, 0, 0);
+               sln_printf("\n");
        }
 #endif /* HAVE_CURSES_H */
 }
@@ -209,13 +212,23 @@ int sln_printf(char *fmt, ...)
 {
        va_list ap;
        register int retval;
+#ifdef HAVE_CURSES_H
+       static char buf[4096];
+#endif
 
        va_start(ap, fmt);
 #ifdef HAVE_CURSES_H
        if (statuswindow) {
-               retval = _vwprintw(statuswindow, fmt, ap);
-               if (fmt[strlen(fmt) - 1] == '\n')
-                       wrefresh(mainwindow);
+               register char *i;
+               
+               retval = vsnprintf(buf, 4096, fmt, ap);
+               for (i = buf; *i; i++) {
+                       if (*i == '\r' || *i == '\n')
+                               wclrtoeol(statuswindow);
+                       sln_putc(*i);
+                       if (*i == '\r' || *i == '\n')
+                               mvwinch(statuswindow, 0, 0);
+               }
        } else
 #endif
                retval = vprintf(fmt, ap);
@@ -231,15 +244,20 @@ int sln_printf_if(char *fmt, ...)
 {
        register int retval = 1;
 #ifdef HAVE_CURSES_H
+       static char buf[4096];
        va_list ap;
 
        va_start(ap, fmt);
        if (statuswindow) {
-               retval = _vwprintw(statuswindow, fmt, ap);
-               if (fmt[strlen(fmt) - 1] == '\r' ||
-                   fmt[strlen(fmt) - 1] == '\n') {
-                       mvwinch(statuswindow, 0, 0);
-                       wrefresh(mainwindow);
+               register char *i;
+               
+               retval = vsnprintf(buf, 4096, fmt, ap);
+               for (i = buf; *i; i++) {
+                       if (*i == '\r' || *i == '\n')
+                               wclrtoeol(statuswindow);
+                       sln_putc(*i);
+                       if (*i == '\r' || *i == '\n')
+                               mvwinch(statuswindow, 0, 0);
                }
        }
        va_end(ap);
@@ -271,6 +289,26 @@ int scr_putc(int c)
 }
 
 
+int sln_putc(int c)
+{
+#ifdef HAVE_CURSES_H
+       if (statuswindow)
+               return ((waddch(statuswindow, c) == OK) ? c : EOF);
+#endif
+       return putc(c, stdout);
+}
+
+
+int sln_putc_if(int c)
+{
+#ifdef HAVE_CURSES_H
+       if (statuswindow)
+               return ((waddch(statuswindow, c) == OK) ? c : EOF);
+#endif
+       return 1;
+}
+
+
 /*
  * scr_color() sets the window color for mainwindow
  */
index 81df04ccda31098e6409b5a0de5af29bdf242ebc..c7dfc8ea48262269580c49d1d7b9a293593aa502 100644 (file)
@@ -12,6 +12,7 @@ int sln_printf(char *fmt, ...);
 int sln_printf_if(char *fmt, ...);
 int scr_getc(void);
 int scr_putc(int c);
+int sln_putc(int c);
 int scr_color(int colornum);
 void scr_flush(void);
 void err_flush(void);