summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Makefile.am24
-rw-r--r--actions.c347
-rw-r--r--actions.h94
-rw-r--r--app-defaults/XCalc (renamed from app-defaults/XCalc.ad)0
-rw-r--r--app-defaults/XCalc-color (renamed from app-defaults/XCalc-color.ad)0
-rw-r--r--configure.ac15
-rw-r--r--math.c119
-rw-r--r--xcalc.c79
-rw-r--r--xcalc.h42
10 files changed, 245 insertions, 479 deletions
diff --git a/.gitignore b/.gitignore
index dc5214c..e2ce17c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,7 @@ stamp-h1
xcalc
xcalc.1
*~
+*.o
+xcalc-*.tar.*
+ChangeLog
+tags
diff --git a/Makefile.am b/Makefile.am
index 84fa6d9..22b95f5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -26,7 +26,6 @@ xcalc_LDADD = $(XCALC_LIBS) -lm
xcalc_SOURCES = \
actions.c \
- actions.h \
math.c \
xcalc.c \
xcalc.h
@@ -36,31 +35,22 @@ appman_PRE = \
# App default files (*.ad)
-appdefaultdir = @appdefaultdir@
+DISTCHECK_CONFIGURE_FLAGS = --with-appdefaultdir=\$${datadir}/X11/app-defaults
+appdefaultdir = @appdefaultdir@
-APPDEFAULTFILES = \
+dist_appdefault_DATA = \
app-defaults/XCalc \
app-defaults/XCalc-color
-SUFFIXES = .ad
-
-.ad:
- [ -d app-defaults ] || mkdir app-defaults
- cp $< $@
-
-appdefault_DATA = $(APPDEFAULTFILES)
-
-EXTRA_DIST = $(APPDEFAULTFILES:%=%.ad) ChangeLog autogen.sh
-
-CLEANFILES = $(APPDEFAULTFILES)
+EXTRA_DIST = ChangeLog autogen.sh
MAINTAINERCLEANFILES = ChangeLog
.PHONY: ChangeLog
ChangeLog:
- (GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
+ $(CHANGELOG_CMD)
dist-hook: ChangeLog
@@ -69,7 +59,7 @@ appmandir = $(APP_MAN_DIR)
appman_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@)
EXTRA_DIST += $(appman_PRE)
-CLEANFILES += $(appman_DATA)
+CLEANFILES = $(appman_DATA)
SED = sed
@@ -90,7 +80,7 @@ MAN_SUBSTS = \
-e 's|__miscmansuffix__|$(MISC_MAN_SUFFIX)|g' \
-e 's|__filemansuffix__|$(FILE_MAN_SUFFIX)|g'
-SUFFIXES += .$(APP_MAN_SUFFIX) .man
+SUFFIXES = .$(APP_MAN_SUFFIX) .man
.man.$(APP_MAN_SUFFIX):
sed $(MAN_SUBSTS) < $< > $@
diff --git a/actions.c b/actions.c
index 37c5736..78c3e36 100644
--- a/actions.c
+++ b/actions.c
@@ -38,26 +38,109 @@ from the X Consortium.
#include <X11/Intrinsic.h>
#include <setjmp.h>
#include "xcalc.h"
-extern int rpn;
-extern Atom wm_delete_window;
-extern int pre_op();
-extern void post_op(), Quit(), ringbell(), do_select();
#ifndef IEEE
-extern jmp_buf env;
-extern void fail_op();
#define XCALC_PRE_OP(keynum) { if (pre_op(keynum)) return; \
if (setjmp (env)) {fail_op(); return;}}
#else
#define XCALC_PRE_OP(keynum) if (pre_op(keynum)) return;
#endif
-/*ARGSUSED*/
-void add(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void add(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void back(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void bell(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void clearit(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void cosine(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void decimal(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void degree(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void digit(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void divide(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void e(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void enter(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void epower(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void equal(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void exchange(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void factorial(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void inverse(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void leftParen(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void logarithm(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void multiply(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void naturalLog(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void factorial(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void negate(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void nop(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void off(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void pi(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void power(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void quit(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void recall(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void reciprocal(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void rightParen(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void roll(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void scientific(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void selection(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void sine(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void square(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void squareRoot(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void store(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void subtract(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void sum(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void tangent(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void tenpower(Widget w, XEvent *e, String *vector, Cardinal *count);
+static void XexchangeY(Widget w, XEvent *e, String *vector, Cardinal *count);
+
+/*
+ * calculator action table
+ */
+
+XtActionsRec Actions[] = {
+{"add", add}, /* addition */
+{"back", back}, /* HP-specific backspace */
+{"bell", bell}, /* ring bell */
+{"clear", clearit}, /* TI-specific clear calculator state */
+{"cosine", cosine}, /* trigonometric function cosine */
+{"decimal", decimal}, /* decimal point */
+{"degree", degree}, /* degree, radian, grad switch */
+{"digit", digit}, /* numeric key */
+{"divide", divide}, /* division */
+{"e", e}, /* the natural number e */
+{"enter", enter}, /* HP-specific enter */
+{"epower", epower}, /* e raised to a power */
+{"equal", equal}, /* TI-specific = */
+{"exchange", exchange}, /* TI-specific exchange memory and display */
+{"factorial", factorial}, /* factorial function */
+{"inverse", inverse}, /* inverse */
+{"leftParen", leftParen}, /* TI-specific left parenthesis */
+{"logarithm", logarithm}, /* logarithm base 10 */
+{"multiply", multiply}, /* multiplication */
+{"naturalLog", naturalLog}, /* natural logarithm base e */
+{"negate", negate}, /* change sign */
+{"nop", nop}, /* no operation, rings bell */
+{"off", off}, /* clear state */
+{"pi", pi}, /* the number pi */
+{"power", power}, /* raise to an arbitrary power */
+{"quit", quit}, /* quit */
+{"recall", recall}, /* memory recall */
+{"reciprocal", reciprocal}, /* reciprocal function */
+{"rightParen", rightParen}, /* TI-specific left parenthesis */
+{"roll", roll}, /* HP-specific roll stack */
+{"scientific", scientific}, /* scientfic notation (EE) */
+{"selection", selection}, /* copy selection */
+{"sine", sine}, /* trigonometric function sine */
+{"square", square}, /* square */
+{"squareRoot", squareRoot}, /* square root */
+{"store", store}, /* memory store */
+{"subtract", subtract}, /* subtraction */
+{"sum", sum}, /* memory summation */
+{"tangent", tangent}, /* trigonometric function tangent */
+{"tenpower", tenpower}, /* 10 raised to to an arbitrary power */
+{"XexchangeY", XexchangeY} /* HP-specific exchange X and Y registers */
+};
+
+int ActionsCount = XtNumber(Actions);
+
+/*ARGSUSED*/
+static void add(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kADD);
rpn ? twof(kADD) : twoop(kADD);
@@ -65,11 +148,7 @@ void add(w, e, vector, count)
}
/*ARGSUSED*/
-void back(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void back(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kBKSP);
bkspf();
@@ -77,21 +156,13 @@ void back(w, e, vector, count)
}
/*ARGSUSED*/
-void bell(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void bell(Widget w, XEvent *e, String *vector, Cardinal *count)
{
ringbell();
}
/*ARGSUSED*/
-void clearit(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void clearit(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kCLR);
clearf();
@@ -99,11 +170,7 @@ void clearit(w, e, vector, count)
}
/*ARGSUSED*/
-void cosine(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void cosine(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kCOS);
oneop(kCOS);
@@ -111,11 +178,7 @@ void cosine(w, e, vector, count)
}
/*ARGSUSED*/
-void decimal(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void decimal(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kDEC);
decf();
@@ -123,11 +186,7 @@ void decimal(w, e, vector, count)
}
/*ARGSUSED*/
-void degree(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void degree(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kDRG);
drgf();
@@ -135,11 +194,7 @@ void degree(w, e, vector, count)
}
/*ARGSUSED*/
-void digit(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void digit(Widget w, XEvent *e, String *vector, Cardinal *count)
{
switch (vector[0][0])
{
@@ -158,11 +213,7 @@ void digit(w, e, vector, count)
}
/*ARGSUSED*/
-void divide(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void divide(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kDIV);
rpn ? twof(kDIV) : twoop(kDIV);
@@ -170,11 +221,7 @@ void divide(w, e, vector, count)
}
/*ARGSUSED*/
-void e(w, ev, vector, count)
- Widget w;
- XEvent *ev;
- String *vector;
- Cardinal *count;
+static void e(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kE);
oneop(kE);
@@ -182,11 +229,7 @@ void e(w, ev, vector, count)
}
/*ARGSUSED*/
-void enter(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void enter(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kENTR);
entrf();
@@ -194,11 +237,7 @@ void enter(w, e, vector, count)
}
/*ARGSUSED*/
-void epower(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void epower(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kEXP);
oneop(kEXP);
@@ -206,11 +245,7 @@ void epower(w, e, vector, count)
}
/*ARGSUSED*/
-void equal(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void equal(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kEQU);
equf();
@@ -218,11 +253,7 @@ void equal(w, e, vector, count)
}
/*ARGSUSED*/
-void exchange(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void exchange(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kEXC);
oneop(kEXC);
@@ -230,11 +261,7 @@ void exchange(w, e, vector, count)
}
/*ARGSUSED*/
-void factorial(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void factorial(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kFACT);
oneop(kFACT);
@@ -242,11 +269,7 @@ void factorial(w, e, vector, count)
}
/*ARGSUSED*/
-void inverse(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void inverse(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kINV);
invf();
@@ -254,11 +277,7 @@ void inverse(w, e, vector, count)
}
/*ARGSUSED*/
-void leftParen(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void leftParen(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kLPAR);
lparf();
@@ -266,11 +285,7 @@ void leftParen(w, e, vector, count)
}
/*ARGSUSED*/
-void logarithm(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void logarithm(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kLOG);
oneop(kLOG);
@@ -278,11 +293,7 @@ void logarithm(w, e, vector, count)
}
/*ARGSUSED*/
-void multiply(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void multiply(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kMUL);
rpn ? twof(kMUL) : twoop(kMUL);
@@ -290,11 +301,7 @@ void multiply(w, e, vector, count)
}
/*ARGSUSED*/
-void naturalLog(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void naturalLog(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kLN);
oneop(kLN);
@@ -302,11 +309,7 @@ void naturalLog(w, e, vector, count)
}
/*ARGSUSED*/
-void negate(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void negate(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kNEG);
negf();
@@ -314,21 +317,13 @@ void negate(w, e, vector, count)
}
/*ARGSUSED*/
-void nop(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void nop(Widget w, XEvent *e, String *vector, Cardinal *count)
{
ringbell();
}
/*ARGSUSED*/
-void off(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void off(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kOFF);
offf();
@@ -336,11 +331,7 @@ void off(w, e, vector, count)
}
/*ARGSUSED*/
-void pi(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void pi(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kPI);
oneop(kPI);
@@ -348,11 +339,7 @@ void pi(w, e, vector, count)
}
/*ARGSUSED*/
-void power(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void power(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kPOW);
rpn ? twof(kPOW) : twoop(kPOW);
@@ -360,11 +347,7 @@ void power(w, e, vector, count)
}
/*ARGSUSED*/
-void quit(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void quit(Widget w, XEvent *e, String *vector, Cardinal *count)
{
if (e->type == ClientMessage && e->xclient.data.l[0] != wm_delete_window)
ringbell();
@@ -373,11 +356,7 @@ void quit(w, e, vector, count)
}
/*ARGSUSED*/
-void recall(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void recall(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kRCL);
rpn ? memf(kRCL) : oneop(kRCL);
@@ -385,11 +364,7 @@ void recall(w, e, vector, count)
}
/*ARGSUSED*/
-void reciprocal(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void reciprocal(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kRECIP);
oneop(kRECIP);
@@ -397,11 +372,7 @@ void reciprocal(w, e, vector, count)
}
/*ARGSUSED*/
-void rightParen(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void rightParen(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kRPAR);
rparf();
@@ -409,11 +380,7 @@ void rightParen(w, e, vector, count)
}
/*ARGSUSED*/
-void roll(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void roll(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kROLL);
rollf();
@@ -421,11 +388,7 @@ void roll(w, e, vector, count)
}
/*ARGSUSED*/
-void scientific(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void scientific(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kEE);
eef();
@@ -433,21 +396,13 @@ void scientific(w, e, vector, count)
}
/*ARGSUSED*/
-void selection(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void selection(Widget w, XEvent *e, String *vector, Cardinal *count)
{
do_select(((XButtonReleasedEvent *)e)->time);
}
/*ARGSUSED*/
-void sine(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void sine(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSIN);
oneop(kSIN);
@@ -455,11 +410,7 @@ void sine(w, e, vector, count)
}
/*ARGSUSED*/
-void square(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void square(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSQR);
oneop(kSQR);
@@ -467,11 +418,7 @@ void square(w, e, vector, count)
}
/*ARGSUSED*/
-void squareRoot(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void squareRoot(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSQRT);
oneop(kSQRT);
@@ -479,11 +426,7 @@ void squareRoot(w, e, vector, count)
}
/*ARGSUSED*/
-void store(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void store(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSTO);
rpn ? memf(kSTO) : oneop(kSTO);
@@ -491,11 +434,7 @@ void store(w, e, vector, count)
}
/*ARGSUSED*/
-void subtract(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void subtract(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSUB);
rpn ? twof(kSUB) : twoop(kSUB);
@@ -503,11 +442,7 @@ void subtract(w, e, vector, count)
}
/*ARGSUSED*/
-void sum(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void sum(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kSUM);
rpn ? memf(kSUM) : oneop(kSUM);
@@ -515,11 +450,7 @@ void sum(w, e, vector, count)
}
/*ARGSUSED*/
-void tangent(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void tangent(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kTAN);
oneop(kTAN);
@@ -527,11 +458,7 @@ void tangent(w, e, vector, count)
}
/*ARGSUSED*/
-void tenpower(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void tenpower(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(k10X);
oneop(k10X);
@@ -539,11 +466,7 @@ void tenpower(w, e, vector, count)
}
/*ARGSUSED*/
-void XexchangeY(w, e, vector, count)
- Widget w;
- XEvent *e;
- String *vector;
- Cardinal *count;
+static void XexchangeY(Widget w, XEvent *e, String *vector, Cardinal *count)
{
XCALC_PRE_OP(kXXY);
twof(kXXY);
diff --git a/actions.h b/actions.h
deleted file mode 100644
index 69f1983..0000000
--- a/actions.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/* $XConsortium: actions.h,v 1.6 94/04/17 20:43:31 rws Exp $ */
-/*
-
-Copyright (c) 1989 X Consortium
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the X Consortium shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from the X Consortium.
-
-*/
-
-/*
- * actions.h - action table declaring externally available procedures for xcalc
- *
- * Author: Donna Converse, MIT X Consortium
- */
-
-extern void
- add(), back(), bell(), clearit(), cosine(), decimal(),
- degree(), digit(), divide(), e(), enter(), epower(), equal(),
- exchange(), factorial(),
- inverse(), leftParen(), logarithm(), multiply(), naturalLog(),
- negate(), nop(), off(), pi(), power(), quit(), recall(),
- reciprocal(), rightParen(), roll(), scientific(), selection(), sine(),
- square(), squareRoot(), store(), subtract(), sum(),
- tangent(), tenpower(), XexchangeY();
-
-/*
- * calculator action table
- */
-
-XtActionsRec Actions[] = {
-{"add", add}, /* addition */
-{"back", back}, /* HP-specific backspace */
-{"bell", bell}, /* ring bell */
-{"clear", clearit}, /* TI-specific clear calculator state */
-{"cosine", cosine}, /* trigonometric function cosine */
-{"decimal", decimal}, /* decimal point */
-{"degree", degree}, /* degree, radian, grad switch */
-{"digit", digit}, /* numeric key */
-{"divide", divide}, /* division */
-{"e", e}, /* the natural number e */
-{"enter", enter}, /* HP-specific enter */
-{"epower", epower}, /* e raised to a power */
-{"equal", equal}, /* TI-specific = */
-{"exchange", exchange}, /* TI-specific exchange memory and display */
-{"factorial", factorial}, /* factorial function */
-{"inverse", inverse}, /* inverse */
-{"leftParen", leftParen}, /* TI-specific left parenthesis */
-{"logarithm", logarithm}, /* logarithm base 10 */
-{"multiply", multiply}, /* multiplication */
-{"naturalLog", naturalLog}, /* natural logarithm base e */
-{"negate", negate}, /* change sign */
-{"nop", nop}, /* no operation, rings bell */
-{"off", off}, /* clear state */
-{"pi", pi}, /* the number pi */
-{"power", power}, /* raise to an arbitrary power */
-{"quit", quit}, /* quit */
-{"recall", recall}, /* memory recall */
-{"reciprocal", reciprocal}, /* reciprocal function */
-{"rightParen", rightParen}, /* TI-specific left parenthesis */
-{"roll", roll}, /* HP-specific roll stack */
-{"scientific", scientific}, /* scientfic notation (EE) */
-{"selection", selection}, /* copy selection */
-{"sine", sine}, /* trigonometric function sine */
-{"square", square}, /* square */
-{"squareRoot", squareRoot}, /* square root */
-{"store", store}, /* memory store */
-{"subtract", subtract}, /* subtraction */
-{"sum", sum}, /* memory summation */
-{"tangent", tangent}, /* trigonometric function tangent */
-{"tenpower", tenpower}, /* 10 raised to to an arbitrary power */
-{"XexchangeY", XexchangeY} /* HP-specific exchange X and Y registers */
-};
diff --git a/app-defaults/XCalc.ad b/app-defaults/XCalc
index 31d553e..31d553e 100644
--- a/app-defaults/XCalc.ad
+++ b/app-defaults/XCalc
diff --git a/app-defaults/XCalc-color.ad b/app-defaults/XCalc-color
index 6b26604..6b26604 100644
--- a/app-defaults/XCalc-color.ad
+++ b/app-defaults/XCalc-color
diff --git a/configure.ac b/configure.ac
index e46af40..4b442c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,21 +26,32 @@ AC_INIT(xcalc,[1.0.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg]
AM_INIT_AUTOMAKE([dist-bzip2])
AM_MAINTAINER_MODE
+# Require xorg-macros: XORG_CWARNFLAGS, XORG_CHANGELOG
+m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.2)
+
AM_CONFIG_HEADER(config.h)
AC_PROG_CC
AC_PROG_INSTALL
-PKG_CHECK_MODULES(XCALC, xaw7)
+XORG_CWARNFLAGS
+PKG_CHECK_MODULES(XCALC, xaw7)
+XCALC_CFLAGS="$CWARNFLAGS $XCALC_CFLAGS"
AC_SUBST(XCALC_CFLAGS)
AC_SUBST(XCALC_LIBS)
PKG_CHECK_MODULES(APPDEFS, xt)
-appdefaultdir=$(pkg-config --variable=appdefaultdir xt)
+xt_appdefaultdir=$(pkg-config --variable=appdefaultdir xt)
+AC_ARG_WITH(appdefaultdir,
+ AC_HELP_STRING([--with-appdefaultdir=<pathname>],
+ [specify directory for app-defaults files (default is autodetected)]),
+ [appdefaultdir="$withval"], [appdefaultdir="${xt_appdefaultdir}"])
AC_SUBST(appdefaultdir)
XORG_MANPAGE_SECTIONS
XORG_RELEASE_VERSION
+XORG_CHANGELOG
AC_OUTPUT([Makefile])
diff --git a/math.c b/math.c
index 46ddada..9719492 100644
--- a/math.c
+++ b/math.c
@@ -20,17 +20,7 @@
* Geoffrey Coram fixed most of the HP mode bugs.
*/
-#include <stdio.h>
-#include <X11/Xos.h>
-#include <math.h>
-#include <signal.h>
-#if !defined(IEEE) && defined(SVR4)
-#include <siginfo.h>
-#endif
-#include <setjmp.h>
#include "xcalc.h"
-#include <errno.h>
-#include <X11/Xlocale.h>
#ifdef _CRAY /* kludge around Cray STDC compiler */
double (*log_p)() = log;
@@ -72,15 +62,8 @@ double (*pow_p)() = pow;
#define True 1
#define False 0
-extern int rpn;
-extern char dispstr[];
-extern void draw();
-extern void ringbell();
-extern void setflag();
-extern void Quit();
-
#ifndef IEEE
- jmp_buf env;
+jmp_buf env;
#endif
@@ -88,7 +71,7 @@ extern void Quit();
* functions. Much of it is shared between the infix and rpn modes.
*/
-int flagINV, flagPAREN, flagM, drgmode; /* display flags */
+static int flagINV, flagPAREN, flagM, drgmode; /* display flags */
static double drg2rad=PI/180.0; /* Conversion factors for trig funcs */
static double rad2drg=180.0/PI;
@@ -130,10 +113,7 @@ static int priority(int op);
*/
static void
-parse_double (src, fmt, dp)
- char *src;
- char *fmt;
- double *dp;
+parse_double (char *src, char *fmt, double *dp)
{
int olderrno = errno;
@@ -144,8 +124,7 @@ parse_double (src, fmt, dp)
/*********************************/
-int pre_op(keynum)
- int keynum;
+int pre_op(int keynum)
{
if (keynum==-1) return(0);
@@ -168,99 +147,44 @@ int pre_op(keynum)
/* cannot assign result of setjmp under ANSI C, use global instead */
static volatile int SignalKind;
-static volatile int SignalCode;
-void fail_op()
+void fail_op(void)
{
if (SignalKind == SIGFPE)
- switch (SignalCode) {
-#ifdef SVR4
- case FPE_INTDIV: /* integer divide by zero */
- case FPE_FLTDIV: /* floating point divide by zero */
- strcpy(dispstr, "divide by 0");
- break;
- case FPE_INTOVF: /* integer overflow */
- case FPE_FLTOVF: /* floating point overflow */
- strcpy(dispstr, "overflow");
- break;
- case FPE_FLTUND: /* floating point underflow */
- strcpy(dispstr, "underflow");
- break;
- case FPE_FLTRES: /* floating point inexact result */
- strcpy(dispstr, "inexact result");
- break;
- case FPE_FLTINV: /* invalid floating point operation */
- strcpy(dispstr, "invalid op");
- break;
- case FPE_FLTSUB: /* subscript out of range */
- strcpy(dispstr, "out of range");
- break;
-
-#endif /*SVR4*/
-
-#ifdef FPE_FLTDIV_TRAP
- case FPE_FLTDIV_TRAP: strcpy(dispstr,"div by zero"); break;
-#endif
-#ifdef FPE_FLTDIV_FAULT
- case FPE_FLTDIV_FAULT: strcpy(dispstr,"div by zero"); break;
-#endif
-#ifdef FPE_FLTOVF_TRAP
- case FPE_FLTOVF_TRAP: strcpy(dispstr,"overflow"); break;
-#endif
-#ifdef FPE_FLTOVF_FAULT
- case FPE_FLTOVF_FAULT: strcpy(dispstr,"overflow"); break;
-#endif
-#ifdef FPE_FLTUND_TRAP
- case FPE_FLTUND_TRAP: strcpy(dispstr,"underflow"); break;
-#endif
-#ifdef FPE_FLTUND_FAULT
- case FPE_FLTUND_FAULT: strcpy(dispstr,"underflow"); break;
-#endif
- default: strcpy(dispstr,"error");
- }
- else
- if (SignalKind == SIGILL)
- strcpy(dispstr, "illegal operand");
+ strcpy(dispstr, "math error");
+ else if (SignalKind == SIGILL)
+ strcpy(dispstr, "illegal operand");
entered=3;
DrawDisplay();
return;
}
-
-/* keep SVR4 compiler from complaining about scope of arg declaration below */
-typedef struct sigcontext * sigcontextstructp;
/*ARGSUSED*/
-signal_t fperr(sig,code,scp)
- int sig,code;
- sigcontextstructp scp;
+signal_t fperr(int sig)
{
#if defined(SYSV) || defined(SVR4) || defined(linux)
- signal(SIGFPE,(signal_t (*)())fperr);
+ signal(SIGFPE, fperr);
#endif
SignalKind = sig;
- SignalCode = code;
longjmp(env,1);
}
/* for VAX BSD4.3 */
/*ARGSUSED*/
-signal_t illerr(sig,code,scp)
- int sig,code;
- sigcontextstructp scp;
+signal_t illerr(int sig)
{
/* not reset when caught? */
- signal(SIGILL,(signal_t (*)())illerr);
+ signal(SIGILL, illerr);
SignalKind = sig;
- SignalCode = code;
longjmp(env,1);
}
#endif /* not IEEE */
-void post_op()
+void post_op(void)
{
#ifdef DEBUG
showstack("\0");
@@ -302,8 +226,7 @@ DrawDisplay(void)
/*-------------------------------------------------------------------------*/
void
-numeric(keynum)
- int keynum;
+numeric(int keynum)
{
char st[2];
int cell = 0;
@@ -831,7 +754,7 @@ oneop(int keynum)
entered=3;
break;
}
- i=(int) (floor(dnum));
+ dtmp = floor(dnum); i = dtmp;
for (j=1,dnum=1.0; j<=i; j++)
dnum*=(float) j;
break;
@@ -877,8 +800,7 @@ static int numsp;
/*******/
static void
-PushOp(op)
- int op;
+PushOp(int op)
/*******/
{
if (opsp==STACKMAX) {strcpy(dispstr,"stack error"); entered=3;}
@@ -908,8 +830,7 @@ isopempty(void)
#ifdef DEBUG
static void
-showstack(string)
- char *string;
+showstack(char *string)
{
fprintf(stderr, "%s: %lf %lf %lf\n", string, numstack[0], numstack[1],
numstack[2]);
@@ -918,8 +839,7 @@ showstack(string)
/*******/
static void
-PushNum(num)
- double num;
+PushNum(double num)
/*******/
{
if (rpn) {
@@ -990,8 +910,7 @@ ClearStacks(void)
/*******/
static int
-priority(op)
- int op;
+priority(int op)
/*******/
{
switch (op) {
diff --git a/xcalc.c b/xcalc.c
index 0f94311..0796448 100644
--- a/xcalc.c
+++ b/xcalc.c
@@ -40,10 +40,9 @@ from the X Consortium.
*/
#include <stdio.h>
+#include <stdlib.h>
#include <math.h>
#include <signal.h>
-#include <X11/Intrinsic.h>
-#include <X11/StringDefs.h>
#include <X11/Xatom.h>
#include <X11/Shell.h>
#include <X11/Xaw/Cardinals.h>
@@ -53,18 +52,20 @@ from the X Consortium.
#include <X11/Xaw/Toggle.h>
#include <X11/cursorfont.h>
#include "xcalc.h"
-#include "actions.h"
-#ifndef IEEE
-extern signal_t fperr();
-extern signal_t illerr();
-#endif
+static Boolean convert(Widget w, Atom *selection, Atom *target, Atom *type,
+ XtPointer *value, unsigned long *length, int *format);
+static void create_keypad(Widget parent);
+static void create_display(Widget parent);
+static void create_calculator(Widget shell);
+static void done(Widget w, Atom *selection, Atom *target);
+static void lose(Widget w, Atom *selection);
+static void Syntax(int argc, char **argv);
/*
* global data
*/
int rpn = 0; /* Reverse Polish Notation (HP mode) flag */
-#define LCD_STR_LEN 32
char dispstr[LCD_STR_LEN]; /* string to show up in the LCD */
Atom wm_delete_window; /* see ICCCM section 5.2.2 */
@@ -112,16 +113,10 @@ static XtResource Resources[] = {
int
-main(argc, argv)
- int argc;
- char **argv;
+main(int argc, char **argv)
{
Arg args[3];
- void create_calculator();
- void Quit(), Syntax();
-
-
XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL);
toplevel = XtAppInitialize(&xtcontext, "XCalc", Options, XtNumber(Options),
@@ -136,7 +131,7 @@ main(argc, argv)
create_calculator(toplevel);
- XtAppAddActions(xtcontext, Actions, XtNumber(Actions));
+ XtAppAddActions(xtcontext, Actions, ActionsCount);
XtOverrideTranslations(toplevel,
XtParseTranslationTable("<Message>WM_PROTOCOLS: quit()\n"));
@@ -172,12 +167,8 @@ main(argc, argv)
return 0;
}
-void create_calculator(shell)
- Widget shell;
+static void create_calculator(Widget shell)
{
- void create_display();
- void create_keypad();
-
rpn = appResources.rpn;
calculator = XtCreateManagedWidget(rpn ? "hp" : "ti", formWidgetClass,
shell, (ArgList) NULL, ZERO);
@@ -189,8 +180,7 @@ void create_calculator(shell)
/*
* Do the calculator data display widgets.
*/
-void create_display(parent)
- Widget parent;
+static void create_display(Widget parent)
{
Widget bevel, screen;
static Arg args[] = {
@@ -242,8 +232,7 @@ void create_display(parent)
* these defaults in an environment-specific resource file.
*/
-void create_keypad(parent)
- Widget parent;
+static void create_keypad(Widget parent)
{
static char *Keyboard[] = {
"button1", "button2", "button3", "button4", "button5",
@@ -272,8 +261,7 @@ void create_keypad(parent)
/*
* called by math routines to write to the liquid crystal display.
*/
-void draw(string)
- char *string;
+void draw(char *string)
{
Arg args[1];
@@ -283,9 +271,7 @@ void draw(string)
/*
* called by math routines to turn on and off the display indicators.
*/
-void setflag(indicator, on)
- int indicator;
- Boolean on;
+void setflag(int indicator, Boolean on)
{
if (on) XtMapWidget(ind[indicator]);
else XtUnmapWidget(ind[indicator]);
@@ -294,7 +280,7 @@ void setflag(indicator, on)
/*
* ring the bell.
*/
-void ringbell()
+void ringbell(void)
{
XBell(dpy, 0);
}
@@ -302,9 +288,8 @@ void ringbell()
/*
* die.
*/
-void Quit()
+void Quit(void)
{
- extern void exit();
XtDestroyApplicationContext(xtcontext);
exit(0);
}
@@ -312,12 +297,10 @@ void Quit()
/*
* recite and die.
*/
-void Syntax(argc, argv)
- int argc;
- char **argv;
+static void Syntax(int argc, char **argv)
{
register int i;
- extern void exit();
+
(void) fprintf(stderr, "%s: unknown options:", argv[0]);
for (i=1; i <argc; i++)
(void) fprintf(stderr, " %s", argv[i]);
@@ -339,14 +322,8 @@ void Syntax(argc, argv)
*/
/*ARGSUSED*/
-Boolean convert(w, selection, target, type, value, length, format)
- Widget w;
- Atom *selection;
- Atom *target;
- Atom *type;
- XtPointer *value;
- unsigned long *length;
- int *format;
+static Boolean convert(Widget w, Atom *selection, Atom *target, Atom *type,
+ XtPointer *value, unsigned long *length, int *format)
{
if (*target == XA_STRING)
{
@@ -364,9 +341,7 @@ Boolean convert(w, selection, target, type, value, length, format)
* called when xcalc loses ownership of the selection.
*/
/*ARGSUSED*/
-void lose(w, selection)
- Widget w;
- Atom *selection;
+static void lose(Widget w, Atom *selection)
{
XawToggleUnsetCurrent(LCD);
}
@@ -375,10 +350,7 @@ void lose(w, selection)
* called when some other client got the selection.
*/
/*ARGSUSED*/
-void done(w, selection, target)
- Widget w;
- Atom *selection;
- Atom *target;
+static void done(Widget w, Atom *selection, Atom *target)
{
selstr[0] = '\0';
}
@@ -386,8 +358,7 @@ void done(w, selection, target)
/*
* called by the selection() action routine, in response to user action.
*/
-void do_select(time)
- Time time;
+void do_select(Time time)
{
Boolean state;
Arg args[1];
diff --git a/xcalc.h b/xcalc.h
index df8916e..5020bfe 100644
--- a/xcalc.h
+++ b/xcalc.h
@@ -39,6 +39,21 @@ from the X Consortium.
#ifndef _XCALC_H_
#define _XCALC_H_
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+
+#include <stdio.h>
+#include <X11/Xos.h>
+#include <math.h>
+#include <signal.h>
+#if !defined(IEEE) && defined(SVR4)
+#include <siginfo.h>
+#endif
+#include <setjmp.h>
+#include <errno.h>
+#include <X11/Xlocale.h>
+
+
#ifdef SIGNALRETURNSINT
#define signal_t int
#else
@@ -100,6 +115,17 @@ from the X Consortium.
#define XCalc_GRADAM 4 /* grad indicator */
#define XCalc_PAREN 5 /* parenthesis indicator */
+/* actions.c */
+extern XtActionsRec Actions[];
+extern int ActionsCount;
+
+/* math.c */
+extern signal_t fperr(int sig);
+extern signal_t illerr(int sig);
+extern void fail_op(void);
+extern int pre_op(int keynum);
+extern void post_op(void);
+
extern void numeric(int keynum);
extern void bkspf(void);
extern void decf(void);
@@ -120,4 +146,20 @@ extern void oneop(int keynum);
extern void offf(void);
extern void ResetCalc(void);
+#ifndef IEEE
+extern jmp_buf env;
+#endif
+
+/* xcalc.c */
+extern void do_select(Time time);
+extern void draw(char *string);
+extern void Quit(void);
+extern void ringbell(void);
+extern void setflag(int indicator, Boolean on);
+
+extern int rpn;
+#define LCD_STR_LEN 32
+extern char dispstr[LCD_STR_LEN];
+extern Atom wm_delete_window;
+
#endif