-/* This is a build of CELT */\r
-#define CELT_BUILD \r
-\r
-/* Version extra */\r
-#define CELT_EXTRA_VERSION "-1"\r
-\r
-/* Version major */\r
-#define CELT_MAJOR_VERSION 0\r
-\r
-/* Version micro */\r
-#define CELT_MICRO_VERSION 0\r
-\r
-/* Version minor */\r
-#define CELT_MINOR_VERSION 7\r
-\r
-/* Complete version string */\r
-#define CELT_VERSION "0.7.0-1"\r
-\r
-/* Compile as fixed-point */\r
-/* #undef FIXED_POINT */\r
-\r
-/* Compile as floating-point */\r
-#define FLOATING_POINT \r
-\r
-/* Make use of alloca */\r
-/* #undef USE_ALLOCA */\r
-#define USE_ALLOCA 1 /* disable this when using SSE */\r
-\r
-/* Define to equivalent of C99 restrict keyword, or to nothing if this is not\r
- supported. Do not define if restrict is supported directly. */\r
-#define restrict /* __restrict */\r
-\r
-// Microsoft version of 'inline'\r
-#define inline __inline\r
-\r
+/* This is a build of CELT */
+#define CELT_BUILD
+
+/* Version extra */
+#define CELT_EXTRA_VERSION "-1"
+
+/* Version major */
+#define CELT_MAJOR_VERSION 0
+
+/* Version micro */
+#define CELT_MICRO_VERSION 0
+
+/* Version minor */
+#define CELT_MINOR_VERSION 7
+
+/* Complete version string */
+#define CELT_VERSION "0.7.0-1"
+
+/* Compile as fixed-point */
+/* #undef FIXED_POINT */
+
+/* Compile as floating-point */
+#define FLOATING_POINT
+
+/* Make use of alloca */
+/* #undef USE_ALLOCA */
+#define USE_ALLOCA 1 /* disable this when using SSE */
+
+/* Define to equivalent of C99 restrict keyword, or to nothing if this is not
+ supported. Do not define if restrict is supported directly. */
+#define restrict /* __restrict */
+
+// Microsoft version of 'inline'
+#define inline __inline
+
return intgr ;
}
-#else \r
-#define float2int \r
-#endif \r
+#else
+#define float2int
+#endif
#else
-#include <os.h>\r
+#include <os.h>
-/* shout.h\r
- *\r
- * API for libshout, the streaming library for icecast\r
- *\r
- * Copyright (C) 2002-2003 the Icecast team <team@icecast.org>\r
- *\r
- * This library is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU Library General Public\r
- * License as published by the Free Software Foundation; either\r
- * version 2 of the License, or (at your option) any later version.\r
- *\r
- * This library is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
- * Library General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Library General Public\r
- * License along with this library; if not, write to the Free\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
- */\r
-#ifndef __LIBSHOUT_SHOUT_H__\r
-#define __LIBSHOUT_SHOUT_H__\r
-\r
-#include <sys/types.h>\r
-#ifdef WIN32\r
-#include <os.h>\r
-# ifdef _MSC_VER\r
-# undef inline\r
-# define inline __inline\r
-#if (_MSC_VER >= 1400) // VC8+\r
-#ifndef _CRT_SECURE_NO_DEPRECATE\r
-#define _CRT_SECURE_NO_DEPRECATE\r
-#endif\r
-#ifndef _CRT_NONSTDC_NO_DEPRECATE\r
-#define _CRT_NONSTDC_NO_DEPRECATE\r
-#endif\r
-#endif // VC8+\r
-# endif\r
-#ifndef __MINGW32__\r
-#define va_copy(ap1, ap2) memcpy(&ap1, &ap2, sizeof(va_list))\r
-#endif\r
-\r
-#endif\r
-\r
-#define SHOUTERR_SUCCESS (0)\r
-#define SHOUTERR_INSANE (-1)\r
-#define SHOUTERR_NOCONNECT (-2)\r
-#define SHOUTERR_NOLOGIN (-3)\r
-#define SHOUTERR_SOCKET (-4)\r
-#define SHOUTERR_MALLOC (-5)\r
-#define SHOUTERR_METADATA (-6)\r
-#define SHOUTERR_CONNECTED (-7)\r
-#define SHOUTERR_UNCONNECTED (-8)\r
-#define SHOUTERR_UNSUPPORTED (-9)\r
-\r
-#define SHOUTERR_BUSY (-10)\r
-\r
-#define SHOUT_FORMAT_OGG (0)\r
-#define SHOUT_FORMAT_MP3 (1)\r
-/* backward-compatibility alias */\r
-#define SHOUT_FORMAT_VORBIS SHOUT_FORMAT_OGG\r
-\r
-#define SHOUT_PROTOCOL_HTTP (0)\r
-#define SHOUT_PROTOCOL_XAUDIOCAST (1)\r
-#define SHOUT_PROTOCOL_ICY (2)\r
-\r
-#define SHOUT_AI_BITRATE "bitrate"\r
-#define SHOUT_AI_SAMPLERATE "samplerate"\r
-#define SHOUT_AI_CHANNELS "channels"\r
-#define SHOUT_AI_QUALITY "quality"\r
-\r
-typedef struct shout shout_t;\r
-typedef struct _util_dict shout_metadata_t;\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-/* initializes the shout library. Must be called before anything else */\r
-void shout_init(void);\r
-\r
-/* shuts down the shout library, deallocating any global storage. Don't call\r
- * anything afterwards */\r
-void shout_shutdown(void);\r
-\r
-/* returns a static version string. Non-null parameters will be set to the\r
- * value of the library major, minor, and patch levels, respectively */\r
-const char *shout_version(int *major, int *minor, int *patch);\r
-\r
-/* Allocates and sets up a new shout_t. Returns NULL if it can't get enough\r
- * memory. The returns shout_t must be disposed of with shout_free. */\r
-shout_t *shout_new(void);\r
-\r
-/* Free all memory allocated by a shout_t */\r
-void shout_free(shout_t *self);\r
-\r
-/* Returns a statically allocated string describing the last shout error\r
- * to occur. Only valid until the next libshout call on this shout_t */\r
-const char *shout_get_error(shout_t *self);\r
-\r
-/* Return the error code (e.g. SHOUTERR_SOCKET) for this shout instance */\r
-int shout_get_errno(shout_t *self);\r
-\r
-/* returns SHOUTERR_CONNECTED or SHOUTERR_UNCONNECTED */\r
-int shout_get_connected(shout_t *self);\r
-\r
-/* Parameter manipulation functions. libshout makes copies of all parameters,\r
- * the caller may free its copies after giving them to libshout. May return\r
- * SHOUTERR_MALLOC */\r
-\r
-int shout_set_host(shout_t *self, const char *host);\r
-const char *shout_get_host(shout_t *self);\r
-\r
-int shout_set_port(shout_t *self, unsigned short port);\r
-unsigned short shout_get_port(shout_t *self);\r
-\r
-int shout_set_password(shout_t *, const char *password);\r
-const char *shout_get_password(shout_t *self);\r
-\r
-int shout_set_mount(shout_t *self, const char *mount);\r
-const char *shout_get_mount(shout_t *self);\r
-\r
-int shout_set_name(shout_t *self, const char *name);\r
-const char *shout_get_name(shout_t *self);\r
-\r
-int shout_set_url(shout_t *self, const char *url);\r
-const char *shout_get_url(shout_t *self);\r
-\r
-int shout_set_genre(shout_t *self, const char *genre);\r
-const char *shout_get_genre(shout_t *self);\r
-\r
-int shout_set_user(shout_t *self, const char *username);\r
-const char *shout_get_user(shout_t *self);\r
-\r
-int shout_set_agent(shout_t *self, const char *username);\r
-const char *shout_get_agent(shout_t *self);\r
-\r
-int shout_set_description(shout_t *self, const char *description);\r
-const char *shout_get_description(shout_t *self);\r
-\r
-int shout_set_dumpfile(shout_t *self, const char *dumpfile);\r
-const char *shout_get_dumpfile(shout_t *self);\r
-\r
-int shout_set_audio_info(shout_t *self, const char *name, const char *value);\r
-const char *shout_get_audio_info(shout_t *self, const char *name);\r
-\r
-int shout_set_public(shout_t *self, unsigned int make_public);\r
-unsigned int shout_get_public(shout_t *self);\r
-\r
-/* takes a SHOUT_FORMAT_xxxx argument */\r
-int shout_set_format(shout_t *self, unsigned int format);\r
-unsigned int shout_get_format(shout_t *self);\r
-\r
-/* takes a SHOUT_PROTOCOL_xxxxx argument */\r
-int shout_set_protocol(shout_t *self, unsigned int protocol);\r
-unsigned int shout_get_protocol(shout_t *self);\r
-\r
-/* Instructs libshout to use nonblocking I/O. Must be called before\r
- * shout_open (no switching back and forth midstream at the moment). */\r
-int shout_set_nonblocking(shout_t* self, unsigned int nonblocking);\r
-unsigned int shout_get_nonblocking(shout_t *self);\r
-\r
-/* Opens a connection to the server. All parameters must already be set */\r
-int shout_open(shout_t *self);\r
-\r
-/* Closes a connection to the server */\r
-int shout_close(shout_t *self);\r
-\r
-/* Send data to the server, parsing it for format specific timing info */\r
-int shout_send(shout_t *self, const unsigned char *data, size_t len);\r
-\r
-/* Send unparsed data to the server. Do not use this unless you know\r
- * what you are doing. \r
- * Returns the number of bytes written, or < 0 on error.\r
- */\r
-ssize_t shout_send_raw(shout_t *self, const unsigned char *data, size_t len);\r
-\r
-/* return the number of bytes currently on the write queue (only makes sense in\r
- * nonblocking mode). */\r
-ssize_t shout_queuelen(shout_t *self);\r
- \r
-/* Puts caller to sleep until it is time to send more data to the server */\r
-void shout_sync(shout_t *self);\r
-\r
-/* Amount of time in ms caller should wait before sending again */\r
-int shout_delay(shout_t *self);\r
-\r
-/* Sets MP3 metadata.\r
- * Returns:\r
- * SHOUTERR_SUCCESS\r
- * SHOUTERR_UNSUPPORTED if format isn't MP3\r
- * SHOUTERR_MALLOC\r
- * SHOUTERR_INSANE\r
- * SHOUTERR_NOCONNECT\r
- * SHOUTERR_SOCKET\r
- */\r
-int shout_set_metadata(shout_t *self, shout_metadata_t *metadata);\r
-\r
-/* Allocates a new metadata structure. Must be freed by shout_metadata_free. */\r
-shout_metadata_t *shout_metadata_new(void);\r
-\r
-/* Free resources allocated by shout_metadata_t */\r
-void shout_metadata_free(shout_metadata_t *self);\r
-\r
-/* Add a parameter to the metadata structure.\r
- * Returns:\r
- * SHOUTERR_SUCCESS on success\r
- * SHOUTERR_INSANE if self isn't a valid shout_metadata_t* or name is null\r
- * SHOUTERR_MALLOC if memory can't be allocated */\r
-int shout_metadata_add(shout_metadata_t *self, const char *name, const char *value);\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-/* --- Compiled features --- */\r
-\r
-#define SHOUT_THREADSAFE @SHOUT_THREADSAFE@\r
-\r
-#endif /* __LIBSHOUT_SHOUT_H__ */\r
+/* shout.h
+ *
+ * API for libshout, the streaming library for icecast
+ *
+ * Copyright (C) 2002-2003 the Icecast team <team@icecast.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef __LIBSHOUT_SHOUT_H__
+#define __LIBSHOUT_SHOUT_H__
+
+#include <sys/types.h>
+#ifdef WIN32
+#include <os.h>
+# ifdef _MSC_VER
+# undef inline
+# define inline __inline
+#if (_MSC_VER >= 1400) // VC8+
+#ifndef _CRT_SECURE_NO_DEPRECATE
+#define _CRT_SECURE_NO_DEPRECATE
+#endif
+#ifndef _CRT_NONSTDC_NO_DEPRECATE
+#define _CRT_NONSTDC_NO_DEPRECATE
+#endif
+#endif // VC8+
+# endif
+#ifndef __MINGW32__
+#define va_copy(ap1, ap2) memcpy(&ap1, &ap2, sizeof(va_list))
+#endif
+
+#endif
+
+#define SHOUTERR_SUCCESS (0)
+#define SHOUTERR_INSANE (-1)
+#define SHOUTERR_NOCONNECT (-2)
+#define SHOUTERR_NOLOGIN (-3)
+#define SHOUTERR_SOCKET (-4)
+#define SHOUTERR_MALLOC (-5)
+#define SHOUTERR_METADATA (-6)
+#define SHOUTERR_CONNECTED (-7)
+#define SHOUTERR_UNCONNECTED (-8)
+#define SHOUTERR_UNSUPPORTED (-9)
+
+#define SHOUTERR_BUSY (-10)
+
+#define SHOUT_FORMAT_OGG (0)
+#define SHOUT_FORMAT_MP3 (1)
+/* backward-compatibility alias */
+#define SHOUT_FORMAT_VORBIS SHOUT_FORMAT_OGG
+
+#define SHOUT_PROTOCOL_HTTP (0)
+#define SHOUT_PROTOCOL_XAUDIOCAST (1)
+#define SHOUT_PROTOCOL_ICY (2)
+
+#define SHOUT_AI_BITRATE "bitrate"
+#define SHOUT_AI_SAMPLERATE "samplerate"
+#define SHOUT_AI_CHANNELS "channels"
+#define SHOUT_AI_QUALITY "quality"
+
+typedef struct shout shout_t;
+typedef struct _util_dict shout_metadata_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* initializes the shout library. Must be called before anything else */
+void shout_init(void);
+
+/* shuts down the shout library, deallocating any global storage. Don't call
+ * anything afterwards */
+void shout_shutdown(void);
+
+/* returns a static version string. Non-null parameters will be set to the
+ * value of the library major, minor, and patch levels, respectively */
+const char *shout_version(int *major, int *minor, int *patch);
+
+/* Allocates and sets up a new shout_t. Returns NULL if it can't get enough
+ * memory. The returns shout_t must be disposed of with shout_free. */
+shout_t *shout_new(void);
+
+/* Free all memory allocated by a shout_t */
+void shout_free(shout_t *self);
+
+/* Returns a statically allocated string describing the last shout error
+ * to occur. Only valid until the next libshout call on this shout_t */
+const char *shout_get_error(shout_t *self);
+
+/* Return the error code (e.g. SHOUTERR_SOCKET) for this shout instance */
+int shout_get_errno(shout_t *self);
+
+/* returns SHOUTERR_CONNECTED or SHOUTERR_UNCONNECTED */
+int shout_get_connected(shout_t *self);
+
+/* Parameter manipulation functions. libshout makes copies of all parameters,
+ * the caller may free its copies after giving them to libshout. May return
+ * SHOUTERR_MALLOC */
+
+int shout_set_host(shout_t *self, const char *host);
+const char *shout_get_host(shout_t *self);
+
+int shout_set_port(shout_t *self, unsigned short port);
+unsigned short shout_get_port(shout_t *self);
+
+int shout_set_password(shout_t *, const char *password);
+const char *shout_get_password(shout_t *self);
+
+int shout_set_mount(shout_t *self, const char *mount);
+const char *shout_get_mount(shout_t *self);
+
+int shout_set_name(shout_t *self, const char *name);
+const char *shout_get_name(shout_t *self);
+
+int shout_set_url(shout_t *self, const char *url);
+const char *shout_get_url(shout_t *self);
+
+int shout_set_genre(shout_t *self, const char *genre);
+const char *shout_get_genre(shout_t *self);
+
+int shout_set_user(shout_t *self, const char *username);
+const char *shout_get_user(shout_t *self);
+
+int shout_set_agent(shout_t *self, const char *username);
+const char *shout_get_agent(shout_t *self);
+
+int shout_set_description(shout_t *self, const char *description);
+const char *shout_get_description(shout_t *self);
+
+int shout_set_dumpfile(shout_t *self, const char *dumpfile);
+const char *shout_get_dumpfile(shout_t *self);
+
+int shout_set_audio_info(shout_t *self, const char *name, const char *value);
+const char *shout_get_audio_info(shout_t *self, const char *name);
+
+int shout_set_public(shout_t *self, unsigned int make_public);
+unsigned int shout_get_public(shout_t *self);
+
+/* takes a SHOUT_FORMAT_xxxx argument */
+int shout_set_format(shout_t *self, unsigned int format);
+unsigned int shout_get_format(shout_t *self);
+
+/* takes a SHOUT_PROTOCOL_xxxxx argument */
+int shout_set_protocol(shout_t *self, unsigned int protocol);
+unsigned int shout_get_protocol(shout_t *self);
+
+/* Instructs libshout to use nonblocking I/O. Must be called before
+ * shout_open (no switching back and forth midstream at the moment). */
+int shout_set_nonblocking(shout_t* self, unsigned int nonblocking);
+unsigned int shout_get_nonblocking(shout_t *self);
+
+/* Opens a connection to the server. All parameters must already be set */
+int shout_open(shout_t *self);
+
+/* Closes a connection to the server */
+int shout_close(shout_t *self);
+
+/* Send data to the server, parsing it for format specific timing info */
+int shout_send(shout_t *self, const unsigned char *data, size_t len);
+
+/* Send unparsed data to the server. Do not use this unless you know
+ * what you are doing.
+ * Returns the number of bytes written, or < 0 on error.
+ */
+ssize_t shout_send_raw(shout_t *self, const unsigned char *data, size_t len);
+
+/* return the number of bytes currently on the write queue (only makes sense in
+ * nonblocking mode). */
+ssize_t shout_queuelen(shout_t *self);
+
+/* Puts caller to sleep until it is time to send more data to the server */
+void shout_sync(shout_t *self);
+
+/* Amount of time in ms caller should wait before sending again */
+int shout_delay(shout_t *self);
+
+/* Sets MP3 metadata.
+ * Returns:
+ * SHOUTERR_SUCCESS
+ * SHOUTERR_UNSUPPORTED if format isn't MP3
+ * SHOUTERR_MALLOC
+ * SHOUTERR_INSANE
+ * SHOUTERR_NOCONNECT
+ * SHOUTERR_SOCKET
+ */
+int shout_set_metadata(shout_t *self, shout_metadata_t *metadata);
+
+/* Allocates a new metadata structure. Must be freed by shout_metadata_free. */
+shout_metadata_t *shout_metadata_new(void);
+
+/* Free resources allocated by shout_metadata_t */
+void shout_metadata_free(shout_metadata_t *self);
+
+/* Add a parameter to the metadata structure.
+ * Returns:
+ * SHOUTERR_SUCCESS on success
+ * SHOUTERR_INSANE if self isn't a valid shout_metadata_t* or name is null
+ * SHOUTERR_MALLOC if memory can't be allocated */
+int shout_metadata_add(shout_metadata_t *self, const char *name, const char *value);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* --- Compiled features --- */
+
+#define SHOUT_THREADSAFE @SHOUT_THREADSAFE@
+
+#endif /* __LIBSHOUT_SHOUT_H__ */
-#ifndef MK1MF_BUILD\r
- /* auto-generated by Configure for crypto/cversion.c:\r
- * for Unix builds, crypto/Makefile.ssl generates functional definitions;\r
- * Windows builds (and other mk1mf builds) compile cversion.c with\r
- * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */\r
- #error "Windows builds (PLATFORM=VC-WIN32) use mk1mf.pl-created Makefiles"\r
-#endif\r
-#ifdef MK1MF_PLATFORM_VC_WIN32\r
- /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */\r
- #define CFLAGS "cl /MD /Ox /O2 /Ob2 -DOPENSSL_THREADS -DDSO_WIN32 -W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_STATIC_ENGINE "\r
- #define PLATFORM "VC-WIN32"\r
- #define DATE "Sun Jun 6 23:40:23 2010"\r
-#endif\r
+#ifndef MK1MF_BUILD
+ /* auto-generated by Configure for crypto/cversion.c:
+ * for Unix builds, crypto/Makefile.ssl generates functional definitions;
+ * Windows builds (and other mk1mf builds) compile cversion.c with
+ * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
+ #error "Windows builds (PLATFORM=VC-WIN32) use mk1mf.pl-created Makefiles"
+#endif
+#ifdef MK1MF_PLATFORM_VC_WIN32
+ /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
+ #define CFLAGS "cl /MD /Ox /O2 /Ob2 -DOPENSSL_THREADS -DDSO_WIN32 -W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_STATIC_ENGINE "
+ #define PLATFORM "VC-WIN32"
+ #define DATE "Sun Jun 6 23:40:23 2010"
+#endif
-/* opensslconf.h */\r
-/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\r
-\r
-/* OpenSSL was configured with the following options: */\r
-#ifndef OPENSSL_SYSNAME_WIN32\r
-# define OPENSSL_SYSNAME_WIN32\r
-#endif\r
-#ifndef OPENSSL_DOING_MAKEDEPEND\r
-\r
-\r
-#ifndef OPENSSL_NO_GMP\r
-# define OPENSSL_NO_GMP\r
-#endif\r
-#ifndef OPENSSL_NO_JPAKE\r
-# define OPENSSL_NO_JPAKE\r
-#endif\r
-#ifndef OPENSSL_NO_KRB5\r
-# define OPENSSL_NO_KRB5\r
-#endif\r
-#ifndef OPENSSL_NO_MD2\r
-# define OPENSSL_NO_MD2\r
-#endif\r
-#ifndef OPENSSL_NO_RC5\r
-# define OPENSSL_NO_RC5\r
-#endif\r
-#ifndef OPENSSL_NO_RFC3779\r
-# define OPENSSL_NO_RFC3779\r
-#endif\r
-#ifndef OPENSSL_NO_STORE\r
-# define OPENSSL_NO_STORE\r
-#endif\r
-\r
-#endif /* OPENSSL_DOING_MAKEDEPEND */\r
-\r
-#ifndef OPENSSL_THREADS\r
-# define OPENSSL_THREADS\r
-#endif\r
-#ifndef OPENSSL_NO_ASM\r
-# define OPENSSL_NO_ASM\r
-#endif\r
-\r
-/* The OPENSSL_NO_* macros are also defined as NO_* if the application\r
- asks for it. This is a transient feature that is provided for those\r
- who haven't had the time to do the appropriate changes in their\r
- applications. */\r
-#ifdef OPENSSL_ALGORITHM_DEFINES\r
-# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP)\r
-# define NO_GMP\r
-# endif\r
-# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)\r
-# define NO_JPAKE\r
-# endif\r
-# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)\r
-# define NO_KRB5\r
-# endif\r
-# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)\r
-# define NO_MD2\r
-# endif\r
-# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5)\r
-# define NO_RC5\r
-# endif\r
-# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779)\r
-# define NO_RFC3779\r
-# endif\r
-# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)\r
-# define NO_STORE\r
-# endif\r
-#endif\r
-\r
-/* crypto/opensslconf.h.in */\r
-\r
-/* Generate 80386 code? */\r
-#undef I386_ONLY\r
-\r
-#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */\r
-#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)\r
-#define ENGINESDIR "/usr/local/ssl/lib/engines"\r
-#define OPENSSLDIR "/usr/local/ssl"\r
-#endif\r
-#endif\r
-\r
-#undef OPENSSL_UNISTD\r
-#define OPENSSL_UNISTD <unistd.h>\r
-\r
-#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\r
-#define OPENSSL_EXPORT_VAR_AS_FUNCTION\r
-\r
-#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)\r
-#define IDEA_INT unsigned int\r
-#endif\r
-\r
-#if defined(HEADER_MD2_H) && !defined(MD2_INT)\r
-#define MD2_INT unsigned int\r
-#endif\r
-\r
-#if defined(HEADER_RC2_H) && !defined(RC2_INT)\r
-/* I need to put in a mod for the alpha - eay */\r
-#define RC2_INT unsigned int\r
-#endif\r
-\r
-#if defined(HEADER_RC4_H)\r
-#if !defined(RC4_INT)\r
-/* using int types make the structure larger but make the code faster\r
- * on most boxes I have tested - up to %20 faster. */\r
-/*\r
- * I don't know what does "most" mean, but declaring "int" is a must on:\r
- * - Intel P6 because partial register stalls are very expensive;\r
- * - elder Alpha because it lacks byte load/store instructions;\r
- */\r
-#define RC4_INT unsigned int\r
-#endif\r
-#if !defined(RC4_CHUNK)\r
-/*\r
- * This enables code handling data aligned at natural CPU word\r
- * boundary. See crypto/rc4/rc4_enc.c for further details.\r
- */\r
-#undef RC4_CHUNK\r
-#endif\r
-#endif\r
-\r
-#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)\r
-/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a\r
- * %20 speed up (longs are 8 bytes, int's are 4). */\r
-#ifndef DES_LONG\r
-#define DES_LONG unsigned long\r
-#endif\r
-#endif\r
-\r
-#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)\r
-#define CONFIG_HEADER_BN_H\r
-#define BN_LLONG\r
-\r
-/* Should we define BN_DIV2W here? */\r
-\r
-/* Only one for the following should be defined */\r
-#undef SIXTY_FOUR_BIT_LONG\r
-#undef SIXTY_FOUR_BIT\r
-#define THIRTY_TWO_BIT\r
-#endif\r
-\r
-#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)\r
-#define CONFIG_HEADER_RC4_LOCL_H\r
-/* if this is defined data[i] is used instead of *data, this is a %20\r
- * speedup on x86 */\r
-#define RC4_INDEX\r
-#endif\r
-\r
-#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)\r
-#define CONFIG_HEADER_BF_LOCL_H\r
-#undef BF_PTR\r
-#endif /* HEADER_BF_LOCL_H */\r
-\r
-#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)\r
-#define CONFIG_HEADER_DES_LOCL_H\r
-#ifndef DES_DEFAULT_OPTIONS\r
-/* the following is tweaked from a config script, that is why it is a\r
- * protected undef/define */\r
-#ifndef DES_PTR\r
-#undef DES_PTR\r
-#endif\r
-\r
-/* This helps C compiler generate the correct code for multiple functional\r
- * units. It reduces register dependancies at the expense of 2 more\r
- * registers */\r
-#ifndef DES_RISC1\r
-#undef DES_RISC1\r
-#endif\r
-\r
-#ifndef DES_RISC2\r
-#undef DES_RISC2\r
-#endif\r
-\r
-#if defined(DES_RISC1) && defined(DES_RISC2)\r
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!\r
-#endif\r
-\r
-/* Unroll the inner loop, this sometimes helps, sometimes hinders.\r
- * Very mucy CPU dependant */\r
-#ifndef DES_UNROLL\r
-#undef DES_UNROLL\r
-#endif\r
-\r
-/* These default values were supplied by\r
- * Peter Gutman <pgut001@cs.auckland.ac.nz>\r
- * They are only used if nothing else has been defined */\r
-#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)\r
-/* Special defines which change the way the code is built depending on the\r
- CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find\r
- even newer MIPS CPU's, but at the moment one size fits all for\r
- optimization options. Older Sparc's work better with only UNROLL, but\r
- there's no way to tell at compile time what it is you're running on */\r
- \r
-#if defined( sun ) /* Newer Sparc's */\r
-# define DES_PTR\r
-# define DES_RISC1\r
-# define DES_UNROLL\r
-#elif defined( __ultrix ) /* Older MIPS */\r
-# define DES_PTR\r
-# define DES_RISC2\r
-# define DES_UNROLL\r
-#elif defined( __osf1__ ) /* Alpha */\r
-# define DES_PTR\r
-# define DES_RISC2\r
-#elif defined ( _AIX ) /* RS6000 */\r
- /* Unknown */\r
-#elif defined( __hpux ) /* HP-PA */\r
- /* Unknown */\r
-#elif defined( __aux ) /* 68K */\r
- /* Unknown */\r
-#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */\r
-# define DES_UNROLL\r
-#elif defined( __sgi ) /* Newer MIPS */\r
-# define DES_PTR\r
-# define DES_RISC2\r
-# define DES_UNROLL\r
-#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */\r
-# define DES_PTR\r
-# define DES_RISC1\r
-# define DES_UNROLL\r
-#endif /* Systems-specific speed defines */\r
-#endif\r
-\r
-#endif /* DES_DEFAULT_OPTIONS */\r
-#endif /* HEADER_DES_LOCL_H */\r
+/* opensslconf.h */
+/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
+
+/* OpenSSL was configured with the following options: */
+#ifndef OPENSSL_SYSNAME_WIN32
+# define OPENSSL_SYSNAME_WIN32
+#endif
+#ifndef OPENSSL_DOING_MAKEDEPEND
+
+
+#ifndef OPENSSL_NO_GMP
+# define OPENSSL_NO_GMP
+#endif
+#ifndef OPENSSL_NO_JPAKE
+# define OPENSSL_NO_JPAKE
+#endif
+#ifndef OPENSSL_NO_KRB5
+# define OPENSSL_NO_KRB5
+#endif
+#ifndef OPENSSL_NO_MD2
+# define OPENSSL_NO_MD2
+#endif
+#ifndef OPENSSL_NO_RC5
+# define OPENSSL_NO_RC5
+#endif
+#ifndef OPENSSL_NO_RFC3779
+# define OPENSSL_NO_RFC3779
+#endif
+#ifndef OPENSSL_NO_STORE
+# define OPENSSL_NO_STORE
+#endif
+
+#endif /* OPENSSL_DOING_MAKEDEPEND */
+
+#ifndef OPENSSL_THREADS
+# define OPENSSL_THREADS
+#endif
+#ifndef OPENSSL_NO_ASM
+# define OPENSSL_NO_ASM
+#endif
+
+/* The OPENSSL_NO_* macros are also defined as NO_* if the application
+ asks for it. This is a transient feature that is provided for those
+ who haven't had the time to do the appropriate changes in their
+ applications. */
+#ifdef OPENSSL_ALGORITHM_DEFINES
+# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP)
+# define NO_GMP
+# endif
+# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)
+# define NO_JPAKE
+# endif
+# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
+# define NO_KRB5
+# endif
+# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
+# define NO_MD2
+# endif
+# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5)
+# define NO_RC5
+# endif
+# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779)
+# define NO_RFC3779
+# endif
+# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)
+# define NO_STORE
+# endif
+#endif
+
+/* crypto/opensslconf.h.in */
+
+/* Generate 80386 code? */
+#undef I386_ONLY
+
+#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
+#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
+#define ENGINESDIR "/usr/local/ssl/lib/engines"
+#define OPENSSLDIR "/usr/local/ssl"
+#endif
+#endif
+
+#undef OPENSSL_UNISTD
+#define OPENSSL_UNISTD <unistd.h>
+
+#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
+#define OPENSSL_EXPORT_VAR_AS_FUNCTION
+
+#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
+#define IDEA_INT unsigned int
+#endif
+
+#if defined(HEADER_MD2_H) && !defined(MD2_INT)
+#define MD2_INT unsigned int
+#endif
+
+#if defined(HEADER_RC2_H) && !defined(RC2_INT)
+/* I need to put in a mod for the alpha - eay */
+#define RC2_INT unsigned int
+#endif
+
+#if defined(HEADER_RC4_H)
+#if !defined(RC4_INT)
+/* using int types make the structure larger but make the code faster
+ * on most boxes I have tested - up to %20 faster. */
+/*
+ * I don't know what does "most" mean, but declaring "int" is a must on:
+ * - Intel P6 because partial register stalls are very expensive;
+ * - elder Alpha because it lacks byte load/store instructions;
+ */
+#define RC4_INT unsigned int
+#endif
+#if !defined(RC4_CHUNK)
+/*
+ * This enables code handling data aligned at natural CPU word
+ * boundary. See crypto/rc4/rc4_enc.c for further details.
+ */
+#undef RC4_CHUNK
+#endif
+#endif
+
+#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)
+/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
+ * %20 speed up (longs are 8 bytes, int's are 4). */
+#ifndef DES_LONG
+#define DES_LONG unsigned long
+#endif
+#endif
+
+#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
+#define CONFIG_HEADER_BN_H
+#define BN_LLONG
+
+/* Should we define BN_DIV2W here? */
+
+/* Only one for the following should be defined */
+#undef SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT
+#define THIRTY_TWO_BIT
+#endif
+
+#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
+#define CONFIG_HEADER_RC4_LOCL_H
+/* if this is defined data[i] is used instead of *data, this is a %20
+ * speedup on x86 */
+#define RC4_INDEX
+#endif
+
+#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
+#define CONFIG_HEADER_BF_LOCL_H
+#undef BF_PTR
+#endif /* HEADER_BF_LOCL_H */
+
+#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
+#define CONFIG_HEADER_DES_LOCL_H
+#ifndef DES_DEFAULT_OPTIONS
+/* the following is tweaked from a config script, that is why it is a
+ * protected undef/define */
+#ifndef DES_PTR
+#undef DES_PTR
+#endif
+
+/* This helps C compiler generate the correct code for multiple functional
+ * units. It reduces register dependancies at the expense of 2 more
+ * registers */
+#ifndef DES_RISC1
+#undef DES_RISC1
+#endif
+
+#ifndef DES_RISC2
+#undef DES_RISC2
+#endif
+
+#if defined(DES_RISC1) && defined(DES_RISC2)
+YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#endif
+
+/* Unroll the inner loop, this sometimes helps, sometimes hinders.
+ * Very mucy CPU dependant */
+#ifndef DES_UNROLL
+#undef DES_UNROLL
+#endif
+
+/* These default values were supplied by
+ * Peter Gutman <pgut001@cs.auckland.ac.nz>
+ * They are only used if nothing else has been defined */
+#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
+/* Special defines which change the way the code is built depending on the
+ CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
+ even newer MIPS CPU's, but at the moment one size fits all for
+ optimization options. Older Sparc's work better with only UNROLL, but
+ there's no way to tell at compile time what it is you're running on */
+
+#if defined( sun ) /* Newer Sparc's */
+# define DES_PTR
+# define DES_RISC1
+# define DES_UNROLL
+#elif defined( __ultrix ) /* Older MIPS */
+# define DES_PTR
+# define DES_RISC2
+# define DES_UNROLL
+#elif defined( __osf1__ ) /* Alpha */
+# define DES_PTR
+# define DES_RISC2
+#elif defined ( _AIX ) /* RS6000 */
+ /* Unknown */
+#elif defined( __hpux ) /* HP-PA */
+ /* Unknown */
+#elif defined( __aux ) /* 68K */
+ /* Unknown */
+#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
+# define DES_UNROLL
+#elif defined( __sgi ) /* Newer MIPS */
+# define DES_PTR
+# define DES_RISC2
+# define DES_UNROLL
+#elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
+# define DES_PTR
+# define DES_RISC1
+# define DES_UNROLL
+#endif /* Systems-specific speed defines */
+#endif
+
+#endif /* DES_DEFAULT_OPTIONS */
+#endif /* HEADER_DES_LOCL_H */
-Current information is in ReadMeWin32.txt.\r
-\r
-What follows is previous contents of that file.\r
-\r
-\r
-\r
-Markus Hoffrogge:\r
-\r
-Compilation for WIN32 is possible now again for version 1.6.10 - non\r
-CPP parts only. Project files have been tested under VicualStudio\r
-6.0. Build project all - this will build all other projects. CPP\r
-code is not compiled and adopted right now.\r
-\r
-This release excludes the option to compile an "http.sys" version of\r
-an XML-RPC server. If you do wish to build in the http.sys server, set\r
-the MUST_BUILD_HTTP_SYS_SERVER to 1 in the transport_config_win32.h\r
-and/or the transport_config.h file. Successful conpilation requires\r
-installation of the Microsoft Platform SDK for Windows XP SP2 (or\r
-later) to get the latest header and link libraries required to support\r
-this functionality. After installation, be sure to properly register\r
-the directories as documented in the Platform SDK help file topic\r
-"Installing the Platform SDK with Visual Studio". Download the\r
-Platform SDK from:\r
-http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
-\r
-To create the three headers required for Win32 WinInet compilation,\r
-run the ConfigureWin32.bat found in the Windows directory. If you\r
-wish to alter the transports that are built to include curl or libwww,\r
-adjust the preprocessor definitions at the top of the\r
-transport_config_win32.h and/or the transport_config.h files. See the\r
-file UsingCURLinWin32.txt for more information on using the curl\r
-transport.\r
-\r
-To compile, open the xmlrpc.dsw file in Visual Studio 6 or greater.\r
-The project will convert and work fine in Visual Studio 2003 as well -\r
-other versions of Visual Studio were not tested.\r
-\r
-NOTE: If you get an error while opening or converting the project\r
-files, it is likely due to using WinRar or similar to decompress the\r
-distribution tarball. You can use WinZip or another utility to\r
-correctly decompress the .tgz file.\r
-\r
-Suggested testing for evaluation of the library involves a few\r
-projects. Here is a quick getting started guide:\r
-\r
-1) Set the Active Project to query_meerkat and build it in release or\r
- debug modes. The dependent projects will be built automatically.\r
- In the project settings dialog, add the argument for what you wish\r
- to query meerkat for - "Windows" is a good query. Run the project.\r
- This will query the meerkat server for articles related to windows\r
- and output the results to the console.\r
-\r
-2) Set the Active Project to xmlrpc_sample_add_server and build it in\r
- release or debug modes. The dependent projects will be built\r
- automatically. In the project settings dialog, add the argument\r
- for the port to 8080. This will run the server sample which adds\r
- two numbers and returns a result. You should run this from a\r
- command prompt instead of through Visual Studio so you may run the\r
- sample client as well.\r
-\r
-3) Set the Active Project to xmlrpc_sample_add_sync_client or\r
- xmlrpc_sample_add_async_client and build it in release or debug\r
- modes. The dependent projects will be built automatically. This\r
- will run the client sample which submits two numbers to be added to\r
- the server application as described above and displays the result.\r
- Note that the client example comes in the sync and async varieties.\r
-\r
-Steven Bone\r
-July 27, 2005\r
-sbone@pobox.com\r
-\r
-WIN32 CHANGES\r
-\r
-Changes from the 1.02 release for Win32:\r
-\r
-1) Option to easily disable the http.sys server for those who do not\r
- need it or wish to download the Platform SDK.\r
-\r
-Changes from the 1.01 -> 1.02 release for Win32:\r
-\r
-1) Project files for gennmtab, xmlparse, and xmltok updated to include the\r
- path to the xmlrpc_config.h file.\r
-\r
-2) Bugfix for WinInet authentication.\r
-\r
-3) Supports xmlrpc_xportparms, xmlrpc_wininet_xportparms added\r
- *potential breaking change* - now by default we fail on invalid\r
- SSL certs, use the xmlrpc_wininet_xportparms option to enable old\r
- behavior.\r
-\r
-4) Added project file for xmlrpc_sample_auth_client\r
-\r
-5) Added project and src for a http.sys based xmlrpc-c server. See comments\r
- in the source files. This supports Windows XP SP2 and Windows Server\r
- 2003 and allows other http.sys based applications to bind to the same\r
- port. In Server 2003, IIS uses http.sys and thus the XML-RPC server\r
- can be run on the standard port 80 along with IIS. The sample also\r
- supports https and basic authentication. It tested OK with\r
- http://validator.xmlrpc.com/ Note that the Platform SDK headers and\r
- link libraries for Windows XP SP2 or newer are required to compile\r
- xmlrpc-c for this module. If you are not using this server, it is\r
- safe to exclude the xmlrpc_server_w32httpsys.c file from the xmlrpc\r
- project and these dependencies will not be required. You can get the\r
- latest platform SDK at\r
- http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
- Be sure after installation to choose the program to "register the PSDK\r
- directories with Visual Studio" so the newer headers are found.\r
-\r
-6) Better support for libcurl. Updated project files,\r
- transport_config_win32.h, added documentation UsingCURLinWin32.txt.\r
-\r
-Changes from the 1.00 -> 1.01 release for Win32:\r
-\r
-1) Project files now reflect static linking for the expat XML library.\r
-\r
-2) Example projects were created/updated to keep them in sync with the\r
- distribution. The project files were moved into the Windows\r
- directory\r
-\r
-3) Projects for the rpc and cpp tests were created. The\r
- xmlrpc_win32_config.h defines the directory for the test files relative\r
- to the output directory\r
-\r
-4) Major refactoring of the Wininet Transport.\r
-\r
+Current information is in ReadMeWin32.txt.
+
+What follows is previous contents of that file.
+
+
+
+Markus Hoffrogge:
+
+Compilation for WIN32 is possible now again for version 1.6.10 - non
+CPP parts only. Project files have been tested under VicualStudio
+6.0. Build project all - this will build all other projects. CPP
+code is not compiled and adopted right now.
+
+This release excludes the option to compile an "http.sys" version of
+an XML-RPC server. If you do wish to build in the http.sys server, set
+the MUST_BUILD_HTTP_SYS_SERVER to 1 in the transport_config_win32.h
+and/or the transport_config.h file. Successful conpilation requires
+installation of the Microsoft Platform SDK for Windows XP SP2 (or
+later) to get the latest header and link libraries required to support
+this functionality. After installation, be sure to properly register
+the directories as documented in the Platform SDK help file topic
+"Installing the Platform SDK with Visual Studio". Download the
+Platform SDK from:
+http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+
+To create the three headers required for Win32 WinInet compilation,
+run the ConfigureWin32.bat found in the Windows directory. If you
+wish to alter the transports that are built to include curl or libwww,
+adjust the preprocessor definitions at the top of the
+transport_config_win32.h and/or the transport_config.h files. See the
+file UsingCURLinWin32.txt for more information on using the curl
+transport.
+
+To compile, open the xmlrpc.dsw file in Visual Studio 6 or greater.
+The project will convert and work fine in Visual Studio 2003 as well -
+other versions of Visual Studio were not tested.
+
+NOTE: If you get an error while opening or converting the project
+files, it is likely due to using WinRar or similar to decompress the
+distribution tarball. You can use WinZip or another utility to
+correctly decompress the .tgz file.
+
+Suggested testing for evaluation of the library involves a few
+projects. Here is a quick getting started guide:
+
+1) Set the Active Project to query_meerkat and build it in release or
+ debug modes. The dependent projects will be built automatically.
+ In the project settings dialog, add the argument for what you wish
+ to query meerkat for - "Windows" is a good query. Run the project.
+ This will query the meerkat server for articles related to windows
+ and output the results to the console.
+
+2) Set the Active Project to xmlrpc_sample_add_server and build it in
+ release or debug modes. The dependent projects will be built
+ automatically. In the project settings dialog, add the argument
+ for the port to 8080. This will run the server sample which adds
+ two numbers and returns a result. You should run this from a
+ command prompt instead of through Visual Studio so you may run the
+ sample client as well.
+
+3) Set the Active Project to xmlrpc_sample_add_sync_client or
+ xmlrpc_sample_add_async_client and build it in release or debug
+ modes. The dependent projects will be built automatically. This
+ will run the client sample which submits two numbers to be added to
+ the server application as described above and displays the result.
+ Note that the client example comes in the sync and async varieties.
+
+Steven Bone
+July 27, 2005
+sbone@pobox.com
+
+WIN32 CHANGES
+
+Changes from the 1.02 release for Win32:
+
+1) Option to easily disable the http.sys server for those who do not
+ need it or wish to download the Platform SDK.
+
+Changes from the 1.01 -> 1.02 release for Win32:
+
+1) Project files for gennmtab, xmlparse, and xmltok updated to include the
+ path to the xmlrpc_config.h file.
+
+2) Bugfix for WinInet authentication.
+
+3) Supports xmlrpc_xportparms, xmlrpc_wininet_xportparms added
+ *potential breaking change* - now by default we fail on invalid
+ SSL certs, use the xmlrpc_wininet_xportparms option to enable old
+ behavior.
+
+4) Added project file for xmlrpc_sample_auth_client
+
+5) Added project and src for a http.sys based xmlrpc-c server. See comments
+ in the source files. This supports Windows XP SP2 and Windows Server
+ 2003 and allows other http.sys based applications to bind to the same
+ port. In Server 2003, IIS uses http.sys and thus the XML-RPC server
+ can be run on the standard port 80 along with IIS. The sample also
+ supports https and basic authentication. It tested OK with
+ http://validator.xmlrpc.com/ Note that the Platform SDK headers and
+ link libraries for Windows XP SP2 or newer are required to compile
+ xmlrpc-c for this module. If you are not using this server, it is
+ safe to exclude the xmlrpc_server_w32httpsys.c file from the xmlrpc
+ project and these dependencies will not be required. You can get the
+ latest platform SDK at
+ http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
+ Be sure after installation to choose the program to "register the PSDK
+ directories with Visual Studio" so the newer headers are found.
+
+6) Better support for libcurl. Updated project files,
+ transport_config_win32.h, added documentation UsingCURLinWin32.txt.
+
+Changes from the 1.00 -> 1.01 release for Win32:
+
+1) Project files now reflect static linking for the expat XML library.
+
+2) Example projects were created/updated to keep them in sync with the
+ distribution. The project files were moved into the Windows
+ directory
+
+3) Projects for the rpc and cpp tests were created. The
+ xmlrpc_win32_config.h defines the directory for the test files relative
+ to the output directory
+
+4) Major refactoring of the Wininet Transport.
+
-Background:\r
-\r
-Let\92s say you need to have a Xmlrpc-c client running as a service.\r
-In this situation you cannot use WinInet. Details of the restriction\r
-can be found on the libcurl website or various Microsoft KB articles.\r
-The alternative is to use libcurl. This document describes the steps\r
-required to use libcurl as your client XML transport mechanism.\r
-\r
-Overview:\r
-\r
-The default projects in Xmlrpc-c create standalone executables that do\r
-not require other DLL\92s (release mode). While the case can be made\r
-for this behavior pro and con, it is beyond this document to justify\r
-it. Therefore, we need to create static link libraries for libcurl\r
-that mimics this behavior. Once the link libraries are created, we\r
-can then add them (plus the requisite curl headers) into the Xmlrpc-c\r
-project. Finally, we enable the compilation of the curl transport\r
-file and tell Xmlrpc-c that we will be using curl. Lastly, we build\r
-and test the project.\r
-\r
-Steps to use CURL with Win32 Xmlrpc-c:\r
-\r
-1. Download the CURL source. In the \93include\94 folder of the\r
-CURL distribution, copy the curl directory to the \93lib\94\r
-directory of xmlrpc-c. When you are done with this step, you should\r
-have a curl.h file located in the directory xmlrpc-c\lib\curl\. The\r
-xmlrpc project looks in this relative path for the necessary headers.\r
-\r
-2. In the CURL distribution, lib directory, is a file called\r
-Makefile.vc6. Edit this file. The line starting with CCNODBG should\r
-be changed to:\r
-\r
-CCNODBG = cl.exe /MT /O2 /DNDEBUG\r
-\r
-The /MT option links with the Multithreaded non-dll version of the c\r
-runtime. If this change is not made, the project will not link, as\r
-this is the default setting for the Xmlrpc-c projects.\r
-\r
-3. Open a command prompt window and run the vcvars32.bat file in your\r
-Visual C++ distribution. If you are using Studio 2002 or 2003, use\r
-the \93Visual Studio Command Prompt\94 from the Start menu to open\r
-the console.\r
-\r
-4. Compile release and debug mode libraries. For the purposes of this\r
-tutorial, we are going to build only the curl library without ssl or\r
-zlib compression capability. In the command prompt, navigate to the\r
-curl\lib directory and execute the following commands:\r
-\r
-nmake -f Makefile.vc6 CFG=debug RTLIBCFG=static\r
-nmake -f Makefile.vc6 CFG=release RTLIBCFG=static\r
-\r
-5. The above step should have generated two static link libraries in\r
-the curl\lib directory: libcurl.lib and libcurld.lib. Copy these\r
-files into the root of the xmlrpc-c\lib\ directory. This step ends\r
-our involvement with the actual CURL distribution. The remainder of\r
-the steps are for Xmlrpc-c.\r
-\r
-6. Open the Xmlrpc-c Visual Studio workspace (Instructions for VC++ 6,\r
-other versions are slightly different). In File View, expand the\r
-xmlrpc project. Under "Source Files" there is an entry for\r
-xmlrpc_curl_transport.c This is not included in any build paths by\r
-default. To enable it for compilation, right click the file to change\r
-the settings. In the dropdown, select "All Configurations." Pick the\r
-General tab and uncheck the "Exclude File From Build" setting. Press\r
-OK to save your changes to the project.\r
-\r
-7. In the "Header Files" section of the xmlrpc project is a file\r
-called "transport_config.h". Edit this file to set the\r
-MUST_BUILD_CURL_CLIENT to 1, and if you wish to change the default\r
-transport to curl, change the XMLRPC_DEFAULT_TRANSPORT to "curl".\r
-\r
-8. Compile and test one or more of the sample client projects.\r
-\r
-USING MSVC8 - 2007/11/25\r
-========================\r
-\r
-This is for MSVC8, but most will apply to all version of Microsoft\r
-Visual Studio.\r
-\r
-Download the CURL source. Run the buildconf.bat to generate some\r
-additional files. This builds a 'dummy' hugehelp.c, but it can also\r
-be built using the src\mkhelp.pl Perl script. You may have to build\r
-you own VCPROJ file for CURL, if you want to use MSVC. It does\r
-provide a Makefile.vc6 as mentioned above.\r
-\r
-To build all the CURL library variations, use\r
-> nmake /nologo vc-all \r
-but note this will use the /MD[d] DLL runtime. Only by adding\r
-RTCFGLIB=static to each of the makefile commands will /MT[d] be\r
-used.\r
-\r
-Essentially, for building the static Debug or Release CURL libraries,\r
-it is all the sources in the curl\lib folder. Make sure you choose /MT\r
-and /MTd for the runtime, and build both using say the name libcurl.lib.\r
-\r
-When you have Debug\libcurl.lib and Release\libcurl.lib built, you\r
-are ready to build and link them with Xmlrpc-c.\r
-\r
-After running xmlrpc-c\Windows\configurewin32.bat, loading xmlrpc.dsw\r
-will convert all the projects to VCPROJ files. In the File View, in\r
-the xmlrpc project, in the properties of xmlrpc_curl_transport.c,\r
-change 'Exclude file from build' from 'yes' to 'no', for Debug\r
-and Release.\r
-\r
-In the 'Header Files' section, open the "transport_config.h" file,\r
-and change MUST_BUILD_CURL_CLIENT to 1, and the XMLRPC_DEFAULT_TRANSPORT\r
-to "curl", if desired.\r
-\r
-As usual, for each of the 'client' projects, and rpctest, in the properties,\r
-Linker section, you can add the library libcurl.lib on the Input tab, and\r
-the relative path to the library in the General tab to something like -\r
-..\..\curl\Debug and ..\..\curl\Release, or where ever you built or\r
-copied these static libraries too.\r
-\r
-Or you can adjust the Windows/curlink.h, to directly point to your\r
-respective Debug and Release static CURL libraries, either where you\r
-built them, or where you copied them too.\r
-\r
-Now, Xmlrpc-c should build using the CURL transport.\r
-\r
-Note, for the final linking, all RUNTIME libraries MUST be the SAME.\r
-A mixture of /MD and /MT will give big linkage problems. Any one project\r
-built with the alterate RUNTIME will show many items defined more than\r
-once. And of course, you can also NOT mix Debug with Release. That is\r
-/MDd with /MD, nor /MTd with /MT, or else there will be unresolved\r
-debug items.\r
-\r
-EOF\r
+Background:
+
+Let\92s say you need to have a Xmlrpc-c client running as a service.
+In this situation you cannot use WinInet. Details of the restriction
+can be found on the libcurl website or various Microsoft KB articles.
+The alternative is to use libcurl. This document describes the steps
+required to use libcurl as your client XML transport mechanism.
+
+Overview:
+
+The default projects in Xmlrpc-c create standalone executables that do
+not require other DLL\92s (release mode). While the case can be made
+for this behavior pro and con, it is beyond this document to justify
+it. Therefore, we need to create static link libraries for libcurl
+that mimics this behavior. Once the link libraries are created, we
+can then add them (plus the requisite curl headers) into the Xmlrpc-c
+project. Finally, we enable the compilation of the curl transport
+file and tell Xmlrpc-c that we will be using curl. Lastly, we build
+and test the project.
+
+Steps to use CURL with Win32 Xmlrpc-c:
+
+1. Download the CURL source. In the \93include\94 folder of the
+CURL distribution, copy the curl directory to the \93lib\94
+directory of xmlrpc-c. When you are done with this step, you should
+have a curl.h file located in the directory xmlrpc-c\lib\curl\. The
+xmlrpc project looks in this relative path for the necessary headers.
+
+2. In the CURL distribution, lib directory, is a file called
+Makefile.vc6. Edit this file. The line starting with CCNODBG should
+be changed to:
+
+CCNODBG = cl.exe /MT /O2 /DNDEBUG
+
+The /MT option links with the Multithreaded non-dll version of the c
+runtime. If this change is not made, the project will not link, as
+this is the default setting for the Xmlrpc-c projects.
+
+3. Open a command prompt window and run the vcvars32.bat file in your
+Visual C++ distribution. If you are using Studio 2002 or 2003, use
+the \93Visual Studio Command Prompt\94 from the Start menu to open
+the console.
+
+4. Compile release and debug mode libraries. For the purposes of this
+tutorial, we are going to build only the curl library without ssl or
+zlib compression capability. In the command prompt, navigate to the
+curl\lib directory and execute the following commands:
+
+nmake -f Makefile.vc6 CFG=debug RTLIBCFG=static
+nmake -f Makefile.vc6 CFG=release RTLIBCFG=static
+
+5. The above step should have generated two static link libraries in
+the curl\lib directory: libcurl.lib and libcurld.lib. Copy these
+files into the root of the xmlrpc-c\lib\ directory. This step ends
+our involvement with the actual CURL distribution. The remainder of
+the steps are for Xmlrpc-c.
+
+6. Open the Xmlrpc-c Visual Studio workspace (Instructions for VC++ 6,
+other versions are slightly different). In File View, expand the
+xmlrpc project. Under "Source Files" there is an entry for
+xmlrpc_curl_transport.c This is not included in any build paths by
+default. To enable it for compilation, right click the file to change
+the settings. In the dropdown, select "All Configurations." Pick the
+General tab and uncheck the "Exclude File From Build" setting. Press
+OK to save your changes to the project.
+
+7. In the "Header Files" section of the xmlrpc project is a file
+called "transport_config.h". Edit this file to set the
+MUST_BUILD_CURL_CLIENT to 1, and if you wish to change the default
+transport to curl, change the XMLRPC_DEFAULT_TRANSPORT to "curl".
+
+8. Compile and test one or more of the sample client projects.
+
+USING MSVC8 - 2007/11/25
+========================
+
+This is for MSVC8, but most will apply to all version of Microsoft
+Visual Studio.
+
+Download the CURL source. Run the buildconf.bat to generate some
+additional files. This builds a 'dummy' hugehelp.c, but it can also
+be built using the src\mkhelp.pl Perl script. You may have to build
+you own VCPROJ file for CURL, if you want to use MSVC. It does
+provide a Makefile.vc6 as mentioned above.
+
+To build all the CURL library variations, use
+> nmake /nologo vc-all
+but note this will use the /MD[d] DLL runtime. Only by adding
+RTCFGLIB=static to each of the makefile commands will /MT[d] be
+used.
+
+Essentially, for building the static Debug or Release CURL libraries,
+it is all the sources in the curl\lib folder. Make sure you choose /MT
+and /MTd for the runtime, and build both using say the name libcurl.lib.
+
+When you have Debug\libcurl.lib and Release\libcurl.lib built, you
+are ready to build and link them with Xmlrpc-c.
+
+After running xmlrpc-c\Windows\configurewin32.bat, loading xmlrpc.dsw
+will convert all the projects to VCPROJ files. In the File View, in
+the xmlrpc project, in the properties of xmlrpc_curl_transport.c,
+change 'Exclude file from build' from 'yes' to 'no', for Debug
+and Release.
+
+In the 'Header Files' section, open the "transport_config.h" file,
+and change MUST_BUILD_CURL_CLIENT to 1, and the XMLRPC_DEFAULT_TRANSPORT
+to "curl", if desired.
+
+As usual, for each of the 'client' projects, and rpctest, in the properties,
+Linker section, you can add the library libcurl.lib on the Input tab, and
+the relative path to the library in the General tab to something like -
+..\..\curl\Debug and ..\..\curl\Release, or where ever you built or
+copied these static libraries too.
+
+Or you can adjust the Windows/curlink.h, to directly point to your
+respective Debug and Release static CURL libraries, either where you
+built them, or where you copied them too.
+
+Now, Xmlrpc-c should build using the CURL transport.
+
+Note, for the final linking, all RUNTIME libraries MUST be the SAME.
+A mixture of /MD and /MT will give big linkage problems. Any one project
+built with the alterate RUNTIME will show many items defined more than
+once. And of course, you can also NOT mix Debug with Release. That is
+/MDd with /MD, nor /MTd with /MT, or else there will be unresolved
+debug items.
+
+EOF
-\r
-Using xmlrpc_cpp_proxy.dsp\r
-\r
-While not included in the main xmlrpc.dsw file, this\r
-xmlrpc_cpp_proxy.dsp, if added as a project to the xmlrpc solution,\r
-will build bin\xmlrpc_cpp_proxy.exe and xmlrpc_cpp_proxyD.exe, for\r
-testing using the default WinINET transport.\r
-\r
-After you have loaded the xmlrpc_cpp_proxy.dsp, which adds an \r
-xmlrpc_cpp_proxy project, it is necessary to ADD a dependance on\r
-the xmlrpc library, to complete the link.\r
-\r
-To do this in say MSVC8, select the xmlrpc_cpp_proxy project, and right\r
-mouse click, and in the context menu, select 'Project Dependancies...'.\r
-And in the Project Dependancies dialog, check the xmlrpc proejct,\r
-then [Ok] ...\r
-\r
-To test your xmlrpc_cpp_proxy[D].exe -\r
-\r
-\r
-1. In a console start the server, like -\r
-\r
-bin/xmlrpc_sample_add_serverD 8080\r
-\r
-Note, since this server opens a socket, you may have to enable it on some\r
-anti-virus software that detects the socket being established, and\r
-'Unblock' it in the Windows Security Alert system dialog that appears.\r
-\r
-You can later remove this program from the Firewall exceptions, through\r
-Control Panel -> Windows Firewall, selecting the 'Exceptions' tab, where\r
-you can also disable this 'blocking' notification, but not recommended.\r
-\r
-The server should start, and report -\r
-Running XML-RPC server...\r
-\r
-\r
-2. In another console run the cpp proxy client, with say -\r
-\r
-bin>xmlrpc_cpp_proxyD http://localhost:8080/RPC2 null null\r
-\r
-The client should connect to the server, and output a 'null' header,\r
-and implementation file. If this functions, for a bigger example, try -\r
-\r
-bin>xmlrpc_cpp_proxyD http://localhost:8080/RPC2 system systemProxy\r
-\r
-and you should see a better example of a class header, and the \r
-implementation code ...\r
-\r
-20 December, 2007\r
-\r
-EOF\r
+
+Using xmlrpc_cpp_proxy.dsp
+
+While not included in the main xmlrpc.dsw file, this
+xmlrpc_cpp_proxy.dsp, if added as a project to the xmlrpc solution,
+will build bin\xmlrpc_cpp_proxy.exe and xmlrpc_cpp_proxyD.exe, for
+testing using the default WinINET transport.
+
+After you have loaded the xmlrpc_cpp_proxy.dsp, which adds an
+xmlrpc_cpp_proxy project, it is necessary to ADD a dependance on
+the xmlrpc library, to complete the link.
+
+To do this in say MSVC8, select the xmlrpc_cpp_proxy project, and right
+mouse click, and in the context menu, select 'Project Dependancies...'.
+And in the Project Dependancies dialog, check the xmlrpc proejct,
+then [Ok] ...
+
+To test your xmlrpc_cpp_proxy[D].exe -
+
+
+1. In a console start the server, like -
+
+bin/xmlrpc_sample_add_serverD 8080
+
+Note, since this server opens a socket, you may have to enable it on some
+anti-virus software that detects the socket being established, and
+'Unblock' it in the Windows Security Alert system dialog that appears.
+
+You can later remove this program from the Firewall exceptions, through
+Control Panel -> Windows Firewall, selecting the 'Exceptions' tab, where
+you can also disable this 'blocking' notification, but not recommended.
+
+The server should start, and report -
+Running XML-RPC server...
+
+
+2. In another console run the cpp proxy client, with say -
+
+bin>xmlrpc_cpp_proxyD http://localhost:8080/RPC2 null null
+
+The client should connect to the server, and output a 'null' header,
+and implementation file. If this functions, for a bigger example, try -
+
+bin>xmlrpc_cpp_proxyD http://localhost:8080/RPC2 system systemProxy
+
+and you should see a better example of a class header, and the
+implementation code ...
+
+20 December, 2007
+
+EOF
-POST /cgi-bin/sample-cgi.cgi 1.0\r
-Host: localhost\r
-Content-Type: text/xml\r
-Content-Length: 141\r
-\r
-<?xml version="1.0" encoding="UTF-8"?>\r
-<methodCall>\r
- <methodName>system.listMethods</methodName>\r
- <params>\r
- </params>\r
-</methodCall>\r
+POST /cgi-bin/sample-cgi.cgi 1.0
+Host: localhost
+Content-Type: text/xml
+Content-Length: 141
+
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall>
+ <methodName>system.listMethods</methodName>
+ <params>
+ </params>
+</methodCall>
-ExprEval - Expression Evaluation Library\r
-Version 2.0\r
-\r
-Copyright (C) 2004 Brian Allen Vanderburg II\r
-\r
-This software is provided 'as-is', without any express or implied\r
-warranty. In no event will the authors be held liable for any damages\r
-arising from the use of this software.\r
-\r
-Permission is granted to anyone to use this software for any purpose,\r
-including commercial applications, and to alter it and redistribute it\r
-freely, subject to the following restrictions:\r
-\r
-1. The origin of this software must not be misrepresented; you must not\r
- claim that you wrote the original software. If you use this software\r
- in a product, an acknowledgment in the product documentation would be\r
- appreciated but is not required.\r
-2. Altered source versions must be plainly marked as such, and must not be\r
- misrepresented as being the original software.\r
-3. This notice may not be removed or altered from any source distribution.\r
-\r
+ExprEval - Expression Evaluation Library
+Version 2.0
+
+Copyright (C) 2004 Brian Allen Vanderburg II
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
-ExprEval - A C/C++ based expression evaluation library\r
-Written by: Brian Allen Vanderburg II\r
-Licensed under the ExprEval License\r
-------------------------------------------------------\r
-ExprEval is a mostly a C based expression evaluation\r
-library. The only C++ part is the C++ Wrapper which\r
-encapsulates the complexity of the library usage.\r
-\r
-ExprEval supports the parsing of multiple expressions\r
-in a single expression string. Each sub-expression\r
-must end with a semicolon. It also supports the use\r
-of variables, constants, and functions. Functions\r
-can take multiple arguments. These arguments can\r
-also be expressions.\r
-\r
-ExprEval is very fast. It first parses the expression\r
-string into a tree of actions to take. After it has\r
-been parsed, an expression can be evaluated many times\r
-over an over.\r
-\r
-Functions, variables, and constants are stored in\r
-their own seperate lists. This makes is where the\r
-lists can be shared among multiple expression objects.\r
-A function list can add all the functions needed, and\r
-then be added to each expression object, instead of\r
-added each needed function to each object. The same\r
-goes for constant lists. Variable lists make it where\r
-one expression can depend on a variable set in another.\r
-\r
-\r
-Saturday, July 1, 2006\r
-----------------------\r
-Version 2.6\r
-\r
-* Added a new value list function 'exprValListGetNext' that can be used to\r
- enumerate the items in a value list. Any of the items not needed (name,\r
- value, or address) can be NULL. For example:\r
- \r
- char *name;\r
- EXPRTYPE val;\r
- void *cookie;\r
- \r
- cookie = exprValListGetNext(vlist, &name, &value, NULL, NULL);\r
- while(cookie)\r
- {\r
- /* Do something with name and value */\r
- cookie = exprValListGetNext(vlist, &name, &value, NULL, cookie);\r
- }\r
- \r
- You must make sure not to actually edit the returned name, because it is a\r
- pointer into the value list to the name. This can also be used to have one\r
- value list store globals. Global variables can be added to a value list, then\r
- additional lists can be created, and before any variables are added\r
- or the expression is parsed, the global list can be enumerated for name and\r
- address and the exprValListAddAddress can be used to add them. This way,\r
- expressions can have their own private list, but some variables may be shared\r
- on each expression through the global list. This is useful especially if the\r
- globals are not known at compile time, but can be adjusted by the user.\r
- For example:\r
- \r
- exprValList *globals;\r
- exprValList *v1;\r
- exprValList *v2;\r
- char *name;\r
- EXPRTYPE *addr;\r
- void *cookie;\r
- \r
- exprValListCreate(&globals);\r
- /* Add variables to the list, perhaps read from a user file or something */\r
- \r
- exprValListCreate(&v1);\r
- cookie = exprValListGetNext(globals, &name, NULL, &addr, NULL);\r
- while(cookie)\r
- {\r
- exprValListAddAddress(v1, name, addr);\r
- cookie = exprValListGetNext(globals, &name, NULL, &addr, cookie);\r
- }\r
- \r
-\r
-Friday, June 30, 2006\r
----------------------\r
-Version 2.5\r
-\r
-* Added a new value list function 'exprValListAddAddress'. This function adds\r
- a named value to the list, but uses the addresss of a stack variable. The\r
- stack variable is then used to set/get the value instead of the internal list\r
- value. You must ensure that the stack variable exists as long as it is used\r
- by the expression. This can permit, for example, a value name to be shared\r
- with two different value lists like such:\r
- \r
- EXPRTYPE global_value;\r
- exprValListAddAddress(vlist, "global", &global_value);\r
- exprValListAddAddress(vlist2, "global", &global_value);\r
- \r
- Like this, the value can be directly accessed by the application, and each\r
- value list will share it. This can also be used to replace code from this:\r
- \r
- EXPRTYPE *a;\r
- exprValListAdd(vlist, "var", 0.0);\r
- exprValListGetAddress(vlist, "var", &a);\r
- \r
- To look like this:\r
- \r
- EXPRTYPE a;\r
- exprValListAddAddress(vlist, "var", &a);\r
-* Added a value list function exprValListSet to set the value of a variable\r
- (using the slow search method). This is because the add functions now return\r
- and error if the item (function/value) already exists instead of setting the\r
- value of the item. You can still use the fast direct access method.\r
-* Changed internal lists for function and value lists from binary trees to\r
- linked lists.\r
- \r
- \r
-\r
-\r
-Thursday, May 4, 2006\r
----------------------\r
-Version 2.0\r
-\r
-* All internal functions are evaluated directly in the exprEvalNode call.\r
- This gives some speed increase.\r
-* Removed parameter and reference count macros as well as functin creation\r
- macro. Parameter and reference count information can be set when adding\r
- a function solver.\r
-* Removed exprMsgFuncType, since it is unused by the library.\r
-* Changed much of the internal names from one-letter variable names to\r
- more meaningful names.\r
-\r
-Thursday, December 1, 2005\r
---------------------------\r
-Version 1.8\r
-\r
-* Added support for the ^ operator to raise to a power.\r
- The pow function can still be used.\r
-* Moved basic math code (add,subtract,multiply,divide,negate,exponent)\r
- and multiple expression support from function solvers to the exprEvalNode\r
- function.\r
-\r
-Tuesday, November 22, 2005\r
---------------------------\r
-I still haven't been keeping up with history much.\r
-\r
-* Removed < and > as comments. Instead use # as a \r
- comment to the end of the line\r
-* Added function exprGetErrorPosition to get start and\r
- end position of parse error.\r
-\r
-Monday, May 3, 2004: Version 1.0\r
----------------------------------\r
-This is a pretty bad time to start the history part since\r
-ExprEval is pretty much up and running and very operational.\r
-\r
-* Added macro EXPR_MAJORVERSION\r
-* Added macro EXPR_MINORVERSION\r
-* Added function exprGetVersion\r
-* Added macro to make declaring functions easy:\r
- EXPR_FUNCTIONSOLVER(func_name)\r
-* Added support for passing variable references to functions\r
- with the ampersand. Example: minmax(1,2,3,&min,&max)\r
-* Added macros for reference support:\r
- EXPR_REQUIREREFCOUNT\r
- EXPR_REQUIREREFCOUNTMIN\r
- EXPR_REQUIREREFCOUNTMAX\r
- EXPR_REQUIREREFCOUNTRANGE\r
-* Added feature to disable assigning to a variable with the\r
- same name as a constant.\r
-* Added feature to enable applications to change the value of\r
- a constant while the expression can not. You must add\r
- any constants to the constant list BEFORE you parse the\r
- expression.\r
+ExprEval - A C/C++ based expression evaluation library
+Written by: Brian Allen Vanderburg II
+Licensed under the ExprEval License
+------------------------------------------------------
+ExprEval is a mostly a C based expression evaluation
+library. The only C++ part is the C++ Wrapper which
+encapsulates the complexity of the library usage.
+
+ExprEval supports the parsing of multiple expressions
+in a single expression string. Each sub-expression
+must end with a semicolon. It also supports the use
+of variables, constants, and functions. Functions
+can take multiple arguments. These arguments can
+also be expressions.
+
+ExprEval is very fast. It first parses the expression
+string into a tree of actions to take. After it has
+been parsed, an expression can be evaluated many times
+over an over.
+
+Functions, variables, and constants are stored in
+their own seperate lists. This makes is where the
+lists can be shared among multiple expression objects.
+A function list can add all the functions needed, and
+then be added to each expression object, instead of
+added each needed function to each object. The same
+goes for constant lists. Variable lists make it where
+one expression can depend on a variable set in another.
+
+
+Saturday, July 1, 2006
+----------------------
+Version 2.6
+
+* Added a new value list function 'exprValListGetNext' that can be used to
+ enumerate the items in a value list. Any of the items not needed (name,
+ value, or address) can be NULL. For example:
+
+ char *name;
+ EXPRTYPE val;
+ void *cookie;
+
+ cookie = exprValListGetNext(vlist, &name, &value, NULL, NULL);
+ while(cookie)
+ {
+ /* Do something with name and value */
+ cookie = exprValListGetNext(vlist, &name, &value, NULL, cookie);
+ }
+
+ You must make sure not to actually edit the returned name, because it is a
+ pointer into the value list to the name. This can also be used to have one
+ value list store globals. Global variables can be added to a value list, then
+ additional lists can be created, and before any variables are added
+ or the expression is parsed, the global list can be enumerated for name and
+ address and the exprValListAddAddress can be used to add them. This way,
+ expressions can have their own private list, but some variables may be shared
+ on each expression through the global list. This is useful especially if the
+ globals are not known at compile time, but can be adjusted by the user.
+ For example:
+
+ exprValList *globals;
+ exprValList *v1;
+ exprValList *v2;
+ char *name;
+ EXPRTYPE *addr;
+ void *cookie;
+
+ exprValListCreate(&globals);
+ /* Add variables to the list, perhaps read from a user file or something */
+
+ exprValListCreate(&v1);
+ cookie = exprValListGetNext(globals, &name, NULL, &addr, NULL);
+ while(cookie)
+ {
+ exprValListAddAddress(v1, name, addr);
+ cookie = exprValListGetNext(globals, &name, NULL, &addr, cookie);
+ }
+
+
+Friday, June 30, 2006
+---------------------
+Version 2.5
+
+* Added a new value list function 'exprValListAddAddress'. This function adds
+ a named value to the list, but uses the addresss of a stack variable. The
+ stack variable is then used to set/get the value instead of the internal list
+ value. You must ensure that the stack variable exists as long as it is used
+ by the expression. This can permit, for example, a value name to be shared
+ with two different value lists like such:
+
+ EXPRTYPE global_value;
+ exprValListAddAddress(vlist, "global", &global_value);
+ exprValListAddAddress(vlist2, "global", &global_value);
+
+ Like this, the value can be directly accessed by the application, and each
+ value list will share it. This can also be used to replace code from this:
+
+ EXPRTYPE *a;
+ exprValListAdd(vlist, "var", 0.0);
+ exprValListGetAddress(vlist, "var", &a);
+
+ To look like this:
+
+ EXPRTYPE a;
+ exprValListAddAddress(vlist, "var", &a);
+* Added a value list function exprValListSet to set the value of a variable
+ (using the slow search method). This is because the add functions now return
+ and error if the item (function/value) already exists instead of setting the
+ value of the item. You can still use the fast direct access method.
+* Changed internal lists for function and value lists from binary trees to
+ linked lists.
+
+
+
+
+Thursday, May 4, 2006
+---------------------
+Version 2.0
+
+* All internal functions are evaluated directly in the exprEvalNode call.
+ This gives some speed increase.
+* Removed parameter and reference count macros as well as functin creation
+ macro. Parameter and reference count information can be set when adding
+ a function solver.
+* Removed exprMsgFuncType, since it is unused by the library.
+* Changed much of the internal names from one-letter variable names to
+ more meaningful names.
+
+Thursday, December 1, 2005
+--------------------------
+Version 1.8
+
+* Added support for the ^ operator to raise to a power.
+ The pow function can still be used.
+* Moved basic math code (add,subtract,multiply,divide,negate,exponent)
+ and multiple expression support from function solvers to the exprEvalNode
+ function.
+
+Tuesday, November 22, 2005
+--------------------------
+I still haven't been keeping up with history much.
+
+* Removed < and > as comments. Instead use # as a
+ comment to the end of the line
+* Added function exprGetErrorPosition to get start and
+ end position of parse error.
+
+Monday, May 3, 2004: Version 1.0
+---------------------------------
+This is a pretty bad time to start the history part since
+ExprEval is pretty much up and running and very operational.
+
+* Added macro EXPR_MAJORVERSION
+* Added macro EXPR_MINORVERSION
+* Added function exprGetVersion
+* Added macro to make declaring functions easy:
+ EXPR_FUNCTIONSOLVER(func_name)
+* Added support for passing variable references to functions
+ with the ampersand. Example: minmax(1,2,3,&min,&max)
+* Added macros for reference support:
+ EXPR_REQUIREREFCOUNT
+ EXPR_REQUIREREFCOUNTMIN
+ EXPR_REQUIREREFCOUNTMAX
+ EXPR_REQUIREREFCOUNTRANGE
+* Added feature to disable assigning to a variable with the
+ same name as a constant.
+* Added feature to enable applications to change the value of
+ a constant while the expression can not. You must add
+ any constants to the constant list BEFORE you parse the
+ expression.