| Commit | Line | Data |
|---|---|---|
| 131ccf9c | 1 | /* |
| a9adbba3 | 2 | * Copyright (C) 1984-2009 Mark Nudelman |
| 131ccf9c PA |
3 | * |
| 4 | * You may distribute under the terms of either the GNU General Public | |
| 5 | * License or the Less License, as specified in the README file. | |
| 6 | * | |
| 7 | * For more information about less, or for information on how to | |
| 8 | * contact the author, see the README file. | |
| 9 | */ | |
| 10 | ||
| 11 | #define NEWBOT 1 | |
| 12 | ||
| 13 | /* | |
| 14 | * Standard include file for "less". | |
| 15 | */ | |
| 16 | ||
| 17 | /* | |
| 18 | * Defines for MSDOS_COMPILER. | |
| 19 | */ | |
| 20 | #define MSOFTC 1 /* Microsoft C */ | |
| 21 | #define BORLANDC 2 /* Borland C */ | |
| 22 | #define WIN32C 3 /* Windows (Borland C or Microsoft C) */ | |
| 23 | #define DJGPPC 4 /* DJGPP C */ | |
| 24 | ||
| 25 | /* | |
| 26 | * Include the file of compile-time options. | |
| 27 | * The <> make cc search for it in -I., not srcdir. | |
| 28 | */ | |
| 29 | #include <defines.h> | |
| 30 | ||
| 31 | #ifdef _SEQUENT_ | |
| 32 | /* | |
| 33 | * Kludge for Sequent Dynix systems that have sigsetmask, but | |
| 34 | * it's not compatible with the way less calls it. | |
| 35 | * {{ Do other systems need this? }} | |
| 36 | */ | |
| 37 | #undef HAVE_SIGSETMASK | |
| 38 | #endif | |
| 39 | ||
| 40 | /* | |
| 41 | * Language details. | |
| 42 | */ | |
| 43 | #if HAVE_VOID | |
| 44 | #define VOID_POINTER void * | |
| 45 | #else | |
| 46 | #define VOID_POINTER char * | |
| 47 | #define void int | |
| 48 | #endif | |
| 49 | #if HAVE_CONST | |
| 50 | #define constant const | |
| 51 | #else | |
| 52 | #define constant | |
| 53 | #endif | |
| 54 | ||
| 55 | #define public /* PUBLIC FUNCTION */ | |
| 56 | ||
| 57 | /* Library function declarations */ | |
| 58 | ||
| 59 | #if HAVE_SYS_TYPES_H | |
| 60 | #include <sys/types.h> | |
| 61 | #endif | |
| 62 | #if HAVE_STDIO_H | |
| 63 | #include <stdio.h> | |
| 64 | #endif | |
| 65 | #if HAVE_FCNTL_H | |
| 66 | #include <fcntl.h> | |
| 67 | #endif | |
| 68 | #if HAVE_UNISTD_H | |
| 69 | #include <unistd.h> | |
| 70 | #endif | |
| 71 | #if HAVE_CTYPE_H | |
| 72 | #include <ctype.h> | |
| 73 | #endif | |
| 3336a202 PA |
74 | #if HAVE_WCTYPE_H |
| 75 | #include <wctype.h> | |
| 76 | #endif | |
| 131ccf9c PA |
77 | #if HAVE_LIMITS_H |
| 78 | #include <limits.h> | |
| 79 | #endif | |
| 80 | #if HAVE_STDLIB_H | |
| 81 | #include <stdlib.h> | |
| 82 | #endif | |
| 83 | #if HAVE_STRING_H | |
| 84 | #include <string.h> | |
| 85 | #endif | |
| 86 | ||
| 87 | /* OS-specific includes */ | |
| 88 | #ifdef _OSK | |
| 89 | #include <modes.h> | |
| 90 | #include <strings.h> | |
| 91 | #endif | |
| 92 | ||
| 93 | #ifdef __TANDEM | |
| 94 | #include <floss.h> | |
| 95 | #endif | |
| 96 | ||
| 97 | #if MSDOS_COMPILER==WIN32C || OS2 | |
| 98 | #include <io.h> | |
| 99 | #endif | |
| 100 | ||
| 101 | #if MSDOS_COMPILER==DJGPPC | |
| 102 | #include <io.h> | |
| 103 | #include <sys/exceptn.h> | |
| 104 | #include <conio.h> | |
| 105 | #include <pc.h> | |
| 106 | #endif | |
| 107 | ||
| 108 | #if !HAVE_STDLIB_H | |
| 109 | char *getenv(); | |
| 110 | off_t lseek(); | |
| 111 | VOID_POINTER calloc(); | |
| 112 | void free(); | |
| 113 | #endif | |
| 114 | ||
| 115 | /* | |
| 116 | * Simple lowercase test which can be used during option processing | |
| 117 | * (before options are parsed which might tell us what charset to use). | |
| 118 | */ | |
| 119 | #define ASCII_IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z') | |
| 120 | #define ASCII_IS_LOWER(c) ((c) >= 'a' && (c) <= 'z') | |
| 121 | #define ASCII_TO_UPPER(c) ((c) - 'a' + 'A') | |
| 122 | #define ASCII_TO_LOWER(c) ((c) - 'A' + 'a') | |
| 123 | ||
| 124 | #undef IS_UPPER | |
| 125 | #undef IS_LOWER | |
| 126 | #undef TO_UPPER | |
| 127 | #undef TO_LOWER | |
| 128 | #undef IS_SPACE | |
| 129 | #undef IS_DIGIT | |
| 130 | ||
| 3336a202 PA |
131 | #if HAVE_WCTYPE |
| 132 | #define IS_UPPER(c) iswupper(c) | |
| 133 | #define IS_LOWER(c) iswlower(c) | |
| 134 | #define TO_UPPER(c) towupper(c) | |
| 135 | #define TO_LOWER(c) towlower(c) | |
| 131ccf9c | 136 | #else |
| 3336a202 | 137 | #if HAVE_UPPER_LOWER |
| 131ccf9c PA |
138 | #define IS_UPPER(c) isupper((unsigned char) (c)) |
| 139 | #define IS_LOWER(c) islower((unsigned char) (c)) | |
| 140 | #define TO_UPPER(c) toupper((unsigned char) (c)) | |
| 141 | #define TO_LOWER(c) tolower((unsigned char) (c)) | |
| 3336a202 PA |
142 | #else |
| 143 | #define IS_UPPER(c) ASCII_IS_UPPER(c) | |
| 144 | #define IS_LOWER(c) ASCII_IS_LOWER(c) | |
| 145 | #define TO_UPPER(c) ASCII_TO_UPPER(c) | |
| 146 | #define TO_LOWER(c) ASCII_TO_LOWER(c) | |
| 147 | #endif | |
| 131ccf9c PA |
148 | #endif |
| 149 | ||
| 150 | #ifdef isspace | |
| 151 | #define IS_SPACE(c) isspace((unsigned char)(c)) | |
| 152 | #else | |
| 153 | #define IS_SPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\r' || (c) == '\f') | |
| 154 | #endif | |
| 155 | ||
| 156 | #ifdef isdigit | |
| 157 | #define IS_DIGIT(c) isdigit((unsigned char)(c)) | |
| 158 | #else | |
| 159 | #define IS_DIGIT(c) ((c) >= '0' && (c) <= '9') | |
| 160 | #endif | |
| 161 | ||
| 8be36e5b | 162 | #define IS_CSI_START(c) (((LWCHAR)(c)) == ESC || (((LWCHAR)(c)) == CSI)) |
| 131ccf9c PA |
163 | |
| 164 | #ifndef NULL | |
| 165 | #define NULL 0 | |
| 166 | #endif | |
| 167 | ||
| 168 | #ifndef TRUE | |
| 169 | #define TRUE 1 | |
| 170 | #endif | |
| 171 | #ifndef FALSE | |
| 172 | #define FALSE 0 | |
| 173 | #endif | |
| 174 | ||
| 175 | #define OPT_OFF 0 | |
| 176 | #define OPT_ON 1 | |
| 177 | #define OPT_ONPLUS 2 | |
| 178 | ||
| 179 | #if !HAVE_MEMCPY | |
| 180 | #ifndef memcpy | |
| 181 | #define memcpy(to,from,len) bcopy((from),(to),(len)) | |
| 182 | #endif | |
| 183 | #endif | |
| 184 | ||
| 185 | #if HAVE_SNPRINTF | |
| 186 | #define SNPRINTF1(str, size, fmt, v1) snprintf((str), (size), (fmt), (v1)) | |
| 187 | #define SNPRINTF2(str, size, fmt, v1, v2) snprintf((str), (size), (fmt), (v1), (v2)) | |
| 188 | #define SNPRINTF3(str, size, fmt, v1, v2, v3) snprintf((str), (size), (fmt), (v1), (v2), (v3)) | |
| 189 | #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) snprintf((str), (size), (fmt), (v1), (v2), (v3), (v4)) | |
| 190 | #else | |
| 191 | /* Use unsafe sprintf if we don't have snprintf. */ | |
| 192 | #define SNPRINTF1(str, size, fmt, v1) sprintf((str), (fmt), (v1)) | |
| 193 | #define SNPRINTF2(str, size, fmt, v1, v2) sprintf((str), (fmt), (v1), (v2)) | |
| 194 | #define SNPRINTF3(str, size, fmt, v1, v2, v3) sprintf((str), (fmt), (v1), (v2), (v3)) | |
| 195 | #define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) sprintf((str), (fmt), (v1), (v2), (v3), (v4)) | |
| 196 | #endif | |
| 197 | ||
| 198 | #define BAD_LSEEK ((off_t)-1) | |
| 199 | ||
| 3336a202 PA |
200 | #ifndef SEEK_SET |
| 201 | #define SEEK_SET 0 | |
| 202 | #endif | |
| 203 | #ifndef SEEK_END | |
| 204 | #define SEEK_END 2 | |
| 205 | #endif | |
| 206 | ||
| 131ccf9c PA |
207 | #ifndef CHAR_BIT |
| 208 | #define CHAR_BIT 8 | |
| 209 | #endif | |
| 210 | ||
| 211 | /* | |
| 212 | * Upper bound on the string length of an integer converted to string. | |
| 213 | * 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit; | |
| 214 | * add 1 for integer division truncation; add 1 more for a minus sign. | |
| 215 | */ | |
| 216 | #define INT_STRLEN_BOUND(t) ((sizeof(t) * CHAR_BIT - 1) * 302 / 1000 + 1 + 1) | |
| 217 | ||
| 218 | /* | |
| 219 | * Special types and constants. | |
| 220 | */ | |
| 221 | typedef unsigned long LWCHAR; | |
| 222 | typedef off_t POSITION; | |
| 223 | typedef off_t LINENUM; | |
| 224 | #define MIN_LINENUM_WIDTH 7 /* Min printing width of a line number */ | |
| 225 | #define MAX_UTF_CHAR_LEN 6 /* Max bytes in one UTF-8 char */ | |
| 226 | ||
| 227 | #define NULL_POSITION ((POSITION)(-1)) | |
| 228 | ||
| 229 | /* | |
| 230 | * Flags for open() | |
| 231 | */ | |
| 232 | #if MSDOS_COMPILER || OS2 | |
| 233 | #define OPEN_READ (O_RDONLY|O_BINARY) | |
| 234 | #else | |
| 235 | #ifdef _OSK | |
| 236 | #define OPEN_READ (S_IREAD) | |
| 237 | #else | |
| 238 | #ifdef O_RDONLY | |
| 239 | #define OPEN_READ (O_RDONLY) | |
| 240 | #else | |
| 241 | #define OPEN_READ (0) | |
| 242 | #endif | |
| 243 | #endif | |
| 244 | #endif | |
| 245 | ||
| 246 | #if defined(O_WRONLY) && defined(O_APPEND) | |
| 247 | #define OPEN_APPEND (O_APPEND|O_WRONLY) | |
| 248 | #else | |
| 249 | #ifdef _OSK | |
| 250 | #define OPEN_APPEND (S_IWRITE) | |
| 251 | #else | |
| 252 | #define OPEN_APPEND (1) | |
| 253 | #endif | |
| 254 | #endif | |
| 255 | ||
| 256 | /* | |
| 257 | * Set a file descriptor to binary mode. | |
| 258 | */ | |
| 259 | #if MSDOS_COMPILER==MSOFTC | |
| 260 | #define SET_BINARY(f) _setmode(f, _O_BINARY); | |
| 261 | #else | |
| 262 | #if MSDOS_COMPILER || OS2 | |
| 263 | #define SET_BINARY(f) setmode(f, O_BINARY) | |
| 264 | #else | |
| 265 | #define SET_BINARY(f) | |
| 266 | #endif | |
| 267 | #endif | |
| 268 | ||
| 269 | /* | |
| 270 | * Does the shell treat "?" as a metacharacter? | |
| 271 | */ | |
| 272 | #if MSDOS_COMPILER || OS2 || _OSK | |
| 273 | #define SHELL_META_QUEST 0 | |
| 274 | #else | |
| 275 | #define SHELL_META_QUEST 1 | |
| 276 | #endif | |
| 277 | ||
| 278 | #define SPACES_IN_FILENAMES 1 | |
| 279 | ||
| 280 | /* | |
| 281 | * An IFILE represents an input file. | |
| 282 | */ | |
| 283 | #define IFILE VOID_POINTER | |
| 284 | #define NULL_IFILE ((IFILE)NULL) | |
| 285 | ||
| 286 | /* | |
| 287 | * The structure used to represent a "screen position". | |
| 288 | * This consists of a file position, and a screen line number. | |
| 289 | * The meaning is that the line starting at the given file | |
| 290 | * position is displayed on the ln-th line of the screen. | |
| 291 | * (Screen lines before ln are empty.) | |
| 292 | */ | |
| 293 | struct scrpos | |
| 294 | { | |
| 295 | POSITION pos; | |
| 296 | int ln; | |
| 297 | }; | |
| 298 | ||
| 299 | typedef union parg | |
| 300 | { | |
| 301 | char *p_string; | |
| 302 | int p_int; | |
| 303 | LINENUM p_linenum; | |
| 304 | } PARG; | |
| 305 | ||
| 306 | #define NULL_PARG ((PARG *)NULL) | |
| 307 | ||
| 308 | struct textlist | |
| 309 | { | |
| 310 | char *string; | |
| 311 | char *endstring; | |
| 312 | }; | |
| 313 | ||
| 314 | #define EOI (-1) | |
| 315 | ||
| 316 | #define READ_INTR (-2) | |
| 317 | ||
| 318 | /* A fraction is represented by an int n; the fraction is n/NUM_FRAC_DENOM */ | |
| 319 | #define NUM_FRAC_DENOM 1000000 | |
| 320 | #define NUM_LOG_FRAC_DENOM 6 | |
| 321 | ||
| 322 | /* How quiet should we be? */ | |
| 323 | #define NOT_QUIET 0 /* Ring bell at eof and for errors */ | |
| 324 | #define LITTLE_QUIET 1 /* Ring bell only for errors */ | |
| 325 | #define VERY_QUIET 2 /* Never ring bell */ | |
| 326 | ||
| 327 | /* How should we prompt? */ | |
| 328 | #define PR_SHORT 0 /* Prompt with colon */ | |
| 329 | #define PR_MEDIUM 1 /* Prompt with message */ | |
| 330 | #define PR_LONG 2 /* Prompt with longer message */ | |
| 331 | ||
| 332 | /* How should we handle backspaces? */ | |
| 333 | #define BS_SPECIAL 0 /* Do special things for underlining and bold */ | |
| 334 | #define BS_NORMAL 1 /* \b treated as normal char; actually output */ | |
| 335 | #define BS_CONTROL 2 /* \b treated as control char; prints as ^H */ | |
| 336 | ||
| 337 | /* How should we search? */ | |
| 8be36e5b PA |
338 | #define SRCH_FORW (1 << 0) /* Search forward from current position */ |
| 339 | #define SRCH_BACK (1 << 1) /* Search backward from current position */ | |
| 340 | #define SRCH_NO_MOVE (1 << 2) /* Highlight, but don't move */ | |
| 341 | #define SRCH_FIND_ALL (1 << 4) /* Find and highlight all matches */ | |
| 342 | #define SRCH_NO_MATCH (1 << 8) /* Search for non-matching lines */ | |
| 343 | #define SRCH_PAST_EOF (1 << 9) /* Search past end-of-file, into next file */ | |
| 344 | #define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */ | |
| 345 | #define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */ | |
| 346 | #define SRCH_FILTER (1 << 13) /* Search is for '&' (filter) command */ | |
| 131ccf9c PA |
347 | |
| 348 | #define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \ | |
| 349 | (((t) & ~SRCH_FORW) | SRCH_BACK) : \ | |
| 350 | (((t) & ~SRCH_BACK) | SRCH_FORW)) | |
| 351 | ||
| 352 | /* */ | |
| 353 | #define NO_MCA 0 | |
| 354 | #define MCA_DONE 1 | |
| 355 | #define MCA_MORE 2 | |
| 356 | ||
| 357 | #define CC_OK 0 /* Char was accepted & processed */ | |
| 358 | #define CC_QUIT 1 /* Char was a request to abort current cmd */ | |
| 359 | #define CC_ERROR 2 /* Char could not be accepted due to error */ | |
| 360 | #define CC_PASS 3 /* Char was rejected (internal) */ | |
| 361 | ||
| 362 | #define CF_QUIT_ON_ERASE 0001 /* Abort cmd if its entirely erased */ | |
| 363 | ||
| 364 | /* Special char bit-flags used to tell put_line() to do something special */ | |
| 365 | #define AT_NORMAL (0) | |
| 366 | #define AT_UNDERLINE (1 << 0) | |
| 367 | #define AT_BOLD (1 << 1) | |
| 368 | #define AT_BLINK (1 << 2) | |
| 369 | #define AT_STANDOUT (1 << 3) | |
| 370 | #define AT_ANSI (1 << 4) /* Content-supplied "ANSI" escape sequence */ | |
| 371 | #define AT_BINARY (1 << 5) /* LESS*BINFMT representation */ | |
| 372 | #define AT_HILITE (1 << 6) /* Internal highlights (e.g., for search) */ | |
| 373 | ||
| 374 | #if '0' == 240 | |
| 375 | #define IS_EBCDIC_HOST 1 | |
| 376 | #endif | |
| 377 | ||
| 378 | #if IS_EBCDIC_HOST | |
| 379 | /* | |
| 380 | * Long definition for EBCDIC. | |
| 381 | * Since the argument is usually a constant, this macro normally compiles | |
| 382 | * into a constant. | |
| 383 | */ | |
| 384 | #define CONTROL(c) ( \ | |
| 385 | (c)=='[' ? '\047' : \ | |
| 386 | (c)=='a' ? '\001' : \ | |
| 387 | (c)=='b' ? '\002' : \ | |
| 388 | (c)=='c' ? '\003' : \ | |
| 389 | (c)=='d' ? '\067' : \ | |
| 390 | (c)=='e' ? '\055' : \ | |
| 391 | (c)=='f' ? '\056' : \ | |
| 392 | (c)=='g' ? '\057' : \ | |
| 393 | (c)=='h' ? '\026' : \ | |
| 394 | (c)=='i' ? '\005' : \ | |
| 395 | (c)=='j' ? '\025' : \ | |
| 396 | (c)=='k' ? '\013' : \ | |
| 397 | (c)=='l' ? '\014' : \ | |
| 398 | (c)=='m' ? '\015' : \ | |
| 399 | (c)=='n' ? '\016' : \ | |
| 400 | (c)=='o' ? '\017' : \ | |
| 401 | (c)=='p' ? '\020' : \ | |
| 402 | (c)=='q' ? '\021' : \ | |
| 403 | (c)=='r' ? '\022' : \ | |
| 404 | (c)=='s' ? '\023' : \ | |
| 405 | (c)=='t' ? '\074' : \ | |
| 406 | (c)=='u' ? '\075' : \ | |
| 407 | (c)=='v' ? '\062' : \ | |
| 408 | (c)=='w' ? '\046' : \ | |
| 409 | (c)=='x' ? '\030' : \ | |
| 410 | (c)=='y' ? '\031' : \ | |
| 411 | (c)=='z' ? '\077' : \ | |
| 412 | (c)=='A' ? '\001' : \ | |
| 413 | (c)=='B' ? '\002' : \ | |
| 414 | (c)=='C' ? '\003' : \ | |
| 415 | (c)=='D' ? '\067' : \ | |
| 416 | (c)=='E' ? '\055' : \ | |
| 417 | (c)=='F' ? '\056' : \ | |
| 418 | (c)=='G' ? '\057' : \ | |
| 419 | (c)=='H' ? '\026' : \ | |
| 420 | (c)=='I' ? '\005' : \ | |
| 421 | (c)=='J' ? '\025' : \ | |
| 422 | (c)=='K' ? '\013' : \ | |
| 423 | (c)=='L' ? '\014' : \ | |
| 424 | (c)=='M' ? '\015' : \ | |
| 425 | (c)=='N' ? '\016' : \ | |
| 426 | (c)=='O' ? '\017' : \ | |
| 427 | (c)=='P' ? '\020' : \ | |
| 428 | (c)=='Q' ? '\021' : \ | |
| 429 | (c)=='R' ? '\022' : \ | |
| 430 | (c)=='S' ? '\023' : \ | |
| 431 | (c)=='T' ? '\074' : \ | |
| 432 | (c)=='U' ? '\075' : \ | |
| 433 | (c)=='V' ? '\062' : \ | |
| 434 | (c)=='W' ? '\046' : \ | |
| 435 | (c)=='X' ? '\030' : \ | |
| 436 | (c)=='Y' ? '\031' : \ | |
| 437 | (c)=='Z' ? '\077' : \ | |
| 438 | (c)=='|' ? '\031' : \ | |
| 439 | (c)=='\\' ? '\034' : \ | |
| 440 | (c)=='^' ? '\036' : \ | |
| 441 | (c)&077) | |
| 442 | #else | |
| 443 | #define CONTROL(c) ((c)&037) | |
| 444 | #endif /* IS_EBCDIC_HOST */ | |
| 445 | ||
| 446 | #define ESC CONTROL('[') | |
| 447 | #define CSI ((unsigned char)'\233') | |
| 448 | ||
| 449 | #if _OSK_MWC32 | |
| 450 | #define LSIGNAL(sig,func) os9_signal(sig,func) | |
| 451 | #else | |
| 452 | #define LSIGNAL(sig,func) signal(sig,func) | |
| 453 | #endif | |
| 454 | ||
| 455 | #if HAVE_SIGPROCMASK | |
| 456 | #if HAVE_SIGSET_T | |
| 457 | #else | |
| 458 | #undef HAVE_SIGPROCMASK | |
| 459 | #endif | |
| 460 | #endif | |
| 461 | #if HAVE_SIGPROCMASK | |
| 462 | #if HAVE_SIGEMPTYSET | |
| 463 | #else | |
| 464 | #undef sigemptyset | |
| 465 | #define sigemptyset(mp) *(mp) = 0 | |
| 466 | #endif | |
| 467 | #endif | |
| 468 | ||
| 469 | #define S_INTERRUPT 01 | |
| 470 | #define S_STOP 02 | |
| 471 | #define S_WINCH 04 | |
| 472 | #define ABORT_SIGS() (sigs & (S_INTERRUPT|S_STOP)) | |
| 473 | ||
| 474 | #define QUIT_OK 0 | |
| 475 | #define QUIT_ERROR 1 | |
| 476 | #define QUIT_SAVED_STATUS (-1) | |
| 477 | ||
| 3336a202 PA |
478 | #define FOLLOW_DESC 0 |
| 479 | #define FOLLOW_NAME 1 | |
| 480 | ||
| 131ccf9c PA |
481 | /* filestate flags */ |
| 482 | #define CH_CANSEEK 001 | |
| 483 | #define CH_KEEPOPEN 002 | |
| 484 | #define CH_POPENED 004 | |
| 485 | #define CH_HELPFILE 010 | |
| 486 | ||
| 487 | #define ch_zero() ((POSITION)0) | |
| 488 | ||
| 489 | #define FAKE_HELPFILE "@/\\less/\\help/\\file/\\@" | |
| 490 | ||
| a9adbba3 JL |
491 | /* Flags for cvt_text */ |
| 492 | #define CVT_TO_LC 01 /* Convert upper-case to lower-case */ | |
| 493 | #define CVT_BS 02 /* Do backspace processing */ | |
| 494 | #define CVT_CRLF 04 /* Remove CR after LF */ | |
| 495 | #define CVT_ANSI 010 /* Remove ANSI escape sequences */ | |
| 496 | ||
| 131ccf9c PA |
497 | #include "funcs.h" |
| 498 | ||
| 499 | /* Functions not included in funcs.h */ | |
| 500 | void postoa(); | |
| 501 | void linenumtoa(); | |
| 502 | void inttoa(); |