[comp.sources.misc] Calctool v2.1 - a Sun calculator. Part 2 of 2.

richb@sunaus.sun.oz.AU (02/22/88)

This is V2.1 of a desktop calculator for the Sun workstation.
Currently this version works under SunView, but NeWS and X.11 versions
will be coming soon.

Rich Burridge,           JANET richb%sunaus.oz@uk.ac.ucl.cs
ACSnet  richb@sunaus.oz  UUCP {uunet,hplabs,mcvax,ukc}!munnari!sunaus.oz!richb
PHONE: +61 2 436 4699    ARPAnet rburridge@Sun.COM
Sun Microsystems, Unit 2, 49-53 Hotham Pde, Artarmon, N.S.W. 2164, AUSTRALIA.

------CUT HERE------CUT HERE------
#! /bin/sh
# this is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh to create the files:
#   calctool.h
#   color.h
#   button.icon
#   calctool.icon
#   help.cursor
#   Makefile
#   README
#   calctool.help
#   patchlevel.h
# This archive created: Fri Feb 19 19:00:00 EST 1988
#
#
export PATH; PATH=/bin:$PATH
#
if [ -f calctool.h ]
then
echo shar: will not over-write existing file calctool.h
else
echo shar: extracting 'calctool.h',     3692 characters
cat > calctool.h <<'Funky_Stuff'

/*  calctool.h
 *
 *  This files contains all the global definitions used by the calctool
 *  calculator program.
 *
 *  Copyright (c) Rich Burridge - February 1988.
 *                Sun Microsystems, Australia - All rights reserved.
 *
 *  Basic algorithms by Ed Falk, Sun Microsystems, Mountain View.
 *
 *  Includes ideas and code from:
 *                Rich Baughman, Consumer Financial Institute, Newton, MA
 *
 *  Version 2.1.
 *
 *  No responsibility is taken for any errors or inaccuracies inherent
 *  either to the comments or the code of this program, but if
 *  reported to me then an attempt will be made to fix them.
 */

#include <stdio.h>
#include <strings.h>
#include <ctype.h>
#include <math.h>

char *sprintf() ;

#define  CLOSE          (void) close      /* To make lint happy. */
#define  FCLOSE         (void) fclose
#define  FGETS          (void) fgets
#define  FPRINTF        (void) fprintf
#define  IOCTL          (void) ioctl
#define  READ           (void) read
#define  SPRINTF        (void) sprintf
#define  SSCANF         (void) sscanf
#define  STRCAT         (void) strcat
#define  STRCPY         (void) strcpy
#define  STRNCAT        (void) strncat
#define  STRNCPY        (void) strncpy
#define  WRITE          (void) write

#define  SMALLFONT      "/usr/lib/fonts/fixedwidthfonts/screen.r.7"
#define  NORMALFONT     "/usr/lib/fonts/fixedwidthfonts/screen.b.14"
#define  BIGFONT        "/usr/lib/fonts/fixedwidthfonts/gallant.r.19"

#define  HELPCURSOR     0                /* Cursor types. */
#define  MAINCURSOR     1

#define  BIN            0                /* Base definitions. */
#define  OCT            1
#define  DEC            2
#define  HEX            3

#define  DEG            0                /* Trigonometric types. */
#define  GRAD           1
#define  RAD            2

#define  OP_SET         1                /* Operation text item settings. */
#define  OP_CLEAR       2
#define  OP_NOP         3

#define  BBORDER        10               /* No of pixels in border. */
#define  BCOLS          6                /* No of columns of buttons. */
#define  BGAP           5                /* No of pixels between buttons. */
#define  BHEIGHT        52               /* Number of pixels for height. */
#define  BROWS          6                /* No of rows of buttons. */
#define  BWIDTH         44               /* No of pixels for width. */

#define  CTRL(n)        n - 96           /* Generate control character value. */
#define  DISPLAY        30               /* Calculators numerical display. */

#define  EQUAL          !strcmp          /* For character comparisons. */
#define  EXTRA          4                /* Extra useful character definitions. */
#define  HELPNAME       "calctool.help"
#define  MAX_DIGITS     32               /* Maximum displayable number of digits. */
#define  MAXLINE        80               /* Length of character strings. */
#define  MAXREGS        10               /* Maximum number of memory registers. */
#define  MIN(x,y)       ((x) < (y) ? (x) : (y))
#define  NOBUTTONS      BROWS * BCOLS
#define  THEIGHT        (BROWS*BHEIGHT) + ((BROWS-1) * BGAP) + (2*BBORDER)
#define  TITEMS         NOBUTTONS*2 + EXTRA    /* Total definitions. */
#define  TWIDTH         (BCOLS*BWIDTH) + ((BCOLS-1) * BGAP) + (2*BBORDER)

typedef  unsigned long  BOOLEAN ;

struct button {
         char *str ;          /* Button display string. */
         char value ;         /* Unique button keyboard equivalent. */
         char opdisp ;        /* Display operation code during operation. */
         char color ;         /* Color of button portion. */
         int  (*func)() ;     /* Function to obey on button press. */
} ;
Funky_Stuff
len=`wc -c < calctool.h`
if [ $len !=     3692 ] ; then
echo error: calctool.h was $len bytes long, should have been     3692
fi
fi # end of overwriting check
if [ -f color.h ]
then
echo shar: will not over-write existing file color.h
else
echo shar: extracting 'color.h',     2284 characters
cat > color.h <<'Funky_Stuff'

/*  color.h
 *
 *  Colormap definitions used by the calctool calculator program.
 *
 *  Copyright (c) Rich Burridge - February 1988.
 *               Sun Microsystems, Australia - All rights reserved.
 *
 *  Basic algorithms by Ed Falk, Sun Microsystems, Mountain View.
 *
 *  Includes ideas and code from:
 *                Rich Baughman, Consumer Financial Institute, Newton, MA
 *
 *  Version 2.1.
 *
 *  No responsibility is taken for any errors or inaccuracies inherent
 *  either to the comments or the code of this program, but if
 *  reported to me then an attempt will be made to fix them.
 */

#define  CALC_COLOR      "calcolor"
#define  CALC_COLORSIZE  16

#define  WHITE    0
#define  RED      1
#define  ORANGE   2
#define  YELLOW   3
#define  LGREEN   4
#define  BLUE     5
#define  MAUVE    6
#define  GREEN    7
#define  PINK     8
#define  LBLUE    9
#define  GREY     10
#define  LGREY    11
#define  LPURPLE  12
#define  BLACK    13
#define  SPARE14  14
#define  SPARE15  15

#define calc_colorsetup(r,g,b) \
        (r)[WHITE] = 255 ;       (g)[WHITE] = 255 ;       (b)[WHITE] = 255 ; \
        (r)[RED] = 255 ;         (g)[RED] = 50 ;          (b)[RED] = 0 ; \
        (r)[ORANGE] = 255 ;      (g)[ORANGE] = 128 ;      (b)[ORANGE] = 0 ; \
        (r)[YELLOW] = 255 ;      (g)[YELLOW] = 255 ;      (b)[YELLOW] = 0 ; \
        (r)[LGREEN] = 128 ;      (g)[LGREEN] = 255 ;      (b)[LGREEN] = 128 ; \
        (r)[BLUE] = 50 ;         (g)[BLUE] = 128 ;        (b)[BLUE] = 255 ; \
        (r)[MAUVE] = 128 ;       (g)[MAUVE] = 128 ;       (b)[MAUVE] = 255 ; \
        (r)[GREEN] = 0 ;         (g)[GREEN] = 158 ;       (b)[GREEN] = 158 ; \
        (r)[PINK] = 255 ;        (g)[PINK] = 192 ;        (b)[PINK] = 192 ; \
        (r)[LBLUE] = 50 ;        (g)[LBLUE] = 178 ;       (b)[LBLUE] = 255 ; \
        (r)[GREY] = 128 ;        (g)[GREY] = 128 ;        (b)[GREY] = 128 ; \
        (r)[LGREY] = 200 ;       (g)[LGREY] = 200 ;       (b)[LGREY] = 200 ; \
        (r)[LPURPLE] = 225 ;     (g)[LPURPLE] = 225 ;     (b)[LPURPLE] = 255 ; \
        (r)[BLACK] = 0 ;         (g)[BLACK] = 0 ;         (b)[BLACK] = 0 ; \
        (r)[SPARE14] = 0 ;       (g)[SPARE14] = 0 ;       (b)[SPARE14] = 0 ; \
        (r)[SPARE15] = 0 ;       (g)[SPARE15] = 0 ;       (b)[SPARE15] = 0 ;
Funky_Stuff
len=`wc -c < color.h`
if [ $len !=     2284 ] ; then
echo error: color.h was $len bytes long, should have been     2284
fi
fi # end of overwriting check
if [ -f button.icon ]
then
echo shar: will not over-write existing file button.icon
else
echo shar: extracting 'button.icon',     1933 characters
cat > button.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0xFFFF,0xFFFF,0xFFF0,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x87FF,0xFFFF,0xFE10,0x0000,0x8400,0x0000,0x0210,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x85FF,0xFFFF,0xFA10,0x0000,
	0x85FF,0xFFFF,0xFA10,0x0000,0x8400,0x0000,0x0210,0x0000,
	0x87FF,0xFFFF,0xFE10,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0x8000,0x0000,0x0010,0x0000,
	0x8000,0x0000,0x0010,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
Funky_Stuff
len=`wc -c < button.icon`
if [ $len !=     1933 ] ; then
echo error: button.icon was $len bytes long, should have been     1933
fi
fi # end of overwriting check
if [ -f calctool.icon ]
then
echo shar: will not over-write existing file calctool.icon
else
echo shar: extracting 'calctool.icon',     1933 characters
cat > calctool.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0x1555,0x5555,0x5540,0x0000,0x2AAA,0xAAAA,0xAA80,0x0000,
	0x5555,0x5555,0x5540,0x0000,0xFFFF,0xFFFF,0xFE80,0x0000,
	0x8000,0x0000,0x0340,0x0000,0xBFFF,0xFFFF,0xFA80,0x0000,
	0xA000,0x0000,0x0B40,0x0000,0xA000,0x0000,0x0A80,0x0000,
	0xA003,0x0030,0xCB40,0x0000,0xA004,0x8049,0x2A80,0x0000,
	0xA005,0x8059,0x6B40,0x0000,0xA006,0x8069,0xAA80,0x0000,
	0xA004,0x8449,0x2B40,0x0000,0xA003,0x0430,0xCA80,0x0000,
	0xA000,0x0000,0x0B40,0x0000,0xA000,0x0000,0x0A80,0x0000,
	0xBFFF,0xFFFF,0xFB40,0x0000,0x8000,0x0000,0x0280,0x0000,
	0x8000,0x0000,0x0340,0x0000,0xBFDF,0xEFF7,0xFA80,0x0000,
	0xA050,0x2814,0x0B40,0x0000,0xAF53,0x2994,0x0A80,0x0000,
	0xA154,0xAA55,0x1340,0x0000,0xA253,0x2A54,0xAA80,0x0000,
	0xA254,0xA9D4,0x4B40,0x0000,0xA454,0xA854,0xAA80,0x0000,
	0xA453,0x2995,0x1B40,0x0000,0xA050,0x2814,0x0A80,0x0000,
	0xBFDF,0xEFF7,0xFB40,0x0000,0x8000,0x0000,0x0280,0x0000,
	0xBFDF,0xEFF7,0xFB40,0x0000,0xA050,0x2814,0x0A80,0x0000,
	0xA257,0xA994,0x2B40,0x0000,0xA654,0x2A14,0x4A80,0x0000,
	0xAA57,0x2B94,0x4B40,0x0000,0xAF50,0xAA54,0x8A80,0x0000,
	0xA254,0xAA54,0x8B40,0x0000,0xA253,0x2995,0x0A80,0x0000,
	0xA050,0x2814,0x0B40,0x0000,0xBFDF,0xEFF7,0xFA80,0x0000,
	0x8000,0x0000,0x0340,0x0000,0xBFDF,0xEFF7,0xFA80,0x0000,
	0xA050,0x2814,0x0B40,0x0000,0xA253,0x2994,0x0A80,0x0000,
	0xA654,0xAA54,0x0B40,0x0000,0xA250,0xA895,0xEA80,0x0000,
	0xA253,0x2854,0x0B40,0x0000,0xA254,0x2A54,0x0A80,0x0000,
	0xA757,0xA994,0x0B40,0x0000,0xA050,0x2814,0x0A80,0x0000,
	0xBFDF,0xEFF7,0xFB40,0x0000,0x8000,0x0000,0x0280,0x0000,
	0xBFDF,0xEFF7,0xFB40,0x0000,0xA050,0x2814,0x0A80,0x0000,
	0xA650,0x2814,0x0B40,0x0000,0xA950,0x2814,0x4A80,0x0000,
	0xAB50,0x2BD4,0x4B40,0x0000,0xAD50,0x2815,0xFA80,0x0000,
	0xA951,0x2BD4,0x4B40,0x0000,0xA651,0x2814,0x4A80,0x0000,
	0xA050,0x2814,0x0B40,0x0000,0xBFDF,0xEFF7,0xFA80,0x0000,
	0x8000,0x0000,0x0300,0x0000,0xFFFF,0xFFFF,0xFE00,0x0000
Funky_Stuff
len=`wc -c < calctool.icon`
if [ $len !=     1933 ] ; then
echo error: calctool.icon was $len bytes long, should have been     1933
fi
fi # end of overwriting check
if [ -f help.cursor ]
then
echo shar: will not over-write existing file help.cursor
else
echo shar: extracting 'help.cursor',      193 characters
cat > help.cursor <<'Funky_Stuff'
/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
 */
	0x0000,0x03C0,0x07E0,0x0E70,0x0830,0x0030,0x0030,0x0060,
	0x00C0,0x0180,0x0300,0x0300,0x0000,0x0000,0x0300,0x0300
Funky_Stuff
len=`wc -c < help.cursor`
if [ $len !=      193 ] ; then
echo error: help.cursor was $len bytes long, should have been      193
fi
fi # end of overwriting check
if [ -f Makefile ]
then
echo shar: will not over-write existing file Makefile
else
echo shar: extracting 'Makefile',     1300 characters
cat > Makefile <<'Funky_Stuff'
#
#  Makefile for calctool, a calculator program.
#
#  Copyright (c) Rich Burridge - February 1988.
#                Sun Microsystems, Australia - All rights reserved.
#
#  Includes code and ideas from:
#                Rich Baughman, Consumer Financial Institute, Newton, MA
#
#  Version 2.1.
#
#  No responsibility is taken for any errors inherent either in the comments
#  or the code of this program, but if reported to me then an attempt will
#  be made to fix them.
#

BINARIES        = calctool
BINDIR          = .
CFLAGS          = -O
HEADERS         = calctool.h color.h
OBJS            = calctool.o functions.o sunview.o
OTHERS          = Makefile README calctool.help patchlevel.h
SRCS            = calctool.c functions.c sunview.c
IMAGES          = button.icon calctool.icon help.cursor
LIBS            = -lm -lsuntool -lsunwindow -lpixrect

all:            $(BINARIES)

install:        $(BINARIES)
		strip $(BINARIES)
		-mv $(BINARIES) $(BINDIR)

clean:
		rm -f *.o core

lint:
		lint $(SRCS) $(LIBS)

shar:
		shar.sh $(SRCS) > archive.1
		shar.sh $(HEADERS) $(IMAGES) $(OTHERS) > archive.2

calctool:       $(OBJS)
		cc -o calctool $(OBJS) $(LIBS)

calctool.o:     calctool.c $(HEADERS) patchlevel.h
functions.o:    functions.c $(HEADERS)
sunview.o:      sunview.c $(HEADERS) $(IMAGES)
Funky_Stuff
len=`wc -c < Makefile`
if [ $len !=     1300 ] ; then
echo error: Makefile was $len bytes long, should have been     1300
fi
fi # end of overwriting check
if [ -f README ]
then
echo shar: will not over-write existing file README
else
echo shar: extracting 'README',     1018 characters
cat > README <<'Funky_Stuff'

calctool  -  README  -  19th February 1988.

This is V2.1 of a desktop calculator for the Sun workstation.
Currently this version works under SunView, but NeWS and X.11 versions
will be coming soon.

This is a complete rehash from the v1.x series, and now includes
many more mathematical and trigonometrical functions. Memory register
manipulation has been extended, the user interface tidied up and color
is now supported.

See the online help or the manual pages for more details.

Thankyou to everybody who has sent me mail suggesting enhancements.

Thanks to Ed Falk at Sun Microsystems (Mountain View) for some of the
basic algorithms used.

Suggestions for furthur improvement would be most welcome plus bugs,
comments and flames.

    Rich.

Rich Burridge,           JANET richb%sunaus.oz@uk.ac.ucl.cs
ACSnet  richb@sunaus.oz  UUCP {uunet,hplabs,mcvax,ukc}!munnari!sunaus.oz!richb
PHONE: +61 2 436 4699    ARPAnet rburridge@Sun.COM
Sun Microsystems, Unit 2, 49-53 Hotham Pde, Artarmon, N.S.W. 2164, AUSTRALIA.
Funky_Stuff
len=`wc -c < README`
if [ $len !=     1018 ] ; then
echo error: README was $len bytes long, should have been     1018
fi
fi # end of overwriting check
if [ -f calctool.help ]
then
echo shar: will not over-write existing file calctool.help
else
echo shar: extracting 'calctool.help',     9284 characters
cat > calctool.help <<'Funky_Stuff'
_calctool.help_
_<   _
Left shift n                ( < ).

This must be followed by a digit
in the range 0 to 9 to indicate
how many places to shift.
_>   _
Right shift n               ( > ).

This must be followed by a digit
in the range 0 to 9 to indicate
how many places to shift.
_BIN _
Change base to binary       ( B ).

The display value is shown in
binary. A maximum of 32 digits
are allowed.
_MEM _
Toggle register window      ( M ).

Display popup window with the
values of the ten memory
registers given in the current
base, to the current accuracy.
_OCT _
Change base to octal        ( O ).

The display value is shown in
octal. A maximum of 15 digits
are allowed.
_D   _
Hex D (decimal 13)          ( d ).

This selection is only valid if
the current base is hexidecimal.
_DEC _
Change base to decimal      ( D ).

The display value is shown in
decimal. This is the default
base. A maximum of 12 digits
are allowed.
_E   _
Hex E (decimal 14)          ( e ).

This selection is only valid if
the current base is hexidecimal.
_HEX _
Change base to hexidecimal  ( H ).
 
The display value is shown in
hexidecimal. A maximum of 12
digits are allowed.
_F   _
Hex F (decimal 15)          ( f ).

This selection is only valid if
the current base is hexidecimal.
_KEYS_
Toggle button labels        ( K ).

Toggle the labels on the calctool
buttons between the mouse and
keyboard equivalents.
_?   _
Calctool Help v2.1.         ( ? ).

All calculations performed as
doubles. The display can be used
with the [Get] and [Put] function
keys with other Sunview windows.
Equivalent keystrokes can be
found by selecting the KEYS
button.

If an error condition occurs, you
must clear the calculator.

>From now on when you select [?]
you will get help on the next
selection you make.
_&32 _
Get 32 bit unsigned int     ( i ).

This is a logical function, that
will truncate the given number to
return a 32 bit unsigned integer.
_STO _
Store memory register n     ( s ).

This must be followed by an
arithmetic operation (addition,
subtraction, multiplication or
division), then a digit in the
range 0 to 9 to indicate which
memory register to store the
current display value in. The
arithmetic operator is optional
in which case the current display
is stored in the memory register.
_&16 _
Get 16 bit unsigned int     ( h ).

This is a logical function, that
will truncate the given number to
return a 16 bit unsigned integer.
_RCL _
Retrieve memory register n  ( r ).

This must be followed by a digit
in the range 0 to 9 to indicate
which memory register to retrieve
the value from.
_PI  _
Value of pi                 ( P ).

Enter the value of pi into the
calculator.
_A   _
Hex A (decimal 10)          ( a ).

This selection is only valid if
the current base is hexidecimal.
_e   _
Value of e                  ( E ).

Enter the value of e into the
calculator.
_B   _
Hex B (decimal 11)          ( b ).

This selection is only valid if
the current base is hexidecimal.
_%   _
Percentage                  ( % ).

This calculation takes the last
number enter and the next number
given, and performs a percentage
calculation on them.
_C   _
Hex C (decimal 12)          ( c ).
 
This selection is only valid if
the current base is hexidecimal.
_clr _
Clear display          ( Delete ).

This will clear the value of the
calculators display.
_bsp _
Erase character     ( BackSpace ).
 
The right most character of the
current calculator display value
is removed, and the value of the
display is recalculated. Note,
internal accuracy is lost with
this operation.
_OR  _
Logical OR                  ( | ).

This operation takes the last
number and the next number
entered, and performs a logical
OR operation on them, treating
both numbers as unsigned long
integers.
_AND _
Logical AND                 ( & ).

This operation takes the last
number and the next number
entered, and performs a logical
AND operation on them, treating
both numbers as unsigned long
integers.
_ASIN_
Arc Sin                     ( } ).

Return the trigonometric Arc Sin
of the current value, in the
current units, degrees, radians
or gradients.
_SIN _
Sin                         ( { ).

Return the trigonometric Sin of
the current value, in the current
units, degrees, radians or
gradients.
_e^x _
e to the x power            ( # ).

Return e raised to the power of
the current display value.
_7   _
Numeric 7                   ( 7 ).

This selection is ignored if
the current base is binary.
_10^x_
10 to the x power            ( $ ).

Return 10 raised to the power of
the current display value.
_8   _
Numeric 8                   ( 8 ).

This selection is ignored if
the current base is octal or
binary.
_y^x _
y to the power of x         ( Y ).

The operation takes the last
number and raises it to the power
of the next number given.
_9   _
Numeric 9                   ( 9 ).

This selection is ignored if
the current base is octal or
binary.
_INT _
Integer portion             ( I ).

Return the integer portion of the
current displayed value.
_X   _
Multiplication    ( * or x or X ).

This operation takes the last
number and the next number
entered, and performs an
arithmetic multiplication on
them.
_XNOR_
Logical XNOR           ( n or N ).

This operation takes the last
number and the next number
entered, and performs a logical
XNOR operation on them, treating
both numbers as unsigned long
integers.
_XOR _
Logical XOR                 ( ^ ).

This operation takes the last
number and the next number
entered, and performs a logical
XOR operation on them, treating
both numbers as unsigned long
integers.
_ACOS_
Arc Cos                     ( ) ).

Return the trigonometric Arc Cos
of the current value, in the
current units, degrees, radians
or gradients.
_COS _
Cos                         ( ( ).

Return the trigonometric Cos of
the current value, in the current
units, degrees, radians or
gradients.
_ln  _
Natural log                 ( N ).

This operation returns the
natural logarithm of the current
displayed value.
_4   _
Numeric 4                   ( 4 ).

This selection is ignored if
the current base is binary.
_log _
Base 10 log                 ( G ).

This operation returns the base
10 logarithm of the current
displayed value.
_5   _
Numeric 5                   ( 5 ).

This selection is ignored if
the current base is binary.
_SQRT_
Square root                 ( S ).

This operation will perform a
square root operation on the
current value of the calculator
display.
_6   _
Numeric 6                   ( 6 ).

This selection is ignored if
the current base is binary.
_FRAC_
Fractional portion          ( F ).

Return the fractional portion of
the current displayed value.
_/   _
Division                    ( / ).

This operation takes the last
number and performs an
arithemetic division by the
next number entered.
_NOT _
Logical NOT                 ( ~ ).

This operation will perform the
logical NOT operation of the
current value of the calculators
display.
_ACC _
Accuracy n                  ( A ).

This must be followed by a digit
in the range 0 to 9 to indicate
how many digits of precision are
to be displayed.
_ATAN
Arc Tan                     ( T ).

Return the trigonometric Arc Tan
of the current value, in the
current units, degrees, radians
or gradients.
_TAN _
Tan                         ( t ).
 
Return the trigonometric Tan of
the current value, in the current
units, degrees, radians or
gradients.
_1/x _
Reciprocal                  ( R ).

The will return the current the
value of 1 divided by the current
display value.
_1   _
Numeric 1                   ( 1 ).
_x!  _
Factorial                   ( ! ).

This will return the factorial of
the current displayed value.
_2   _
Numeric 2                   ( 2 ).

This selection is ignored if
the current base is binary.
_x^2 _
Square                      ( @ ).

This will reurn the square of the
current displayed value.
_3   _
Numeric 3                   ( 3 ).

This selection is ignored if
the current base is binary.
_CHS _
Change sign                 ( C ).

Change the arithmetic sign of the
current displayed value.
_-   _
Subtraction                 ( - ).

This operation takes the last
number and performs an
arithemetic subtraction of the
next number entered.
_QUIT_
Quit calctool          ( q or Q ).

The calctool program is exited,
without user verification.
_OFF _
Turn calctool iconic        ( o ).
_    _
This key is current not used.
It will be implemented in a
future version.
_DEG _
Trig base to degrees       ( ^d ).

Change the current trigonometrical
base to degrees.
_0   _
Numeric 0                   ( 0 ).
_RAD _
Trig base to radians       ( ^r ).

Change the current trigonometrical
base to radians.
_.   _
Numeric point               ( . ).

Selecting this starts the
fractional part of the numeric
entry.
_GRAD_
Trig base to gradients     ( ^g ).

Change the current trigonometrical
base to gradients.
_=   _
Calculate result  ( = or Return ).

The result of the current
calculation is displayed in
the current base.
_ABS _
Absolute value.             ( U ).

Return the absolute value of the
current displayed value.
_+   _
Addition                    ( + ).
 
This operation takes the last
number and the next number
entered, and performs an
arithmetic addition on them.
______
Funky_Stuff
len=`wc -c < calctool.help`
if [ $len !=     9284 ] ; then
echo error: calctool.help was $len bytes long, should have been     9284
fi
fi # end of overwriting check
if [ -f patchlevel.h ]
then
echo shar: will not over-write existing file patchlevel.h
else
echo shar: extracting 'patchlevel.h',      614 characters
cat > patchlevel.h <<'Funky_Stuff'
 
/*  patchlevel.h
 *
 *  This is the current patch level for the calctool calculator program.
 *
 *  Copyright (c) Rich Burridge - February 1988.
 *		Sun Microsystems, Australia - All rights reserved.
 *
 *  Basic algorithms by Ed Falk, Sun Microsystems, Mountain View.
 *
 *  Includes ideas and code from:
 *		Rich Baughman, Consumer Financial Institute, Newton, MA
 *
 *  Version 2.1.
 *
 *  No responsibility is taken for any errors or inaccuracies inherent
 *  either to the comments or the code of this program, but if
 *  reported to me then an attempt will be made to fix them.
 */

#define  PATCHLEVEL  0
Funky_Stuff
len=`wc -c < patchlevel.h`
if [ $len !=      614 ] ; then
echo error: patchlevel.h was $len bytes long, should have been      614
fi
fi # end of overwriting check