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: }