diff --git a/print-ascii.c b/print-ascii.c
index f09aa98..3cefef3 100644
--- a/print-ascii.c
+++ b/print-ascii.c
@@ -36,14 +36,11 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#define NETDISSECT_REWORKED
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#ifndef lint
-static const char rcsid[] _U_ =
-     "@(#) $Header: /tcpdump/master/tcpdump/print-ascii.c,v 1.17 2005-07-06 20:53:32 guy Exp $";
-#endif
 #include <tcpdump-stdinc.h>
 #include <stdio.h>
 
@@ -57,11 +54,16 @@
 		(HEXDUMP_HEXSTUFF_PER_SHORT * HEXDUMP_SHORTS_PER_LINE)
 
 void
-ascii_print(register const u_char *cp, register u_int length)
+ascii_print(netdissect_options *ndo,
+            const u_char *cp, u_int length)
 {
-	register int s;
+	u_int caplength;
+	register u_char s;
 
-	putchar('\n');
+	caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0;
+	if (length > caplength)
+		length = caplength;
+	ND_PRINT((ndo, "\n"));
 	while (length > 0) {
 		s = *cp++;
 		length--;
@@ -76,27 +78,31 @@
 			 * In the middle of a line, just print a '.'.
 			 */
 			if (length > 1 && *cp != '\n')
-				putchar('.');
+				ND_PRINT((ndo, "."));
 		} else {
 			if (!ND_ISGRAPH(s) &&
 			    (s != '\t' && s != ' ' && s != '\n'))
-				putchar('.');
+				ND_PRINT((ndo, "."));
 			else
-				putchar(s);
+				ND_PRINT((ndo, "%c", s));
 		}
 	}
 }
 
 void
-hex_and_ascii_print_with_offset(register const char *ident,
+hex_and_ascii_print_with_offset(netdissect_options *ndo, register const char *ident,
     register const u_char *cp, register u_int length, register u_int oset)
 {
+	u_int caplength;
 	register u_int i;
 	register int s1, s2;
 	register int nshorts;
 	char hexstuff[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp;
 	char asciistuff[ASCII_LINELENGTH+1], *asp;
 
+	caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0;
+	if (length > caplength)
+		length = caplength;
 	nshorts = length / sizeof(u_short);
 	i = 0;
 	hsp = hexstuff; asp = asciistuff;
@@ -111,9 +117,9 @@
 		i++;
 		if (i >= HEXDUMP_SHORTS_PER_LINE) {
 			*hsp = *asp = '\0';
-			(void)printf("%s0x%04x: %-*s  %s",
+			ND_PRINT((ndo, "%s0x%04x: %-*s  %s",
 			    ident, oset, HEXDUMP_HEXSTUFF_PER_LINE,
-			    hexstuff, asciistuff);
+			    hexstuff, asciistuff));
 			i = 0; hsp = hexstuff; asp = asciistuff;
 			oset += HEXDUMP_BYTES_PER_LINE;
 		}
@@ -128,43 +134,48 @@
 	}
 	if (i > 0) {
 		*hsp = *asp = '\0';
-		(void)printf("%s0x%04x: %-*s  %s",
+		ND_PRINT((ndo, "%s0x%04x: %-*s  %s",
 		     ident, oset, HEXDUMP_HEXSTUFF_PER_LINE,
-		     hexstuff, asciistuff);
+		     hexstuff, asciistuff));
 	}
 }
 
 void
-hex_and_ascii_print(register const char *ident, register const u_char *cp,
-    register u_int length)
+hex_and_ascii_print(netdissect_options *ndo, register const char *ident,
+    register const u_char *cp, register u_int length)
 {
-	hex_and_ascii_print_with_offset(ident, cp, length, 0);
+	hex_and_ascii_print_with_offset(ndo, ident, cp, length, 0);
 }
 
 /*
  * telnet_print() wants this.  It is essentially default_print_unaligned()
  */
 void
-hex_print_with_offset(register const char *ident, register const u_char *cp, register u_int length,
-		      register u_int oset)
+hex_print_with_offset(netdissect_options *ndo,
+                      const char *ident, const u_char *cp, u_int length,
+		      u_int oset)
 {
+	u_int caplength;
 	register u_int i, s;
 	register int nshorts;
 
+	caplength = (ndo->ndo_snapend >= cp) ? ndo->ndo_snapend - cp : 0;
+	if (length > caplength)
+		length = caplength;
 	nshorts = (u_int) length / sizeof(u_short);
 	i = 0;
 	while (--nshorts >= 0) {
 		if ((i++ % 8) == 0) {
-			(void)printf("%s0x%04x: ", ident, oset);
+			ND_PRINT((ndo,"%s0x%04x: ", ident, oset));
 			oset += HEXDUMP_BYTES_PER_LINE;
 		}
 		s = *cp++;
-		(void)printf(" %02x%02x", s, *cp++);
+		ND_PRINT((ndo," %02x%02x", s, *cp++));
 	}
 	if (length & 1) {
 		if ((i % 8) == 0)
-			(void)printf("%s0x%04x: ", ident, oset);
-		(void)printf(" %02x", *cp);
+			ND_PRINT((ndo,"%s0x%04x: ", ident, oset));
+		ND_PRINT((ndo," %02x", *cp));
 	}
 }
 
@@ -172,9 +183,9 @@
  * just for completeness
  */
 void
-hex_print(register const char *ident, register const u_char *cp, register u_int length)
+hex_print(netdissect_options *ndo,const char *ident, const u_char *cp, u_int length)
 {
-	hex_print_with_offset(ident, cp, length, 0);
+  hex_print_with_offset(ndo, ident, cp, length, 0);
 }
 
 #ifdef MAIN
