mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-15 23:50:44 +00:00
452 lines
10 KiB
Plaintext
452 lines
10 KiB
Plaintext
|
--- ipmpar.c.orig Tue Sep 8 14:19:45 1998
|
||
|
+++ ipmpar.c Tue Sep 8 14:11:24 1998
|
||
|
@@ -1,426 +1,24 @@
|
||
|
-int ipmpar(int*);
|
||
|
-/*
|
||
|
------------------------------------------------------------------------
|
||
|
-
|
||
|
- IPMPAR PROVIDES THE INTEGER MACHINE CONSTANTS FOR THE COMPUTER
|
||
|
- THAT IS USED. IT IS ASSUMED THAT THE ARGUMENT I IS AN INTEGER
|
||
|
- HAVING ONE OF THE VALUES 1-10. IPMPAR(I) HAS THE VALUE ...
|
||
|
-
|
||
|
- INTEGERS.
|
||
|
-
|
||
|
- ASSUME INTEGERS ARE REPRESENTED IN THE N-DIGIT, BASE-A FORM
|
||
|
-
|
||
|
- SIGN ( X(N-1)*A**(N-1) + ... + X(1)*A + X(0) )
|
||
|
-
|
||
|
- WHERE 0 .LE. X(I) .LT. A FOR I=0,...,N-1.
|
||
|
-
|
||
|
- IPMPAR(1) = A, THE BASE.
|
||
|
-
|
||
|
- IPMPAR(2) = N, THE NUMBER OF BASE-A DIGITS.
|
||
|
-
|
||
|
- IPMPAR(3) = A**N - 1, THE LARGEST MAGNITUDE.
|
||
|
-
|
||
|
- FLOATING-POINT NUMBERS.
|
||
|
-
|
||
|
- IT IS ASSUMED THAT THE SINGLE AND DOUBLE PRECISION FLOATING
|
||
|
- POINT ARITHMETICS HAVE THE SAME BASE, SAY B, AND THAT THE
|
||
|
- NONZERO NUMBERS ARE REPRESENTED IN THE FORM
|
||
|
-
|
||
|
- SIGN (B**E) * (X(1)/B + ... + X(M)/B**M)
|
||
|
-
|
||
|
- WHERE X(I) = 0,1,...,B-1 FOR I=1,...,M,
|
||
|
- X(1) .GE. 1, AND EMIN .LE. E .LE. EMAX.
|
||
|
-
|
||
|
- IPMPAR(4) = B, THE BASE.
|
||
|
-
|
||
|
- SINGLE-PRECISION
|
||
|
-
|
||
|
- IPMPAR(5) = M, THE NUMBER OF BASE-B DIGITS.
|
||
|
-
|
||
|
- IPMPAR(6) = EMIN, THE SMALLEST EXPONENT E.
|
||
|
-
|
||
|
- IPMPAR(7) = EMAX, THE LARGEST EXPONENT E.
|
||
|
-
|
||
|
- DOUBLE-PRECISION
|
||
|
-
|
||
|
- IPMPAR(8) = M, THE NUMBER OF BASE-B DIGITS.
|
||
|
-
|
||
|
- IPMPAR(9) = EMIN, THE SMALLEST EXPONENT E.
|
||
|
-
|
||
|
- IPMPAR(10) = EMAX, THE LARGEST EXPONENT E.
|
||
|
-
|
||
|
------------------------------------------------------------------------
|
||
|
-
|
||
|
- TO DEFINE THIS FUNCTION FOR THE COMPUTER BEING USED REMOVE
|
||
|
- THE COMMENT DELIMITORS FROM THE DEFINITIONS DIRECTLY BELOW THE NAME
|
||
|
- OF THE MACHINE
|
||
|
-
|
||
|
------------------------------------------------------------------------
|
||
|
-
|
||
|
- IPMPAR IS AN ADAPTATION OF THE FUNCTION I1MACH, WRITTEN BY
|
||
|
- P.A. FOX, A.D. HALL, AND N.L. SCHRYER (BELL LABORATORIES).
|
||
|
- IPMPAR WAS FORMED BY A.H. MORRIS (NSWC). THE CONSTANTS ARE
|
||
|
- FROM BELL LABORATORIES, NSWC, AND OTHER SOURCES.
|
||
|
-
|
||
|
------------------------------------------------------------------------
|
||
|
- .. Scalar Arguments ..
|
||
|
-*/
|
||
|
-int ipmpar(int *i)
|
||
|
-{
|
||
|
-static int imach[11];
|
||
|
-static int ipmpar;
|
||
|
-/* MACHINE CONSTANTS FOR AMDAHL MACHINES. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 16;
|
||
|
- imach[5] = 6;
|
||
|
- imach[6] = -64;
|
||
|
- imach[7] = 63;
|
||
|
- imach[8] = 14;
|
||
|
- imach[9] = -64;
|
||
|
- imach[10] = 63;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE AT&T 3B SERIES, AT&T
|
||
|
- PC 7300, AND AT&T 6300. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 33;
|
||
|
- imach[3] = 8589934591;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -256;
|
||
|
- imach[7] = 255;
|
||
|
- imach[8] = 60;
|
||
|
- imach[9] = -256;
|
||
|
- imach[10] = 255;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 39;
|
||
|
- imach[3] = 549755813887;
|
||
|
- imach[4] = 8;
|
||
|
- imach[5] = 13;
|
||
|
- imach[6] = -50;
|
||
|
- imach[7] = 76;
|
||
|
- imach[8] = 26;
|
||
|
- imach[9] = -50;
|
||
|
- imach[10] = 76;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 39;
|
||
|
- imach[3] = 549755813887;
|
||
|
- imach[4] = 8;
|
||
|
- imach[5] = 13;
|
||
|
- imach[6] = -50;
|
||
|
- imach[7] = 76;
|
||
|
- imach[8] = 26;
|
||
|
- imach[9] = -32754;
|
||
|
- imach[10] = 32780;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES
|
||
|
- 60 BIT ARITHMETIC, AND THE CDC CYBER 995 64 BIT
|
||
|
- ARITHMETIC (NOS OPERATING SYSTEM). */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 48;
|
||
|
- imach[3] = 281474976710655;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 48;
|
||
|
- imach[6] = -974;
|
||
|
- imach[7] = 1070;
|
||
|
- imach[8] = 95;
|
||
|
- imach[9] = -926;
|
||
|
- imach[10] = 1070;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE CDC CYBER 995 64 BIT
|
||
|
- ARITHMETIC (NOS/VE OPERATING SYSTEM). */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 63;
|
||
|
- imach[3] = 9223372036854775807;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 48;
|
||
|
- imach[6] = -4096;
|
||
|
- imach[7] = 4095;
|
||
|
- imach[8] = 96;
|
||
|
- imach[9] = -4096;
|
||
|
- imach[10] = 4095;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 63;
|
||
|
- imach[3] = 9223372036854775807;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 47;
|
||
|
- imach[6] = -8189;
|
||
|
- imach[7] = 8190;
|
||
|
- imach[8] = 94;
|
||
|
- imach[9] = -8099;
|
||
|
- imach[10] = 8190;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 15;
|
||
|
- imach[3] = 32767;
|
||
|
- imach[4] = 16;
|
||
|
- imach[5] = 6;
|
||
|
- imach[6] = -64;
|
||
|
- imach[7] = 63;
|
||
|
- imach[8] = 14;
|
||
|
- imach[9] = -64;
|
||
|
- imach[10] = 63;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE HARRIS 220. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 23;
|
||
|
- imach[3] = 8388607;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 23;
|
||
|
- imach[6] = -127;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 38;
|
||
|
- imach[9] = -127;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE HONEYWELL 600/6000
|
||
|
- AND DPS 8/70 SERIES. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 35;
|
||
|
- imach[3] = 34359738367;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 27;
|
||
|
- imach[6] = -127;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 63;
|
||
|
- imach[9] = -127;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE HP 2100
|
||
|
- 3 WORD DOUBLE PRECISION OPTION WITH FTN4 */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 15;
|
||
|
- imach[3] = 32767;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 23;
|
||
|
- imach[6] = -128;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 39;
|
||
|
- imach[9] = -128;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE HP 2100
|
||
|
- 4 WORD DOUBLE PRECISION OPTION WITH FTN4 */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 15;
|
||
|
- imach[3] = 32767;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 23;
|
||
|
- imach[6] = -128;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 55;
|
||
|
- imach[9] = -128;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE HP 9000. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -126;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE IBM 360/370 SERIES,
|
||
|
- THE ICL 2900, THE ITEL AS/6, THE XEROX SIGMA
|
||
|
- 5/7/9 AND THE SEL SYSTEMS 85/86. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 16;
|
||
|
- imach[5] = 6;
|
||
|
- imach[6] = -64;
|
||
|
- imach[7] = 63;
|
||
|
- imach[8] = 14;
|
||
|
- imach[9] = -64;
|
||
|
- imach[10] = 63;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE IBM PC. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE MACINTOSH II - ABSOFT
|
||
|
- MACFORTRAN II. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE MICROVAX - VMS FORTRAN. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -127;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 56;
|
||
|
- imach[9] = -127;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 35;
|
||
|
- imach[3] = 34359738367;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 27;
|
||
|
- imach[6] = -128;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 54;
|
||
|
- imach[9] = -101;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 35;
|
||
|
- imach[3] = 34359738367;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 27;
|
||
|
- imach[6] = -128;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 62;
|
||
|
- imach[9] = -128;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE PDP-11 FORTRAN SUPPORTING
|
||
|
- 32-BIT INTEGER ARITHMETIC. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -127;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 56;
|
||
|
- imach[9] = -127;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE SILICON GRAPHICS IRIS-4D
|
||
|
- SERIES (MIPS R3000 PROCESSOR). */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T
|
||
|
- 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T
|
||
|
- PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300). */
|
||
|
-
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -125;
|
||
|
- imach[7] = 128;
|
||
|
- imach[8] = 53;
|
||
|
- imach[9] = -1021;
|
||
|
- imach[10] = 1024;
|
||
|
+#include <float.h>
|
||
|
+#include <limits.h>
|
||
|
|
||
|
-/* MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 35;
|
||
|
- imach[3] = 34359738367;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 27;
|
||
|
- imach[6] = -128;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 60;
|
||
|
- imach[9] = -1024;
|
||
|
- imach[10] = 1023;
|
||
|
-*/
|
||
|
-/* MACHINE CONSTANTS FOR THE VAX 11/780. */
|
||
|
-/*
|
||
|
- imach[1] = 2;
|
||
|
- imach[2] = 31;
|
||
|
- imach[3] = 2147483647;
|
||
|
- imach[4] = 2;
|
||
|
- imach[5] = 24;
|
||
|
- imach[6] = -127;
|
||
|
- imach[7] = 127;
|
||
|
- imach[8] = 56;
|
||
|
- imach[9] = -127;
|
||
|
- imach[10] = 127;
|
||
|
-*/
|
||
|
- ipmpar = imach[*i];
|
||
|
- return ipmpar;
|
||
|
+int ipmpar( int *i)
|
||
|
+{
|
||
|
+ static int imach[11] = {
|
||
|
+ 0, /* dummy zeroth index */
|
||
|
+ /* integers */
|
||
|
+ 2, /* base; you are on the binary machine, aren't you? */
|
||
|
+ sizeof(int)*(CHAR_BIT)-1,
|
||
|
+ INT_MAX,
|
||
|
+ /* all floats */
|
||
|
+ FLT_RADIX,
|
||
|
+ /* single precision floats */
|
||
|
+ FLT_MANT_DIG,
|
||
|
+ FLT_MIN_EXP,
|
||
|
+ FLT_MAX_EXP,
|
||
|
+ /* double precision floats */
|
||
|
+ DBL_MANT_DIG,
|
||
|
+ DBL_MIN_EXP,
|
||
|
+ DBL_MAX_EXP,
|
||
|
+ };
|
||
|
+ return imach[*i];
|
||
|
}
|