home *** CD-ROM | disk | FTP | other *** search
- #ifndef CLIB_BIGNUM_PROTOS_H
- #define CLIB_BIGNUM_PROTOS_H
-
- /*
- * clib/BigNum_protos.h
- *
- * © Allenbrand Brice, Ringard'Production 1997
- */
-
- typedef struct
- {
- int signe;
- int nc;
- unsigned short *chiffres;
- } BigNum,*PtrBigNum;
-
- /* Addition */
-
- void BigNumAdd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumDigitAdd(PtrBigNum x,int y);
-
- /* Division */
-
- void BigNumDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumDigitDiv(PtrBigNum x,int y,PtrBigNum z);
- void BigNumRightShift(PtrBigNum x,int Nb);
- void BigNumModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumEDiv(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum Rest);
-
- /* Multiplication */
-
- void BigNumMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumFastMul(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumDigitMul(PtrBigNum x,int y);
- void BigNumLeftShift(PtrBigNum x,int Nb);
- void BigNumSquare(PtrBigNum x,PtrBigNum z);
-
- /* Substraction */
-
- void BigNumSub(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumDigitSub(PtrBigNum x,int y);
-
- /* Displaying */
-
- void BigNumDisplay(PtrBigNum z);
- void BigNumPrint(PtrBigNum x);
-
- /* Conversion */
-
- void BigNumStrToBigNum(PtrBigNum x,char *S);
- void BigNumToStr(PtrBigNum x,char *y);
- void BigNumIntToBigNum(PtrBigNum z,int x);
- int BigNumToInt(PtrBigNum z);
-
- /* Comparison */
-
- short BigNumCompare(PtrBigNum x,PtrBigNum y);
- short BigNumFastCompare(PtrBigNum x,PtrBigNum y);
-
- /* Prime test */
-
- short BigNumDiffCarre(PtrBigNum n,PtrBigNum res,int lim);
- short BigNumRho(PtrBigNum n,PtrBigNum res,int lim);
- short BigNumBrutePrime(PtrBigNum i,int aff);
- short BigNumLucasLehmer(int x);
-
- /* Misc. */
-
- void BigNumRnd(int n,PtrBigNum z);
- void BigNumPgcd(PtrBigNum x,PtrBigNum y,PtrBigNum z);
- void BigNumPuiModulo(PtrBigNum x,PtrBigNum y,PtrBigNum z,PtrBigNum t);
- short BigNumSqrt(PtrBigNum x,PtrBigNum y);
- void BigNumSwap(PtrBigNum x,PtrBigNum y);
- void BigNumAssign(PtrBigNum x,PtrBigNum y);
- void BigNumPower2(PtrBigNum x,int Nb);
-
- /* No more Macro */
-
- void BigNumSetNul(PtrBigNum x);
- int BigNumSize(PtrBigNum x);
- short BigNumIsEven(PtrBigNum x);
- short BigNumIsNul(PtrBigNum x);
- short BigNumIsPositive(PtrBigNum x);
- short BigNumIsNegative(PtrBigNum x);
- void BigNumAbsBigNum(PtrBigNum x);
-
- /* Alloc/Free */
-
- PtrBigNum BigNumInit(void);
- void BigNumFree(int i);
- short BigNumErrorStatus(void);
- void BigNumInfo(void);
-
- /* For compatibility to prior versions */
-
- #define SetNul(x) {(x)->chiffres[(x)->nc=0]=0;(x)->signe=1;}
- #define Size(x) ((x)->nc+1)
- #define Even(x) (!((x)->chiffres[0]&1))
- #define AbsBigNum(x,y) {Assign(x,y);x->signe=1;}
- #define IsPositive(x) ((x)->signe)
- #define IsNul(x) (((!(x)->nc)&&(!(x)->chiffres[0]))?1:0)
-
- /* Error codes */
-
- #define DIVIDE_ZERO 1
- #define NO_MEMORY 2
- #define TOO_MUCH_BIGNUM 4
- #define TOO_MUCH_FREE_BIGNUM 8
- #define INVALID_DOS 16
- #define INVALID_GRAPHICS 32
- #define INVALID_CPU 64
- #define BIGNUM_SIZE_TOO_HIGH 128
- #define NEGATIVE_SQRT 256
- #define PARTIAL_BIGNUM_TO_INT 512
- #define NEGATIVE_PGCD 1024
- #define ZERO_POWER_ZERO 2048
- #define MODULO_ZERO 4096
-
- #endif /* CLIB_BIGNUM_PROTOS_H */
-