home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume22 / nn6.4 / part21 / pack_subject.c < prev    next >
C/C++ Source or Header  |  1990-06-07  |  1KB  |  77 lines

  1. /*
  2.  *    (c) Copyright 1990, Kim Fabricius Storm.  All rights reserved.
  3.  *
  4.  *    Pack subject by eliminating RE prefixes and - (nf) suffixes.
  5.  *    Also collapse multiple blanks into single blanks.
  6.  */
  7.  
  8. #include "config.h"
  9.  
  10. pack_subject(dest, src, re_counter_ptr, max_length)
  11. register char *dest, *src;
  12. int *re_counter_ptr, max_length;
  13. {
  14.     int re;
  15.     char *start_dest;
  16.     register char *max_dest;
  17.  
  18.     re = 0;
  19.     start_dest = dest;
  20.  
  21.     if (src) {
  22.     max_dest = dest + max_length;
  23.  
  24.     while (*src) {
  25.         if (isspace(*src)) {
  26.         src++;
  27.         continue;
  28.         }
  29.  
  30.         /* count and remove 'Re: Re: ...' */
  31.  
  32.         if (*src != 'R' && *src != 'r') break;
  33.         *dest++ = *src++;
  34.  
  35.         if (*src != 'e' && *src != 'E') break;
  36.         *dest++ = *src++;
  37.  
  38.         if (*src == ':' || *src == ' ') {
  39.         src++;
  40.         dest = start_dest;
  41.         re++;
  42.         continue;
  43.         }
  44.  
  45.         if (*src != '^') break;
  46.  
  47.         src++;
  48.         dest = start_dest;
  49.  
  50.         while (isdigit(*src)) *dest++ = *src++;
  51.         if (dest == start_dest)
  52.         re++;
  53.         else {
  54.         *dest = NUL;
  55.         dest = start_dest;
  56.         re += atoi(dest);
  57.         }
  58.         if (*src == ':') src++;
  59.     }
  60.  
  61.     while (*src && dest < max_dest) {
  62.         if (*src == '-' && strncmp("- (nf)", src, 5) == 0) break;
  63.         if (isascii(*src) && isspace(*src)) {
  64.         do src++;
  65.         while (isascii(*src) && isspace(*src));
  66.         *dest++ = SP;
  67.         } else
  68.         *dest++ = *src++;
  69.     }
  70.     }
  71.  
  72.     *dest = NUL;
  73.     *re_counter_ptr = (char)re;
  74.  
  75.     return dest - start_dest;
  76. }
  77.