|
|
1.1 root 1: #ifdef RCSIDENT
2: static char rcsid[] = "$Header: note.c,v 1.7 85/01/18 15:32:57 notes Rel $";
3: #endif RCSIDENT
4:
5: /*
6: * Putnote
7: *
8: * Take the given text, and make put it into the note file.
9: * following algorithm:
10: * reserve space for text
11: * write the text
12: * make the note header record
13: * lock the index file
14: * write the note header info
15: * unlock the index file
16: * rewrite the correct text header info
17: *
18: *
19: * Delnote(io, noteno): marks the status word as deleted.
20: *
21: * Original authors: Rob Kolstad and Ray Essick Winter 1980
22: * modified; Ray Essick December 1981
23: */
24:
25: #include "parms.h"
26: #include "structs.h"
27:
28: putnote (io, where, title, status, note, auth, policy, lockit, addid, fromsys, addtime)
29: struct io_f *io;
30: struct daddr_f *where;
31: char *title;
32: struct note_f *note;
33: struct auth_f *auth;
34: /* policy = true if this is the policy note */
35: /* addid = fales if we already have an id for the note */
36: /* addtime = false if we already have a time for the note */
37: char *fromsys; /* whom we recieved it from (routing) */
38: {
39: int count;
40: char *p;
41: int notenum;
42:
43: note -> n_nresp = 0; /* no responses yet */
44: if (addtime) /* dont if compressing... */
45: {
46: gettime (¬e -> n_rcvd);
47: gettime (¬e -> n_lmod); /* date of last mod is same */
48: }
49: note -> n_auth = *auth; /* move author over */
50: strcpy (note -> n_from, fromsys); /* who gave it to us */
51: note -> n_rindx = (-1); /* no place for responses yet */
52: note -> n_stat = status; /* director message, deleted, etc */
53: note -> n_addr = *where; /* where on disk */
54: strncpy (note -> ntitle, title, TITLEN); /* copy */
55: note -> ntitle[TITLEN - 1] = '\0'; /* stop for sure */
56:
57: if (lockit)
58: locknf (io, DSCRLOCK); /* BEGIN CRITICAL SECTION */
59: getdscr (io, &io -> descr); /* grab notesfile header */
60: if (io -> descr.d_stat & NFINVALID)
61: {
62: if (lockit)
63: unlocknf (io, DSCRLOCK);
64: closenf (io);
65: opennf (io, 0); /* get new links */
66: printf ("Sorry, your note has been lost in a compression");
67: /*
68: * Should give the user a chance to recover his text somewhere
69: * in here
70: */
71: fflush (stdout);
72: sleep (1);
73: return (-1);
74: }
75: if (addid)
76: {
77: #ifdef SHAREDATA
78: strmove (System, note -> n_id.sys); /* copy sys name */
79: #else ! SHAREDATA
80: strmove (io -> descr.d_id.sys, note -> n_id.sys);
81: #endif SHAREDATA
82: note -> n_id.uniqid = ++(io -> descr.d_id.uniqid);
83: /* and unique id num */
84: #ifdef UNIQPLEX
85: note -> n_id.uniqid += UNIQPLEX * io -> descr.d_nfnum;
86: /* mpx in nf num */
87: #endif
88: }
89:
90: if (policy)
91: {
92: io -> descr.d_plcy = 1; /* mark as having a policy note */
93: notenum = 0;
94: }
95: else
96: notenum = ++io -> descr.d_nnote; /* this note's number */
97: if (addtime) /* see if want timestamp */
98: gettime (&io -> descr.d_lastm); /* last time file modified */
99: putnrec (io, notenum, note); /* write note info */
100: putdscr (io, &io -> descr); /* rewrite header info */
101: if (lockit)
102: unlocknf (io, DSCRLOCK); /* END CRITICAL SECTION */
103: io -> nnotwrit++; /* bump count of writes */
104: return (io -> descr.d_nnote); /* tell which slot it is in */
105: }
106:
107:
108: delnote (io, noteno, lockit)
109: struct io_f *io;
110: {
111: struct note_f note;
112:
113: if (lockit)
114: locknf (io, DSCRLOCK); /* CRITICAL */
115: getnrec (io, noteno, ¬e); /* get the note */
116: note.n_stat |= DELETED; /* deleted */
117: putnrec (io, noteno, ¬e);
118: getdscr (io, &io -> descr); /* update delete count */
119: io -> descr.d_delnote++;
120: io -> descr.d_delresp += note.n_nresp; /* count resps */
121: putdscr (io, &io -> descr);
122: if (lockit)
123: unlocknf (io, DSCRLOCK); /* END CRITICAL */
124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.