pkgsrc/mail/ja-mh/patches/patch-al
2013-03-28 21:31:25 +00:00

203 lines
4.8 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$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)