home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.6
/
ffcollection-1-6-1993-02.iso
/
ff_disks
/
121-150
/
ff_130
/
hp
/
hp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-03-13
|
6KB
|
234 lines
#include "INCLUDE:Lattice/math.h"
#include "INCLUDE:Lattice/stdio.h"
#include "INCLUDE:exec/types.h"
#include "INCLUDE:graphics/gfx.h"
#include "INCLUDE:graphics/gfxmacros.h"
#include "INCLUDE:exec/exec.h"
#include "INCLUDE:exec/execbase.h"
#include "INCLUDE:graphics/view.h"
#include "INCLUDE:graphics/gfxbase.h"
#include "INCLUDE:exec/libraries.h"
#include "INCLUDE:intuition/intuition.h"
#include "INCLUDE:graphics/text.h"
#include "hp_constants.h"
#include "hp_data.include"
/*---------------------------------------*/
/* // hp // */
/* */
/* A public-domain scientific */
/* calculator for the Amiga */
/* */
/* Version 1.0 */
/* March 1987 */
/* Steve Bonner */
/*---------------------------------------*/
main()
{ int k;
GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0);
IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0);
if( (GfxBase == NULL) || (IntuitionBase == NULL)) exit();
xstr[33] = 0;
ystr[33] = 0;
print_on = FALSE;
error_occurred = FALSE;
entry_in_progress = FALSE;
screen_refresh_only = FALSE;
for ( k = 0; k < 16; k++) {
registers[k] = 0.0;
iregisters[k] = 0; }
for ( k = 0; k <= 12; k++) key_valid[k] = TRUE;
for ( k = 13; k <= 18; k++) key_valid[k] = FALSE;
for ( k = 19; k <= 64; k++) key_valid[k] = TRUE;
SetUpHpGraphics();
DrawDisplay();
screen_refresh_only = TRUE;
DrawKeys();
LabelKeys();
SetAngleMode( DEGREES );
base = HEX; /* Forces SetBase routine to highlight */
SetBase( FLOAT ); /* keys and zero out real and int stacks. */
SetAPen( rp, GREY );
SetBPen( rp, SCREENCOLOR );
SetDrMd( rp, JAM2 );
DisplayFloatXY();
inkey = 0;
while ( 1 == 1) {
NextClick:
/* Print command entered for last key click */
PrintKey();
KeyDown:
/* Wait for the next click: */
WaitPort( hp_window -> UserPort );
if ( GadgetPoked() ) {
CloseWindow( hp_window );
CloseScreen( hp_screen );
if ( print_on ) {
fputs("\33#1", printer ); /* restore default setting */
fclose( printer ); }
exit(); }
if ( message -> Code != SELECTDOWN ) goto KeyDown;
inkey = KeyCode();
entry_completed = FALSE;
if ( inkey == 31 ) StoreRegister();
if ( inkey == 32 ) RecallRegister();
if ( (inkey == 32) || (inkey == 32) ) goto NextClick;
if ( key_valid[ inkey ] == FALSE ) {
BeepHpDisplay();
goto NextClick; }
CheckModes();
if ( mode_changed ) goto NextClick;
if ( InkeyIsNumeric() ) {
if ( entry_in_progress )
ContinueNumEntry();
else
CommenceNumEntry(); }
else /* Not numeric */ {
if ( entry_in_progress ) {
entry_completed = TRUE;
/* Convert instring to internal format */
/* and push onto stack unless number is */
/* being dropped: */
if ( inkey != 60 ) PushX(); }
/* Perform a stack operation if requested */
CheckStack();
error_occurred = FALSE;
if ( base == FLOAT ) ProcessFloat();
if ( base == COMPLEX ) ProcessComplex();
if ( base >= BINARY ) ProcessInteger();
entry_in_progress = FALSE;
if ( error_occurred ) {
x = 0.0;
ix = 0;
if ( base == COMPLEX ) y = 0.0;
goto NextClick; }
if ( (inkey > 60) && (inkey < 64) ) { TweakDisplay();
goto NextClick; }
if ( inkey == 64 ) { if (print_on) fprintf(printer, "\n");
goto NextClick; }
if ( base < 2 )
DisplayFloatXY();
else
DisplayIntXY();
} /* Not numeric */
} /* WhileEnd */
} /* main */
/*--------------------------------------------------------*/
/* Bring in source code for subroutines: */
/*--------------------------------------------------------*/
#include "hp_graphics1.include"
#include "hp_graphics2.include"
#include "hp_modes.include"
#include "hp_user_inputs.include"
#include "hp_conversions.include"
#include "hp_math.include"
/*--------------------------------------------------------*/
PrintKey()
{
char *xp, *yp;
if ((inkey == 0) || (inkey > 60)) return(0);
if ( inkey == 55 )
{
if ( print_on == TRUE ) {
print_on = FALSE;
fputs("\33#1", printer ); /* restore default setting */
fclose( printer ); }
else {
print_on = TRUE;
printer = fopen( "PRT:" , "w");
if ( printer == NULL ) BeepHpDisplay();
/* Use condensed print (required for printing binary numbers) */
fputs("\33[4w", printer);
/* Use printer color number 1 */
fputs("\33[31m", printer); }
}
if ( print_on == FALSE ) return(0);
if ( entry_in_progress == FALSE ) {
/* If a new x-value has just been Pushed, it must be printed */
if ( entry_completed ) {
iptr = &instring[0];
instring[ next_digit ] = 0; }
else
iptr = &nullentry[0];
if ( base < BINARY ) { xp = xptr;
yp = yptr; }
else { xp = &xstr[0];
yp = &ystr[0]; }
/* If command is STO or RCL, set pointer to identify register */
if ( (inkey == 31) || (inkey == 32))
regptr = opcode[ regcode ];
else
regptr = &no_register[0];
fprintf( printer, "%-32s %5s %5s %-32s %-32s\n",
iptr, opcode[inkey], regptr, yp, xp );
}
}