]> granicus.if.org Git - postgresql/commitdiff
Thanks to Vince Vielhaber <vev@michvhf.com>
authorMarc G. Fournier <scrappy@hub.org>
Sat, 31 Oct 1998 04:10:53 +0000 (04:10 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Sat, 31 Oct 1998 04:10:53 +0000 (04:10 +0000)
Here is an os2 psql client, with libpq.a library

contrib/os2client/Makefile [new file with mode: 0644]
contrib/os2client/README [new file with mode: 0644]
contrib/os2client/c.h [new file with mode: 0644]
contrib/os2client/config.h [new file with mode: 0644]
contrib/os2client/libpq.a [new file with mode: 0644]
contrib/os2client/portname [new file with mode: 0644]
contrib/os2client/psql.exe [new file with mode: 0755]

diff --git a/contrib/os2client/Makefile b/contrib/os2client/Makefile
new file mode 100644 (file)
index 0000000..b8ace03
--- /dev/null
@@ -0,0 +1,91 @@
+#-------------------------------------------------------------------------\r
+#\r
+# Makefile\r
+#    Makefile for libpq library\r
+#\r
+# Copyright (c) 1994, Regents of the University of California\r
+#\r
+#\r
+# IDENTIFICATION\r
+#    $Header: /cvsroot/pgsql/contrib/os2client/Attic/Makefile,v 1.1 1998/10/31 04:10:52 scrappy Exp $\r
+#\r
+#-------------------------------------------------------------------------\r
+\r
+SO_MAJOR_VERSION=1\r
+SO_MINOR_VERSION=1\r
+\r
+SRCDIR= ../../src\r
+\r
+INTERFACES= $(SRCDIR)/interfaces/libpq\r
+\r
+PORTNAME=OS2\r
+\r
+CC=gcc\r
+CFLAGS=-I. -I$(SRCDIR)/include\r
+CFLAGS+=-DFRONTEND -DTCPIPV4 -DHAVE_CRYPT_H\r
+\r
+CP= copy\r
+\r
+AR=ar\r
+\r
+AROPT=rc\r
+\r
+RANLIB= ar s\r
+\r
+LDFLAGS= -L.\r
+\r
+OBJS= fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-lobj.o fe-print.o \\r
+      dllist.o pqsignal.o pqcomprim.o\r
+\r
+EXEOBJS= psql.o stringutils.o\r
+\r
+all: libpq.a c.h psql\r
+\r
+fe-auth.o: $(INTERFACES)/fe-auth.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-auth.c\r
+\r
+fe-connect.o: $(INTERFACES)/fe-connect.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-connect.c\r
+\r
+fe-exec.o: $(INTERFACES)/fe-exec.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-exec.c\r
+\r
+fe-lobj.o: $(INTERFACES)/fe-lobj.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-lobj.c\r
+\r
+fe-misc.o: $(INTERFACES)/fe-misc.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-misc.c\r
+\r
+fe-print.o: $(INTERFACES)/fe-print.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/fe-print.c\r
+\r
+pqsignal.o: $(INTERFACES)/pqsignal.c\r
+       $(CC) $(CFLAGS) -c $(INTERFACES)/pqsignal.c\r
+\r
+dllist.o: $(SRCDIR)/backend/lib/dllist.c\r
+       $(CC) $(CFLAGS) -c $(SRCDIR)/backend/lib/dllist.c\r
+\r
+pqcomprim.o: $(SRCDIR)/backend/libpq/pqcomprim.c\r
+       $(CC) $(CFLAGS) -c $(SRCDIR)/backend/libpq/pqcomprim.c\r
+\r
+libpq.a: $(OBJS)\r
+       $(AR) $(AROPT) libpq.a $(OBJS) \r
+       $(RANLIB) libpq.a\r
+\r
+psql: $(EXEOBJS)\r
+       $(CC) -o psql.exe $(EXEOBJS) $(LDFLAGS) -llibpq -lsocket -lufc\r
+\r
+psql.o: $(SRCDIR)/bin/psql/psql.c\r
+       $(CC) $(CFLAGS) -I$(INTERFACES) -c $(SRCDIR)/bin/psql/psql.c \r
+\r
+stringutils.o: $(SRCDIR)/bin/psql/stringutils.c\r
+       $(CC) $(CFLAGS) -I$(INTERFACES) -c $(SRCDIR)/bin/psql/stringutils.c\r
+\r
+c.h: $(SRCDIR)/include/c.h\r
+       rm -f c.h\r
+       $(CP) portname c.h\r
+       cat $(SRCDIR)/include/c.h >> c.h\r
+\r
+clean:\r
+       rm -f libpq.a $(OBJS) $(EXEOBJS) psql.exe c.h dllist.c pqcomprim.c\r
+\r
diff --git a/contrib/os2client/README b/contrib/os2client/README
new file mode 100644 (file)
index 0000000..306cda2
--- /dev/null
@@ -0,0 +1,50 @@
+\r
+19981029  libpq.a and psql.exe Version 6.4 for OS/2 \r
+---------------------------------------------------\r
+\r
+\r
+Requirements:\r
+\r
+emx 0.9c or newer under OS/2\r
+GNU crypt library for emx+gcc version 2.0.6 (available from \r
+  ftp://ftp.leo.org/pub/comp/os/os2/leo/crypt/gnuufc.zip)\r
+\r
+\r
+Also a patch is needed for sys/socket.h around line 291.  The lines\r
+with the pluses need to be added, the other lines are already there\r
+and are only for reference:\r
+\r
+\r
+#define MT_IFADDR       13\r
+\r
++#ifndef MAXSOCKETS\r
++#define MAXSOCKETS 2048\r
++#endif\r
+\r
+struct mbstat {\r
+        u_short         m_mbufs;\r
+        u_short         m_clusters;\r
+\r
+\r
+Possible problems:\r
+\r
+  You will also need to #define TCPIPV4\r
+\r
+  Make sure both socket.a and ufc.a are linked in to the executable \r
+AFTER libpq.a.\r
+\r
+The following include files will be needed in order to use the library.\r
+You only need to include one (libpq-fe.h) but these need to be present:\r
+\r
+postgres_ext.h\r
+libpq/pqcomm.h\r
+lib/dllist.h"\r
+c.h\r
+\r
+\r
+Good luck and enjoy!!\r
+\r
+Vince Vielhaber <vev@michvhf.com>\r
+\r
+\r
+\r
diff --git a/contrib/os2client/c.h b/contrib/os2client/c.h
new file mode 100644 (file)
index 0000000..5fbc5ae
--- /dev/null
@@ -0,0 +1,829 @@
+#undef PORTNAME \r
+#define PORTNAME OS2 \r
+/*-------------------------------------------------------------------------
+ *
+ * c.h--
+ *       Fundamental C definitions.  This is included by every .c file in
+ *       postgres.
+ *
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: c.h,v 1.1 1998/10/31 04:10:53 scrappy Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+/*
+ *      TABLE OF CONTENTS
+ *
+ *             When adding stuff to this file, please try and put stuff
+ *             into the relevant section, or add new sections as appropriate.
+ *
+ *       section       description
+ *       -------       ------------------------------------------------
+ *             1)              bool, true, false, TRUE, FALSE
+ *             2)              __STDC__, non-ansi C definitions:
+ *                             Pointer typedef, NULL
+ *                             cpp magic macros
+ *                             type prefixes: const, signed, volatile, inline
+ *             3)              standard system types
+ *             4)              datum type
+ *             5)              IsValid macros for system types
+ *             6)              offsetof, lengthof, endof
+ *             7)              exception handling definitions, Assert, Trap, etc macros
+ *             8)              Min, Max, Abs, StrNCpy macros
+ *             9)              externs
+ *             10)              Berkeley-specific defs
+ *             11)             system-specific hacks
+ *
+ *      NOTES
+ *
+ *             This file is MACHINE AND COMPILER dependent!!!  (For now.)
+ *
+ * ----------------------------------------------------------------
+ */
+#ifndef C_H
+#define C_H
+
+/* We have to include stdlib.h here because it defines many of these macros
+   on some platforms, and we only want our definitions used if stdlib.h doesn't
+   have its own.
+*/
+#include <stdlib.h>
+
+/* ----------------------------------------------------------------
+ *                             Section 1:      bool, true, false, TRUE, FALSE
+ * ----------------------------------------------------------------
+ */
+/*
+ * bool --
+ *             Boolean value, either true or false.
+ *
+ */
+#define false  ((char) 0)
+#define true   ((char) 1)
+#ifndef __cplusplus
+#ifndef bool
+typedef char bool;
+#endif   /* ndef bool */
+#endif  /* not C++ */
+typedef bool *BoolPtr;
+
+#ifndef TRUE
+#define TRUE   1
+#endif  /* TRUE */
+
+#ifndef FALSE
+#define FALSE  0
+#endif  /* FALSE */
+
+/* ----------------------------------------------------------------
+ *                             Section 2: __STDC__, non-ansi C definitions:
+ *
+ *                             cpp magic macros
+ *                             Pointer typedef, NULL
+ *                             type prefixes: const, signed, volatile, inline
+ * ----------------------------------------------------------------
+ */
+
+#ifdef __STDC__                                /* ANSI C */
+
+/*
+ * Pointer --
+ *             Variable holding address of any memory resident object.
+ */
+
+/*
+ *             XXX Pointer arithmetic is done with this, so it can't be void *
+ *             under "true" ANSI compilers.
+ */
+typedef char *Pointer;
+
+#ifndef NULL
+/*
+ * NULL --
+ *             Null pointer.
+ */
+#define NULL   ((void *) 0)
+#endif  /* !defined(NULL) */
+
+#define HAVE_ANSI_CPP                  /* all ANSI C compilers must have this! */
+#if defined(NEED_STD_HDRS)
+#undef NEED_STD_HDRS                   /* all ANSI systems must have
+                                                                * stddef/stdlib */
+#endif  /* NEED_STD_HDRS */
+
+#else  /* !defined(__STDC__) *//* NOT ANSI C */
+
+/*
+ * Pointer --
+ *             Variable containing address of any memory resident object.
+ */
+typedef char *Pointer;
+
+#ifndef NULL
+/*
+ * NULL --
+ *             Null pointer.
+ */
+#define NULL   0
+#endif  /* !defined(NULL) */
+
+/*
+ * const --
+ *             Type modifier.  Identifies read only variables.
+ *
+ * Example:
+ *             extern const Version    RomVersion;
+ */
+#ifndef WIN32
+#define const                                  /* const */
+#endif
+
+/*
+ * signed --
+ *             Type modifier.  Identifies signed integral types.
+ */
+#define signed                                 /* signed */
+
+/*
+ * volatile --
+ *             Type modifier.  Identifies variables which may change in ways not
+ *             noticeable by the compiler, e.g. via asynchronous interrupts.
+ *
+ * Example:
+ *             extern volatile unsigned int    NumberOfInterrupts;
+ */
+#define volatile                               /* volatile */
+
+#endif  /* !defined(__STDC__) */               /* NOT ANSI C */
+
+/*
+ * CppAsString --
+ *             Convert the argument to a string, using the C preprocessor.
+ * CppConcat --
+ *             Concatenate two arguments together, using the C preprocessor.
+ */
+#if defined(HAVE_ANSI_CPP)
+
+#define CppAsString(identifier) #identifier
+#define CppConcat(x, y)                        x##y
+
+#else                                                  /* !HAVE_ANSI_CPP */
+
+#define CppAsString(identifier) "identifier"
+
+/*
+ * CppIdentity -- On Reiser based cpp's this is used to concatenate
+ *             two tokens.  That is
+ *                             CppIdentity(A)B ==> AB
+ *             We renamed it to _private_CppIdentity because it should not
+ *             be referenced outside this file.  On other cpp's it
+ *             produces  A  B.
+ */
+#define _priv_CppIdentity(x)x
+#define CppConcat(x, y)                        _priv_CppIdentity(x)y
+
+#endif  /* !HAVE_ANSI_CPP */
+
+#ifndef __GNUC__                               /* GNU cc */
+#endif
+
+#ifndef __GNUC__                               /* GNU cc */
+#define inline
+/*
+ * dummyret is used to set return values in macros that use ?: to make
+ * assignments.  gcc wants these to be void, other compilers like char
+ */
+#define dummyret       char
+#else
+#define dummyret       void
+#endif
+
+#if defined(NEED_STD_HDRS)
+/*
+ * You're doomed.  We've removed almost all of our own C library
+ * extern declarations because they conflict on the different
+ * systems.  You'll have to write your own stdlib.h.
+ */
+#include "stdlib.h"
+#else                                                  /* NEED_STD_HDRS */
+#include <stddef.h>
+#include <stdlib.h>
+#endif  /* NEED_STD_HDRS */
+
+/* ----------------------------------------------------------------
+ *                             Section 3:      standard system types
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * intN --
+ *             Signed integer, EXACTLY N BITS IN SIZE,
+ *             used for numerical computations and the
+ *             frontend/backend protocol.
+ */
+typedef signed char int8;              /* == 8 bits */
+typedef signed short int16;            /* == 16 bits */
+typedef signed int int32;              /* == 32 bits */
+
+/*
+ * uintN --
+ *             Unsigned integer, EXACTLY N BITS IN SIZE,
+ *             used for numerical computations and the
+ *             frontend/backend protocol.
+ */
+typedef unsigned char uint8;   /* == 8 bits */
+typedef unsigned short uint16; /* == 16 bits */
+typedef unsigned int uint32;   /* == 32 bits */
+
+/*
+ * floatN --
+ *             Floating point number, AT LEAST N BITS IN SIZE,
+ *             used for numerical computations.
+ *
+ *             Since sizeof(floatN) may be > sizeof(char *), always pass
+ *             floatN by reference.
+ */
+typedef float float32data;
+typedef double float64data;
+typedef float *float32;
+typedef double *float64;
+
+/*
+ * boolN --
+ *             Boolean value, AT LEAST N BITS IN SIZE.
+ */
+typedef uint8 bool8;                   /* >= 8 bits */
+typedef uint16 bool16;                 /* >= 16 bits */
+typedef uint32 bool32;                 /* >= 32 bits */
+
+/*
+ * bitsN --
+ *             Unit of bitwise operation, AT LEAST N BITS IN SIZE.
+ */
+typedef uint8 bits8;                   /* >= 8 bits */
+typedef uint16 bits16;                 /* >= 16 bits */
+typedef uint32 bits32;                 /* >= 32 bits */
+
+/*
+ * wordN --
+ *             Unit of storage, AT LEAST N BITS IN SIZE,
+ *             used to fetch/store data.
+ */
+typedef uint8 word8;                   /* >= 8 bits */
+typedef uint16 word16;                 /* >= 16 bits */
+typedef uint32 word32;                 /* >= 32 bits */
+
+/*
+ * Size --
+ *             Size of any memory resident object, as returned by sizeof.
+ */
+typedef unsigned int Size;
+
+/*
+ * Index --
+ *             Index into any memory resident array.
+ *
+ * Note:
+ *             Indices are non negative.
+ */
+typedef unsigned int Index;
+
+#define MAXDIM 6
+typedef struct
+{
+       int                     indx[MAXDIM];
+} IntArray;
+
+/*
+ * Offset --
+ *             Offset into any memory resident array.
+ *
+ * Note:
+ *             This differs from an Index in that an Index is always
+ *             non negative, whereas Offset may be negative.
+ */
+typedef signed int Offset;
+
+/* ----------------------------------------------------------------
+ *                             Section 4:      datum type + support macros
+ * ----------------------------------------------------------------
+ */
+/*
+ * datum.h --
+ *             POSTGRES abstract data type datum representation definitions.
+ *
+ * Note:
+ *
+ * Port Notes:
+ *     Postgres makes the following assumption about machines:
+ *
+ *     sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4
+ *
+ *     Postgres also assumes that
+ *
+ *     sizeof(char) == 1
+ *
+ *     and that
+ *
+ *     sizeof(short) == 2
+ *
+ *     If your machine meets these requirements, Datums should also be checked
+ *     to see if the positioning is correct.
+ *
+ *             This file is MACHINE AND COMPILER dependent!!!
+ */
+
+typedef unsigned long Datum;   /* XXX sizeof(long) >= sizeof(void *) */
+typedef Datum *DatumPtr;
+
+#define GET_1_BYTE(datum)      (((Datum) (datum)) & 0x000000ff)
+#define GET_2_BYTES(datum)     (((Datum) (datum)) & 0x0000ffff)
+#define GET_4_BYTES(datum)     (((Datum) (datum)) & 0xffffffff)
+#define SET_1_BYTE(value)      (((Datum) (value)) & 0x000000ff)
+#define SET_2_BYTES(value)     (((Datum) (value)) & 0x0000ffff)
+#define SET_4_BYTES(value)     (((Datum) (value)) & 0xffffffff)
+
+/*
+ * DatumGetChar --
+ *             Returns character value of a datum.
+ */
+
+#define DatumGetChar(X) ((char) GET_1_BYTE(X))
+
+/*
+ * CharGetDatum --
+ *             Returns datum representation for a character.
+ */
+
+#define CharGetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * Int8GetDatum --
+ *             Returns datum representation for an 8-bit integer.
+ */
+
+#define Int8GetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * DatumGetUInt8 --
+ *             Returns 8-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt8(X) ((uint8) GET_1_BYTE(X))
+
+/*
+ * UInt8GetDatum --
+ *             Returns datum representation for an 8-bit unsigned integer.
+ */
+
+#define UInt8GetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * DatumGetInt16 --
+ *             Returns 16-bit integer value of a datum.
+ */
+
+#define DatumGetInt16(X) ((int16) GET_2_BYTES(X))
+
+/*
+ * Int16GetDatum --
+ *             Returns datum representation for a 16-bit integer.
+ */
+
+#define Int16GetDatum(X) ((Datum) SET_2_BYTES(X))
+
+/*
+ * DatumGetUInt16 --
+ *             Returns 16-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt16(X) ((uint16) GET_2_BYTES(X))
+
+/*
+ * UInt16GetDatum --
+ *             Returns datum representation for a 16-bit unsigned integer.
+ */
+
+#define UInt16GetDatum(X) ((Datum) SET_2_BYTES(X))
+
+/*
+ * DatumGetInt32 --
+ *             Returns 32-bit integer value of a datum.
+ */
+
+#define DatumGetInt32(X) ((int32) GET_4_BYTES(X))
+
+/*
+ * Int32GetDatum --
+ *             Returns datum representation for a 32-bit integer.
+ */
+
+#define Int32GetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetUInt32 --
+ *             Returns 32-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt32(X) ((uint32) GET_4_BYTES(X))
+
+/*
+ * UInt32GetDatum --
+ *             Returns datum representation for a 32-bit unsigned integer.
+ */
+
+#define UInt32GetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetObjectId --
+ *             Returns object identifier value of a datum.
+ */
+
+#define DatumGetObjectId(X) ((Oid) GET_4_BYTES(X))
+
+/*
+ * ObjectIdGetDatum --
+ *             Returns datum representation for an object identifier.
+ */
+
+#define ObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetPointer --
+ *             Returns pointer value of a datum.
+ */
+
+#define DatumGetPointer(X) ((Pointer) X)
+
+/*
+ * PointerGetDatum --
+ *             Returns datum representation for a pointer.
+ */
+
+#define PointerGetDatum(X) ((Datum) X)
+
+/*
+ * DatumGetName --
+ *             Returns name value of a datum.
+ */
+
+#define DatumGetName(X) ((Name) DatumGetPointer((Datum) X))
+
+/*
+ * NameGetDatum --
+ *             Returns datum representation for a name.
+ */
+
+#define NameGetDatum(X) PointerGetDatum((Pointer) X)
+
+
+/*
+ * DatumGetFloat32 --
+ *             Returns 32-bit floating point value of a datum.
+ *             This is really a pointer, of course.
+ */
+
+#define DatumGetFloat32(X) ((float32) DatumGetPointer((Datum) X))
+
+/*
+ * Float32GetDatum --
+ *             Returns datum representation for a 32-bit floating point number.
+ *             This is really a pointer, of course.
+ */
+
+#define Float32GetDatum(X) PointerGetDatum((Pointer) X)
+
+/*
+ * DatumGetFloat64 --
+ *             Returns 64-bit floating point value of a datum.
+ *             This is really a pointer, of course.
+ */
+
+#define DatumGetFloat64(X) ((float64) DatumGetPointer(X))
+
+/*
+ * Float64GetDatum --
+ *             Returns datum representation for a 64-bit floating point number.
+ *             This is really a pointer, of course.
+ */
+
+#define Float64GetDatum(X) PointerGetDatum((Pointer) X)
+
+/* ----------------------------------------------------------------
+ *                             Section 5:      IsValid macros for system types
+ * ----------------------------------------------------------------
+ */
+/*
+ * BoolIsValid --
+ *             True iff bool is valid.
+ */
+#define BoolIsValid(boolean)   ((boolean) == false || (boolean) == true)
+
+/*
+ * PointerIsValid --
+ *             True iff pointer is valid.
+ */
+#define PointerIsValid(pointer) (bool)((void*)(pointer) != NULL)
+
+/*
+ * PointerIsInBounds --
+ *             True iff pointer is within given bounds.
+ *
+ * Note:
+ *             Assumes the bounded interval to be [min,max),
+ *             i.e. closed on the left and open on the right.
+ */
+#define PointerIsInBounds(pointer, min, max) \
+               ((min) <= (pointer) && (pointer) < (max))
+
+/*
+ * PointerIsAligned --
+ *             True iff pointer is properly aligned to point to the given type.
+ */
+#define PointerIsAligned(pointer, type) \
+               (((long)(pointer) % (sizeof (type))) == 0)
+
+/* ----------------------------------------------------------------
+ *                             Section 6:      offsetof, lengthof, endof
+ * ----------------------------------------------------------------
+ */
+/*
+ * offsetof --
+ *             Offset of a structure/union field within that structure/union.
+ *
+ *             XXX This is supposed to be part of stddef.h, but isn't on
+ *             some systems (like SunOS 4).
+ */
+#ifndef offsetof
+#define offsetof(type, field)  ((long) &((type *)0)->field)
+#endif  /* offsetof */
+
+/*
+ * lengthof --
+ *             Number of elements in an array.
+ */
+#define lengthof(array) (sizeof (array) / sizeof ((array)[0]))
+
+/*
+ * endof --
+ *             Address of the element one past the last in an array.
+ */
+#define endof(array)   (&array[lengthof(array)])
+
+/* ----------------------------------------------------------------
+ *                             Section 7:      exception handling definitions
+ *                                                     Assert, Trap, etc macros
+ * ----------------------------------------------------------------
+ */
+/*
+ * Exception Handling definitions
+ */
+
+typedef char *ExcMessage;
+typedef struct Exception
+{
+       ExcMessage      message;
+} Exception;
+
+/*
+ * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
+ * - plai  9/5/90
+ *
+ * It should _NOT_ be defined in releases or in benchmark copies
+ */
+
+/*
+ * Trap --
+ *             Generates an exception if the given condition is true.
+ *
+ */
+#define Trap(condition, exception) \
+               { if ((assert_enabled) && (condition)) \
+                               ExceptionalCondition(CppAsString(condition), &(exception), \
+                                               (char*)NULL, __FILE__, __LINE__); }
+
+/*
+ *     TrapMacro is the same as Trap but it's intended for use in macros:
+ *
+ *             #define foo(x) (AssertM(x != 0) && bar(x))
+ *
+ *     Isn't CPP fun?
+ */
+#define TrapMacro(condition, exception) \
+       ((bool) ((! assert_enabled) || (! condition) || \
+                        (ExceptionalCondition(CppAsString(condition), \
+                                                                 &(exception), \
+                                                                 (char*) NULL, __FILE__, __LINE__))))
+
+#ifndef USE_ASSERT_CHECKING
+#define Assert(condition)
+#define AssertMacro(condition) (void)true
+#define AssertArg(condition)
+#define AssertState(condition)
+#define assert_enabled 0
+#else
+#define Assert(condition) \
+               Trap(!(condition), FailedAssertion)
+
+#define AssertMacro(condition) \
+               (void)TrapMacro(!(condition), FailedAssertion)
+
+#define AssertArg(condition) \
+               Trap(!(condition), BadArg)
+
+#define AssertState(condition) \
+               Trap(!(condition), BadState)
+
+extern int     assert_enabled;
+
+#endif  /* USE_ASSERT_CHECKING */
+
+/*
+ * LogTrap --
+ *             Generates an exception with a message if the given condition is true.
+ *
+ */
+#define LogTrap(condition, exception, printArgs) \
+               { if ((assert_enabled) && (condition)) \
+                               ExceptionalCondition(CppAsString(condition), &(exception), \
+                                               form printArgs, __FILE__, __LINE__); }
+
+/*
+ *     LogTrapMacro is the same as LogTrap but it's intended for use in macros:
+ *
+ *             #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x))
+ */
+#define LogTrapMacro(condition, exception, printArgs) \
+       ((bool) ((! assert_enabled) || (! condition) || \
+                        (ExceptionalCondition(CppAsString(condition), \
+                                                                  &(exception), \
+                                                                  form printArgs, __FILE__, __LINE__))))
+
+#ifndef USE_ASSERT_CHECKING
+#define LogAssert(condition, printArgs)
+#define LogAssertMacro(condition, printArgs) true
+#define LogAssertArg(condition, printArgs)
+#define LogAssertState(condition, printArgs)
+#else
+#define LogAssert(condition, printArgs) \
+               LogTrap(!(condition), FailedAssertion, printArgs)
+
+#define LogAssertMacro(condition, printArgs) \
+               LogTrapMacro(!(condition), FailedAssertion, printArgs)
+
+#define LogAssertArg(condition, printArgs) \
+               LogTrap(!(condition), BadArg, printArgs)
+
+#define LogAssertState(condition, printArgs) \
+               LogTrap(!(condition), BadState, printArgs)
+
+extern int     assertEnable(int val);
+
+#ifdef ASSERT_CHECKING_TEST
+extern int     assertTest(int val);
+
+#endif
+#endif  /* USE_ASSERT_CHECKING */
+
+/* ----------------------------------------------------------------
+ *                             Section 8:      Min, Max, Abs macros
+ * ----------------------------------------------------------------
+ */
+/*
+ * Max --
+ *             Return the maximum of two numbers.
+ */
+#define Max(x, y)              ((x) > (y) ? (x) : (y))
+
+/*
+ * Min --
+ *             Return the minimum of two numbers.
+ */
+#define Min(x, y)              ((x) < (y) ? (x) : (y))
+
+/*
+ * Abs --
+ *             Return the absolute value of the argument.
+ */
+#define Abs(x)                 ((x) >= 0 ? (x) : -(x))
+
+/*
+ * StrNCpy --
+ *             Does string copy, and forces terminating NULL
+ */
+/* we do this so if the macro is used in an if action, it will work */
+#define StrNCpy(dst,src,len)   \
+( \
+       ((len) > 0) ? \
+       ( \
+               strncpy((dst),(src),(len)-1), \
+               *((dst)+(len)-1)='\0' \
+       ) \
+       : \
+               (dummyret)NULL,(void)(dst) \
+)
+
+/* Get a bit mask of the bits set in non-int32 aligned addresses */
+#define INT_ALIGN_MASK (sizeof(int32) - 1)
+
+/*
+ *     This function gets call too often, so we inline it if we can.
+ *     Are we aligned for int32?
+ *     We have to cast the pointer to int so we can do the AND
+ *     We got the 64 number by testing this against the stock memset() on
+ *     BSD/OS 3.0. Larger values were slower.
+ */
+#define MemSet(start, val, len) do \
+                                                               { \
+                                                                       if (((long)(start) & INT_ALIGN_MASK) == 0 && \
+                                                                               ((len) & INT_ALIGN_MASK) == 0 && \
+                                                                               (val) == 0 && \
+                                                                               (len) <= 64) \
+                                                                       { \
+                                                                               int32 *_i = (int32 *)(start); \
+                                                                               int32 *_stop = (int32 *)((char *)(start) + (len)); \
+                                                                               \
+                                                                               while (_i < _stop) \
+                                                                                       *_i++ = 0; \
+                                                                       } \
+                                                                       else \
+                                                                               memset((start), (val), (len)); \
+                                                               } while (0)
+
+/* ----------------------------------------------------------------
+ *                             Section 9: externs
+ * ----------------------------------------------------------------
+ */
+
+extern Exception FailedAssertion;
+extern Exception BadArg;
+extern Exception BadState;
+
+/* in utils/error/assert.c */
+extern int ExceptionalCondition(char *conditionName,
+                                        Exception *exceptionP, char *details,
+                                        char *fileName, int lineNumber);
+
+
+/* ----------------
+ *             form is used by assert and the exception handling stuff
+ * ----------------
+ */
+extern char *form(const char *fmt,...);
+
+
+
+/* ----------------------------------------------------------------
+ *                             Section 10: berkeley-specific configuration
+ *
+ * this section contains settings which are only relevant to the UC Berkeley
+ * sites.  Other sites can ignore this
+ * ----------------------------------------------------------------
+ */
+
+/* ----------------
+ *             storage managers
+ *
+ *             These are experimental and are not supported in the code that
+ *             we distribute to other sites.
+ * ----------------
+ */
+#ifdef NOT_USED
+#define STABLE_MEMORY_STORAGE
+#endif
+
+
+
+/* ----------------------------------------------------------------
+ *                             Section 11: system-specific hacks
+ *
+ *             This should be limited to things that absolutely have to be
+ *             included in every source file.  The changes should be factored
+ *             into a separate file so that changes to one port don't require
+ *             changes to c.h (and everyone recompiling their whole system).
+ * ----------------------------------------------------------------
+ */
+
+#ifdef FIXADE
+#if defined(hpux)
+#include "port/hpux/fixade.h"  /* for unaligned access fixup */
+#endif  /* hpux */
+#endif
+
+#if defined(sun) && defined(sparc) && !defined(__SVR4)
+#define memmove(d, s, l)               bcopy(s, d, l)
+#include <unistd.h>
+#endif
+
+/* These are for things that are one way on Unix and another on NT */
+#define NULL_DEV               "/dev/null"
+#define COPY_CMD               "cp"
+#define SEP_CHAR               '/'
+
+/* ----------------
+ *             end of c.h
+ * ----------------
+ */
+#endif  /* C_H */
diff --git a/contrib/os2client/config.h b/contrib/os2client/config.h
new file mode 100644 (file)
index 0000000..d09a596
--- /dev/null
@@ -0,0 +1,26 @@
+\r
+#ifndef TCPIPV4\r
+# define TCPIPV4\r
+#endif\r
+\r
+#ifndef MAXSOCKETS\r
+#define MAXSOCKETS 2048\r
+#endif\r
+\r
+/*\r
+ * DEF_PGPORT is the TCP port number on which the Postmaster listens by\r
+ * default.  This can be overriden by command options, environment variables,\r
+ * and the postconfig hook. (set by build script)\r
+ */\r
+\r
+#define DEF_PGPORT "5432"\r
+\r
+#define HAVE_TERMIOS_H\r
+#define HAVE_ENDIAN_H\r
+\r
+#define SOCKET_SIZE_TYPE size_t\r
+\r
+#define  strcasecmp(s1, s2) stricmp(s1, s2)\r
+\r
+\r
+\r
diff --git a/contrib/os2client/libpq.a b/contrib/os2client/libpq.a
new file mode 100644 (file)
index 0000000..4677828
Binary files /dev/null and b/contrib/os2client/libpq.a differ
diff --git a/contrib/os2client/portname b/contrib/os2client/portname
new file mode 100644 (file)
index 0000000..08a7a48
--- /dev/null
@@ -0,0 +1,2 @@
+#undef PORTNAME \r
+#define PORTNAME OS2 \r
diff --git a/contrib/os2client/psql.exe b/contrib/os2client/psql.exe
new file mode 100755 (executable)
index 0000000..d208e38
Binary files /dev/null and b/contrib/os2client/psql.exe differ