1: #define MAINLINE
2: #include "parms.h"
3: #include "structs.h"
4:
5: #ifdef FASTSEQ
6: #include <sys/types.h>
7: #include <sys/stat.h>
8: #endif FASTSEQ
9:
10: #ifdef RCSIDENT
11: static char rcsid[] = "$Header: checknotes.c,v 1.7.0.1 85/02/01 09:56:54 notes Rel $";
12: #endif RCSIDENT
13:
14: /*
15: * checknotes
16: *
17: * A program which prints the notesfiles modified since the
18: * user's last entry. The output is a list of the modified
19: * notesfiles.
20: *
21: * The program exits with a zero status if there ARE modified
22: * notesfiles, and non-zero if there are not. This is to
23: * correspond with the "true" and "false" programs and
24: * to permit use of the program in shell scripts.
25: *
26: * The optional "-q" parameter disables the printing of the
27: * names of the notesfiles, the exit code is the only metho
28: * of determining the existence of new notes.
29: *
30: * Original Coding: Ray Essick June 12, 1982
31: */
32:
33: #define VERBQ 0
34: #define VERBN 1
35: #define VERBV 2
36: #define VERBS 3
37:
38: int verbosity = VERBQ; /* be verbose */
39: int ncount = 0; /* number of modified notesfiles */
40: struct nflist_f *nfptr;
41:
42: checknf (nfname)
43: char *nfname;
44: {
45: struct io_f io;
46: int retcode;
47:
48:
49: #ifdef FASTSEQ
50: { /* for FAST checknotes ... */
51: struct when_f whenvec;
52: char NoteFile[WDLEN];
53: struct stat StatBuf;
54:
55: if (nfname[0] == '/') /* absolute pathname */
56: {
57: getlast (&io.stime, rindex (nfname, '/') + 1, NORMSEQ, Seqname);
58: sprintf (NoteFile, "%s/%s", nfname, TEXT);
59: }
60: else /* relative to Mstdir */
61: {
62: getlast (&io.stime, nfname, NORMSEQ, Seqname);
63: sprintf (NoteFile, "%s/%s/%s", Mstdir, nfname, TEXT);
64: }
65: if (stat (NoteFile, &StatBuf) >= 0)
66: {
67: maketime (&whenvec, (long) StatBuf.st_mtime);
68: if (inorder (&whenvec, &io.stime))
69: {
70: return (0);
71: }
72: /*
73: * not in order means that we should check the hard way
74: */
75: }
76: }
77: #endif FASTSEQ
78:
79: /*
80: * Do it the hard way -- open the notesfile and read the descriptor
81: */
82: if (opennf (&io, nfname) < 0)
83: return 0; /* ignore this one */
84: getdscr (&io, &io.descr);
85: getlast (&io.stime, io.nf, NORMSEQ, Seqname); /* last date */
86: if (inorder (&io.stime, &io.descr.d_lastm))
87: {
88: ncount++; /* bump count of touched notesfiles */
89: if (verbosity == VERBV)
90: printf ("%s\n", nfname);
91: if (verbosity == VERBQ || verbosity == VERBS)
92: retcode = QUITFAST;
93: else
94: retcode = 1;
95: }
96: else
97: retcode = 0;
98: closenf (&io); /* close the notesfile */
99: return retcode;
100: }
101:
102:
103: main (argc, argv)
104: char **argv;
105: {
106: char *p;
107: int i;
108:
109: startup (argc, argv); /* common initialization */
110:
111: if ((p = getenv ("NFSEQ")) == NULL)
112: p = DFLTSEQ; /* use default */
113:
114: expand (p); /* put it in */
115:
116: for (i = 1; i < argc; i++)
117: if (argv[i][0] == '-') /* see if options */
118: switch (argv[i][1])
119: {
120: case 'q': /* "are new notes" */
121: verbosity = VERBQ;
122: break;
123:
124: case 'n': /* spit "no new notes" */
125: verbosity = VERBN;
126: break;
127:
128: case 'v': /* tell everything */
129: verbosity = VERBV;
130: break;
131:
132: case 's': /* silent */
133: verbosity = VERBS;
134: break;
135:
136: case 'a': /* alternate sequencer */
137: if (++i == argc) /* supplied name? */
138: {
139: fprintf (stderr, "-a requires a name\n");
140: exit (BAD);
141: }
142: else
143: {
144: struct auth_f whoami;
145: getname (&whoami, 0); /* grab real name */
146: sprintf (Seqname, "%s:%s", whoami.aname, argv[i]);
147: }
148: break;
149:
150: default:
151: fprintf (stderr, "Usage: %s [-qvns] [-a seqname]\n", argv[0]);
152: exit (BAD);
153: }
154: else /* a notesfile! */
155: expand (argv[i]); /* put it in */
156:
157: while ((nfptr = nextgroup ()) != (struct nflist_f *) NULL)
158: {
159: i = checknf (nfptr -> nf_name);
160: if (i == QUITFAST)
161: break; /* don't need more */
162: }
163:
164: switch (verbosity)
165: {
166: case VERBQ: /* "there are new" */
167: if (ncount)
168: printf ("There are new notes\n");
169: break;
170:
171: case VERBN: /* there are no new */
172: if (ncount == 0)
173: printf ("There are no new notes\n");
174: break;
175:
176: case VERBV: /* told elsewhere */
177: case VERBS: /* silent */
178: default:
179: break;
180: }
181: if (ncount)
182: exit (0); /* TRUE/success for the shell */
183: else
184: exit (1); /* FALSE/failure to the shell */
185:
186: }
Defined functions
main
defined in line
103;
never used
Defined variables
nfptr
defined in line
40; used 2 times
rcsid
defined in line
11;
never used
Defined macros
VERBN
defined in line
34; used 1 times
VERBQ
defined in line
33; used 3 times
VERBS
defined in line
36; used 2 times
VERBV
defined in line
35; used 2 times