jcs's openbsd hax
openbsd
at jcs 186 lines 5.2 kB view raw
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 */ 55typedef 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 */ 73struct scrpos { 74 off_t pos; 75 int ln; 76}; 77 78typedef union parg { 79 char *p_string; 80 int p_int; 81 off_t p_linenum; 82} PARG; 83 84struct 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 154extern int any_sigs(void); 155extern 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 */ 185void postoa(off_t, char *, size_t); 186void inttoa(int, char *, size_t);