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