$NetBSD: patch-ak,v 1.1 1998/10/25 17:10:57 christos Exp $
*** old/folders.c	Sun Oct 25 11:59:14 1998
--- folders.c	Sun Oct 25 11:58:30 1998
***************
*** 148,153 ****
--- 148,154 ----
  	msg[msg_cnt].m_size = 0;
  	msg[msg_cnt].m_offset = 0;
  	msg[msg_cnt].m_lines = 0;
+ 	msg[msg_cnt].m_headers = 0;
      }
      msg_cnt = 0, msg[0].m_offset = 0L;
      turnoff(glob_flags, CONT_PRNT);
*** old/hdrs.c	Sun Oct 25 11:59:10 1998
--- hdrs.c	Sun Oct 25 11:58:30 1998
***************
*** 548,554 ****
--- 548,557 ----
  		when '%': p2 = "%";
  		when 't': p2 = to;
  		when 's': p2 = subject;
+ 		when 'h': p2 = sprintf(lines, "%d", msg[cnt].m_headers);
  		when 'l': p2 = sprintf(lines, "%d", msg[cnt].m_lines);
+ 		when 'b': p2 = sprintf(lines, "%d", msg[cnt].m_lines - 
+ 				       msg[cnt].m_headers);
  		when 'c': p2 = sprintf(lines, "%ld", msg[cnt].m_size);
  		when 'i': (p2 = read_header_field(cnt, "message-id")) || (p2 = "");
  		/* date formatting chars */
*** old/msgs.c	Sun Oct 25 11:59:14 1998
--- msgs.c	Sun Oct 25 11:58:29 1998
***************
*** 797,803 ****
  int append;
  {
      char	buf[BUFSIZ];
!     int		lines = 0, msg_found = 0, had_error = 1;
      int		get_status = 1, cnt;
      long	bytes;
      struct msg  old;
--- 797,803 ----
  int append;
  {
      char	buf[BUFSIZ];
!     int		headers = 0, lines = 0, msg_found = 0, had_error = 1;
      int		get_status = 1, cnt;
      long	bytes;
      struct msg  old;
***************
*** 943,948 ****
--- 943,949 ----
  		if (cnt && lines) {
  		    msg[cnt-1].m_size = bytes - msg[cnt-1].m_offset;
  		    msg[cnt-1].m_lines = lines;
+ 		    msg[cnt-1].m_headers = headers;
  		}
  		if (isoff(glob_flags, READ_ONLY) && fputs(buf, tmpf) == -1) {
  		    error(tempfile);
***************
*** 953,960 ****
--- 954,963 ----
  		msg[cnt].m_flags = 0L;
  #ifdef MSG_SEPARATOR
  		lines = 0;
+ 		headers = 0;
  #else /* MSG_SEPARATOR */
  		lines = 1; /* count the From_ line */
+ 		headers = 1;
  		if (warn)
  		    turnon(glob_flags, WARNING);
  		strdup(msg[cnt].m_date_recv, date);
***************
*** 1021,1026 ****
--- 1024,1030 ----
  			break;
  		    }
  		    lines++;
+ 		    headers++;
  		}
  		if (!msg[cnt].m_date_sent || !*msg[cnt].m_date_sent)
  		    if (!msg[cnt].m_date_recv || !*msg[cnt].m_date_recv) {
***************
*** 1042,1047 ****
--- 1046,1052 ----
  	} else if (!msg_found && buf[0] != '\n') {
  	    /* Allow leading blank lines, but anything else is wrong */
  	    lines++;
+ 	    headers++;
  	    had_error++;
  	    break;
  	}
***************
*** 1092,1097 ****
--- 1097,1103 ----
  	else
  	    msg[cnt].m_size = ftell(fp) - msg[cnt].m_offset;
  	msg[cnt].m_lines = lines;
+ 	msg[cnt].m_headers = headers;
  	/* remember where we were to seek to for when we append new mail */ 
  	if (append)
  	    cnt++;
*** old/mush.1	Sun Oct 25 11:59:15 1998
--- mush.1	Sun Oct 25 12:04:10 1998
***************
*** 4206,4214 ****
  .nf
  .ta 0.5i
  %a	address of the author
  %c	number of characters (bytes) in the message
  %f	entire \*QFrom:\*U field (author)
! %l	number of lines in the message
  %i	the message-id (may not be present)
  %n	name of the author
  %s	subject of the message
--- 4206,4216 ----
  .nf
  .ta 0.5i
  %a	address of the author
+ %b	number of lines in the body of the message
  %c	number of characters (bytes) in the message
  %f	entire \*QFrom:\*U field (author)
! %h	number of header lines in the message
! %l	number of total lines in the message
  %i	the message-id (may not be present)
  %n	name of the author
  %s	subject of the message
*** old/mush.h	Sun Oct 25 11:59:14 1998
--- mush.h	Sun Oct 25 11:58:29 1998
***************
*** 578,583 ****
--- 578,584 ----
      long   m_offset;	/* offset in tempfile of msg */
      long   m_size;	/* number of bytes in msg */
      int    m_lines;	/* number of lines in msg */
+     int    m_headers;	/* number of header lines in msg */
      char   *m_date_recv;/* Date user received msg (see dates.c for fmt) */
      char   *m_date_sent;/* Date author sent msg (see dates.c for fmt) */
      char   *m_to;	/* Cached To: field */
*** old/pick.c	Sun Oct 25 11:59:14 1998
--- pick.c	Sun Oct 25 11:58:28 1998
***************
*** 297,307 ****
  
  
  static int
! cmplines(m1, m2)
      struct msg **m1;
      struct msg **m2;
  {
!     int z =  (int) (*m2)->m_lines - (int) (*m1)->m_lines;
      if (z > 0)
  	return 1;
      else if (z < 0)
--- 297,308 ----
  
  
  static int
! cmpreallines(m1, m2)
      struct msg **m1;
      struct msg **m2;
  {
!     int z =  (int) (((*m2)->m_lines - (*m2)->m_headers) -
! 		    ((*m1)->m_lines - (*m1)->m_headers));
      if (z > 0)
  	return 1;
      else if (z < 0)
***************
*** 340,356 ****
  	}
  
      cnt = i;
!     qsort((char *) mlist, cnt, sizeof(struct msg *), cmplines);
  
      clear_msg_list(ret_list);
  
      lcur = -1;
  
      for (i = 0; i < cnt - 1; i++) {
! 	lcur = mlist[i]->m_lines;
  	mcur = mlist[i]->m_spare;
  
! 	if (mlist[i + 1]->m_lines != lcur)
  	    /* Next message has not the same number of lines, skip */
  	    continue;
  
--- 341,357 ----
  	}
  
      cnt = i;
!     qsort((char *) mlist, cnt, sizeof(struct msg *), cmpreallines);
  
      clear_msg_list(ret_list);
  
      lcur = -1;
  
      for (i = 0; i < cnt - 1; i++) {
! 	lcur = mlist[i]->m_lines - mlist[i]->m_headers;
  	mcur = mlist[i]->m_spare;
  
! 	if (mlist[i + 1]->m_lines - mlist[i + 1]->m_headers != lcur)
  	    /* Next message has not the same number of lines, skip */
  	    continue;
  
***************
*** 374,380 ****
  	}
  	omsize = mlist[i]->m_size - (omsg - otext);
  	for (j = i + 1; j < cnt; j++) {
! 	    if (mlist[j]->m_lines != lcur)
  		/* Next message has not the same number of lines, skip */
  		break;
  	    mid = mlist[j]->m_spare;
--- 375,381 ----
  	}
  	omsize = mlist[i]->m_size - (omsg - otext);
  	for (j = i + 1; j < cnt; j++) {
! 	    if (mlist[j]->m_lines - mlist[j]->m_headers != lcur)
  		/* Next message has not the same number of lines, skip */
  		break;
  	    mid = mlist[j]->m_spare;