root/usr/src/cmd/dc/dc.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/*        All Rights Reserved   */

#define FATAL 0
#define NFATAL 1
#define BLK sizeof (struct blk)
#define PTRSZ sizeof (int *)
#define HEADSZ 1024
#define STKSZ 100
#define RDSKSZ 100
#define TBLSZ 256
#define ARRAYST 0241
#define NL 1
#define NG 2
#define NE 3
#define length(p) ((p)->wt-(p)->beg)
#define rewind(p) ((p)->rd = (p)->beg)
#define create(p)       ((p)->rd = (p)->wt = (p)->beg)
#define fsfile(p)       ((p)->rd = (p)->wt)
#define truncate(p)     ((p)->wt = (p)->rd)
#define sfeof(p)        (((p)->rd >= (p)->wt) ? 1 : 0)
#define sfbeg(p)        (((p)->rd == (p)->beg) ? 1 : 0)
#define sungetc(p, c)   (*(--(p)->rd) = c)
#define sgetc(p)        (((p)->rd == (p)->wt) ? EOF: ctoint((int)*(p)->rd++))
#define slookc(p)       (((p)->rd == (p)->wt) ? EOF: ctoint((int)*(p)->rd))
#define sbackc(p)       (((p)->rd == (p)->beg) ? EOF: ctoint((int)*(--(p)->rd)))
#define sputc(p, c)     {if ((p)->wt == (p)->last) more(p); *(p)->wt++ = c; }
#define salterc(p, c)   {if ((p)->rd == (p)->last) more(p); *(p)->rd++ = c;\
                            if ((p)->rd > (p)->wt) (p)->wt = (p)->rd; }
#define sunputc(p)      (*((p)->rd = --(p)->wt))
#define zero(p)         for (pp = (p)->beg; pp < (p)->last; ) *pp++ = '\0'
#define OUTC(x) {printf("%c", x); if (--count == 0)\
                            {printf("\\\n"); count = ll; } }
#define TEST2   {if ((count -= 2) <= 0) {printf("\\\n"); count = ll; } }
#define PRINT_MESSAGE   printf(gettext("stack empty\n"))
#define EMPTY           if (stkerr != 0) {PRINT_MESSAGE; continue; }
#define EMPTYR(x)       if (stkerr != 0) {pushp(x); PRINT_MESSAGE; continue; }
#define EMPTYS          if (stkerr != 0) {PRINT_MESSAGE; return (1); }
#define EMPTYSR(x)      if (stkerr != 0) {PRINT_MESSAGE; pushp(x); return (1); }
#define CHECKEND        { \
                                if (count == 2) { \
                                        printf("\\\n"); \
                                        count = ll; \
                                } \
                        }
#define error(p)        {printf(p); continue; }
#define errorrt(p)      {printf(p); return (1); }
struct blk {
        char    *rd;
        char    *wt;
        char    *beg;
        char    *last;
};
struct  wblk {
        struct blk **rdw;
        struct blk **wtw;
        struct blk **begw;
        struct blk **lastw;
};
struct  blk *hfree;
struct  blk *getwd(struct blk *);
struct  blk *lookwd(struct blk *);
struct  blk *getdec(struct blk *, int);
struct  blk *morehd(void);

struct  blk *arg1, *arg2;
int     svargc;
char    savk;
char    **svargv;
int     dbg;
int     ifile;
FILE    *curfile;
struct  blk *scalptr, *basptr, *tenptr, *inbas;
struct  blk *sqtemp, *chptr, *strptr, *divxyz;
struct  blk *stack[STKSZ];
struct  blk **stkptr, **stkbeg;
struct  blk **stkend;
int     stkerr;
int     lastchar;
struct  blk *readstk[RDSKSZ];
struct  blk **readptr;
struct  blk *rem;
int     k;
struct  blk *irem;
int     skd, skr;
struct  blk *pop(void), *readin(void), *add0(struct blk *, int),
    *mult(struct blk *, struct blk *);
struct  blk *scalint(struct blk *);
struct  blk *removc(struct blk *, int);
struct  blk *add(struct blk *, struct blk *),
    *dcdiv(struct blk *, struct blk *), *removr(struct blk *, int);
struct  blk *exp(struct blk *, struct blk *);
struct  blk *sqrt(struct blk *);
struct  blk *salloc(int), *copy(struct blk *, int);
struct  blk *scale(struct blk *, int);
void    commnds(void);
void    init(int, char **);
void    pushp(struct blk *p);
void    chsign(struct blk *p);
char    readc(void);
void    unreadc(char);
void    binop(char);
void    print(struct blk *hptr);
void    tenot(struct blk *p, int sc);
void    oneot(struct blk *p, int sc, char ch);
void    seekc(struct blk *hptr, int n);
void    ospace(char *s);
void    garbage(char *s);
void    more(struct blk *hptr);
int     cond(char c);
void    load(void);
void    sdump(char *s1, struct blk *hptr);
void    salterwd(struct wblk *hptr, struct blk *n);
void    redef(struct blk *p);
void    release(struct blk *p);
void    putwd(struct blk *p, struct blk *c);

int     neg;
struct  sym {
        struct  sym *next;
        struct  blk *val;
} symlst[TBLSZ];
struct  sym *stable[TBLSZ];
struct  sym *sptr, *sfree;
FILE    *fsave;
long    rel;
long    nbytes;
long    all;
long    headmor;
long    obase;
int     fw, fw1, ll;
void    (*outdit)(struct blk *, int);
void    bigot(struct blk *, int), hexot(struct blk *, int);
int     logo;
int     log10;
int     count;
char    *pp;
void    onintr(int);
char    *nalloc(char *, unsigned int);
char    *dummy;