1 /* $NetBSD: option.c,v 1.5 2001/06/11 01:50:50 wiz Exp $ */ 2 3 /* 4 * Copyright (c) 1988 Mark Nudleman 5 * Copyright (c) 1988, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by the University of 19 * California, Berkeley and its contributors. 20 * 4. Neither the name of the University nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 */ 36 37 #include <sys/cdefs.h> 38 #ifndef lint 39 #if 0 40 static char sccsid[] = "@(#)option.c 8.1 (Berkeley) 6/6/93"; 41 #else 42 __RCSID("$NetBSD: option.c,v 1.5 2001/06/11 01:50:50 wiz Exp $"); 43 #endif 44 #endif /* not lint */ 45 46 #include <stdio.h> 47 #include <stdlib.h> 48 #include <unistd.h> 49 50 #include "less.h" 51 #include "extern.h" 52 53 int top_scroll; /* Repaint screen from top */ 54 int bs_mode; /* How to process backspaces */ 55 int caseless; /* Do "caseless" searches */ 56 int cbufs = 10; /* Current number of buffers */ 57 int linenums = 1; /* Use line numbers */ 58 int quit_at_eof; 59 int squeeze; /* Squeeze multiple blank lines into one */ 60 int tabstop = 8; /* Tab settings */ 61 62 char *firstsearch; 63 64 int 65 option(argc, argv) 66 int argc; 67 char **argv; 68 { 69 static int sc_window_set = 0; 70 int ch; 71 char *p; 72 73 /* backward compatible processing for "+/search" */ 74 char **a; 75 for (a = argv; *a; ++a) 76 if ((*a)[0] == '+' && (*a)[1] == '/') 77 (*a)[0] = '-'; 78 79 optind = 1; /* called twice, re-init getopt. */ 80 while ((ch = getopt(argc, argv, "0123456789/:ceinst:ux:f")) != -1) 81 switch((char)ch) { 82 case '0': case '1': case '2': case '3': case '4': 83 case '5': case '6': case '7': case '8': case '9': 84 /* 85 * kludge: more was originally designed to take 86 * a number after a dash. 87 */ 88 if (!sc_window_set) { 89 p = argv[optind - 1]; 90 if (p[0] == '-' && p[1] == ch && !p[2]) 91 sc_height = atoi(++p); 92 else 93 sc_height = atoi(argv[optind] + 1); 94 sc_window_set = 1; 95 } 96 break; 97 case '/': 98 firstsearch = optarg; 99 break; 100 case 'c': 101 top_scroll = 1; 102 break; 103 case 'e': 104 quit_at_eof = 1; 105 break; 106 case 'i': 107 caseless = 1; 108 break; 109 case 'n': 110 linenums = 0; 111 break; 112 case 's': 113 squeeze = 1; 114 break; 115 case 'u': 116 bs_mode = 1; 117 break; 118 case 'x': 119 tabstop = atoi(optarg); 120 if (tabstop <= 0) 121 tabstop = 8; 122 break; 123 case 'f': /* ignore -f, compatibility with old more */ 124 break; 125 case '?': 126 default: 127 fprintf(stderr, 128 "usage: more [-ceinus] [-x tabs] [-/ pattern] [-#] [file ...]\n"); 129 exit(1); 130 } 131 return(optind); 132 } 133