tty xputc()
Another part of github issue 227. Casting a function pointer when passing it to another function is iffy when lying about the return type. tputs() expects a routine which returns int, so give it one. Other xputc() usage is equivalent to putchar(), so define xputc() with the same function signature as that has. The tputs() declarations in system.h should probably be changed (third argument is a function which takes an int rather than unspecified parameters) but I've left them alone. I made that change to tputs() in sys/share/tclib.c though. NT and MSDOS changes are untested. tclib.c compiles ok with clang- as-gcc on OSX but hasn't been tested with the port that uses it (VMS).
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -82,11 +82,11 @@ int mode;
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
xputc(ch)
|
||||
char ch;
|
||||
int ch;
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user