Add dc(1) sources
This commit is contained in:
commit
6fcea8b76c
|
@ -0,0 +1,30 @@
|
||||||
|
Copyright (c) 1980, 1993
|
||||||
|
The Regents of the University of California. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
3. All advertising materials mentioning features or use of this software
|
||||||
|
must display the following acknowledgement:
|
||||||
|
This product includes software developed by the University of
|
||||||
|
California, Berkeley and its contributors.
|
||||||
|
4. Neither the name of the University nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2003 Gunnar Ritter
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute
|
||||||
|
it freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
|
@ -0,0 +1,31 @@
|
||||||
|
Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
Redistributions of source code and documentation must retain the
|
||||||
|
above copyright notice, this list of conditions and the following
|
||||||
|
disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
All advertising materials mentioning features or use of this software
|
||||||
|
must display the following acknowledgement:
|
||||||
|
This product includes software developed or owned by Caldera
|
||||||
|
International, Inc.
|
||||||
|
Neither the name of Caldera International, Inc. nor the names of
|
||||||
|
other contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
|
||||||
|
INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,5 @@
|
||||||
|
dc.1 and dc.h are derived from Unix 7th edition. See LICENSE.v7
|
||||||
|
dc.c is derived from 4.4BSD. See LICENSE.bsd
|
||||||
|
|
||||||
|
Additionally, the files have been modified by Gunnar Ritter. See
|
||||||
|
LICENSE.gritter
|
|
@ -0,0 +1,231 @@
|
||||||
|
.\"
|
||||||
|
.\" Sccsid @(#)dc.1 1.5 (gritter) 1/11/03
|
||||||
|
.\" Derived from dc(1), Unix 7th edition:
|
||||||
|
.\" Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" Redistributions of source code and documentation must retain the
|
||||||
|
.\" above copyright notice, this list of conditions and the following
|
||||||
|
.\" disclaimer.
|
||||||
|
.\" Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\" All advertising materials mentioning features or use of this software
|
||||||
|
.\" must display the following acknowledgement:
|
||||||
|
.\" This product includes software developed or owned by Caldera
|
||||||
|
.\" International, Inc.
|
||||||
|
.\" Neither the name of Caldera International, Inc. nor the names of
|
||||||
|
.\" other contributors may be used to endorse or promote products
|
||||||
|
.\" derived from this software without specific prior written permission.
|
||||||
|
.\"
|
||||||
|
.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
|
||||||
|
.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE
|
||||||
|
.\" LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
.TH DC 1 "1/11/03" "Heirloom Toolchest" "User Commands"
|
||||||
|
.SH NAME
|
||||||
|
dc \- desk calculator
|
||||||
|
.SH SYNOPSIS
|
||||||
|
\fBdc\fR [\fIfile\fR]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.I Dc
|
||||||
|
is an arbitrary precision arithmetic package.
|
||||||
|
Ordinarily it operates on decimal integers,
|
||||||
|
but one may specify an input base, output base,
|
||||||
|
and a number of fractional digits to be maintained.
|
||||||
|
The overall structure of
|
||||||
|
.I dc
|
||||||
|
is
|
||||||
|
a stacking (reverse Polish) calculator.
|
||||||
|
If an argument is given,
|
||||||
|
input is taken from that file until its end,
|
||||||
|
then from the standard input.
|
||||||
|
The following constructions are recognized:
|
||||||
|
.HP 6
|
||||||
|
number
|
||||||
|
.br
|
||||||
|
The value of the number is pushed on the stack.
|
||||||
|
A number is an unbroken string of the digits 0-9.
|
||||||
|
It may be preceded by an underscore _ to input a
|
||||||
|
negative number.
|
||||||
|
Numbers may contain decimal points.
|
||||||
|
.HP 6
|
||||||
|
+ \- / * % ^
|
||||||
|
.br
|
||||||
|
The
|
||||||
|
top two values on the stack are added
|
||||||
|
(+),
|
||||||
|
subtracted
|
||||||
|
(\-),
|
||||||
|
multiplied (*),
|
||||||
|
divided (/),
|
||||||
|
remaindered (%),
|
||||||
|
or exponentiated (^).
|
||||||
|
The two entries are popped off the stack;
|
||||||
|
the result is pushed on the stack in their place.
|
||||||
|
Any fractional part of an exponent is ignored.
|
||||||
|
.TP
|
||||||
|
.BI s x
|
||||||
|
The
|
||||||
|
top of the stack is popped and stored into
|
||||||
|
a register named
|
||||||
|
.I x,
|
||||||
|
where
|
||||||
|
.I x
|
||||||
|
may be any character.
|
||||||
|
If
|
||||||
|
the
|
||||||
|
.B s
|
||||||
|
is capitalized,
|
||||||
|
.I x
|
||||||
|
is treated as a stack and the value is pushed on it.
|
||||||
|
.TP
|
||||||
|
.BI l x
|
||||||
|
The
|
||||||
|
value in register
|
||||||
|
.I x
|
||||||
|
is pushed on the stack.
|
||||||
|
The register
|
||||||
|
.I x
|
||||||
|
is not altered.
|
||||||
|
All registers start with zero value.
|
||||||
|
If the
|
||||||
|
.B l
|
||||||
|
is capitalized,
|
||||||
|
register
|
||||||
|
.I x
|
||||||
|
is treated as a stack and its top value is popped onto the main stack.
|
||||||
|
.TP
|
||||||
|
.B d
|
||||||
|
The
|
||||||
|
top value on the stack is duplicated.
|
||||||
|
.TP
|
||||||
|
.B p
|
||||||
|
The top value on the stack is printed.
|
||||||
|
The top value remains unchanged.
|
||||||
|
.B P
|
||||||
|
interprets the top of the stack as an ascii string,
|
||||||
|
removes it, and prints it.
|
||||||
|
.TP
|
||||||
|
.B f
|
||||||
|
All values on the stack and in registers are printed.
|
||||||
|
.TP
|
||||||
|
.B q
|
||||||
|
exits the program.
|
||||||
|
If executing a string, the recursion level is
|
||||||
|
popped by two.
|
||||||
|
If
|
||||||
|
.B q
|
||||||
|
is capitalized,
|
||||||
|
the top value on the stack is popped and the string execution level is popped
|
||||||
|
by that value.
|
||||||
|
.TP
|
||||||
|
.B x
|
||||||
|
treats the top element of the stack as a character string
|
||||||
|
and executes it as a string of dc commands.
|
||||||
|
.TP
|
||||||
|
.B X
|
||||||
|
replaces the number on the top of the stack with its scale factor.
|
||||||
|
.TP
|
||||||
|
.B "[ ... ]"
|
||||||
|
puts the bracketed ascii string onto the top of the stack.
|
||||||
|
.HP 6
|
||||||
|
.I "<x >x =x"
|
||||||
|
.br
|
||||||
|
The
|
||||||
|
top two elements of the stack are popped and compared.
|
||||||
|
Register
|
||||||
|
.I x
|
||||||
|
is executed if they obey the stated
|
||||||
|
relation.
|
||||||
|
.TP
|
||||||
|
.B v
|
||||||
|
replaces the top element on the stack by its square root.
|
||||||
|
Any existing fractional part of the argument is taken
|
||||||
|
into account, but otherwise the scale factor is ignored.
|
||||||
|
.TP
|
||||||
|
.B !
|
||||||
|
interprets the rest of the line as a UNIX command.
|
||||||
|
.TP
|
||||||
|
.B c
|
||||||
|
All values on the stack are popped.
|
||||||
|
.TP
|
||||||
|
.B i
|
||||||
|
The top value on the stack is popped and used as the
|
||||||
|
number radix for further input.
|
||||||
|
.B I
|
||||||
|
pushes the input base on the top of the stack.
|
||||||
|
.TP
|
||||||
|
.B o
|
||||||
|
The top value on the stack is popped and used as the
|
||||||
|
number radix for further output.
|
||||||
|
.TP
|
||||||
|
.SM
|
||||||
|
.B O
|
||||||
|
pushes the output base on the top of the stack.
|
||||||
|
.TP
|
||||||
|
.B k
|
||||||
|
the top of the stack is popped, and that value is used as
|
||||||
|
a non-negative scale factor:
|
||||||
|
the appropriate number of places
|
||||||
|
are printed on output,
|
||||||
|
and maintained during multiplication, division, and exponentiation.
|
||||||
|
The interaction of scale factor,
|
||||||
|
input base, and output base will be reasonable if all are changed
|
||||||
|
together.
|
||||||
|
.TP
|
||||||
|
.B z
|
||||||
|
The stack level is pushed onto the stack.
|
||||||
|
.TP
|
||||||
|
.SM
|
||||||
|
.B Z
|
||||||
|
replaces the number on the top of the stack with its length.
|
||||||
|
.TP
|
||||||
|
.B ?
|
||||||
|
A line of input is taken from the input source (usually the terminal)
|
||||||
|
and executed.
|
||||||
|
.TP
|
||||||
|
.B "; :"
|
||||||
|
are used by
|
||||||
|
.I bc
|
||||||
|
for array operations.
|
||||||
|
.PP
|
||||||
|
An example which prints the first ten values of n! is
|
||||||
|
.nf
|
||||||
|
.PP
|
||||||
|
.in +3
|
||||||
|
[la1+dsa*pla10>y]sy
|
||||||
|
.br
|
||||||
|
0sa1
|
||||||
|
.br
|
||||||
|
lyx
|
||||||
|
.fi
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
bc(1),
|
||||||
|
which is a preprocessor for
|
||||||
|
.I dc
|
||||||
|
providing infix notation and a C-like syntax
|
||||||
|
which implements functions and reasonable control
|
||||||
|
structures for programs.
|
||||||
|
.SH DIAGNOSTICS
|
||||||
|
`x is unimplemented' where x is an octal number.
|
||||||
|
.br
|
||||||
|
`stack empty' for not enough elements on the stack to do what was asked.
|
||||||
|
.br
|
||||||
|
`Out of space' when the free list is exhausted (too many digits).
|
||||||
|
.br
|
||||||
|
`Out of headers' for too many numbers being kept around.
|
||||||
|
.br
|
||||||
|
`Out of pushdown' for too many items on the stack.
|
||||||
|
.br
|
||||||
|
`Nesting Depth' for too many levels of nested execution.
|
|
@ -0,0 +1,203 @@
|
||||||
|
/* from Unix 7th Edition /usr/src/cmd/dc/dc.h */
|
||||||
|
/*
|
||||||
|
* Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* Redistributions of source code and documentation must retain the
|
||||||
|
* above copyright notice, this list of conditions and the following
|
||||||
|
* disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed or owned by Caldera
|
||||||
|
* International, Inc.
|
||||||
|
* Neither the name of Caldera International, Inc. nor the names of
|
||||||
|
* other contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
|
||||||
|
* INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Sccsid @(#)dc.h 1.9 (gritter) 2/4/05> */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#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
|
||||||
|
#ifdef interdata
|
||||||
|
#define NEGBYTE 0200
|
||||||
|
#define MASK (-1 & ~0377)
|
||||||
|
#define sgetc(p) ( ((p)->rd==(p)->wt) ? EOF :( ((*(p)->rd & NEGBYTE) != 0) ? ( *(p)->rd++ | MASK): *(p)->rd++ ))
|
||||||
|
#define slookc(p) ( ((p)->rd==(p)->wt) ? EOF :( ((*(p)->rd & NEGBYTE) != 0) ? (*(p)->rd | MASK) : *(p)->rd ))
|
||||||
|
#define sbackc(p) ( ((p)->rd==(p)->beg) ? EOF :( ((*(--(p)->rd) & NEGBYTE) != 0) ? (*(p)->rd | MASK): *(p)->rd ))
|
||||||
|
#endif
|
||||||
|
#ifndef interdata
|
||||||
|
#define sgetc(p) (((p)->rd==(p)->wt)?EOF:*(p)->rd++)
|
||||||
|
#define slookc(p) (((p)->rd==(p)->wt)?EOF:*(p)->rd)
|
||||||
|
#define sbackc(p) (((p)->rd==(p)->beg)?EOF:*(--(p)->rd))
|
||||||
|
#endif
|
||||||
|
#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) {int _c = (x); if (_c) {printf("%c",_c); if(--count == 0){printf("\\\n"); count=ll;} } }
|
||||||
|
#define TEST2(b) { OUTC(b[0] & 0377); OUTC(b[1] & 0377); }
|
||||||
|
#define EMPTY if(stkerr != 0){printf("stack empty\n"); continue; }
|
||||||
|
#define EMPTYR(x) if(stkerr!=0){pushp(x);printf("stack empty\n");continue;}
|
||||||
|
#define EMPTYS if(stkerr != 0){printf("stack empty\n"); return(1);}
|
||||||
|
#define EMPTYSR(x) if(stkerr !=0){printf("stack empty\n");pushp(x);return(1);}
|
||||||
|
#define error(p) {printf(p); continue; }
|
||||||
|
#define errorrt(p) {printf(p); return(1); }
|
||||||
|
struct blk {
|
||||||
|
char *rd;
|
||||||
|
char *wt;
|
||||||
|
char *beg;
|
||||||
|
char *last;
|
||||||
|
};
|
||||||
|
struct blk *hfree;
|
||||||
|
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;
|
||||||
|
int neg;
|
||||||
|
struct sym {
|
||||||
|
struct sym *next;
|
||||||
|
struct blk *val;
|
||||||
|
} symlst[TBLSZ];
|
||||||
|
struct sym *stable[TBLSZ];
|
||||||
|
struct sym *sptr,*sfree;
|
||||||
|
struct wblk {
|
||||||
|
struct blk **rdw;
|
||||||
|
struct blk **wtw;
|
||||||
|
struct blk **begw;
|
||||||
|
struct blk **lastw;
|
||||||
|
};
|
||||||
|
FILE *fsave;
|
||||||
|
long rel;
|
||||||
|
long nbytes;
|
||||||
|
long all;
|
||||||
|
long headmor;
|
||||||
|
long obase;
|
||||||
|
int fw,fw1,ll;
|
||||||
|
int (*outdit)(struct blk *, int, int);
|
||||||
|
int logo;
|
||||||
|
int log_10;
|
||||||
|
int count;
|
||||||
|
char *pp;
|
||||||
|
char *dummy;
|
||||||
|
|
||||||
|
#define div(a, b) dcdiv(a, b)
|
||||||
|
#define sqrt(a) dcsqrt(a)
|
||||||
|
#define exp(a, b) dcexp(a, b)
|
||||||
|
#define getwd(a) dcgetwd(a)
|
||||||
|
extern void commnds(void);
|
||||||
|
extern struct blk *div(struct blk *, struct blk *);
|
||||||
|
extern int dscale(void);
|
||||||
|
extern struct blk *removr(struct blk *, int);
|
||||||
|
extern struct blk *sqrt(struct blk *);
|
||||||
|
extern struct blk *exp(struct blk *, struct blk *);
|
||||||
|
extern void init(int, char *[]);
|
||||||
|
extern void onintr(int);
|
||||||
|
extern void pushp(struct blk *);
|
||||||
|
extern struct blk *pop(void);
|
||||||
|
extern struct blk *readin(void);
|
||||||
|
extern struct blk *add0(struct blk *, int);
|
||||||
|
extern struct blk *mult(struct blk *, struct blk *);
|
||||||
|
extern void chsign(struct blk *);
|
||||||
|
extern int readc(void);
|
||||||
|
extern void unreadc(char);
|
||||||
|
extern void binop(char);
|
||||||
|
extern void print(struct blk *);
|
||||||
|
extern struct blk *getdec(struct blk *, int);
|
||||||
|
extern void tenot(struct blk *, int);
|
||||||
|
extern void oneot(struct blk *, int, char);
|
||||||
|
extern void hexot(struct blk *, int, int);
|
||||||
|
extern void bigot(struct blk *, int, int);
|
||||||
|
extern struct blk *add(struct blk *, struct blk *);
|
||||||
|
extern int eqk(void);
|
||||||
|
extern struct blk *removc(struct blk *, int);
|
||||||
|
extern struct blk *scalint(struct blk *);
|
||||||
|
extern struct blk *scale(struct blk *, int);
|
||||||
|
extern int subt(void);
|
||||||
|
extern int command(void);
|
||||||
|
extern int cond(char);
|
||||||
|
extern void load(void);
|
||||||
|
extern int log_2(long);
|
||||||
|
extern struct blk *salloc(int);
|
||||||
|
extern struct blk *morehd(void);
|
||||||
|
extern struct blk *copy(struct blk *, int);
|
||||||
|
extern void sdump(char *, struct blk *);
|
||||||
|
extern void seekc(struct blk *, int);
|
||||||
|
extern void salterwd(struct wblk *, struct blk *);
|
||||||
|
extern void more(struct blk *);
|
||||||
|
extern void ospace(char *);
|
||||||
|
extern void garbage(char *);
|
||||||
|
extern void redef(struct blk *);
|
||||||
|
extern void release(register struct blk *);
|
||||||
|
extern struct blk *getwd(struct blk *);
|
||||||
|
extern void putwd(struct blk *, struct blk *);
|
||||||
|
extern struct blk *lookwd(struct blk *);
|
||||||
|
extern char *nalloc(register char *, unsigned);
|
||||||
|
extern void *srealloc(void *, size_t);
|
||||||
|
|
||||||
|
#if defined (__GLIBC__) && defined (_IO_getc_unlocked)
|
||||||
|
#undef getc
|
||||||
|
#define getc(f) _IO_getc_unlocked(f)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BC_BASE_MAX
|
||||||
|
#define BC_BASE_MAX 99
|
||||||
|
#endif
|
||||||
|
#ifndef BC_DIM_MAX
|
||||||
|
#define BC_DIM_MAX 2048
|
||||||
|
#endif
|
Loading…
Reference in New Issue