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