Annotation of 43BSD/contrib/notes/src/index.c, revision 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.