--- nnrpd/Makefile.orig	Sun May  7 00:00:42 1995
+++ nnrpd/Makefile	Thu May 25 22:51:02 1995
@@ -7,7 +7,7 @@
 ##  =()<CC	= @<CC>@>()=
 CC	= cc
 ##  =()<DEFS	= @<DEFS>@>()=
-DEFS	= -I../include -DSUNOS5
+DEFS	= -I../include -I/usr/local/include -DSUNOS5
 ##  =()<CFLAGS	= @<CFLAGS>@>()=
 CFLAGS	= -O -Xa $(DEFS)
 ##  =()<LDFLAGS	= @<LDFLAGS>@>()=
@@ -27,15 +27,15 @@
 OWNER	= -O news -G news
 
 ##  =()<LIBS	= @<LIBS>@>()=
-LIBS	= -lnsl -lsocket -lelf
+LIBS	= -lnsl -lsocket -lelf -L/usr/local/lib -ltrans
 LIBNEWS	= ../libinn.a
 LINTLIB	= ../llib-linn.ln
 
 SOURCES	= \
-	article.c group.c commands.c misc.c newnews.c nnrpd.c post.c loadave.c
+	article.c group.c commands.c misc.c newnews.c nnrpd.c post.c loadave.c qpdecode.c
 
 OBJECTS	= \
-	article.o group.o commands.o misc.o newnews.o nnrpd.o post.o loadave.o
+	article.o group.o commands.o misc.o newnews.o nnrpd.o post.o loadave.o qpdecode.o
 
 ALL	= nnrpd
 
--- nnrpd/article.c.orig	Fri Mar 19 00:04:41 1993
+++ nnrpd/article.c	Tue May 23 01:46:45 1995
@@ -3,7 +3,9 @@
 **  Article-related routines.
 */
 #include "nnrpd.h"
-
+#ifdef DO_AUTO_XLATE
+#include <libtrans.h>
+#endif
 
 /*
 **  Data structures for use in ARTICLE/HEAD/BODY/STAT common code.
@@ -218,7 +220,11 @@
     register QIOSTATE	*qp;
     SENDTYPE		what;
 {
+#ifdef DO_AUTO_XLATE
+    register char	*p, *q;
+#else
     register char	*p;
+#endif
 
     ARTcount++;
     GRParticles++;
@@ -235,6 +241,9 @@
 	    break;
 	if (what == STbody)
 	    continue;
+#ifdef DO_AUTO_XLATE
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	Printf("%s%s\r\n", *p == '.' ? "." : "", p);
     }
 
@@ -252,6 +261,9 @@
 		continue;
 	    break;
 	}
+#ifdef DO_AUTO_XLATE
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	Printf("%s%s\r\n", *p == '.' ? "." : "", p);
     }
     Printf(".\r\n");
@@ -909,7 +921,11 @@
 {
     register QIOSTATE	*qp;
     register ARTNUM	i;
+#ifdef DO_AUTO_XLATE
+    register char	*p, *q;
+#else
     register char	*p;
+#endif
     int			Overview;
     BOOL		IsLines;
     ARTRANGE		range;
@@ -931,6 +947,9 @@
 	Reply("%d %ld %s header of article %s.\r\n",
 	   NNTP_HEAD_FOLLOWS_VAL, art, av[1], av[2]);
 	p = GetHeader(qp, av[1], IsLines);
+#ifdef DO_AUTO_XLATE
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	Printf("%s %s\r\n", av[2], p ? p : "(none)");
 	QIOclose(qp);
 	Printf(".\r\n");
@@ -957,6 +976,9 @@
 	/* Get it from the overview? */
 	if (Overview && (p = OVERfind(i)) != NULL) {
 	    p = OVERGetHeader(p, Overview);
+#ifdef DO_AUTO_XLATE
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	    Printf("%d %s\r\n", i, p && *p ? p : "(none)");
 	    continue;
 	}
@@ -965,6 +987,9 @@
 	if ((qp = QIOopen(buff, QIO_BUFFER)) == NULL)
 	    continue;
 	p = GetHeader(qp, av[1], IsLines);
+#ifdef DO_AUTO_XLATE
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	Printf("%d %s\r\n", i, p ? p : "(none)");
 	QIOclose(qp);
     }
@@ -980,7 +1005,11 @@
     int			ac;
     char		*av[];
 {
+#ifdef DO_AUTO_XLATE
+    register char	*p, *q;
+#else
     register char	*p;
+#endif
     register ARTNUM	i;
     register BOOL	Opened;
     ARTRANGE		range;
@@ -1007,13 +1036,20 @@
 	    continue;
 
 	if (Opened && (p = OVERfind(i)) != NULL) {
+#ifdef DO_AUTO_XLATE
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	    Printf("%s\r\n", p);
 	    continue;
 	}
 
 	(void)sprintf(buff, "%ld", i);
-	if ((p = OVERgen(buff)) != NULL)
+	if ((p = OVERgen(buff)) != NULL) {
+#ifdef DO_AUTO_XLATE
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	    Printf("%s\r\n", p);
+	}
     }
     Printf(".\r\n");
 }
@@ -1028,7 +1064,11 @@
     int			ac;
     char		*av[];
 {
+#ifdef DO_AUTO_XLATE
+    register char	*p, *q;
+#else
     register char	*p;
+#endif
     register QIOSTATE	*qp;
     register ARTNUM	i;
     ARTRANGE		range;
@@ -1057,9 +1097,16 @@
 
 	Printf("%d %s matches follow.\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
 	pattern = Glom(&av[3]);
+#ifdef DO_AUTO_XLATE
+	for (q = pattern; *q ; q++) *q=TR_IN(*q);
+#endif
 	if ((text = GetHeader(qp, header, FALSE)) != NULL
-	 && wildmat(text, pattern))
+	 && wildmat(text, pattern)) {
+#ifdef DO_AUTO_XLATE
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	    Printf("%s %s\r\n", p, text);
+	}
 
 	QIOclose(qp);
 	Printf(".\r\n");
@@ -1080,7 +1127,11 @@
 	}
 
     Printf("%d %s matches follow.\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
-    for (pattern = Glom(&av[3]), i = range.Low; i < range.High; i++) {
+    pattern = Glom(&av[3]);
+#ifdef DO_AUTO_XLATE
+    for (q = pattern; *q ; q++) *q=TR_IN(*q);
+#endif
+    for (i = range.Low; i < range.High; i++) {
 	if (ARTfind(i) < 0)
 	    continue;
 
@@ -1088,8 +1139,12 @@
 	if (Overview
 	 && (p = OVERfind(i)) != NULL
 	 && (p = OVERGetHeader(p, Overview)) != NULL) {
-	    if (wildmat(p, pattern))
+	    if (wildmat(p, pattern)) {
+#ifdef DO_AUTO_XLATE
+		for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 		Printf("%ld %s\r\n", i, p);
+	    }
 	    continue;
 	}
 
@@ -1098,8 +1153,12 @@
 	    continue;
 	if ((p = GetHeader(qp, av[1], FALSE)) == NULL)
 	    p = "(none)";
-	if (wildmat(p, pattern))
+	if (wildmat(p, pattern)) {
+#ifdef DO_AUTO_XLATE
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
+#endif
 	    Printf("%ld %s\r\n", i, p);
+	}
 	QIOclose(qp);
     }
 
--- nnrpd/commands.c.orig	Fri Mar 19 00:04:42 1993
+++ nnrpd/commands.c	Fri May 26 02:21:24 1995
@@ -4,7 +4,13 @@
 */
 #include "nnrpd.h"
 #include <time.h>
-
+#ifdef DO_AUTO_XLATE
+#include <libtrans.h>
+#endif
+
+#ifdef DO_QP_DECODE
+extern void qp_decode(char *);
+#endif
 
 typedef struct _LISTINFO {
     STRING	File;
@@ -409,6 +415,14 @@
 	POSTrejected++;
 	return;
     }
+
+#ifdef DO_QP_DECODE
+    qp_decode(article);
+#endif
+
+#ifdef DO_AUTO_XLATE
+    for (p=article;*p;p++) *p=TR_IN(*p);
+#endif
 
     /* Send the article to the server. */
     response = ARTpost(article, idbuff);
--- nnrpd/nnrpd.c.orig	Fri Mar 19 00:04:44 1993
+++ nnrpd/nnrpd.c	Wed May 31 03:28:30 1995
@@ -12,6 +12,9 @@
 #if	defined(HPUX)
 #include <sys/pstat.h>
 #endif	/* defined(HPUX) */
+#ifdef DO_AUTO_XLATE
+#include <libtrans.h>
+#endif
 
 
 #define CMDany		-1
@@ -542,6 +545,13 @@
 	exit(1);
     }
     STATstart = TIMEINFOasDOUBLE(Now);
+
+#ifdef DO_AUTO_XLATE
+    if (settrtab(NULL)) {
+	syslog(L_FATAL, "cant set translation table");
+	ExitWithStats(1);
+    }
+#endif
 
     if ((MyHostName = GetConfigValue(_CONF_PATHHOST)) == NULL) {
 	syslog(L_FATAL, "cant getconfigvalue %m");
