|
|
1.1 root 1: /* get_entry.c: get a keystroke. Increment or decrement row/column
2: * values as indicated by the keystroke. Also test for
3: * <RETURN> or 's' being pressed. This will select the
4: * current highlighted entry for processing. If an entry
5: * is selected, the entry number within the file is returned.
6: * A -1 is returned is no selection is made (user pressed 'q').
7: */
8:
9: #include "uuinstall.h"
10:
11: get_entry()
12: {
13: short retflag = 0; /* bogus, but needed for do...while loop. */
14: char arrow;
15:
16: do{
17: arrow = wgetch(selwin); /* here's our keystroke */
18:
19: /* test for console arrow key. This will be represented
20: * by a 3 char escape sequence. The first char is esc,
21: * the second we don't care about. The third tells us
22: * what arrow key was pressed. We will translate this third
23: * character into a vi keystroke of h,j,k or l.
24: */
25:
26: if (arrow == 27){ /* escape. indicates arrow */
27: wgetch(selwin); /* skip 2nd char of esc seq. */
28: arrow = wgetch(selwin); /* this is the value we want */
29:
30: switch(arrow){
31: case 68: arrow = 'h';
32: break;
33: case 67: arrow = 'l';
34: break;
35: case 66: arrow = 'j';
36: break;
37: case 65: arrow = 'k';
38: break;
39: }
40: }
41:
42: switch(arrow){
43: case 'h': /* move left */
44: newcol = prevcol - 15;
45: if(newcol < 1)
46: newcol = 61;
47: /* if the next entry position is empty, go back to
48: * first position in this row.
49: */
50: if(' ' == mvwinch(selwin,newrow,newcol))
51: newcol = 1;
52: break;
53:
54:
55: case 'l': /* move right */
56: newcol = prevcol + 15;
57: if(newcol > 61)
58: newcol = 1;
59: /* if the next entry position is empty, go back to
60: * first position in this row.
61: */
62: if(' ' == mvwinch(selwin,newrow,newcol))
63: newcol = 1;
64: break;
65:
66:
67: case 'j': /* move down */
68: newrow = prevrow +1;
69: /* wrap to first row if we try to move down too far */
70: if (newrow == 20)
71: newrow = 0;
72: /* if next position is empty, wrap */
73: if(' ' ==mvwinch(selwin,newrow,newcol))
74: newrow = 0;
75: break;
76:
77:
78: case 'k': /* move up */
79: newrow = prevrow -1;
80: /* wrap to last row if we try to move down too far */
81: if (newrow == -1)
82: newrow = 19;
83: /* if next position is empty, wrap */
84: if(' ' ==mvwinch(selwin,newrow,newcol))
85: newrow = 0;
86: break;
87:
88: case 'q':
89: return(-1);
90: /* NO REACHED */
91: case 's':
92: case '\n':
93: return( ((prevrow * 5) + (prevcol/15)) );
94: /* NOT REACHED */
95: }
96:
97: /* unhighlite previously highlighted entry (prevrow,prevcol) */
98: lite(selwin,prevrow,prevcol,0);
99: wrefresh(selwin);
100:
101: /* highlight newly indicated entry */
102: lite(selwin,newrow, newcol,1);
103: wrefresh(selwin);
104:
105: /* now set the old corrdinates to the current coordinates */
106: prevrow = newrow;
107: prevcol = newcol;
108:
109: }
110: while(!retflag);
111: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.