1: #include "parms.h" 2: #include "structs.h" 3: 4: #ifdef RCSIDENT 5: static char rcsid[] = "$Header: adnote.c,v 1.7.0.3 85/10/06 01:40:37 notes Rel $"; 6: #endif RCSIDENT 7: 8: /* 9: * addnote(io, preface, pstr, tprompt, title) 10: * get a note from the terminal and store it in notefile specified by 11: * io. If fid >=0, then prepend text of that file (as positioned) in the 12: * scratch file so the new writer can include it in his note. 13: * Returns: -1 if no write (empty note, no permissions) 14: * else the notes number in the notefile. 15: * 16: * Originally in index.c, but moved here so other routines could use it. 17: * 18: * modifications: Ray Essick December 1981 19: */ 20: 21: addnote (io, preface, pstr, tpstr, title, editflag) 22: struct io_f *io; 23: FILE * preface; 24: char *pstr; /* edit prompt */ 25: char *tpstr; /* title prompt */ 26: char *title; /* title (if specified) */ 27: int editflag; /* interactive? */ 28: { 29: struct auth_f auth; 30: struct daddr_f where; 31: struct note_f note; 32: char ntitle[TITLEN + 1], 33: anon; 34: int stat, 35: retcode, 36: i; 37: 38: getdscr (io, &io -> descr); /* get up-to-date */ 39: if (!allow (io, WRITOK)) /* check writability */ 40: { 41: at (0, PROMPTMSGX); 42: printf ("Sorry, you are not allowed to write"); 43: fflush (stdout); /* force to tty */ 44: sleep (2); 45: return (-1); 46: } 47: 48: #ifndef WRITEARCH /* allowing writes */ 49: if (io -> descr.d_stat & ISARCH && !allow (io, DRCTOK)) 50: { 51: at (0, PROMPTMSGX); 52: printf ("Sorry, you can not write in an archive"); 53: fflush (stdout); 54: sleep (2); 55: return (-1); 56: } 57: #endif WRITEARCH 58: at (0, PROMPTMSGX); 59: if (editflag == EDIT) 60: printf ("\n%s\n", pstr); /* prompt him */ 61: if (gettext (io, &where, preface, editflag) == 0) /* and get the text */ 62: { 63: return (-1); 64: } 65: stat = 0; 66: anon = 'n'; 67: if ((editflag == EDIT) && (io -> descr.d_stat & ANONOK)) 68: { /* see if wants anon */ 69: anon = askyn ("Do you wish this to be anonymous (y/n): "); 70: printf ("\r \r"); 71: if (anon == 'y') /* verify true */ 72: { 73: anon = askyn ("Do you REALLY wish this to be anonymous (y/n): "); 74: printf ("\r \r"); 75: } 76: } 77: if ((anon == 'n') && (io -> access == (WRITOK + RESPOK))) 78: { /* only if non-anon */ 79: stat |= WRITONLY; 80: } 81: if (editflag && allow (io, DRCTOK)) /* director mesg */ 82: { 83: if (askyn ("Director message (y/n): ") == 'y') 84: stat |= DIRMES; 85: printf ("\r \r"); 86: } 87: 88: if (title == NULL) /* if no title specified */ 89: while (1) 90: { /* force him to type a title */ 91: at (0, PROMPTMSGX); 92: printf ("%s", tpstr); 93: i = gline (ntitle, TITLEN - 1); 94: if (i != 1) /* empty string */ 95: break; 96: } 97: else /* he specified a title */ 98: { 99: strncpy (ntitle, title, TITLEN); 100: ntitle[TITLEN] = '\0'; /* sure it's terminated */ 101: } 102: strclean (ntitle); /* zap control characters */ 103: gettime (¬e.n_date); /* get date of writing */ 104: getname (&auth, anon == 'y'); /* get author */ 105: locknf (io, 'n'); /* lock up for the duration */ 106: retcode = putnote (io, &where, ntitle, stat, ¬e, &auth, NOPOLICY, NOLOCKIT, COPYID, System, 1); 107: 108: unlocknf (io, 'n'); /* all done critical */ 109: return (retcode); 110: }