|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.