BSD 4_2 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Sat, 25 Jun 1983 04:39:07 +0000 (20:39 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Sat, 25 Jun 1983 04:39:07 +0000 (20:39 -0800)
Work on file usr/src/new/new/notes/src/index.c

Synthesized-from: CSRG/cd1/4.2

usr/src/new/new/notes/src/index.c [new file with mode: 0644]

diff --git a/usr/src/new/new/notes/src/index.c b/usr/src/new/new/notes/src/index.c
new file mode 100644 (file)
index 0000000..c0ca7c0
--- /dev/null
@@ -0,0 +1,315 @@
+static char *sccsid = "%W%";
+
+/*
+ * INPUT KEY PROCESSING FOR INDEX PHASE 
+ *
+ *     Process all keystrokes while the index page is on the screen.
+ *     invokes director options also (if user qualified)
+ *     Returns: >=0 read note with that number ( 0 is policy)
+ *              -1     reprint the index page
+ *              -2     leave notefiles, update sequencer time
+ *              -3     leave notefile, dont update sequencer
+ *              -4     Universal leave notefiles
+ *                     (-2 and -3 leave single notefile, -4 leaves
+ *                     entire package, aborting rest of notefiles.
+ *
+ *     Original Coding:        Rob Kolstad     Winter 1980
+ *     modifications:          Ray Essick      December 1981
+ *     modifications:          Lou Salkind     March 1983
+ */
+
+#include "parms.h"
+#include "structs.h"
+#include "newsgate.h"
+#include <signal.h>
+#include <sgtty.h>
+
+indx(io, firstdis, lastdis, respnum)
+struct io_f *io;
+int *firstdis, *lastdis, *respnum;
+{
+       struct io_f io2;                        /* for nested notefiles */
+       struct when_f whendump;
+       char nfname[NNLEN + 1];                 /* for nested nfs */
+       char cmdline[CMDLEN];
+       int num;                                /* note number */
+       int i;
+       int c;
+       int znote, zresp;                       /* for asearch */
+       int temp;
+       int retstat = -1;
+       struct notesenv oldenv;
+
+       *respnum = 0;                           /* init response */
+       ignsigs = 0;
+       replot = 1;
+       oldenv = curenv;
+
+       setjmp(jenv);
+       while (1) {
+               if (replot) {
+                       replot = 0;
+                       prntind(io, firstdis, lastdis);
+               }
+               cmdprompt();
+               c = gchar();
+               switch (c) {                            /* what to do? */
+               case 'z': /* update sequencer and exit, RLS */
+                       retstat = QUITUPD;
+                       goto out;
+
+               case 'u': /* unsubscribe from this notesgroup, RLS */
+                       if (unsubscribe(io->nf) < 0)
+                               continue;
+                       retstat = QUITSEQ;
+                       goto out;
+
+               case '?': 
+               case 'h': 
+                       help(INDXHLP);          /* put the help on screen */
+                       replot = 1;
+                       continue;
+
+               case 'r':                       /* replot the index page */
+               case '\014':    /* everyone else uses ^L, might as well */
+                       replot = 1;
+                       continue;
+
+               case 'W':               /* this too shall write a note */
+               case 'w':               /* write a note */
+                       temp = addnote(io, NULL, "Edit Note text:", "Note Title: ");
+                       if (temp == -1) {
+                               replot = 1;
+                               continue;
+                       }
+
+#ifdef NEWS
+                       /*
+                        * fix to allow the user to specify whether
+                        * the article should be local or net'ed
+                        */
+                       if ((io->descr.d_stat & NETWRKD) == 0) {  
+                               /*
+                                   prompt("(Not networked)");
+                                   fflush(stdout);
+                                   sleep(2);
+                               */
+                               retstat = temp;
+                               goto out;
+                       }
+                       prompt("Send to news? ");
+                       if (askyn() == 'y') {
+#ifdef DEMANDNEWS
+                               /* send it to the news */
+                               sprintf(cmdline, "%s/%s/newsoutput", MSTDIR, UTILITY);
+                               dounix(0, 0, cmdline, io->nf, 0, 0, 0);
+#endif DEMANDNEWS
+                       } 
+                       else {
+                               /* don't send it to the network */
+                               gettime(&whendump);
+                               fixlast(&whendump, io->nf, 1 , NEWSSYS);
+                       }
+#endif NEWS
+                       retstat = temp;
+                       goto out;
+
+               case 'B':                       /* bitch, bitch, bitch */
+                       if (init(&io2, GRIPES) < 0) {   /* no gripe file */
+                               warn("Gripe file not available");
+                               continue;
+                       }
+                       temp = addnote(&io2, NULL, "Edit Gripe text:", "Gripe Header: ");
+                       /* let him put the note in */
+                       finish(&io2);           /* close up the gripe file */
+                       if (temp == -1) {
+                               replot = 1;
+                               continue;
+                       }
+                       replot = 1;
+                       goto out;
+
+               case '-':                               /* back up a little */
+               case '\b':                              /* add backspace also */
+                       if (*firstdis != 1) {
+                               *firstdis -= nindex - 1;
+                               replot = 1;
+                       } else
+                               warn("On first page");
+                       continue;
+
+               case '=':                               /* back up a lot */
+                       if (*firstdis != 1) {
+                               *firstdis = 1;
+                               replot = 1;
+                       } else
+                               warn("On first page");
+                       continue;
+
+               case '+': 
+               case '\r': 
+               case '\n': 
+               case ' ': 
+                       if (*lastdis < io->descr.d_nnote) {
+                               *firstdis = *lastdis;
+                               replot = 1;
+                       } else
+                               warn("On last page");
+                       continue;
+
+               case '*':                       /* skip to last page */
+                       if (*lastdis < io->descr.d_nnote) {
+                               *firstdis = io->descr.d_nnote - nindex + 1;
+                               replot = 1;
+                       } else
+                               warn("Already on last page");
+                       continue;
+
+               case 'q': 
+               case 'k':                       /* so can use just right hand */
+                       retstat = QUITSEQ;
+                       goto out;
+
+               case '\04':                             /* control D */
+                       retstat = QUITFAST;
+                       goto out;
+
+               case 'Q':               /* exit without update of sequencer */
+               case 'K':               /* so can use just right hand */
+                       retstat = QUITNOSEQ;
+                       goto out;
+
+               case 'n':                       /* nest notesfiles - a stack */
+                       prompt("New notesfile: ");
+                       if (gline(nfname, NNLEN) == 1)
+                               continue;
+                       closenf(io);                            /* save fids */
+                       i = control(nfname, NOSEQ);
+                       if (opennf(io, io->nf) < 0) {
+                               warn("Couldn't reopen notesfile");
+                               wfchar();
+                               retstat = QUITNOSEQ;
+                               goto out;
+                       }
+                       if (i == QUITNEX || i == QUITBAD) {
+                               warn("Can not open notesfile `%s'", nfname);
+                               continue;
+                       }
+                       if (i == QUITFAST || i == QUITUPD) {
+                               retstat = i;
+                               goto out;
+                       }
+                       replot = 1;
+                       continue;
+
+               case 'p':                               /* to read note 0 */
+                       if (io->descr.d_plcy) {
+                               retstat = 0;
+                               goto out;
+                       } else {
+                               warn("There is no policy note");
+                               continue;               /* grab another key */
+                       }
+
+               case 'd':                       /* to director options */
+                       if (allow(io, DRCTOK)) {
+                               if ((i = direct(io)) == -1) {
+                                       replot = 1;
+                                       continue;
+                               }
+                               retstat = i;
+                               goto out;
+                       } 
+                       /*
+                        * fix the allow the user to see things
+                        * the director can see
+                        */
+                       prompt("Anonymous: %s     Networked: %s",
+                       (io->descr.d_stat & ANONOK) ? "YES" : "NO",
+                       (io->descr.d_stat & NETWRKD) ? "YES" : "NO");
+                       continue;
+
+               case 'x': 
+               case 'X': 
+                       i = tsearch(io, *lastdis, c == 'x');
+                       /* assume lies before here */
+                       if (i > 0) {
+                               retstat = i;
+                               goto out;
+                       }
+                       continue;               /* otherwise get another key */
+
+               case 'a': 
+               case 'A':               /* author search from current spot */
+                       znote = *lastdis;
+                       zresp = 0;              /* start at the correct place */
+                       i = asearch (io, &znote, &zresp, (c == 'a'));
+                       /* look */
+                       if (i > 0) {
+                               *respnum = zresp;/* return correct value */
+                               retstat = znote;
+                               goto out;
+                       }
+                       continue;               /* get another command */
+
+               case '1': 
+               case '2': 
+               case '3': 
+               case '4': 
+               case '5': 
+               case '6': 
+               case '7': 
+               case '8': 
+               case '9': 
+                       prompt("Read note > ");
+                       if ((num = getnum (c)) == 0)
+                               continue;
+                       retstat = num;
+                       goto out;
+
+               case 'j': 
+               case 'J':                       /* goto first unread article */
+               case 'l':                       /* universal seq, RLS */
+               case 'L':
+                       i = nxtnote(io, 0, &io->stime);
+                       if (i != -1) {
+                               retstat = i;
+                               goto out;
+                       }
+                       if (c == 'l' || c == 'L') {
+                               retstat = QUITSEQ;
+                               goto out;
+                       }
+                       replot = 1;
+                       continue;
+
+               case 'o':                       /* modify sequencer time */
+                       gdate(&io->stime);      /* let him hack on the time */
+                       continue;                       /* and go back */
+
+               case 'O':                       /* set it for today's notes */
+                       gettime(&io->stime);            /* grab current date */
+                       io->stime.w_hours = 0;          /* beginning of day */
+                       io->stime.w_mins = 0;
+                       prompt("Set to read notes since: ");
+                       prdate(&io->stime);
+                       continue;               /* and get the next command */
+
+
+               case '!': 
+                       gshell();
+                       /* give him a shell in right directory */
+                       replot = 1;
+                       continue;
+
+               default: 
+                       warn("? for help, q to quit");
+                       continue;
+               }
+       }
+out:
+       ignsigs++;
+       curenv = oldenv;
+       ignsigs = 0;
+       return(retstat);
+}