Logo Search packages:      
Sourcecode: tapecalc version File versions  Download package

add.h

/******************************************************************************
 * 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 <config.h>    /* 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    <stdlib.h>

#if HAVE_UNISTD_H
#include    <unistd.h>
#endif

#include    <stdio.h>
#include    <ctype.h>
#include    <errno.h>
#include    <string.h>
#include    <math.h>
#include    <signal.h>
#include    <sys/types.h>
#include    <sys/stat.h>

#if HAVE_GETOPT
# if HAVE_GETOPT_H
#  include <getopt.h>
# else
   extern char    *optarg;
   extern int     optind;
# endif
#endif

#if HAVE_DBMALLOC_H
#include    <dbmalloc.h>
#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 <io.h>
#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 */

Generated by  Doxygen 1.6.0   Back to index