richb@sunaus.oz (Rich Burridge) (05/04/88)
------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
# extern.h
# calctool.icon
# help.cursor
# Makefile
# README
# calctool.help
# calctool.1
# news.ps
# patchlevel.h
# This archive created: Wed May 4 15:36:19 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', 3687 characters
cat > calctool.h <<'Funky_Stuff'
/* calctool.h
*
* Contains all the global definitions used by calctool.
*
* Copyright (c) Rich Burridge - May 1988.
* Sun Microsystems, Australia - All rights reserved.
*
* Version 2.2.
*
* 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 FFLUSH (void) fflush
#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
enum base_type { BIN, OCT, DEC, HEX } ; /* Base definitions. */
enum font_type { SFONT, NFONT, BFONT } ; /* Text font definitions. */
enum can_type { KEYCANVAS, REGCANVAS, PANELCANVAS } ; /* Canvas types. */
enum but_state { NORMAL, INVERTED } ; /* Calculator button states. */
enum item_type { BASEITEM, DISPLAYITEM, OPITEM, TTYPEITEM } ; /* Text items. */
enum trig_type { DEG, GRAD, RAD } ; /* Trigonometric types. */
enum op_type { OP_SET, OP_CLEAR, OP_NOP } ; /* Operation item settings. */
#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. */
#ifndef HELPGIVEN
#define HELPNAME "calctool.help"
#endif
#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 MAXVALID 6 /* Number of valid keys after an error. */
#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. */
enum op_type 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 != 3687 ] ; then
echo error: calctool.h was $len bytes long, should have been 3687
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', 2076 characters
cat > color.h <<'Funky_Stuff'
/* color.h
*
* Colormap definitions used by calctool.
*
* Copyright (c) Rich Burridge - May 1988.
* Sun Microsystems, Australia - All rights reserved.
*
* Version 2.2.
*
* 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 != 2076 ] ; then
echo error: color.h was $len bytes long, should have been 2076
fi
fi # end of overwriting check
if [ -f extern.h ]
then
echo shar: will not over-write existing file extern.h
else
echo shar: extracting 'extern.h', 3395 characters
cat > extern.h <<'Funky_Stuff'
/* extern.h
*
* Contains the external variable definitions used by calctool.
*
* Copyright (c) Rich Burridge - May 1988.
* Sun Microsystems, Australia - All rights reserved.
*
* Version 2.2.
*
* 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.
*/
extern char *make_number() ;
extern char base_str[4][4] ;
extern char cur_base_str[] ; /* Current base value. */
extern char cur_op ; /* Current arithmetic operation. */
extern char cur_op_str[] ; /* Current op value. */
extern char cur_ttype_str[] ; /* Current ttype value. */
extern char current ; /* Current button or character pressed. */
extern char old_cal_value ; /* Previous calculation operator. */
extern char display[MAXLINE] ; /* Current calculator display. */
extern char pstr[] ; /* Current button text string. */
extern char *selection ; /* Current [Get] selection. */
extern char ttype_str[3][5] ;
extern double convert_display() ;
extern double disp_val ; /* Value of the current display. */
extern double last_input ; /* Previous number input by user. */
extern double mem_vals[] ; /* Memory register values. */
extern double result ; /* Current calculator total value. */
extern double tresults[] ; /* Current trigonometric results. */
extern enum base_type base ; /* Current base: BIN, OCT, DEC or HEX. */
extern enum trig_type ttype ; /* Trigonometric type (deg, grad or rad). */
extern int accuracy ; /* Number of digits precision (Max 9). */
extern int chxoff[] ; /* X offset for various length button strings. */
extern int color ; /* Color used for current raster operation. */
extern int column ; /* Column number of current key/mouse press. */
extern int disp_length[] ; /* Display length in characters for each base. */
extern int down ; /* Indicates if mouse button is down. */
extern int error ; /* Indicates some kind of display error. */
extern int iscolor ; /* Set if this is a color screen. */
extern int ishelp ; /* Set if there is a help file. */
extern int issel ; /* Set if valid [Get] selection. */
extern int new_input ; /* New number input since last op. */
extern int pending ; /* Set for command with on multiple presses. */
extern int pending_op ; /* Arithmetic operation for pending command. */
extern int pointed ; /* Whether a decimal point has been given. */
extern int portion ; /* Button portion on current key/mouse press. */
extern int row ; /* Row number of current key/mouse press. */
extern int rstate ; /* Is memory register frame displayed? */
extern int signgam ;
extern int spaces ; /* Number of spaces in current button string. */
extern int toclear ; /* Indicates if display should be cleared. */
extern int tstate ; /* Current button set being displayed. */
extern int x ; /* X offset for text for button. */
extern int y ; /* Y offset for text for button. */
extern FILE *hfd ; /* File descriptor for help information. */
extern struct button buttons[] ; /* Calculator button values. */
Funky_Stuff
len=`wc -c < extern.h`
if [ $len != 3395 ] ; then
echo error: extern.h was $len bytes long, should have been 3395
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', 2052 characters
cat > Makefile <<'Funky_Stuff'
#
# Makefile for calctool, a calculator program.
#
# Copyright (c) Rich Burridge - May 1988.
# Sun Microsystems, Australia - All rights reserved.
#
# Version 2.2.
#
# 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 = sv_calctool ps_calctool
BINDIR = /usr/local/bin
LIBDIR = /usr/local/lib
MANDIR = /usr/man/man$(MANSECT)
MANSECT = l
CFLAGS = -g -DHELPGIVEN -DHELPNAME=\"$(LIBDIR)/calctool.help\"
HDRS = calctool.h color.h extern.h
IMAGES = calctool.icon help.cursor
PSLIBS = -lm $$NEWSHOME/lib/libcps.a
PSOBJS = calctool.o functions.o graphics.o news.o
PSSRCS = calctool.c functions.c graphics.c news.c
SVLIBS = -lm -lsuntool -lsunwindow -lpixrect
SVOBJS = calctool.o functions.o graphics.o sunview.o
SVSRCS = calctool.c functions.c graphics.c sunview.c
OTHERS = Makefile README calctool.help calctool.1 news.ps patchlevel.h
SRCS = calctool.c functions.c graphics.c news.c sunview.c
all: $(BINARIES)
sunview: sv_calctool
cp sv_calctool calctool
news: ps_calctool
cp ps_calctool calctool
sv_calctool: $(SVOBJS)
cc -o sv_calctool $(CFLAGS) $(SVOBJS) $(SVLIBS)
ps_calctool: $(PSOBJS)
cc -o ps_calctool $(CFLAGS) $(PSOBJS) $(PSLIBS)
install: $(BINARIES)
install -s -m 751 calctool $(BINDIR)
install -c -m 644 calctool.help $(LIBDIR)
install -c -m 644 calctool.1 $(MANDIR)/calctool.$(MANSECT)
clean:; rm -f *.o calctool core
lint:; lint $(SVSRCS) $(SVLIBS)
lint $(PSSRCS) $(PSLIBS)
shar:; shar.script $(SRCS) > archive.1
shar.script $(HDRS) $(IMAGES) $(OTHERS) > archive.2
calctool.o: calctool.c $(HDRS) patchlevel.h
functions.o: functions.c $(HDRS)
graphics.o: graphics.c $(HDRS)
news.o: news.c $(HDRS)
sunview.o: sunview.c $(HDRS)
Funky_Stuff
len=`wc -c < Makefile`
if [ $len != 2052 ] ; then
echo error: Makefile was $len bytes long, should have been 2052
fi
fi # end of overwriting check
if [ -f README ]
then
echo shar: will not over-write existing file README
else
echo shar: extracting 'README', 965 characters
cat > README <<'Funky_Stuff'
calctool - README - 4th May 1988.
This is V2.2.1 of a desktop calculator for the Sun workstation.
This version works under SunView and NeWS.
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 != 965 ] ; then
echo error: README was $len bytes long, should have been 965
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', 9351 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 valid only 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 valid only 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 valid only 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.2. ( ? ).
All calculations are in double
precision. The display can be
used with the [Get] and [Put]
function keys with other Sunview
windows. For every mouse
selection, there is an equivalent
keystroke. These 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 the
memory register in which to
store the current display value.
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
the memory register from which
data is to be to retrieved.
_PI _
Value of pi ( P ).
Enter the value of pi into the
calculator.
_A _
Hex A (decimal 10) ( a ).
This selection is valid only 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 valid only 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 valid only 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 not used currently.
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 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 != 9351 ] ; then
echo error: calctool.help was $len bytes long, should have been 9351
fi
fi # end of overwriting check
if [ -f calctool.1 ]
then
echo shar: will not over-write existing file calctool.1
else
echo shar: extracting 'calctool.1', 8467 characters
cat > calctool.1 <<'Funky_Stuff'
.\" @(#)calctool.1 2.2 27/04/88 SMI;
.TH CALCTOOL 1L "27 April 1988"
.SH NAME
calctool \- window based calculator for the Sun workstation
.SH SYNOPSIS
.B "calctool
[
.B -h
.I helpfile
]
[
.B -v
]
[
.B -?
]
.SH DESCRIPTION
.I Calctool
is a window based calculator for the Sun. It receives input via the mouse
or the keyboard. Each calculator button has two functions associated with it.
.LP
Internal arithmetic is done with double precision floating point numbers.
Accuracy can be adjusted from zero to nine numeric places, and the base of
operation can be binary,octal,decimal or hexidecimal. Numbers are initially
displayed to two numeric places, in decimal base.
.LP
The numeric display can be adjusted using the
.I SunView
.I Put
and
.I Get
function keys. The previous digit entered can be removed and the
whole display cleared.
.LP
There are ten memory registers; numbers can be retrieved or stored in
these locations, and arithmetic can be performed upon register contents.
.LP
In addition to the current numerical value, the display window contains the
current base and the current trigonometrical units. If an operation needing
more than one numerical input is partially complete, the operation
is also displayed in this window as a reminder.
.LP
The calculator has arithmetical, logical and trigonometrical functions.
These are grouped together and color coded on color workstations.
.LP
Online help is provided via a help button. Select this button, and then
the function you wish to be described.
.SH OPTIONS
.TP
.BI -h " helpfile"
Use an alternate helpfile.
.TP
.B -v
Print the version number of this release of the
.I calctool
program.
.TP
.B -?
Print the usage line for this program. Note that the
.I ?
character should be escaped if running from
.IR csh (1).
.SH CALCULATOR BUTTONS
[Keyboard equivalents appear in brackets]
.SS Numerical Keys [0-9 a-f . = <RETURN>].
.LP
Enter a digit (decimal digits 0-9 or hexidecimal digits A-F) in the display.
The . acts as the decimal point and = is used for completion of numerical
entry (<RETURN> can be also be used from the keyboard to terminate numerical
entry).
.SS Arithmetical Operations [+ - x X * /].
.LP
Perform an arithmetical operation using the preivous entry and the next entry
as operands. Addition, subtraction, multiplication and division are denoted
by the buttons +, \-, x and / respectively (the keyboard keys * and X are
synonymous with x for multiplication).
.SS Base Changes.
.LP
.IP "\fBBIN [ B ]\fP" 18
Change display base to binary (maximum: 32 digits).
.IP "\fBOCT [ O ]\fP" 18
Change display base to octal (maximum: 15 digits). are allowed.
.IP "\fBDEC [ D ]\fP" 18
Change display base to decimal (default; maximum: 12 digits).
.IP "\fBHEX [ H ]\fP" 18
Change display base to hexidecimal (maximum: 12 digits).
.SS Trigonometric Unit Changes.
.LP
.IP "\fBDEG [ ^d ]\fP" 18
Change current trigonometrical base to degrees.
.IP "\fBRAD [ ^r ]\fP" 18
Change the current trigonometrical base to radians.
.IP "\fBGRAD [ ^g ]\fP" 18
Change the current trigonometrical base to gradients.
.SS Logical Operations.
.LP
.IP "\fBAND [ & ]\fP" 18
Perform a logical AND operation on the current entry and the next entry,
treating both numbers as unsigned long integers.
.IP "\fBNOT [ ~ ]\fP" 18
Perform the logical NOT operation of the current entry.
.IP "\fBOR [ | ]\fP" 18
Perform a logical OR operation on the current entry and the next entry,
treating both numbers as unsigned long integers.
.IP "\fBXNOR [ n or N ]\fP" 18
Perform a logical XNOR operation on the current entry and the next entry,
treating both numbers as unsigned long integers.
.IP "\fBXOR [ ^ ]\fP" 18
Perform a logical XOR operation on the current entry and the next entry,
treating both numbers as unsigned long integers.
.SS Trigonometrical Operators.
.LP
.IP "\fBASIN [ } ]\fP" 18
Return the trigonometric Arc Sin of the current entry, in the
current units (degrees, radians or gradients).
.IP "\fBSIN [ { ]\fP" 18
Return the trigonometric Sin of the current entry, in the current
units (degrees, radians or gradients).
.IP "\fBACOS [ ) ]\fP" 18
Return the trigonometric Arc Cos of the current entry, in the
current units (degrees, radians or gradients).
.IP "\fBCOS [ ( ]\fP" 18
Return the trigonometric Cos of the current entry, in the current
units (degrees, radians or gradients).
.IP "\fBATAN [ T ]\fP" 18
Return the trigonometric Arc Tan of the current entry, in the
current units (degrees, radians or gradients).
.IP "\fBTAN [ t ]\fP" 18
Return the trigonometric Tan of the current entry, in the current
units (degrees, radians or gradients).
.SS Memory Register Operators.
.LP
.IP "\fBRCL [ r ]\fP" 18
Retrieve memory register n. This selection must be followed by a digit
in the range 0 to 9 to indicate a memory register.
.IP "\fBSTO [ s ]\fP" 18
Store memory register n. This must be followed by a digit in the range
0 to 9 to indicate a memory register. The register number may be preceded
by an arithmetic operation (addition, subtraction, multiplication or division),
in which case the specifed operation is carred out between the
displayed entry and the value currently in register n, and the result is placed
in register n.
.SS Constants.
.LP
.IP "\fBPI [ P ]\fP" 18
Enter the value of pi.
.IP "\fBe [ E ]\fP" 18
Enter the value of e.
.SS Mathematical Operators.
.LP
.IP "\fB% [ % ]\fP" 18
Perform a percentage calculation using the last entry and the next entry.
.IP "\fBe^x [ # ]\fP" 18
Return e raised to the power of the current entry.
.IP "\fB10^x [ $ ]\fP" 18
Return 10 raised to the power of the current entry.
.IP "\fBy^x [ Y ]\fP" 18
Take the last entry and raise it to the power of the next entry.
.IP "\fBln [ N ]\fP" 18
Return the natural logarithm of the current entry.
.IP "\fBlog [ G ]\fP" 18
Returns the base 10 logarithm of the current entry.
.IP "\fBSQRT [ S ]\fP" 18
Perform a square root operation on the current entry.
.IP "\fB1/x [ R ]\fP" 18
Return the value of 1 divided by the current entry.
.IP "\fBx! [ ! ]\fP" 18
Return the factorial of the current entry.
.IP "\fBx^2 [ @ ]\fP" 18
Return the square of the current entry.
.SS Number Manipulation Operators.
.LP
.IP "\fB< [ < ]\fP" 18
Left shift n places. This must be followed by a digit
in the range 0 to 9 to indicate the number of places to shift.
.IP "\fB> [ > ]\fP" 18
Right shift n places. This must be followed by a digit
in the range 0 to 9 to indicate the number of places to shift.
.IP "\fB&32 [ i ]\fP" 18
Truncate the current entry to a 32 bit unsigned integer
(logical function).
.IP "\fB&16 [ h ]\fP" 18
Truncate the given number to a 16 bit unsigned integer
(logical function).
.IP "\fBclr [ Delete ]\fP" 18
Clear the calculator display.
.IP "\fBbsp [ BackSpace ]\fP" 18
Remove the rightmost character of the current entry
and recalculate the the displayed value (note: internal accuracy is
lost with this operation).
.IP "\fBINT [ I ]\fP" 18
Return the integer portion of the current entry.
.IP "\fBFRAC [ F ]\fP" 18
Return the fractional portion of the current entry.
.IP "\fBACC [ A ]\fP" 18
Set accuracy. This must be followed by a digit in the range 0 to 9 to
indicate how many digits are to be displayed.
.IP "\fBCHS [ C ]\fP" 18
Change the arithmetic sign of the current entry.
.IP "\fBABS [ U ]\fP" 18
Return the absolute value of the current entry.
.SS Other keys.
.LP
.IP "\fBMEM [ M ]\fP" 18
Toggle the display of the popup register window.
Values of the ten memory registers are displayed in the current
base, to the current accuracy.
.IP "\fBKEYS [ K ]\fP" 18
Toggle the labels on the calctool buttons between mouse and
keyboard equivalents.
.IP "\fB? [ ? ]\fP" 18
Display a help message for a particular button. First select this key, then
the key to be described.
.IP "\fBQUIT [q or Q]\fP" 18
Exit (without user verification).
.IP "\fBOFF [ o ]\fP" 18
Change \fIcalctool\fP to an icon.
.SH FILES
.TP
/usr/local/lib/calctool.help
.SH BUGS
Parsing of the online help file is very primative.
.LP
Handling of errors generated by the mathematical routines is poorly
done.
.SH AUTHOR
Rich Burridge, Sun Microsystems, Unit 2, 49-53 Hotham Pde, Artarmon, N.S.W.
2164, AUSTRALIA. PHONE: +61 2 436 4699
.nf
JANET: richb%sunaus.oz@uk.ac.ucl.cs
ACSnet: richb@sunaus.oz
UUCP: {uunet,hplabs,mcvax,ukc}!munnari!sunaus.oz!richb
ARPAnet: rburridge@Sun.COM
.fi
.br
Manual page modified by R. P. C. Rodgers, UCSF School of Pharmacy, San
Francisco, CA 94143.
Funky_Stuff
len=`wc -c < calctool.1`
if [ $len != 8467 ] ; then
echo error: calctool.1 was $len bytes long, should have been 8467
fi
fi # end of overwriting check
if [ -f news.ps ]
then
echo shar: will not over-write existing file news.ps
else
echo shar: extracting 'news.ps', 8282 characters
cat > news.ps <<'Funky_Stuff'
% news.ps
%
% These are the NeWS dependent graphics routines used by calctool.
%
% Copyright (c) Rich Burridge - May 1988.
% Sun Microsystems, Australia - All rights reserved.
%
% Version 2.2.
%
% 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.
%
/edef { exch def } def
/PSClearCanvas % color canvas => -
{
2 dict begin
/Canvas edef
/Index edef
gsave
Canvas setcanvas
ColorTable Index get
fillcanvas
grestore
end
} def
/PSCloseFrame % - => -
{
/flipiconic CFrame send
/unmap RFrame send
} def
/PSDrawBox % x y width height => -
{
/BoxHeight edef
/BoxWidth edef
/BoxY edef
/BoxX edef
KC setcanvas
/BoxY KCHeight BoxY sub 5 sub def
gsave
newpath
BoxX BoxY moveto
BoxX BoxWidth add BoxY lineto
BoxX BoxWidth add BoxY BoxHeight sub lineto
BoxX BoxY BoxHeight sub lineto
closepath
0 setgray
stroke
grestore
} def
/PSDrawRegs
{
/map RFrame send
} def
/PSFillBox % x y canvas canvasheight width height boundry color => -
{
8 dict begin
/ColorIndex edef
/BoxBoundry edef
/BoxHeight edef
/BoxWidth edef
/BoxCanvasHeight edef
/BoxCanvas edef
/BoxY edef
/BoxX edef
BoxCanvas setcanvas
/BoxY BoxCanvasHeight BoxY sub 5 sub def
gsave
BoxBoundry 1 eq
{
BoxX BoxY BoxHeight sub 1 sub BoxWidth 1 add BoxHeight 1 add rectpath
1 setgray fill
BoxX 1 add BoxY BoxHeight sub
BoxWidth 1 sub BoxHeight 1 sub rectpath
ColorTable ColorIndex get setcolor
fill
}
{
BoxX BoxY BoxHeight sub 1 sub BoxWidth 1 add BoxHeight 1 add rectpath
ColorTable ColorIndex get setcolor
fill
} ifelse
grestore
end
} def
/PSInitFonts % - => -
{
/SFont /Courier findfont 7 scalefont def
/NFont /Courier-Bold findfont 14 scalefont def
/BFont /Courier-Bold findfont 18 scalefont def
} def
/PSInitialise % - => -
{
/CFRAME_REPAINT_EVENT 100 def
/RFRAME_REPAINT_EVENT 101 def
/LEFT_DOWN_EVENT 102 def
/LEFT_UP_EVENT 103 def
/MIDDLE_DOWN_EVENT 104 def
/MIDDLE_UP_EVENT 105 def
/KEYBOARD_EVENT 106 def
} def
/PSIsColor % - => iscolorscreen
{
/Color? framebuffer /Color get def
Color? {1} {0} ifelse typedprint
} def
/PSLoadColor % red green blue index => -
{
/ColorIndex edef
/BlueValue edef
/GreenValue edef
/RedValue edef
/CColor RedValue 255 div GreenValue 255 div BlueValue 255 div rgbcolor def
ColorTable ColorIndex CColor put
} def
/PSMakeColorTable % size => -
{
/TableSize edef
/ColorTable TableSize array def
} def
/PSMakeFrames % x y width height => -
{
/CFrameHeight edef
/CFrameWidth edef
/CFrameY edef
/CFrameX edef
clippath pathbbox /ScreenHeight edef pop pop pop
/CFrame framebuffer /new DefaultWindow send def
{
/PaintClient
{
CFRAME_REPAINT_EVENT typedprint
} def
/PaintIcon
{
gsave
IconCanvas setcanvas
clippath pathbbox
scale pop pop
0 setgray fill
1 1 1 setrgbcolor
false CalctoolIcon imagemaskcanvas
grestore
} def
} CFrame send
CFrame /BorderLeft 5 put
CFrame /BorderBottom 5 put
CFrame /BorderRight 5 put
CFrame /BorderTop 5 put
CFrame /ControlSize 0 put
CFrameX
ScreenHeight CFrameHeight sub CFrameY sub
CFrameWidth 10 add CFrameHeight /reshape CFrame send
/map CFrame send
/RFrame framebuffer /new DefaultWindow send def
{
/PaintClient
{
RFRAME_REPAINT_EVENT typedprint
} def
/PaintIcon
{
gsave
IconCanvas setcanvas
1 fillcanvas
0 strokecanvas
NFont setfont
5 40 moveto (Memory) show
10 20 moveto (Regs.) show
grestore
} def
} RFrame send
RFrame /BorderLeft 5 put
RFrame /BorderBottom 5 put
RFrame /BorderRight 5 put
RFrame /BorderTop 5 put
RFrame /ControlSize 0 put
CFrameX CFrameWidth add 25 add
ScreenHeight 200 sub CFrameY sub
CFrameWidth 200 /reshape RFrame send
} def
/PSMakeIcons % - => -
{
/CalctoolIcon 42 64 1 { } { <
1555 5555 5540 2AAA AAAA AA80
5555 5555 5540 FFFF FFFF FE80
8000 0000 0340 BFFF FFFF FA80
A000 0000 0B40 A000 0000 0A80
A003 0030 CB40 A004 8049 2A80
A005 8059 6B40 A006 8069 AA80
A004 8449 2B40 A003 0430 CA80
A000 0000 0B40 A000 0000 0A80
BFFF FFFF FB40 8000 0000 0280
8000 0000 0340 BFDF EFF7 FA80
A050 2814 0B40 AF53 2994 0A80
A154 AA55 1340 A253 2A54 AA80
A254 A9D4 4B40 A454 A854 AA80
A453 2995 1B40 A050 2814 0A80
BFDF EFF7 FB40 8000 0000 0280
BFDF EFF7 FB40 A050 2814 0A80
A257 A994 2B40 A654 2A14 4A80
AA57 2B94 4B40 AF50 AA54 8A80
A254 AA54 8B40 A253 2995 0A80
A050 2814 0B40 BFDF EFF7 FA80
8000 0000 0340 BFDF EFF7 FA80
A050 2814 0B40 A253 2994 0A80
A654 AA54 0B40 A250 A895 EA80
A253 2854 0B40 A254 2A54 0A80
A757 A994 0B40 A050 2814 0A80
BFDF EFF7 FB40 8000 0000 0280
BFDF EFF7 FB40 A050 2814 0A80
A650 2814 0B40 A950 2814 4A80
AB50 2BD4 4B40 AD50 2815 FA80
A951 2BD4 4B40 A651 2814 4A80
A050 2814 0B40 BFDF EFF7 FA80
8000 0000 0300 FFFF FFFF FE00
> } buildimage def
} def
/PSMakePanel % x y width height => -
{
/PCHeight edef
/PCWidth edef
/PCX edef
/PCY edef
gsave
CCanvas setcanvas
/PC currentcanvas newcanvas def
PC
begin
/Transparent false def
/Mapped true def
/Retained true def
end
PC
0 CFrameHeight PCHeight sub translate
PCX PCY moveto PCWidth PCHeight rect reshapecanvas
PC setcanvas
1 fillcanvas
0 strokecanvas
grestore
} def
/PSMakeSubCanvas % x y width height => -
{
/KCHeight edef
/KCWidth edef
/KCY edef
/KCX edef
gsave
CCanvas setcanvas
/KC currentcanvas newcanvas def
KC
begin
/Transparent false def
/Mapped true def
/Retained true def
end
KC
0 0 moveto KCWidth KCHeight rect reshapecanvas
grestore
} def
/PSMakeSubframes % panelheight => -
{
/PCHeight edef
/CCanvas CFrame /ClientCanvas get def
/RC RFrame /ClientCanvas get def
0 0 CFrameWidth PCHeight PSMakePanel
0 PCHeight 10 sub
CFrameWidth CFrameHeight PCHeight sub 10 sub PSMakeSubCanvas
/RCHeight 200 def
/RCWidth CFrameWidth def
/SendEvent
{
KC setcanvas
typedprint
currentcursorlocation KCHeight exch sub exch
typedprint typedprint
} def
/KbdEvent
{
begin
Action /DownTransition eq
{
KEYBOARD_EVENT typedprint Name SendEvent
} if
end
} def
/EventMgrKbdInterest
{
[3 1 roll] { MakeEventMgrKbdInterest} append cvx
} def
/MakeEventMgrKbdInterest
{
addkbdinterests
{ /ClientData 10 dict dup /CallBack 5 index put put } forall
pop
} def
/DownEventInterest {/DownTransition KC eventmgrinterest} def
/UpEventInterest {/UpTransition KC eventmgrinterest} def
/EventMgr
[
LeftMouseButton {LEFT_DOWN_EVENT SendEvent} DownEventInterest
MiddleMouseButton {MIDDLE_DOWN_EVENT SendEvent} DownEventInterest
LeftMouseButton {LEFT_UP_EVENT SendEvent} UpEventInterest
MiddleMouseButton {MIDDLE_UP_EVENT SendEvent} UpEventInterest
{ KbdEvent } KC EventMgrKbdInterest
] forkeventmgr def
} def
/PSMakeText % canvas canvasheight font x y color string => -
{
/TextString edef
/TextColor edef
/TextY edef
/TextX edef
/TextFont edef
/TextCanvasHeight edef
/TextCanvas edef
/TextFontHeight TextFont fontheight def
/Y TextCanvasHeight TextY sub 5 sub def
TextCanvas setcanvas
TextFont setfont
ColorTable TextColor get setcolor
TextX Y moveto TextString show
} def
/PSSetCursor % type => -
{
} def
/PSToggleRegCanvas % state => -
{
/RState edef
RState 1 eq {/map RFrame send} {/unmap RFrame send} ifelse
} def
Funky_Stuff
len=`wc -c < news.ps`
if [ $len != 8282 ] ; then
echo error: news.ps was $len bytes long, should have been 8282
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', 436 characters
cat > patchlevel.h <<'Funky_Stuff'
/* patchlevel.h
*
* This is the current patch level for this version of calctool.
*
* Copyright (c) Rich Burridge - May 1988.
* Sun Microsystems, Australia - All rights reserved.
*
* Version 2.2.
*
* 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 1
Funky_Stuff
len=`wc -c < patchlevel.h`
if [ $len != 436 ] ; then
echo error: patchlevel.h was $len bytes long, should have been 436
fi
fi # end of overwriting check