BSD 4_1c_2 release
[unix-history] / usr / src / ucb / from.c
CommitLineData
31cef89c 1static char *sccsid = "@(#)from.c 4.1 (Berkeley) 10/1/80";
124dd274
BJ
2#include <stdio.h>
3#include <ctype.h>
4#include <pwd.h>
5
6struct passwd *getpwuid();
7
8main(argc, argv)
9int argc;
10register char **argv;
11{
12 char lbuf[BUFSIZ];
13 char lbuf2[BUFSIZ];
14 register struct passwd *pp;
15 int stashed = 0;
16 register char *name;
17 char *sender;
18 char *getlogin();
19
20 if (argc > 1 && *(argv[1]) == '-' && (*++argv)[1] == 's') {
21 if (--argc <= 1) {
22 fprintf (stderr, "Usage: from [-s sender] [user]\n");
23 exit (1);
24 }
25 --argc;
26 sender = *++argv;
27 for (name = sender; *name; name++)
28 if (isupper(*name))
29 *name = tolower(*name);
30
31 }
32 else
33 sender = NULL;
34 if (chdir("/usr/spool/mail") < 0)
35 exit(1);
36 if (argc > 1)
37 name = argv[1];
38 else {
39 name = getlogin ();
40 if (name == NULL || strlen(name) == 0) {
41 pp = getpwuid(getuid());
42 if (pp == NULL) {
43 fprintf(stderr, "Who are you?\n");
44 exit(1);
45 }
46 name = pp->pw_name;
47 }
48 }
49 if (freopen(name, "r", stdin) == NULL)
50 exit(0);
51 while(fgets(lbuf, sizeof lbuf, stdin) != NULL)
52 if (lbuf[0] == '\n' && stashed) {
53 stashed = 0;
54 printf("%s", lbuf2);
55 }
56 else if (bufcmp(lbuf, "From ", 5) &&
57 (sender == NULL || match(&lbuf[4], sender))) {
58 strcpy(lbuf2, lbuf);
59 stashed = 1;
60 }
61 if (stashed)
62 printf("%s", lbuf2);
63 exit(0);
64}
65
66bufcmp (b1, b2, n)
67register char *b1, *b2;
68register int n;
69{
70 while (n-- > 0)
71 if (*b1++ != *b2++)
72 return (0);
73 return (1);
74}
75
76match (line, str)
77register char *line, *str;
78{
79 register char ch;
80
81 while (*line == ' ' || *line == '\t')
82 ++line;
83 if (*line == '\n')
84 return (0);
85 while (*str && *line != ' ' && *line != '\t' && *line != '\n') {
86 ch = isupper(*line) ? tolower(*line) : *line;
87 if (ch != *str++)
88 return (0);
89 line++;
90 }
91 return (*str == '\0');
92}