xref: /openbsd-src/usr.bin/less/less.h (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
1 /*	$OpenBSD: less.h,v 1.3 2001/01/29 01:58:02 niklas Exp $	*/
2 
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  * Standard include file for "less".
32  */
33 
34 /*
35  * Include the file of compile-time options.
36  * The <> make cc search for it in -I., not srcdir.
37  */
38 #include <defines.h>
39 
40 #ifdef _SEQUENT_
41 /*
42  * Kludge for Sequent Dynix systems that have sigsetmask, but
43  * it's not compatible with the way less calls it.
44  * {{ Do other systems need this? }}
45  */
46 #undef HAVE_SIGSETMASK
47 #endif
48 
49 /*
50  * Language details.
51  */
52 #if HAVE_VOID
53 #define	VOID_POINTER	void *
54 #else
55 #define	VOID_POINTER	char *
56 #define	void  int
57 #endif
58 
59 #define	public		/* PUBLIC FUNCTION */
60 
61 /* Library function declarations */
62 
63 #if HAVE_SYS_TYPES_H
64 #include <sys/types.h>
65 #endif
66 #if HAVE_STDIO_H
67 #include <stdio.h>
68 #endif
69 #if HAVE_FCNTL_H
70 #include <fcntl.h>
71 #endif
72 #if HAVE_UNISTD_H
73 #include <unistd.h>
74 #endif
75 #if HAVE_CTYPE_H
76 #include <ctype.h>
77 #endif
78 #if STDC_HEADERS
79 #include <stdlib.h>
80 #include <string.h>
81 #endif
82 
83 #if !STDC_HEADERS
84 char *getenv();
85 off_t lseek();
86 VOID_POINTER calloc();
87 void free();
88 #endif
89 
90 #if !HAVE_UPPER_LOWER
91 #define	isupper(c)	((c) >= 'A' && (c) <= 'Z')
92 #define	islower(c)	((c) >= 'a' && (c) <= 'z')
93 #define	toupper(c)	((c) - 'a' + 'A')
94 #define	tolower(c)	((c) - 'A' + 'a')
95 #endif
96 
97 #ifndef NULL
98 #define	NULL	0
99 #endif
100 
101 #ifndef TRUE
102 #define	TRUE		1
103 #endif
104 #ifndef FALSE
105 #define	FALSE		0
106 #endif
107 
108 #define	OPT_OFF		0
109 #define	OPT_ON		1
110 #define	OPT_ONPLUS	2
111 
112 #ifndef HAVE_MEMCPY
113 #ifndef memcpy
114 #define	memcpy(to,from,len)	bcopy((from),(to),(len))
115 #endif
116 #endif
117 
118 #define	BAD_LSEEK	((off_t)-1)
119 
120 /*
121  * Special types and constants.
122  */
123 typedef off_t		POSITION;
124 /*
125  * {{ Warning: if POSITION is changed to other than "long",
126  *    you may have to change some of the printfs which use "%ld"
127  *    to print a variable of type POSITION. }}
128  */
129 
130 #define	NULL_POSITION	((POSITION)(-1))
131 
132 /*
133  * Flags for open()
134  */
135 #if MSOFTC || OS2
136 #define	OPEN_READ	(O_RDONLY|O_BINARY)
137 #else
138 #define	OPEN_READ	(0)
139 #endif
140 #if MSOFTC || OS2
141 #define	OPEN_APPEND	(O_APPEND|O_WRONLY)
142 #else
143 #define	OPEN_APPEND	(1)
144 #endif
145 
146 #if MSOFTC || OS2
147 #define	OPEN_TTYIN()	open("CON", O_BINARY|O_RDONLY)
148 #else
149 #define	OPEN_TTYIN()	open("/dev/tty", 0)
150 #endif
151 
152 /*
153  * An IFILE represents an input file.
154  */
155 #define	IFILE		VOID_POINTER
156 #define	NULL_IFILE	((IFILE)NULL)
157 
158 /*
159  * The structure used to represent a "screen position".
160  * This consists of a file position, and a screen line number.
161  * The meaning is that the line starting at the given file
162  * position is displayed on the ln-th line of the screen.
163  * (Screen lines before ln are empty.)
164  */
165 struct scrpos
166 {
167 	POSITION pos;
168 	int ln;
169 };
170 
171 typedef union parg
172 {
173 	char *p_string;
174 	int p_int;
175 } PARG;
176 
177 #define	NULL_PARG	((PARG *)NULL)
178 
179 struct textlist
180 {
181 	char *string;
182 	char *endstring;
183 };
184 
185 #define	EOI		(-1)
186 
187 #define	READ_INTR	(-2)
188 
189 /* How quiet should we be? */
190 #define	NOT_QUIET	0	/* Ring bell at eof and for errors */
191 #define	LITTLE_QUIET	1	/* Ring bell only for errors */
192 #define	VERY_QUIET	2	/* Never ring bell */
193 
194 /* How should we prompt? */
195 #define	PR_SHORT	0	/* Prompt with colon */
196 #define	PR_MEDIUM	1	/* Prompt with message */
197 #define	PR_LONG		2	/* Prompt with longer message */
198 
199 /* How should we handle backspaces? */
200 #define	BS_SPECIAL	0	/* Do special things for underlining and bold */
201 #define	BS_NORMAL	1	/* \b treated as normal char; actually output */
202 #define	BS_CONTROL	2	/* \b treated as control char; prints as ^H */
203 
204 /* How should we search? */
205 #define	SRCH_FORW	0001	/* Search forward from current position */
206 #define	SRCH_BACK	0002	/* Search backward from current position */
207 #define	SRCH_FIND_ALL	0010	/* Find and highlight all matches */
208 #define	SRCH_NOMATCH	0100	/* Search for non-matching lines */
209 #define	SRCH_PAST_EOF	0200	/* Search past end-of-file, into next file */
210 #define	SRCH_FIRST_FILE	0400	/* Search starting at the first file */
211 
212 #define	SRCH_REVERSE(t)	(((t) & SRCH_FORW) ? \
213 				(((t) & ~SRCH_FORW) | SRCH_BACK) : \
214 				(((t) & ~SRCH_BACK) | SRCH_FORW))
215 
216 /* */
217 #define	NO_MCA		0
218 #define	MCA_DONE	1
219 #define	MCA_MORE	2
220 
221 #define	CC_OK		0	/* Char was accepted & processed */
222 #define	CC_QUIT		1	/* Char was a request to abort current cmd */
223 #define	CC_ERROR	2	/* Char could not be accepted due to error */
224 #define	CC_PASS		3	/* Char was rejected (internal) */
225 
226 /* Special chars used to tell put_line() to do something special */
227 #define	AT_NORMAL	(0)
228 #define	AT_UNDERLINE	(1)
229 #define	AT_BOLD		(2)
230 #define	AT_BLINK	(3)
231 #define	AT_INVIS	(4)
232 #define	AT_STANDOUT	(5)
233 
234 #define	CONTROL(c)	((c)&037)
235 #define	ESC		CONTROL('[')
236 
237 #define	SIGNAL(sig,func)	signal(sig,func)
238 
239 #define	S_INTERRUPT	01
240 #define	S_STOP		02
241 #define S_WINCH		04
242 #define	ABORT_SIGS()	(sigs & (S_INTERRUPT|S_STOP))
243 
244 #define	QUIT_OK		0
245 #define	QUIT_ERROR	1
246 #define	QUIT_SAVED_STATUS (-1)
247 
248 /* filestate flags */
249 #define	CH_CANSEEK	001
250 #define	CH_KEEPOPEN	002
251 #define	CH_POPENED	004
252 
253 #define	ch_zero()	((POSITION)0)
254 
255 #include "funcs.h"
256