This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / usr.bin / more / option.c
CommitLineData
2ec5f51d
NW
1/*
2 * Copyright (c) 1988 Mark Nudleman
3 * Copyright (c) 1988 Regents of the University of California.
4 * 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
36static char sccsid[] = "@(#)option.c 5.11 (Berkeley) 6/1/90";
37#endif /* not lint */
38
39#include <stdio.h>
40#include <less.h>
41
42int top_scroll; /* Repaint screen from top */
43int bs_mode; /* How to process backspaces */
44int caseless; /* Do "caseless" searches */
45int cbufs = 10; /* Current number of buffers */
46int linenums = 1; /* Use line numbers */
47int quit_at_eof;
48int squeeze; /* Squeeze multiple blank lines into one */
49int tabstop = 8; /* Tab settings */
50int tagoption;
51
52char *firstsearch;
53extern int sc_height;
54
55option(argc, argv)
56 int argc;
57 char **argv;
58{
59 extern char *optarg;
60 extern int optind;
61 static int sc_window_set = 0;
62 int ch;
63 char *p;
64
65 /* backward compatible processing for "+/search" */
66 char **a;
67 for (a = argv; *a; ++a)
68 if ((*a)[0] == '+' && (*a)[1] == '/')
69 (*a)[0] = '-';
70
71 optind = 1; /* called twice, re-init getopt. */
72 while ((ch = getopt(argc, argv, "0123456789/:ceinst:ux:f")) != EOF)
73 switch((char)ch) {
74 case '0': case '1': case '2': case '3': case '4':
75 case '5': case '6': case '7': case '8': case '9':
76 /*
77 * kludge: more was originally designed to take
78 * a number after a dash.
79 */
80 if (!sc_window_set) {
81 p = argv[optind - 1];
82 if (p[0] == '-' && p[1] == ch && !p[2])
83 sc_height = atoi(++p);
84 else
85 sc_height = atoi(argv[optind] + 1);
86 sc_window_set = 1;
87 }
88 break;
89 case '/':
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 fprintf(stderr,
124 "usage: more [-ceinus] [-t tag] [-x tabs] [-/ pattern] [-#] [file ...]\n");
125 exit(1);
126 }
127 return(optind);
128}