gcc-3.0 on HPUX-11
Jim Buffenbarger
buff@hpbs9968.boi.hp.com
Thu Jun 28 06:48:00 GMT 2001
Hi Bruce,
Bruce> I noticed you explicitly removed the 'extern "C"'
Bruce> stuff. Do you (or anyone else) know if it can be
Bruce> added back to this fix or also removed from the
Bruce> hpux10 fix? I _really_ prefer not adding new fixes
Bruce> if it is not really necessary.
I've attached the entire HP-UX B.11.00 A 9000/785 math.h
file. The relevant part is a couple of lines from the
bottom. As you can see, it doesn't have the 'extern "C"'
stuff (anymore). I didn't want to try to do the "meld" you
want to do, because I was afraid I'd break the HPUX-10
selection pattern.
I don't know what exact version of HPUX-10 the original
pattern was intended to match, but the HPUX-10 math.h that I
have available still has 'extern "C"' stuff. I can send that
math.h, too, if you want it.
By the way, we really appreciate all the hard work you guys
do, bringing us such a good compiler.
-- Jim
------------------------------ 8< ------------------------------
#ifndef _MATH_INCLUDED
#define _MATH_INCLUDED
#ifndef _SYS_STDSYMS_INCLUDED
# include <sys/stdsyms.h>
#endif /* _SYS_STDSYMS_INCLUDED */
#if !defined(__IA64__)
# define _PA_RISC
#endif
#ifdef __cplusplus
extern "C" {
#endif
/********* STANDARD C INTERFACE ********************************/
#define HUGE_VAL _DINFINITY
#if defined(_PA_RISC) && !defined(__cplusplus)
# pragma NO_SIDE_EFFECTS fabs
# ifdef __BUILTIN_MATH
# pragma NO_SIDE_EFFECTS acos, asin, atan, atan2, cos, sin, tan
# pragma NO_SIDE_EFFECTS cosh, sinh, tanh
# pragma NO_SIDE_EFFECTS exp, ldexp, log, log10, pow
# pragma NO_SIDE_EFFECTS sqrt, ceil, floor, fmod
# endif
#endif /* #if for pragmas */
#ifdef _PROTOTYPES
#ifdef _NAMESPACE_STD
namespace std {
#endif
extern double acos(double);
extern double asin(double);
extern double atan(double);
extern double atan2(double, double);
extern double cos(double);
extern double sin(double);
extern double tan(double);
extern double cosh(double);
extern double sinh(double);
extern double tanh(double);
extern double exp(double);
extern double frexp(double, int *);
extern double ldexp(double, int);
extern double log(double);
extern double log10(double);
extern double modf(double, double *);
extern double pow(double, double);
extern double sqrt(double);
extern double ceil(double);
extern double fabs(double);
extern double floor(double);
extern double fmod(double, double);
#ifdef _NAMESPACE_STD
} //namespace std
#endif
#else /* not _PROTOTYPES */
extern double acos();
extern double asin();
extern double atan();
extern double atan2();
extern double cos();
extern double sin();
extern double tan();
extern double cosh();
extern double sinh();
extern double tanh();
extern double exp();
extern double frexp();
extern double ldexp();
extern double log();
extern double log10();
extern double modf();
extern double pow();
extern double sqrt();
extern double ceil();
extern double fabs();
extern double floor();
extern double fmod();
#endif /* _PROTOTYPES */
/********* XOPEN EXTENSIONS ***********************************/
#ifdef _INCLUDE_XOPEN_SOURCE
# define M_E 2.7182818284590452354
# define M_LOG2E 1.4426950408889634074
# define M_LOG10E 0.43429448190325182765
# define M_LN2 0.69314718055994530942
# define M_LN10 2.30258509299404568402
# define M_PI 3.14159265358979323846
# define M_PI_2 1.57079632679489661923
# define M_PI_4 0.78539816339744830962
# define M_1_PI 0.31830988618379067154
# define M_2_PI 0.63661977236758134308
# define M_2_SQRTPI 1.12837916709551257390
# define M_SQRT2 1.41421356237309504880
# define M_SQRT1_2 0.70710678118654752440
# define MAXFLOAT ((float)3.40282346638528860e+38)
extern int signgam;
# if defined(_PA_RISC) && !defined(__cplusplus)
# pragma NO_SIDE_EFFECTS isnan
# ifdef __BUILTIN_MATH
# pragma NO_SIDE_EFFECTS acosh, asinh, atanh, rint, scalb, logb, cbrt
# pragma NO_SIDE_EFFECTS nextafter, remainder, expm1, ilogb, log1p
# endif
# endif /* #if for pragma */
# ifdef _PROTOTYPES
extern double erf(double);
extern double erfc(double);
extern double gamma(double); /* obsolescent */
extern double hypot(double, double);
extern int isnan(double);
extern double j0(double);
extern double j1(double);
extern double jn(int, double);
extern double lgamma(double);
extern double y0(double);
extern double y1(double);
extern double yn(int, double);
# else /* not _PROTOTYPES */
extern double erf();
extern double erfc();
extern double gamma(); /* obsolescent */
extern double hypot();
extern int isnan();
extern double j0();
extern double j1();
extern double jn();
extern double lgamma();
extern double y0();
extern double y1();
extern double yn();
# endif /* _PROTOTYPES */
#endif /* _INCLUDE_XOPEN_SOURCE */
#ifdef _INCLUDE_XOPEN_SOURCE_EXTENDED
# ifdef _PROTOTYPES
extern double acosh(double);
extern double asinh(double);
extern double atanh(double);
extern double cbrt(double);
extern double expm1(double);
extern int ilogb(double);
extern double log1p(double);
extern double logb(double);
extern double nextafter(double, double);
extern double remainder(double, double);
extern double rint(double);
extern double scalb(double,double);
# else /* not _PROTOTYPES */
extern double acosh();
extern double asinh();
extern double atanh();
extern double cbrt();
extern double expm1();
extern int ilogb();
extern double log1p();
extern double logb();
extern double nextafter();
extern double remainder();
extern double rint();
extern double scalb();
# endif /* _PROTOTYPES */
#endif /* _INCLUDE_XOPEN_SOURCE_EXTENDED */
/******** HPUX EXTENSIONS *************************************/
#ifdef _INCLUDE_HPUX_SOURCE
# ifdef __STDC__
typedef float float_t;
typedef double double_t;
# endif
# define HUGE_VALF _SINFINITY
# define INFINITY _SINFINITY
# define NAN _SQNAN
# define FP_ILOGB0 (-2147483647 - 1)
# define FP_ILOGBNAN (-2147483647 - 1)
# define isnan(x) _ISNAN(x)
# define isinf(x) _ISINF(x)
# define signbit(x) _SIGNBIT(x)
# define isfinite(x) _ISFINITE(x)
# define isnormal(x) _ISNORMAL(x)
# define fpclassify(x) _FPCLASSIFY(x)
# define isunordered(x,y) _ISUNORDERED(x,y)
# define isgreater(x,y) _ISGREATER(x,y)
# define isgreaterequal(x,y) _ISGREATEREQUAL(x,y)
# define isless(x,y) _ISLESS(x,y)
# define islessequal(x,y) _ISLESSEQUAL(x,y)
# define islessgreater(x,y) _ISLESSGREATER(x,y)
# define FP_NORMAL 0
# define FP_ZERO 1
# define FP_INFINITE 2
# define FP_SUBNORMAL 3
# define FP_NAN 4
# ifndef _PA_RISC
# define FP_FAST_FMA
# define FP_FAST_FMAF
# endif
# define DECIMAL_DIG 17
# if defined(_PA_RISC) && !defined(__cplusplus)
# pragma NO_SIDE_EFFECTS copysign, copysignf, fabsf
# pragma NO_SIDE_EFFECTS _Fpclassify, _Fpclassifyf, _Fpclassifyfd
# pragma NO_SIDE_EFFECTS _Isunordered, _Isunorderedf
# pragma NO_SIDE_EFFECTS _Signbit, _Signbitf, _Isnanf, _Isinf, _Isinff
# pragma NO_SIDE_EFFECTS _Isfinite, _Isfinitef, _Isnormal, _Isnormalf, _Isnormalfd
# ifdef __BUILTIN_MATH
# pragma NO_SIDE_EFFECTS acosd, asind, atand, atan2d, cosd, sind, tand, log2
# pragma NO_SIDE_EFFECTS acosf, asinf, atanf, atan2f, cosf, sinf, tanf
# pragma NO_SIDE_EFFECTS coshf, sinhf, tanhf, acosdf, asindf, atandf, atan2df
# pragma NO_SIDE_EFFECTS cosdf, sindf, tandf, expf, logf, log10f, log2f
# pragma NO_SIDE_EFFECTS powf, sqrtf, fmodf, cbrtf
# endif
# endif /* #if for pragmas */
# ifdef _PROTOTYPES
extern double copysign(double, double);
extern double log2(double);
extern double lgamma_r(double, int *);
extern double exp2(double);
extern double fdim(double, double);
extern double fmax(double, double);
extern double fmin(double, double);
extern double nan(const char *);
extern double scalbn(double, int);
extern double nearbyint(double);
extern double round(double);
extern double trunc(double);
extern double remquo(double, double, int *);
extern long lrint(double);
extern long lround(double);
# if defined(__STDC_EXT__) || defined(_INCLUDE_LONGLONG)
extern long long llrint(double);
extern long long llround(double);
# endif
extern double cosd(double);
extern double sind(double);
extern double tand(double);
# ifndef _PA_RISC
extern double exp10(double);
extern double fma(double, double, double);
extern double scalbln(double, long);
extern double tgamma(double);
# endif
extern double acosd(double);
extern double asind(double);
extern double atand(double);
extern double atan2d(double, double);
extern float acosf(float);
extern float asinf(float);
extern float atanf(float);
extern float atan2f(float, float);
extern float cosf(float);
extern float sinf(float);
extern float tanf(float);
extern float coshf(float);
extern float sinhf(float);
extern float tanhf(float);
extern float expf(float);
extern float logf(float);
extern float log10f(float);
extern float powf(float, float);
extern float sqrtf(float);
extern float fabsf(float);
extern float fmodf(float, float);
extern float cbrtf(float);
extern float copysignf(float, float);
extern float nextafterf(float, float);
extern float log2f(float);
extern float cosdf(float);
extern float sindf(float);
extern float tandf(float);
extern float acosdf(float);
extern float asindf(float);
extern float atandf(float);
extern float atan2df(float, float);
# ifndef _PA_RISC
extern float exp2f(float);
extern float exp10f(float);
extern float expm1f(float);
extern float log1pf(float);
extern float fmaf(float, float, float);
extern float acoshf(float);
extern float asinhf(float);
extern float atanhf(float);
extern float frexpf(float, int *);
extern float ldexpf(float, int);
extern float modff(float, float *);
extern float logbf(float);
extern float scalbnf(float, int);
extern float scalblnf(float, long);
extern int ilogbf(float);
extern float hypotf(float, float);
extern float erff(float);
extern float erfcf(float);
extern float gammaf(float);
extern float lgammaf(float);
extern float lgammaf_r(float, int *);
extern float tgammaf(float);
extern float ceilf(float);
extern float floorf(float);
extern float nearbyintf(float);
extern float rintf(float);
extern float roundf(float);
extern long lrintf(float);
extern long lroundf(float);
# if defined(__STDC_EXT__) || defined(_INCLUDE_LONGLONG)
extern long long llrintf(float);
extern long long llroundf(float);
# endif
extern float truncf(float);
extern float nanf(const char *);
extern float remainderf(float, float);
extern float remquof(float, float, int *);
extern float fdimf(float, float);
extern float fmaxf(float, float);
extern float fminf(float, float);
# endif /* !PA_RISC */
# ifdef __IA64__
extern __float80 acosf80(__float80);
extern __float80 asinf80(__float80);
extern __float80 atanf80(__float80);
extern __float80 atan2f80(__float80, __float80);
extern __float80 cosf80(__float80);
extern __float80 sinf80(__float80);
extern __float80 tanf80(__float80);
extern __float80 acosdf80(__float80);
extern __float80 asindf80(__float80);
extern __float80 atandf80(__float80);
extern __float80 atan2df80(__float80, __float80);
extern __float80 cosdf80(__float80);
extern __float80 sindf80(__float80);
extern __float80 tandf80(__float80);
extern __float80 coshf80(__float80);
extern __float80 sinhf80(__float80);
extern __float80 tanhf80(__float80);
extern __float80 acoshf80(__float80);
extern __float80 asinhf80(__float80);
extern __float80 atanhf80(__float80);
extern __float80 expf80(__float80);
extern __float80 exp2f80(__float80);
extern __float80 exp10f80(__float80);
extern __float80 expm1f80(__float80);
extern __float80 logf80(__float80);
extern __float80 log2f80(__float80);
extern __float80 log10f80(__float80);
extern __float80 log1pf80(__float80);
extern __float80 powf80(__float80, __float80);
extern __float80 frexpf80(__float80, int *);
extern __float80 ldexpf80(__float80, int);
extern __float80 modff80(__float80, __float80 *);
extern __float80 logbf80(__float80);
extern __float80 scalbnf80(__float80, int);
extern __float80 scalblnf80(__float80, long);
extern int ilogbf80(__float80);
extern __float80 fabsf80(__float80);
extern __float80 sqrtf80(__float80);
extern __float80 cbrtf80(__float80);
extern __float80 hypotf80(__float80, __float80);
/* Not implemented yet
extern __float80 erff80(__float80);
extern __float80 erfcf80(__float80);
extern __float80 gammaf80(__float80);
extern __float80 lgammaf80(__float80);
extern __float80 lgammaf80_r(__float80, int *);
extern __float80 tgammaf80(__float80);
*/
extern __float80 ceilf80(__float80);
extern __float80 floorf80(__float80);
extern __float80 nearbyintf80(__float80);
extern __float80 rintf80(__float80);
extern __float80 roundf80(__float80);
extern long lrintf80(__float80);
extern long lroundf80(__float80);
# if defined(__STDC_EXT__) || defined(_INCLUDE_LONGLONG)
extern long long llrintf80(__float80);
extern long long llroundf80(__float80);
# endif
extern __float80 truncf80(__float80);
extern __float80 nanf80(const char *);
extern __float80 fmodf80(__float80, __float80);
extern __float80 remainderf80(__float80, __float80);
extern __float80 remquof80(__float80, __float80, int *);
extern __float80 copysignf80(__float80, __float80);
extern __float80 nextafterf80(__float80, __float80);
extern __float80 fdimf80(__float80, __float80);
extern __float80 fmaxf80(__float80, __float80);
extern __float80 fminf80(__float80, __float80);
extern __float80 fmaf80(__float80, __float80, __float80);
# endif /* __IA64__ */
# else /* not _PROTOTYPES */
extern double copysign();
extern double log2();
extern double lgamma_r();
extern double exp2();
extern double fdim();
extern double fmax();
extern double fmin();
extern double nan();
extern double scalbn();
extern double nearbyint();
extern double round();
extern double trunc();
extern double remquo();
extern long lrint();
extern long lround();
extern double cosd();
extern double sind();
extern double tand();
# ifndef _PA_RISC
extern double exp10();
extern double fma();
extern double scalbln();
extern double tgamma();
# endif
extern double acosd();
extern double asind();
extern double atand();
extern double atan2d();
# endif /* _PROTOTYPES */
#endif /* _INCLUDE_HPUX_SOURCE */
/******** INTERNAL INTERFACE used in macro definitions ********/
#if defined(__cplusplus) && !defined(_DISALLOW_MASKING_MACROS)
# define _DISALLOW_MASKING_MACROS
#endif
#if defined(__IA64__) && (defined(__STDC__) || defined(__cplusplus))
# define _SUPPORT_F80
#endif
#ifdef _PROTOTYPES
extern const double _DINFINITY;
#else
extern double _DINFINITY;
#endif
#ifdef _INCLUDE_HPUX_SOURCE
# define _IS64(x) (sizeof(x)==sizeof(double))
# define _IS32(x) (sizeof(x)==sizeof(float))
# ifdef _SUPPORT_F80
# define _IS128(x) (sizeof(x)==sizeof(__float80))
# endif
# ifndef _DISALLOW_MASKING_MACROS
# define nan(x) ((double)NAN)
# endif /* DISALLOW_MASKING_MACROS */
# ifdef _PROTOTYPES
extern const float _SINFINITY;
extern const float _SQNAN;
extern int _Islessgreater(double, double);
extern int _Islessgreaterf(float, float);
# ifdef _SUPPORT_F80
extern int _Islessgreaterf80(__float80, __float80);
# endif
# if !defined(__IA64__) || !defined(_INLINE_ASM)
# ifdef _SUPPORT_F80
# define _ISNAN(x) (_IS32(x)?_Isnanf(x):_IS64(x)?(isnan)(x):_Isnanf80(x))
# define _ISINF(x) (_IS32(x)?_Isinff(x):_IS64(x)?_Isinf(x):_Isinff80(x))
# define _SIGNBIT(x) (_IS32(x)?_Signbitf(x):_IS64(x)?_Signbit(x):_Signbitf80(x))
# define _ISFINITE(x) (_IS32(x)?_Isfinitef(x):_IS64(x)?_Isfinite(x):_Isfinitef80(x))
# define _ISNORMAL(x) (_IS32(x)?_Isnormalf(x):_IS64(x)?_Isnormal(x):_Isnormalf80(x))
# define _ISUNORDERED(x,y) ((_IS128(x)||_IS128(y))?_Isunorderedf80(x,y):\
(_IS64(x)||_IS64(y))?_Isunordered(x,y):_Isunorderedf(x,y))
# define _ISLESS(x,y) ((_IS128(x)||_IS128(y))?_Islessf80(x,y):\
(_IS64(x)||_IS64(y))?_Isless(x,y):_Islessf(x,y))
# define _ISLESSEQUAL(x,y) ((_IS128(x)||_IS128(y))?_Islessequalf80(x,y):\
(_IS64(x)||_IS64(y))?_Islessequal(x,y):_Islessequalf(x,y))
# define _ISGREATER(x,y) ((_IS128(x)||_IS128(y))?_Isgreaterf80(x,y):\
(_IS64(x)||_IS64(y))?_Isgreater(x,y):_Isgreaterf(x,y))
# define _ISGREATEREQUAL(x,y) ((_IS128(x)||_IS128(y))?_Isgreaterequalf80(x,y):\
(_IS64(x)||_IS64(y))?_Isgreaterequal(x,y):_Isgreaterequalf(x,y))
extern int _Signbitf80(__float80);
extern int _Isnanf80(__float80);
extern int _Isfinitef80(__float80);
extern int _Isinff80(__float80);
extern int _Isnormalf80(__float80);
extern int _Isunorderedf80(__float80, __float80);
extern int _Islessf80(__float80, __float80);
extern int _Islessequalf80(__float80, __float80);
extern int _Isgreaterf80(__float80, __float80);
extern int _Isgreaterequalf80(__float80, __float80);
# else
# define _ISNAN(x) (_IS32(x)?_Isnanf(x):(isnan)(x))
# define _ISINF(x) (_IS32(x)?_Isinff(x):_Isinf(x))
# define _SIGNBIT(x) (_IS32(x)?_Signbitf(x):_Signbit(x))
# define _ISFINITE(x) (_IS32(x)?_Isfinitef(x):_Isfinite(x))
# define _ISNORMAL(x) (_IS32(x)?_Isnormalf(x):_Isnormal(x))
# define _ISUNORDERED(x,y) (_IS32(x)&&_IS32(y)?_Isunorderedf(x,y):_Isunordered(x,y))
# define _ISLESS(x,y) (_IS32(x)&&_IS32(y)?_Islessf(x,y):_Isless(x,y))
# define _ISLESSEQUAL(x,y) (_IS32(x)&&_IS32(y)?_Islessequalf(x,y):_Islessequal(x,y))
# define _ISGREATER(x,y) (_IS32(x)&&_IS32(y)?_Isgreaterf(x,y):_Isgreater(x,y))
# define _ISGREATEREQUAL(x,y) (_IS32(x)&&_IS32(y)?_Isgreaterequalf(x,y):_Isgreaterequal(x,y))
# define _ISLESSGREATER(x,y) (_IS32(x)&&_IS32(y)?_Islessgreaterf(x,y):_Islessgreater(x,y))
# endif /* _SUPPORT_F80 */
extern int _Signbit(double);
extern int _Signbitf(float);
extern int _Isnanf(float);
extern int _Isfinite(double);
extern int _Isfinitef(float);
extern int _Isinf(double);
extern int _Isinff(float);
extern int _Isnormal(double);
extern int _Isnormalf(float);
extern int _Isunordered(double, double);
extern int _Isunorderedf(float, float);
extern int _Isless(double, double);
extern int _Islessf(float, float);
extern int _Islessequal(double, double);
extern int _Islessequalf(float, float);
extern int _Isgreater(double, double);
extern int _Isgreaterf(float, float);
extern int _Isgreaterequal(double, double);
extern int _Isgreaterequalf(float, float);
# endif /* !defined(__IA64__) || !defined(_INLINE_ASM) */
# ifdef _PA_RISC
# define _FPCLASSIFY(x) (_IS32(x)?_Fpclassifyf(x)>>1:_Fpclassify(x)>>1)
extern int _Fpclassify(double);
extern int _Fpclassifyf(float);
# ifndef _DISALLOW_MASKING_MACROS
# define fabsf(x) ((float)fabs((double)(float)(x)))
# endif
# else /* __IA64__ */
# ifdef _INLINE_ASM /* implies not __cplusplus */
# include "math_ia64_internal.h"
# endif
# ifdef _SUPPORT_F80
# define _FPCLASSIFY(x) (_IS32(x)?_Fpclassf(x):_IS64(x)?_Fpclass(x):_Fpclassf80(x))
# define _ISLESSGREATER(x,y) ((_IS128(x)||_IS128(y))?_Islessgreaterf80(x,y):\
(_IS64(x)||_IS64(y))?_Islessgreater(x,y):_Islessgreaterf(x,y))
extern int _Fpclassf80(__float80);
# else /* !defined(_SUPPORT_F80) */
# define _FPCLASSIFY(x) (_IS32(x)?_Fpclassf(x):_Fpclass(x))
# endif /* _SUPPORT_F80 */
extern int _Fpclass(double);
extern int _Fpclassf(float);
# ifndef _DISALLOW_MASKING_MACROS
# define nanf(x) ((float)NAN)
# define nanf80(x) ((__float80)NAN)
# endif
# endif /* _PA_RISC */
# else /* NO PROTOTYPES */
extern float _SINFINITY;
extern float _SQNAN;
# define _ISNAN(x) ((isnan)((double)(x)))
# define _ISINF(x) (_Isinf((double)(x)))
# define _SIGNBIT(x) (_Signbit((double)(x)))
# define _ISFINITE(x) (_Isfinite((double)(x)))
# define _ISNORMAL(x) (_IS32(x)?_Isnormalfd((double)(x)):_Isnormal((double)(x)))
# define _ISUNORDERED(x,y) (_Isunordered((double)(x),(double)(y)))
# define _ISLESS(x,y) (_Isless((double)(x),(double)(y)))
# define _ISLESSEQUAL(x,y) (_Islessequal((double)(x),(double)(y)))
# define _ISGREATER(x,y) (_Isgreater((double)(x),(double)(y)))
# define _ISGREATEREQUAL(x,y) (_Isgreaterequal((double)(x),(double)(y)))
# define _ISLESSGREATER(x,y) (_Islessgreater((double)(x),(double)(y)))
# ifdef _PA_RISC
# define _FPCLASSIFY(x) (_IS32(x)?_Fpclassifyfd((double)(x))>>1:_Fpclassify((double)(x))>>1)
extern int _Fpclassify();
extern int _Fpclassifyfd();
# else
# define _FPCLASSIFY(x) (_IS32(x)?_Fpclassfd((double)(x)):_Fpclass((double)(x)))
extern int _Fpclass();
extern int _Fpclassfd();
# endif
extern int _Signbit();
extern int _Isfinite();
extern int _Isinf();
extern int _Isnormal();
extern int _Isnormalfd();
extern int _Isunordered();
extern int _Isless();
extern int _Islessequal();
extern int _Isgreater();
extern int _Isgreaterequal();
extern int _Islessgreater();
# endif /* _PROTOTYPES */
#endif /* _INCLUDE_HPUX_SOURCE */
#ifdef __cplusplus
}
#endif
/******** PRE STANDARD C++ ****************************/
#if defined(__cplusplus) && (__cplusplus < 199707)
inline int sqr(int x) {return(x*x);}
inline double sqr(double x) {return(x*x);}
# ifndef _STDLIB_INCLUDED
inline int abs(int d) { return (d>0)?d:-d; }
# endif /* _STDLIB_INCLUDED */
inline double abs(double d) { return fabs(d); }
inline double pow(double d,int expon) {
return pow(d, (double)expon);
}
#endif
#endif /* _MATH_INCLUDED */
More information about the Gcc-patches
mailing list