/* Print From: and Subject: fields of messages in a standard Unix mailbox. */ #include #include #include #include #include #define buflen 10000 #define fieldlen 39 void trim (char *s) { if (s != NULL) { size_t l = strlen (s); while (l > 0) { l--; if (isspace (s[l])) s[l] = '\0'; else return; } } } int main (int argc, char **argv) { char buf[buflen], from[fieldlen+1], subj[fieldlen+1]; FILE *fp; switch (argc) { case 1: fp = stdin; break; case 2: fp = fopen (argv[1], "r"); if (!fp) { perror (argv[1]); exit (-1); } break; default: fprintf (stderr, "$Id: skim_std_mailbox.c 257 2006-06-01 14:39:47Z flaterco $\n"); fprintf (stderr, "Usage: skim [filename]\n"); exit (-1); } from[fieldlen] = subj[fieldlen] = '\0'; while (1) { from[0] = subj[0] = '\0'; while (1) { if (fgets (buf, buflen, fp) == NULL) { printf ("%39s %-39s\n", from, subj); exit(0); } trim (buf); if (buf[0] == '\0') break; if (!strncasecmp (buf, "From: ", 6)) strncpy (from, buf+6, fieldlen); else if (!strncasecmp (buf, "Subject: ", 9)) strncpy (subj, buf+9, fieldlen); } printf ("%39s %-39s\n", from, subj); do { if (fgets (buf, buflen, fp) == NULL) exit (0); } while (strncmp (buf, "From ", 5)); } }