Release calc version 2.11.5t0

This commit is contained in:
Landon Curt Noll
2001-02-25 14:22:09 -08:00
parent 3d55811205
commit fc85ac3791
21 changed files with 817 additions and 464 deletions

240
zmath.h
View File

@@ -17,8 +17,8 @@
* received a copy with calc; if not, write to Free Software Foundation, Inc.
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
* @(#) $Revision: 29.3 $
* @(#) $Id: zmath.h,v 29.3 2000/07/17 15:35:49 chongo Exp $
* @(#) $Revision: 29.4 $
* @(#) $Id: zmath.h,v 29.4 2001/02/25 22:07:36 chongo Exp $
* @(#) $Source: /usr/local/src/cmd/calc/RCS/zmath.h,v $
*
* Under source code control: 1993/07/30 19:42:48
@@ -38,6 +38,20 @@
#define __ZMATH_H__
#if defined (_WIN32)
#ifdef _EXPORTING
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
#else /* Windoz free systems */
#define DLL
#endif /* Windoz free systems */
#include "alloc.h"
#include "endian_calc.h"
#include "longbits.h"
@@ -267,126 +281,126 @@ typedef struct {
/*
* Function prototypes for integer math routines.
*/
extern HALF * alloc(LEN len);
DLL extern HALF * alloc(LEN len);
#ifdef ALLOCTEST
extern void freeh(HALF *);
DLL extern void freeh(HALF *);
#endif
/*
* Input, output, and conversion routines.
*/
extern void zcopy(ZVALUE z, ZVALUE *res);
extern void itoz(long i, ZVALUE *res);
extern void utoz(FULL i, ZVALUE *res);
extern void str2z(char *s, ZVALUE *res);
extern long ztoi(ZVALUE z);
extern FULL ztou(ZVALUE z);
extern void zprintval(ZVALUE z, long decimals, long width);
extern void zprintx(ZVALUE z, long width);
extern void zprintb(ZVALUE z, long width);
extern void zprinto(ZVALUE z, long width);
extern void fitzprint(ZVALUE, long, long);
DLL extern void zcopy(ZVALUE z, ZVALUE *res);
DLL extern void itoz(long i, ZVALUE *res);
DLL extern void utoz(FULL i, ZVALUE *res);
DLL extern void str2z(char *s, ZVALUE *res);
DLL extern long ztoi(ZVALUE z);
DLL extern FULL ztou(ZVALUE z);
DLL extern void zprintval(ZVALUE z, long decimals, long width);
DLL extern void zprintx(ZVALUE z, long width);
DLL extern void zprintb(ZVALUE z, long width);
DLL extern void zprinto(ZVALUE z, long width);
DLL extern void fitzprint(ZVALUE, long, long);
/*
* Basic numeric routines.
*/
extern void zmuli(ZVALUE z, long n, ZVALUE *res);
extern long zdivi(ZVALUE z, long n, ZVALUE *res);
extern long zmodi(ZVALUE z, long n);
extern void zadd(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zsub(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zmul(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern long zdiv(ZVALUE z1, ZVALUE z2, ZVALUE *res, ZVALUE *rem, long R);
extern long zquo(ZVALUE z1, ZVALUE z2, ZVALUE *res, long R);
extern long zmod(ZVALUE z1, ZVALUE z2, ZVALUE *rem, long R);
extern void zequo(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern BOOL zdivides(ZVALUE z1, ZVALUE z2);
extern void zor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zand(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zxor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zandnot(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern long zpopcnt(ZVALUE z, int bitval);
extern void zshift(ZVALUE z, long n, ZVALUE *res);
extern void zsquare(ZVALUE z, ZVALUE *res);
extern long zlowbit(ZVALUE z);
extern LEN zhighbit(ZVALUE z);
extern void zbitvalue(long n, ZVALUE *res);
extern BOOL zisset(ZVALUE z, long n);
extern BOOL zisonebit(ZVALUE z);
extern BOOL zisallbits(ZVALUE z);
extern FLAG ztest(ZVALUE z);
extern FLAG zrel(ZVALUE z1, ZVALUE z2);
extern FLAG zabsrel(ZVALUE z1, ZVALUE z2);
extern BOOL zcmp(ZVALUE z1, ZVALUE z2);
DLL extern void zmuli(ZVALUE z, long n, ZVALUE *res);
DLL extern long zdivi(ZVALUE z, long n, ZVALUE *res);
DLL extern long zmodi(ZVALUE z, long n);
DLL extern void zadd(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zsub(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zmul(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern long zdiv(ZVALUE z1, ZVALUE z2, ZVALUE *res, ZVALUE *rem, long R);
DLL extern long zquo(ZVALUE z1, ZVALUE z2, ZVALUE *res, long R);
DLL extern long zmod(ZVALUE z1, ZVALUE z2, ZVALUE *rem, long R);
DLL extern void zequo(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern BOOL zdivides(ZVALUE z1, ZVALUE z2);
DLL extern void zor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zand(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zxor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zandnot(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern long zpopcnt(ZVALUE z, int bitval);
DLL extern void zshift(ZVALUE z, long n, ZVALUE *res);
DLL extern void zsquare(ZVALUE z, ZVALUE *res);
DLL extern long zlowbit(ZVALUE z);
DLL extern LEN zhighbit(ZVALUE z);
DLL extern void zbitvalue(long n, ZVALUE *res);
DLL extern BOOL zisset(ZVALUE z, long n);
DLL extern BOOL zisonebit(ZVALUE z);
DLL extern BOOL zisallbits(ZVALUE z);
DLL extern FLAG ztest(ZVALUE z);
DLL extern FLAG zrel(ZVALUE z1, ZVALUE z2);
DLL extern FLAG zabsrel(ZVALUE z1, ZVALUE z2);
DLL extern BOOL zcmp(ZVALUE z1, ZVALUE z2);
/*
* More complicated numeric functions.
*/
extern FULL uugcd(FULL i1, FULL i2);
extern long iigcd(long i1, long i2);
extern void zgcd(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zlcm(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zreduce(ZVALUE z1, ZVALUE z2, ZVALUE *z1res, ZVALUE *z2res);
extern void zfact(ZVALUE z, ZVALUE *dest);
extern void zperm(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern int zcomb(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern FLAG zjacobi(ZVALUE z1, ZVALUE z2);
extern void zfib(ZVALUE z, ZVALUE *res);
extern void zpowi(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void ztenpow(long power, ZVALUE *res);
extern void zpowermod(ZVALUE z1, ZVALUE z2, ZVALUE z3, ZVALUE *res);
extern BOOL zmodinv(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern BOOL zrelprime(ZVALUE z1, ZVALUE z2);
extern long zlog(ZVALUE z1, ZVALUE z2);
extern long zlog10(ZVALUE z);
extern long zdivcount(ZVALUE z1, ZVALUE z2);
extern long zfacrem(ZVALUE z1, ZVALUE z2, ZVALUE *rem);
extern long zgcdrem(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern long zdigits(ZVALUE z1);
extern long zdigit(ZVALUE z1, long n);
extern FLAG zsqrt(ZVALUE z1, ZVALUE *dest, long R);
extern void zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest);
extern BOOL zissquare(ZVALUE z);
extern void zhnrmod(ZVALUE v, ZVALUE h, ZVALUE zn, ZVALUE zr, ZVALUE *res);
DLL extern FULL uugcd(FULL i1, FULL i2);
DLL extern long iigcd(long i1, long i2);
DLL extern void zgcd(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zlcm(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zreduce(ZVALUE z1, ZVALUE z2, ZVALUE *z1res, ZVALUE *z2res);
DLL extern void zfact(ZVALUE z, ZVALUE *dest);
DLL extern void zperm(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern int zcomb(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern FLAG zjacobi(ZVALUE z1, ZVALUE z2);
DLL extern void zfib(ZVALUE z, ZVALUE *res);
DLL extern void zpowi(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void ztenpow(long power, ZVALUE *res);
DLL extern void zpowermod(ZVALUE z1, ZVALUE z2, ZVALUE z3, ZVALUE *res);
DLL extern BOOL zmodinv(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern BOOL zrelprime(ZVALUE z1, ZVALUE z2);
DLL extern long zlog(ZVALUE z1, ZVALUE z2);
DLL extern long zlog10(ZVALUE z);
DLL extern long zdivcount(ZVALUE z1, ZVALUE z2);
DLL extern long zfacrem(ZVALUE z1, ZVALUE z2, ZVALUE *rem);
DLL extern long zgcdrem(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern long zdigits(ZVALUE z1);
DLL extern long zdigit(ZVALUE z1, long n);
DLL extern FLAG zsqrt(ZVALUE z1, ZVALUE *dest, long R);
DLL extern void zroot(ZVALUE z1, ZVALUE z2, ZVALUE *dest);
DLL extern BOOL zissquare(ZVALUE z);
DLL extern void zhnrmod(ZVALUE v, ZVALUE h, ZVALUE zn, ZVALUE zr, ZVALUE *res);
/*
* Prime related functions.
*/
extern FLAG zisprime(ZVALUE z);
extern FULL znprime(ZVALUE z);
extern FULL next_prime(FULL v);
extern FULL zpprime(ZVALUE z);
extern void zpfact(ZVALUE z, ZVALUE *dest);
extern BOOL zprimetest(ZVALUE z, long count, ZVALUE skip);
extern BOOL zredcprimetest(ZVALUE z, long count, ZVALUE skip);
extern BOOL znextcand(ZVALUE z1, long count, ZVALUE skip, ZVALUE res, ZVALUE mod, ZVALUE *cand);
extern BOOL zprevcand(ZVALUE z1, long count, ZVALUE skip, ZVALUE res, ZVALUE mod, ZVALUE *cand);
extern FULL zlowfactor(ZVALUE z, long count);
extern FLAG zfactor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern long zpix(ZVALUE z1);
extern void zlcmfact(ZVALUE z, ZVALUE *dest);
DLL extern FLAG zisprime(ZVALUE z);
DLL extern FULL znprime(ZVALUE z);
DLL extern FULL next_prime(FULL v);
DLL extern FULL zpprime(ZVALUE z);
DLL extern void zpfact(ZVALUE z, ZVALUE *dest);
DLL extern BOOL zprimetest(ZVALUE z, long count, ZVALUE skip);
DLL extern BOOL zredcprimetest(ZVALUE z, long count, ZVALUE skip);
DLL extern BOOL znextcand(ZVALUE z1, long count, ZVALUE skip, ZVALUE res, ZVALUE mod, ZVALUE *cand);
DLL extern BOOL zprevcand(ZVALUE z1, long count, ZVALUE skip, ZVALUE res, ZVALUE mod, ZVALUE *cand);
DLL extern FULL zlowfactor(ZVALUE z, long count);
DLL extern FLAG zfactor(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern long zpix(ZVALUE z1);
DLL extern void zlcmfact(ZVALUE z, ZVALUE *dest);
/*
* Misc misc functions. :-)
*/
extern void zsquaremod(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zminmod(ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern BOOL zcmpmod(ZVALUE z1, ZVALUE z2, ZVALUE z3);
extern void zio_init(void);
DLL extern void zsquaremod(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zminmod(ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern BOOL zcmpmod(ZVALUE z1, ZVALUE z2, ZVALUE z3);
DLL extern void zio_init(void);
/*
* These functions are for internal use only.
*/
extern void ztrim(ZVALUE *z);
extern void zshiftr(ZVALUE z, long n);
extern void zshiftl(ZVALUE z, long n);
extern HALF *zalloctemp(LEN len);
DLL extern void ztrim(ZVALUE *z);
DLL extern void zshiftr(ZVALUE z, long n);
DLL extern void zshiftl(ZVALUE z, long n);
DLL extern HALF *zalloctemp(LEN len);
/*
@@ -403,13 +417,13 @@ typedef struct {
ZVALUE one; /* REDC format for the number 1 */
} REDC;
extern REDC *zredcalloc(ZVALUE z1);
extern void zredcfree(REDC *rp);
extern void zredcencode(REDC *rp, ZVALUE z1, ZVALUE *res);
extern void zredcdecode(REDC *rp, ZVALUE z1, ZVALUE *res);
extern void zredcmul(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
extern void zredcsquare(REDC *rp, ZVALUE z1, ZVALUE *res);
extern void zredcpower(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern REDC *zredcalloc(ZVALUE z1);
DLL extern void zredcfree(REDC *rp);
DLL extern void zredcencode(REDC *rp, ZVALUE z1, ZVALUE *res);
DLL extern void zredcdecode(REDC *rp, ZVALUE z1, ZVALUE *res);
DLL extern void zredcmul(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
DLL extern void zredcsquare(REDC *rp, ZVALUE z1, ZVALUE *res);
DLL extern void zredcpower(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
/*
@@ -550,32 +564,32 @@ extern void zredcpower(REDC *rp, ZVALUE z1, ZVALUE z2, ZVALUE *res);
/*
* Output routines for either FILE handles or strings.
*/
extern void math_chr(int ch);
extern void math_str(char *str);
extern void math_fill(char *str, long width);
extern void math_flush(void);
extern void math_divertio(void);
extern void math_cleardiversions(void);
extern char *math_getdivertedio(void);
extern int math_setmode(int mode);
extern LEN math_setdigits(LEN digits);
extern void math_fmt(char *, ...);
DLL extern void math_chr(int ch);
DLL extern void math_str(char *str);
DLL extern void math_fill(char *str, long width);
DLL extern void math_flush(void);
DLL extern void math_divertio(void);
DLL extern void math_cleardiversions(void);
DLL extern char *math_getdivertedio(void);
DLL extern int math_setmode(int mode);
DLL extern LEN math_setdigits(LEN digits);
DLL extern void math_fmt(char *, ...);
/*
* The error routine.
*/
extern void math_error(char *, ...);
DLL extern void math_error(char *, ...);
/*
* external swap functions
*/
extern HALF *swap_b8_in_HALFs(HALF *dest, HALF *src, LEN len);
extern ZVALUE *swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
extern HALF *swap_b16_in_HALFs(HALF *dest, HALF *src, LEN len);
extern ZVALUE *swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
extern ZVALUE *swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
DLL extern HALF *swap_b8_in_HALFs(HALF *dest, HALF *src, LEN len);
DLL extern ZVALUE *swap_b8_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
DLL extern HALF *swap_b16_in_HALFs(HALF *dest, HALF *src, LEN len);
DLL extern ZVALUE *swap_b16_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
DLL extern ZVALUE *swap_HALF_in_ZVALUE(ZVALUE *dest, ZVALUE *src, BOOL all);
/*