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