Deleted Added
full compact
decode.c (367516) decode.c (369759)
1/*
1/*
2 * Copyright (C) 1984-2020 Mark Nudelman
2 * Copyright (C) 1984-2021 Mark Nudelman
3 *
4 * You may distribute under the terms of either the GNU General Public
5 * License or the Less License, as specified in the README file.
6 *
7 * For more information, see the README file.
8 */
9
10
11/*
12 * Routines to decode user commands.
13 *
14 * This is all table driven.
15 * A command table is a sequence of command descriptors.
16 * Each command descriptor is a sequence of bytes with the following format:
3 *
4 * You may distribute under the terms of either the GNU General Public
5 * License or the Less License, as specified in the README file.
6 *
7 * For more information, see the README file.
8 */
9
10
11/*
12 * Routines to decode user commands.
13 *
14 * This is all table driven.
15 * A command table is a sequence of command descriptors.
16 * Each command descriptor is a sequence of bytes with the following format:
17 * <c1><c2>...<cN><0><action>
17 * <c1><c2>...<cN><0><action>
18 * The characters c1,c2,...,cN are the command string; that is,
19 * the characters which the user must type.
20 * It is terminated by a null <0> byte.
21 * The byte after the null byte is the action code associated
22 * with the command string.
23 * If an action byte is OR-ed with A_EXTRA, this indicates
24 * that the option byte is followed by an extra string.
25 *

--- 17 unchanged lines hidden (view full) ---

43 SK_SPECIAL_KEY, (k), 6, 1, 1, 1
44/*
45 * Command table is ordered roughly according to expected
46 * frequency of use, so the common commands are near the beginning.
47 */
48
49static unsigned char cmdtable[] =
50{
18 * The characters c1,c2,...,cN are the command string; that is,
19 * the characters which the user must type.
20 * It is terminated by a null <0> byte.
21 * The byte after the null byte is the action code associated
22 * with the command string.
23 * If an action byte is OR-ed with A_EXTRA, this indicates
24 * that the option byte is followed by an extra string.
25 *

--- 17 unchanged lines hidden (view full) ---

43 SK_SPECIAL_KEY, (k), 6, 1, 1, 1
44/*
45 * Command table is ordered roughly according to expected
46 * frequency of use, so the common commands are near the beginning.
47 */
48
49static unsigned char cmdtable[] =
50{
51 '\r',0, A_F_LINE,
52 '\n',0, A_F_LINE,
53 'e',0, A_F_LINE,
54 'j',0, A_F_LINE,
55 SK(SK_DOWN_ARROW),0, A_F_LINE,
56 CONTROL('E'),0, A_F_LINE,
57 CONTROL('N'),0, A_F_LINE,
58 'k',0, A_B_LINE,
59 'y',0, A_B_LINE,
60 CONTROL('Y'),0, A_B_LINE,
61 SK(SK_CONTROL_K),0, A_B_LINE,
62 CONTROL('P'),0, A_B_LINE,
63 SK(SK_UP_ARROW),0, A_B_LINE,
64 'J',0, A_FF_LINE,
65 'K',0, A_BF_LINE,
66 'Y',0, A_BF_LINE,
67 'd',0, A_F_SCROLL,
68 CONTROL('D'),0, A_F_SCROLL,
69 'u',0, A_B_SCROLL,
70 CONTROL('U'),0, A_B_SCROLL,
71 ESC,'[','M',0, A_X11MOUSE_IN,
72 ESC,'[','<',0, A_X116MOUSE_IN,
73 ' ',0, A_F_SCREEN,
74 'f',0, A_F_SCREEN,
75 CONTROL('F'),0, A_F_SCREEN,
76 CONTROL('V'),0, A_F_SCREEN,
77 SK(SK_PAGE_DOWN),0, A_F_SCREEN,
78 'b',0, A_B_SCREEN,
79 CONTROL('B'),0, A_B_SCREEN,
80 ESC,'v',0, A_B_SCREEN,
81 SK(SK_PAGE_UP),0, A_B_SCREEN,
82 'z',0, A_F_WINDOW,
83 'w',0, A_B_WINDOW,
84 ESC,' ',0, A_FF_SCREEN,
85 'F',0, A_F_FOREVER,
86 ESC,'F',0, A_F_UNTIL_HILITE,
87 'R',0, A_FREPAINT,
88 'r',0, A_REPAINT,
89 CONTROL('R'),0, A_REPAINT,
90 CONTROL('L'),0, A_REPAINT,
91 ESC,'u',0, A_UNDO_SEARCH,
92 'g',0, A_GOLINE,
93 SK(SK_HOME),0, A_GOLINE,
94 '<',0, A_GOLINE,
95 ESC,'<',0, A_GOLINE,
96 'p',0, A_PERCENT,
97 '%',0, A_PERCENT,
98 ESC,'[',0, A_LSHIFT,
99 ESC,']',0, A_RSHIFT,
100 ESC,'(',0, A_LSHIFT,
101 ESC,')',0, A_RSHIFT,
102 ESC,'{',0, A_LLSHIFT,
103 ESC,'}',0, A_RRSHIFT,
104 SK(SK_RIGHT_ARROW),0, A_RSHIFT,
105 SK(SK_LEFT_ARROW),0, A_LSHIFT,
106 SK(SK_CTL_RIGHT_ARROW),0, A_RRSHIFT,
107 SK(SK_CTL_LEFT_ARROW),0, A_LLSHIFT,
108 '{',0, A_F_BRACKET|A_EXTRA, '{','}',0,
109 '}',0, A_B_BRACKET|A_EXTRA, '{','}',0,
110 '(',0, A_F_BRACKET|A_EXTRA, '(',')',0,
111 ')',0, A_B_BRACKET|A_EXTRA, '(',')',0,
112 '[',0, A_F_BRACKET|A_EXTRA, '[',']',0,
113 ']',0, A_B_BRACKET|A_EXTRA, '[',']',0,
114 ESC,CONTROL('F'),0, A_F_BRACKET,
115 ESC,CONTROL('B'),0, A_B_BRACKET,
116 'G',0, A_GOEND,
117 ESC,'G',0, A_GOEND_BUF,
118 ESC,'>',0, A_GOEND,
119 '>',0, A_GOEND,
120 SK(SK_END),0, A_GOEND,
121 'P',0, A_GOPOS,
51 '\r',0, A_F_LINE,
52 '\n',0, A_F_LINE,
53 'e',0, A_F_LINE,
54 'j',0, A_F_LINE,
55 SK(SK_DOWN_ARROW),0, A_F_LINE,
56 CONTROL('E'),0, A_F_LINE,
57 CONTROL('N'),0, A_F_LINE,
58 'k',0, A_B_LINE,
59 'y',0, A_B_LINE,
60 CONTROL('Y'),0, A_B_LINE,
61 SK(SK_CONTROL_K),0, A_B_LINE,
62 CONTROL('P'),0, A_B_LINE,
63 SK(SK_UP_ARROW),0, A_B_LINE,
64 'J',0, A_FF_LINE,
65 'K',0, A_BF_LINE,
66 'Y',0, A_BF_LINE,
67 'd',0, A_F_SCROLL,
68 CONTROL('D'),0, A_F_SCROLL,
69 'u',0, A_B_SCROLL,
70 CONTROL('U'),0, A_B_SCROLL,
71 ESC,'[','M',0, A_X11MOUSE_IN,
72 ESC,'[','<',0, A_X116MOUSE_IN,
73 ' ',0, A_F_SCREEN,
74 'f',0, A_F_SCREEN,
75 CONTROL('F'),0, A_F_SCREEN,
76 CONTROL('V'),0, A_F_SCREEN,
77 SK(SK_PAGE_DOWN),0, A_F_SCREEN,
78 'b',0, A_B_SCREEN,
79 CONTROL('B'),0, A_B_SCREEN,
80 ESC,'v',0, A_B_SCREEN,
81 SK(SK_PAGE_UP),0, A_B_SCREEN,
82 'z',0, A_F_WINDOW,
83 'w',0, A_B_WINDOW,
84 ESC,' ',0, A_FF_SCREEN,
85 'F',0, A_F_FOREVER,
86 ESC,'F',0, A_F_UNTIL_HILITE,
87 'R',0, A_FREPAINT,
88 'r',0, A_REPAINT,
89 CONTROL('R'),0, A_REPAINT,
90 CONTROL('L'),0, A_REPAINT,
91 ESC,'u',0, A_UNDO_SEARCH,
92 ESC,'U',0, A_CLR_SEARCH,
93 'g',0, A_GOLINE,
94 SK(SK_HOME),0, A_GOLINE,
95 '<',0, A_GOLINE,
96 ESC,'<',0, A_GOLINE,
97 'p',0, A_PERCENT,
98 '%',0, A_PERCENT,
99 ESC,'[',0, A_LSHIFT,
100 ESC,']',0, A_RSHIFT,
101 ESC,'(',0, A_LSHIFT,
102 ESC,')',0, A_RSHIFT,
103 ESC,'{',0, A_LLSHIFT,
104 ESC,'}',0, A_RRSHIFT,
105 SK(SK_RIGHT_ARROW),0, A_RSHIFT,
106 SK(SK_LEFT_ARROW),0, A_LSHIFT,
107 SK(SK_CTL_RIGHT_ARROW),0, A_RRSHIFT,
108 SK(SK_CTL_LEFT_ARROW),0, A_LLSHIFT,
109 '{',0, A_F_BRACKET|A_EXTRA, '{','}',0,
110 '}',0, A_B_BRACKET|A_EXTRA, '{','}',0,
111 '(',0, A_F_BRACKET|A_EXTRA, '(',')',0,
112 ')',0, A_B_BRACKET|A_EXTRA, '(',')',0,
113 '[',0, A_F_BRACKET|A_EXTRA, '[',']',0,
114 ']',0, A_B_BRACKET|A_EXTRA, '[',']',0,
115 ESC,CONTROL('F'),0, A_F_BRACKET,
116 ESC,CONTROL('B'),0, A_B_BRACKET,
117 'G',0, A_GOEND,
118 ESC,'G',0, A_GOEND_BUF,
119 ESC,'>',0, A_GOEND,
120 '>',0, A_GOEND,
121 SK(SK_END),0, A_GOEND,
122 'P',0, A_GOPOS,
122
123
123 '0',0, A_DIGIT,
124 '1',0, A_DIGIT,
125 '2',0, A_DIGIT,
126 '3',0, A_DIGIT,
127 '4',0, A_DIGIT,
128 '5',0, A_DIGIT,
129 '6',0, A_DIGIT,
130 '7',0, A_DIGIT,
131 '8',0, A_DIGIT,
132 '9',0, A_DIGIT,
133 '.',0, A_DIGIT,
124 '0',0, A_DIGIT,
125 '1',0, A_DIGIT,
126 '2',0, A_DIGIT,
127 '3',0, A_DIGIT,
128 '4',0, A_DIGIT,
129 '5',0, A_DIGIT,
130 '6',0, A_DIGIT,
131 '7',0, A_DIGIT,
132 '8',0, A_DIGIT,
133 '9',0, A_DIGIT,
134 '.',0, A_DIGIT,
134
135
135 '=',0, A_STAT,
136 CONTROL('G'),0, A_STAT,
137 ':','f',0, A_STAT,
138 '/',0, A_F_SEARCH,
139 '?',0, A_B_SEARCH,
140 ESC,'/',0, A_F_SEARCH|A_EXTRA, '*',0,
141 ESC,'?',0, A_B_SEARCH|A_EXTRA, '*',0,
142 'n',0, A_AGAIN_SEARCH,
143 ESC,'n',0, A_T_AGAIN_SEARCH,
144 'N',0, A_REVERSE_SEARCH,
145 ESC,'N',0, A_T_REVERSE_SEARCH,
146 '&',0, A_FILTER,
147 'm',0, A_SETMARK,
148 'M',0, A_SETMARKBOT,
149 ESC,'m',0, A_CLRMARK,
150 '\'',0, A_GOMARK,
151 CONTROL('X'),CONTROL('X'),0, A_GOMARK,
152 'E',0, A_EXAMINE,
153 ':','e',0, A_EXAMINE,
154 CONTROL('X'),CONTROL('V'),0, A_EXAMINE,
155 ':','n',0, A_NEXT_FILE,
156 ':','p',0, A_PREV_FILE,
157 't',0, A_NEXT_TAG,
158 'T',0, A_PREV_TAG,
159 ':','x',0, A_INDEX_FILE,
160 ':','d',0, A_REMOVE_FILE,
161 '-',0, A_OPT_TOGGLE,
162 ':','t',0, A_OPT_TOGGLE|A_EXTRA, 't',0,
163 's',0, A_OPT_TOGGLE|A_EXTRA, 'o',0,
164 '_',0, A_DISP_OPTION,
165 '|',0, A_PIPE,
166 'v',0, A_VISUAL,
167 '!',0, A_SHELL,
168 '+',0, A_FIRSTCMD,
136 '=',0, A_STAT,
137 CONTROL('G'),0, A_STAT,
138 ':','f',0, A_STAT,
139 '/',0, A_F_SEARCH,
140 '?',0, A_B_SEARCH,
141 ESC,'/',0, A_F_SEARCH|A_EXTRA, '*',0,
142 ESC,'?',0, A_B_SEARCH|A_EXTRA, '*',0,
143 'n',0, A_AGAIN_SEARCH,
144 ESC,'n',0, A_T_AGAIN_SEARCH,
145 'N',0, A_REVERSE_SEARCH,
146 ESC,'N',0, A_T_REVERSE_SEARCH,
147 '&',0, A_FILTER,
148 'm',0, A_SETMARK,
149 'M',0, A_SETMARKBOT,
150 ESC,'m',0, A_CLRMARK,
151 '\'',0, A_GOMARK,
152 CONTROL('X'),CONTROL('X'),0, A_GOMARK,
153 'E',0, A_EXAMINE,
154 ':','e',0, A_EXAMINE,
155 CONTROL('X'),CONTROL('V'),0, A_EXAMINE,
156 ':','n',0, A_NEXT_FILE,
157 ':','p',0, A_PREV_FILE,
158 't',0, A_NEXT_TAG,
159 'T',0, A_PREV_TAG,
160 ':','x',0, A_INDEX_FILE,
161 ':','d',0, A_REMOVE_FILE,
162 '-',0, A_OPT_TOGGLE,
163 ':','t',0, A_OPT_TOGGLE|A_EXTRA, 't',0,
164 's',0, A_OPT_TOGGLE|A_EXTRA, 'o',0,
165 '_',0, A_DISP_OPTION,
166 '|',0, A_PIPE,
167 'v',0, A_VISUAL,
168 '!',0, A_SHELL,
169 '+',0, A_FIRSTCMD,
169
170
170 'H',0, A_HELP,
171 'h',0, A_HELP,
172 SK(SK_F1),0, A_HELP,
173 'V',0, A_VERSION,
174 'q',0, A_QUIT,
175 'Q',0, A_QUIT,
176 ':','q',0, A_QUIT,
177 ':','Q',0, A_QUIT,
178 'Z','Z',0, A_QUIT
171 'H',0, A_HELP,
172 'h',0, A_HELP,
173 SK(SK_F1),0, A_HELP,
174 'V',0, A_VERSION,
175 'q',0, A_QUIT,
176 'Q',0, A_QUIT,
177 ':','q',0, A_QUIT,
178 ':','Q',0, A_QUIT,
179 'Z','Z',0, A_QUIT
179};
180
181static unsigned char edittable[] =
182{
180};
181
182static unsigned char edittable[] =
183{
183 '\t',0, EC_F_COMPLETE, /* TAB */
184 '\17',0, EC_B_COMPLETE, /* BACKTAB */
185 SK(SK_BACKTAB),0, EC_B_COMPLETE, /* BACKTAB */
186 ESC,'\t',0, EC_B_COMPLETE, /* ESC TAB */
187 CONTROL('L'),0, EC_EXPAND, /* CTRL-L */
188 CONTROL('V'),0, EC_LITERAL, /* BACKSLASH */
189 CONTROL('A'),0, EC_LITERAL, /* BACKSLASH */
190 ESC,'l',0, EC_RIGHT, /* ESC l */
191 SK(SK_RIGHT_ARROW),0, EC_RIGHT, /* RIGHTARROW */
192 ESC,'h',0, EC_LEFT, /* ESC h */
193 SK(SK_LEFT_ARROW),0, EC_LEFT, /* LEFTARROW */
194 ESC,'b',0, EC_W_LEFT, /* ESC b */
195 ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
196 SK(SK_CTL_LEFT_ARROW),0, EC_W_LEFT, /* CTRL-LEFTARROW */
197 ESC,'w',0, EC_W_RIGHT, /* ESC w */
198 ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
199 SK(SK_CTL_RIGHT_ARROW),0, EC_W_RIGHT, /* CTRL-RIGHTARROW */
200 ESC,'i',0, EC_INSERT, /* ESC i */
201 SK(SK_INSERT),0, EC_INSERT, /* INSERT */
202 ESC,'x',0, EC_DELETE, /* ESC x */
203 SK(SK_DELETE),0, EC_DELETE, /* DELETE */
204 ESC,'X',0, EC_W_DELETE, /* ESC X */
205 ESC,SK(SK_DELETE),0, EC_W_DELETE, /* ESC DELETE */
206 SK(SK_CTL_DELETE),0, EC_W_DELETE, /* CTRL-DELETE */
207 SK(SK_CTL_BACKSPACE),0, EC_W_BACKSPACE, /* CTRL-BACKSPACE */
208 ESC,'\b',0, EC_W_BACKSPACE, /* ESC BACKSPACE */
209 ESC,'0',0, EC_HOME, /* ESC 0 */
210 SK(SK_HOME),0, EC_HOME, /* HOME */
211 ESC,'$',0, EC_END, /* ESC $ */
212 SK(SK_END),0, EC_END, /* END */
213 ESC,'k',0, EC_UP, /* ESC k */
214 SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
215 ESC,'j',0, EC_DOWN, /* ESC j */
216 SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
217 CONTROL('G'),0, EC_ABORT, /* CTRL-G */
184 '\t',0, EC_F_COMPLETE, /* TAB */
185 '\17',0, EC_B_COMPLETE, /* BACKTAB */
186 SK(SK_BACKTAB),0, EC_B_COMPLETE, /* BACKTAB */
187 ESC,'\t',0, EC_B_COMPLETE, /* ESC TAB */
188 CONTROL('L'),0, EC_EXPAND, /* CTRL-L */
189 CONTROL('V'),0, EC_LITERAL, /* BACKSLASH */
190 CONTROL('A'),0, EC_LITERAL, /* BACKSLASH */
191 ESC,'l',0, EC_RIGHT, /* ESC l */
192 SK(SK_RIGHT_ARROW),0, EC_RIGHT, /* RIGHTARROW */
193 ESC,'h',0, EC_LEFT, /* ESC h */
194 SK(SK_LEFT_ARROW),0, EC_LEFT, /* LEFTARROW */
195 ESC,'b',0, EC_W_LEFT, /* ESC b */
196 ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
197 SK(SK_CTL_LEFT_ARROW),0, EC_W_LEFT, /* CTRL-LEFTARROW */
198 ESC,'w',0, EC_W_RIGHT, /* ESC w */
199 ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
200 SK(SK_CTL_RIGHT_ARROW),0, EC_W_RIGHT, /* CTRL-RIGHTARROW */
201 ESC,'i',0, EC_INSERT, /* ESC i */
202 SK(SK_INSERT),0, EC_INSERT, /* INSERT */
203 ESC,'x',0, EC_DELETE, /* ESC x */
204 SK(SK_DELETE),0, EC_DELETE, /* DELETE */
205 ESC,'X',0, EC_W_DELETE, /* ESC X */
206 ESC,SK(SK_DELETE),0, EC_W_DELETE, /* ESC DELETE */
207 SK(SK_CTL_DELETE),0, EC_W_DELETE, /* CTRL-DELETE */
208 SK(SK_CTL_BACKSPACE),0, EC_W_BACKSPACE, /* CTRL-BACKSPACE */
209 ESC,'\b',0, EC_W_BACKSPACE, /* ESC BACKSPACE */
210 ESC,'0',0, EC_HOME, /* ESC 0 */
211 SK(SK_HOME),0, EC_HOME, /* HOME */
212 ESC,'$',0, EC_END, /* ESC $ */
213 SK(SK_END),0, EC_END, /* END */
214 ESC,'k',0, EC_UP, /* ESC k */
215 SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
216 ESC,'j',0, EC_DOWN, /* ESC j */
217 SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
218 CONTROL('G'),0, EC_ABORT, /* CTRL-G */
219 ESC,'[','M',0, EC_X11MOUSE, /* X11 mouse report */
220 ESC,'[','<',0, EC_X116MOUSE, /* X11 1006 mouse report */
218};
219
220/*
221 * Structure to support a list of command tables.
222 */
223struct tablelist
224{
225 struct tablelist *t_next;

--- 256 unchanged lines hidden (view full) ---

482 }
483}
484
485/*
486 * Read suffix of mouse input and return the action to take.
487 * The prefix ("\e[M") has already been read.
488 */
489 static int
221};
222
223/*
224 * Structure to support a list of command tables.
225 */
226struct tablelist
227{
228 struct tablelist *t_next;

--- 256 unchanged lines hidden (view full) ---

485 }
486}
487
488/*
489 * Read suffix of mouse input and return the action to take.
490 * The prefix ("\e[M") has already been read.
491 */
492 static int
490x11mouse_action(VOID_PARAM)
493x11mouse_action(skip)
494 int skip;
491{
492 int b = getcc() - X11MOUSE_OFFSET;
493 int x = getcc() - X11MOUSE_OFFSET-1;
494 int y = getcc() - X11MOUSE_OFFSET-1;
495{
496 int b = getcc() - X11MOUSE_OFFSET;
497 int x = getcc() - X11MOUSE_OFFSET-1;
498 int y = getcc() - X11MOUSE_OFFSET-1;
499 if (skip)
500 return (A_NOACTION);
495 switch (b) {
496 default:
497 return (A_NOACTION);
498 case X11MOUSE_WHEEL_DOWN:
499 return mouse_wheel_down();
500 case X11MOUSE_WHEEL_UP:
501 return mouse_wheel_up();
502 case X11MOUSE_BUTTON_REL:
503 return mouse_button_rel(x, y);
504 }
505}
506
507/*
508 * Read suffix of mouse input and return the action to take.
509 * The prefix ("\e[<") has already been read.
510 */
511 static int
501 switch (b) {
502 default:
503 return (A_NOACTION);
504 case X11MOUSE_WHEEL_DOWN:
505 return mouse_wheel_down();
506 case X11MOUSE_WHEEL_UP:
507 return mouse_wheel_up();
508 case X11MOUSE_BUTTON_REL:
509 return mouse_button_rel(x, y);
510 }
511}
512
513/*
514 * Read suffix of mouse input and return the action to take.
515 * The prefix ("\e[<") has already been read.
516 */
517 static int
512x116mouse_action(VOID_PARAM)
518x116mouse_action(skip)
519 int skip;
513{
514 char ch;
515 int x, y;
516 int b = getcc_int(&ch);
517 if (b < 0 || ch != ';') return (A_NOACTION);
518 x = getcc_int(&ch) - 1;
519 if (x < 0 || ch != ';') return (A_NOACTION);
520 y = getcc_int(&ch) - 1;
521 if (y < 0) return (A_NOACTION);
520{
521 char ch;
522 int x, y;
523 int b = getcc_int(&ch);
524 if (b < 0 || ch != ';') return (A_NOACTION);
525 x = getcc_int(&ch) - 1;
526 if (x < 0 || ch != ';') return (A_NOACTION);
527 y = getcc_int(&ch) - 1;
528 if (y < 0) return (A_NOACTION);
529 if (skip)
530 return (A_NOACTION);
522 switch (b) {
523 case X11MOUSE_WHEEL_DOWN:
524 return mouse_wheel_down();
525 case X11MOUSE_WHEEL_UP:
526 return mouse_wheel_up();
527 default:
528 if (ch != 'm') return (A_NOACTION);
529 return mouse_button_rel(x, y);

--- 45 unchanged lines hidden (view full) ---

575 * Check for an "extra" string.
576 */
577 if (a & A_EXTRA)
578 {
579 *sp = ++p;
580 a &= ~A_EXTRA;
581 }
582 if (a == A_X11MOUSE_IN)
531 switch (b) {
532 case X11MOUSE_WHEEL_DOWN:
533 return mouse_wheel_down();
534 case X11MOUSE_WHEEL_UP:
535 return mouse_wheel_up();
536 default:
537 if (ch != 'm') return (A_NOACTION);
538 return mouse_button_rel(x, y);

--- 45 unchanged lines hidden (view full) ---

584 * Check for an "extra" string.
585 */
586 if (a & A_EXTRA)
587 {
588 *sp = ++p;
589 a &= ~A_EXTRA;
590 }
591 if (a == A_X11MOUSE_IN)
583 a = x11mouse_action();
592 a = x11mouse_action(0);
584 else if (a == A_X116MOUSE_IN)
593 else if (a == A_X116MOUSE_IN)
585 a = x116mouse_action();
594 a = x116mouse_action(0);
586 return (a);
587 }
588 } else if (*q == '\0')
589 {
590 /*
591 * Hit the end of the user's command,
592 * but not the end of the string in the command table.
593 * The user's command is incomplete.

--- 325 unchanged lines hidden (view full) ---

919 */
920 if (c == erase_char || c == erase2_char)
921 return (EC_BACKSPACE);
922 if (c == kill_char)
923 {
924#if MSDOS_COMPILER==WIN32C
925 if (!win32_kbhit())
926#endif
595 return (a);
596 }
597 } else if (*q == '\0')
598 {
599 /*
600 * Hit the end of the user's command,
601 * but not the end of the string in the command table.
602 * The user's command is incomplete.

--- 325 unchanged lines hidden (view full) ---

928 */
929 if (c == erase_char || c == erase2_char)
930 return (EC_BACKSPACE);
931 if (c == kill_char)
932 {
933#if MSDOS_COMPILER==WIN32C
934 if (!win32_kbhit())
935#endif
927
928 return (EC_LINEKILL);
929 }
930
931 /*
932 * Collect characters in a buffer.
933 * Start with the one we have, and get more if we need them.
934 */
935 nch = 0;
936 do {
936 return (EC_LINEKILL);
937 }
938
939 /*
940 * Collect characters in a buffer.
941 * Start with the one we have, and get more if we need them.
942 */
943 nch = 0;
944 do {
937 if (nch > 0)
945 if (nch > 0)
938 c = getcc();
939 usercmd[nch] = c;
940 usercmd[nch+1] = '\0';
941 nch++;
942 action = ecmd_decode(usercmd, &s);
946 c = getcc();
947 usercmd[nch] = c;
948 usercmd[nch+1] = '\0';
949 nch++;
950 action = ecmd_decode(usercmd, &s);
943 } while (action == A_PREFIX);
944
945 if (flags & EC_NORIGHTLEFT)
951 } while (action == A_PREFIX && nch < MAX_CMDLEN);
952
953 if (action == EC_X11MOUSE)
954 return (x11mouse_action(1));
955 if (action == EC_X116MOUSE)
956 return (x116mouse_action(1));
957
958 if (flags & ECF_NORIGHTLEFT)
946 {
947 switch (action)
948 {
949 case EC_RIGHT:
950 case EC_LEFT:
951 action = A_INVALID;
952 break;
953 }
954 }
955#if CMD_HISTORY
959 {
960 switch (action)
961 {
962 case EC_RIGHT:
963 case EC_LEFT:
964 action = A_INVALID;
965 break;
966 }
967 }
968#if CMD_HISTORY
956 if (flags & EC_NOHISTORY)
969 if (flags & ECF_NOHISTORY)
957 {
958 /*
959 * The caller says there is no history list.
960 * Reject any history-manipulation action.
961 */
962 switch (action)
963 {
964 case EC_UP:
965 case EC_DOWN:
966 action = A_INVALID;
967 break;
968 }
969 }
970#endif
971#if TAB_COMPLETE_FILENAME
970 {
971 /*
972 * The caller says there is no history list.
973 * Reject any history-manipulation action.
974 */
975 switch (action)
976 {
977 case EC_UP:
978 case EC_DOWN:
979 action = A_INVALID;
980 break;
981 }
982 }
983#endif
984#if TAB_COMPLETE_FILENAME
972 if (flags & EC_NOCOMPLETE)
985 if (flags & ECF_NOCOMPLETE)
973 {
974 /*
975 * The caller says we don't want any filename completion cmds.
976 * Reject them.
977 */
978 switch (action)
979 {
980 case EC_F_COMPLETE:
981 case EC_B_COMPLETE:
982 case EC_EXPAND:
983 action = A_INVALID;
984 break;
985 }
986 }
987#endif
986 {
987 /*
988 * The caller says we don't want any filename completion cmds.
989 * Reject them.
990 */
991 switch (action)
992 {
993 case EC_F_COMPLETE:
994 case EC_B_COMPLETE:
995 case EC_EXPAND:
996 action = A_INVALID;
997 break;
998 }
999 }
1000#endif
988 if ((flags & EC_PEEK) || action == A_INVALID)
1001 if ((flags & ECF_PEEK) || action == A_INVALID)
989 {
990 /*
991 * We're just peeking, or we didn't understand the command.
992 * Unget all the characters we read in the loop above.
993 * This does NOT include the original character that was
994 * passed in as a parameter.
995 */
996 while (nch > 1)
997 {
998 ungetcc(usercmd[--nch]);
999 }
1000 } else
1001 {
1002 if (s != NULL)
1003 ungetsc(s);
1004 }
1005 return action;
1006}
1007
1002 {
1003 /*
1004 * We're just peeking, or we didn't understand the command.
1005 * Unget all the characters we read in the loop above.
1006 * This does NOT include the original character that was
1007 * passed in as a parameter.
1008 */
1009 while (nch > 1)
1010 {
1011 ungetcc(usercmd[--nch]);
1012 }
1013 } else
1014 {
1015 if (s != NULL)
1016 ungetsc(s);
1017 }
1018 return action;
1019}
1020