*** tcpdump.c	1998/05/27 08:36:02	1.1
--- tcpdump.c	1998/05/27 09:21:57
***************
*** 364,369 ****
--- 364,416 ----
  	exit(0);
  }
  
+ /* Like default_print() but it does packet offset and ascii also */
+ 
+ void
+ default_print_ascii(register const u_char *cp, register u_int length)
+ {
+ 	u_int	offset = 0;
+ 	u_int	slice_len = 0;
+ 	u_int	i;
+ 	const	u_char	*p;
+ 	u_char	c;
+ 
+ 	/* Invariants:
+ 	**  length >= 0
+ 	**  cp points to start of data to dump
+ 	*/
+ 
+ 	while (length > 0) {
+ 		(void)printf("\n%04x\t", offset);
+ 		slice_len = (length >= 16) ? 16 : length;
+ 		p = cp;
+ 		i = 0;
+ 		while (i < slice_len) {
+ 			(void)printf("%02x ", *p++);
+ 			++i;
+ 		}
+ 
+ 		while (i++ < 16) {
+ 			(void)printf("   ");
+ 		}
+ 
+ 		(void)printf("   ");
+ 		p = cp;
+ 		i = 0;
+ 		while (i++ < slice_len) {
+ 			if (*p < 0x20 || *p > 0x7e) {
+ 				(void)printf(".");
+ 				++p;
+ 			} else {
+ 				(void)printf("%c", *p++);
+ 			}
+ 		}
+ 		cp += slice_len;
+ 		offset += slice_len;
+ 		length -= slice_len;
+ 	}
+ }
+ 
  /* Like default_print() but data need not be aligned */
  void
  default_print_unaligned(register const u_char *cp, register u_int length)
***************
*** 387,393 ****
  }
  
  void
! default_print(register const u_char *bp, register u_int length)
  {
  	register const u_short *sp;
  	register u_int i;
--- 434,440 ----
  }
  
  void
! default_print_hex(register const u_char *bp, register u_int length)
  {
  	register const u_short *sp;
  	register u_int i;
***************
*** 410,415 ****
--- 457,468 ----
  			(void)printf("\n\t\t\t");
  		(void)printf(" %02x", *(u_char *)sp);
  	}
+ }
+ 
+ void
+ default_print(register const u_char *cp, register u_int length)
+ {
+ 	default_print_ascii(cp, length);
  }
  
  __dead void
