Annotation of src/usr.bin/less/opttbl.c, Revision 1.5
1.5 ! mpech 1: /* $OpenBSD: opttbl.c,v 1.4 2001/01/29 01:58:03 niklas Exp $ */
1.4 niklas 2:
1.1 etheisen 3: /*
4: * Copyright (c) 1984,1985,1989,1994,1995 Mark Nudelman
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice in the documentation and/or other materials provided with
14: * the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
17: * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
20: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
22: * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23: * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26: * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27: */
28:
29:
30: /*
31: * The option table.
32: */
33:
34: #include "less.h"
35: #include "option.h"
36:
37: /*
38: * Variables controlled by command line options.
39: */
40: public int quiet; /* Should we suppress the audible bell? */
41: public int how_search; /* Where should forward searches start? */
42: public int top_scroll; /* Repaint screen from top?
43: (alternative is scroll from bottom) */
44: public int pr_type; /* Type of prompt (short, medium, long) */
45: public int bs_mode; /* How to process backspaces */
46: public int know_dumb; /* Don't complain about dumb terminals */
47: public int quit_at_eof; /* Quit after hitting end of file twice */
1.2 etheisen 48: public int be_helpful; /* more(1) style -d */
1.1 etheisen 49: public int squeeze; /* Squeeze multiple blank lines into one */
50: public int tabstop; /* Tab settings */
51: public int back_scroll; /* Repaint screen on backwards movement */
52: public int forw_scroll; /* Repaint screen on forward movement */
53: public int twiddle; /* Display "~" for lines after EOF */
54: public int caseless; /* Do "caseless" searches */
55: public int linenums; /* Use line numbers */
56: public int cbufs; /* Current number of buffers */
57: public int autobuf; /* Automatically allocate buffers as needed */
58: public int nohelp; /* Disable the HELP command */
59: public int ctldisp; /* Send control chars to screen untranslated */
60: public int force_open; /* Open the file even if not regular file */
61: public int swindow; /* Size of scrolling window */
62: public int jump_sline; /* Screen line of "jump target" */
63: public int chopline; /* Truncate displayed lines at screen width */
64: public int no_init; /* Disable sending ti/te termcap strings */
65: #if HILITE_SEARCH
66: public int hilite_search; /* Highlight matched search patterns? */
67: #endif
68:
69: /*
70: * Table of all options and their semantics.
71: */
72: static struct option option[] =
73: {
74: { 'a', BOOL, OPT_OFF, &how_search, NULL,
75: "Search includes displayed screen",
76: "Search skips displayed screen",
77: NULL
78: },
79: { 'b', NUMBER, 10, &cbufs, opt_b,
80: "Buffers: ",
81: "%d buffers",
82: NULL
83: },
84: { 'B', BOOL, OPT_ON, &autobuf, NULL,
85: "Don't automatically allocate buffers",
86: "Automatically allocate buffers when needed",
87: NULL
88: },
89: { 'c', TRIPLE, OPT_OFF, &top_scroll, NULL,
90: "Repaint by scrolling from bottom of screen",
91: "Repaint by clearing each line",
92: "Repaint by painting from top of screen"
93: },
1.2 etheisen 94: #if 0
1.1 etheisen 95: { 'd', BOOL|NO_TOGGLE, OPT_OFF, &know_dumb, NULL,
96: "Assume intelligent terminal",
97: "Assume dumb terminal",
98: NULL
99: },
1.2 etheisen 100: #else
101: { 'd', BOOL, OPT_OFF, &be_helpful, NULL,
1.3 deraadt 102: "Be less helpful in prompts",
1.2 etheisen 103: "Be helpful in prompts",
104: NULL,
105: },
106: #endif
1.1 etheisen 107: #if MSOFTC
108: { 'D', STRING|REPAINT, 0, NULL, opt_D,
109: "color desc: ", NULL, NULL
110: },
111: #endif
112: { 'e', TRIPLE, OPT_OFF, &quit_at_eof, NULL,
113: "Don't quit at end-of-file",
114: "Quit at end-of-file",
115: "Quit immediately at end-of-file"
116: },
117: { 'f', BOOL, OPT_OFF, &force_open, NULL,
118: "Open only regular files",
119: "Open even non-regular files",
120: NULL
121: },
122: #if HILITE_SEARCH
123: { 'g', TRIPLE|HL_REPAINT, OPT_ONPLUS, &hilite_search, NULL,
124: "Don't highlight search matches",
125: "Highlight matches for previous search only",
126: "Highlight all matches for previous search pattern",
127: },
128: #endif
129: { 'h', NUMBER, -1, &back_scroll, NULL,
130: "Backwards scroll limit: ",
131: "Backwards scroll limit is %d lines",
132: NULL
133: },
134: { 'H', BOOL|NO_TOGGLE, OPT_OFF, &nohelp, NULL,
135: "Allow help command",
136: "Don't allow help command",
137: NULL
138: },
139: { 'i', TRIPLE|HL_REPAINT, OPT_OFF, &caseless, opt_i,
140: "Case is significant in searches",
141: "Ignore case in searches",
142: "Ignore case in searches and in patterns"
143: },
144: { 'j', NUMBER, 1, &jump_sline, NULL,
145: "Target line: ",
146: "Position target at screen line %d",
147: NULL
148: },
149: #if USERFILE
150: { 'k', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_k,
151: NULL, NULL, NULL
152: },
153: #endif
154: { 'l', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_l,
155: NULL, NULL, NULL
156: },
157: { 'm', TRIPLE, OPT_OFF, &pr_type, NULL,
158: "Short prompt",
159: "Medium prompt",
160: "Long prompt"
161: },
162: { 'n', TRIPLE|REPAINT, OPT_ON, &linenums, NULL,
163: "Don't use line numbers",
164: "Use line numbers",
165: "Constantly display line numbers"
166: },
167: #if LOGFILE
168: { 'o', STRING, 0, NULL, opt_o,
169: "log file: ", NULL, NULL
170: },
171: { 'O', STRING, 0, NULL, opt__O,
172: "Log file: ", NULL, NULL
173: },
174: #endif
175: { 'p', STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_p,
176: NULL, NULL, NULL
177: },
178: { 'P', STRING, 0, NULL, opt__P,
179: "prompt: ", NULL, NULL
180: },
181: { 'q', TRIPLE, OPT_OFF, &quiet, NULL,
182: "Ring the bell for errors AND at eof/bof",
183: "Ring the bell for errors but not at eof/bof",
184: "Never ring the bell"
185: },
186: { 'r', BOOL|REPAINT, OPT_ON, &ctldisp, NULL,
187: "Display control characters directly",
188: "Display control characters as ^X",
189: NULL
190: },
191: { 's', BOOL|REPAINT, OPT_OFF, &squeeze, NULL,
192: "Display all blank lines",
193: "Squeeze multiple blank lines",
194: NULL
195: },
196: { 'S', BOOL|REPAINT, OPT_OFF, &chopline, NULL,
197: "Fold long lines",
198: "Chop long lines",
199: NULL
200: },
201: #if TAGS
202: { 't', STRING|NO_QUERY, 0, NULL, opt_t,
203: "tag: ", NULL, NULL
204: },
205: { 'T', STRING, 0, NULL, opt__T,
206: "tags file: ", NULL, NULL
207: },
208: #endif
209: { 'u', TRIPLE|REPAINT, OPT_OFF, &bs_mode, NULL,
210: "Display underlined text in underline mode",
211: "Backspaces cause overstrike",
212: "Print backspace as ^H"
213: },
214: { 'V', NOVAR, 0, NULL, opt__V,
215: NULL, NULL, NULL
216: },
217: { 'w', BOOL|REPAINT, OPT_ON, &twiddle, NULL,
218: "Display nothing for lines after end-of-file",
219: "Display ~ for lines after end-of-file",
220: NULL
221: },
222: { 'x', NUMBER|REPAINT, 8, &tabstop, NULL,
223: "Tab stops: ",
224: "Tab stops every %d spaces",
225: NULL
226: },
227: { 'X', BOOL|NO_TOGGLE, OPT_OFF, &no_init, NULL,
228: "Send init/deinit strings to terminal",
229: "Don't use init/deinit strings",
230: NULL
231: },
232: { 'y', NUMBER, -1, &forw_scroll, NULL,
233: "Forward scroll limit: ",
234: "Forward scroll limit is %d lines",
235: NULL
236: },
237: { 'z', NUMBER, -1, &swindow, NULL,
238: "Scroll window size: ",
239: "Scroll window size is %d lines",
240: NULL
241: },
242: { '?', NOVAR, 0, NULL, opt_query,
243: NULL, NULL, NULL
244: },
245: { '\0' }
246: };
247:
248:
249: /*
250: * Initialize each option to its default value.
251: */
252: public void
253: init_option()
254: {
1.5 ! mpech 255: struct option *o;
1.1 etheisen 256:
257: for (o = option; o->oletter != '\0'; o++)
258: {
259: /*
260: * Set each variable to its default.
261: */
262: if (o->ovar != NULL)
263: *(o->ovar) = o->odefault;
264: }
265: }
266:
267: /*
268: * Find an option in the option table.
269: */
270: public struct option *
271: findopt(c)
272: int c;
273: {
1.5 ! mpech 274: struct option *o;
1.1 etheisen 275:
276: for (o = option; o->oletter != '\0'; o++)
277: {
278: if (o->oletter == c)
279: return (o);
280: if ((o->otype & TRIPLE) && toupper(o->oletter) == c)
281: return (o);
282: }
283: return (NULL);
284: }