home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * FROM.C
- *
- * FROM [user]
- *
- * $Header: Beta:src/uucp/src/MUtil/RCS/from.c,v 1.3 90/04/03 20:44:31 dillon Exp Locker: dillon $
- *
- * Displays From: and Subject fields, attempts to find personal name
- * in From: field. If user not specified searches UULIB:Config
- * for UserName.
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <config.h>
- #include "version.h"
-
- Local void FromUser(char *);
- Local char *ExtractPersonalName(char *);
-
- static char *version20 = "$VER: from 1.02 (5 Aug 90)\n\r";
-
- void
- main(ac, av)
- char *av[];
- {
- char haduser = 0;
- short i;
-
- for (i = 1; i < ac; ++i) {
- if (av[i][0] != '-') {
- haduser = 1;
- FromUser(av[i]);
- }
- }
- if (haduser == 0) {
- char *user;
- if (user = FindConfig(USERNAME))
- FromUser(user);
- else
- printf("%s, no 'UserName' entry!\n", MakeConfigPath(UULIB, "Config"));
- }
- }
-
- void
- FromUser(user)
- char *user;
- {
- static char Buf[256];
- static char FromLine[256];
- static char SubjLine[256];
- char *file = malloc(strlen(user) + 32);
- char *fromstr;
- FILE *fi;
- long msgno = 0;
-
- strcpy(file, MakeConfigPath(UUMAIL, user));
- if (fi = fopen(file, "r")) {
- while (fgets(Buf, 256, fi)) {
-
- /*
- * Start of message
- */
-
- if (strncmp(Buf, "From ", 5) != 0)
- continue;
-
- ++msgno;
-
- /*
- * Scan headers for From: and Subject:
- * Headers end with a blank line.
- */
-
- FromLine[0] = 0;
- SubjLine[0] = '\n';
- SubjLine[1] = 0;
-
- while (fgets(Buf, 256, fi) && Buf[0] != '\n') {
- if (strncmp(Buf, "From:", 5) == 0)
- strcpy(FromLine, Buf + 5);
- if (strncmp(Buf, "Subject:", 8) == 0)
- strcpy(SubjLine, Buf + 8);
- }
-
- fromstr = ExtractPersonalName(FromLine);
- printf("%-3d %-20.20s %s", msgno, fromstr, SubjLine);
- }
- }
- }
-
- /*
- * Search for (name) or name <addr> or <addr> name
- */
-
- char *
- ExtractPersonalName(str)
- char *str;
- {
- char *p1, *p2;
- char sp = 1;
-
- for (p1 = str; *p1; ++p1) {
- if (*p1 == '<') {
- if (sp == 0) { /* name before <addr> */
- p2 = p1 - 1;
- p1 = str;
- break;
- }
- /* name after <addr> */
- while (*p1 && *p1 != '>')
- ++p1;
- if (*p1 == '>')
- ++p1;
- p2 = str + strlen(str) - 1;
- break;
- }
- if (*p1 == '(') {
- ++p1;
- for (p2 = p1; *p2 && *p2 != ')'; ++p2);
- if (*p2 == ')')
- --p2;
- break;
- }
- if (*p1 != ' ' && *p1 != 9)
- sp = 0;
- }
- if (*p1 == 0) { /* could find a personal name! */
- p1 = str;
- p2 = str + strlen(str) - 1;
- }
- while (p2 >= p1 && (*p2 == '\n' || *p2 == ' ' || *p2 == 9))
- --p2;
- ++p2;
- if (p2 < p1)
- p2 = p1;
- *p2 = 0;
- return(p1);
- }
-
-