|
|
1.1 root 1: #include "parms.h"
2: #include "structs.h"
3:
4: #ifdef FASTSEQ
5: #include <sys/types.h>
6: #include <sys/stat.h>
7: #endif FASTSEQ
8:
9: #ifdef RCSIDENT
10: static char rcsid[] = "$Header: control.c,v 1.7 85/01/18 15:07:18 notes Rel $";
11: #endif RCSIDENT
12:
13: /*
14: * Code in this module ( control.c) is designed to process
15: * a single notefile. Its paramters include the name of
16: * the notefile to process and whether to use the sequencer.
17: *
18: * Original author: Rob Kolstad Winter, 1980.
19: * Modifications: Ray Essick December, 1981.
20: *
21: */
22:
23:
24: control (nfname, seqon)
25: char *nfname;
26: {
27: struct io_f io;
28: struct note_f note;
29: struct when_f entered; /* entry time */
30:
31: int firstdis,
32: lastdis; /* display counters */
33: int readnum; /* start reading */
34: int respnum; /* response to be on */
35: /* currently 0 always */
36:
37: if (nfname == NULL || nfname[0] == '\0') /* a name? */
38: return (-1); /* silly boy */
39:
40: if (intflag) /* did he hit DEL? */
41: return (QUITFAST); /* prejudiced quit */
42:
43: #ifdef FASTSEQ
44: if (seqon != NOSEQ && seqon != EXTSEQ) /* if sequencing */
45: {
46: struct when_f whenvec;
47: char NoteFile[WDLEN];
48: struct stat StatBuf;
49:
50: if (nfname[0] == '/') /* absolute pathname */
51: {
52: getlast (&io.stime, rindex (nfname, '/') + 1, seqon, Seqname);
53: sprintf (NoteFile, "%s/%s", nfname, TEXT);
54: }
55: else /* relative to Mstdir */
56: {
57: getlast (&io.stime, nfname, seqon, Seqname);
58: sprintf (NoteFile, "%s/%s/%s", Mstdir, nfname, TEXT);
59: }
60: if (stat (NoteFile, &StatBuf) >= 0)
61: {
62: maketime (&whenvec, (long) StatBuf.st_mtime);
63: if (inorder (&whenvec, &io.stime))
64: {
65: putchar ('\r'); /* from Brian Redman */
66: ceol (); /* ... harpo!ber */
67: printf ("%s...", nfname);
68: fflush (stdout);
69: return (0);
70: }
71: }
72: }
73: #endif FASTSEQ
74:
75: gettime (&entered); /* get the entry time */
76: if (init (&io, nfname) < 0)
77: {
78: fflush (stdout); /* get it out */
79: sleep (1); /* let him read it */
80: return (-1);
81: }
82: if (allow (&io, READOK) == 0)
83: {
84: if (seqon == NOSEQ) /* skip if sequencing */
85: {
86: printf ("You aren't allowed to read %s\n", io.fullname);
87: if (io.descr.d_plcy)
88: {
89: if (askyn ("Do you wish to see the policy note (y/n)? ") == 'y')
90: {
91: getnrec (&io, 0, ¬e); /* show the policy */
92: dspnote (&io, ¬e, 0);
93: }
94: }
95: else
96: {
97: printf ("There is no policy note");
98: }
99: if (allow (&io, WRITOK))
100: {
101: printf ("\nYou may leave a note in the notefile\n");
102: if (askyn ("Do you wish to leave a note (y/n) ?") == 'y')
103: {
104: if (addnote (&io, NULL, "Edit Note Text:", "Note title: ", NULL, EDIT) != -1)
105: printf ("Your note has been registered\n");
106: }
107: }
108: else
109: {
110: printf ("\nHit any key to continue");
111: gchar (); /* grab and drop it */
112: sleep (2); /* let him read it */
113: }
114: }
115: finish (&io);
116: return (-1);
117: }
118:
119: if ((io.descr.d_stat & OPEN) == 0)
120: {
121: printf ("Notefile %s is closed\n", nfname);
122: fflush (stdout);
123: sleep (1);
124: }
125:
126: if (io.descr.d_stat & OPEN || allow (&io, DRCTOK))
127: {
128: getlast (&io.stime, io.nf, seqon, Seqname); /* last time here */
129: firstdis = io.descr.d_nnote - Nindex + 1;
130: respnum = 0; /* go to base note */
131:
132: if (inorder (&io.descr.d_lastm, &io.stime) &&
133: (seqon != EXTSEQ)) /* always enter mode */
134: /* if sequencer is off, stime is jan 1 1970, so will enter notefile */
135: {
136: putchar ('\r'); /* from Brian Redman */
137: ceol (); /* ... harpo!ber */
138: printf ("%s...", nfname);
139: fflush (stdout); /* force it out */
140: #ifdef FASTSEQ
141: /*
142: * Update his timestamp here so that he will fall through the
143: * fast processing loop next time. Thanks to Rob Kolstad for
144: * thinking this through.
145: */
146: fixlast (&entered, io.nf, seqon, Seqname);
147: #endif FASTSEQ
148: closenf (&io); /* close nicely */
149: return 0; /* "normal" quit */
150: }
151: else /* enter the notesfile */
152: {
153: if (seqon != INDXSEQ && seqon != NOSEQ) /* if to note */
154: {
155: if ((readnum = nxtnote (&io, 0, &io.stime)) > 0)
156: goto seqenter;
157: } /* else to index */
158: while (1)
159: {
160: prntind (&io, &firstdis, &lastdis);
161: if ((readnum = indx (&io, &firstdis, &lastdis, &respnum)) == -1)
162: continue;
163: if (readnum < -1)
164: break;
165:
166: seqenter: /* entry point if sequencer on */
167: readnum = readem (&io, readnum, &firstdis, respnum);
168: if (readnum < -1)
169: break;
170: }
171: if (readnum == QUITSEQ || readnum == QUITUPD)/* fix his timestamp */
172: fixlast (&entered, io.nf, seqon, Seqname);
173: intflag = 0; /* clean for next */
174: }
175:
176: }
177: finish (&io);
178:
179: return readnum; /* supplied value */
180: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.