|
|
1.1 root 1: #include "parms.h"
2: #include "structs.h"
3:
4: #ifdef RCSIDENT
5: static char rcsid[] = "$Header: next.c,v 1.7 85/01/18 15:23:59 notes Rel $";
6: #endif RCSIDENT
7:
8: /*
9: * next.c - find the next note/response after a certain time
10: *
11: * nxtnote(io, note,date)
12: * finds the next note whith number > note which has been
13: * modified after date. If none exists, a -1 is returned, otherwise
14: * the note number is returned.
15: *
16: * nxtresp(io,note,resp,date)
17: * same idea as above, except, we look through the responses
18: * after resp to note # note. If there is no response, we return
19: * a -1, else we return the response number.
20: *
21: * inorder(date1, date2) struct when_f *date1, *date2)
22: * return 1 if date1 before date2, otherwise return 0.
23: *
24: * Original coding: Ray Essick november 1981
25: */
26:
27: nxtnote (io, note, date)
28: struct io_f *io;
29: struct when_f *date;
30: {
31: struct note_f znote;
32: if (note < 0)
33: note = 0; /* start at beginning */
34:
35: note++; /* find starts with next note ! */
36: while (note <= io -> descr.d_nnote)
37: {
38: getnrec (io, note, &znote); /* get note header */
39: if (znote.n_stat & DELETED)
40: {
41: note++; /* go on to the next note */
42: continue; /* try the next note */
43: }
44: if (inorder (&znote.n_lmod, date) == 0) /* want eqauls to show */
45: return note; /* modified after date */
46: note++; /* go try the next note */
47: }
48: return (-1); /* no deal, wasn't a more recent note */
49: }
50:
51: nxtresp (io, note, resp, date)
52: struct io_f *io;
53: struct when_f *date;
54: {
55: struct note_f znote;
56: struct resp_f rrec;
57: int poffset,
58: recnum;
59:
60: getnrec (io, note, &znote);
61: if (resp < 0)
62: resp = 0; /* can't look at negative response */
63: resp++; /* start search at next response */
64: while (resp <= znote.n_nresp)
65: {
66: if (lrsp (io, note, resp, &rrec, &poffset, &recnum) == -1)
67: break; /* no response, drop out */
68: if (inorder (&rrec.r_rcvd[poffset], date) == 0)
69: return resp; /* return if date earlier or same */
70: resp++;
71: }
72: return (-1); /* no later responses to this note */
73: }
74:
75: /*
76: * see if the time specified by "d1" is before "d2".
77: * this is a STRICT test. if d1 == d2, they are not
78: * in order.
79: */
80: inorder (d1, d2)
81: struct when_f *d1,
82: *d2;
83: {
84: if (d1 -> w_gmttime && d2 -> w_gmttime) /* if both there */
85: return (d1 -> w_gmttime < d2 -> w_gmttime); /* relationship */
86: if (d1 -> w_year < d2 -> w_year)
87: return 1;
88: if (d1 -> w_year > d2 -> w_year)
89: return 0;
90:
91: if (d1 -> w_month < d2 -> w_month)
92: return 1;
93: if (d1 -> w_month > d2 -> w_month)
94: return 0;
95:
96: if (d1 -> w_day < d2 -> w_day)
97: return 1;
98: if (d1 -> w_day > d2 -> w_day)
99: return 0;
100:
101: if (d1 -> w_hours < d2 -> w_hours)
102: return 1;
103: if (d1 -> w_hours > d2 -> w_hours)
104: return 0;
105:
106: if (d1 -> w_mins < d2 -> w_mins)
107: return 1;
108: if (d1 -> w_mins > d2 -> w_mins)
109: return 0;
110:
111: return 0; /* equal dates are not in order */
112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.