/****************************************************************************** * Copyright 1995-2002,2007 by Thomas E. Dickey * * All Rights Reserved. * * * * Permission to use, copy, modify, and distribute this software and its * * documentation for any purpose and without fee is hereby granted, provided * * that the above copyright notice appear in all copies and that both that * * copyright notice and this permission notice appear in supporting * * documentation, and that the name of the above listed copyright holder(s) * * not be used in advertising or publicity pertaining to distribution of the * * software without specific, written prior permission. * * * * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD * * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * * FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE * * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR * * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * ******************************************************************************/ /* $Id: add.h,v 1.11 2007/02/15 00:36:47 tom Exp $ * * common definitions for 'add' utility */ #ifndef ADD_H #define ADD_H #if defined(vaxc) || defined(vms) # define SYS_VMS 1 #elif defined(__TURBOC__) # define SYS_MSDOS 1 # define HAVE_GETOPT_H 1 /* GNU library */ #else # define SYS_UNIX 1 # include /* generated by 'configure' */ #endif #ifndef HAVE_BKGD #define HAVE_BKGD 0 #endif #ifndef HAVE_COLOR_PAIR #define HAVE_COLOR_PAIR 0 #endif #ifndef HAVE_DBMALLOC_H #define HAVE_DBMALLOC_H 0 #endif #ifndef HAVE_FLASH #define HAVE_FLASH 0 #endif #ifndef HAVE_GETOPT #define HAVE_GETOPT 0 #endif #ifndef HAVE_GETOPT_H #define HAVE_GETOPT_H 0 #endif #ifndef HAVE_KEYPAD #define HAVE_KEYPAD 0 #endif #ifndef HAVE_TYPEAHEAD #define HAVE_TYPEAHEAD 0 #endif #ifndef HAVE_UNISTD_H #define HAVE_UNISTD_H 0 #endif #ifndef HAVE_WSETSCRREG #define HAVE_WSETSCRREG 0 #endif #ifndef HAVE_XCURSES #define HAVE_XCURSES 0 #endif #ifndef NO_LEAKS #define NO_LEAKS 0 #endif #ifndef SYS_MSDOS #define SYS_MSDOS 0 #endif #ifndef SYS_UNIX #define SYS_UNIX 0 #endif #ifndef SYS_VMS #define SYS_VMS 0 #endif #include #if HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include #if HAVE_GETOPT # if HAVE_GETOPT_H # include # else extern char *optarg; extern int optind; # endif #endif #if HAVE_DBMALLOC_H #include #define NO_LEAKS 1 #endif #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE #define EXIT_FAILURE 1 #endif #if SYS_UNIX #define PATHSEP ':' #endif #if SYS_VMS #define PATHSEP ',' #define A_BOLD _BOLD #define KEY_UP SMG$K_TRM_UP #define KEY_DOWN SMG$K_TRM_DOWN #define KEY_LEFT SMG$K_TRM_LEFT #define KEY_RIGHT SMG$K_TRM_RIGHT #define KEY_NPAGE SMG$K_TRM_PF3 #define KEY_PPAGE SMG$K_TRM_PF4 #define wattrset(w,a) wsetattr(w,a) #define wattrclr(w,a) wclrattr(w,a) #define HAVE_BEEP 1 #endif #if SYS_MSDOS #define PATHSEP ';' #include #define HAVE_BEEP 1 #define HAVE_KEYPAD 1 #endif /* * Local declarations: */ #ifndef min #define min(a,b) ((a)<(b)?(a):(b)) #endif #ifndef max #define max(a,b) ((a)>(b)?(a):(b)) #endif #define MAXPATH 256 #define MAXBFR 132 #undef SIZEOF #define SIZEOF(v) (sizeof(v)/sizeof(v[0])) /* Tests for special character types */ #define CTL(c) ((c) & 0x1f) #define VI_UP 'k' #define VI_DOWN 'j' #define VI_LEFT 'h' #define VI_RIGHT 'l' #define VI_PPAGE CTL('B') #define VI_NPAGE CTL('F') #define UCH(c) ((unsigned char)c) #define isAscii(c) ((c) < 128) /* isascii isn't portable */ #define isReturn(c) ((c) == '\r' || (c) == '\n') #define isDigit(c) (isAscii(c) && isdigit(UCH(c))) #define LastData(np) ((np)->next == 0) /* Operators */ #define OP_ADD '+' #define OP_SUB '-' #define OP_NEG '~' #define OP_MUL '*' #define OP_DIV '/' #define OP_INT '%' #define OP_TAX '$' #define DefaultOp(np) np->cmd /* Miscellaneous characters */ #define L_PAREN '(' #define R_PAREN ')' #define EQUALS '=' #define PERIOD '.' #define COMMA ',' #define COLON ':' #define EOS '\0' /* * Local types */ typedef int Bool; typedef double Value; /* provides more precision than 'long' */ #define DATA struct _oprs DATA { DATA *next; DATA *prev; char *txt; /* comment, if any */ char cmd; /* operator */ Bool psh; /* true if we use left paren instead of 'val' */ int dot; /* number of digits past '.' */ Value val; /* operand value */ Value sum; /* running total */ Value aux; /* auxiliary value (derived from 'val') */ }; #endif /* ADD_H */