Import GNU bc 1.05a.
This commit is contained in:
parent
17f33912d7
commit
65865e2a46
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/bc/dist/; revision=56101
@ -1,3 +1,132 @@
|
|||||||
|
Fri Apr 17 10:40:59 1998 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* bc/main.c: Enable readline only if interactive.
|
||||||
|
|
||||||
|
Thu Apr 16 16:49:22 1998 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* bc/configure.in: Tweeking of AM_PROG_LEX and associated
|
||||||
|
special case goo for solaris.
|
||||||
|
|
||||||
|
Sat Mar 28 21:43:18 1998 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* bc/Makefile.am: Added "YFLAGS = -d" to get bc.h to build properly.
|
||||||
|
|
||||||
|
Mon Mar 9 12:54:42 PST 1998 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* doc/dc.texi, doc/dc.1: correct some documentation bugs.
|
||||||
|
|
||||||
|
Sun Mar 8 23:56:24 PST 1998 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* dc/numeric.c: eliminate superfluous variable from dc_dump_num();
|
||||||
|
annotate unused parameters in dc_add() and dc_sub().
|
||||||
|
|
||||||
|
* h/version.h: change dc version number to 1.2 for release.
|
||||||
|
|
||||||
|
Sun Mar 8 21:13:50 1998 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* bc/main.c: Applied patch from Ken Pizzini to force line
|
||||||
|
mode buffering on stdout.
|
||||||
|
|
||||||
|
Tue Jan 6 09:15:04 PST 1998 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* h/version.h: dc is now up to version 1.1.5.
|
||||||
|
|
||||||
|
* dc/eval.c, dc/numeric.c, doc/dc.texi, doc/dc.1: once again
|
||||||
|
changed the behavior of the 'P' command with a numeric argument
|
||||||
|
to make it more general. It now dumps out the *whole* number
|
||||||
|
(or rather, the whole of its positive integer portion) as a
|
||||||
|
byte stream. (For small values this is still the same as 'aP'.)
|
||||||
|
|
||||||
|
* dc/dc-proto.h, dc/dc.h, dc/eval.c, dc/misc.c, dc/numeric.c,
|
||||||
|
dc/stack.c, dc/string.c: Changed most uses of dc_boolean to
|
||||||
|
either dc_discard or dc_newline, and instances of DC_TRUE and
|
||||||
|
DC_FALSE to appropriate instances of DC_TOSS, DC_KEEP, DC_NONL,
|
||||||
|
or DC_WITHNL so that the code self-documents a little better.
|
||||||
|
|
||||||
|
Sun Jan 4 15:39:46 PST 1998 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* dc/eval.c, doc/dc.texi, doc/dc.1: Changed the functionality
|
||||||
|
of the 'P' command, and added the 'n' command. Due to
|
||||||
|
a quirk of the implementation of traditional dc, some
|
||||||
|
people have come to expect that the 'P' command on a
|
||||||
|
numeric argument in the range of 1 to 99 should output
|
||||||
|
the corresponding character, despite the fact that this
|
||||||
|
usage can have very weird results for numbers outside
|
||||||
|
that range. This functionality is why the 'a' command
|
||||||
|
was introduced last March, but people really want it to
|
||||||
|
"just work" without needing to use the 'a' command.
|
||||||
|
Bowing to this demand, the 'P' command now does the
|
||||||
|
equivalent of "aP" if the argument is numeric, and the
|
||||||
|
'n' command has been added to support the previous
|
||||||
|
functionality of the 'P' command.
|
||||||
|
|
||||||
|
* dc/misc.c, dc/eval.c, dc/stack.c, dc/dc-proto.h:
|
||||||
|
Changed prototype for dc_print(). It now additionally
|
||||||
|
takes two flags, newline_p and discard_p, which it
|
||||||
|
passes through to dc_out_num() and dc_out_str() as
|
||||||
|
needed.
|
||||||
|
|
||||||
|
* h/version.h: dc is now up to version 1.1.4.
|
||||||
|
|
||||||
|
Sat Sep 27 13:48:53 1997 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* h/version.h: dc is now up to version 1.1.3.
|
||||||
|
|
||||||
|
* dc/stack.c, dc/array.c, dc/dc-proto.h, doc/dc.texi, doc/dc.1:
|
||||||
|
It has come to my attention that, though undocumented,
|
||||||
|
traditional dc stacked its arrays in parallel with the
|
||||||
|
stacking of simple registers. I have now duplicated
|
||||||
|
this functionality.
|
||||||
|
|
||||||
|
* dc/dc.c, configure.in: line-buffer dc's output if setvbuf()
|
||||||
|
is supported. This was requested to simplify using dc as
|
||||||
|
an inferior process under emacs.
|
||||||
|
|
||||||
|
Fri Sep 26 19:56:15 1997 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* dc/dc.c: fixed bug reporting address for --help.
|
||||||
|
|
||||||
|
* doc/dc.1, doc/dc.texi: corrected documentation of the maximum
|
||||||
|
admissible input base.
|
||||||
|
|
||||||
|
* doc/dc.texi: corrected sample code equivalence for the | command.
|
||||||
|
|
||||||
|
* lib/number.c: added a warning for non-zero scale in the base
|
||||||
|
for bc_raisemod().
|
||||||
|
|
||||||
|
Fri Sep 26 18:15:31 1997 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* dc/eval.c, doc/dc.1, doc/dc.texi: added !=, !<, and !> commands.
|
||||||
|
|
||||||
|
* dc/eval.c: eliminated double-free in 'a' command.
|
||||||
|
|
||||||
|
* dc/dc.c: changed placment of check for filename "-" so that
|
||||||
|
"-f -" will work.
|
||||||
|
|
||||||
|
* h/version.h: updated dc version to 1.1.2.
|
||||||
|
|
||||||
|
Thu Sep 18 17:41:10 1997 Ken Pizzini <ken@halcyon.com>
|
||||||
|
|
||||||
|
* dc/eval.c: fixed off-by-one error for Q and q commands.
|
||||||
|
|
||||||
|
* dc/dc.c: added missing f: to third argument of getopt().
|
||||||
|
|
||||||
|
* h/version.h: updated dc version to 1.1.1.
|
||||||
|
|
||||||
|
Thu May 22 08:24:08 1997 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* lib/number.c(bc_sqrt): Fixed a bug that computed 0 for sqrt
|
||||||
|
of most numbers less than .000001.
|
||||||
|
|
||||||
|
Thu May 1 10:41:38 1997 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* Test/timetest: change path to bc executable.
|
||||||
|
|
||||||
|
Wed Apr 30 12:00:00 1997 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
|
* Froze bc-1.04, started new directory for bc-1.05.
|
||||||
|
Fixes to bc-1.04 will be distributed as bc-1.05.
|
||||||
|
|
||||||
Mon Apr 21 14:57:14 1997 Phil Nelson <phil@cs.wwu.edu>
|
Mon Apr 21 14:57:14 1997 Phil Nelson <phil@cs.wwu.edu>
|
||||||
|
|
||||||
* bc/scan.l: Changed rules for single line comment to work
|
* bc/scan.l: Changed rules for single line comment to work
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
# Makefile.in generated automatically by automake 1.1n from Makefile.am
|
# Makefile.in generated automatically by automake 1.3 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy, distribute and modify it.
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
@ -26,6 +32,8 @@ mandir = @mandir@
|
|||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
oldincludedir = /usr/include
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DISTDIR =
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
@ -43,14 +51,15 @@ INSTALL_DATA = @INSTALL_DATA@
|
|||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = true
|
NORMAL_INSTALL = :
|
||||||
PRE_INSTALL = true
|
PRE_INSTALL = :
|
||||||
POST_INSTALL = true
|
POST_INSTALL = :
|
||||||
NORMAL_UNINSTALL = true
|
NORMAL_UNINSTALL = :
|
||||||
PRE_UNINSTALL = true
|
PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = true
|
POST_UNINSTALL = :
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LEX = @LEX@
|
LEX = @LEX@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
@ -58,8 +67,6 @@ YACC = @YACC@
|
|||||||
|
|
||||||
SUBDIRS = lib bc dc doc
|
SUBDIRS = lib bc dc doc
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
CONFIG_HEADER_IN = config.h.in
|
|
||||||
CONFIG_HEADER_FULL = config.h
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
CONFIG_HEADER = config.h
|
CONFIG_HEADER = config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
@ -72,41 +79,42 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
|||||||
|
|
||||||
TAR = tar
|
TAR = tar
|
||||||
GZIP = --best
|
GZIP = --best
|
||||||
default: all
|
all: all-recursive-am all-am
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
$(srcdir)/aclocal.m4: configure.in
|
$(ACLOCAL_M4): configure.in
|
||||||
cd $(srcdir) && $(ACLOCAL)
|
cd $(srcdir) && $(ACLOCAL)
|
||||||
|
|
||||||
config.status: configure
|
config.status: $(srcdir)/configure
|
||||||
$(SHELL) ./config.status --recheck
|
$(SHELL) ./config.status --recheck
|
||||||
$(srcdir)/configure: configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||||
cd $(srcdir) && $(AUTOCONF)
|
cd $(srcdir) && $(AUTOCONF)
|
||||||
|
|
||||||
$(CONFIG_HEADER): stamp-h
|
config.h: stamp-h
|
||||||
stamp-h: $(CONFIG_HEADER_IN) $(top_builddir)/config.status
|
@:
|
||||||
|
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES= CONFIG_HEADERS=$(CONFIG_HEADER_FULL) \
|
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
|
||||||
$(SHELL) ./config.status
|
$(SHELL) ./config.status
|
||||||
@echo timestamp > stamp-h
|
@echo timestamp > stamp-h
|
||||||
$(srcdir)/$(CONFIG_HEADER_IN): stamp-h.in
|
$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
|
||||||
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
||||||
cd $(top_srcdir) && $(AUTOHEADER)
|
cd $(top_srcdir) && $(AUTOHEADER)
|
||||||
echo timestamp > $(srcdir)/stamp-h.in
|
@echo timestamp > $(srcdir)/stamp-h.in
|
||||||
|
|
||||||
mostlyclean-hdr:
|
mostlyclean-hdr:
|
||||||
|
|
||||||
clean-hdr:
|
clean-hdr:
|
||||||
|
|
||||||
distclean-hdr:
|
distclean-hdr:
|
||||||
rm -f $(CONFIG_HEADER)
|
-rm -f config.h
|
||||||
|
|
||||||
maintainer-clean-hdr:
|
maintainer-clean-hdr:
|
||||||
|
|
||||||
@ -121,14 +129,26 @@ maintainer-clean-hdr:
|
|||||||
|
|
||||||
all-recursive install-data-recursive install-exec-recursive \
|
all-recursive install-data-recursive install-exec-recursive \
|
||||||
installdirs-recursive install-recursive uninstall-recursive \
|
installdirs-recursive install-recursive uninstall-recursive \
|
||||||
check-recursive installcheck-recursive info-recursive dvi-recursive \
|
check-recursive installcheck-recursive info-recursive dvi-recursive:
|
||||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||||
maintainer-clean-recursive:
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||||
@for subdir in $(SUBDIRS); do \
|
|
||||||
target=`echo $@ | sed s/-recursive//`; \
|
target=`echo $@ | sed s/-recursive//`; \
|
||||||
echo "Making $$target in $$subdir"; \
|
echo "Making $$target in $$subdir"; \
|
||||||
(cd $$subdir && $(MAKE) $$target) \
|
(cd $$subdir && $(MAKE) $$target) \
|
||||||
|| case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \
|
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||||
|
done && test -z "$$fail"
|
||||||
|
|
||||||
|
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||||
|
maintainer-clean-recursive:
|
||||||
|
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||||
|
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||||
|
rev="$$subdir $$rev"; \
|
||||||
|
done; \
|
||||||
|
for subdir in $$rev; do \
|
||||||
|
target=`echo $@ | sed s/-recursive//`; \
|
||||||
|
echo "Making $$target in $$subdir"; \
|
||||||
|
(cd $$subdir && $(MAKE) $$target) \
|
||||||
|
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||||
done && test -z "$$fail"
|
done && test -z "$$fail"
|
||||||
tags-recursive:
|
tags-recursive:
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||||
@ -137,33 +157,40 @@ tags-recursive:
|
|||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
here=`pwd` && cd $(srcdir) \
|
||||||
|
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||||
|
|
||||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES)
|
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
|
||||||
tags=; \
|
tags=; \
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||||
done; \
|
done; \
|
||||||
test -z "$(ETAGS_ARGS)config.h.in$(SOURCES)$(HEADERS)$$tags" \
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
|
awk ' { files[$$0] = 1; } \
|
||||||
|
END { for (i in files) print i; }'`; \
|
||||||
|
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|
||||||
|
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
|
||||||
|
|
||||||
mostlyclean-tags:
|
mostlyclean-tags:
|
||||||
|
|
||||||
clean-tags:
|
clean-tags:
|
||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
rm -f TAGS ID
|
-rm -f TAGS ID
|
||||||
|
|
||||||
maintainer-clean-tags:
|
maintainer-clean-tags:
|
||||||
|
|
||||||
distdir = $(PACKAGE)-$(VERSION)
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
|
top_distdir = $(distdir)
|
||||||
|
|
||||||
# This target untars the dist file and tries a VPATH configuration. Then
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
# it guarantees that the distribution is self-contained by making another
|
# it guarantees that the distribution is self-contained by making another
|
||||||
# tarfile.
|
# tarfile.
|
||||||
distcheck: dist
|
distcheck: dist
|
||||||
rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
|
GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz
|
||||||
mkdir $(distdir)/=build
|
mkdir $(distdir)/=build
|
||||||
mkdir $(distdir)/=inst
|
mkdir $(distdir)/=inst
|
||||||
@ -176,43 +203,43 @@ distcheck: dist
|
|||||||
&& $(MAKE) install \
|
&& $(MAKE) install \
|
||||||
&& $(MAKE) installcheck \
|
&& $(MAKE) installcheck \
|
||||||
&& $(MAKE) dist
|
&& $(MAKE) dist
|
||||||
rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
@echo "========================"; \
|
@echo "========================"; \
|
||||||
echo "$(distdir).tar.gz is ready for distribution"; \
|
echo "$(distdir).tar.gz is ready for distribution"; \
|
||||||
echo "========================"
|
echo "========================"
|
||||||
dist: distdir
|
dist: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-chmod -R a+r $(distdir)
|
||||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
dist-all: distdir
|
dist-all: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-chmod -R a+r $(distdir)
|
||||||
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
mkdir $(distdir)
|
mkdir $(distdir)
|
||||||
-chmod 755 $(distdir)
|
-chmod 777 $(distdir)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||||
done
|
done
|
||||||
for subdir in $(SUBDIRS); do \
|
for subdir in $(SUBDIRS); do \
|
||||||
test -d $(distdir)/$$subdir \
|
test -d $(distdir)/$$subdir \
|
||||||
|| mkdir $(distdir)/$$subdir \
|
|| mkdir $(distdir)/$$subdir \
|
||||||
|| exit 1; \
|
|| exit 1; \
|
||||||
chmod 755 $(distdir)/$$subdir; \
|
chmod 777 $(distdir)/$$subdir; \
|
||||||
(cd $$subdir && $(MAKE) distdir=../$(distdir)/$$subdir distdir) \
|
(cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
|
||||||
|| exit 1; \
|
|| exit 1; \
|
||||||
done
|
done
|
||||||
$(MAKE) distdir="$(distdir)" dist-hook
|
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
|
||||||
info: info-recursive
|
info: info-recursive
|
||||||
dvi: dvi-recursive
|
dvi: dvi-recursive
|
||||||
check: all-am
|
check: all-am
|
||||||
$(MAKE) check-recursive
|
$(MAKE) check-recursive
|
||||||
installcheck: installcheck-recursive
|
installcheck: installcheck-recursive
|
||||||
all-recursive-am: $(CONFIG_HEADER)
|
all-recursive-am: config.h
|
||||||
$(MAKE) all-recursive
|
$(MAKE) all-recursive
|
||||||
|
|
||||||
all-am: Makefile config.h
|
all-am: Makefile config.h
|
||||||
@ -228,27 +255,25 @@ install: install-recursive
|
|||||||
|
|
||||||
uninstall: uninstall-recursive
|
uninstall: uninstall-recursive
|
||||||
|
|
||||||
all: all-recursive-am all-am
|
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||||
installdirs: installdirs-recursive
|
installdirs: installdirs-recursive
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
rm -f Makefile $(DISTCLEANFILES)
|
-rm -f Makefile $(DISTCLEANFILES)
|
||||||
rm -f config.cache config.log stamp-h
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||||
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
|
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
|
||||||
|
|
||||||
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
|
clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
|
||||||
@ -263,19 +288,18 @@ mostlyclean: mostlyclean-recursive mostlyclean-am
|
|||||||
clean: clean-recursive clean-am
|
clean: clean-recursive clean-am
|
||||||
|
|
||||||
distclean: distclean-recursive distclean-am
|
distclean: distclean-recursive distclean-am
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-recursive maintainer-clean-am
|
maintainer-clean: maintainer-clean-recursive maintainer-clean-am
|
||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
.PHONY: default mostlyclean-hdr distclean-hdr clean-hdr \
|
.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
|
||||||
maintainer-clean-hdr install-data-recursive uninstall-data-recursive \
|
install-data-recursive uninstall-data-recursive install-exec-recursive \
|
||||||
install-exec-recursive uninstall-exec-recursive installdirs-recursive \
|
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
|
||||||
uninstalldirs-recursive all-recursive check-recursive \
|
all-recursive check-recursive installcheck-recursive info-recursive \
|
||||||
installcheck-recursive info-recursive dvi-recursive \
|
dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
|
||||||
mostlyclean-recursive distclean-recursive clean-recursive \
|
|
||||||
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
|
maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
|
||||||
distclean-tags clean-tags maintainer-clean-tags distdir info dvi \
|
distclean-tags clean-tags maintainer-clean-tags distdir info dvi \
|
||||||
installcheck all-recursive-am all-am install-exec install-data install \
|
installcheck all-recursive-am all-am install-exec install-data install \
|
||||||
|
@ -1,4 +1,26 @@
|
|||||||
This is GNU bc version 1.04. (And dc version 1.0.4)
|
This is GNU bc version 1.05. (And dc version 1.2)
|
||||||
|
|
||||||
|
Changes in dc from 1.1 to 1.2:
|
||||||
|
added !< != !> commands
|
||||||
|
arrays now stack
|
||||||
|
output is now line buffered, provided setvbuf() is available
|
||||||
|
fixed known bugs in 'q', 'Q', 'a' commands, '-f' command-line option,
|
||||||
|
and documentation
|
||||||
|
changed the 'P' command's behavior on a numeric argument:
|
||||||
|
due to popular demand it now does the equivalent of 'aP'
|
||||||
|
(for small values)
|
||||||
|
added new 'n' command to do what the old 'P' command did
|
||||||
|
|
||||||
|
Changes in bc from 1.04 to 1.05:
|
||||||
|
Solaris makes work better.
|
||||||
|
bug fixes
|
||||||
|
stdout now always does line buffering.
|
||||||
|
sqrt bug fixed for small numbers.
|
||||||
|
readline (if support is compiled in) is enabled only for
|
||||||
|
interactive executions of bc.
|
||||||
|
|
||||||
|
|
||||||
|
This is GNU bc version 1.04. (And dc version 1.1)
|
||||||
|
|
||||||
Changes from 1.03
|
Changes from 1.03
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# Time the functions.
|
# Time the functions.
|
||||||
#
|
#
|
||||||
BC=../bc
|
BC=../bc/bc
|
||||||
SYSBC=/usr/bin/bc
|
SYSBC=/usr/bin/bc
|
||||||
for file in exp.b ln.b sine.b atan.b jn.b mul.b div.b raise.b sqrt.b
|
for file in exp.b ln.b sine.b atan.b jn.b mul.b div.b raise.b sqrt.b
|
||||||
do
|
do
|
||||||
|
59
contrib/bc/aclocal.m4
vendored
59
contrib/bc/aclocal.m4
vendored
@ -1,4 +1,14 @@
|
|||||||
dnl aclocal.m4 generated automatically by aclocal 1.1n
|
dnl aclocal.m4 generated automatically by aclocal 1.3
|
||||||
|
|
||||||
|
dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
|
dnl This Makefile.in is free software; the Free Software Foundation
|
||||||
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
dnl This program is distributed in the hope that it will be useful,
|
||||||
|
dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
dnl PARTICULAR PURPOSE.
|
||||||
|
|
||||||
# Do all the work for Automake. This macro actually does too much --
|
# Do all the work for Automake. This macro actually does too much --
|
||||||
# some checks are only needed if your package does certain things.
|
# some checks are only needed if your package does certain things.
|
||||||
@ -15,11 +25,15 @@ PACKAGE=[$1]
|
|||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
VERSION=[$2]
|
VERSION=[$2]
|
||||||
AC_SUBST(VERSION)
|
AC_SUBST(VERSION)
|
||||||
|
dnl test to see if srcdir already configured
|
||||||
|
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
||||||
|
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||||
|
fi
|
||||||
ifelse([$3],,
|
ifelse([$3],,
|
||||||
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
|
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
|
||||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
|
AC_DEFINE_UNQUOTED(VERSION, "$VERSION"))
|
||||||
AM_SANITY_CHECK
|
AC_REQUIRE([AM_SANITY_CHECK])
|
||||||
AC_ARG_PROGRAM
|
AC_REQUIRE([AC_ARG_PROGRAM])
|
||||||
dnl FIXME This is truly gross.
|
dnl FIXME This is truly gross.
|
||||||
missing_dir=`cd $ac_aux_dir && pwd`
|
missing_dir=`cd $ac_aux_dir && pwd`
|
||||||
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
||||||
@ -27,7 +41,7 @@ AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
|||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
AC_PROG_MAKE_SET])
|
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||||
|
|
||||||
|
|
||||||
# serial 1
|
# serial 1
|
||||||
@ -54,10 +68,21 @@ echo timestamp > conftestfile
|
|||||||
# directory).
|
# directory).
|
||||||
if (
|
if (
|
||||||
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
|
set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
|
||||||
if test "$@" = "X"; then
|
if test "[$]*" = "X"; then
|
||||||
# -L didn't work.
|
# -L didn't work.
|
||||||
set X `ls -t $srcdir/configure conftestfile`
|
set X `ls -t $srcdir/configure conftestfile`
|
||||||
fi
|
fi
|
||||||
|
if test "[$]*" != "X $srcdir/configure conftestfile" \
|
||||||
|
&& test "[$]*" != "X conftestfile $srcdir/configure"; then
|
||||||
|
|
||||||
|
# If neither matched, then we have a broken ls. This can happen
|
||||||
|
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||||
|
# broken ls alias from the environment. This has actually
|
||||||
|
# happened. Such a system could not be considered "sane".
|
||||||
|
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||||
|
alias in your environment])
|
||||||
|
fi
|
||||||
|
|
||||||
test "[$]2" = conftestfile
|
test "[$]2" = conftestfile
|
||||||
)
|
)
|
||||||
then
|
then
|
||||||
@ -76,7 +101,8 @@ AC_DEFUN(AM_MISSING_PROG,
|
|||||||
[AC_MSG_CHECKING(for working $2)
|
[AC_MSG_CHECKING(for working $2)
|
||||||
# Run test in a subshell; some versions of sh will print an error if
|
# Run test in a subshell; some versions of sh will print an error if
|
||||||
# an executable is not found, even if stderr is redirected.
|
# an executable is not found, even if stderr is redirected.
|
||||||
if ($2 --version) > /dev/null 2>&1; then
|
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||||
|
if ($2 --version) < /dev/null > /dev/null 2>&1; then
|
||||||
$1=$2
|
$1=$2
|
||||||
AC_MSG_RESULT(found)
|
AC_MSG_RESULT(found)
|
||||||
else
|
else
|
||||||
@ -95,6 +121,25 @@ dnl This file resides in the same directory as the config header
|
|||||||
dnl that is generated. We must strip everything past the first ":",
|
dnl that is generated. We must strip everything past the first ":",
|
||||||
dnl and everything past the last "/".
|
dnl and everything past the last "/".
|
||||||
AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
|
AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
|
||||||
test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl
|
ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
|
||||||
|
<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
|
||||||
|
<<am_indx=1
|
||||||
|
for am_file in <<$1>>; do
|
||||||
|
case " <<$>>CONFIG_HEADERS " in
|
||||||
|
*" <<$>>am_file "*<<)>>
|
||||||
|
echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
am_indx=`expr "<<$>>am_indx" + 1`
|
||||||
|
done<<>>dnl>>)
|
||||||
changequote([,]))])
|
changequote([,]))])
|
||||||
|
|
||||||
|
|
||||||
|
dnl AM_PROG_LEX
|
||||||
|
dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
|
||||||
|
AC_DEFUN(AM_PROG_LEX,
|
||||||
|
[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
|
||||||
|
AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
|
||||||
|
AC_PROG_LEX
|
||||||
|
AC_DECL_YYTEXT])
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@ datadir = $(prefix)/@DATADIRNAME@
|
|||||||
INCLUDES = -I$(srcdir) -I$(srcdir)/../h
|
INCLUDES = -I$(srcdir) -I$(srcdir)/../h
|
||||||
LDADD = ../lib/libbc.a @LEXLIB@
|
LDADD = ../lib/libbc.a @LEXLIB@
|
||||||
|
|
||||||
|
YFLAGS = -d
|
||||||
|
|
||||||
$(PROGRAMS): $(LDADD)
|
$(PROGRAMS): $(LDADD)
|
||||||
|
|
||||||
scan.o: bc.h
|
scan.o: bc.h
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
# Makefile.in generated automatically by automake 1.1n from Makefile.am
|
# Makefile.in generated automatically by automake 1.3 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy, distribute and modify it.
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
@ -25,6 +31,8 @@ mandir = @mandir@
|
|||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
oldincludedir = /usr/include
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DISTDIR =
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
@ -42,14 +50,15 @@ INSTALL_DATA = @INSTALL_DATA@
|
|||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = true
|
NORMAL_INSTALL = :
|
||||||
PRE_INSTALL = true
|
PRE_INSTALL = :
|
||||||
POST_INSTALL = true
|
POST_INSTALL = :
|
||||||
NORMAL_UNINSTALL = true
|
NORMAL_UNINSTALL = :
|
||||||
PRE_UNINSTALL = true
|
PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = true
|
POST_UNINSTALL = :
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LEX = @LEX@
|
LEX = @LEX@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
@ -70,6 +79,8 @@ datadir = $(prefix)/@DATADIRNAME@
|
|||||||
INCLUDES = -I$(srcdir) -I$(srcdir)/../h
|
INCLUDES = -I$(srcdir) -I$(srcdir)/../h
|
||||||
LDADD = ../lib/libbc.a @LEXLIB@
|
LDADD = ../lib/libbc.a @LEXLIB@
|
||||||
|
|
||||||
|
YFLAGS = -d
|
||||||
|
|
||||||
fbcOBJ = main.o bc.o scan.o execute.o global.o load.o storage.o util.o
|
fbcOBJ = main.o bc.o scan.o execute.o global.o load.o storage.o util.o
|
||||||
|
|
||||||
sbcOBJ = main.o sbc.o scan.o execute.o global.o load.o storage.o util.o
|
sbcOBJ = main.o sbc.o scan.o execute.o global.o load.o storage.o util.o
|
||||||
@ -92,7 +103,7 @@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
|||||||
LEXLIB = @LEXLIB@
|
LEXLIB = @LEXLIB@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||||
LINK = $(CC) $(LDFLAGS) -o $@
|
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
HEADERS = $(noinst_HEADERS)
|
HEADERS = $(noinst_HEADERS)
|
||||||
|
|
||||||
DIST_COMMON = Makefile.am Makefile.in bc.c scan.c
|
DIST_COMMON = Makefile.am Makefile.in bc.c scan.c
|
||||||
@ -105,14 +116,14 @@ GZIP = --best
|
|||||||
SOURCES = $(bc_SOURCES)
|
SOURCES = $(bc_SOURCES)
|
||||||
OBJECTS = $(bc_OBJECTS)
|
OBJECTS = $(bc_OBJECTS)
|
||||||
|
|
||||||
default: all
|
all: Makefile $(PROGRAMS) $(HEADERS)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .o .y .l
|
.SUFFIXES: .S .c .l .o .s .y
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu bc/Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps bc/Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
@ -120,7 +131,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
|||||||
mostlyclean-binPROGRAMS:
|
mostlyclean-binPROGRAMS:
|
||||||
|
|
||||||
clean-binPROGRAMS:
|
clean-binPROGRAMS:
|
||||||
test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||||
|
|
||||||
distclean-binPROGRAMS:
|
distclean-binPROGRAMS:
|
||||||
|
|
||||||
@ -128,30 +139,36 @@ maintainer-clean-binPROGRAMS:
|
|||||||
|
|
||||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
$(mkinstalldirs) $(bindir)
|
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||||
if test -f $$p; then \
|
if test -f $$p; then \
|
||||||
echo " $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`"; \
|
echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
|
||||||
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
else :; fi; \
|
else :; fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
uninstall-binPROGRAMS:
|
uninstall-binPROGRAMS:
|
||||||
$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||||
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
|
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
done
|
done
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(COMPILE) -c $<
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
rm -f *.o core
|
-rm -f *.o core *.core
|
||||||
|
|
||||||
clean-compile:
|
clean-compile:
|
||||||
|
|
||||||
distclean-compile:
|
distclean-compile:
|
||||||
rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
maintainer-clean-compile:
|
maintainer-clean-compile:
|
||||||
|
|
||||||
@ -159,39 +176,44 @@ bc: $(bc_OBJECTS) $(bc_DEPENDENCIES)
|
|||||||
@rm -f bc
|
@rm -f bc
|
||||||
$(LINK) $(bc_LDFLAGS) $(bc_OBJECTS) $(bc_LDADD) $(LIBS)
|
$(LINK) $(bc_LDFLAGS) $(bc_OBJECTS) $(bc_LDADD) $(LIBS)
|
||||||
.y.c:
|
.y.c:
|
||||||
$(YACC) $(YFLAGS) $< && mv y.tab.c $@
|
$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
|
||||||
if test -f y.tab.h; then \
|
if test -f y.tab.h; then \
|
||||||
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
|
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
|
||||||
else :; fi
|
else :; fi
|
||||||
|
bc.h: bc.c
|
||||||
|
|
||||||
.l.c:
|
.l.c:
|
||||||
$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
|
$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
here=`pwd` && cd $(srcdir) \
|
||||||
|
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||||
tags=; \
|
tags=; \
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
done; \
|
awk ' { files[$$0] = 1; } \
|
||||||
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|
END { for (i in files) print i; }'`; \
|
||||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||||
|
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||||
|
|
||||||
mostlyclean-tags:
|
mostlyclean-tags:
|
||||||
|
|
||||||
clean-tags:
|
clean-tags:
|
||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
rm -f TAGS ID
|
-rm -f TAGS ID
|
||||||
|
|
||||||
maintainer-clean-tags:
|
maintainer-clean-tags:
|
||||||
|
|
||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
subdir = bc
|
subdir = bc
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
@ -215,28 +237,26 @@ install: install-exec install-data all
|
|||||||
|
|
||||||
uninstall: uninstall-binPROGRAMS
|
uninstall: uninstall-binPROGRAMS
|
||||||
|
|
||||||
all: $(PROGRAMS) $(HEADERS) Makefile
|
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(bindir)
|
$(mkinstalldirs) $(DATADIR)$(bindir)
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
rm -f Makefile $(DISTCLEANFILES)
|
-rm -f Makefile $(DISTCLEANFILES)
|
||||||
rm -f config.cache config.log stamp-h
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||||
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
|
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
|
||||||
mostlyclean-tags mostlyclean-generic
|
mostlyclean-tags mostlyclean-generic
|
||||||
|
|
||||||
@ -245,7 +265,7 @@ clean: clean-binPROGRAMS clean-compile clean-tags clean-generic \
|
|||||||
|
|
||||||
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
|
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
|
||||||
distclean-generic clean
|
distclean-generic clean
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
||||||
maintainer-clean-tags maintainer-clean-generic \
|
maintainer-clean-tags maintainer-clean-generic \
|
||||||
@ -253,9 +273,9 @@ maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
|||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
|
||||||
.PHONY: default mostlyclean-binPROGRAMS distclean-binPROGRAMS \
|
.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
|
||||||
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
|
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
||||||
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
|
mostlyclean-compile distclean-compile clean-compile \
|
||||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||||
clean-tags maintainer-clean-tags distdir info dvi installcheck \
|
clean-tags maintainer-clean-tags distdir info dvi installcheck \
|
||||||
install-exec install-data install uninstall all installdirs \
|
install-exec install-data install uninstall all installdirs \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* main.c: The main program for bc. */
|
/* main.c: The main program for bc. */
|
||||||
|
|
||||||
/* This file is part of GNU bc.
|
/* This file is part of GNU bc.
|
||||||
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -150,6 +150,11 @@ main (argc, argv)
|
|||||||
quiet = FALSE;
|
quiet = FALSE;
|
||||||
file_names = NULL;
|
file_names = NULL;
|
||||||
|
|
||||||
|
#ifdef HAVE_SETVBUF
|
||||||
|
/* attempt to simplify interaction with applications such as emacs */
|
||||||
|
(void) setvbuf(stdout, NULL, _IOLBF, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Environment arguments. */
|
/* Environment arguments. */
|
||||||
env_value = getenv ("BC_ENV_ARGS");
|
env_value = getenv ("BC_ENV_ARGS");
|
||||||
if (env_value != NULL)
|
if (env_value != NULL)
|
||||||
@ -209,10 +214,12 @@ main (argc, argv)
|
|||||||
exit (1);
|
exit (1);
|
||||||
|
|
||||||
#ifdef READLINE
|
#ifdef READLINE
|
||||||
/* Readline support. Set both application name and input file. */
|
if (interactive) {
|
||||||
rl_readline_name = "bc";
|
/* Readline support. Set both application name and input file. */
|
||||||
rl_instream = stdin;
|
rl_readline_name = "bc";
|
||||||
using_history ();
|
rl_instream = stdin;
|
||||||
|
using_history ();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Do the parse. */
|
/* Do the parse. */
|
||||||
|
@ -46,6 +46,9 @@
|
|||||||
/* Define if you have the isgraph function. */
|
/* Define if you have the isgraph function. */
|
||||||
#undef HAVE_ISGRAPH
|
#undef HAVE_ISGRAPH
|
||||||
|
|
||||||
|
/* Define if you have the setvbuf function. */
|
||||||
|
#undef HAVE_SETVBUF
|
||||||
|
|
||||||
/* Define if you have the <lib.h> header file. */
|
/* Define if you have the <lib.h> header file. */
|
||||||
#undef HAVE_LIB_H
|
#undef HAVE_LIB_H
|
||||||
|
|
||||||
|
888
contrib/bc/configure
vendored
888
contrib/bc/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,14 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT(doc/bc.1)
|
AC_INIT(doc/bc.1)
|
||||||
AM_INIT_AUTOMAKE(bc, 1.04)
|
AM_INIT_AUTOMAKE(bc, 1.05)
|
||||||
AM_CONFIG_HEADER(config.h)
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_MINIX
|
AC_MINIX
|
||||||
dnl AC_ISC_POSIX
|
dnl AC_ISC_POSIX
|
||||||
|
|
||||||
|
AM_PROG_LEX
|
||||||
AC_PROG_YACC
|
AC_PROG_YACC
|
||||||
AC_DECL_YYTEXT
|
|
||||||
AC_PROG_LEX
|
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_RANLIB
|
AC_PROG_RANLIB
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
@ -21,30 +20,7 @@ AC_TYPE_SIZE_T
|
|||||||
AC_CHECK_TYPE(ptrdiff_t, size_t)
|
AC_CHECK_TYPE(ptrdiff_t, size_t)
|
||||||
|
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS(isgraph)
|
AC_CHECK_FUNCS(isgraph setvbuf)
|
||||||
|
|
||||||
|
|
||||||
AC_ARG_WITH(readline,[ --with-readline support fancy command input editing], [
|
|
||||||
if test "$with_readline" = "yes" ; then
|
|
||||||
echo Using the readline library.
|
|
||||||
AC_DEFINE(READLINE,1)
|
|
||||||
LIBS="$LIBS -lreadline -ltermcap"
|
|
||||||
bcrl=y
|
|
||||||
else
|
|
||||||
bcrl=n
|
|
||||||
fi
|
|
||||||
], [
|
|
||||||
bcrl=n
|
|
||||||
])
|
|
||||||
|
|
||||||
if test "$LEX" = "flex" ; then
|
|
||||||
LEX="flex -I8"
|
|
||||||
else
|
|
||||||
if test "$bcrl" = "y" ; then
|
|
||||||
AC_MSG_WARN(readline works only with flex.)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
SaveCFLAGS="$CFLAGS"
|
SaveCFLAGS="$CFLAGS"
|
||||||
CFLAGS="-g -O -I. -I$srcdir"
|
CFLAGS="-g -O -I. -I$srcdir"
|
||||||
@ -63,7 +39,49 @@ AC_DEFINE_UNQUOTED(BC_MATH_FILE,"${prefix}/lib/libmath.b")
|
|||||||
fi)
|
fi)
|
||||||
CFLAGS="$SaveCFLAGS"
|
CFLAGS="$SaveCFLAGS"
|
||||||
|
|
||||||
|
echo $LIBS
|
||||||
|
bcrl=nA
|
||||||
|
AC_ARG_WITH(readline,[ --with-readline support fancy command input editing], [
|
||||||
|
AC_CHECK_LIB(ncurses,tparm,TERMLIB=-lncurses,
|
||||||
|
AC_CHECK_LIB(termcap,tgetent,TERMLIB=-ltermcap))
|
||||||
|
saved_LIBS="$LIBS"
|
||||||
|
LIBS="$LIBS $TERMLIB"
|
||||||
|
AC_CHECK_LIB(readline,readline,
|
||||||
|
[AC_CHECK_HEADER(readline/readline.h,
|
||||||
|
LIBS="$saved_LIBS -lreadline $TERMLIB";bcrl=y)],
|
||||||
|
LIBS="$saved_LIBS")
|
||||||
|
if test "$bcrl" = "y" ; then
|
||||||
|
echo Using the readline library.
|
||||||
|
AC_DEFINE(READLINE,1)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
echo $LIBS
|
||||||
|
|
||||||
|
dnl AC_ARG_WITH(readline,[ --with-readline support fancy command input editing], [
|
||||||
|
dnl if test "$with_readline" = "yes" ; then
|
||||||
|
dnl echo Using the readline library.
|
||||||
|
dnl AC_DEFINE(READLINE,1)
|
||||||
|
dnl LIBS="$LIBS -lreadline -ltermcap"
|
||||||
|
dnl bcrl=y
|
||||||
|
dnl else
|
||||||
|
dnl bcrl=n
|
||||||
|
dnl fi
|
||||||
|
dnl ], [
|
||||||
|
dnl bcrl=n
|
||||||
|
dnl ])
|
||||||
|
|
||||||
|
if test "$LEX" = "flex" ; then
|
||||||
|
LEX="flex -I8"
|
||||||
|
else
|
||||||
|
if test "$bcrl" = "y" ; then
|
||||||
|
AC_MSG_WARN(readline works only with flex.)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$LEX" = "lex" -a `uname -s` = "SunOS" ; then
|
||||||
|
LEXLIB=""
|
||||||
|
echo "SunOS using lex does not have a -ll."
|
||||||
|
fi
|
||||||
|
|
||||||
AC_ARG_PROGRAM
|
AC_ARG_PROGRAM
|
||||||
AC_OUTPUT(Makefile bc/Makefile dc/Makefile doc/Makefile lib/Makefile)
|
AC_OUTPUT(Makefile bc/Makefile dc/Makefile doc/Makefile lib/Makefile)
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
# Makefile.in generated automatically by automake 1.1n from Makefile.am
|
# Makefile.in generated automatically by automake 1.3 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy, distribute and modify it.
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
@ -26,6 +32,8 @@ mandir = @mandir@
|
|||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
oldincludedir = /usr/include
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DISTDIR =
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
@ -43,14 +51,15 @@ INSTALL_DATA = @INSTALL_DATA@
|
|||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = true
|
NORMAL_INSTALL = :
|
||||||
PRE_INSTALL = true
|
PRE_INSTALL = :
|
||||||
POST_INSTALL = true
|
POST_INSTALL = :
|
||||||
NORMAL_UNINSTALL = true
|
NORMAL_UNINSTALL = :
|
||||||
PRE_UNINSTALL = true
|
PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = true
|
POST_UNINSTALL = :
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LEX = @LEX@
|
LEX = @LEX@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
@ -79,7 +88,7 @@ dc_DEPENDENCIES = ../lib/libbc.a
|
|||||||
dc_LDFLAGS =
|
dc_LDFLAGS =
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||||
LINK = $(CC) $(LDFLAGS) -o $@
|
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
HEADERS = $(noinst_HEADERS)
|
HEADERS = $(noinst_HEADERS)
|
||||||
|
|
||||||
DIST_COMMON = Makefile.am Makefile.in
|
DIST_COMMON = Makefile.am Makefile.in
|
||||||
@ -92,14 +101,14 @@ GZIP = --best
|
|||||||
SOURCES = $(dc_SOURCES)
|
SOURCES = $(dc_SOURCES)
|
||||||
OBJECTS = $(dc_OBJECTS)
|
OBJECTS = $(dc_OBJECTS)
|
||||||
|
|
||||||
default: all
|
all: Makefile $(PROGRAMS) $(HEADERS)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .o
|
.SUFFIXES: .S .c .o .s
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu dc/Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps dc/Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
@ -107,7 +116,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
|||||||
mostlyclean-binPROGRAMS:
|
mostlyclean-binPROGRAMS:
|
||||||
|
|
||||||
clean-binPROGRAMS:
|
clean-binPROGRAMS:
|
||||||
test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
|
||||||
|
|
||||||
distclean-binPROGRAMS:
|
distclean-binPROGRAMS:
|
||||||
|
|
||||||
@ -115,30 +124,36 @@ maintainer-clean-binPROGRAMS:
|
|||||||
|
|
||||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
$(mkinstalldirs) $(bindir)
|
$(mkinstalldirs) $(DESTDIR)$(bindir)
|
||||||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||||
if test -f $$p; then \
|
if test -f $$p; then \
|
||||||
echo " $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`"; \
|
echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
|
||||||
$(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
|
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
else :; fi; \
|
else :; fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
uninstall-binPROGRAMS:
|
uninstall-binPROGRAMS:
|
||||||
$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
||||||
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
|
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
|
||||||
done
|
done
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
$(COMPILE) -c $<
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
rm -f *.o core
|
-rm -f *.o core *.core
|
||||||
|
|
||||||
clean-compile:
|
clean-compile:
|
||||||
|
|
||||||
distclean-compile:
|
distclean-compile:
|
||||||
rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
maintainer-clean-compile:
|
maintainer-clean-compile:
|
||||||
|
|
||||||
@ -148,30 +163,33 @@ dc: $(dc_OBJECTS) $(dc_DEPENDENCIES)
|
|||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
here=`pwd` && cd $(srcdir) \
|
||||||
|
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||||
tags=; \
|
tags=; \
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
done; \
|
awk ' { files[$$0] = 1; } \
|
||||||
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|
END { for (i in files) print i; }'`; \
|
||||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||||
|
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||||
|
|
||||||
mostlyclean-tags:
|
mostlyclean-tags:
|
||||||
|
|
||||||
clean-tags:
|
clean-tags:
|
||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
rm -f TAGS ID
|
-rm -f TAGS ID
|
||||||
|
|
||||||
maintainer-clean-tags:
|
maintainer-clean-tags:
|
||||||
|
|
||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
subdir = dc
|
subdir = dc
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
@ -195,28 +213,26 @@ install: install-exec install-data all
|
|||||||
|
|
||||||
uninstall: uninstall-binPROGRAMS
|
uninstall: uninstall-binPROGRAMS
|
||||||
|
|
||||||
all: $(PROGRAMS) $(HEADERS) Makefile
|
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(bindir)
|
$(mkinstalldirs) $(DATADIR)$(bindir)
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
rm -f Makefile $(DISTCLEANFILES)
|
-rm -f Makefile $(DISTCLEANFILES)
|
||||||
rm -f config.cache config.log stamp-h
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||||
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
|
mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \
|
||||||
mostlyclean-tags mostlyclean-generic
|
mostlyclean-tags mostlyclean-generic
|
||||||
|
|
||||||
@ -225,7 +241,7 @@ clean: clean-binPROGRAMS clean-compile clean-tags clean-generic \
|
|||||||
|
|
||||||
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
|
distclean: distclean-binPROGRAMS distclean-compile distclean-tags \
|
||||||
distclean-generic clean
|
distclean-generic clean
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
||||||
maintainer-clean-tags maintainer-clean-generic \
|
maintainer-clean-tags maintainer-clean-generic \
|
||||||
@ -233,9 +249,9 @@ maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \
|
|||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
|
||||||
.PHONY: default mostlyclean-binPROGRAMS distclean-binPROGRAMS \
|
.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
|
||||||
clean-binPROGRAMS maintainer-clean-binPROGRAMS uninstall-binPROGRAMS \
|
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
||||||
install-binPROGRAMS mostlyclean-compile distclean-compile clean-compile \
|
mostlyclean-compile distclean-compile clean-compile \
|
||||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||||
clean-tags maintainer-clean-tags distdir info dvi installcheck \
|
clean-tags maintainer-clean-tags distdir info dvi installcheck \
|
||||||
install-exec install-data install uninstall all installdirs \
|
install-exec install-data install uninstall all installdirs \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* implement arrays for dc
|
* implement arrays for dc
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -39,20 +39,12 @@ struct dc_array {
|
|||||||
dc_data value;
|
dc_data value;
|
||||||
struct dc_array *next;
|
struct dc_array *next;
|
||||||
};
|
};
|
||||||
typedef struct dc_array dc_array;
|
|
||||||
|
|
||||||
/* I can find no reason not to place arrays in their own namespace... */
|
|
||||||
static dc_array *dc_array_register[DC_REGCOUNT];
|
|
||||||
|
|
||||||
|
|
||||||
/* initialize the arrays to their initial values */
|
/* initialize the arrays */
|
||||||
void
|
void
|
||||||
dc_array_init DC_DECLVOID()
|
dc_array_init DC_DECLVOID()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0; i<DC_REGCOUNT; ++i)
|
|
||||||
dc_array_register[i] = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store value into array_id[Index] */
|
/* store value into array_id[Index] */
|
||||||
@ -62,12 +54,11 @@ dc_array_set DC_DECLARG((array_id, Index, value))
|
|||||||
int Index DC_DECLSEP
|
int Index DC_DECLSEP
|
||||||
dc_data value DC_DECLEND
|
dc_data value DC_DECLEND
|
||||||
{
|
{
|
||||||
dc_array *cur;
|
struct dc_array *cur;
|
||||||
dc_array *prev=NULL;
|
struct dc_array *prev=NULL;
|
||||||
dc_array *newentry;
|
struct dc_array *newentry;
|
||||||
|
|
||||||
array_id = regmap(array_id);
|
cur = dc_get_stacked_array(array_id);
|
||||||
cur = dc_array_register[array_id];
|
|
||||||
while (cur && cur->Index < Index){
|
while (cur && cur->Index < Index){
|
||||||
prev = cur;
|
prev = cur;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
@ -88,7 +79,7 @@ dc_array_set DC_DECLARG((array_id, Index, value))
|
|||||||
if (prev)
|
if (prev)
|
||||||
prev->next = newentry;
|
prev->next = newentry;
|
||||||
else
|
else
|
||||||
dc_array_register[array_id] = newentry;
|
dc_set_stacked_array(array_id, newentry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,10 +90,30 @@ dc_array_get DC_DECLARG((array_id, Index))
|
|||||||
int array_id DC_DECLSEP
|
int array_id DC_DECLSEP
|
||||||
int Index DC_DECLEND
|
int Index DC_DECLEND
|
||||||
{
|
{
|
||||||
dc_array *cur;
|
struct dc_array *cur;
|
||||||
|
|
||||||
for (cur=dc_array_register[regmap(array_id)]; cur; cur=cur->next)
|
for (cur=dc_get_stacked_array(array_id); cur; cur=cur->next)
|
||||||
if (cur->Index == Index)
|
if (cur->Index == Index)
|
||||||
return dc_dup(cur->value);
|
return dc_dup(cur->value);
|
||||||
return dc_int2data(0);
|
return dc_int2data(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* free an array chain */
|
||||||
|
void
|
||||||
|
dc_array_free DC_DECLARG((a_head))
|
||||||
|
struct dc_array *a_head DC_DECLEND
|
||||||
|
{
|
||||||
|
struct dc_array *cur;
|
||||||
|
struct dc_array *next;
|
||||||
|
|
||||||
|
for (cur=a_head; cur; cur=next) {
|
||||||
|
next = cur->next;
|
||||||
|
if (cur->value.dc_type == DC_NUMBER)
|
||||||
|
dc_free_num(&cur->value.v.number);
|
||||||
|
else if (cur->value.dc_type == DC_STRING)
|
||||||
|
dc_free_str(&cur->value.v.string);
|
||||||
|
else
|
||||||
|
dc_garbage("in stack", -1);
|
||||||
|
free(cur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* prototypes of all externally visible dc functions
|
* prototypes of all externally visible dc functions
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -22,8 +22,10 @@
|
|||||||
extern const char *dc_str2charp DC_PROTO((dc_str));
|
extern const char *dc_str2charp DC_PROTO((dc_str));
|
||||||
extern const char *dc_system DC_PROTO((const char *));
|
extern const char *dc_system DC_PROTO((const char *));
|
||||||
extern void *dc_malloc DC_PROTO((size_t));
|
extern void *dc_malloc DC_PROTO((size_t));
|
||||||
|
extern struct dc_array *dc_get_stacked_array DC_PROTO((int));
|
||||||
|
|
||||||
extern void dc_array_set DC_PROTO((int, int, dc_data));
|
extern void dc_array_set DC_PROTO((int, int, dc_data));
|
||||||
|
extern void dc_array_free DC_PROTO((struct dc_array *));
|
||||||
extern void dc_array_init DC_PROTO((void));
|
extern void dc_array_init DC_PROTO((void));
|
||||||
extern void dc_binop DC_PROTO((int (*)(dc_num, dc_num, int, dc_num *), int));
|
extern void dc_binop DC_PROTO((int (*)(dc_num, dc_num, int, dc_num *), int));
|
||||||
extern void dc_binop2 DC_PROTO((int (*)(dc_num, dc_num, int,
|
extern void dc_binop2 DC_PROTO((int (*)(dc_num, dc_num, int,
|
||||||
@ -31,19 +33,21 @@ extern void dc_binop2 DC_PROTO((int (*)(dc_num, dc_num, int,
|
|||||||
extern void dc_triop DC_PROTO((int (*)(dc_num, dc_num, dc_num, int,
|
extern void dc_triop DC_PROTO((int (*)(dc_num, dc_num, dc_num, int,
|
||||||
dc_num *), int));
|
dc_num *), int));
|
||||||
extern void dc_clear_stack DC_PROTO((void));
|
extern void dc_clear_stack DC_PROTO((void));
|
||||||
|
extern void dc_dump_num(dc_num, dc_discard);
|
||||||
extern void dc_free_num DC_PROTO((dc_num *));
|
extern void dc_free_num DC_PROTO((dc_num *));
|
||||||
extern void dc_free_str DC_PROTO((dc_str *));
|
extern void dc_free_str DC_PROTO((dc_str *));
|
||||||
extern void dc_garbage DC_PROTO((const char *, int));
|
extern void dc_garbage DC_PROTO((const char *, int));
|
||||||
extern void dc_math_init DC_PROTO((void));
|
extern void dc_math_init DC_PROTO((void));
|
||||||
extern void dc_memfail DC_PROTO((void));
|
extern void dc_memfail DC_PROTO((void));
|
||||||
extern void dc_out_num DC_PROTO((dc_num, int, dc_boolean, dc_boolean));
|
extern void dc_out_num DC_PROTO((dc_num, int, dc_newline, dc_discard));
|
||||||
extern void dc_out_str DC_PROTO((dc_str, dc_boolean, dc_boolean));
|
extern void dc_out_str DC_PROTO((dc_str, dc_newline, dc_discard));
|
||||||
extern void dc_print DC_PROTO((dc_data, int));
|
extern void dc_print DC_PROTO((dc_data, int, dc_newline, dc_discard));
|
||||||
extern void dc_printall DC_PROTO((int));
|
extern void dc_printall DC_PROTO((int));
|
||||||
extern void dc_push DC_PROTO((dc_data));
|
extern void dc_push DC_PROTO((dc_data));
|
||||||
extern void dc_register_init DC_PROTO((void));
|
extern void dc_register_init DC_PROTO((void));
|
||||||
extern void dc_register_push DC_PROTO((int, dc_data));
|
extern void dc_register_push DC_PROTO((int, dc_data));
|
||||||
extern void dc_register_set DC_PROTO((int, dc_data));
|
extern void dc_register_set DC_PROTO((int, dc_data));
|
||||||
|
extern void dc_set_stacked_array DC_PROTO((int, struct dc_array *));
|
||||||
extern void dc_show_id DC_PROTO((FILE *, int, const char *));
|
extern void dc_show_id DC_PROTO((FILE *, int, const char *));
|
||||||
extern void dc_string_init DC_PROTO((void));
|
extern void dc_string_init DC_PROTO((void));
|
||||||
|
|
||||||
@ -51,13 +55,13 @@ extern int dc_cmpop DC_PROTO((void));
|
|||||||
extern int dc_compare DC_PROTO((dc_num, dc_num));
|
extern int dc_compare DC_PROTO((dc_num, dc_num));
|
||||||
extern int dc_evalfile DC_PROTO((FILE *));
|
extern int dc_evalfile DC_PROTO((FILE *));
|
||||||
extern int dc_evalstr DC_PROTO((dc_data));
|
extern int dc_evalstr DC_PROTO((dc_data));
|
||||||
extern int dc_num2int DC_PROTO((dc_num, dc_boolean));
|
extern int dc_num2int DC_PROTO((dc_num, dc_discard));
|
||||||
extern int dc_numlen DC_PROTO((dc_num));
|
extern int dc_numlen DC_PROTO((dc_num));
|
||||||
extern int dc_pop DC_PROTO((dc_data *));
|
extern int dc_pop DC_PROTO((dc_data *));
|
||||||
extern int dc_register_get DC_PROTO((int, dc_data *));
|
extern int dc_register_get DC_PROTO((int, dc_data *));
|
||||||
extern int dc_register_pop DC_PROTO((int, dc_data *));
|
extern int dc_register_pop DC_PROTO((int, dc_data *));
|
||||||
extern int dc_tell_length DC_PROTO((dc_data, dc_boolean));
|
extern int dc_tell_length DC_PROTO((dc_data, dc_discard));
|
||||||
extern int dc_tell_scale DC_PROTO((dc_num, dc_boolean));
|
extern int dc_tell_scale DC_PROTO((dc_num, dc_discard));
|
||||||
extern int dc_tell_stackdepth DC_PROTO((void));
|
extern int dc_tell_stackdepth DC_PROTO((void));
|
||||||
extern int dc_top_of_stack DC_PROTO((dc_data *));
|
extern int dc_top_of_stack DC_PROTO((dc_data *));
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* implement the "dc" Desk Calculator language.
|
* implement the "dc" Desk Calculator language.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -65,7 +65,8 @@ Usage: %s [OPTION] [file ...]\n\
|
|||||||
-h, --help display this help and exit\n\
|
-h, --help display this help and exit\n\
|
||||||
-V, --version output version information and exit\n\
|
-V, --version output version information and exit\n\
|
||||||
\n\
|
\n\
|
||||||
Report bugs to @\n\
|
Report bugs to bug-gnu-utils@prep.ai.mit.edu\n\
|
||||||
|
Be sure to include the word ``dc'' somewhere in the ``Subject:'' field.\n\
|
||||||
", progname);
|
", progname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,17 +95,21 @@ r1bindex DC_DECLARG((s, c))
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
try_file(const char *filename) {
|
try_file(const char *filename)
|
||||||
|
{
|
||||||
FILE *input;
|
FILE *input;
|
||||||
|
|
||||||
if ( !(input=fopen(filename, "r")) ) {
|
if (strcmp(filename, "-") == 0) {
|
||||||
|
input = stdin;
|
||||||
|
} else if ( !(input=fopen(filename, "r")) ) {
|
||||||
fprintf(stderr, "Could not open file ");
|
fprintf(stderr, "Could not open file ");
|
||||||
perror(filename);
|
perror(filename);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
if (dc_evalfile(input))
|
if (dc_evalfile(input))
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
fclose(input);
|
if (input != stdin)
|
||||||
|
fclose(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -124,12 +129,16 @@ main DC_DECLARG((argc, argv))
|
|||||||
int c;
|
int c;
|
||||||
|
|
||||||
progname = r1bindex(*argv, '/');
|
progname = r1bindex(*argv, '/');
|
||||||
|
#ifdef HAVE_SETVBUF
|
||||||
|
/* attempt to simplify interaction with applications such as emacs */
|
||||||
|
(void) setvbuf(stdout, NULL, _IOLBF, 0);
|
||||||
|
#endif
|
||||||
dc_math_init();
|
dc_math_init();
|
||||||
dc_string_init();
|
dc_string_init();
|
||||||
dc_register_init();
|
dc_register_init();
|
||||||
dc_array_init();
|
dc_array_init();
|
||||||
|
|
||||||
while ((c = getopt_long(argc, argv, "hVe:", long_opts, (int *)0)) != EOF) {
|
while ((c = getopt_long(argc, argv, "hVe:f:", long_opts, (int *)0)) != EOF) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'e':
|
case 'e':
|
||||||
{ dc_data string = dc_makestring(optarg, strlen(optarg));
|
{ dc_data string = dc_makestring(optarg, strlen(optarg));
|
||||||
@ -156,12 +165,7 @@ main DC_DECLARG((argc, argv))
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (; optind < argc; ++optind) {
|
for (; optind < argc; ++optind) {
|
||||||
if (strcmp(argv[optind], "-") == 0) {
|
try_file(argv[optind]);
|
||||||
if (dc_evalfile(stdin))
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
} else {
|
|
||||||
try_file(argv[optind]);
|
|
||||||
}
|
|
||||||
did_eval = 1;
|
did_eval = 1;
|
||||||
}
|
}
|
||||||
if (!did_eval) {
|
if (!did_eval) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Header file for dc routines
|
* Header file for dc routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -47,7 +47,8 @@
|
|||||||
#endif /* __STDC__ */
|
#endif /* __STDC__ */
|
||||||
|
|
||||||
|
|
||||||
typedef enum {DC_FALSE, DC_TRUE} dc_boolean;
|
typedef enum {DC_TOSS, DC_KEEP} dc_discard;
|
||||||
|
typedef enum {DC_NONL, DC_WITHNL} dc_newline;
|
||||||
|
|
||||||
|
|
||||||
/* type discriminant for dc_data */
|
/* type discriminant for dc_data */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* evaluate the dc language, from a FILE* or a string
|
* evaluate the dc language, from a FILE* or a string
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -38,6 +38,8 @@
|
|||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "dc-proto.h"
|
#include "dc-proto.h"
|
||||||
|
|
||||||
|
typedef enum {DC_FALSE, DC_TRUE} dc_boolean;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DC_OKAY = DC_SUCCESS, /* no further intervention needed for this command */
|
DC_OKAY = DC_SUCCESS, /* no further intervention needed for this command */
|
||||||
DC_EATONE, /* caller needs to eat the lookahead char */
|
DC_EATONE, /* caller needs to eat the lookahead char */
|
||||||
@ -50,6 +52,7 @@ typedef enum {
|
|||||||
DC_STR, /* caller needs to parse a dc_str from input stream */
|
DC_STR, /* caller needs to parse a dc_str from input stream */
|
||||||
DC_SYSTEM, /* caller needs to run a system() on next input line */
|
DC_SYSTEM, /* caller needs to run a system() on next input line */
|
||||||
DC_COMMENT, /* caller needs to skip to the next input line */
|
DC_COMMENT, /* caller needs to skip to the next input line */
|
||||||
|
DC_NEGCMP, /* caller needs to re-call dc_func() with `negcmp' set */
|
||||||
|
|
||||||
DC_EOF_ERROR /* unexpected end of input; abort current eval */
|
DC_EOF_ERROR /* unexpected end of input; abort current eval */
|
||||||
} dc_status;
|
} dc_status;
|
||||||
@ -127,11 +130,13 @@ dc_eval_and_free_str DC_DECLARG((string))
|
|||||||
*
|
*
|
||||||
* c -> the "current" input character under consideration
|
* c -> the "current" input character under consideration
|
||||||
* peekc -> the lookahead input character
|
* peekc -> the lookahead input character
|
||||||
|
* negcmp -> negate comparison test (for <,=,> commands)
|
||||||
*/
|
*/
|
||||||
static dc_status
|
static dc_status
|
||||||
dc_func DC_DECLARG((c, peekc))
|
dc_func DC_DECLARG((c, peekc, negcmp))
|
||||||
int c DC_DECLSEP
|
int c DC_DECLSEP
|
||||||
int peekc DC_DECLEND
|
int peekc DC_DECLSEP
|
||||||
|
int negcmp DC_DECLEND
|
||||||
{
|
{
|
||||||
/* we occasionally need these for temporary data */
|
/* we occasionally need these for temporary data */
|
||||||
/* Despite the GNU coding standards, it is much easier
|
/* Despite the GNU coding standards, it is much easier
|
||||||
@ -198,7 +203,7 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
*/
|
*/
|
||||||
if (peekc == EOF)
|
if (peekc == EOF)
|
||||||
return DC_EOF_ERROR;
|
return DC_EOF_ERROR;
|
||||||
if (dc_cmpop() < 0)
|
if ( (dc_cmpop() < 0) == !negcmp )
|
||||||
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
||||||
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
||||||
return DC_QUIT;
|
return DC_QUIT;
|
||||||
@ -209,7 +214,7 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
*/
|
*/
|
||||||
if (peekc == EOF)
|
if (peekc == EOF)
|
||||||
return DC_EOF_ERROR;
|
return DC_EOF_ERROR;
|
||||||
if (dc_cmpop() == 0)
|
if ( (dc_cmpop() == 0) == !negcmp )
|
||||||
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
||||||
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
||||||
return DC_QUIT;
|
return DC_QUIT;
|
||||||
@ -220,7 +225,7 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
*/
|
*/
|
||||||
if (peekc == EOF)
|
if (peekc == EOF)
|
||||||
return DC_EOF_ERROR;
|
return DC_EOF_ERROR;
|
||||||
if (dc_cmpop() > 0)
|
if ( (dc_cmpop() > 0) == !negcmp )
|
||||||
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
||||||
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
if (dc_eval_and_free_str(datum) == DC_QUIT)
|
||||||
return DC_QUIT;
|
return DC_QUIT;
|
||||||
@ -236,6 +241,8 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
case '[': /* read to balancing ']' into a dc_str */
|
case '[': /* read to balancing ']' into a dc_str */
|
||||||
return DC_STR;
|
return DC_STR;
|
||||||
case '!': /* read to newline and call system() on resulting string */
|
case '!': /* read to newline and call system() on resulting string */
|
||||||
|
if (peekc == '<' || peekc == '=' || peekc == '>')
|
||||||
|
return DC_NEGCMP;
|
||||||
return DC_SYSTEM;
|
return DC_SYSTEM;
|
||||||
case '#': /* comment; skip remainder of current line */
|
case '#': /* comment; skip remainder of current line */
|
||||||
return DC_COMMENT;
|
return DC_COMMENT;
|
||||||
@ -244,8 +251,7 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
char tmps;
|
char tmps;
|
||||||
if (datum.dc_type == DC_NUMBER){
|
if (datum.dc_type == DC_NUMBER){
|
||||||
tmps = (char) dc_num2int(datum.v.number, DC_TRUE);
|
tmps = (char) dc_num2int(datum.v.number, DC_TOSS);
|
||||||
dc_free_num(&datum.v.number);
|
|
||||||
}else if (datum.dc_type == DC_STRING){
|
}else if (datum.dc_type == DC_STRING){
|
||||||
tmps = *dc_str2charp(datum.v.string);
|
tmps = *dc_str2charp(datum.v.string);
|
||||||
dc_free_str(&datum.v.string);
|
dc_free_str(&datum.v.string);
|
||||||
@ -269,7 +275,7 @@ dc_func DC_DECLARG((c, peekc))
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = 0;
|
tmpint = 0;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if ( ! (2 <= tmpint && tmpint <= DC_IBASE_MAX) )
|
if ( ! (2 <= tmpint && tmpint <= DC_IBASE_MAX) )
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: input base must be a number \
|
"%s: input base must be a number \
|
||||||
@ -283,7 +289,7 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = -1;
|
tmpint = -1;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if ( ! (tmpint >= 0) )
|
if ( ! (tmpint >= 0) )
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: scale must be a nonnegative number\n",
|
"%s: scale must be a nonnegative number\n",
|
||||||
@ -301,11 +307,17 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
if (dc_register_get(peekc, &datum) == DC_SUCCESS)
|
||||||
dc_push(datum);
|
dc_push(datum);
|
||||||
return DC_EATONE;
|
return DC_EATONE;
|
||||||
|
case 'n': /* print the value popped off of top-of-stack;
|
||||||
|
* do not add a trailing newline
|
||||||
|
*/
|
||||||
|
if (dc_pop(&datum) == DC_SUCCESS)
|
||||||
|
dc_print(datum, dc_obase, DC_NONL, DC_TOSS);
|
||||||
|
break;
|
||||||
case 'o': /* set output base to value on top of stack */
|
case 'o': /* set output base to value on top of stack */
|
||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = 0;
|
tmpint = 0;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if ( ! (tmpint > 1) )
|
if ( ! (tmpint > 1) )
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: output base must be a number greater than 1\n",
|
"%s: output base must be a number greater than 1\n",
|
||||||
@ -314,12 +326,14 @@ between 2 and %d (inclusive)\n",
|
|||||||
dc_obase = tmpint;
|
dc_obase = tmpint;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'p': /* print the datum on the top of stack */
|
case 'p': /* print the datum on the top of stack,
|
||||||
|
* with a trailing newline
|
||||||
|
*/
|
||||||
if (dc_top_of_stack(&datum) == DC_SUCCESS)
|
if (dc_top_of_stack(&datum) == DC_SUCCESS)
|
||||||
dc_print(datum, dc_obase);
|
dc_print(datum, dc_obase, DC_WITHNL, DC_KEEP);
|
||||||
break;
|
break;
|
||||||
case 'q': /* quit two levels of evaluation, posibly exiting program */
|
case 'q': /* quit two levels of evaluation, posibly exiting program */
|
||||||
unwind_depth = 2;
|
unwind_depth = 1; /* the return below is the first level of returns */
|
||||||
unwind_noexit = DC_FALSE;
|
unwind_noexit = DC_FALSE;
|
||||||
return DC_QUIT;
|
return DC_QUIT;
|
||||||
case 'r': /* rotate (swap) the top two elements on the stack
|
case 'r': /* rotate (swap) the top two elements on the stack
|
||||||
@ -389,14 +403,18 @@ between 2 and %d (inclusive)\n",
|
|||||||
case 'O': /* push the current output base onto the stack */
|
case 'O': /* push the current output base onto the stack */
|
||||||
dc_push(dc_int2data(dc_obase));
|
dc_push(dc_int2data(dc_obase));
|
||||||
break;
|
break;
|
||||||
case 'P': /* print the value popped off of top-of-stack;
|
case 'P':
|
||||||
* do not add a trailing newline
|
/* Pop the value off the top of a stack. If it is
|
||||||
*/
|
* a number, dump out the integer portion of its
|
||||||
|
* absolute value as a "base UCHAR_MAX+1" byte stream;
|
||||||
|
* if it is a string, just print it.
|
||||||
|
* In either case, do not append a trailing newline.
|
||||||
|
*/
|
||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
if (datum.dc_type == DC_STRING)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
dc_out_str(datum.v.string, DC_FALSE, DC_TRUE);
|
dc_dump_num(datum.v.number, DC_TOSS);
|
||||||
else if (datum.dc_type == DC_NUMBER)
|
else if (datum.dc_type == DC_STRING)
|
||||||
dc_out_num(datum.v.number, dc_obase, DC_FALSE, DC_TRUE);
|
dc_out_str(datum.v.string, DC_NONL, DC_TOSS);
|
||||||
else
|
else
|
||||||
dc_garbage("at top of stack", -1);
|
dc_garbage("at top of stack", -1);
|
||||||
}
|
}
|
||||||
@ -409,9 +427,10 @@ between 2 and %d (inclusive)\n",
|
|||||||
unwind_depth = 0;
|
unwind_depth = 0;
|
||||||
unwind_noexit = DC_TRUE;
|
unwind_noexit = DC_TRUE;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
unwind_depth = dc_num2int(datum.v.number, DC_TRUE);
|
unwind_depth = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if (unwind_depth > 0)
|
if (unwind_depth-- > 0)
|
||||||
return DC_QUIT;
|
return DC_QUIT;
|
||||||
|
unwind_depth = 0; /* paranoia */
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: Q command requires a number >= 1\n",
|
"%s: Q command requires a number >= 1\n",
|
||||||
progname);
|
progname);
|
||||||
@ -427,7 +446,7 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = 0;
|
tmpint = 0;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
dc_stack_rotate(tmpint);
|
dc_stack_rotate(tmpint);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -444,13 +463,13 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = 0;
|
tmpint = 0;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_tell_scale(datum.v.number, DC_TRUE);
|
tmpint = dc_tell_scale(datum.v.number, DC_TOSS);
|
||||||
dc_push(dc_int2data(tmpint));
|
dc_push(dc_int2data(tmpint));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'Z': /* replace the datum on the top-of-stack with its length */
|
case 'Z': /* replace the datum on the top-of-stack with its length */
|
||||||
if (dc_pop(&datum) == DC_SUCCESS)
|
if (dc_pop(&datum) == DC_SUCCESS)
|
||||||
dc_push(dc_int2data(dc_tell_length(datum, DC_TRUE)));
|
dc_push(dc_int2data(dc_tell_length(datum, DC_TOSS)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ':': /* store into array */
|
case ':': /* store into array */
|
||||||
@ -459,7 +478,7 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = -1;
|
tmpint = -1;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
if (tmpint < 0)
|
if (tmpint < 0)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@ -476,7 +495,7 @@ between 2 and %d (inclusive)\n",
|
|||||||
if (dc_pop(&datum) == DC_SUCCESS){
|
if (dc_pop(&datum) == DC_SUCCESS){
|
||||||
tmpint = -1;
|
tmpint = -1;
|
||||||
if (datum.dc_type == DC_NUMBER)
|
if (datum.dc_type == DC_NUMBER)
|
||||||
tmpint = dc_num2int(datum.v.number, DC_TRUE);
|
tmpint = dc_num2int(datum.v.number, DC_TOSS);
|
||||||
if (tmpint < 0)
|
if (tmpint < 0)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: array index must be a nonnegative integer\n",
|
"%s: array index must be a nonnegative integer\n",
|
||||||
@ -507,6 +526,8 @@ dc_evalstr DC_DECLARG((string))
|
|||||||
int c;
|
int c;
|
||||||
int peekc;
|
int peekc;
|
||||||
int count;
|
int count;
|
||||||
|
int negcmp;
|
||||||
|
int next_negcmp = 0;
|
||||||
|
|
||||||
if (string.dc_type != DC_STRING){
|
if (string.dc_type != DC_STRING){
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@ -521,7 +542,9 @@ dc_evalstr DC_DECLARG((string))
|
|||||||
peekc = EOF;
|
peekc = EOF;
|
||||||
if (s < end)
|
if (s < end)
|
||||||
peekc = *(const unsigned char *)s;
|
peekc = *(const unsigned char *)s;
|
||||||
switch (dc_func(c, peekc)){
|
negcmp = next_negcmp;
|
||||||
|
next_negcmp = 0;
|
||||||
|
switch (dc_func(c, peekc, negcmp)){
|
||||||
case DC_OKAY:
|
case DC_OKAY:
|
||||||
break;
|
break;
|
||||||
case DC_EATONE:
|
case DC_EATONE:
|
||||||
@ -562,6 +585,9 @@ dc_evalstr DC_DECLARG((string))
|
|||||||
else
|
else
|
||||||
++s;
|
++s;
|
||||||
break;
|
break;
|
||||||
|
case DC_NEGCMP:
|
||||||
|
next_negcmp = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case DC_EOF_ERROR:
|
case DC_EOF_ERROR:
|
||||||
fprintf(stderr, "%s: unexpected EOS\n", progname);
|
fprintf(stderr, "%s: unexpected EOS\n", progname);
|
||||||
@ -582,6 +608,8 @@ dc_evalfile DC_DECLARG((fp))
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int peekc;
|
int peekc;
|
||||||
|
int negcmp;
|
||||||
|
int next_negcmp = 0;
|
||||||
dc_data datum;
|
dc_data datum;
|
||||||
|
|
||||||
stdin_lookahead = EOF;
|
stdin_lookahead = EOF;
|
||||||
@ -593,7 +621,9 @@ dc_evalfile DC_DECLARG((fp))
|
|||||||
*/
|
*/
|
||||||
if (fp == stdin)
|
if (fp == stdin)
|
||||||
stdin_lookahead = peekc;
|
stdin_lookahead = peekc;
|
||||||
switch (dc_func(c, peekc)){
|
negcmp = next_negcmp;
|
||||||
|
next_negcmp = 0;
|
||||||
|
switch (dc_func(c, peekc, negcmp)){
|
||||||
case DC_OKAY:
|
case DC_OKAY:
|
||||||
if (stdin_lookahead != peekc && fp == stdin)
|
if (stdin_lookahead != peekc && fp == stdin)
|
||||||
peekc = getc(fp);
|
peekc = getc(fp);
|
||||||
@ -636,6 +666,9 @@ dc_evalfile DC_DECLARG((fp))
|
|||||||
if (peekc != EOF)
|
if (peekc != EOF)
|
||||||
peekc = getc(fp);
|
peekc = getc(fp);
|
||||||
break;
|
break;
|
||||||
|
case DC_NEGCMP:
|
||||||
|
next_negcmp = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case DC_EOF_ERROR:
|
case DC_EOF_ERROR:
|
||||||
fprintf(stderr, "%s: unexpected EOF\n", progname);
|
fprintf(stderr, "%s: unexpected EOF\n", progname);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* misc. functions for the "dc" Desk Calculator language.
|
* misc. functions for the "dc" Desk Calculator language.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -150,14 +150,16 @@ dc_system DC_DECLARG((s))
|
|||||||
|
|
||||||
/* print out the indicated value */
|
/* print out the indicated value */
|
||||||
void
|
void
|
||||||
dc_print DC_DECLARG((value, obase))
|
dc_print DC_DECLARG((value, obase, newline_p, discard_p))
|
||||||
dc_data value DC_DECLSEP
|
dc_data value DC_DECLSEP
|
||||||
int obase DC_DECLEND
|
int obase DC_DECLSEP
|
||||||
|
dc_newline newline_p DC_DECLSEP
|
||||||
|
dc_discard discard_p DC_DECLEND
|
||||||
{
|
{
|
||||||
if (value.dc_type == DC_NUMBER) {
|
if (value.dc_type == DC_NUMBER) {
|
||||||
dc_out_num(value.v.number, obase, DC_TRUE, DC_FALSE);
|
dc_out_num(value.v.number, obase, newline_p, discard_p);
|
||||||
} else if (value.dc_type == DC_STRING) {
|
} else if (value.dc_type == DC_STRING) {
|
||||||
dc_out_str(value.v.string, DC_TRUE, DC_FALSE);
|
dc_out_str(value.v.string, newline_p, discard_p);
|
||||||
} else {
|
} else {
|
||||||
dc_garbage("in data being printed", -1);
|
dc_garbage("in data being printed", -1);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* interface dc to the bc numeric routines
|
* interface dc to the bc numeric routines
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -28,12 +28,23 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#ifdef HAVE_LIMITS_H
|
||||||
|
# include <limits.h>
|
||||||
|
#else
|
||||||
|
# define UCHAR_MAX ((unsigned char)~0)
|
||||||
|
#endif
|
||||||
#include "bcdefs.h"
|
#include "bcdefs.h"
|
||||||
#include "proto.h"
|
#include "proto.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "dc-proto.h"
|
#include "dc-proto.h"
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# define ATTRIB(x) __attribute__(x)
|
||||||
|
#else
|
||||||
|
# define ATTRIB(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* there is no POSIX standard for dc, so we'll take the GNU definitions */
|
/* there is no POSIX standard for dc, so we'll take the GNU definitions */
|
||||||
int std_only = FALSE;
|
int std_only = FALSE;
|
||||||
|
|
||||||
@ -47,7 +58,7 @@ int
|
|||||||
dc_add DC_DECLARG((a, b, kscale, result))
|
dc_add DC_DECLARG((a, b, kscale, result))
|
||||||
dc_num a DC_DECLSEP
|
dc_num a DC_DECLSEP
|
||||||
dc_num b DC_DECLSEP
|
dc_num b DC_DECLSEP
|
||||||
int kscale DC_DECLSEP
|
int kscale ATTRIB((unused)) DC_DECLSEP
|
||||||
dc_num *result DC_DECLEND
|
dc_num *result DC_DECLEND
|
||||||
{
|
{
|
||||||
init_num((bc_num *)result);
|
init_num((bc_num *)result);
|
||||||
@ -62,7 +73,7 @@ int
|
|||||||
dc_sub DC_DECLARG((a, b, kscale, result))
|
dc_sub DC_DECLARG((a, b, kscale, result))
|
||||||
dc_num a DC_DECLSEP
|
dc_num a DC_DECLSEP
|
||||||
dc_num b DC_DECLSEP
|
dc_num b DC_DECLSEP
|
||||||
int kscale DC_DECLSEP
|
int kscale ATTRIB((unused)) DC_DECLSEP
|
||||||
dc_num *result DC_DECLEND
|
dc_num *result DC_DECLEND
|
||||||
{
|
{
|
||||||
init_num((bc_num *)result);
|
init_num((bc_num *)result);
|
||||||
@ -211,17 +222,17 @@ dc_compare DC_DECLARG((a, b))
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* attempt to convert a dc_num to its corresponding int value
|
/* attempt to convert a dc_num to its corresponding int value
|
||||||
* If discard_flag is true then deallocate the value after use.
|
* If discard_p is DC_TOSS then deallocate the value after use.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
dc_num2int DC_DECLARG((value, discard_flag))
|
dc_num2int DC_DECLARG((value, discard_p))
|
||||||
dc_num value DC_DECLSEP
|
dc_num value DC_DECLSEP
|
||||||
dc_boolean discard_flag DC_DECLEND
|
dc_discard discard_p DC_DECLEND
|
||||||
{
|
{
|
||||||
long result;
|
long result;
|
||||||
|
|
||||||
result = num2long(CastNum(value));
|
result = num2long(CastNum(value));
|
||||||
if (discard_flag)
|
if (discard_p == DC_TOSS)
|
||||||
dc_free_num(&value);
|
dc_free_num(&value);
|
||||||
return (int)result;
|
return (int)result;
|
||||||
}
|
}
|
||||||
@ -346,17 +357,17 @@ dc_numlen DC_DECLARG((value))
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* return the scale factor of the passed dc_num
|
/* return the scale factor of the passed dc_num
|
||||||
* If discard_flag is true then deallocate the value after use.
|
* If discard_p is DC_TOSS then deallocate the value after use.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
dc_tell_scale DC_DECLARG((value, discard_flag))
|
dc_tell_scale DC_DECLARG((value, discard_p))
|
||||||
dc_num value DC_DECLSEP
|
dc_num value DC_DECLSEP
|
||||||
dc_boolean discard_flag DC_DECLEND
|
dc_discard discard_p DC_DECLEND
|
||||||
{
|
{
|
||||||
int kscale;
|
int kscale;
|
||||||
|
|
||||||
kscale = CastNum(value)->n_scale;
|
kscale = CastNum(value)->n_scale;
|
||||||
if (discard_flag)
|
if (discard_p == DC_TOSS)
|
||||||
dc_free_num(&value);
|
dc_free_num(&value);
|
||||||
return kscale;
|
return kscale;
|
||||||
}
|
}
|
||||||
@ -370,23 +381,71 @@ dc_math_init DC_DECLVOID()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* print out a dc_num in output base obase to stdout;
|
/* print out a dc_num in output base obase to stdout;
|
||||||
* if newline is true, terminate output with a '\n';
|
* if newline_p is DC_WITHNL, terminate output with a '\n';
|
||||||
* if discard_flag is true then deallocate the value after use
|
* if discard_p is DC_TOSS then deallocate the value after use
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
dc_out_num DC_DECLARG((value, obase, newline, discard_flag))
|
dc_out_num DC_DECLARG((value, obase, newline_p, discard_p))
|
||||||
dc_num value DC_DECLSEP
|
dc_num value DC_DECLSEP
|
||||||
int obase DC_DECLSEP
|
int obase DC_DECLSEP
|
||||||
dc_boolean newline DC_DECLSEP
|
dc_newline newline_p DC_DECLSEP
|
||||||
dc_boolean discard_flag DC_DECLEND
|
dc_discard discard_p DC_DECLEND
|
||||||
{
|
{
|
||||||
out_num(CastNum(value), obase, out_char);
|
out_num(CastNum(value), obase, out_char);
|
||||||
if (newline)
|
if (newline_p == DC_WITHNL)
|
||||||
out_char('\n');
|
out_char('\n');
|
||||||
if (discard_flag)
|
if (discard_p == DC_TOSS)
|
||||||
dc_free_num(&value);
|
dc_free_num(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dump out the absolute value of the integer part of a
|
||||||
|
* dc_num as a byte stream, without any line wrapping;
|
||||||
|
* if discard_p is DC_TOSS then deallocate the value after use
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
dc_dump_num DC_DECLARG((value, discard_p))
|
||||||
|
dc_num dcvalue DC_DECLSEP
|
||||||
|
dc_discard discard_p DC_DECLEND
|
||||||
|
{
|
||||||
|
struct digit_stack { int digit; struct digit_stack *link;};
|
||||||
|
struct digit_stack *top_of_stack = NULL;
|
||||||
|
struct digit_stack *cur;
|
||||||
|
struct digit_stack *next;
|
||||||
|
bc_num value;
|
||||||
|
bc_num obase;
|
||||||
|
bc_num digit;
|
||||||
|
|
||||||
|
init_num(&value);
|
||||||
|
init_num(&obase);
|
||||||
|
init_num(&digit);
|
||||||
|
|
||||||
|
/* we only handle the integer portion: */
|
||||||
|
bc_divide(CastNum(dcvalue), _one_, &value, 0);
|
||||||
|
/* we only handle the absolute value: */
|
||||||
|
value->n_sign = PLUS;
|
||||||
|
/* we're done with the dcvalue parameter: */
|
||||||
|
if (discard_p == DC_TOSS)
|
||||||
|
dc_free_num(&dcvalue);
|
||||||
|
|
||||||
|
int2num(&obase, 1+UCHAR_MAX);
|
||||||
|
do {
|
||||||
|
(void) bc_divmod(value, obase, &value, &digit, 0);
|
||||||
|
cur = dc_malloc(sizeof *cur);
|
||||||
|
cur->digit = (int)num2long(digit);
|
||||||
|
cur->link = top_of_stack;
|
||||||
|
top_of_stack = cur;
|
||||||
|
} while (!is_zero(value));
|
||||||
|
|
||||||
|
for (cur=top_of_stack; cur; cur=next) {
|
||||||
|
putchar(cur->digit);
|
||||||
|
next = cur->link;
|
||||||
|
free(cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
free_num(&digit);
|
||||||
|
free_num(&obase);
|
||||||
|
free_num(&value);
|
||||||
|
}
|
||||||
|
|
||||||
/* deallocate an instance of a dc_num */
|
/* deallocate an instance of a dc_num */
|
||||||
void
|
void
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* implement stack functions for dc
|
* implement stack functions for dc
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -41,6 +41,7 @@
|
|||||||
/* simple linked-list implementaion suffices: */
|
/* simple linked-list implementaion suffices: */
|
||||||
struct dc_list {
|
struct dc_list {
|
||||||
dc_data value;
|
dc_data value;
|
||||||
|
struct dc_array *array; /* opaque */
|
||||||
struct dc_list *link;
|
struct dc_list *link;
|
||||||
};
|
};
|
||||||
typedef struct dc_list dc_list;
|
typedef struct dc_list dc_list;
|
||||||
@ -60,6 +61,7 @@ dc_alloc DC_DECLVOID()
|
|||||||
|
|
||||||
result = dc_malloc(sizeof *result);
|
result = dc_malloc(sizeof *result);
|
||||||
result->value.dc_type = DC_UNINITIALIZED;
|
result->value.dc_type = DC_UNINITIALIZED;
|
||||||
|
result->array = NULL;
|
||||||
result->link = NULL;
|
result->link = NULL;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -247,6 +249,7 @@ dc_clear_stack DC_DECLVOID()
|
|||||||
dc_free_str(&n->value.v.string);
|
dc_free_str(&n->value.v.string);
|
||||||
else
|
else
|
||||||
dc_garbage("in stack", -1);
|
dc_garbage("in stack", -1);
|
||||||
|
dc_array_free(n->array);
|
||||||
free(n);
|
free(n);
|
||||||
}
|
}
|
||||||
dc_stack = NULL;
|
dc_stack = NULL;
|
||||||
@ -369,6 +372,7 @@ dc_pop DC_DECLARG((result))
|
|||||||
dc_garbage("at top of stack", -1);
|
dc_garbage("at top of stack", -1);
|
||||||
*result = r->value;
|
*result = r->value;
|
||||||
dc_stack = r->link;
|
dc_stack = r->link;
|
||||||
|
dc_array_free(r->array);
|
||||||
free(r);
|
free(r);
|
||||||
return DC_SUCCESS;
|
return DC_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -396,6 +400,7 @@ dc_register_pop DC_DECLARG((stackid, result))
|
|||||||
dc_garbage(" stack", stackid);
|
dc_garbage(" stack", stackid);
|
||||||
*result = r->value;
|
*result = r->value;
|
||||||
dc_register[stackid] = r->link;
|
dc_register[stackid] = r->link;
|
||||||
|
dc_array_free(r->array);
|
||||||
free(r);
|
free(r);
|
||||||
return DC_SUCCESS;
|
return DC_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -415,25 +420,25 @@ dc_tell_stackdepth DC_DECLVOID()
|
|||||||
|
|
||||||
|
|
||||||
/* return the length of the indicated data value;
|
/* return the length of the indicated data value;
|
||||||
* if discard_flag is true, the deallocate the value when done
|
* if discard_p is DC_TOSS, the deallocate the value when done
|
||||||
*
|
*
|
||||||
* The definition of a datum's length is deligated to the
|
* The definition of a datum's length is deligated to the
|
||||||
* appropriate module.
|
* appropriate module.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
dc_tell_length DC_DECLARG((value, discard_flag))
|
dc_tell_length DC_DECLARG((value, discard_p))
|
||||||
dc_data value DC_DECLSEP
|
dc_data value DC_DECLSEP
|
||||||
dc_boolean discard_flag DC_DECLEND
|
dc_discard discard_p DC_DECLEND
|
||||||
{
|
{
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
if (value.dc_type == DC_NUMBER){
|
if (value.dc_type == DC_NUMBER){
|
||||||
length = dc_numlen(value.v.number);
|
length = dc_numlen(value.v.number);
|
||||||
if (discard_flag == DC_TRUE)
|
if (discard_p == DC_TOSS)
|
||||||
dc_free_num(&value.v.number);
|
dc_free_num(&value.v.number);
|
||||||
} else if (value.dc_type == DC_STRING) {
|
} else if (value.dc_type == DC_STRING) {
|
||||||
length = dc_strlen(value.v.string);
|
length = dc_strlen(value.v.string);
|
||||||
if (discard_flag == DC_TRUE)
|
if (discard_p == DC_TOSS)
|
||||||
dc_free_str(&value.v.string);
|
dc_free_str(&value.v.string);
|
||||||
} else {
|
} else {
|
||||||
dc_garbage("in tell_length", -1);
|
dc_garbage("in tell_length", -1);
|
||||||
@ -453,5 +458,32 @@ dc_printall DC_DECLARG((obase))
|
|||||||
dc_list *n;
|
dc_list *n;
|
||||||
|
|
||||||
for (n=dc_stack; n; n=n->link)
|
for (n=dc_stack; n; n=n->link)
|
||||||
dc_print(n->value, obase);
|
dc_print(n->value, obase, DC_WITHNL, DC_KEEP);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* get the current array head for the named array */
|
||||||
|
struct dc_array *
|
||||||
|
dc_get_stacked_array DC_DECLARG((array_id))
|
||||||
|
int array_id DC_DECLEND
|
||||||
|
{
|
||||||
|
dc_list *r = dc_register[regmap(array_id)];
|
||||||
|
return r ? r->array : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set the current array head for the named array */
|
||||||
|
void
|
||||||
|
dc_set_stacked_array DC_DECLARG((array_id, new_head))
|
||||||
|
int array_id DC_DECLSEP
|
||||||
|
struct dc_array *new_head DC_DECLEND
|
||||||
|
{
|
||||||
|
dc_list *r;
|
||||||
|
|
||||||
|
array_id = regmap(array_id);
|
||||||
|
r = dc_register[array_id];
|
||||||
|
if ( ! r )
|
||||||
|
r = dc_register[array_id] = dc_alloc();
|
||||||
|
r->array = new_head;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* implement string functions for dc
|
* implement string functions for dc
|
||||||
*
|
*
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -92,13 +92,13 @@ dc_free_str DC_DECLARG((value))
|
|||||||
void
|
void
|
||||||
dc_out_str DC_DECLARG((value, newline, discard_flag))
|
dc_out_str DC_DECLARG((value, newline, discard_flag))
|
||||||
dc_str value DC_DECLSEP
|
dc_str value DC_DECLSEP
|
||||||
dc_boolean newline DC_DECLSEP
|
dc_newline newline DC_DECLSEP
|
||||||
dc_boolean discard_flag DC_DECLEND
|
dc_discard discard_flag DC_DECLEND
|
||||||
{
|
{
|
||||||
fwrite(value->s_ptr, value->s_len, sizeof *value->s_ptr, stdout);
|
fwrite(value->s_ptr, value->s_len, sizeof *value->s_ptr, stdout);
|
||||||
if (newline == DC_TRUE)
|
if (newline == DC_WITHNL)
|
||||||
printf("\n");
|
putchar('\n');
|
||||||
if (discard_flag == DC_TRUE)
|
if (discard_flag == DC_TOSS)
|
||||||
dc_free_str(&value);
|
dc_free_str(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
# Makefile.in generated automatically by automake 1.1n from Makefile.am
|
# Makefile.in generated automatically by automake 1.3 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy, distribute and modify it.
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
@ -26,6 +32,8 @@ mandir = @mandir@
|
|||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
oldincludedir = /usr/include
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DISTDIR =
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
@ -43,12 +51,12 @@ INSTALL_DATA = @INSTALL_DATA@
|
|||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = true
|
NORMAL_INSTALL = :
|
||||||
PRE_INSTALL = true
|
PRE_INSTALL = :
|
||||||
POST_INSTALL = true
|
POST_INSTALL = :
|
||||||
NORMAL_UNINSTALL = true
|
NORMAL_UNINSTALL = :
|
||||||
PRE_UNINSTALL = true
|
PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = true
|
POST_UNINSTALL = :
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LEX = @LEX@
|
LEX = @LEX@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
@ -72,7 +80,8 @@ TEXINFO_TEX = $(srcdir)/texinfo.tex
|
|||||||
INFO_DEPS = dc.info
|
INFO_DEPS = dc.info
|
||||||
DVIS = dc.dvi
|
DVIS = dc.dvi
|
||||||
TEXINFOS = dc.texi
|
TEXINFOS = dc.texi
|
||||||
MANS = bc.1 dc.1
|
man1dir = $(mandir)/man1
|
||||||
|
MANS = $(man_MANS)
|
||||||
|
|
||||||
NROFF = nroff
|
NROFF = nroff
|
||||||
DIST_COMMON = Makefile.am Makefile.in texinfo.tex
|
DIST_COMMON = Makefile.am Makefile.in texinfo.tex
|
||||||
@ -82,14 +91,14 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
|||||||
|
|
||||||
TAR = tar
|
TAR = tar
|
||||||
GZIP = --best
|
GZIP = --best
|
||||||
default: all
|
all: Makefile $(INFO_DEPS) $(MANS)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .texi .texinfo .info .dvi .ps
|
.SUFFIXES: .dvi .info .ps .texi .texinfo .txi
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
@ -101,6 +110,7 @@ dc.dvi: dc.texi
|
|||||||
DVIPS = dvips
|
DVIPS = dvips
|
||||||
|
|
||||||
.texi.info:
|
.texi.info:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
cd $(srcdir) \
|
cd $(srcdir) \
|
||||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
|
|
||||||
@ -109,54 +119,72 @@ DVIPS = dvips
|
|||||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||||
|
|
||||||
.texi:
|
.texi:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
cd $(srcdir) \
|
cd $(srcdir) \
|
||||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
|
|
||||||
.texinfo.info:
|
.texinfo.info:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
cd $(srcdir) \
|
cd $(srcdir) \
|
||||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
|
|
||||||
.texinfo:
|
.texinfo:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
cd $(srcdir) \
|
cd $(srcdir) \
|
||||||
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
|
|
||||||
.texinfo.dvi:
|
.texinfo.dvi:
|
||||||
TEXINPUTS=$(srcdir):$$TEXINPUTS \
|
TEXINPUTS=$(srcdir):$$TEXINPUTS \
|
||||||
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||||
|
|
||||||
|
.txi.info:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
|
cd $(srcdir) \
|
||||||
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
|
|
||||||
|
.txi.dvi:
|
||||||
|
TEXINPUTS=$(srcdir):$$TEXINPUTS \
|
||||||
|
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
|
||||||
|
|
||||||
|
.txi:
|
||||||
|
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||||
|
cd $(srcdir) \
|
||||||
|
&& $(MAKEINFO) `echo $< | sed 's,.*/,,'`
|
||||||
.dvi.ps:
|
.dvi.ps:
|
||||||
$(DVIPS) $< -o $@
|
$(DVIPS) $< -o $@
|
||||||
|
|
||||||
install-info-am: $(INFO_DEPS)
|
install-info-am: $(INFO_DEPS)
|
||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
$(mkinstalldirs) $(infodir)
|
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
||||||
@for file in $(INFO_DEPS); do \
|
@for file in $(INFO_DEPS); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||||
if test -f $$d/$$ifile; then \
|
if test -f $$d/$$ifile; then \
|
||||||
echo " $(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile"; \
|
echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \
|
||||||
$(INSTALL_DATA) $$d/$$ifile $(infodir)/$$ifile; \
|
$(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \
|
||||||
else : ; fi; \
|
else : ; fi; \
|
||||||
done; \
|
done; \
|
||||||
done
|
done
|
||||||
@$(POST_INSTALL)
|
@$(POST_INSTALL)
|
||||||
@if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||||
for file in $(INFO_DEPS); do \
|
for file in $(INFO_DEPS); do \
|
||||||
echo " install-info --info-dir=$(infodir) $(infodir)/$$file";\
|
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
|
||||||
install-info --info-dir=$(infodir) $(infodir)/$$file; :;\
|
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
|
||||||
done; \
|
done; \
|
||||||
else : ; fi
|
else : ; fi
|
||||||
|
|
||||||
uninstall-info:
|
uninstall-info:
|
||||||
$(PRE_UNINSTALL)
|
$(PRE_UNINSTALL)
|
||||||
if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
@if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
|
||||||
ii=yes; \
|
ii=yes; \
|
||||||
else ii=; fi; \
|
else ii=; fi; \
|
||||||
for file in $(INFO_DEPS); do \
|
for file in $(INFO_DEPS); do \
|
||||||
test -z $ii || install-info --info-dir=$(infodir) --remove $$file; \
|
test -z "$ii" \
|
||||||
|
|| install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \
|
||||||
done
|
done
|
||||||
$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
for file in $(INFO_DEPS); do \
|
for file in $(INFO_DEPS); do \
|
||||||
(cd $(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
|
(cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \
|
||||||
done
|
done
|
||||||
|
|
||||||
dist-info: $(INFO_DEPS)
|
dist-info: $(INFO_DEPS)
|
||||||
@ -169,39 +197,61 @@ dist-info: $(INFO_DEPS)
|
|||||||
done; \
|
done; \
|
||||||
done
|
done
|
||||||
|
|
||||||
mostlyclean-info:
|
mostlyclean-aminfo:
|
||||||
rm -f dc.aux dc.cp dc.cps dc.dvi dc.fn dc.fns dc.ky dc.log dc.pg dc.toc \
|
-rm -f dc.aux dc.cp dc.cps dc.dvi dc.fn dc.fns dc.ky dc.kys dc.ps \
|
||||||
dc.tp dc.tps dc.vr dc.vrs dc.op dc.tr dc.cv
|
dc.log dc.pg dc.toc dc.tp dc.tps dc.vr dc.vrs dc.op dc.tr \
|
||||||
|
dc.cv dc.cn
|
||||||
|
|
||||||
clean-info:
|
clean-aminfo:
|
||||||
|
|
||||||
distclean-info:
|
distclean-aminfo:
|
||||||
|
|
||||||
maintainer-clean-info:
|
maintainer-clean-aminfo:
|
||||||
for i in $(INFO_DEPS); do rm -f `eval echo $$i*`; done
|
for i in $(INFO_DEPS); do \
|
||||||
|
rm -f $$i; \
|
||||||
|
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
|
||||||
|
rm -f $$i-[0-9]*; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-man1:
|
||||||
|
$(mkinstalldirs) $(DESTDIR)$(man1dir)
|
||||||
|
@list='$(man1_MANS)'; \
|
||||||
|
l2='$(man_MANS)'; for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.1*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||||
|
else file=$$i; fi; \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
|
||||||
|
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-man1:
|
||||||
|
@list='$(man1_MANS)'; \
|
||||||
|
l2='$(man_MANS)'; for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.1*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
|
||||||
|
rm -f $(DESTDIR)$(man1dir)/$$inst; \
|
||||||
|
done
|
||||||
install-man: $(MANS)
|
install-man: $(MANS)
|
||||||
$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
$(mkinstalldirs) $(mandir)/man1
|
$(MAKE) install-man1
|
||||||
@sect=1; \
|
|
||||||
inst=`echo "bc" | sed '$(transform)'`.1; \
|
|
||||||
if test -f $(srcdir)/bc.1; then file=$(srcdir)/bc.1; \
|
|
||||||
else file=bc.1; fi; \
|
|
||||||
echo " $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst"; \
|
|
||||||
$(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst
|
|
||||||
@sect=1; \
|
|
||||||
inst=`echo "dc" | sed '$(transform)'`.1; \
|
|
||||||
if test -f $(srcdir)/dc.1; then file=$(srcdir)/dc.1; \
|
|
||||||
else file=dc.1; fi; \
|
|
||||||
echo " $(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst"; \
|
|
||||||
$(INSTALL_DATA) $$file $(mandir)/man$$sect/$$inst
|
|
||||||
|
|
||||||
uninstall-man:
|
uninstall-man:
|
||||||
$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
inst=`echo "bc" | sed '$(transform)'`.1; \
|
$(MAKE) uninstall-man1
|
||||||
rm -f $(mandir)/man1/$$inst
|
|
||||||
inst=`echo "dc" | sed '$(transform)'`.1; \
|
|
||||||
rm -f $(mandir)/man1/$$inst
|
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
TAGS:
|
TAGS:
|
||||||
|
|
||||||
@ -209,6 +259,7 @@ TAGS:
|
|||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
subdir = doc
|
subdir = doc
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
@ -216,7 +267,7 @@ distdir: $(DISTFILES)
|
|||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||||
done
|
done
|
||||||
$(MAKE) distdir="$(distdir)" dist-info
|
$(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info
|
||||||
info: $(INFO_DEPS)
|
info: $(INFO_DEPS)
|
||||||
dvi: $(DVIS)
|
dvi: $(DVIS)
|
||||||
check: all
|
check: all
|
||||||
@ -233,46 +284,44 @@ install: install-exec install-data all
|
|||||||
|
|
||||||
uninstall: uninstall-info uninstall-man
|
uninstall: uninstall-info uninstall-man
|
||||||
|
|
||||||
all: $(INFO_DEPS) $(MANS) Makefile
|
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(infodir) $(mandir)/man1
|
$(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(mandir)/man1
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
rm -f Makefile $(DISTCLEANFILES)
|
-rm -f Makefile $(DISTCLEANFILES)
|
||||||
rm -f config.cache config.log stamp-h
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||||
mostlyclean: mostlyclean-info mostlyclean-generic
|
mostlyclean: mostlyclean-aminfo mostlyclean-generic
|
||||||
|
|
||||||
clean: clean-info clean-generic mostlyclean
|
clean: clean-aminfo clean-generic mostlyclean
|
||||||
|
|
||||||
distclean: distclean-info distclean-generic clean
|
distclean: distclean-aminfo distclean-generic clean
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-info maintainer-clean-generic \
|
maintainer-clean: maintainer-clean-aminfo maintainer-clean-generic \
|
||||||
distclean
|
distclean
|
||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
|
||||||
.PHONY: default install-info-am uninstall-info mostlyclean-info \
|
.PHONY: install-info-am uninstall-info mostlyclean-aminfo \
|
||||||
distclean-info clean-info maintainer-clean-info install-man \
|
distclean-aminfo clean-aminfo maintainer-clean-aminfo install-man1 \
|
||||||
uninstall-man tags distdir info dvi installcheck install-exec \
|
uninstall-man1 install-man uninstall-man tags distdir info dvi \
|
||||||
install-data install uninstall all installdirs mostlyclean-generic \
|
installcheck install-exec install-data install uninstall all \
|
||||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||||
mostlyclean distclean maintainer-clean
|
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||||
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
.\" dc.1 - the *roff document processor source for the dc manual
|
.\" dc.1 - the *roff document processor source for the dc manual
|
||||||
.\"
|
.\"
|
||||||
.\" This file is part of GNU dc.
|
.\" This file is part of GNU dc.
|
||||||
.\" Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
.\" Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
.\"
|
.\"
|
||||||
.\" This program is free software; you can redistribute it and/or modify
|
.\" This program is free software; you can redistribute it and/or modify
|
||||||
.\" it under the terms of the GNU General Public License as published by
|
.\" it under the terms of the GNU General Public License as published by
|
||||||
@ -61,10 +61,21 @@ Prints the value on the top of the stack,
|
|||||||
without altering the stack.
|
without altering the stack.
|
||||||
A newline is printed after the value.
|
A newline is printed after the value.
|
||||||
.TP
|
.TP
|
||||||
.B P
|
.B n
|
||||||
Prints the value on the top of the stack, popping it off,
|
Prints the value on the top of the stack, popping it off,
|
||||||
and does not print a newline after.
|
and does not print a newline after.
|
||||||
.TP
|
.TP
|
||||||
|
.B P
|
||||||
|
Pops off the value on top of the stack.
|
||||||
|
If it it a string, it is simply printed without a trailing newline.
|
||||||
|
Otherwise it is a number, and the integer portion of its absolute
|
||||||
|
value is printed out as a "base (UCHAR_MAX+1)" byte stream.
|
||||||
|
Assuming that (UCHAR_MAX+1) is 256
|
||||||
|
(as it is on most machines with 8-bit bytes),
|
||||||
|
the sequence \fBKSK 0k1/ [_1*]sx d0>x [256~aPd0<x]dsxx sxLKk\fP
|
||||||
|
could also accomplish this function,
|
||||||
|
except for the side-effect of clobbering the x register.
|
||||||
|
.TP
|
||||||
.B f
|
.B f
|
||||||
Prints the entire contents of the stack
|
Prints the entire contents of the stack
|
||||||
.ig
|
.ig
|
||||||
@ -91,9 +102,9 @@ and pushes the result.
|
|||||||
.TP
|
.TP
|
||||||
.B *
|
.B *
|
||||||
Pops two values, multiplies them, and pushes the result.
|
Pops two values, multiplies them, and pushes the result.
|
||||||
The number of fraction digits in the result is controlled
|
The number of fraction digits in the result depends on
|
||||||
by the current precision value (see below) and does not
|
the current precision value and the number of fraction
|
||||||
depend on the values being multiplied.
|
digits in the two arguments.
|
||||||
.TP
|
.TP
|
||||||
.B /
|
.B /
|
||||||
Pops two values,
|
Pops two values,
|
||||||
@ -107,9 +118,8 @@ computes the remainder of the division that the
|
|||||||
.B /
|
.B /
|
||||||
command would do,
|
command would do,
|
||||||
and pushes that.
|
and pushes that.
|
||||||
The division is done with as many fraction digits
|
The value computed is the same as that computed by
|
||||||
as the precision value specifies,
|
the sequence \fBSd dld/ Ld*-\fP .
|
||||||
and the remainder is also computed with that many fraction digits.
|
|
||||||
.TP
|
.TP
|
||||||
.B ~
|
.B ~
|
||||||
Pops two values,
|
Pops two values,
|
||||||
@ -136,10 +146,9 @@ and should be an integer.
|
|||||||
The second popped is used as the exponent;
|
The second popped is used as the exponent;
|
||||||
this value must be a non-negative number,
|
this value must be a non-negative number,
|
||||||
and any fractional part of this exponent will be ignored.
|
and any fractional part of this exponent will be ignored.
|
||||||
The third value popped is the base which gets exponentiated.
|
The third value popped is the base which gets exponentiated,
|
||||||
The precision value specifies the number of fraction
|
which should be an integer.
|
||||||
digits in the result.
|
For small integers this is like the sequence \fBSm^Lm%\fP,
|
||||||
For small numbers this is like the sequence \fBSm lble^ Lm%\fP,
|
|
||||||
but, unlike \fB^\fP, this command will work with arbritrarily large exponents.
|
but, unlike \fB^\fP, this command will work with arbritrarily large exponents.
|
||||||
.TP
|
.TP
|
||||||
.B v
|
.B v
|
||||||
@ -155,12 +164,6 @@ command.
|
|||||||
The default precision value is zero,
|
The default precision value is zero,
|
||||||
which means that all arithmetic except for
|
which means that all arithmetic except for
|
||||||
addition and subtraction produces integer results.
|
addition and subtraction produces integer results.
|
||||||
.PP
|
|
||||||
The remainder operation
|
|
||||||
.B %
|
|
||||||
requires some explanation:
|
|
||||||
applied to arguments ``a'' and ``b'' it produces ``a - (b * (a / b))'',
|
|
||||||
where ``a / b'' is computed in the current precision.
|
|
||||||
.SH
|
.SH
|
||||||
Stack Control
|
Stack Control
|
||||||
.TP
|
.TP
|
||||||
@ -177,7 +180,7 @@ Reverses the order of (swaps) the top two values on the stack.
|
|||||||
.SH
|
.SH
|
||||||
Registers
|
Registers
|
||||||
.PP
|
.PP
|
||||||
\*(Dc provides 256 memory registers,
|
\*(Dc provides at least 256 memory registers,
|
||||||
each named by a single character.
|
each named by a single character.
|
||||||
You can store a number or a string in a register and retrieve it later.
|
You can store a number or a string in a register and retrieve it later.
|
||||||
.TP
|
.TP
|
||||||
@ -237,7 +240,7 @@ The output radix is used for printing numbers.
|
|||||||
The input and output radices are separate parameters;
|
The input and output radices are separate parameters;
|
||||||
you can make them unequal,
|
you can make them unequal,
|
||||||
which can be useful or confusing.
|
which can be useful or confusing.
|
||||||
The input radix must be between 2 and 36 inclusive.
|
The input radix must be between 2 and 16 inclusive.
|
||||||
The output radix must be at least 2.
|
The output radix must be at least 2.
|
||||||
The precision must be zero or greater.
|
The precision must be zero or greater.
|
||||||
The precision is always measured in decimal digits,
|
The precision is always measured in decimal digits,
|
||||||
@ -343,11 +346,22 @@ contents and
|
|||||||
.B 2 1>a
|
.B 2 1>a
|
||||||
will not.
|
will not.
|
||||||
.TP
|
.TP
|
||||||
|
.BI !> r
|
||||||
|
Similar but invokes the macro if the original top-of-stack is
|
||||||
|
not greater than (less than or equal to) what was the second-to-top.
|
||||||
|
.TP
|
||||||
.BI < r
|
.BI < r
|
||||||
Similar but invokes the macro if the original top-of-stack is less.
|
Similar but invokes the macro if the original top-of-stack is less.
|
||||||
.TP
|
.TP
|
||||||
|
.BI !< r
|
||||||
|
Similar but invokes the macro if the original top-of-stack is
|
||||||
|
not less than (greater than or equal to) what was the second-to-top.
|
||||||
|
.TP
|
||||||
.BI = r
|
.BI = r
|
||||||
Similar but invokes the macro if the two numbers popped are equal.
|
Similar but invokes the macro if the two numbers popped are equal.
|
||||||
|
.TP
|
||||||
|
.BI != r
|
||||||
|
Similar but invokes the macro if the two numbers popped are not equal.
|
||||||
.ig
|
.ig
|
||||||
This can also be validly used to compare two strings for equality.
|
This can also be validly used to compare two strings for equality.
|
||||||
..
|
..
|
||||||
@ -392,7 +406,7 @@ the value pushed is
|
|||||||
0.
|
0.
|
||||||
.TP
|
.TP
|
||||||
.B z
|
.B z
|
||||||
Pushes the current stack depth;
|
Pushes the current stack depth:
|
||||||
the number of objects on the stack before the execution of the
|
the number of objects on the stack before the execution of the
|
||||||
.B z
|
.B z
|
||||||
command.
|
command.
|
||||||
@ -401,6 +415,9 @@ Miscellaneous
|
|||||||
.TP
|
.TP
|
||||||
.B !
|
.B !
|
||||||
Will run the rest of the line as a system command.
|
Will run the rest of the line as a system command.
|
||||||
|
Note that parsing of the !<, !=, and !> commands take precidence,
|
||||||
|
so if you want to run a command starting with <, =, or > you will
|
||||||
|
need to add a space after the !.
|
||||||
.TP
|
.TP
|
||||||
.B #
|
.B #
|
||||||
Will interpret the rest of the line as a comment.
|
Will interpret the rest of the line as a comment.
|
||||||
@ -416,18 +433,12 @@ Pops the top-of-stack and uses it as an index into
|
|||||||
the array
|
the array
|
||||||
.IR r .
|
.IR r .
|
||||||
The selected value is then pushed onto the stack.
|
The selected value is then pushed onto the stack.
|
||||||
.SH
|
.P
|
||||||
NOTES
|
Note that each stacked instance of a register has its own
|
||||||
.PP
|
array associated with it.
|
||||||
The array operations
|
Thus \fB1 0:a 0Sa 2 0:a La 0;ap\fP will print 1,
|
||||||
.B :
|
because the 2 was stored in an instance of 0:a that
|
||||||
and
|
was later popped.
|
||||||
.B ;
|
|
||||||
are usually only used by traditional implementations of
|
|
||||||
.IR bc .
|
|
||||||
(The GNU
|
|
||||||
.I bc
|
|
||||||
is self contained and does not need \*(dc to run.)
|
|
||||||
.SH
|
.SH
|
||||||
BUGS
|
BUGS
|
||||||
.PP
|
.PP
|
||||||
|
@ -27,7 +27,7 @@ Published by the Free Software Foundation,
|
|||||||
675 Massachusetts Avenue,
|
675 Massachusetts Avenue,
|
||||||
Cambridge, MA 02139 USA
|
Cambridge, MA 02139 USA
|
||||||
|
|
||||||
Copyright (C) 1984 Free Software Foundation, Inc.
|
Copyright (C) 1984, 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of
|
Permission is granted to make and distribute verbatim copies of
|
||||||
this manual provided the copyright notice and this permission notice
|
this manual provided the copyright notice and this permission notice
|
||||||
@ -60,7 +60,7 @@ by the Foundation.
|
|||||||
@author original manual by Richard Stallman
|
@author original manual by Richard Stallman
|
||||||
@page
|
@page
|
||||||
@vskip 0pt plus 1filll
|
@vskip 0pt plus 1filll
|
||||||
Copyright @copyright{} 1994, 1997 Free Software Foundation, Inc.
|
Copyright @copyright{} 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
@sp 2
|
@sp 2
|
||||||
Published by the Free Software Foundation, @*
|
Published by the Free Software Foundation, @*
|
||||||
@ -97,7 +97,7 @@ by the Foundation.
|
|||||||
* Strings:: Strings
|
* Strings:: Strings
|
||||||
* Status Inquiry:: Status Inquiry
|
* Status Inquiry:: Status Inquiry
|
||||||
* Miscellaneous:: Other commands
|
* Miscellaneous:: Other commands
|
||||||
* Notes:: Notes
|
* Reporting bugs:: Reporting bugs
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Introduction, Invocation, Top, Top
|
@node Introduction, Invocation, Top, Top
|
||||||
@ -172,9 +172,23 @@ Prints the value on the top of the stack,
|
|||||||
without altering the stack.
|
without altering the stack.
|
||||||
A newline is printed after the value.
|
A newline is printed after the value.
|
||||||
|
|
||||||
@item P
|
@item n
|
||||||
Prints the value on the top of the stack, popping it off,
|
Prints the value on the top of the stack, popping it off,
|
||||||
and does not print a newline after.
|
and does not print a newline after.
|
||||||
|
(This command is a GNU extension.)
|
||||||
|
|
||||||
|
@item P
|
||||||
|
Pops off the value on top of the stack.
|
||||||
|
If it it a string, it is simply printed without a trailing newline.
|
||||||
|
Otherwise it is a number, and the integer portion of its absolute
|
||||||
|
value is printed out as a "base (UCHAR_MAX+1)" byte stream.
|
||||||
|
Assuming that (UCHAR_MAX+1) is 256
|
||||||
|
(as it is on most machines with 8-bit bytes),
|
||||||
|
the sequence
|
||||||
|
@code{KSK 0k1/ [_1*]sx d0>x [256~aPd0<x]dsxx sxLKk}
|
||||||
|
could also accomplish this function,
|
||||||
|
except for the side-effect of clobbering the x register.
|
||||||
|
(Details of the behavior with a number are a GNU extension.)
|
||||||
|
|
||||||
@item f
|
@item f
|
||||||
Prints the entire contents of the stack
|
Prints the entire contents of the stack
|
||||||
@ -199,9 +213,12 @@ from the second one popped, and pushes the result.
|
|||||||
|
|
||||||
@item *
|
@item *
|
||||||
Pops two values, multiplies them, and pushes the result.
|
Pops two values, multiplies them, and pushes the result.
|
||||||
The number of fraction digits in the result is controlled
|
The number of fraction digits in the result is the largest of
|
||||||
by the current precision value (see below) and does not
|
the precision value,
|
||||||
depend on the values being multiplied.
|
the number of fraction digits in the multiplier,
|
||||||
|
or the number of fraction digits in the multiplicand;
|
||||||
|
but in no event exceeding the number of digits required for
|
||||||
|
an exact result.
|
||||||
|
|
||||||
@item /
|
@item /
|
||||||
Pops two values, divides the second one popped
|
Pops two values, divides the second one popped
|
||||||
@ -213,9 +230,8 @@ Pops two values,
|
|||||||
computes the remainder of the division that
|
computes the remainder of the division that
|
||||||
the @samp{/} command would do,
|
the @samp{/} command would do,
|
||||||
and pushes that.
|
and pushes that.
|
||||||
The division is done with as many fraction digits
|
The value computed is the same as that computed by
|
||||||
as the precision value specifies,
|
the sequence @code{Sd dld/ Ld*-} .
|
||||||
and the remainder is also computed with that many fraction digits.
|
|
||||||
|
|
||||||
@item ~
|
@item ~
|
||||||
Pops two values,
|
Pops two values,
|
||||||
@ -244,11 +260,11 @@ is not an integer.
|
|||||||
The second popped is used as the exponent;
|
The second popped is used as the exponent;
|
||||||
this value must be a non-negative number,
|
this value must be a non-negative number,
|
||||||
and any fractional part of this exponent will be ignored.
|
and any fractional part of this exponent will be ignored.
|
||||||
The third value popped is the base which gets exponentiated.
|
The third value popped is the base which gets exponentiated,
|
||||||
The precision value specifies the number of fraction
|
which should be an integer.
|
||||||
digits in the result.
|
For small integers this is like the sequence @code{Sm^Lm%},
|
||||||
For small numbers this is like the sequence @code{Sm lble^ Lm%},
|
|
||||||
but, unlike @code{^}, this command will work with arbritrarily large exponents.
|
but, unlike @code{^}, this command will work with arbritrarily large exponents.
|
||||||
|
(This command is a GNU extension.)
|
||||||
|
|
||||||
@item v
|
@item v
|
||||||
Pops one value, computes its square root, and pushes that.
|
Pops one value, computes its square root, and pushes that.
|
||||||
@ -262,11 +278,6 @@ The default precision value is zero,
|
|||||||
which means that all arithmetic except for
|
which means that all arithmetic except for
|
||||||
addition and subtraction produces integer results.
|
addition and subtraction produces integer results.
|
||||||
|
|
||||||
The remainder operation (@samp{%}) requires some explanation:
|
|
||||||
applied to arguments @samp{a} and @samp{b}
|
|
||||||
it produces @samp{a - (b * (a / b))},
|
|
||||||
where @samp{a / b} is computed in the current precision.
|
|
||||||
|
|
||||||
@node Stack Control, Registers, Arithmetic, Top
|
@node Stack Control, Registers, Arithmetic, Top
|
||||||
@chapter Stack Control
|
@chapter Stack Control
|
||||||
|
|
||||||
@ -287,7 +298,8 @@ Reverses the order of (swaps) the top two values on the stack.
|
|||||||
@node Registers, Parameters, Stack Control, Top
|
@node Registers, Parameters, Stack Control, Top
|
||||||
@chapter Registers
|
@chapter Registers
|
||||||
|
|
||||||
@sc{dc} provides 256 memory registers, each named by a single character.
|
@sc{dc} provides at least 256 memory registers,
|
||||||
|
each named by a single character.
|
||||||
You can store a number in a register and retrieve it later.
|
You can store a number in a register and retrieve it later.
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@ -333,7 +345,7 @@ The output radix is used for printing numbers.
|
|||||||
|
|
||||||
The input and output radices are separate parameters;
|
The input and output radices are separate parameters;
|
||||||
you can make them unequal, which can be useful or confusing.
|
you can make them unequal, which can be useful or confusing.
|
||||||
The input radix must be between 2 and 36 inclusive.
|
The input radix must be between 2 and 16 inclusive.
|
||||||
The output radix must be at least 2.
|
The output radix must be at least 2.
|
||||||
The precision must be zero or greater.
|
The precision must be zero or greater.
|
||||||
The precision is always measured in decimal digits,
|
The precision is always measured in decimal digits,
|
||||||
@ -412,13 +424,25 @@ if the original top-of-stack is greater.
|
|||||||
Thus, @samp{1 2>a} will invoke register @samp{a}'s contents
|
Thus, @samp{1 2>a} will invoke register @samp{a}'s contents
|
||||||
and @samp{2 1>a} will not.
|
and @samp{2 1>a} will not.
|
||||||
|
|
||||||
|
@item !>@var{r}
|
||||||
|
Similar but invokes the macro if the original top-of-stack is not greater
|
||||||
|
(is less than or equal to) what was the second-to-top.
|
||||||
|
|
||||||
@item <@var{r}
|
@item <@var{r}
|
||||||
Similar but invokes the macro if the original top-of-stack is less.
|
Similar but invokes the macro if the original top-of-stack is less.
|
||||||
|
|
||||||
|
@item !<@var{r}
|
||||||
|
Similar but invokes the macro if the original top-of-stack is not less
|
||||||
|
(is greater than or equal to) what was the second-to-top.
|
||||||
|
|
||||||
@item =@var{r}
|
@item =@var{r}
|
||||||
Similar but invokes the macro if the two numbers popped are equal.
|
Similar but invokes the macro if the two numbers popped are equal.
|
||||||
@c This can also be validly used to compare two strings for equality.
|
@c This can also be validly used to compare two strings for equality.
|
||||||
|
|
||||||
|
@item !=@var{r}
|
||||||
|
Similar but invokes the macro if the two numbers popped are not equal.
|
||||||
|
@c This can also be validly used to compare two strings for equality.
|
||||||
|
|
||||||
@item ?
|
@item ?
|
||||||
Reads a line from the terminal and executes it.
|
Reads a line from the terminal and executes it.
|
||||||
This command allows a macro to request input from the user.
|
This command allows a macro to request input from the user.
|
||||||
@ -455,17 +479,20 @@ For a string, the value pushed is
|
|||||||
0.
|
0.
|
||||||
|
|
||||||
@item z
|
@item z
|
||||||
Pushes the current stack depth;
|
Pushes the current stack depth:
|
||||||
the number of objects on the stack
|
the number of objects on the stack
|
||||||
before the execution of the @samp{z} command.
|
before the execution of the @samp{z} command.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Miscellaneous, Notes, Status Inquiry, Top
|
@node Miscellaneous, Reporting bugs, Status Inquiry, Top
|
||||||
@chapter Miscellaneous
|
@chapter Miscellaneous
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item !
|
@item !
|
||||||
Will run the rest of the line as a system command.
|
Will run the rest of the line as a system command.
|
||||||
|
Note that parsing of the !<, !=, and !> commands take precidence,
|
||||||
|
so if you want to run a command starting with <, =, or > you will
|
||||||
|
need to add a space after the !.
|
||||||
|
|
||||||
@item #
|
@item #
|
||||||
Will interpret the rest of the line as a comment.
|
Will interpret the rest of the line as a comment.
|
||||||
@ -482,13 +509,14 @@ the array @var{r}.
|
|||||||
The selected value is then pushed onto the stack.
|
The selected value is then pushed onto the stack.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Notes, , Miscellaneous, Top
|
Note that each stacked instance of a register has its own
|
||||||
@chapter Notes
|
array associated with it.
|
||||||
|
Thus @samp{1 @var{0:a} 0S@var{a} 2 @var{0:a} L@var{a} @var{0;a}p}
|
||||||
|
will print 1, because the 2 was stored in an instance of @var{0:a}
|
||||||
|
that was later popped.
|
||||||
|
|
||||||
The array operations @samp{:} and @samp{;} are usually
|
@node Reporting bugs, , Miscellaneous, Top
|
||||||
only used by traditional implementations of BC.
|
@chapter Reporting bugs
|
||||||
(The GNU implementation of BC is self contained
|
|
||||||
and does not need any version of @sc{dc} to run.)
|
|
||||||
|
|
||||||
Email bug reports to @code{bug-gnu-utils@@prep.ai.mit.edu}.
|
Email bug reports to @code{bug-gnu-utils@@prep.ai.mit.edu}.
|
||||||
Be sure to include the word ``dc'' somewhere in the ``Subject:'' field.
|
Be sure to include the word ``dc'' somewhere in the ``Subject:'' field.
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#ifdef STRINGS_H
|
#ifdef HAVE_STRINGS_H
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#else
|
#else
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* version.h: version information for GNU bc and GNU dc */
|
/* version.h: version information for GNU bc and GNU dc */
|
||||||
|
|
||||||
/* This file is part of GNU bc and GNU dc.
|
/* This file is part of GNU bc and GNU dc.
|
||||||
* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
|
* Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -20,10 +20,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define BC_VERSION \
|
#define BC_VERSION \
|
||||||
"bc 1.04\nCopyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc."
|
"bc 1.05\n\
|
||||||
|
Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc."
|
||||||
|
|
||||||
#define DC_VERSION \
|
#define DC_VERSION \
|
||||||
"dc 1.1 (GNU bc 1.04)\nCopyright (C) 1994, 1997 Free Software Foundation, Inc."
|
"dc 1.2 (GNU bc 1.05)\n\
|
||||||
|
Copyright 1994, 1997, 1998 Free Software Foundation, Inc."
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
# Makefile.in generated automatically by automake 1.1n from Makefile.am
|
# Makefile.in generated automatically by automake 1.3 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
# gives unlimited permission to copy, distribute and modify it.
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = /bin/sh
|
SHELL = /bin/sh
|
||||||
@ -26,6 +32,8 @@ mandir = @mandir@
|
|||||||
includedir = @includedir@
|
includedir = @includedir@
|
||||||
oldincludedir = /usr/include
|
oldincludedir = /usr/include
|
||||||
|
|
||||||
|
DISTDIR =
|
||||||
|
|
||||||
pkgdatadir = $(datadir)/@PACKAGE@
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
pkglibdir = $(libdir)/@PACKAGE@
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
pkgincludedir = $(includedir)/@PACKAGE@
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
@ -43,14 +51,15 @@ INSTALL_DATA = @INSTALL_DATA@
|
|||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = true
|
NORMAL_INSTALL = :
|
||||||
PRE_INSTALL = true
|
PRE_INSTALL = :
|
||||||
POST_INSTALL = true
|
POST_INSTALL = :
|
||||||
NORMAL_UNINSTALL = true
|
NORMAL_UNINSTALL = :
|
||||||
PRE_UNINSTALL = true
|
PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = true
|
POST_UNINSTALL = :
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
LEX = @LEX@
|
LEX = @LEX@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
@ -76,7 +85,7 @@ libbc_a_OBJECTS = getopt.o getopt1.o vfprintf.o number.o
|
|||||||
AR = ar
|
AR = ar
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
|
||||||
LINK = $(CC) $(LDFLAGS) -o $@
|
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
DIST_COMMON = Makefile.am Makefile.in
|
DIST_COMMON = Makefile.am Makefile.in
|
||||||
|
|
||||||
|
|
||||||
@ -87,14 +96,14 @@ GZIP = --best
|
|||||||
SOURCES = $(libbc_a_SOURCES)
|
SOURCES = $(libbc_a_SOURCES)
|
||||||
OBJECTS = $(libbc_a_OBJECTS)
|
OBJECTS = $(libbc_a_OBJECTS)
|
||||||
|
|
||||||
default: all
|
all: Makefile $(LIBRARIES)
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .c .o
|
.SUFFIXES: .S .c .o .s
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile
|
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps lib/Makefile
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||||
|
|
||||||
@ -102,7 +111,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
|||||||
mostlyclean-noinstLIBRARIES:
|
mostlyclean-noinstLIBRARIES:
|
||||||
|
|
||||||
clean-noinstLIBRARIES:
|
clean-noinstLIBRARIES:
|
||||||
test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||||
|
|
||||||
distclean-noinstLIBRARIES:
|
distclean-noinstLIBRARIES:
|
||||||
|
|
||||||
@ -111,47 +120,56 @@ maintainer-clean-noinstLIBRARIES:
|
|||||||
.c.o:
|
.c.o:
|
||||||
$(COMPILE) -c $<
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
rm -f *.o core
|
-rm -f *.o core *.core
|
||||||
|
|
||||||
clean-compile:
|
clean-compile:
|
||||||
|
|
||||||
distclean-compile:
|
distclean-compile:
|
||||||
rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
maintainer-clean-compile:
|
maintainer-clean-compile:
|
||||||
|
|
||||||
libbc.a: $(libbc_a_OBJECTS) $(libbc_a_DEPENDENCIES)
|
libbc.a: $(libbc_a_OBJECTS) $(libbc_a_DEPENDENCIES)
|
||||||
rm -f libbc.a
|
-rm -f libbc.a
|
||||||
$(AR) cru libbc.a $(libbc_a_OBJECTS) $(libbc_a_LIBADD)
|
$(AR) cru libbc.a $(libbc_a_OBJECTS) $(libbc_a_LIBADD)
|
||||||
$(RANLIB) libbc.a
|
$(RANLIB) libbc.a
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES)
|
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||||
here=`pwd` && cd $(srcdir) && mkid -f$$here/ID $(SOURCES) $(HEADERS)
|
here=`pwd` && cd $(srcdir) \
|
||||||
|
&& mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP)
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES)
|
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||||
tags=; \
|
tags=; \
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
list='$(SOURCES) $(HEADERS)'; \
|
||||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
unique=`for i in $$list; do echo $$i; done | \
|
||||||
done; \
|
awk ' { files[$$0] = 1; } \
|
||||||
test -z "$(ETAGS_ARGS)$(SOURCES)$(HEADERS)$$tags" \
|
END { for (i in files) print i; }'`; \
|
||||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $(SOURCES) $(HEADERS) -o $$here/TAGS)
|
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||||
|
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||||
|
|
||||||
mostlyclean-tags:
|
mostlyclean-tags:
|
||||||
|
|
||||||
clean-tags:
|
clean-tags:
|
||||||
|
|
||||||
distclean-tags:
|
distclean-tags:
|
||||||
rm -f TAGS ID
|
-rm -f TAGS ID
|
||||||
|
|
||||||
maintainer-clean-tags:
|
maintainer-clean-tags:
|
||||||
|
|
||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
subdir = lib
|
subdir = lib
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
@ -175,27 +193,25 @@ install: install-exec install-data all
|
|||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
|
|
||||||
all: $(LIBRARIES) Makefile
|
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
|
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install
|
||||||
installdirs:
|
installdirs:
|
||||||
|
|
||||||
|
|
||||||
mostlyclean-generic:
|
mostlyclean-generic:
|
||||||
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
|
||||||
|
|
||||||
clean-generic:
|
clean-generic:
|
||||||
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
distclean-generic:
|
distclean-generic:
|
||||||
rm -f Makefile $(DISTCLEANFILES)
|
-rm -f Makefile $(DISTCLEANFILES)
|
||||||
rm -f config.cache config.log stamp-h
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||||
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||||
mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||||
mostlyclean-tags mostlyclean-generic
|
mostlyclean-tags mostlyclean-generic
|
||||||
|
|
||||||
@ -204,7 +220,7 @@ clean: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
|
|||||||
|
|
||||||
distclean: distclean-noinstLIBRARIES distclean-compile distclean-tags \
|
distclean: distclean-noinstLIBRARIES distclean-compile distclean-tags \
|
||||||
distclean-generic clean
|
distclean-generic clean
|
||||||
rm -f config.status
|
-rm -f config.status
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
||||||
maintainer-clean-compile maintainer-clean-tags \
|
maintainer-clean-compile maintainer-clean-tags \
|
||||||
@ -212,7 +228,7 @@ maintainer-clean: maintainer-clean-noinstLIBRARIES \
|
|||||||
@echo "This command is intended for maintainers to use;"
|
@echo "This command is intended for maintainers to use;"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
|
||||||
.PHONY: default mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
|
.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
|
||||||
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||||
mostlyclean-compile distclean-compile clean-compile \
|
mostlyclean-compile distclean-compile clean-compile \
|
||||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* number.c: Implements arbitrary precision numbers. */
|
/* number.c: Implements arbitrary precision numbers. */
|
||||||
|
|
||||||
/* This file is part of GNU bc.
|
/* This file is part of GNU bc.
|
||||||
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -1031,6 +1031,10 @@ bc_raisemod (base, expo, mod, result, scale)
|
|||||||
temp = copy_num (_one_);
|
temp = copy_num (_one_);
|
||||||
init_num (&parity);
|
init_num (&parity);
|
||||||
|
|
||||||
|
/* Check the base for scale digits. */
|
||||||
|
if (base->n_scale != 0)
|
||||||
|
rt_warn ("non-zero scale in base");
|
||||||
|
|
||||||
/* Check the exponent for scale digits. */
|
/* Check the exponent for scale digits. */
|
||||||
if (exponent->n_scale != 0)
|
if (exponent->n_scale != 0)
|
||||||
{
|
{
|
||||||
@ -1209,8 +1213,11 @@ bc_sqrt (num, scale)
|
|||||||
|
|
||||||
/* Calculate the initial guess. */
|
/* Calculate the initial guess. */
|
||||||
if (cmp_res < 0)
|
if (cmp_res < 0)
|
||||||
/* The number is between 0 and 1. Guess should start at 1. */
|
{
|
||||||
guess = copy_num (_one_);
|
/* The number is between 0 and 1. Guess should start at 1. */
|
||||||
|
guess = copy_num (_one_);
|
||||||
|
cscale = (*num)->n_scale;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* The number is greater than 1. Guess should start at 10^(exp/2). */
|
/* The number is greater than 1. Guess should start at 10^(exp/2). */
|
||||||
@ -1221,11 +1228,11 @@ bc_sqrt (num, scale)
|
|||||||
guess1->n_scale = 0;
|
guess1->n_scale = 0;
|
||||||
bc_raise (guess, guess1, &guess, 0);
|
bc_raise (guess, guess1, &guess, 0);
|
||||||
free_num (&guess1);
|
free_num (&guess1);
|
||||||
|
cscale = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find the square root using Newton's algorithm. */
|
/* Find the square root using Newton's algorithm. */
|
||||||
done = FALSE;
|
done = FALSE;
|
||||||
cscale = 3;
|
|
||||||
while (!done)
|
while (!done)
|
||||||
{
|
{
|
||||||
free_num (&guess1);
|
free_num (&guess1);
|
||||||
|
Loading…
Reference in New Issue
Block a user