$NetBSD: patch-al,v 1.5 2013/03/28 21:31:25 joerg Exp $ * Add DragonFly support. * Don't declare errno. --- uip/vmh.c.orig 2013-03-28 18:02:16.000000000 +0000 +++ uip/vmh.c @@ -113,13 +113,20 @@ void __cputchar __P((int)); #define SMALLMOVE 1 #define LARGEMOVE 10 +#ifndef A_CHARTEXT +#define A_CHARTEXT 0xff +#endif #define XYZ /* XXX */ -#if (defined(__FreeBSD__) && __FreeBSD__ >= 5) || (defined(linux)) +#if (defined(__FreeBSD__) && __FreeBSD__ >= 5) || (defined(linux)) || defined(__DragonFly__) struct ldat { +#ifdef __DragonFly__ + char *text; +#else NCURSES_CH_T *text; +#endif NCURSES_SIZE_T firstchar; NCURSES_SIZE_T lastchar; NCURSES_SIZE_T oldindex; @@ -222,6 +229,15 @@ static struct ltchars ltc; #endif #endif /* TIOCGLTC */ +#ifdef __NetBSD__ +static char *tc_CE, *tc_CM, *tc_SO, *tc_SE, *tc_US, *tc_UE; +#define CE tc_CE +#define CM tc_CM +#define SO tc_SO +#define SE tc_SE +#define US tc_US +#define UE tc_UE +#endif #if !defined(SYS5) && !defined(BSD44) && !defined(TERMINFO) int _putchar (); @@ -239,7 +255,6 @@ static TYPESIG TSTPser (); /* MISCELLANY */ -extern int errno; #if !defined(BSD44) && !defined(__GNU_LIBRARY__) extern int sys_nerr; extern char *sys_errlist[]; @@ -248,7 +263,9 @@ extern char *sys_errlist[]; static void adorn (); static vmh(), lreset(), linsert(), ladvance(), lretreat(), lgo(); -static TTYon(), TTYoff(), foreground(); +static foreground(); +static void TTYon (void); +static void TTYoff (void); static int PEERinit(), pINI(), pLOOP(), pTTY(), pWIN(), WINinit(); static int WINgetstr(), WINless(), WINputc(), TTYinit(), pWINaux(); /* */ @@ -348,7 +365,11 @@ static vmh () { wclrtoeol (Command); wrefresh (Command); - switch (WINgetstr (Command, buffer)) { +#ifndef JAPAN + switch (WINgetstr (Command, buffer, sizeof(buffer))) { +#else + switch (WINgetstr (Command, (unsigned char *)buffer, sizeof(buffer))) { +#endif case NOTOK: break; @@ -808,6 +829,9 @@ static int WINinit (nprog) { sideground (); #ifndef TERMINFO +#ifdef __NetBSD__ + CM = getcap("cm"); +#endif if (CM == NULL) #else /* TERMINFO */ if (cursor_address == NULL) /* assume mtr wanted "cm", not "CM" */ @@ -822,6 +846,15 @@ static int WINinit (nprog) { #ifndef TERMINFO if (tgetflag ("xt") || tgetnum ("sg") > 0) SO = SE = US = UE = NULL; +#ifdef __NetBSD__ + else { + SO = getcap("so"); + SE = getcap("se"); + US = getcap("us"); + UE = getcap("ue"); + } + CE = getcap("ce"); +#endif #else /* TERMINFO */ /* * If termcap mapped directly to terminfo, we'd use the following: @@ -862,21 +895,36 @@ static int WINinit (nprog) { /* */ -static int WINgetstr (w, buffer) +static int WINgetstr (w, buffer, size) register WINDOW *w; +#ifndef JAPAN char *buffer; +#else /* JAPAN */ +unsigned char *buffer; +#endif /* JAPAN */ +size_t size; { register int c; +#ifndef JAPAN register char *bp; +#else /* JAPAN */ + register unsigned char *bp; +#endif /* JAPAN */ bp = buffer; *bp = 0; + --size; for (;;) { - switch (c = wgetch (w) & 0xff) { - case ERR: - adios (NULLCP, "wgetch lost"); + c = wgetch(w); + if (c == ERR) + adios (NULLCP, "wgetch lost"); + if (bp - buffer >= size && + !(c == intrc || c == EOFC || c == ERASE || c == KILL || + c == WERASC || c == '\r' || c == '\n')) + continue; + switch (c &= A_CHARTEXT) { case '\f': wrefresh (curscr); break; @@ -1382,7 +1430,7 @@ WINDOW *w; lp -> l_buf[i] = w -> lines[getcury(w)] -> line[i].ch; #else wmove(w, getcury(w), i); - lp -> l_buf[i] = winch(w); /* 8bit ?? */ + lp -> l_buf[i] = winch(w) & A_CHARTEXT; #endif } lp -> l_buf[getmaxx(w)] = '\0'; @@ -1413,8 +1461,12 @@ WINDOW *w; } #endif /* __NCURSES_H */ for (cp = lp -> l_buf + strlen (lp -> l_buf) - 1; cp >= lp -> l_buf; cp--) +#ifndef JAPAN if (isspace (*cp)) - *cp = 0; +#else /* JAPAN */ + if (isspace ((unsigned char)(*cp))) +#endif /* JAPAN */ + *cp = '\0'; else break; @@ -1539,7 +1591,7 @@ static int TTYinit (nprog) { /* */ -static TTYon () { +static void TTYon (void) { if (tty_ready == DONE) return; @@ -1573,13 +1625,15 @@ static TTYon () { /* */ -static TTYoff () { +static void TTYoff (void) { if (tty_ready == NOTOK) return; INTR = intrc; #ifndef SYS5 +#ifndef __NetBSD__ (void) ioctl (fileno (stdin), TIOCSETC, (char *) &tc); +#endif #else /* SYS5 */ #if defined(TCGETATTR) && !defined(TCSETA) && defined(TCSANOW) (void) tcsetattr (fileno (stdin), TCSANOW, &sg); @@ -1591,6 +1645,9 @@ static TTYoff () { leaveok (curscr, TRUE); mvcur (0, COLS - 1, LINES - 1, 0); endwin (); +#ifdef __NetBSD__ + (void) ioctl (fileno (stdin), TIOCSETC, (char *) &tc); +#endif if (tty_ready == DONE) { #ifndef TERMINFO if (CE)