|
|
BSD 4.3
#include "parms.h"
#include "structs.h"
#ifdef RCSIDENT
static char rcsid[] = "$Header: /var/lib/cvsd/repos/CSRG/43BSD/contrib/notes/src/adnote.c,v 1.1.1.1 2018/04/24 16:12:54 root Exp $";
#endif RCSIDENT
/*
* addnote(io, preface, pstr, tprompt, title)
* get a note from the terminal and store it in notefile specified by
* io. If fid >=0, then prepend text of that file (as positioned) in the
* scratch file so the new writer can include it in his note.
* Returns: -1 if no write (empty note, no permissions)
* else the notes number in the notefile.
*
* Originally in index.c, but moved here so other routines could use it.
*
* modifications: Ray Essick December 1981
*/
addnote (io, preface, pstr, tpstr, title, editflag)
struct io_f *io;
FILE * preface;
char *pstr; /* edit prompt */
char *tpstr; /* title prompt */
char *title; /* title (if specified) */
int editflag; /* interactive? */
{
struct auth_f auth;
struct daddr_f where;
struct note_f note;
char ntitle[TITLEN + 1],
anon;
int stat,
retcode,
i;
getdscr (io, &io -> descr); /* get up-to-date */
if (!allow (io, WRITOK)) /* check writability */
{
at (0, PROMPTMSGX);
printf ("Sorry, you are not allowed to write");
fflush (stdout); /* force to tty */
sleep (2);
return (-1);
}
#ifndef WRITEARCH /* allowing writes */
if (io -> descr.d_stat & ISARCH && !allow (io, DRCTOK))
{
at (0, PROMPTMSGX);
printf ("Sorry, you can not write in an archive");
fflush (stdout);
sleep (2);
return (-1);
}
#endif WRITEARCH
at (0, PROMPTMSGX);
if (editflag == EDIT)
printf ("\n%s\n", pstr); /* prompt him */
if (gettext (io, &where, preface, editflag) == 0) /* and get the text */
{
return (-1);
}
stat = 0;
anon = 'n';
if ((editflag == EDIT) && (io -> descr.d_stat & ANONOK))
{ /* see if wants anon */
anon = askyn ("Do you wish this to be anonymous (y/n): ");
printf ("\r \r");
if (anon == 'y') /* verify true */
{
anon = askyn ("Do you REALLY wish this to be anonymous (y/n): ");
printf ("\r \r");
}
}
if ((anon == 'n') && (io -> access == (WRITOK + RESPOK)))
{ /* only if non-anon */
stat |= WRITONLY;
}
if (editflag && allow (io, DRCTOK)) /* director mesg */
{
if (askyn ("Director message (y/n): ") == 'y')
stat |= DIRMES;
printf ("\r \r");
}
if (title == NULL) /* if no title specified */
while (1)
{ /* force him to type a title */
at (0, PROMPTMSGX);
printf ("%s", tpstr);
i = gline (ntitle, TITLEN - 1);
if (i != 1) /* empty string */
break;
}
else /* he specified a title */
{
strncpy (ntitle, title, TITLEN);
ntitle[TITLEN] = '\0'; /* sure it's terminated */
}
strclean (ntitle); /* zap control characters */
gettime (¬e.n_date); /* get date of writing */
getname (&auth, anon == 'y'); /* get author */
locknf (io, 'n'); /* lock up for the duration */
retcode = putnote (io, &where, ntitle, stat, ¬e, &auth, NOPOLICY, NOLOCKIT, COPYID, System, 1);
unlocknf (io, 'n'); /* all done critical */
return (retcode);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.