xref: /openbsd/usr.bin/less/less.h (revision c74702f8)
1 /*
2  * Copyright (C) 1984-2012  Mark Nudelman
3  * Modified for use with illumos by Garrett D'Amore.
4  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
5  *
6  * You may distribute under the terms of either the GNU General Public
7  * License or the Less License, as specified in the README file.
8  *
9  * For more information, see the README file.
10  */
11 
12 /*
13  * Standard include file for "less".
14  */
15 
16 #include "defines.h"
17 
18 #include <sys/types.h>
19 
20 #include <ctype.h>
21 #include <fcntl.h>
22 #include <limits.h>
23 #include <signal.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <string.h>
27 #include <unistd.h>
28 #include <wctype.h>
29 
30 /*
31  * Simple lowercase test which can be used during option processing
32  * (before options are parsed which might tell us what charset to use).
33  */
34 
35 #undef IS_SPACE
36 #undef IS_DIGIT
37 
38 #define	IS_SPACE(c)	isspace((unsigned char)(c))
39 #define	IS_DIGIT(c)	isdigit((unsigned char)(c))
40 
41 #ifndef TRUE
42 #define	TRUE		1
43 #endif
44 #ifndef FALSE
45 #define	FALSE		0
46 #endif
47 
48 #define	OPT_OFF		0
49 #define	OPT_ON		1
50 #define	OPT_ONPLUS	2
51 
52 /*
53  * Special types and constants.
54  */
55 typedef unsigned long LWCHAR;
56 #define	MIN_LINENUM_WIDTH  7	/* Min printing width of a line number */
57 #define	MAX_UTF_CHAR_LEN   6	/* Max bytes in one UTF-8 char */
58 
59 #define	SHELL_META_QUEST 1
60 
61 /*
62  * An IFILE represents an input file.
63  */
64 #define	IFILE		void *
65 
66 /*
67  * The structure used to represent a "screen position".
68  * This consists of a file position, and a screen line number.
69  * The meaning is that the line starting at the given file
70  * position is displayed on the ln-th line of the screen.
71  * (Screen lines before ln are empty.)
72  */
73 struct scrpos {
74 	off_t pos;
75 	int ln;
76 };
77 
78 typedef union parg {
79 	char *p_string;
80 	int p_int;
81 	off_t p_linenum;
82 } PARG;
83 
84 struct textlist {
85 	char *string;
86 	char *endstring;
87 };
88 
89 #define	EOI		(-1)
90 
91 #define	READ_INTR	(-2)
92 
93 /* A fraction is represented by an int n; the fraction is n/NUM_FRAC_DENOM */
94 #define	NUM_FRAC_DENOM			1000000
95 #define	NUM_LOG_FRAC_DENOM		6
96 
97 /* How quiet should we be? */
98 #define	NOT_QUIET	0	/* Ring bell at eof and for errors */
99 #define	LITTLE_QUIET	1	/* Ring bell only for errors */
100 #define	VERY_QUIET	2	/* Never ring bell */
101 
102 /* How should we prompt? */
103 #define	PR_SHORT	0	/* Prompt with colon */
104 #define	PR_MEDIUM	1	/* Prompt with message */
105 #define	PR_LONG		2	/* Prompt with longer message */
106 
107 /* How should we handle backspaces? */
108 #define	BS_SPECIAL	0	/* Do special things for underlining and bold */
109 #define	BS_NORMAL	1	/* \b treated as normal char; actually output */
110 #define	BS_CONTROL	2	/* \b treated as control char; prints as ^H */
111 
112 /* How should we search? */
113 #define	SRCH_FORW	(1 << 0)  /* Search forward from current position */
114 #define	SRCH_BACK	(1 << 1)  /* Search backward from current position */
115 #define	SRCH_NO_MOVE	(1 << 2)  /* Highlight, but don't move */
116 #define	SRCH_FIND_ALL	(1 << 4)  /* Find and highlight all matches */
117 #define	SRCH_NO_MATCH	(1 << 8)  /* Search for non-matching lines */
118 #define	SRCH_PAST_EOF	(1 << 9)  /* Search past end-of-file, into next file */
119 #define	SRCH_FIRST_FILE	(1 << 10) /* Search starting at the first file */
120 #define	SRCH_NO_REGEX	(1 << 12) /* Don't use regular expressions */
121 #define	SRCH_FILTER	(1 << 13) /* Search is for '&' (filter) command */
122 #define	SRCH_AFTER_TARGET (1 << 14) /* Start search after the target line */
123 
124 #define	SRCH_REVERSE(t)	(((t) & SRCH_FORW) ? \
125 				(((t) & ~SRCH_FORW) | SRCH_BACK) : \
126 				(((t) & ~SRCH_BACK) | SRCH_FORW))
127 
128 /* */
129 #define	NO_MCA		0
130 #define	MCA_DONE	1
131 #define	MCA_MORE	2
132 
133 #define	CC_OK		0	/* Char was accepted & processed */
134 #define	CC_QUIT		1	/* Char was a request to abort current cmd */
135 #define	CC_ERROR	2	/* Char could not be accepted due to error */
136 #define	CC_PASS		3	/* Char was rejected (internal) */
137 
138 #define	CF_QUIT_ON_ERASE 0001   /* Abort cmd if its entirely erased */
139 
140 /* Special char bit-flags used to tell put_line() to do something special */
141 #define	AT_NORMAL	(0)
142 #define	AT_UNDERLINE	(1 << 0)
143 #define	AT_BOLD		(1 << 1)
144 #define	AT_BLINK	(1 << 2)
145 #define	AT_STANDOUT	(1 << 3)
146 #define	AT_ANSI		(1 << 4)  /* Content-supplied "ANSI" escape sequence */
147 #define	AT_BINARY	(1 << 5)  /* LESS*BINFMT representation */
148 #define	AT_HILITE	(1 << 6)  /* Internal highlights (e.g., for search) */
149 #define	AT_INDET	(1 << 7)  /* Indeterminate: either bold or underline */
150 
151 #define	CONTROL(c)	((c)&037)
152 #define	ESC		CONTROL('[')
153 
154 extern int any_sigs(void);
155 extern int abort_sigs(void);
156 
157 #define	QUIT_OK		0
158 #define	QUIT_ERROR	1
159 #define	QUIT_INTERRUPT	2
160 #define	QUIT_SAVED_STATUS (-1)
161 
162 #define	FOLLOW_DESC	0
163 #define	FOLLOW_NAME	1
164 
165 /* filestate flags */
166 #define	CH_CANSEEK	001
167 #define	CH_KEEPOPEN	002
168 #define	CH_HELPFILE	010
169 #define	CH_NODATA	020	/* Special case for zero length files */
170 
171 
172 #define	ch_zero()	(0)
173 
174 #define	FAKE_EMPTYFILE	"@/\\less/\\empty/\\file/\\@"
175 
176 /* Flags for cvt_text */
177 #define	CVT_TO_LC	01	/* Convert upper-case to lower-case */
178 #define	CVT_BS		02	/* Do backspace processing */
179 #define	CVT_CRLF	04	/* Remove CR after LF */
180 #define	CVT_ANSI	010	/* Remove ANSI escape sequences */
181 
182 #include "funcs.h"
183 
184 /* Functions not included in funcs.h */
185 void postoa(off_t, char *, size_t);
186 void inttoa(int, char *, size_t);
187