#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
void add(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kADD);
rpn ? twof(kADD) : twoop(kADD);
post_op();
}
void back(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kBKSP);
bkspf();
post_op();
}
void bell(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
ringbell();
}
void clearit(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kCLR);
clearf();
post_op();
}
void cosine(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kCOS);
oneop(kCOS);
post_op();
}
void decimal(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kDEC);
decf();
post_op();
}
void degree(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kDRG);
drgf();
post_op();
}
void digit(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
switch (vector[0][0])
{
case '1': XCALC_PRE_OP(kONE); numeric(kONE); break;
case '2': XCALC_PRE_OP(kTWO); numeric(kTWO); break;
case '3': XCALC_PRE_OP(kTHREE); numeric(kTHREE); break;
case '4': XCALC_PRE_OP(kFOUR); numeric(kFOUR); break;
case '5': XCALC_PRE_OP(kFIVE); numeric(kFIVE); break;
case '6': XCALC_PRE_OP(kSIX); numeric(kSIX); break;
case '7': XCALC_PRE_OP(kSEVEN); numeric(kSEVEN); break;
case '8': XCALC_PRE_OP(kEIGHT); numeric(kEIGHT); break;
case '9': XCALC_PRE_OP(kNINE); numeric(kNINE); break;
case '0': XCALC_PRE_OP(kZERO); numeric(kZERO); break;
}
post_op();
}
void divide(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kDIV);
rpn ? twof(kDIV) : twoop(kDIV);
post_op();
}
void e(w, ev, vector, count)
Widget w;
XEvent *ev;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kE);
oneop(kE);
post_op();
}
void enter(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kENTR);
entrf();
post_op();
}
void epower(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kEXP);
oneop(kEXP);
post_op();
}
void equal(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kEQU);
equf();
post_op();
}
void exchange(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kEXC);
oneop(kEXC);
post_op();
}
void factorial(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kFACT);
oneop(kFACT);
post_op();
}
void inverse(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kINV);
invf();
post_op();
}
void leftParen(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kLPAR);
lparf();
post_op();
}
void logarithm(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kLOG);
oneop(kLOG);
post_op();
}
void multiply(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kMUL);
rpn ? twof(kMUL) : twoop(kMUL);
post_op();
}
void naturalLog(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kLN);
oneop(kLN);
post_op();
}
void negate(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kNEG);
negf();
post_op();
}
void nop(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
ringbell();
}
void off(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kOFF);
offf();
post_op();
}
void pi(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kPI);
oneop(kPI);
post_op();
}
void power(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kPOW);
rpn ? twof(kPOW) : twoop(kPOW);
post_op();
}
void quit(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
if (e->type == ClientMessage && e->xclient.data.l[0] != wm_delete_window)
ringbell();
else
Quit();
}
void recall(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kRCL);
rpn ? memf(kRCL) : oneop(kRCL);
post_op();
}
void reciprocal(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kRECIP);
oneop(kRECIP);
post_op();
}
void rightParen(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kRPAR);
rparf();
post_op();
}
void roll(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kROLL);
rollf();
post_op();
}
void scientific(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kEE);
eef();
post_op();
}
void selection(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
do_select(((XButtonReleasedEvent *)e)->time);
}
void sine(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSIN);
oneop(kSIN);
post_op();
}
void square(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSQR);
oneop(kSQR);
post_op();
}
void squareRoot(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSQRT);
oneop(kSQRT);
post_op();
}
void store(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSTO);
rpn ? memf(kSTO) : oneop(kSTO);
post_op();
}
void subtract(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSUB);
rpn ? twof(kSUB) : twoop(kSUB);
post_op();
}
void sum(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kSUM);
rpn ? memf(kSUM) : oneop(kSUM);
post_op();
}
void tangent(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kTAN);
oneop(kTAN);
post_op();
}
void tenpower(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(k10X);
oneop(k10X);
post_op();
}
void XexchangeY(w, e, vector, count)
Widget w;
XEvent *e;
String *vector;
Cardinal *count;
{
XCALC_PRE_OP(kXXY);
twof(kXXY);
post_op();
}