diff --git a/include/wintty.h b/include/wintty.h index 4863d6e10..a42ed22d4 100644 --- a/include/wintty.h +++ b/include/wintty.h @@ -114,16 +114,7 @@ E void FDECL(tty_startup, (int *, int *)); #ifndef NO_TERMS E void NDECL(tty_shutdown); #endif -#if defined(apollo) -/* Apollos don't widen old-style function definitions properly -- they try to - * be smart and use the prototype, or some such strangeness. So we have to - * define UNWIDENDED_PROTOTYPES (in tradstdc.h), which makes CHAR_P below a - * char. But the tputs termcap call was compiled as if xputc's argument - * actually would be expanded. So here, we have to make an exception. */ -E void FDECL(xputc, (int)); -#else -E void FDECL(xputc, (CHAR_P)); -#endif +E int FDECL(xputc, (int)); E void FDECL(xputs, (const char *)); #if defined(SCREEN_VGA) || defined(SCREEN_8514) E void FDECL(xputg, (int, int, unsigned)); diff --git a/sys/msdos/video.c b/sys/msdos/video.c index 76002cdf6..1429ade16 100644 --- a/sys/msdos/video.c +++ b/sys/msdos/video.c @@ -571,8 +571,10 @@ const char *s; } } -void xputc(ch) /* write out character (and attribute) */ -char ch; +/* same signature as 'putchar()' with potential failure result ignored */ +int +xputc(ch) /* write out character (and attribute) */ +int ch; { int i; char attribute; @@ -591,16 +593,17 @@ char ch; vesa_xputc(ch, attribute); #endif /*SCREEN_VESA*/ } + return 0; } -void xputg(glyphnum, ch, - special) /* write out a glyph picture at current location */ +/* write out a glyph picture at current location */ +void xputg(glyphnum, ch, special) int glyphnum; int ch; unsigned special; { if (!iflags.grmode || !iflags.tile_view) { - xputc((char) ch); + (void) xputc((char) ch); #ifdef SCREEN_VGA } else if (iflags.grmode && iflags.usevga) { vga_xputg(glyphnum, ch, special); diff --git a/sys/share/tclib.c b/sys/share/tclib.c index c158741e5..b47f41815 100644 --- a/sys/share/tclib.c +++ b/sys/share/tclib.c @@ -27,7 +27,7 @@ int FDECL(tgetnum, (const char *)); char *FDECL(tgetstr, (const char *, char **)); char *FDECL(tgoto, (const char *, int, int)); char *FDECL(tparam, (const char *, char *, int, int, int, int, int)); -void FDECL(tputs, (const char *, int, int (*)())); +void FDECL(tputs, (const char *, int, int (*)(int))); /* local support data */ static char *tc_entry; @@ -502,9 +502,10 @@ int row, col, row2, col2; /* send a string to the terminal, possibly padded with trailing NULs */ void tputs(string, range, output_func) -const char *string; /* characters to output */ -int range; /* number of lines affected, used for `*' delays */ -int (*output_func)(); /* actual output routine; return value ignored */ +const char *string; /* characters to output */ +int range; /* number of lines affected, used for `*' delays */ +int FDECL((*output_func),(int)); /* actual output routine; + * return value ignored */ { register int c, num = 0; register const char *p = string; diff --git a/sys/winnt/nttty.c b/sys/winnt/nttty.c index 3233dc9cb..60d9db128 100644 --- a/sys/winnt/nttty.c +++ b/sys/winnt/nttty.c @@ -530,12 +530,14 @@ int x, y; set_console_cursor(x, y); } -void +/* same signature as 'putchar()' with potential failure result ignored */ +int xputc(ch) -char ch; +int ch; { set_console_cursor(ttyDisplay->curx, ttyDisplay->cury); - xputc_core(ch); + xputc_core((char) ch); + return 0; } void @@ -543,7 +545,7 @@ xputs(s) const char *s; { int k; - int slen = strlen(s); + int slen = (int) strlen(s); if (ttyDisplay) set_console_cursor(ttyDisplay->curx, ttyDisplay->cury); diff --git a/sys/winnt/stubs.c b/sys/winnt/stubs.c index ca7313b5b..fa4a9361c 100644 --- a/sys/winnt/stubs.c +++ b/sys/winnt/stubs.c @@ -82,11 +82,11 @@ int mode; return; } -void +int xputc(ch) -char ch; +int ch; { - return; + return 0; } void diff --git a/win/tty/termcap.c b/win/tty/termcap.c index 9e0a76eb9..0e256ee91 100644 --- a/win/tty/termcap.c +++ b/win/tty/termcap.c @@ -495,12 +495,10 @@ tty_end_screen() /* Cursor movements */ /* Note to overlay tinkerers. The placement of this overlay controls the - location - of the function xputc(). This function is not currently in trampoli.[ch] - files for what is deemed to be performance reasons. If this define is - moved - and or xputc() is taken out of the ROOT overlay, then action must be taken - in trampoli.[ch]. */ + location of the function xputc(). This function is not currently in + trampoli.[ch] files for what is deemed to be performance reasons. If + this define is moved and or xputc() is taken out of the ROOT overlay, + then action must be taken in trampoli.[ch]. */ void nocmov(x, y) @@ -528,7 +526,7 @@ int x, y; cmov(x, y); } else { while ((int) ttyDisplay->cury < y) { - xputc('\n'); + (void) xputc('\n'); ttyDisplay->curx = 0; ttyDisplay->cury++; } @@ -561,16 +559,27 @@ register int x, y; ttyDisplay->curx = x; } -/* See note above. xputc() is a special function. */ -void +/* See note above. xputc() is a special function for overlays. */ +int xputc(c) -#if defined(apollo) - int c; -#else - char c; -#endif +int c; /* actually char, but explicitly specify its widened type */ { - (void) putchar(c); + /* + * Note: xputc() as a direct all to putchar() doesn't make any + * sense _if_ putchar() is a function. But if it is a macro, an + * overlay configuration would want to avoid hidden code bloat + * from multiple putchar() expansions. And it gets passed as an + * argument to tputs() so we have to guarantee an actual function + * (while possibly lacking ANSI's (func) syntax to override macro). + * + * xputc() used to be declared as 'void xputc(c) char c; {}' but + * avoiding the proper type 'int' just to avoid (void) casts when + * ignoring the result can't have been sufficent reason to add it. + * It also had '#if apollo' conditional to have the arg be int. + * Matching putchar()'s declaration and using explicit casts where + * warranted is more robust, so we're just a jacket around that. + */ + return putchar(c); } void @@ -579,13 +588,9 @@ const char *s; { #ifndef TERMLIB (void) fputs(s, stdout); -#else -#if defined(NHSTDC) || defined(ULTRIX_PROTO) - tputs(s, 1, (int (*) ()) xputc); #else tputs(s, 1, xputc); #endif -#endif } void @@ -599,7 +604,7 @@ cl_end() /* this looks terrible, especially on a slow terminal but is better than nothing */ while (cx < CO) { - xputc(' '); + (void) xputc(' '); cx++; } tty_curs(BASE_WINDOW, (int) ttyDisplay->curx + 1, @@ -754,25 +759,18 @@ tty_delay_output() /* BUG: if the padding character is visible, as it is on the 5620 then this looks terrible. */ if (flags.null) { + tputs( #ifdef TERMINFO -/* cbosgd!cbcephus!pds for SYS V R2 */ -#ifdef NHSTDC - tputs("$<50>", 1, (int (*) ()) xputc); + "$<50>", #else - tputs("$<50>", 1, xputc); -#endif -#else -#if defined(NHSTDC) || defined(ULTRIX_PROTO) - tputs("50", 1, (int (*) ()) xputc); -#else - tputs("50", 1, xputc); -#endif + "50", #endif + 1, xputc); } else if (ospeed > 0 && ospeed < SIZE(tmspc10) && nh_CM) { /* delay by sending cm(here) an appropriate number of times */ register int cmlen = - strlen(tgoto(nh_CM, ttyDisplay->curx, ttyDisplay->cury)); + (int) strlen(tgoto(nh_CM, ttyDisplay->curx, ttyDisplay->cury)); register int i = 500 + tmspc10[ospeed] / 2; while (i > 0) { @@ -794,7 +792,7 @@ cl_eos() /* free after Robert Viduya */ while (cy <= LI - 2) { cl_end(); - xputc('\n'); + (void) xputc('\n'); cy++; } cl_end();