IEEE Calculator (part 3 of 6)

sources-request at panda.UUCP sources-request at panda.UUCP
Wed Sep 4 07:58:24 AEST 1985


Mod.sources:  Volume 3, Issue 5
Submitted by: decvax!decwrl!sun!dgh!dgh (David Hough)

#! /bin/sh
: make a directory, cd to it, and run this through sh
echo If this kit is complete, "End of Kit" will echo at the end
echo Extracting calcdouble.h
cat >calcdouble.h <<'End-Of-File'
procedure todouble ( var x : internal ; var y : cdouble ) ; external ;
procedure unpackdouble ( y : cdouble ; var x : internal ) ; external ;
 
End-Of-File
echo Extracting calcsingle.h
cat >calcsingle.h <<'End-Of-File'
procedure tosingle ( var x : internal ; var y : csingle ) ; external ;
procedure unpacksingle ( y : csingle ; var x : internal ) ; external ;
End-Of-File
echo Extracting calctest.h
cat >calctest.h <<'End-Of-File'

(* File calctest.h, Version 5 October 1984. *)

(* This version of the calculator test unit is a dummy to provide
constant and type declarations only.  *)

(* Global constant, type, and variable declarations for  Calc. *)

const
stickybit = 66 ; (* position of sticky bit in internal representation *)

type

arithtype = ( i16, i32, i64, flt32, f64, ext80, unrounded  ) ; 
        (* types of arithmetic operands *)

fpmodetype = record (* floating point mode record *)
round : rmode (* roundmodetype *) ;
precision : extprec ;
clos : closure(*type*) ;
norm : denorm ;
end ;

fpstype  = record (* complete status of floating point unit *)
mode : fpmodetype ;
curexcep : excepset ; (* Set of exceptions generated by current op.  *)
excep : excepset ;
trap : excepset end ;

internal = record (* internal extended format *)
(* unlike external extended, most significant bit represents 0.5,
not 1.0 *)
sign : boolean ;
exponent : integer ; (* range is -2**15 to 2**15-1 *)
significand :   array [0..stickybit] of boolean ; 
        (* bit stickybit-2 is guard ;
bit (stickybit-1) is round ; bit stickybit is sticky *)
end ;
        
        (* Following are temporary calculator internal types which use 
        logical bytes, which may not be the same as the physical bytes
        specified in x80modes.  *)
csingle = array [0..3] of byt ;
cdouble = array [0..7] of byt ;
cextended = array [0..9] of byt ;
cint64 = array [0..7] of byt ;

procedure pretest ( var storemode : arithtype )  ;  external ;
procedure swapmode ( var e : fpmodetype ) ;  external ;
procedure swaptrap ( var e : excepset ) ;  external ;
procedure swapexcep ( var e : excepset ) ;  external ;

procedure tneg ( x : internal ; var z : internal ) ;  external ;
procedure tabs ( x : internal ; var z : internal ) ;  external ;
procedure tsqrt ( x : internal ; var z : internal ) ;  external ;

procedure tadd ( x, y : internal ; var z : internal ) ;  external ;
procedure tsub ( x, y : internal ; var z : internal ) ;  external ;
procedure tmul ( x, y : internal ; var z : internal ) ;  external ;
procedure tdiv ( x, y : internal ; var z : internal ) ;  external ;
procedure trem ( x, y : internal ; var z : internal ) ;  external ;

procedure tcompare ( x, y : internal ; var cc : conditioncode ) ;  external ;
procedure tstore ( storagemode : arithtype ; var z : internal ) ;  external ;
procedure tconvert ( x : internal ; var z : internal ; a : arithtype ) ;  external ;

procedure tintconvert ( x : internal ; var z : internal ; a : arithtype ) ;  external ;

procedure tdisplay ( x : internal ) ;   external ;
procedure tdecbin ( s : fpstring ; var x : internal ; var error : boolean ) ;  external ;

procedure ffloat_ ; external ;
procedure ffunc_  ; external ;
procedure sfloat_ ; external ;
procedure sfunc_  ; external ;

End-Of-File
echo Extracting oldfplib.h
cat >oldfplib.h <<'End-Of-File'
	const

	maxfpstring = 80 ;

	invop = invalid;
	overfl = overflow;
	underfl = underflow;
	div0 = divbyzero;
	inxact = inexact;
	cvtovfl = invalid ;

	type

	byt = 0..255 ;

	fpstring = packed array [0..maxfpstring] of char ;

	roundtype = ( rnear, rzero, rpos, rneg, rout ) ;
	rmode = rnear .. rneg ;
	closure = (proj, affine) ;
	denorm = ( warning, normalizing ) ;
	extprec = ( xprec, sprec, dprec ) ;
	
	xcpn = exception ;
	excepset = set of exception ;

	fp_cc = ( equal, lesser, greater, notord ) ;
	conditioncode = fp_cc ;

End-Of-File
echo Extracting sane.h
cat >sane.h <<'End-Of-File'
type

longint = integer ;
integer = -32768..32767 ;
single = array [0..1] of integer ;
double = array [0..3] of integer ;
comp = array [0..3] of integer ;
extended = array [0..4] of integer ;

environ = integer ;
rounddir = ( tonearest, upward, downward, towardzero ) ;
relop = ( gt, lt, gl, eq, ge, le, gel, unord ) ;
exception = ( invalid, underflow, overflow, divbyzero, inexact ) ;
numclass = ( snan, qnan, infinite, zero, normal, denormal ) ;

roundprecision = ( extprecision, dblprecision, realprecision ) ;

procedure SetRnd ( r : rounddir ) ; external ;
function GetRnd : rounddir ; external ;
procedure SetXcp ( x : exception; onoff : boolean ); external ;
function TestXcp ( x : exception ) : boolean   ; external ;

End-Of-File
echo ""
echo "End of Kit"
exit



More information about the Mod.sources mailing list