Annotation of 43BSD/contrib/notes/src/index.c, revision 1.1.1.1

1.1       root        1: #include       "parms.h"
                      2: #include       "structs.h"
                      3: 
                      4: #ifdef RCSIDENT
                      5: static char rcsid[] = "$Header: index.c,v 1.7.0.2 85/09/09 18:32:22 notes Rel $";
                      6: #endif RCSIDENT
                      7: 
                      8: /*
                      9:  * INPUT KEY PROCESSING FOR INDEX PHASE 
                     10:  *
                     11:  *     Process all keystrokes while the index page is on the screen.
                     12:  *     invokes director options also (if user qualified)
                     13:  *     Returns: >=0 read note with that number ( 0 is policy)
                     14:  *              -1     reprint the index page
                     15:  *              -2     leave notefiles, update sequencer time
                     16:  *              -3     leave notefile, dont update sequencer
                     17:  *              -4     Universal leave notefiles
                     18:  *                     (-2 and -3 leave single notefile, -4 leaves
                     19:  *                     entire package, aborting rest of notefiles.
                     20:  *
                     21:  *     Original Coding:        Rob Kolstad     Winter 1980
                     22:  *     modifications:          Ray Essick      December 1981
                     23:  */
                     24: 
                     25: indx (io, firstdis, lastdis, respnum)
                     26: struct io_f *io;
                     27: int    *firstdis,
                     28:        *lastdis,
                     29:        *respnum;
                     30: {
                     31:     struct io_f io2;                                   /* for nested notefiles */
                     32:     char    nfname[WDLEN + 1];                         /* for nested nfs */
                     33:     int     num;                                       /* note number */
                     34:     int     i;
                     35:     int     c;
                     36:     int     znote,
                     37:             zresp;                                     /* for asearch */
                     38: 
                     39:     *respnum = 0;                                      /* init response */
                     40:     while (1)
                     41:     {
                     42:        at (-1, 1);
                     43: #ifdef PROMPT
                     44:        printf (PROMPT);                                /* issue a prompt */
                     45: #endif
                     46:        c = gchar ();
                     47:        printf ("\10 \10");                             /* erase the key */
                     48:        switch (c)                                      /* what to do? */
                     49:        {
                     50:            case '?': 
                     51:            case 'h': 
                     52:                help (INDXHLP);                         /* put the help on screen */
                     53:                return (-1);                            /* back and display the index */
                     54: 
                     55:            case 'r':                                   /* replot the index page */
                     56:            case '\f':                                  /* everyone else uses ^L, might as well */
                     57:                return (-1);
                     58: 
                     59:            case 'W':                                   /* this too shall write a note */
                     60:            case 'w':                                   /* write a note */
                     61:                return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
                     62:                                                        /* do it */
                     63: 
                     64:            case 'B':                                   /* bitch, bitch, bitch */
                     65:                if (init (&io2, GRIPES) < 0)            /* no gripe file */
                     66:                {
                     67:                    at (0, 1);
                     68:                    printf ("Gripe file not available");
                     69:                }
                     70:                else
                     71:                {
                     72:                    addnote (&io2, NULL, "Edit Gripe text:", "Gripe Header: ", NULL, EDIT);
                     73:                                                        /* let him put the note in */
                     74:                    finish (&io2);                      /* close up the gripe file */
                     75:                }
                     76:                return (-1);                            /* replot */
                     77: 
                     78:            case '-':                                   /* back up a little */
                     79:            case '\b':                                  /* add backspace also */
                     80:                *firstdis -= Nindex - 1;
                     81:                return (-1);
                     82: 
                     83:            case '=':                                   /* back up a lot */
                     84:                *firstdis = 1;
                     85:                return (-1);
                     86: 
                     87:            case '+': 
                     88:            case '\r': 
                     89:            case '\n': 
                     90:            case ' ': 
                     91:                if (*lastdis < io -> descr.d_nnote)
                     92:                {
                     93:                    *firstdis = *lastdis;
                     94:                    return (-1);
                     95:                }
                     96:                break;                                  /* keep doing what we were */
                     97: 
                     98:            case '*':                                   /* skip to last page */
                     99:                if (*lastdis < io -> descr.d_nnote)
                    100:                {
                    101:                    *firstdis = io -> descr.d_nnote - Nindex + 1;
                    102:                    return (-1);
                    103:                }
                    104:                break;                                  /* already at end */
                    105: 
                    106:            case 'q': 
                    107: #ifdef K_KEY
                    108:            case 'k':                                   /* can use right hand */
                    109: #endif K_KEY
                    110:                return QUITSEQ;
                    111: 
                    112:            case '\04':                                 /* ^D */
                    113:                return QUITFAST;                        /* total exit */
                    114: 
                    115:            case 'z':                                   /* ^D w/sequencer update */
                    116:                return QUITUPD;                         /* total exit w/update */
                    117: 
                    118:            case 'Q':                                   /* exit without update of sequencer */
                    119: #ifdef K_KEY
                    120:            case 'K':                                   /* so can use just right hand */
                    121: #endif K_KEY
                    122:                return QUITNOSEQ;
                    123: 
                    124:            case 'N':                                   /* go to an archive */
                    125:                sprintf (nfname, "%s/%s", ARCHDIR, io -> nf);/* build dest */
                    126:                goto donest;                            /* share common code */
                    127: 
                    128: 
                    129: 
                    130:            case 'n':                                   /* nest notesfiles - a stack */
                    131:                at (-1, 10);
                    132:                printf ("New notesfile: ");
                    133:                printf ("               \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
                    134:                if (gline (nfname, WDLEN) == 1)
                    135:                    return (-1);                        /* forget it, replot */
                    136:        donest:                                         /* used by N */
                    137:                closenf (io);                           /* save fids */
                    138:                if ((i = control (nfname, NOSEQ)) == -1)/* do the other */
                    139:                    sleep (1);                          /* some error there */
                    140:                if (opennf (io, 0) < 0)
                    141:                {
                    142:                    at (0, 1);
                    143:                    printf ("Couldn't reopen notesfile %s", io -> fullname);
                    144:                    fflush (stdout);
                    145:                    sleep (2);
                    146:                    return QUITNOSEQ;                   /* don't update */
                    147:                }
                    148:                if (i == QUITFAST)                      /* he in a hurry? */
                    149:                    return QUITFAST;                    /* oblige him */
                    150:                return (-1);                            /* redisplay index */
                    151: 
                    152:            case 'p':                                   /* to read note 0 */
                    153:                if (io -> descr.d_plcy)
                    154:                    return 0;
                    155:                else
                    156:                {
                    157:                    at (0, PROMPTMSGX);
                    158:                    printf ("There is no policy note");
                    159:                    continue;                           /* grab another key */
                    160:                }
                    161: 
                    162: 
                    163: 
                    164:            case 'd':                                   /* to director options */
                    165:                if (allow (io, DRCTOK))
                    166:                    return direct (io);                 /* perform those babies */
                    167:                else
                    168:                {
                    169:                    at (0, PROMPTMSGX);
                    170:                    printf (" Anonymous: %s   Networked: %s",
                    171:                            (io -> descr.d_stat & ANONOK) ? "YES" : "NO",
                    172:                            (io -> descr.d_stat & NETWRKD) ? "YES" : "NO");
                    173:                    continue;
                    174:                }
                    175: 
                    176:            case 'x': 
                    177:            case 'X': 
                    178:                i = tsearch (io, *lastdis, c == 'x');   /* assume lies before here */
                    179:                if (i > 0)
                    180:                    return i;                           /* return that one */
                    181:                continue;                               /* otherwise get another key */
                    182: 
                    183:            case 'a': 
                    184:            case 'A':                                   /* author search from current spot */
                    185:                znote = *lastdis;
                    186:                zresp = 0;                              /* start at the correct place */
                    187:                i = asearch (io, &znote, &zresp, (c == 'a'));
                    188:                                                        /* look */
                    189:                if (i > 0)
                    190:                {
                    191:                    *respnum = zresp;                   /* return correct value */
                    192:                    return znote;                       /* and such */
                    193:                }
                    194:                continue;                               /* get another command */
                    195: 
                    196:            case '1': 
                    197:            case '2': 
                    198:            case '3': 
                    199:            case '4': 
                    200:            case '5': 
                    201:            case '6': 
                    202:            case '7': 
                    203:            case '8': 
                    204:            case '9': 
                    205:                at (-1, 1);
                    206:                printf ("Read note > ");
                    207:                if ((num = getnum (c)) == 0)
                    208:                {
                    209:                    at (-1, 3);
                    210:                    printf ("                      ");
                    211:                    continue;
                    212:                }
                    213: 
                    214:                return num;
                    215: 
                    216:            case 'j': 
                    217:            case 'J':                                   /* goto first unread article */
                    218:                return (nxtnote (io, 0, &io -> stime));
                    219: 
                    220:            case 'l':                                   /* leave if no new */
                    221:            case 'L': 
                    222:                if ((i = nxtnote (io, 0, &io -> stime)) < 0)
                    223:                    return QUITSEQ;                     /* nope, leave */
                    224:                else
                    225:                    return (i);                         /* go there */
                    226: 
                    227:            case 'o':                                   /* modify sequencer time */
                    228:                gdate (&io -> stime);                   /* let him hack on the time */
                    229:                continue;                               /* and go back */
                    230: 
                    231:            case 'O':                                   /* set it for today's notes */
                    232:                gettime (&io -> stime);                 /* grab current date */
                    233:                io -> stime.w_hours = 0;                /* beginning of day */
                    234:                io -> stime.w_mins = 0;
                    235:                io -> stime.w_gmttime = 0;              /* use formatted */
                    236:                at (0, PROMPTMSGX);                     /* tell him what we did */
                    237:                printf ("Set to read notes since: ");
                    238:                prdate (&io -> stime);
                    239:                continue;                               /* and get the next command */
                    240: 
                    241: 
                    242:            case '!': 
                    243:                gshell ();                              /* give him a shell in right directory */
                    244:                return (-1);
                    245: 
                    246:            default: 
                    247:                at (0, 5);
                    248:                printf ("\07     type ? for help, q to quit     ");
                    249:                continue;
                    250:        }
                    251: 
                    252: 
                    253: /* end main index page code */
                    254:     }
                    255: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.