home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / less2912.zip / less.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-10  |  6.0 KB  |  255 lines

  1. /*
  2.  * Copyright (c) 1984,1985,1989,1994,1995  Mark Nudelman
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice in the documentation and/or other materials provided with 
  12.  *    the distribution.
  13.  *
  14.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
  15.  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  17.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE
  18.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  19.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
  20.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
  21.  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  22.  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
  23.  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 
  24.  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  */
  26.  
  27.  
  28. /*
  29.  * Standard include file for "less".
  30.  */
  31.  
  32. /*
  33.  * Include the file of compile-time options.
  34.  * The <> make cc search for it in -I., not srcdir.
  35.  */
  36. #include <defines.h>
  37.  
  38. #ifdef _SEQUENT_
  39. /*
  40.  * Kludge for Sequent Dynix systems that have sigsetmask, but
  41.  * it's not compatible with the way less calls it.
  42.  * {{ Do other systems need this? }}
  43.  */
  44. #undef HAVE_SIGSETMASK
  45. #endif
  46.  
  47. /*
  48.  * Language details.
  49.  */
  50. #if HAVE_VOID
  51. #define    VOID_POINTER    void *
  52. #else
  53. #define    VOID_POINTER    char *
  54. #define    void  int
  55. #endif
  56.  
  57. #define    public        /* PUBLIC FUNCTION */
  58.  
  59. /* Library function declarations */
  60.  
  61. #if HAVE_SYS_TYPES_H
  62. #include <sys/types.h>
  63. #endif
  64. #if HAVE_STDIO_H
  65. #include <stdio.h>
  66. #endif
  67. #if HAVE_FCNTL_H
  68. #include <fcntl.h>
  69. #endif
  70. #if HAVE_UNISTD_H
  71. #include <unistd.h>
  72. #endif
  73. #if HAVE_CTYPE_H
  74. #include <ctype.h>
  75. #endif
  76. #if STDC_HEADERS
  77. #include <stdlib.h>
  78. #include <string.h>
  79. #endif
  80.  
  81. #if !STDC_HEADERS
  82. char *getenv();
  83. off_t lseek();
  84. VOID_POINTER calloc();
  85. void free();
  86. #endif
  87.  
  88. #if !HAVE_UPPER_LOWER
  89. #define    isupper(c)    ((c) >= 'A' && (c) <= 'Z')
  90. #define    islower(c)    ((c) >= 'a' && (c) <= 'z')
  91. #define    toupper(c)    ((c) - 'a' + 'A')
  92. #define    tolower(c)    ((c) - 'A' + 'a')
  93. #endif
  94.  
  95. #ifndef NULL
  96. #define    NULL    0
  97. #endif
  98.  
  99. #ifndef TRUE
  100. #define    TRUE        1
  101. #endif
  102. #ifndef FALSE
  103. #define    FALSE        0
  104. #endif
  105.  
  106. #define    OPT_OFF        0
  107. #define    OPT_ON        1
  108. #define    OPT_ONPLUS    2
  109.  
  110. #ifndef HAVE_MEMCPY
  111. #ifndef memcpy
  112. #define    memcpy(to,from,len)    bcopy((from),(to),(len))
  113. #endif
  114. #endif
  115.  
  116. #define    BAD_LSEEK    ((off_t)-1)
  117.  
  118. /*
  119.  * Special types and constants.
  120.  */
  121. typedef long        POSITION;
  122. /*
  123.  * {{ Warning: if POSITION is changed to other than "long",
  124.  *    you may have to change some of the printfs which use "%ld"
  125.  *    to print a variable of type POSITION. }}
  126.  */
  127.  
  128. #define    NULL_POSITION    ((POSITION)(-1))
  129.  
  130. /*
  131.  * Flags for open()
  132.  */
  133. #if MSOFTC || OS2
  134. #define    OPEN_READ    (O_RDONLY|O_BINARY)
  135. #else
  136. #define    OPEN_READ    (0)
  137. #endif
  138. #if MSOFTC || OS2
  139. #define    OPEN_APPEND    (O_APPEND|O_WRONLY)
  140. #else
  141. #define    OPEN_APPEND    (1)
  142. #endif
  143.  
  144. #if MSOFTC || OS2
  145. #define    OPEN_TTYIN()    open("CON", O_BINARY|O_RDONLY)
  146. #else
  147. #define    OPEN_TTYIN()    open("/dev/tty", 0)
  148. #endif
  149.  
  150. /*
  151.  * An IFILE represents an input file.
  152.  */
  153. #define    IFILE        VOID_POINTER
  154. #define    NULL_IFILE    ((IFILE)NULL)
  155.  
  156. /*
  157.  * The structure used to represent a "screen position".
  158.  * This consists of a file position, and a screen line number.
  159.  * The meaning is that the line starting at the given file
  160.  * position is displayed on the ln-th line of the screen.
  161.  * (Screen lines before ln are empty.)
  162.  */
  163. struct scrpos
  164. {
  165.     POSITION pos;
  166.     int ln;
  167. };
  168.  
  169. typedef union parg
  170. {
  171.     char *p_string;
  172.     int p_int;
  173. } PARG;
  174.  
  175. #define    NULL_PARG    ((PARG *)NULL)
  176.  
  177. struct textlist
  178. {
  179.     char *string;
  180.     char *endstring;
  181. };
  182.  
  183. #define    EOI        (-1)
  184.  
  185. #define    READ_INTR    (-2)
  186.  
  187. /* How quiet should we be? */
  188. #define    NOT_QUIET    0    /* Ring bell at eof and for errors */
  189. #define    LITTLE_QUIET    1    /* Ring bell only for errors */
  190. #define    VERY_QUIET    2    /* Never ring bell */
  191.  
  192. /* How should we prompt? */
  193. #define    PR_SHORT    0    /* Prompt with colon */
  194. #define    PR_MEDIUM    1    /* Prompt with message */
  195. #define    PR_LONG        2    /* Prompt with longer message */
  196.  
  197. /* How should we handle backspaces? */
  198. #define    BS_SPECIAL    0    /* Do special things for underlining and bold */
  199. #define    BS_NORMAL    1    /* \b treated as normal char; actually output */
  200. #define    BS_CONTROL    2    /* \b treated as control char; prints as ^H */
  201.  
  202. /* How should we search? */
  203. #define    SRCH_FORW    0001    /* Search forward from current position */
  204. #define    SRCH_BACK    0002    /* Search backward from current position */
  205. #define    SRCH_FIND_ALL    0010    /* Find and highlight all matches */
  206. #define    SRCH_NOMATCH    0100    /* Search for non-matching lines */
  207. #define    SRCH_PAST_EOF    0200    /* Search past end-of-file, into next file */
  208. #define    SRCH_FIRST_FILE    0400    /* Search starting at the first file */
  209.  
  210. #define    SRCH_REVERSE(t)    (((t) & SRCH_FORW) ? \
  211.                 (((t) & ~SRCH_FORW) | SRCH_BACK) : \
  212.                 (((t) & ~SRCH_BACK) | SRCH_FORW))
  213.  
  214. /* */
  215. #define    NO_MCA        0
  216. #define    MCA_DONE    1
  217. #define    MCA_MORE    2
  218.  
  219. #define    CC_OK        0    /* Char was accepted & processed */
  220. #define    CC_QUIT        1    /* Char was a request to abort current cmd */
  221. #define    CC_ERROR    2    /* Char could not be accepted due to error */
  222. #define    CC_PASS        3    /* Char was rejected (internal) */
  223.  
  224. /* Special chars used to tell put_line() to do something special */
  225. #define    AT_NORMAL    (0)
  226. #define    AT_UNDERLINE    (1)
  227. #define    AT_BOLD        (2)
  228. #define    AT_BLINK    (3)
  229. #define    AT_INVIS    (4)
  230. #define    AT_STANDOUT    (5)
  231.  
  232. #define    CONTROL(c)    ((c)&037)
  233. #define    ESC        CONTROL('[')
  234.  
  235. #define    SIGNAL(sig,func)    signal(sig,func)
  236.  
  237. #define    S_INTERRUPT    01
  238. #define    S_STOP        02
  239. #define S_WINCH        04
  240. #define    ABORT_SIGS()    (sigs & (S_INTERRUPT|S_STOP))
  241.  
  242. #define    QUIT_OK        0
  243. #define    QUIT_ERROR    1
  244. #define    QUIT_SAVED_STATUS (-1)
  245.  
  246. /* filestate flags */
  247. #define    CH_CANSEEK    0x01
  248. #define    CH_KEEPOPEN    0x02
  249. #define    CH_POPENED    0x04
  250. #define    CH_COMPRESSED    0x08
  251.  
  252. #define    ch_zero()    ((POSITION)0)
  253.  
  254. #include "funcs.h"
  255.