Mercurial > DynamicMail
changeset 0:aea3951b71bc
Initial commit
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile.in Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,58 @@ +# $Id: Makefile.in,v 1.4 2003/12/11 09:13:18 nuke Exp $ + +# HandyFTP Makefile + +# Edit these as necessary. +DWLIBDIR = /home/nuke/netlabs/dwindows/lib +DWINCDIR = /home/nuke/netlabs/dwindows + +CC = @CC@ +RM = @RM@ +CP = @CP@ +MAKE = @MAKE@ +MKDIR = @MKDIR@ +INSTALL = @INSTALL@ + +LIBS = @LIBS@ +INCLUDES = @INCLUDES@ + +CFLAGS = @CFLAGS@ -I$(DWINCDIR) -DDW_RESOURCES +LDFLAGS = @LDFLAGS@ -L$(DWLIBDIR) -ldw -ldwcompat + + +OBJECTS = dmail.o backend.o receive.o send.o parse.o account.o datetime.o + +SOURCES = dmail.c backend.c receive.c send.c parse.c account.c datetime.c + +all: dmail + +$(OBJECTS): + $(CC) $(CFLAGS) $(INCLUDES) -c $< + +resources.o: + $(CC) $(CFLAGS) $(INCLUDES) -c gtk/resources.c + +dmail: $(OBJECTS) resources.o + $(CC) $(CFLAGS) $(INCLUDES) -o dmail $(OBJECTS) resources.o $(LDFLAGS) $(LIBS) + +clean: + $(RM) $(OBJECTS) resources.o dmail + +distclean: + $(RM) $(OBJECTS) resources.o dmail *~ os2/*~ win/*~ gtk/*~ config.cache config.log config.status Makefile config.h + +install: + $(RM) -rf /usr/local/dmail + $(MKDIR) /usr/local/dmail + $(CP) -f ../config/*.typ /usr/local/dmail + $(INSTALL) dmail /usr/local/bin + +resources.o: gtk/resources.c +dmail.o: dmail.c dmail.h config.h +backend.o: backend.c backend.h +receive.o: receive.c sendrecv.h +send.o: send.c sendrecv.h +parse.o: parse.c parse.h +account.o: account.c userent.h +datetime.o: datetime.c datetime.h +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/account.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,500 @@ +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include "dw.h" +#include "userent.h" +#include "backend.h" +#include "dmail.h" + +HWND in_account = 0; +DWDialog *dialog; + +/* Handle OK press on the account dialog. */ +void DWSIGNAL account_ok(HWND window, void *data) +{ + UserEntry *param = (UserEntry *)data; + + if(param) + { + HWND *handles = (HWND *)param->data; + AccountSettings *as = (AccountSettings *)param->data2; + + if(handles && as) + { + char *tmp; + + tmp = dw_window_get_text(handles[0]); + if(tmp) + { + strncpy(as->AccountName, tmp, ACCOUNTNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[1]); + if(tmp) + { + strncpy(as->UserEmail, tmp, HOSTNAME_MAX + USERNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[2]); + if(tmp) + { + strncpy(as->UserRealName, tmp, REALNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[3]); + if(tmp) + { + strncpy(as->ReplyEmail, tmp, HOSTNAME_MAX + USERNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[4]); + if(tmp) + { + strncpy(as->ReplyRealName, tmp, REALNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[5]); + if(tmp) + { + strncpy(as->RecvHostName, tmp, HOSTNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[6]); + if(tmp) + { + as->RecvHostPort = atoi(tmp); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[7]); + if(tmp) + { + strncpy(as->RecvHostUser, tmp, USERNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[8]); + if(tmp) + { + strncpy(as->RecvHostPass, tmp, USERNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[9]); + if(tmp) + { + strncpy(as->SendHostName, tmp, HOSTNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[10]); + if(tmp) + { + as->SendHostPort = atoi(tmp); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[11]); + if(tmp) + { + strncpy(as->SendHostUser, tmp, USERNAME_MAX); + dw_free(tmp); + } + tmp = dw_window_get_text(handles[12]); + if(tmp) + { + strncpy(as->SendHostPass, tmp, USERNAME_MAX); + dw_free(tmp); + } + + as->RecvHostType = HOST_TYPE_POP3; + as->SendHostType = HOST_TYPE_SMTP; + } + + dw_window_destroy(param->window); + if(param->busy) + *param->busy = 0; + if(param->data) + free(param->data); + free(param); + + if(dialog) + dw_dialog_dismiss(dialog, (void *)1); + } +} + +/* Delete event */ +int DWSIGNAL confdeleteevent(HWND hwnd, void *data) +{ + UserEntry *param = (UserEntry *)data; + + if(param) + { + dw_window_destroy(param->window); + if(param->busy) + *param->busy = 0; + if(param->data) + free(param->data); + free(param); + } + if(dialog) + dw_dialog_dismiss(dialog, NULL); + return TRUE; +} + +void account_dialog_core(AccountSettings *as, int newaccount, int modal) +{ + HWND entrywindow, cancelbutton, okbutton, buttonbox, linebox, xbox, stext, groupbox, + notebook, notebookbox, *handles = malloc(35 * sizeof(HWND)); + UserEntry *param = malloc(sizeof(UserEntry)); + ULONG flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR | DW_FCF_SIZEBORDER | DW_FCF_MINMAX | + DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER; + int pageid, firstpage; + char tmpbuf[50]; + + if(in_account) + { + free(handles); + free(param); + dw_window_show(in_account); + return; + } + + in_account = entrywindow = dw_window_new(HWND_DESKTOP, "Account Settings", flStyle); + + dw_window_set_icon(entrywindow, MAIN_FRAME); + + xbox = dw_box_new(BOXVERT, 3); + + dw_box_pack_start(entrywindow, xbox, 150, 70, TRUE, TRUE, 0); + + notebook = dw_notebook_new(1050L, TRUE); + + dw_box_pack_start(xbox, notebook, 150, 300, TRUE, TRUE, 0); + + /* General Settings */ + notebookbox = dw_box_new(BOXVERT, 8); + + stext = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(notebookbox, stext, 0, 0, TRUE, TRUE, 0); + + groupbox = stext; + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + stext = dw_text_new("Description", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + handles[0] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[0], ACCOUNTNAME_MAX); + dw_window_set_text(handles[0], as->AccountName); + + dw_box_pack_start(linebox, handles[0], 100, 20, TRUE, TRUE, 0); + + groupbox = dw_groupbox_new(BOXVERT, 7, "From Information"); + + dw_box_pack_start(notebookbox, groupbox, 0, 0, TRUE, TRUE, 0); + + stext = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(groupbox, stext, 0, 0, TRUE, TRUE, 0); + + groupbox = stext; + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + stext = dw_text_new("E-Mail Address", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Real Name", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + handles[1] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[1], HOSTNAME_MAX + USERNAME_MAX); + dw_window_set_text(handles[1], as->UserEmail); + + dw_box_pack_start(linebox, handles[1], 100, 20, TRUE, TRUE, 0); + + handles[2] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[2], REALNAME_MAX); + dw_window_set_text(handles[2], as->UserRealName); + + dw_box_pack_start(linebox, handles[2], 100, 20, TRUE, TRUE, 0); + + groupbox = dw_groupbox_new(BOXVERT, 7, "Reply-To Information"); + + dw_box_pack_start(notebookbox, groupbox, 0, 0, TRUE, TRUE, 0); + + stext = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(groupbox, stext, 0, 0, TRUE, TRUE, 0); + + groupbox = stext; + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + stext = dw_text_new("E-Mail Address", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Real Name", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + handles[3] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[3], HOSTNAME_MAX + USERNAME_MAX); + dw_window_set_text(handles[3], as->ReplyEmail); + + dw_box_pack_start(linebox, handles[3], 100, 20, TRUE, TRUE, 0); + + handles[4] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[4], REALNAME_MAX); + dw_window_set_text(handles[4], as->ReplyRealName); + + dw_box_pack_start(linebox, handles[4], 100, 20, TRUE, TRUE, 0); + + dw_box_pack_start(notebookbox, 0, 100, 100, TRUE, TRUE, 0); + + firstpage = pageid = dw_notebook_page_new(notebook, 0L, FALSE); + + dw_notebook_pack(notebook, pageid, notebookbox); + + /* Due to a GTK limitiation the page text must be set after the page is packed */ + dw_notebook_page_set_text(notebook, pageid, "General"); + dw_notebook_page_set_status_text(notebook, pageid, "General Account Settings"); + + /* Receive Settings */ + notebookbox = dw_box_new(BOXVERT, 8); + + groupbox = dw_groupbox_new(BOXVERT, 7, "POP3"); + + dw_box_pack_start(notebookbox, groupbox, 0, 0, TRUE, TRUE, 0); + + stext = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(groupbox, stext, 0, 0, TRUE, TRUE, 0); + + groupbox = stext; + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + stext = dw_text_new("POP3 Server", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Port", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Username", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Password", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + handles[5] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[5], HOSTNAME_MAX); + dw_window_set_text(handles[5], as->RecvHostName); + + dw_box_pack_start(linebox, handles[5], 100, 20, TRUE, TRUE, 0); + + handles[6] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[6], REALNAME_MAX); + sprintf(tmpbuf, "%d", as->RecvHostPort ? as->RecvHostPort : 110); + dw_window_set_text(handles[6], tmpbuf); + + dw_box_pack_start(linebox, handles[6], 100, 20, TRUE, TRUE, 0); + + handles[7] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[7], USERNAME_MAX); + dw_window_set_text(handles[7], as->RecvHostUser); + + dw_box_pack_start(linebox, handles[7], 100, 20, TRUE, TRUE, 0); + + handles[8] = dw_entryfield_password_new("", 0); + dw_entryfield_set_limit(handles[8], USERNAME_MAX); + dw_window_set_text(handles[8], as->RecvHostPass); + + dw_box_pack_start(linebox, handles[8], 100, 20, TRUE, TRUE, 0); + + dw_box_pack_start(notebookbox, 0, 100, 160, TRUE, TRUE, 0); + + pageid = dw_notebook_page_new(notebook, 0L, FALSE); + + dw_notebook_pack(notebook, pageid, notebookbox); + + /* Due to a GTK limitiation the page text must be set after the page is packed */ + dw_notebook_page_set_text(notebook, pageid, "Receive"); + dw_notebook_page_set_status_text(notebook, pageid, "Account Receive Settings"); + + /* Send Settings */ + notebookbox = dw_box_new(BOXVERT, 8); + + groupbox = dw_groupbox_new(BOXVERT, 7, "SMTP"); + + dw_box_pack_start(notebookbox, groupbox, 0, 0, TRUE, TRUE, 0); + + stext = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(groupbox, stext, 0, 0, TRUE, TRUE, 0); + + groupbox = stext; + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + stext = dw_text_new("SMTP Server", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Port", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Username", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + stext = dw_text_new("Password", 0); + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(linebox, stext, 30, 20, TRUE, TRUE, 0); + + linebox = dw_box_new(BOXVERT, 4); + + dw_box_pack_start(groupbox, linebox, 0, 0, TRUE, TRUE, 0); + + handles[9] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[9], HOSTNAME_MAX); + dw_window_set_text(handles[9], as->SendHostName); + + dw_box_pack_start(linebox, handles[9], 100, 20, TRUE, TRUE, 0); + + handles[10] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[10], REALNAME_MAX); + sprintf(tmpbuf, "%d", as->RecvHostPort ? as->SendHostPort : 25); + dw_window_set_text(handles[10], tmpbuf); + + dw_box_pack_start(linebox, handles[10], 100, 20, TRUE, TRUE, 0); + + handles[11] = dw_entryfield_new("", 0); + dw_entryfield_set_limit(handles[11], USERNAME_MAX); + dw_window_set_text(handles[11], as->SendHostUser); + + dw_box_pack_start(linebox, handles[11], 100, 20, TRUE, TRUE, 0); + + handles[12] = dw_entryfield_password_new("", 0); + dw_entryfield_set_limit(handles[12], USERNAME_MAX); + dw_window_set_text(handles[12], as->SendHostPass); + + dw_box_pack_start(linebox, handles[12], 100, 20, TRUE, TRUE, 0); + + dw_box_pack_start(notebookbox, 0, 100, 160, TRUE, TRUE, 0); + + pageid = dw_notebook_page_new(notebook, 0L, FALSE); + + dw_notebook_pack(notebook, pageid, notebookbox); + + /* Due to a GTK limitiation the page text must be set after the page is packed */ + dw_notebook_page_set_text(notebook, pageid, "Send"); + dw_notebook_page_set_status_text(notebook, pageid, "Account Send Settings"); + + /* Buttons */ + buttonbox = dw_box_new(BOXHORZ, 5); + + dw_box_pack_start(xbox, buttonbox, 0, 0, TRUE, FALSE, 0); + + okbutton = dw_button_new("Ok", 1001L); + + dw_box_pack_start(buttonbox, 0, 40, 30, TRUE, FALSE, 2); + dw_box_pack_start(buttonbox, okbutton, 40, 30, TRUE, FALSE, 2); + + cancelbutton = dw_button_new("Cancel", 1002L); + + dw_box_pack_start(buttonbox, cancelbutton, 40, 30, TRUE, FALSE, 2); + dw_box_pack_start(buttonbox, 0, 40, 30, TRUE, FALSE, 2); + + param->window = entrywindow; + param->filename = NULL; + param->data = (void *)handles; + param->data2 = (void *)as; + param->busy = &in_account; + + if(modal) + dialog = dw_dialog_new((void *)entrywindow); + else + dialog = NULL; + + dw_signal_connect(entrywindow, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(confdeleteevent), (void *)param); + + dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(account_ok), (void *)param); + dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(confdeleteevent), (void *)param); + + dw_window_default(entrywindow, okbutton); + +#ifdef __WIN32__ + dw_window_set_size(entrywindow, 420, 420); +#else + dw_window_set_size(entrywindow, 460, 480); +#endif + + dw_notebook_page_set(notebook, firstpage); + + dw_window_show(entrywindow); +} + +void DWSIGNAL account_dialog(HWND handle, void *data) +{ + AccountSettings *as = findsettings(data); + + if(as) + account_dialog_core(as, FALSE, FALSE); +} + +int modal_account_dialog(AccountSettings *as) +{ + if(in_account) + return FALSE; + + account_dialog_core(as, TRUE, TRUE); + + return (int)dw_dialog_wait(dialog); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acinclude.m4 Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,1127 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4a + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Configure paths for GLIB +# Owen Taylor 97-11-3 + +dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or +dnl gthread is specified in MODULES, pass to glib-config +dnl +AC_DEFUN(AM_PATH_GLIB, +[dnl +dnl Get the cflags and libraries from the glib-config script +dnl +AC_ARG_WITH(glib-prefix,[ --with-glib-prefix=PFX Prefix where GLIB is installed (optional)], + glib_config_prefix="$withval", glib_config_prefix="") +AC_ARG_WITH(glib-exec-prefix,[ --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)], + glib_config_exec_prefix="$withval", glib_config_exec_prefix="") +AC_ARG_ENABLE(glibtest, [ --disable-glibtest Do not try to compile and run a test GLIB program], + , enable_glibtest=yes) + + if test x$glib_config_exec_prefix != x ; then + glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config + fi + fi + if test x$glib_config_prefix != x ; then + glib_config_args="$glib_config_args --prefix=$glib_config_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_prefix/bin/glib-config + fi + fi + + for module in . $4 + do + case "$module" in + gmodule) + glib_config_args="$glib_config_args gmodule" + ;; + gthread) + glib_config_args="$glib_config_args gthread" + ;; + esac + done + + AC_PATH_PROG(GLIB_CONFIG, glib-config, no) + min_glib_version=ifelse([$1], ,1.2.0,$1) + AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) + no_glib="" + if test "$GLIB_CONFIG" = "no" ; then + no_glib=yes + else + GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags` + GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs` + glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" +dnl +dnl Now check if the installed GLIB is sufficiently new. (Also sanity +dnl checks the results of glib-config to some extent +dnl + rm -f conf.glibtest + AC_TRY_RUN([ +#include <glib.h> +#include <stdio.h> +#include <stdlib.h> + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If glib-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n"); + printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the glib-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n"); + printf("*** correct copy of glib-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GLIB_CONFIG" = "no" ; then + echo "*** The glib-config script installed by GLIB could not be found" + echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GLIB_CONFIG environment variable to the" + echo "*** full path to glib-config." + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + AC_TRY_LINK([ +#include <glib.h> +#include <stdio.h> +], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB was incorrectly installed" + echo "*** or that you have moved GLIB since it was installed. In the latter case, you" + echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + rm -f conf.glibtest +]) + +# Configure paths for GTK+ +# Owen Taylor 97-11-3 + +dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS +dnl +AC_DEFUN(AM_PATH_GTK, +[dnl +dnl Get the cflags and libraries from the gtk-config script +dnl +AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], + gtk_config_prefix="$withval", gtk_config_prefix="") +AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], + gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") +AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], + , enable_gtktest=yes) + + for module in . $4 + do + case "$module" in + gthread) + gtk_config_args="$gtk_config_args gthread" + ;; + esac + done + + if test x$gtk_config_exec_prefix != x ; then + gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config + fi + fi + if test x$gtk_config_prefix != x ; then + gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_prefix/bin/gtk-config + fi + fi + + AC_PATH_PROG(GTK_CONFIG, gtk-config, no) + min_gtk_version=ifelse([$1], ,1.2.0,$1) + AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) + no_gtk="" + if test "$GTK_CONFIG" = "no" ; then + no_gtk=yes + else + GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` + GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` + gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" +dnl +dnl Now check if the installed GTK is sufficiently new. (Also sanity +dnl checks the results of gtk-config to some extent +dnl + rm -f conf.gtktest + AC_TRY_RUN([ +#include <gtk/gtk.h> +#include <stdio.h> +#include <stdlib.h> + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtktest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtk_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((gtk_major_version != $gtk_config_major_version) || + (gtk_minor_version != $gtk_config_minor_version) || + (gtk_micro_version != $gtk_config_micro_version)) + { + printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf ("*** was found! If gtk-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); + printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } +#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) + else if ((gtk_major_version != GTK_MAJOR_VERSION) || + (gtk_minor_version != GTK_MINOR_VERSION) || + (gtk_micro_version != GTK_MICRO_VERSION)) + { + printf("*** GTK+ header files (version %d.%d.%d) do not match\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + } +#endif /* defined (GTK_MAJOR_VERSION) ... */ + else + { + if ((gtk_major_version > major) || + ((gtk_major_version == major) && (gtk_minor_version > minor)) || + ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); + printf("*** correct copy of gtk-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GTK_CONFIG" = "no" ; then + echo "*** The gtk-config script installed by GTK could not be found" + echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GTK_CONFIG environment variable to the" + echo "*** full path to gtk-config." + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK test program, checking why..." + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + AC_TRY_LINK([ +#include <gtk/gtk.h> +#include <stdio.h> +], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK or finding the wrong" + echo "*** version of GTK. If it is not finding GTK, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK was incorrectly installed" + echo "*** or that you have moved GTK since it was installed. In the latter case, you" + echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + rm -f conf.gtktest +]) + +# Configure paths for IMLIB +# David Walluck 99-9-18 +# Frank Belew 98-8-31 +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_IMLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for IMLIB, and define IMLIB_CFLAGS and IMLIB_LIBS +dnl +AC_DEFUN(AM_PATH_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.9.4,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags` + IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + imlib_micro_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <Imlib.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.imlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor)) || + (($imlib_major_version == major) && ($imlib_minor_version == minor) && + ($imlib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version, $imlib_micro_version); + printf("*** of IMLIB required is %d.%d.%d. If imlib-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.imlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <Imlib.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(IMLIB_CFLAGS) + AC_SUBST(IMLIB_LIBS) + rm -f conf.imlibtest +]) + +# Check for gdk-imlib +AC_DEFUN(AM_PATH_GDK_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.9.4,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + GDK_IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags-gdk` + GDK_IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs-gdk` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + imlib_micro_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <gdk_imlib.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gdkimlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor)) || + (($imlib_major_version == major) && ($imlib_minor_version == minor) && + ($imlib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version, $imlib_micro_version); + printf("*** of IMLIB required is %d.%d.%d. If imlib-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.gdkimlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <gdk_imlib.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GDK_IMLIB_CFLAGS="" + GDK_IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GDK_IMLIB_CFLAGS) + AC_SUBST(GDK_IMLIB_LIBS) + rm -f conf.gdkimlibtest +]) + +# Configure paths for ESD +# David Walluck 99-9-20 +# Manish Singh 98-9-30 +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_ESD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for ESD, and define ESD_CFLAGS and ESD_LIBS +dnl +AC_DEFUN(AM_PATH_ESD, +[dnl +dnl Get the cflags and libraries from the esd-config script +dnl +AC_ARG_WITH(esd-prefix,[ --with-esd-prefix=PFX Prefix where ESD is installed (optional)], + esd_prefix="$withval", esd_prefix="") +AC_ARG_WITH(esd-exec-prefix,[ --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)], + esd_exec_prefix="$withval", esd_exec_prefix="") +AC_ARG_ENABLE(esdtest, [ --disable-esdtest Do not try to compile and run a test ESD program], + , enable_esdtest=yes) + + if test x$esd_exec_prefix != x ; then + esd_args="$esd_args --exec-prefix=$esd_exec_prefix" + if test x${ESD_CONFIG+set} != xset ; then + ESD_CONFIG=$esd_exec_prefix/bin/esd-config + fi + fi + if test x$esd_prefix != x ; then + esd_args="$esd_args --prefix=$esd_prefix" + if test x${ESD_CONFIG+set} != xset ; then + ESD_CONFIG=$esd_prefix/bin/esd-config + fi + fi + + AC_PATH_PROG(ESD_CONFIG, esd-config, no) + min_esd_version=ifelse([$1], ,0.2.5,$1) + AC_MSG_CHECKING(for ESD - version >= $min_esd_version) + no_esd="" + if test "$ESD_CONFIG" = "no" ; then + no_esd=yes + else + ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` + ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` + + esd_major_version=`$ESD_CONFIG $esd_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + esd_minor_version=`$ESD_CONFIG $esd_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_esdtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $ESD_CFLAGS" + LIBS="$LIBS $ESD_LIBS" +dnl +dnl Now check if the installed ESD is sufficiently new. (Also sanity +dnl checks the results of esd-config to some extent +dnl + rm -f conf.esdtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <esd.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.esdtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_esd_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_esd_version"); + exit(1); + } + + if (($esd_major_version > major) || + (($esd_major_version == major) && ($esd_minor_version > minor)) || + (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); + printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); + printf("*** to point to the correct copy of esd-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_esd" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$ESD_CONFIG" = "no" ; then + echo "*** The esd-config script installed by ESD could not be found" + echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the ESD_CONFIG environment variable to the" + echo "*** full path to esd-config." + else + if test -f conf.esdtest ; then + : + else + echo "*** Could not run ESD test program, checking why..." + CFLAGS="$CFLAGS $ESD_CFLAGS" + LIBS="$LIBS $ESD_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <esd.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding ESD or finding the wrong" + echo "*** version of ESD. If it is not finding ESD, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means ESD was incorrectly installed" + echo "*** or that you have moved ESD since it was installed. In the latter case, you" + echo "*** may want to edit the esd-config script: $ESD_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + ESD_CFLAGS="" + ESD_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(ESD_CFLAGS) + AC_SUBST(ESD_LIBS) + rm -f conf.esdtest +]) + +# Configure paths for AUDIOFILE +# Bertrand Guiheneuf 98-10-21 +# stolen from esd.m4 in esound : +# Manish Singh 98-9-30 +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_AUDIOFILE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for AUDIOFILE, and define AUDIOFILE_CFLAGS and AUDIOFILE_LIBS +dnl +AC_DEFUN(AM_PATH_AUDIOFILE, +[dnl +dnl Get the cflags and libraries from the audiofile-config script +dnl +AC_ARG_WITH(audiofile-prefix,[ --with-audiofile-prefix=PFX Prefix where AUDIOFILE is installed (optional)], + audiofile_prefix="$withval", audiofile_prefix="") +AC_ARG_WITH(audiofile-exec-prefix,[ --with-audiofile-exec-prefix=PFX Exec prefix where AUDIOFILE is installed + (optional)], + audiofile_exec_prefix="$withval", audiofile_exec_prefix="") +AC_ARG_ENABLE(audiofiletest, [ --disable-audiofiletest Do not try to compile and run a test AUDIOFILE program], + , enable_audiofiletest=yes) + + if test x$audiofile_exec_prefix != x ; then + audiofile_args="$audiofile_args --exec-prefix=$audiofile_exec_prefix" + if test x${AUDIOFILE_CONFIG+set} != xset ; then + AUDIOFILE_CONFIG=$audiofile_exec_prefix/bin/audiofile-config + fi + fi + if test x$audiofile_prefix != x ; then + audiofile_args="$audiofile_args --prefix=$audiofile_prefix" + if test x${AUDIOFILE_CONFIG+set} != xset ; then + AUDIOFILE_CONFIG=$audiofile_prefix/bin/audiofile-config + fi + fi + + AC_PATH_PROG(AUDIOFILE_CONFIG, audiofile-config, no) + min_audiofile_version=ifelse([$1], ,0.1.5,$1) + AC_MSG_CHECKING(for AUDIOFILE - version >= $min_audiofile_version) + no_audiofile="" + if test "$AUDIOFILE_CONFIG" = "no" ; then + no_audiofile=yes + else + AUDIOFILE_LIBS=`$AUDIOFILE_CONFIG $audiofileconf_args --libs` + AUDIOFILE_CFLAGS=`$AUDIOFILE_CONFIG $audiofileconf_args --cflags` + audiofile_major_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + audiofile_minor_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + audiofile_micro_version=`$AUDIOFILE_CONFIG $audiofile_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_audiofiletest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" +dnl +dnl Now check if the installed AUDIOFILE is sufficiently new. (Also sanity +dnl checks the results of audiofile-config to some extent +dnl + rm -f conf.audiofiletest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <audiofile.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.audiofiletest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_audiofile_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_audiofile_version"); + exit(1); + } + + if (($audiofile_major_version > major) || + (($audiofile_major_version == major) && ($audiofile_minor_version > minor)) || + (($audiofile_major_version == major) && ($audiofile_minor_version == minor) && ($audiofile_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'audiofile-config --version' returned %d.%d.%d, but the minimum version\n", $audiofile_major_version, $audiofile_minor_version, $audiofile_micro_version); + printf("*** of AUDIOFILE required is %d.%d.%d. If audiofile-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If audiofile-config was wrong, set the environment variable AUDIOFILE_CONFIG\n"); + printf("*** to point to the correct copy of audiofile-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_audiofile=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_audiofile" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$AUDIOFILE_CONFIG" = "no" ; then + echo "*** The audiofile-config script installed by AUDIOFILE could not be found" + echo "*** If AUDIOFILE was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the AUDIOFILE_CONFIG environment variable to the" + echo "*** full path to audiofile-config." + else + if test -f conf.audiofiletest ; then + : + else + echo "*** Could not run AUDIOFILE test program, checking why..." + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <audiofile.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding AUDIOFILE or finding the wrong" + echo "*** version of AUDIOFILE. If it is not finding AUDIOFILE, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means AUDIOFILE was incorrectly installed" + echo "*** or that you have moved AUDIOFILE since it was installed. In the latter case, you" + echo "*** may want to edit the audiofile-config script: $AUDIOFILE_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + AUDIOFILE_CFLAGS="" + AUDIOFILE_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(AUDIOFILE_CFLAGS) + AC_SUBST(AUDIOFILE_LIBS) + rm -f conf.audiofiletest +]) +# Configure paths for GNOME +# David Walluck 99-9-24 + +dnl AM_PATH_GNOME([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for GNOME, and define GNOME_CFLAGS and GNOME_LIBS +dnl +AC_DEFUN(AM_PATH_GNOME, +[dnl +dnl Get the cflags and libraries from the gnome-config script +dnl +AC_ARG_WITH(gnome-prefix,[ --with-gnome-prefix=PFX Prefix where GNOME is installed (optional)], + gnome_prefix="$withval", gnome_prefix="") +AC_ARG_WITH(gnome-exec-prefix,[ --with-gnome-exec-prefix=PFX Exec prefix where GNOME is installed (optional)], + gnome_exec_prefix="$withval", gnome_exec_prefix="") +AC_ARG_ENABLE(gnometest, [ --disable-gnometest Do not try to compile and run a test GNOME program], + , enable_gnometest=yes) + + if test x$gnome_exec_prefix != x ; then + gnome_args="$gnome_args --exec-prefix=$gnome_exec_prefix" + if test x${GNOME_CONFIG+set} != xset ; then + GNOME_CONFIG=$gnome_exec_prefix/bin/gnome-config + fi + fi + if test x$gnome_prefix != x ; then + gnome_args="$gnome_args --prefix=$gnome_prefix" + if test x${GNOME_CONFIG+set} != xset ; then + GNOME_CONFIG=$gnome_prefix/bin/gnome-config + fi + fi + + AC_PATH_PROG(GNOME_CONFIG, gnome-config, no) + min_gnome_version=ifelse([$1], ,0.2.7,$1) + AC_MSG_CHECKING(for GNOME - version >= $min_gnome_version) + no_gnome="" + if test "$GNOME_CONFIG" = "no" ; then + no_gnome=yes + else + GNOME_CFLAGS=`$GNOME_CONFIG $gnomeconf_args gnome --cflags` + GNOME_LIBS=`$GNOME_CONFIG $gnomeconf_args gnome --libs` + + gnome_major_version=`$GNOME_CONFIG $gnome_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gnome_minor_version=`$GNOME_CONFIG $gnome_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gnome_micro_version=`$GNOME_CONFIG $gnome_config_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gnometest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GNOME_CFLAGS" + LIBS="$LIBS $GNOME_LIBS" +dnl +dnl Now check if the installed GNOME is sufficiently new. (Also sanity +dnl checks the results of gnome-config to some extent +dnl + rm -f conf.gnometest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <gnome.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gnometest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gnome_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gnome_version"); + exit(1); + } + + if (($gnome_major_version > major) || + (($gnome_major_version == major) && ($gnome_minor_version > minor)) || + (($gnome_major_version == major) && ($gnome_minor_version == minor) && ($gnome_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'gnome-config --version' returned %d.%d.%d, but the minimum version\n", $gnome_major_version, $gnome_minor_version, $gnome_micro_version); + printf("*** of GNOME required is %d.%d.%d. If gnome-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If gnome-config was wrong, set the environment variable GNOME_CONFIG\n"); + printf("*** to point to the correct copy of gnome-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_gnome=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gnome" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GNOME_CONFIG" = "no" ; then + echo "*** The gnome-config script installed by GNOME could not be found" + echo "*** If GNOME was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GNOME_CONFIG environment variable to the" + echo "*** full path to gnome-config." + else + if test -f conf.gnometest ; then + : + else + echo "*** Could not run GNOME test program, checking why..." + CFLAGS="$CFLAGS $GNOME_CFLAGS" + LIBS="$LIBS $GNOME_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <gnome.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GNOME or finding the wrong" + echo "*** version of GNOME. If it is not finding GNOME, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GNOME was incorrectly installed" + echo "*** or that you have moved GNOME since it was installed. In the latter case, you" + echo "*** may want to edit the gnome-config script: $GNOME_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GNOME_CFLAGS="" + GNOME_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GNOME_CFLAGS) + AC_SUBST(GNOME_LIBS) + rm -f conf.gnometest +])
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aclocal.m4 Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,1140 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4a + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +dnl aclocal.m4 generated automatically by aclocal 1.4a + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Configure paths for GLIB +# Owen Taylor 97-11-3 + +dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or +dnl gthread is specified in MODULES, pass to glib-config +dnl +AC_DEFUN(AM_PATH_GLIB, +[dnl +dnl Get the cflags and libraries from the glib-config script +dnl +AC_ARG_WITH(glib-prefix,[ --with-glib-prefix=PFX Prefix where GLIB is installed (optional)], + glib_config_prefix="$withval", glib_config_prefix="") +AC_ARG_WITH(glib-exec-prefix,[ --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)], + glib_config_exec_prefix="$withval", glib_config_exec_prefix="") +AC_ARG_ENABLE(glibtest, [ --disable-glibtest Do not try to compile and run a test GLIB program], + , enable_glibtest=yes) + + if test x$glib_config_exec_prefix != x ; then + glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config + fi + fi + if test x$glib_config_prefix != x ; then + glib_config_args="$glib_config_args --prefix=$glib_config_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_prefix/bin/glib-config + fi + fi + + for module in . $4 + do + case "$module" in + gmodule) + glib_config_args="$glib_config_args gmodule" + ;; + gthread) + glib_config_args="$glib_config_args gthread" + ;; + esac + done + + AC_PATH_PROG(GLIB_CONFIG, glib-config, no) + min_glib_version=ifelse([$1], ,1.2.0,$1) + AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) + no_glib="" + if test "$GLIB_CONFIG" = "no" ; then + no_glib=yes + else + GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags` + GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs` + glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" +dnl +dnl Now check if the installed GLIB is sufficiently new. (Also sanity +dnl checks the results of glib-config to some extent +dnl + rm -f conf.glibtest + AC_TRY_RUN([ +#include <glib.h> +#include <stdio.h> +#include <stdlib.h> + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If glib-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n"); + printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the glib-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n"); + printf("*** correct copy of glib-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GLIB_CONFIG" = "no" ; then + echo "*** The glib-config script installed by GLIB could not be found" + echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GLIB_CONFIG environment variable to the" + echo "*** full path to glib-config." + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + AC_TRY_LINK([ +#include <glib.h> +#include <stdio.h> +], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB was incorrectly installed" + echo "*** or that you have moved GLIB since it was installed. In the latter case, you" + echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + rm -f conf.glibtest +]) + +# Configure paths for GTK+ +# Owen Taylor 97-11-3 + +dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS +dnl +AC_DEFUN(AM_PATH_GTK, +[dnl +dnl Get the cflags and libraries from the gtk-config script +dnl +AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], + gtk_config_prefix="$withval", gtk_config_prefix="") +AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], + gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") +AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], + , enable_gtktest=yes) + + for module in . $4 + do + case "$module" in + gthread) + gtk_config_args="$gtk_config_args gthread" + ;; + esac + done + + if test x$gtk_config_exec_prefix != x ; then + gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config + fi + fi + if test x$gtk_config_prefix != x ; then + gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_prefix/bin/gtk-config + fi + fi + + AC_PATH_PROG(GTK_CONFIG, gtk-config, no) + min_gtk_version=ifelse([$1], ,1.2.0,$1) + AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) + no_gtk="" + if test "$GTK_CONFIG" = "no" ; then + no_gtk=yes + else + GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` + GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` + gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" +dnl +dnl Now check if the installed GTK is sufficiently new. (Also sanity +dnl checks the results of gtk-config to some extent +dnl + rm -f conf.gtktest + AC_TRY_RUN([ +#include <gtk/gtk.h> +#include <stdio.h> +#include <stdlib.h> + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtktest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtk_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((gtk_major_version != $gtk_config_major_version) || + (gtk_minor_version != $gtk_config_minor_version) || + (gtk_micro_version != $gtk_config_micro_version)) + { + printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf ("*** was found! If gtk-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); + printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } +#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) + else if ((gtk_major_version != GTK_MAJOR_VERSION) || + (gtk_minor_version != GTK_MINOR_VERSION) || + (gtk_micro_version != GTK_MICRO_VERSION)) + { + printf("*** GTK+ header files (version %d.%d.%d) do not match\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + } +#endif /* defined (GTK_MAJOR_VERSION) ... */ + else + { + if ((gtk_major_version > major) || + ((gtk_major_version == major) && (gtk_minor_version > minor)) || + ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); + printf("*** correct copy of gtk-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GTK_CONFIG" = "no" ; then + echo "*** The gtk-config script installed by GTK could not be found" + echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GTK_CONFIG environment variable to the" + echo "*** full path to gtk-config." + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK test program, checking why..." + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + AC_TRY_LINK([ +#include <gtk/gtk.h> +#include <stdio.h> +], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK or finding the wrong" + echo "*** version of GTK. If it is not finding GTK, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK was incorrectly installed" + echo "*** or that you have moved GTK since it was installed. In the latter case, you" + echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + rm -f conf.gtktest +]) + +# Configure paths for IMLIB +# David Walluck 99-9-18 +# Frank Belew 98-8-31 +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_IMLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for IMLIB, and define IMLIB_CFLAGS and IMLIB_LIBS +dnl +AC_DEFUN(AM_PATH_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.9.4,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags` + IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + imlib_micro_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <Imlib.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.imlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor)) || + (($imlib_major_version == major) && ($imlib_minor_version == minor) && + ($imlib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version, $imlib_micro_version); + printf("*** of IMLIB required is %d.%d.%d. If imlib-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.imlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <Imlib.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(IMLIB_CFLAGS) + AC_SUBST(IMLIB_LIBS) + rm -f conf.imlibtest +]) + +# Check for gdk-imlib +AC_DEFUN(AM_PATH_GDK_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.9.4,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + GDK_IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags-gdk` + GDK_IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs-gdk` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + imlib_micro_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <gdk_imlib.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gdkimlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor)) || + (($imlib_major_version == major) && ($imlib_minor_version == minor) && + ($imlib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version, $imlib_micro_version); + printf("*** of IMLIB required is %d.%d.%d. If imlib-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.gdkimlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <gdk_imlib.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GDK_IMLIB_CFLAGS="" + GDK_IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GDK_IMLIB_CFLAGS) + AC_SUBST(GDK_IMLIB_LIBS) + rm -f conf.gdkimlibtest +]) + +# Configure paths for ESD +# David Walluck 99-9-20 +# Manish Singh 98-9-30 +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_ESD([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for ESD, and define ESD_CFLAGS and ESD_LIBS +dnl +AC_DEFUN(AM_PATH_ESD, +[dnl +dnl Get the cflags and libraries from the esd-config script +dnl +AC_ARG_WITH(esd-prefix,[ --with-esd-prefix=PFX Prefix where ESD is installed (optional)], + esd_prefix="$withval", esd_prefix="") +AC_ARG_WITH(esd-exec-prefix,[ --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)], + esd_exec_prefix="$withval", esd_exec_prefix="") +AC_ARG_ENABLE(esdtest, [ --disable-esdtest Do not try to compile and run a test ESD program], + , enable_esdtest=yes) + + if test x$esd_exec_prefix != x ; then + esd_args="$esd_args --exec-prefix=$esd_exec_prefix" + if test x${ESD_CONFIG+set} != xset ; then + ESD_CONFIG=$esd_exec_prefix/bin/esd-config + fi + fi + if test x$esd_prefix != x ; then + esd_args="$esd_args --prefix=$esd_prefix" + if test x${ESD_CONFIG+set} != xset ; then + ESD_CONFIG=$esd_prefix/bin/esd-config + fi + fi + + AC_PATH_PROG(ESD_CONFIG, esd-config, no) + min_esd_version=ifelse([$1], ,0.2.5,$1) + AC_MSG_CHECKING(for ESD - version >= $min_esd_version) + no_esd="" + if test "$ESD_CONFIG" = "no" ; then + no_esd=yes + else + ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags` + ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs` + + esd_major_version=`$ESD_CONFIG $esd_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + esd_minor_version=`$ESD_CONFIG $esd_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + esd_micro_version=`$ESD_CONFIG $esd_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_esdtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $ESD_CFLAGS" + LIBS="$LIBS $ESD_LIBS" +dnl +dnl Now check if the installed ESD is sufficiently new. (Also sanity +dnl checks the results of esd-config to some extent +dnl + rm -f conf.esdtest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <esd.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.esdtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_esd_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_esd_version"); + exit(1); + } + + if (($esd_major_version > major) || + (($esd_major_version == major) && ($esd_minor_version > minor)) || + (($esd_major_version == major) && ($esd_minor_version == minor) && ($esd_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'esd-config --version' returned %d.%d.%d, but the minimum version\n", $esd_major_version, $esd_minor_version, $esd_micro_version); + printf("*** of ESD required is %d.%d.%d. If esd-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If esd-config was wrong, set the environment variable ESD_CONFIG\n"); + printf("*** to point to the correct copy of esd-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_esd" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$ESD_CONFIG" = "no" ; then + echo "*** The esd-config script installed by ESD could not be found" + echo "*** If ESD was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the ESD_CONFIG environment variable to the" + echo "*** full path to esd-config." + else + if test -f conf.esdtest ; then + : + else + echo "*** Could not run ESD test program, checking why..." + CFLAGS="$CFLAGS $ESD_CFLAGS" + LIBS="$LIBS $ESD_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <esd.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding ESD or finding the wrong" + echo "*** version of ESD. If it is not finding ESD, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means ESD was incorrectly installed" + echo "*** or that you have moved ESD since it was installed. In the latter case, you" + echo "*** may want to edit the esd-config script: $ESD_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + ESD_CFLAGS="" + ESD_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(ESD_CFLAGS) + AC_SUBST(ESD_LIBS) + rm -f conf.esdtest +]) + +# Configure paths for AUDIOFILE +# Bertrand Guiheneuf 98-10-21 +# stolen from esd.m4 in esound : +# Manish Singh 98-9-30 +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_AUDIOFILE([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for AUDIOFILE, and define AUDIOFILE_CFLAGS and AUDIOFILE_LIBS +dnl +AC_DEFUN(AM_PATH_AUDIOFILE, +[dnl +dnl Get the cflags and libraries from the audiofile-config script +dnl +AC_ARG_WITH(audiofile-prefix,[ --with-audiofile-prefix=PFX Prefix where AUDIOFILE is installed (optional)], + audiofile_prefix="$withval", audiofile_prefix="") +AC_ARG_WITH(audiofile-exec-prefix,[ --with-audiofile-exec-prefix=PFX Exec prefix where AUDIOFILE is installed + (optional)], + audiofile_exec_prefix="$withval", audiofile_exec_prefix="") +AC_ARG_ENABLE(audiofiletest, [ --disable-audiofiletest Do not try to compile and run a test AUDIOFILE program], + , enable_audiofiletest=yes) + + if test x$audiofile_exec_prefix != x ; then + audiofile_args="$audiofile_args --exec-prefix=$audiofile_exec_prefix" + if test x${AUDIOFILE_CONFIG+set} != xset ; then + AUDIOFILE_CONFIG=$audiofile_exec_prefix/bin/audiofile-config + fi + fi + if test x$audiofile_prefix != x ; then + audiofile_args="$audiofile_args --prefix=$audiofile_prefix" + if test x${AUDIOFILE_CONFIG+set} != xset ; then + AUDIOFILE_CONFIG=$audiofile_prefix/bin/audiofile-config + fi + fi + + AC_PATH_PROG(AUDIOFILE_CONFIG, audiofile-config, no) + min_audiofile_version=ifelse([$1], ,0.1.5,$1) + AC_MSG_CHECKING(for AUDIOFILE - version >= $min_audiofile_version) + no_audiofile="" + if test "$AUDIOFILE_CONFIG" = "no" ; then + no_audiofile=yes + else + AUDIOFILE_LIBS=`$AUDIOFILE_CONFIG $audiofileconf_args --libs` + AUDIOFILE_CFLAGS=`$AUDIOFILE_CONFIG $audiofileconf_args --cflags` + audiofile_major_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + audiofile_minor_version=`$AUDIOFILE_CONFIG $audiofile_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + audiofile_micro_version=`$AUDIOFILE_CONFIG $audiofile_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_audiofiletest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" +dnl +dnl Now check if the installed AUDIOFILE is sufficiently new. (Also sanity +dnl checks the results of audiofile-config to some extent +dnl + rm -f conf.audiofiletest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <audiofile.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.audiofiletest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_audiofile_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_audiofile_version"); + exit(1); + } + + if (($audiofile_major_version > major) || + (($audiofile_major_version == major) && ($audiofile_minor_version > minor)) || + (($audiofile_major_version == major) && ($audiofile_minor_version == minor) && ($audiofile_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'audiofile-config --version' returned %d.%d.%d, but the minimum version\n", $audiofile_major_version, $audiofile_minor_version, $audiofile_micro_version); + printf("*** of AUDIOFILE required is %d.%d.%d. If audiofile-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If audiofile-config was wrong, set the environment variable AUDIOFILE_CONFIG\n"); + printf("*** to point to the correct copy of audiofile-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_audiofile=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_audiofile" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$AUDIOFILE_CONFIG" = "no" ; then + echo "*** The audiofile-config script installed by AUDIOFILE could not be found" + echo "*** If AUDIOFILE was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the AUDIOFILE_CONFIG environment variable to the" + echo "*** full path to audiofile-config." + else + if test -f conf.audiofiletest ; then + : + else + echo "*** Could not run AUDIOFILE test program, checking why..." + CFLAGS="$CFLAGS $AUDIOFILE_CFLAGS" + LIBS="$LIBS $AUDIOFILE_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <audiofile.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding AUDIOFILE or finding the wrong" + echo "*** version of AUDIOFILE. If it is not finding AUDIOFILE, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means AUDIOFILE was incorrectly installed" + echo "*** or that you have moved AUDIOFILE since it was installed. In the latter case, you" + echo "*** may want to edit the audiofile-config script: $AUDIOFILE_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + AUDIOFILE_CFLAGS="" + AUDIOFILE_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(AUDIOFILE_CFLAGS) + AC_SUBST(AUDIOFILE_LIBS) + rm -f conf.audiofiletest +]) +# Configure paths for GNOME +# David Walluck 99-9-24 + +dnl AM_PATH_GNOME([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for GNOME, and define GNOME_CFLAGS and GNOME_LIBS +dnl +AC_DEFUN(AM_PATH_GNOME, +[dnl +dnl Get the cflags and libraries from the gnome-config script +dnl +AC_ARG_WITH(gnome-prefix,[ --with-gnome-prefix=PFX Prefix where GNOME is installed (optional)], + gnome_prefix="$withval", gnome_prefix="") +AC_ARG_WITH(gnome-exec-prefix,[ --with-gnome-exec-prefix=PFX Exec prefix where GNOME is installed (optional)], + gnome_exec_prefix="$withval", gnome_exec_prefix="") +AC_ARG_ENABLE(gnometest, [ --disable-gnometest Do not try to compile and run a test GNOME program], + , enable_gnometest=yes) + + if test x$gnome_exec_prefix != x ; then + gnome_args="$gnome_args --exec-prefix=$gnome_exec_prefix" + if test x${GNOME_CONFIG+set} != xset ; then + GNOME_CONFIG=$gnome_exec_prefix/bin/gnome-config + fi + fi + if test x$gnome_prefix != x ; then + gnome_args="$gnome_args --prefix=$gnome_prefix" + if test x${GNOME_CONFIG+set} != xset ; then + GNOME_CONFIG=$gnome_prefix/bin/gnome-config + fi + fi + + AC_PATH_PROG(GNOME_CONFIG, gnome-config, no) + min_gnome_version=ifelse([$1], ,0.2.7,$1) + AC_MSG_CHECKING(for GNOME - version >= $min_gnome_version) + no_gnome="" + if test "$GNOME_CONFIG" = "no" ; then + no_gnome=yes + else + GNOME_CFLAGS=`$GNOME_CONFIG $gnomeconf_args gnome --cflags` + GNOME_LIBS=`$GNOME_CONFIG $gnomeconf_args gnome --libs` + + gnome_major_version=`$GNOME_CONFIG $gnome_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gnome_minor_version=`$GNOME_CONFIG $gnome_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gnome_micro_version=`$GNOME_CONFIG $gnome_config_args --version | \ + sed 's/gnome-libs //' | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gnometest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GNOME_CFLAGS" + LIBS="$LIBS $GNOME_LIBS" +dnl +dnl Now check if the installed GNOME is sufficiently new. (Also sanity +dnl checks the results of gnome-config to some extent +dnl + rm -f conf.gnometest + AC_TRY_RUN([ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <gnome.h> + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gnometest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gnome_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gnome_version"); + exit(1); + } + + if (($gnome_major_version > major) || + (($gnome_major_version == major) && ($gnome_minor_version > minor)) || + (($gnome_major_version == major) && ($gnome_minor_version == minor) && ($gnome_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'gnome-config --version' returned %d.%d.%d, but the minimum version\n", $gnome_major_version, $gnome_minor_version, $gnome_micro_version); + printf("*** of GNOME required is %d.%d.%d. If gnome-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If gnome-config was wrong, set the environment variable GNOME_CONFIG\n"); + printf("*** to point to the correct copy of gnome-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_gnome=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gnome" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GNOME_CONFIG" = "no" ; then + echo "*** The gnome-config script installed by GNOME could not be found" + echo "*** If GNOME was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GNOME_CONFIG environment variable to the" + echo "*** full path to gnome-config." + else + if test -f conf.gnometest ; then + : + else + echo "*** Could not run GNOME test program, checking why..." + CFLAGS="$CFLAGS $GNOME_CFLAGS" + LIBS="$LIBS $GNOME_LIBS" + AC_TRY_LINK([ +#include <stdio.h> +#include <gnome.h> +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GNOME or finding the wrong" + echo "*** version of GNOME. If it is not finding GNOME, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GNOME was incorrectly installed" + echo "*** or that you have moved GNOME since it was installed. In the latter case, you" + echo "*** may want to edit the gnome-config script: $GNOME_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GNOME_CFLAGS="" + GNOME_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GNOME_CFLAGS) + AC_SUBST(GNOME_LIBS) + rm -f conf.gnometest +]) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,73 @@ +#include <dw.h> +#include "backend.h" + +BackendPlugin plugin_list[PLUGIN_MAX]; + +int load_backend(char *name) +{ + int z, index = -1; + HMOD hMod; + + /* Find a free plugin entry */ + for(z=0;z<PLUGIN_MAX;z++) + { + if(!plugin_list[z].hMod) + { + index = z; + break; + } + } + if(index == -1) + return -1; + + if(dw_module_load(name, &hMod) == -1) + return -1; + + if(dw_module_symbol(hMod, "backend_init", (void *)&(plugin_list[index].init))) + goto Failed; + if(dw_module_symbol(hMod, "backend_shutdown", (void *)&(plugin_list[index].shutdown))) + goto Failed; + if(dw_module_symbol(hMod, "backend_openaccount", (void *)&(plugin_list[index].openaccount))) + goto Failed; + if(dw_module_symbol(hMod, "backend_newaccount", (void *)&(plugin_list[index].newaccount))) + goto Failed; + if(dw_module_symbol(hMod, "backend_closeaccount", (void *)&(plugin_list[index].closeaccount))) + goto Failed; + if(dw_module_symbol(hMod, "backend_getaccounts", (void *)&(plugin_list[index].getaccounts))) + goto Failed; + if(dw_module_symbol(hMod, "backend_freeaccounts", (void *)&(plugin_list[index].freeaccounts))) + goto Failed; + if(dw_module_symbol(hMod, "backend_newsettings", (void *)&(plugin_list[index].newsettings))) + goto Failed; + if(dw_module_symbol(hMod, "backend_getsettings", (void *)&(plugin_list[index].getsettings))) + goto Failed; + if(dw_module_symbol(hMod, "backend_getfolders", (void *)&(plugin_list[index].getfolders))) + goto Failed; + if(dw_module_symbol(hMod, "backend_newfolder", (void *)&(plugin_list[index].newfolder))) + goto Failed; + if(dw_module_symbol(hMod, "backend_delfolder", (void *)&(plugin_list[index].delfolder))) + goto Failed; + if(dw_module_symbol(hMod, "backend_getitems", (void *)&(plugin_list[index].getitems))) + goto Failed; + if(dw_module_symbol(hMod, "backend_newitem", (void *)&(plugin_list[index].newitem))) + goto Failed; + if(dw_module_symbol(hMod, "backend_delitem", (void *)&(plugin_list[index].delitem))) + goto Failed; + if(dw_module_symbol(hMod, "backend_getmail", (void *)&(plugin_list[index].getmail))) + goto Failed; + if(dw_module_symbol(hMod, "backend_newmail", (void *)&(plugin_list[index].newmail))) + goto Failed; + if(dw_module_symbol(hMod, "backend_free", (void *)&(plugin_list[index].free))) + goto Failed; + + if(!(plugin_list[index].Type = plugin_list[index].init(&(plugin_list[index].Info)))) + goto Failed; + + plugin_list[index].hMod = hMod; + + return 0; + +Failed: + dw_module_close(hMod); + return -1; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,116 @@ +/* + * Structures and prototypes dealing with the backend + * plugins. + */ + +#ifndef _BACKEND_H +#define _BACKEND_H + +#define GENERAL_NAME_MAX 30 +#define MAIL_ITEM_MAX 256 +#define PLUGIN_MAX 10 + +enum { + DATA_TYPE_NONE, + DATA_TYPE_ACCOUNT, + DATA_TYPE_FOLDER, + DATA_TYPE_ITEM, + DATA_TYPE_SETTINGS +}; + +typedef void Account; + +typedef struct { + char Name[GENERAL_NAME_MAX+1]; + char Author[GENERAL_NAME_MAX+1]; +} BackendInfo; + +typedef struct { + int Type; + Account* Acc; + char Name[GENERAL_NAME_MAX+1]; + char Parent[GENERAL_NAME_MAX+1]; + unsigned long Flags; + unsigned long LastId; +} MailFolder; + +typedef struct { + int Type; + Account* Acc; + MailFolder* Folder; + unsigned long Id; + CDATE Date; + CTIME Time; + char Topic[MAIL_ITEM_MAX+1]; + char To[MAIL_ITEM_MAX+1]; + char From[MAIL_ITEM_MAX+1]; + unsigned long Size; +} MailItem; + +enum { + HOST_TYPE_NONE, + HOST_TYPE_POP3, + HOST_TYPE_SMTP +}; + +#define HOSTNAME_MAX 100 +#define REALNAME_MAX 100 +#define ACCOUNTNAME_MAX 100 +#define USERNAME_MAX 32 + +typedef struct { + int Type; + char AccountName[ACCOUNTNAME_MAX+1]; + int RecvHostType; + char RecvHostName[HOSTNAME_MAX+1]; + int RecvHostPort; + char RecvHostUser[USERNAME_MAX+1]; + char RecvHostPass[USERNAME_MAX+1]; + int SendHostType; + char SendHostName[HOSTNAME_MAX+1]; + int SendHostPort; + char SendHostUser[USERNAME_MAX+1]; + char SendHostPass[USERNAME_MAX+1]; + char UserEmail[HOSTNAME_MAX + USERNAME_MAX + 1]; + char UserRealName[REALNAME_MAX+1]; + char ReplyEmail[HOSTNAME_MAX + USERNAME_MAX + 1]; + char ReplyRealName[REALNAME_MAX+1]; +} AccountSettings; + +/* Avoid horrible compiler warnings with Microsoft + * Visual C. + */ +#ifdef MSVC +#define DAPI +#else +#define DAPI API +#endif + +typedef struct { + int Type; + HMOD hMod; + int (* DAPI init)(BackendInfo *); + int (* DAPI shutdown)(void); + Account* (* DAPI openaccount)(char *); + Account* (* DAPI newaccount)(char *); + int (* DAPI closeaccount)(Account *); + char** (* DAPI getaccounts)(void); + void (* DAPI freeaccounts)(char **); + void (* DAPI newsettings)(Account *, AccountSettings *); + void (* DAPI getsettings)(Account *, AccountSettings *); + MailFolder* (* DAPI getfolders)(Account *); + int (* DAPI newfolder)(Account *, MailFolder *); + int (* DAPI delfolder)(Account *, MailFolder *); + MailItem* (* DAPI getitems)(Account *, MailFolder *); + int (* DAPI newitem)(Account *, MailFolder *, MailItem *); + int (* DAPI delitem)(Account *, MailFolder *, MailItem *); + char * (* DAPI getmail)(Account *, MailFolder *, MailItem *, unsigned long *); + int (* DAPI newmail)(Account *, MailFolder *, MailItem *, char *, unsigned long); + void (* DAPI free)(Account *, void *); + BackendInfo Info; +} BackendPlugin; + + +int load_backend(char *name); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,35 @@ +/* config.h. Generated by configure. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you have the connect function. */ +#define HAVE_CONNECT 1 + +/* Define if you have the pipe function. */ +#define HAVE_PIPE 1 + +/* Define if you have the <dirent.h> header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the <ndir.h> header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the <sys/dir.h> header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the <sys/ndir.h> header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Determine whether we have the pipe function */ +#define HAVE_PIPE 1 + +/* Define if IMLIB is available. */ +/* #undef USE_IMLIB */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h.in Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,34 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if you have the connect function. */ +#undef HAVE_CONNECT + +/* Define if you have the pipe function. */ +#undef HAVE_PIPE + +/* Define if you have the <dirent.h> header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the <ndir.h> header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the <sys/dir.h> header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the <sys/ndir.h> header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Determine whether we have the pipe function */ +#undef HAVE_PIPE + +/* Define if IMLIB is available. */ +#undef USE_IMLIB
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configure Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,6695 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.53. +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + + +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# NLS nuisances. +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && + { $as_unset LANG || test "${LANG+set}" != set; } || + { LANG=C; export LANG; } +(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && + { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || + { LC_ALL=C; export LC_ALL; } +(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && + { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || + { LC_TIME=C; export LC_TIME; } +(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && + { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || + { LC_CTYPE=C; export LC_CTYPE; } +(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && + { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || + { LANGUAGE=C; export LANGUAGE; } +(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && + { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || + { LC_COLLATE=C; export LC_COLLATE; } +(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && + { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || + { LC_NUMERIC=C; export LC_NUMERIC; } +(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && + { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || + { LC_MESSAGES=C; export LC_MESSAGES; } + + +# Name of the executable. +as_me=`(basename "$0") 2>/dev/null || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conftest.sh + echo "exit 0" >>conftest.sh + chmod +x conftest.sh + if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conftest.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="dmail.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#if HAVE_STRINGS_H +# include <strings.h> +#endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif" + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have + headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.53. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell meta-characters. +ac_configure_args= +ac_sep= +for ac_arg +do + case $ac_arg in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n ) continue ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + ac_sep=" " ;; + esac + # Get rid of the leading space. +done + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + +ac_config_headers="$ac_config_headers config.h" + + +INCLUDES="-I." + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$as_dir/$ac_word" ${1+"$@"} + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5 + (eval $ac_compiler --version </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5 + (eval $ac_compiler -v </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5 + (eval $ac_compiler -V </dev/null >&5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output" >&5 +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null; + ls a.out conftest 2>/dev/null; + ls a.* conftest.* 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;; + a.out ) # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool --akim. + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5 +echo "$as_me: error: C compiler cannot create executables" >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_compiler_gnu=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_prog_cc_g=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + ''\ + '#include <stdlib.h>' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <stdlib.h> +$ac_declaration +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +continue +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +$ac_declaration +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Extract the first word of "gmake", so it can be a program name with args. +set dummy gmake; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_MAKE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$MAKE"; then + ac_cv_prog_MAKE="$MAKE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MAKE="gmake" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +MAKE=$ac_cv_prog_MAKE +if test -n "$MAKE"; then + echo "$as_me:$LINENO: result: $MAKE" >&5 +echo "${ECHO_T}$MAKE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test x"$MAKE" = x; then + # Extract the first word of "make", so it can be a program name with args. +set dummy make; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_MAKE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$MAKE"; then + ac_cv_prog_MAKE="$MAKE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MAKE="make" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +MAKE=$ac_cv_prog_MAKE +if test -n "$MAKE"; then + echo "$as_me:$LINENO: result: $MAKE" >&5 +echo "${ECHO_T}$MAKE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <assert.h> + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <ac_nonexistent.h> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <assert.h> + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <ac_nonexistent.h> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <ctype.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + + + + + + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 +echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <sys/types.h> +#include <$ac_hdr> + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break +fi + +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 +if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +ac_cv_search_opendir=no +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="none required" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +if test "$ac_cv_search_opendir" = no; then + for ac_lib in dir; do + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="-l$ac_lib" +break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done +fi +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6 +if test "$ac_cv_search_opendir" != no; then + test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" + +fi + +else + echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 +if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +ac_cv_search_opendir=no +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="none required" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +if test "$ac_cv_search_opendir" = no; then + for ac_lib in x; do + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +opendir (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_search_opendir="-l$ac_lib" +break +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + done +fi +LIBS=$ac_func_search_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6 +if test "$ac_cv_search_opendir" != no; then + test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" + +fi + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + no:yes ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in sys/stat.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + egrep -v '^ *\+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; + no:yes ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_func in pipe +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +cat >>confdefs.h <<\_ACEOF +#define HAVE_PIPE 1 +_ACEOF + +fi +done + + + +for ac_func in connect +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +char (*f) (); + +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +f = $ac_func; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test x"$ac_cv_func_connect" = x"no"; then + if test -z "$libsocket"; then + echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 +echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 +if test "${ac_cv_lib_socket_socket+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char socket (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +socket (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_socket_socket=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_socket_socket=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 +echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 +if test $ac_cv_lib_socket_socket = yes; then + LIBS="$LIBS -lsocket" +fi + + fi + + if test -z "$libinet"; then + echo "$as_me:$LINENO: checking for socket in -linet" >&5 +echo $ECHO_N "checking for socket in -linet... $ECHO_C" >&6 +if test "${ac_cv_lib_inet_socket+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-linet $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char socket (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +socket (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_inet_socket=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_inet_socket=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_inet_socket" >&5 +echo "${ECHO_T}$ac_cv_lib_inet_socket" >&6 +if test $ac_cv_lib_inet_socket = yes; then + libnsl=1; LIBS="$LIBS -linet -lnsl_s" +fi + + fi + + if test -z "$libnsl"; then + echo "$as_me:$LINENO: checking for gethostname in -lnsl" >&5 +echo $ECHO_N "checking for gethostname in -lnsl... $ECHO_C" >&6 +if test "${ac_cv_lib_nsl_gethostname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostname (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +gethostname (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_nsl_gethostname=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_nsl_gethostname=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostname" >&5 +echo "${ECHO_T}$ac_cv_lib_nsl_gethostname" >&6 +if test $ac_cv_lib_nsl_gethostname = yes; then + LIBS="$LIBS -lnsl" +fi + + fi +fi + +LIBS=`dw-config --libs` +CFLAGS=`dw-config --cflags` + +echo "$as_me:$LINENO: checking for dw_main in -ldw" >&5 +echo $ECHO_N "checking for dw_main in -ldw... $ECHO_C" >&6 +if test "${ac_cv_lib_dw_dw_main+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldw $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dw_main (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +dw_main (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dw_dw_main=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_dw_dw_main=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dw_dw_main" >&5 +echo "${ECHO_T}$ac_cv_lib_dw_dw_main" >&6 +if test $ac_cv_lib_dw_dw_main = yes; then + LIBS="$LIBS" +else + { { echo "$as_me:$LINENO: error: Dynamic Windows library not found. HandyFTP cannot build without it." >&5 +echo "$as_me: error: Dynamic Windows library not found. HandyFTP cannot build without it." >&2;} + { (exit 1); exit 1; }; } +fi + + +echo "$as_me:$LINENO: checking for getpwnam in -lsun" >&5 +echo $ECHO_N "checking for getpwnam in -lsun... $ECHO_C" >&6 +if test "${ac_cv_lib_sun_getpwnam+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsun $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getpwnam (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +getpwnam (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_sun_getpwnam=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_sun_getpwnam=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_sun_getpwnam" >&5 +echo "${ECHO_T}$ac_cv_lib_sun_getpwnam" >&6 +if test $ac_cv_lib_sun_getpwnam = yes; then + LIBS="$LIBS -lsun" +fi + +echo "$as_me:$LINENO: checking for inet_addr in -ldgc" >&5 +echo $ECHO_N "checking for inet_addr in -ldgc... $ECHO_C" >&6 +if test "${ac_cv_lib_dgc_inet_addr+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldgc $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char inet_addr (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +inet_addr (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dgc_inet_addr=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_dgc_inet_addr=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dgc_inet_addr" >&5 +echo "${ECHO_T}$ac_cv_lib_dgc_inet_addr" >&6 +if test $ac_cv_lib_dgc_inet_addr = yes; then + LIBS="$LIBS -ldgc" +fi + +echo "$as_me:$LINENO: checking for gethostbyname in -lresolv" >&5 +echo $ECHO_N "checking for gethostbyname in -lresolv... $ECHO_C" >&6 +if test "${ac_cv_lib_resolv_gethostbyname+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolv $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +#include "confdefs.h" + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +#ifdef F77_DUMMY_MAIN +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } +#endif +int +main () +{ +gethostbyname (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_resolv_gethostbyname=yes +else + echo "$as_me: failed program was:" >&5 +cat conftest.$ac_ext >&5 +ac_cv_lib_resolv_gethostbyname=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_gethostbyname" >&5 +echo "${ECHO_T}$ac_cv_lib_resolv_gethostbyname" >&6 +if test $ac_cv_lib_resolv_gethostbyname = yes; then + LIBS="$LIBS -lresolv" +fi + + +CFLAGS="$CFLAGS $GTK_CFLAGS $GDK_IMLIB_FLAGS" +LIBS="$LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS" + +RM="rm -f" +LN="ln -s" +CP="cp" +MV="mv" +MKDIR="mkdir" + + + + + + + + + +ac_config_files="$ac_config_files Makefile:Makefile.in" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overriden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if cmp -s $cache_file confcache; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# NLS nuisances. +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && + { $as_unset LANG || test "${LANG+set}" != set; } || + { LANG=C; export LANG; } +(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && + { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || + { LC_ALL=C; export LC_ALL; } +(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && + { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || + { LC_TIME=C; export LC_TIME; } +(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && + { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || + { LC_CTYPE=C; export LC_CTYPE; } +(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && + { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || + { LANGUAGE=C; export LANGUAGE; } +(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && + { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || + { LC_COLLATE=C; export LC_COLLATE; } +(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && + { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || + { LC_NUMERIC=C; export LC_NUMERIC; } +(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && + { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || + { LC_MESSAGES=C; export LC_MESSAGES; } + + +# Name of the executable. +as_me=`(basename "$0") 2>/dev/null || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conftest.sh + echo "exit 0" >>conftest.sh + chmod +x conftest.sh + if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conftest.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.53. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to <bug-autoconf@gnu.org>." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.53, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + shift + set dummy "$ac_option" "$ac_optarg" ${1+"$@"} + shift + ;; + -*);; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_need_defaults=false;; + esac + + case $1 in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" + exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + shift + CONFIG_FILES="$CONFIG_FILES $1" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + shift + CONFIG_HEADERS="$CONFIG_HEADERS $1" + ac_need_defaults=false;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/cs$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@MAKE@,$MAKE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CPP@,$CPP,;t t +s,@INCLUDES@,$INCLUDES,;t t +s,@RM@,$RM,;t t +s,@LN@,$LN,;t t +s,@CP@,$CP,;t t +s,@MV@,$MV,;t t +s,@MKDIR@,$MKDIR,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # egrep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + exec 5>/dev/null + $SHELL $CONFIG_STATUS || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +ac_config_files="$ac_config_files minimal/Makefile:minimal/Makefile.in" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overriden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if cmp -s $cache_file confcache; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# NLS nuisances. +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && + { $as_unset LANG || test "${LANG+set}" != set; } || + { LANG=C; export LANG; } +(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && + { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || + { LC_ALL=C; export LC_ALL; } +(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && + { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || + { LC_TIME=C; export LC_TIME; } +(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && + { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || + { LC_CTYPE=C; export LC_CTYPE; } +(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && + { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || + { LANGUAGE=C; export LANGUAGE; } +(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && + { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || + { LC_COLLATE=C; export LC_COLLATE; } +(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && + { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || + { LC_NUMERIC=C; export LC_NUMERIC; } +(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && + { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || + { LC_MESSAGES=C; export LC_MESSAGES; } + + +# Name of the executable. +as_me=`(basename "$0") 2>/dev/null || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conftest.sh + echo "exit 0" >>conftest.sh + chmod +x conftest.sh + if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conftest.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.53. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to <bug-autoconf@gnu.org>." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.53, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + shift + set dummy "$ac_option" "$ac_optarg" ${1+"$@"} + shift + ;; + -*);; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_need_defaults=false;; + esac + + case $1 in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" + exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + shift + CONFIG_FILES="$CONFIG_FILES $1" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + shift + CONFIG_HEADERS="$CONFIG_HEADERS $1" + ac_need_defaults=false;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in" ;; + "minimal/Makefile" ) CONFIG_FILES="$CONFIG_FILES minimal/Makefile:minimal/Makefile.in" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/cs$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@MAKE@,$MAKE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CPP@,$CPP,;t t +s,@INCLUDES@,$INCLUDES,;t t +s,@RM@,$RM,;t t +s,@LN@,$LN,;t t +s,@CP@,$CP,;t t +s,@MV@,$MV,;t t +s,@MKDIR@,$MKDIR,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # egrep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + exec 5>/dev/null + $SHELL $CONFIG_STATUS || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +ac_config_files="$ac_config_files mysql/Makefile:mysql/Makefile.in" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overriden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if cmp -s $cache_file confcache; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# NLS nuisances. +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + +(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && + { $as_unset LANG || test "${LANG+set}" != set; } || + { LANG=C; export LANG; } +(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && + { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || + { LC_ALL=C; export LC_ALL; } +(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && + { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || + { LC_TIME=C; export LC_TIME; } +(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && + { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || + { LC_CTYPE=C; export LC_CTYPE; } +(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && + { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || + { LANGUAGE=C; export LANGUAGE; } +(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && + { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || + { LC_COLLATE=C; export LC_COLLATE; } +(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && + { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || + { LC_NUMERIC=C; export LC_NUMERIC; } +(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && + { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || + { LC_MESSAGES=C; export LC_MESSAGES; } + + +# Name of the executable. +as_me=`(basename "$0") 2>/dev/null || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conftest.sh + echo "exit 0" >>conftest.sh + chmod +x conftest.sh + if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conftest.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.53. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to <bug-autoconf@gnu.org>." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.53, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + shift + set dummy "$ac_option" "$ac_optarg" ${1+"$@"} + shift + ;; + -*);; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_need_defaults=false;; + esac + + case $1 in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" + exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + shift + CONFIG_FILES="$CONFIG_FILES $1" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + shift + CONFIG_HEADERS="$CONFIG_HEADERS $1" + ac_need_defaults=false;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in" ;; + "minimal/Makefile" ) CONFIG_FILES="$CONFIG_FILES minimal/Makefile:minimal/Makefile.in" ;; + "mysql/Makefile" ) CONFIG_FILES="$CONFIG_FILES mysql/Makefile:mysql/Makefile.in" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/cs$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@MAKE@,$MAKE,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CPP@,$CPP,;t t +s,@INCLUDES@,$INCLUDES,;t t +s,@RM@,$RM,;t t +s,@LN@,$LN,;t t +s,@CP@,$CP,;t t +s,@MV@,$MV,;t t +s,@MKDIR@,$MKDIR,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # egrep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if cmp -s $ac_file $tmp/config.h 2>/dev/null; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { case "$ac_dir" in + [\\/]* | ?:[\\/]* ) as_incr_dir=;; + *) as_incr_dir=.;; +esac +as_dummy="$ac_dir" +for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do + case $as_mkdir_dir in + # Skip DOS drivespec + ?:) as_incr_dir=$as_mkdir_dir ;; + *) + as_incr_dir=$as_incr_dir/$as_mkdir_dir + test -d "$as_incr_dir" || + mkdir "$as_incr_dir" || + { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; } + ;; + esac +done; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + exec 5>/dev/null + $SHELL $CONFIG_STATUS || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configure.in Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,68 @@ +AC_INIT(dmail.c) +AC_CONFIG_HEADER(config.h) + +INCLUDES="-I." + +AC_PROG_CC + +AC_CHECK_PROG(MAKE, gmake, gmake) +if test x"$MAKE" = x; then + AC_CHECK_PROG(MAKE, make, make) +fi + +AC_PROG_INSTALL + +AC_SUBST(MAKE) + +AC_HEADER_STDC +AC_HEADER_DIRENT +AC_CHECK_HEADERS(unistd.h) +AC_CHECK_HEADERS(sys/stat.h) + +AC_CHECK_FUNCS(pipe, AC_DEFINE(HAVE_PIPE,1,Determine whether we have the pipe function)) + +AC_CHECK_FUNCS(connect) +if test x"$ac_cv_func_connect" = x"no"; then + if test -z "$libsocket"; then + AC_CHECK_LIB(socket, socket, LIBS="$LIBS -lsocket",) + fi + + dnl this is for isc. need the nsl_s library as well. + if test -z "$libinet"; then + AC_CHECK_LIB(inet, socket, libnsl=1; LIBS="$LIBS -linet -lnsl_s",) + fi + + if test -z "$libnsl"; then + AC_CHECK_LIB(nsl, gethostname, LIBS="$LIBS -lnsl",) + fi +fi + +LIBS=`dw-config --libs` +CFLAGS=`dw-config --cflags` + +AC_CHECK_LIB(dw, dw_main,LIBS="$LIBS",AC_MSG_ERROR(Dynamic Windows library not found. HandyFTP cannot build without it.)) + +AC_CHECK_LIB(sun, getpwnam, LIBS="$LIBS -lsun",) +AC_CHECK_LIB(dgc, inet_addr, LIBS="$LIBS -ldgc",) +AC_CHECK_LIB(resolv, gethostbyname, LIBS="$LIBS -lresolv",) + +CFLAGS="$CFLAGS $GTK_CFLAGS $GDK_IMLIB_FLAGS" +LIBS="$LIBS $GTK_LIBS $PTHREAD_LIBS $GDK_IMLIB_LIBS" + +RM="rm -f" +LN="ln -s" +CP="cp" +MV="mv" +MKDIR="mkdir" + + +AC_SUBST(INCLUDES) +AC_SUBST(RM) +AC_SUBST(LN) +AC_SUBST(CP) +AC_SUBST(MV) +AC_SUBST(MKDIR) + +AC_OUTPUT(Makefile:Makefile.in) +AC_OUTPUT(minimal/Makefile:minimal/Makefile.in) +AC_OUTPUT(mysql/Makefile:mysql/Makefile.in)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datetime.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,214 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <dw.h> +#include <compat.h> +#include "datetime.h" + +int instring(char *in, char *this) +{ + int thislen, inlen, z; + + thislen = strlen(this); + inlen = strlen(in); + + if(inlen < thislen) + return FALSE; + + for(z=0;z<(inlen-thislen)+1;z++) + { + if(strncasecmp(in+z, this, thislen) == 0) + return TRUE; + } + return FALSE; +} + +int fourdigits(char *in) +{ + int z; + + for(z=1;z<DTBUFSIZE-4;z++) + { + if(in[z-1] != '-' && + isdigit(in[z]) && + isdigit(in[z+1]) && + isdigit(in[z+2]) && + isdigit(in[z+3])) + return atoi(&in[z]); + } + return 0; +} + +/* Return the # coresponding to the day in the file date */ +int findday(char *in) +{ + char tmp[DTBUFSIZE + 1]; + int z; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + for(z=0;z<DTBUFSIZE-2;z++) + { + if(tmp[z] == '-' || tmp[z] == '/') + { + if(tmp[z+2] == '-' || tmp[z+2] == '/') + return atoi(&tmp[z+1]); + } + } + for(z=0;z<DTBUFSIZE;z++) + { + if(isdigit(tmp[z])) + return atoi(&tmp[z]); + } + return 0; +} + +/* Return the # coresponding to the month in the file date */ +int findmonth(char *in) +{ + char tmp[DTBUFSIZE + 1]; + int z; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + if(instring(tmp, "jan")) + return 1; + if(instring(tmp, "feb")) + return 2; + if(instring(tmp, "mar")) + return 3; + if(instring(tmp, "apr")) + return 4; + if(instring(tmp, "may")) + return 5; + if(instring(tmp, "jun")) + return 6; + if(instring(tmp, "jul")) + return 7; + if(instring(tmp, "aug")) + return 8; + if(instring(tmp, "sep")) + return 9; + if(instring(tmp, "oct")) + return 10; + if(instring(tmp, "nov")) + return 11; + if(instring(tmp, "dec")) + return 12; + + for(z=2;z<DTBUFSIZE-3;z++) + { + if(tmp[z] == '-' || tmp[z] == '/') + { + if(tmp[z+3] == tmp[z]) + return atoi(&tmp[z-2]); + } + } + return atoi(tmp); +} + +/* Return the # coresponding to the year in the file date */ +int findyear(char *in) +{ + char tmp[DTBUFSIZE + 1]; + time_t t; + int z=0, lastdash=0, y; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + y = fourdigits(tmp); + + if(!instring(tmp, "-") && !instring(tmp, "/") && !y) + { + t = time(NULL); + return localtime(&t)->tm_year + 1900; + } + else if(!y) + { + for(z=0;z<DTBUFSIZE;z++) + { + if(tmp[z] == '-' || tmp[z] == '/') + lastdash = z; + } + y = atoi(&tmp[lastdash+1]); + } + if(y<80) + y+=80; + if(y<1900) + y+=1900; + + return y; +} + +/* Return the # coresponding to the hour in the file time */ +int findhour(char *in) +{ + char tmp[DTBUFSIZE + 1]; + int h=0, z; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + if(!instring(tmp, ":")) + return 0; + + for(z=2;z<DTBUFSIZE;z++) + { + if(tmp[z] == ':') + { + h = atoi(&tmp[z-2]); + break; + } + } + + if(instring(&tmp[z], "p")) + h+=12; + + return h; +} + +/* Return the # coresponding to the minute in the file time */ +int findmin(char *in) +{ + char tmp[DTBUFSIZE + 1]; + int z; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + if(!instring(tmp, ":")) + return 0; + + for(z=0;z<DTBUFSIZE;z++) + { + if(tmp[z] == ':') + return atoi(&tmp[z+1]); + } + + return 0; +} + +/* Return the # coresponding to the second in the file time */ +int findsec(char *in) +{ + char tmp[DTBUFSIZE + 1]; + int z, lastcolon=0; + + memset(tmp, 0, DTBUFSIZE + 1); + strncpy(tmp, in, DTBUFSIZE); + + if(!instring(tmp, ":")) + return 0; + + for(z=0;z<DTBUFSIZE;z++) + { + if(tmp[z] == ':') + lastcolon=z; + } + + return atoi(&tmp[lastcolon+1]); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datetime.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,14 @@ +#ifndef __DATETIME_H__ +#define __DATETIME_H__ + +#define DTBUFSIZE 30 + +int instring(char *in, char *this); +int findday(char *in); +int findmonth(char *in); +int findyear(char *in); +int findhour(char *in); +int findmin(char *in); +int findsec(char *in); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/develop.txt Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,21 @@ +Diagram of how the different structures are related to each other. + + + + plugin_list index (BackendPlugin) + ^ + | + AccountInfo <-------> MailFolder + ^ ^---- ^ + | \ | + | \ v + v ----> MailItem + AccountSettings + + + +AccountInfo backpointers are obtained using findaccount() which takes a pointer +to any of the types as a parameter. If a backpointer cannot be obtained NULL +is returned. + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmail.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,1563 @@ +/* $Id: dmail.c,v 1.19 2005/04/17 10:55:55 nuke Exp $ */ + +#include "compat.h" +#include "dw.h" +#include "backend.h" +#include "dmail.h" +#include "sendrecv.h" +#include "parse.h" + +HWND hwndFrame, hwndTree, hwndContainer; +HMENUI menubar; + +extern BackendPlugin plugin_list[]; +AccountInfo AccountList[ACCOUNT_MAX]; +DmailConfig config; + +HMTX mutex; +char empty_string[] = ""; + +HWND stext1, stext2, stext3; + +ULONG fileicon, foldericon, linkicon; + +/* Used for popup menus */ +char *contexttext = NULL; +int message_dialog(MailParsed *mp, int readonly, int reply, char *text); +int modal_account_dialog(AccountSettings *as); +void DWSIGNAL account_dialog(HWND handle, void *data); + +typedef struct _ip { +#ifdef _BIG_ENDIAN + unsigned char ip4, ip3, ip2, ip1; +#else + unsigned char ip1, ip2, ip3, ip4; +#endif +} IP4; + +union ip4_32 { + IP4 ip4; + unsigned long ip32; +}; + +/* Parses out IP information from a string returned from the server */ +void getipport(char *buffer, union ip4_32 *ip, union ip4_32 *port) +{ + char *buf2; + int z, pos=0, num=0, len = strlen(buffer); + + buf2 = malloc(len+1); + strcpy(buf2, buffer); + + port->ip32 = 0; + ip->ip32 = 0; + + for(z=0;z<len;z++) + { + if(buf2[z] == '(') + pos=z+1; + if(buf2[z] == ',' || buffer[z] == ')') + { + unsigned char blah; + buf2[z] = 0; + blah = (unsigned char)atoi(&buf2[pos]); + pos=z+1; + switch(num) + { + case 0: + ip->ip4.ip4 = blah; + break; + case 1: + ip->ip4.ip3 = blah; + break; + case 2: + ip->ip4.ip2 = blah; + break; + case 3: + ip->ip4.ip1 = blah; + break; + case 4: + port->ip4.ip2 = blah; + break; + case 5: + port->ip4.ip1 = blah; + break; + } + num++; + } + } + free(buf2); +} + +/* Generic function to parse information from a config file */ +void getline(FILE *f, char *entry, char *entrydata) +{ + char in[256]; + int z; + + memset(in, 0, 256); + fgets(in, 255, f); + + if(in[strlen(in)-1] == '\n') + in[strlen(in)-1] = 0; + + if(in[0] != '#') + { + for(z=0;z<strlen(in);z++) + { + if(in[z] == '=') + { + in[z] = 0; + strcpy(entry, in); + strcpy(entrydata, &in[z+1]); + return; + } + } + } + strcpy(entry, ""); + strcpy(entrydata, ""); +} + +/* Returns the AccountInfo pointer from an opaque type + * or it returns NULL on failure. + */ +AccountInfo *findaccount(void *opaque) +{ + int n; + AccountInfo *ai = opaque; + + if(ai && + (ai->Type == DATA_TYPE_FOLDER || + ai->Type == DATA_TYPE_ITEM || + ai->Type == DATA_TYPE_ACCOUNT)) + { + void *Acc; + + if(ai->Type == DATA_TYPE_ACCOUNT) + Acc = ai; + else + Acc = ai->Acc; + + for(n=0;n<ACCOUNT_MAX;n++) + { + if(AccountList[n].Acc == Acc) + return &AccountList[n]; + } + } + return NULL; +} + +AccountSettings *findsettings(void *opaque) +{ + int n; + AccountInfo *ai = opaque; + + if(ai && + (ai->Type == DATA_TYPE_FOLDER || + ai->Type == DATA_TYPE_ITEM || + ai->Type == DATA_TYPE_ACCOUNT)) + { + void *Acc; + + if(ai->Type == DATA_TYPE_ACCOUNT) + Acc = ai; + else + Acc = ai->Acc; + + for(n=0;n<ACCOUNT_MAX;n++) + { + if(AccountList[n].Acc == Acc) + return &AccountList[n].Settings; + } + } + return NULL; +} + +/* Find an account mailbox from it's name */ +MailFolder *findfolder(AccountInfo *ai, char *name) +{ + int n = 0; + + while(ai && ai->Folders[n].Name[0]) + { + if(strcmp(ai->Folders[n].Name, name) == 0) + return &ai->Folders[n]; + n++; + } + return NULL; +} + +/* Move item from one folder to the next */ +void moveitem(AccountInfo *ai, MailItem *mi, MailFolder *mf) +{ + MailItem mailitem; + char *data; + unsigned long datalen; + + data = plugin_list[ai->Plug].getmail(mi->Acc, mi->Folder, mi, &datalen); + memcpy(&mailitem, mi, sizeof(MailItem)); + plugin_list[ai->Plug].newitem(ai->Acc, mf, &mailitem); + plugin_list[ai->Plug].newmail(ai->Acc, mf, &mailitem, data, datalen); + plugin_list[ai->Plug].free(mi->Acc, data); + plugin_list[ai->Plug].delitem(mi->Acc, mi->Folder, mi); +} + +/* Make a DOS style path into something a web browser can handle. */ +void urlify(char *buf) +{ + int z, len = strlen(buf); + + for(z=0;z<len;z++) + { + if(buf[z] == '\\') + buf[z] = '/'; + if(buf[z] == ':') + buf[z] = '|'; + } +} + +void dmail_init_tree(void) +{ + HTREEITEM maint, tmp; + int z; + + for(z=0;z<PLUGIN_MAX;z++) + { + if(plugin_list[z].hMod) + { + char **accs = plugin_list[z].getaccounts(); + int x; + + for(x=0;x<ACCOUNT_MAX;x++) + { + if(!AccountList[x].Acc) + break; + } + + /* Initialize our account */ + AccountList[x].Plug = z; + AccountList[x].SendEve = dw_event_new(); + AccountList[x].RecvEve = dw_event_new(); + dw_event_reset(AccountList[x].SendEve); + dw_event_reset(AccountList[x].RecvEve); + + if(!accs) + { + AccountSettings *set = &AccountList[x].Settings; + + if(!modal_account_dialog(set)) + { + /* Initialize the deafult settings */ + strcpy(set->AccountName, "Default"); + set->RecvHostType = HOST_TYPE_POP3; + strcpy(set->RecvHostName, "pop3.server.com"); + set->RecvHostPort = 110; + strcpy(set->RecvHostUser, "username"); + strcpy(set->RecvHostPass, "password"); + set->SendHostType = HOST_TYPE_SMTP; + strcpy(set->SendHostName, "smtp.server.com"); + set->SendHostPort = 25; + strcpy(set->SendHostUser, ""); + strcpy(set->SendHostPass, ""); + } + AccountList[x].Acc = plugin_list[z].newaccount(set->AccountName); + AccountList[x].Folders = plugin_list[z].getfolders(AccountList[x].Acc); + + + plugin_list[z].newsettings(AccountList[x].Acc, set); + + /* Populate our tree */ + maint = dw_tree_insert(hwndTree, set->AccountName, fileicon, 0, 0); + dw_tree_item_set_data(hwndTree, maint, &AccountList[x]); + + if(AccountList[x].Folders) + { + int y = 0; + + while(AccountList[x].Folders[y].Name[0]) + { + tmp = dw_tree_insert(hwndTree, AccountList[x].Folders[y].Name, foldericon, maint, 0); + dw_tree_item_set_data(hwndTree, tmp, &AccountList[x].Folders[y]); + y++; + } + } + dw_tree_item_expand(hwndTree, maint); + } + else + { + int x = 0; + + while(accs[x]) + { + AccountList[x].Acc = plugin_list[z].openaccount(accs[x]); + AccountList[x].Folders = plugin_list[z].getfolders(AccountList[x].Acc); + AccountList[x].Plug = z; + + /* Load our settings */ + plugin_list[z].getsettings(AccountList[x].Acc, &AccountList[x].Settings); + + /* Populate our tree */ + maint = dw_tree_insert(hwndTree, accs[x], fileicon, 0, 0); + dw_tree_item_set_data(hwndTree, maint, AccountList[x].Acc); + + if(AccountList[x].Folders) + { + int y = 0; + + while(AccountList[x].Folders[y].Name[0]) + { + tmp = dw_tree_insert(hwndTree, AccountList[x].Folders[y].Name, foldericon, maint, 0); + dw_tree_item_set_data(hwndTree, tmp, &AccountList[x].Folders[y]); + y++; + } + } + dw_tree_item_expand(hwndTree, maint); + + x++; + } + } + + /* Start the send and receive threads */ + dw_thread_new((void *)Mail_Send_Thread, (void *)&AccountList[x], 20000); + dw_thread_new((void *)Mail_Receive_Thread, (void *)&AccountList[x], 20000); + } + } +} + +void setfoldercount(MailFolder *mf, int count) +{ + char textbuf[1024] = "Welcome to Dynamic Mail"; + if(mf && mf->Type == DATA_TYPE_FOLDER) + sprintf(textbuf, "%s (%d message%s)", mf->Name, count, count == 1 ? "" : "s"); + else + count = 0; + dw_window_set_text(stext1, textbuf); + dw_window_set_data(stext1, "count", (void *)count); +} + +/* Open a mail viewer window when double clicking on a mail item */ +int DWSIGNAL deleteitem(HWND hwnd, void *data) +{ + MailItem *mi = (MailItem *)dw_container_query_start(hwndContainer, DW_CRA_SELECTED); + int plug = (int)dw_window_get_data(hwndContainer, "plug"); + AccountInfo *ai = findaccount(mi); + MailFolder *mf = findfolder(ai, "Trash"); + + if(dw_messagebox("DynamicMail", DW_MB_YESNO | DW_MB_QUESTION, "Are you sure you want to delete the selected messages?")) + { + int deleted = 0, count = (int)dw_window_get_data(stext1, "count"); + + while(mi) + { + MailItem *lastitem = NULL; + + if(mi->Type == DATA_TYPE_ITEM) + { + + /* If we have a trash folder, move the message there + * otherwise delete the message immediately. + */ + if(mf && mf != mi->Folder) + moveitem(ai, mi, mf); + else + plugin_list[plug].delitem(mi->Acc, mi->Folder, mi); + + lastitem = mi; + + deleted++; + } + mi = (MailItem *)dw_container_query_next(hwndContainer, DW_CRA_SELECTED); + + /* Delete the item after querying the next, as the next + * item is dependant on the last item. + */ + if(lastitem) + dw_container_delete_row(hwndContainer, (char *)lastitem); + } + setfoldercount(mf, count - deleted); + } + return TRUE; +} + +/* Callback to handle right clicks on the container */ +int DWSIGNAL containercontextmenu(HWND hwnd, char *text, int x, int y, void *data) +{ + if(text) + { + HMENUI hwndMenu, submenu; + HWND menuitem; + + hwndMenu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("New Message", 20), IDM_NEWMESS, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(new_message), NULL); + + menuitem = dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + submenu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(submenu, locale_string("Including Quoting", 20), IDM_REPLYQ, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(replyq_message), (void *)text); + menuitem = dw_menu_append_item(submenu, locale_string("Excluding Quoting", 20), IDM_REPLY, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(reply_message), (void *)text); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("Reply To", 20), IDM_REPLY, 0L, TRUE, FALSE, submenu); + + submenu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(submenu, locale_string("Including Quoting", 20), IDM_REPLYALLQ, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(replyallq_message), (void *)text); + menuitem = dw_menu_append_item(submenu, locale_string("Excluding Quoting", 20), IDM_REPLYALL, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(replyall_message), (void *)text); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("Reply To All", 20), IDM_REPLY, 0L, TRUE, FALSE, submenu); + + menuitem = dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("Delete", 21), IDM_DELITEM, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(deleteitem), (void *)text); + dw_menu_popup(&hwndMenu, hwndFrame, x, y); + } + + return FALSE; +} + +/* Callback to handle right clicks on the container */ +static int DWSIGNAL treecontextmenu(HWND hwnd, char *text, int x, int y, void *data, void *itemdata) +{ + if(text) + { + HMENUI hwndMenu; + HWND menuitem; + + hwndMenu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("New Folder", 20), IDM_NEWFOLD, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(new_folder), itemdata); + + menuitem = dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("Account Settings", 20), IDM_ACCOUNT, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(account_dialog), itemdata); + + if(strcasecmp(text, "Trash") == 0) + { + menuitem = dw_menu_append_item(hwndMenu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(hwndMenu, locale_string("Empty Trash", 20), IDM_TRASH, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(empty_trash), itemdata); + } + dw_menu_popup(&hwndMenu, hwndFrame, x, y); + } + return TRUE; +} + +/* Open a mail viewer window when double clicking on a mail item */ +int DWSIGNAL containerselect(HWND hwnd, char *text, void *data) +{ + MailItem *mi = (MailItem *)text; + int plug = (int)dw_window_get_data(hwndContainer, "plug"); + + if(mi && mi->Type == DATA_TYPE_ITEM) + { + unsigned long len; + char *mytext = plugin_list[plug].getmail(mi->Acc, mi->Folder, mi, &len); + + if(mytext) + { + MailParsed *mp = malloc(sizeof(MailParsed)); + + char *view = parse_message(mytext, len, mp); + + message_dialog(mp, TRUE, FALSE, view); + plugin_list[plug].free(mi->Acc, mytext); + } + } + return TRUE; +} + +/* Display the mail in the preview window */ +int DWSIGNAL containerfocus(HWND hwnd, HWND treeitem, char *text, void *data) +{ + MailItem *mi = (MailItem *)text; + int plug = (int)dw_window_get_data(hwndContainer, "plug"); + + if(mi && mi->Type == DATA_TYPE_ITEM) + { + unsigned long len; + char *mytext = plugin_list[plug].getmail(mi->Acc, mi->Folder, mi, &len); + HWND mle = (HWND)dw_window_get_data(hwnd, "mle"); + + if(mytext) + { + if(mle) + { + char *view = parse_message(mytext, len, NULL); + + dw_mle_clear(mle); + dw_mle_import(mle, view, -1); + dw_mle_set_cursor(mle, 0); + } + plugin_list[plug].free(mi->Acc, mytext); + } + } + return TRUE; +} + +/* Update the message list when a user selects a tree item */ +int DWSIGNAL tree_select(HWND handle, HTREEITEM item, char *text, void *date, void *itemdata) +{ + void *cdata = dw_window_get_data(hwndContainer, "items"); + MailFolder *mf = (MailFolder *)itemdata; + int clear = TRUE; + HWND mle = (HWND)dw_window_get_data(hwndContainer, "mle"); + int plug = (int)dw_window_get_data(hwndContainer, "plug"); + MailItem *olditems = (MailItem *)cdata; + int count = 0; + + /* Don't redraw if we don't have to */ + if(olditems && olditems->Type == DATA_TYPE_ITEM && olditems->Folder == mf) + return TRUE; + + dw_window_set_data(hwndContainer, "items", NULL); + + if(mle) + dw_mle_clear(mle); + + /* If the user clicked on a tree folder, populate the container + * with the contents of that folder. Otherwise clear the container. + */ + if(mf && mf->Type == DATA_TYPE_FOLDER) + { + MailItem *mi; + AccountInfo *ai = findaccount(mf); + + if(ai) + { + plug = ai->Plug; + dw_window_set_data(hwndContainer, "plug", (void *)plug); + dw_window_set_data(hwndContainer, "account", (void *)ai); + + mi = plugin_list[plug].getitems(mf->Acc, mf); + + dw_window_set_data(hwndContainer, "items", mi); + + if(mi) + { + void *containerinfo; + int z; + + while(mi[count].Id) + count++; + + if(count) + { + dw_container_clear(hwndContainer, FALSE); + + containerinfo = dw_container_alloc(hwndContainer, count); + + for(z=0;z<count;z++) + { + unsigned long size = mi[z].Size; + char *Topic = mi[z].Topic; + char *From = mi[z].From; + + /* Icons */ + dw_container_set_item(hwndContainer, containerinfo, 0, z, &fileicon); + dw_container_set_item(hwndContainer, containerinfo, 1, z, &foldericon); + dw_container_set_item(hwndContainer, containerinfo, 2, z, &Topic); + dw_container_set_item(hwndContainer, containerinfo, 3, z, &From); + /* Date and Time */ + dw_container_set_item(hwndContainer, containerinfo, 4, z, &(mi[z].Date)); + dw_container_set_item(hwndContainer, containerinfo, 5, z, &(mi[z].Time)); + dw_container_set_item(hwndContainer, containerinfo, 6, z, &size); + dw_container_set_row_title(containerinfo, z, (char *)&(mi[z])); + } + + dw_container_insert(hwndContainer, containerinfo, count); + dw_container_optimize(hwndContainer); + clear = FALSE; + } + } + } + + if(clear) + dw_container_clear(hwndContainer, TRUE); + } + else + dw_container_clear(hwndContainer, TRUE); + if(mf && cdata) + plugin_list[plug].free(mf->Acc, cdata); + setfoldercount(mf, count); + return TRUE; +} + +int DWSIGNAL exitfunc(HWND hwnd, void *data) +{ + if(dw_messagebox("DynamicMail", DW_MB_YESNO | DW_MB_QUESTION, "Are you sure you want to exit DynamicMail?")) + { + /* Destroy the main window */ + dw_window_destroy(hwndFrame); + dw_exit(0); + } + return TRUE; +} + +/* Delete event */ +int DWSIGNAL message_deleteevent(HWND hwnd, void *data) +{ + int readonly = (int)dw_window_get_data(hwnd, "readonly"); + + if(readonly || (!readonly && dw_messagebox("DynamicMail", DW_MB_YESNO | DW_MB_QUESTION, "Are you sure you want to close this unsent message?"))) + { + MailParsed *mp = (MailParsed *)dw_window_get_data(hwnd, "MailParsed"); + + if(mp) + { + parse_free(mp); + free(mp); + } + dw_window_destroy(hwnd); + } + return TRUE; +} + +/* Handle user request to show a raw message */ +int DWSIGNAL show_raw(HWND hwnd, void *data) +{ + HWND window = (HWND)data; + HWND mle = (HWND)dw_window_get_data(window, "mle"); + MailParsed *mp = (MailParsed *)dw_window_get_data(window, "MailParsed"); + + if(mp) + { + dw_mle_clear(mle); + if(dw_window_get_data(window, "raw")) + { + dw_window_set_data(window, "raw", 0); + if(mp->text && mp->text[0]) + dw_mle_import(mle, mp->text[0], -1); + else if(mp->html && mp->html[0]) + dw_mle_import(mle, mp->html[0], -1); + } + else + { + dw_window_set_data(window, "raw", (void *)1); + if(mp->raw) + dw_mle_import(mle, mp->raw, -1); + } + dw_mle_set_cursor(mle, 0); + } + return 0; +} + +/* Handle user request to save the main window position */ +int DWSIGNAL save_position(HWND hwnd, void *data) +{ + float pos; + HWND hsplit = (HWND)dw_window_get_data(hwndFrame, "hsplit"); + HWND vsplit = (HWND)dw_window_get_data(hwndFrame, "vsplit"); + + dw_window_get_pos_size(hwndFrame, &config.x, &config.y, &config.width, &config.height); + if(hsplit) + { + pos = dw_splitbar_get(hsplit); + config.hsplit = (unsigned long)pos; + } + if(vsplit) + { + pos = dw_splitbar_get(vsplit); + config.vsplit = (unsigned long)pos; + } + saveconfig(); + return TRUE; +} + +/* Handle user request to send newly composed message */ +int DWSIGNAL send_message(HWND hwnd, void *data) +{ + HWND window = (HWND)data; + HWND mle = (HWND)dw_window_get_data(window, "mle"); + HWND to = (HWND)dw_window_get_data(window, "entry1"); + HWND from = (HWND)dw_window_get_data(window, "entry2"); + HWND subject = (HWND)dw_window_get_data(window, "entry3"); + HWND listbox1 = (HWND)dw_window_get_data(window, "listbox1"); + HWND listbox2 = (HWND)dw_window_get_data(window, "listbox2"); + int lcount, len, n; + AccountInfo *ai = (AccountInfo *)dw_window_get_data(hwndContainer, "account"); + MailItem mi; + MailFolder *mf = NULL; + char *text, tmpbuf[41]; + DWEnv env; + time_t now; + struct tm time_val; + + if(!ai) + ai = &AccountList[0]; + + if(dw_window_get_data(window, "readonly")) + return TRUE; + + memset(&mi, 0, sizeof(MailItem)); + + text = dw_window_get_text(to); + + /* Query user entered text */ + if(text) + { + if(*text) + strcpy(mi.To, text); + dw_free(text); + } + + text = dw_window_get_text(subject); + if(text) + { + strcpy(mi.Topic, text); + dw_free(text); + } + + /* User the email from the account settings for sending */ + sprintf(mi.From, "%s <%s>", ai->Settings.UserRealName, + ai->Settings.UserEmail); + + lcount = dw_listbox_count(listbox1); + + if(!mi.To[0] && lcount) + dw_listbox_get_text(listbox1, 0, mi.To, MAIL_ITEM_MAX); + + /* FIXME: This should query the text length! */ + text = calloc(1, 200000); + + /* Create a header */ + dw_environment_query(&env); + now = time(NULL); + time_val = *localtime(&now); + strftime(tmpbuf, 40, "%a, %d %b %Y %H:%M:%S", &time_val); + strcat(text, tmpbuf); + + sprintf(text, "Date: %s\r\nFrom: %s\r\nUser-Agent: DynamicMail 0.1 (%s %d.%d)\r\nMIME-Version: 1.0\r\nTo: ", + tmpbuf, mi.From, env.osName, env.MajorVersion, env.MinorVersion); + + strcat(text, mi.To); + + /* Create the to line */ + for(n=0;n<lcount;n++) + { + char To[MAIL_ITEM_MAX+1]; + + dw_listbox_get_text(listbox1, n, To, MAIL_ITEM_MAX); + if(To[0] && (n || (!n && strncmp(mi.To, To, MAIL_ITEM_MAX)))) + { + strcat(text, ",\r\n "); + strcat(text, To); + } + } + + /* If the Reply-to information is set, use it */ + if(ai->Settings.ReplyRealName[0] && ai->Settings.ReplyEmail[0]) + { + strcat(text, "\r\nReply-to: "); + strcat(text, ai->Settings.ReplyRealName); + strcat(text, " <"); + strcat(text, ai->Settings.ReplyEmail); + strcat(text, ">"); + } + /* Create the subject and content lines */ + strcat(text, "\r\nSubject: "); + strcat(text, mi.Topic); + strcat(text, "\r\nContent-Type: text/plain\r\nContent-Transfer-Encoding: 7bit\r\n\r\n"); + + n=0; + + len = strlen(text); + dw_mle_export(mle, &text[len], 0, 200000 - len); + + /* Find the outbox */ + while(ai->Folders[n].Name[0]) + { + if(strcmp(ai->Folders[n].Name, "Outbox") == 0) + { + mf = &ai->Folders[n]; + break; + } + n++; + } + + /* Save the new message to the outbox */ + if(mf) + { + mi.Size = strlen(text); + init_date_time(&mi.Date, &mi.Time); + plugin_list[ai->Plug].newitem(ai->Acc, mf, &mi); + plugin_list[ai->Plug].newmail(ai->Acc, mf, &mi, text, mi.Size); + } + + /* Cleanup */ + free(text); + + /* Tell the send thread to go! */ + dw_event_post(ai->SendEve); + + /* Destroy the compose window */ + dw_window_destroy(window); + return TRUE; +} + +/* Handle user request to send messages waiting in the outbox */ +int DWSIGNAL send_mail(HWND hwnd, void *data) +{ + AccountInfo *ai = (AccountInfo *)dw_window_get_data(hwndContainer, "account"); + + /* Tell the send thread to go! */ + dw_event_post(ai->SendEve); + + return TRUE; +} + +/* Handle user request to check mail */ +int DWSIGNAL check_mail(HWND hwnd, void *data) +{ + int z; + + for(z=0;z<ACCOUNT_MAX;z++) + { + if(AccountList[z].Acc) + dw_event_post(AccountList[z].RecvEve); + + } + return TRUE; +} + +ULONG messageItems[]= +{ + NEWTAB , REMOVETAB , TB_SEPARATOR, CONNECT , DISCONNECT , + TB_SEPARATOR, IDM_EXIT , TB_SEPARATOR, REMOVEFROMQ , ADDTOQ , + FLUSHQ , TB_SEPARATOR, SAVETITLE , UNSAVETITLE , TB_SEPARATOR, + PB_CHANGE , TB_SEPARATOR, IDM_PREFERENCES , ADMIN , TB_SEPARATOR, + IDM_GENERALHELP, IDM_ABOUT , 0 +}; + +char messageHelpItems[][100]= +{ + "Send Message", "Remove Tab", "", "Connect", "Disconnect", + "", "Exit", "", "Remove From Queue", "Add to Queue", + "Flush Queue", "", "Save Title", "Unsave Title", "", + "Refresh", "", "Preferences", "Toggle Raw Message", "", + "General Help", "About" +}; + +void *messageFunctions[] = { (void *)send_message, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, (void *)show_raw, + NULL, NULL }; + +/* Generic multi-use function for creating mail reading and composing windows */ +int message_dialog(MailParsed *mp, int readonly, int reply, char *text) +{ + HWND window, mainbox, toolbox, hbox, stext, entry, mle, button, listbox, controlbox, tempbutton, menuitem; + HMENUI menu; + ULONG flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR | DW_FCF_SIZEBORDER | DW_FCF_MINMAX | + DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER; + int z = 0; + + window = dw_window_new(HWND_DESKTOP, mp ? (mp->topic ? mp->topic : "") : "New Message", flStyle); + + dw_window_set_icon(window, MAIN_FRAME); + + if(readonly) + dw_window_set_data(window, "readonly", (void *)1); + + if(mp) + dw_window_set_data(window, "MailParsed", (void *)mp); + + mainbox = dw_box_new(BOXVERT, 0); + + dw_box_pack_start(window, mainbox, 0, 0, TRUE, TRUE, 0); + + toolbox = dw_box_new(BOXHORZ, 1); + + dw_box_pack_start(mainbox, toolbox, 0, 0, TRUE, FALSE, 0); + + /* Create the toolbar */ + while(messageItems[z]) + { + if(messageItems[z] != -1) + { + tempbutton = dw_bitmapbutton_new(messageHelpItems[z], messageItems[z]); + + if(messageFunctions[z]) + dw_signal_connect(tempbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(messageFunctions[z]), (void *)window); + + dw_box_pack_start(toolbox, tempbutton, 30, 30, FALSE, FALSE, 0); + } + else + dw_box_pack_start(toolbox, 0, 5, 30, FALSE, FALSE, 0); + z++; + } + dw_box_pack_start(toolbox, 0, 3, 30, TRUE, FALSE, 0); + + hbox = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(mainbox, hbox, 0, 0, TRUE, FALSE, 0); + + if(readonly) + stext = dw_text_new("From:", 0); + else + stext = dw_text_new("To:", 0); + dw_window_set_style(stext, DW_DT_VCENTER | DW_DT_CENTER, DW_DT_VCENTER | DW_DT_CENTER); + + dw_box_pack_start(hbox, stext, 40, 22, FALSE, FALSE, 0); + + entry = dw_entryfield_new("", 0); + dw_entryfield_set_limit(entry, MAIL_ITEM_MAX); + + dw_window_set_data(window, "entry1", (void *)entry); + + if(mp && readonly) + dw_window_set_text(entry, mp->from); + + if(readonly) + dw_window_disable(entry); + + dw_box_pack_start(hbox, entry, 100, 22, TRUE, FALSE, 0); + + if(readonly) + { + stext = dw_text_new("Date:", 0); + dw_window_set_style(stext, DW_DT_VCENTER | DW_DT_CENTER, DW_DT_VCENTER | DW_DT_CENTER); + + dw_box_pack_start(hbox, stext, 40, 22, FALSE, FALSE, 0); + } + else + { + button = dw_button_new("Cc:", 0); + + dw_box_pack_start(hbox, button, 40, 22, FALSE, FALSE, 0); + } + + entry = dw_entryfield_new("", 0); + dw_entryfield_set_limit(entry, MAIL_ITEM_MAX); + + dw_window_set_data(window, "entry2", (void *)entry); + + if(readonly) + { + dw_window_disable(entry); + + if(mp && mp->date) + dw_window_set_text(entry, mp->date); + } + + dw_box_pack_start(hbox, entry, 100, 22, TRUE, FALSE, 0); + + hbox = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(mainbox, hbox, 0, 0, TRUE, FALSE, 0); + + if(readonly) + { + stext = dw_text_new("To:", 0); + dw_window_set_style(stext, DW_DT_TOP | DW_DT_CENTER, DW_DT_TOP | DW_DT_CENTER); + + dw_box_pack_start(hbox, stext, 40, 44, FALSE, FALSE, 0); + } + + listbox = dw_listbox_new(0, FALSE); + + dw_window_set_data(window, "listbox1", (void *)listbox); + + if(readonly || reply) + { + if(mp) + { + /* Fill in all the to addresses into the listbox */ + int n = 0; + + if(reply && mp) + { + if(mp->replyto) + dw_listbox_append(listbox, mp->replyto); + else + dw_listbox_append(listbox, mp->from); + } + + if(reply == IDM_REPLYALL || reply == IDM_REPLYALLQ || !reply) + { + while(mp->to[n] && n < MAX_TO_ADDRESSES) + { + dw_listbox_append(listbox, mp->to[n]); + n++; + } + } + } + if(readonly) + dw_window_disable(listbox); + } + + dw_box_pack_start(hbox, listbox, 100, 44, TRUE, FALSE, 0); + + if(readonly) + { + stext = dw_text_new("Cc:", 0); + dw_window_set_style(stext, DW_DT_TOP | DW_DT_CENTER, DW_DT_TOP | DW_DT_CENTER); + + dw_box_pack_start(hbox, stext, 40, 44, FALSE, FALSE, 0); + } + + listbox = dw_listbox_new(0, FALSE); + + dw_window_set_data(window, "listbox2", (void *)listbox); + + if(readonly) + dw_window_disable(listbox); + + dw_box_pack_start(hbox, listbox, 100, 44, TRUE, FALSE, 0); + + hbox = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(mainbox, hbox, 0, 0, TRUE, FALSE, 0); + + stext = dw_text_new("Subject:", 0); + dw_window_set_style(stext, DW_DT_VCENTER | DW_DT_CENTER, DW_DT_VCENTER | DW_DT_CENTER); + + dw_box_pack_start(hbox, stext, 50, 22, FALSE, FALSE, 0); + + entry = dw_entryfield_new("", 0); + dw_entryfield_set_limit(entry, MAIL_ITEM_MAX); + + dw_window_set_data(window, "entry3", (void *)entry); + + if(mp) + { + if(reply && strncasecmp(mp->topic, "Re:", 3)) + { + char *tmp = malloc(strlen(mp->topic) + 5); + + sprintf(tmp, "Re: %s", mp->topic); + dw_window_set_text(entry, tmp); + free(tmp); + } + else + dw_window_set_text(entry, mp->topic); + } + + if(readonly) + dw_window_disable(entry); + + dw_box_pack_start(hbox, entry, 100, 22, TRUE, FALSE, 0); + + mle = dw_mle_new(0); + + dw_window_set_data(window, "mle", (void *)mle); + + if(reply == IDM_REPLYQ || reply == IDM_REPLYALLQ) + { + char *oldtext = NULL; + + if(mp && mp->text && mp->text[0]) + oldtext = mp->text[0]; + else if(mp && mp->html && mp->html[0]) + oldtext = mp->html[0]; + else + oldtext = text; + + if(oldtext) + { + int lines = count_lines(oldtext); + char *newtext = malloc(strlen(oldtext) + lines + 1); + make_reply(oldtext, newtext); + dw_mle_import(mle, newtext, -1); + dw_mle_set_cursor(mle, 0); + free(newtext); + } + } + else if(!reply) + { + if(mp && mp->text && mp->text[0]) + dw_mle_import(mle, mp->text[0], -1); + else if(mp && mp->html && mp->html[0]) + dw_mle_import(mle, mp->html[0], -1); + else if(text) + dw_mle_import(mle, text, -1); + dw_mle_set_cursor(mle, 0); + } + + dw_mle_set_editable(mle, readonly ? FALSE : TRUE); + dw_mle_set_word_wrap(mle, TRUE); + + dw_window_set_color(mle, DW_CLR_BLACK, DW_CLR_WHITE); + + dw_box_pack_start(mainbox, mle, 100, 100, TRUE, TRUE, 0); + + controlbox = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(mainbox, controlbox, 0, 0, TRUE, FALSE, 0); + + stext = dw_status_text_new("Welcome to DynamicMail.", 1026); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext, 100, 15, TRUE, FALSE, 2); + + stext = dw_status_text_new("Normal", 1026); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext, 50, 15, FALSE, FALSE, 2); + + stext = dw_status_text_new("MIME", 1026); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext, 50, 15, FALSE, FALSE, 2); + + menubar = dw_menubar_new(window); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, locale_string("Send", 20), IDM_SEND, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(send_message), (void *)window); + + menuitem = dw_menu_append_item(menu, locale_string("Save", 20), IDM_SAVE, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(menu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(menu, locale_string("Toggle Raw", 20), IDM_RAWTOG, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(show_raw), (void *)window); + + menuitem = dw_menu_append_item(menubar, locale_string("~Message", 2), IDM_MESSAGE, 0L, TRUE, FALSE, menu); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, locale_string("~General Help", 20), IDM_GENERALHELP, 0L, TRUE, FALSE, DW_NOMENU); + + dw_menu_append_item(menu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + menuitem = dw_menu_append_item(menu, locale_string("~About", 23), IDM_ABOUT, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(menubar, locale_string("~Help", 2), IDM_HELP, 0L, TRUE, FALSE, menu); + + dw_signal_connect(window, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(message_deleteevent), NULL); + + dw_window_show(window); + + return TRUE; +} + +/* User wants to compose a message */ +int DWSIGNAL new_message(HWND hwnd, void *data) +{ + return message_dialog(NULL, FALSE, FALSE, NULL); +} + + +void reply_dialog(HWND hwnd, MailItem *mi, int reply) +{ + int plug = (int)dw_window_get_data(hwndContainer, "plug"); + + if(mi && mi->Type == DATA_TYPE_ITEM) + { + unsigned long len; + char *mytext = plugin_list[plug].getmail(mi->Acc, mi->Folder, mi, &len); + + if(mytext) + { + MailParsed *mp = malloc(sizeof(MailParsed)); + + char *view = parse_message(mytext, len, mp); + + message_dialog(mp, FALSE, reply, view); + plugin_list[plug].free(mi->Acc, mytext); + } + } +} + +/* Tree context handlers */ +int DWSIGNAL empty_trash(HWND hwnd, void *data) +{ + MailFolder *mf = (MailFolder *)data; + int n = 0, plug = (int)dw_window_get_data(hwndContainer, "plug"); + MailItem *mi = plugin_list[plug].getitems(mf->Acc, mf); + HWND mle = (HWND)dw_window_get_data(hwndContainer, "mle"); + + if(mi) + { + if(mle) + dw_mle_clear(mle); + + dw_container_clear(hwndContainer, TRUE); + while(mi[n].Id) + { + plugin_list[plug].delitem(mi[n].Acc, mi[n].Folder, &mi[n]); + n++; + } + setfoldercount(mf, 0); + } + return TRUE; +} + +int DWSIGNAL new_folder(HWND hwnd, void *data) +{ + return TRUE; +} + +/* User wants to compose a message reply */ +int DWSIGNAL reply_message(HWND hwnd, void *data) +{ + reply_dialog(hwnd, (MailItem *)data, IDM_REPLY); + return TRUE; +} + +int DWSIGNAL replyq_message(HWND hwnd, void *data) +{ + reply_dialog(hwnd, (MailItem *)data, IDM_REPLYQ); + return TRUE; +} + +int DWSIGNAL replyall_message(HWND hwnd, void *data) +{ + reply_dialog(hwnd, (MailItem *)data, IDM_REPLYALL); + return TRUE; +} + +int DWSIGNAL replyallq_message(HWND hwnd, void *data) +{ + reply_dialog(hwnd, (MailItem *)data, IDM_REPLYALLQ); + return TRUE; +} + +ULONG mainItems[]= +{ + NEWTAB , REMOVETAB , TB_SEPARATOR, CONNECT , DISCONNECT , + TB_SEPARATOR, IDM_EXIT , TB_SEPARATOR, REMOVEFROMQ , ADDTOQ , + FLUSHQ , TB_SEPARATOR, SAVETITLE , UNSAVETITLE , TB_SEPARATOR, + PB_CHANGE , TB_SEPARATOR, IDM_PREFERENCES , ADMIN , TB_SEPARATOR, + IDM_GENERALHELP, IDM_ABOUT , 0 +}; + +char mainHelpItems[][100]= +{ + "Check Mail", "Send Mail", "", "Connect", "Disconnect", + "", "Exit", "", "Remove From Queue", "Add to Queue", + "Flush Queue", "", "Save Title", "Unsave Title", "", + "Refresh", "", "Preferences", "Site Administration", "", + "General Help", "About" +}; + +void *mainFunctions[] = { (void *)check_mail, (void *)send_mail, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, + NULL, NULL }; + +/* Create the main window with a notebook and a menu. */ +void dmail_init(void) +{ + HWND mainbox, toolbox, tempbutton, menuitem, controlbox, mle, splitbar, vsplitbar; + HMENUI menu; + float pos; + ULONG flStyle = DW_FCF_SYSMENU | DW_FCF_TITLEBAR | DW_FCF_SIZEBORDER | DW_FCF_MINMAX | + DW_FCF_SHELLPOSITION | DW_FCF_TASKLIST | DW_FCF_DLGBORDER; + char *titles[7] = { "", "", "Topic", "From", "Date", "Time", "Size" }; + unsigned long flags[7] = { + DW_CFA_BITMAPORICON | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR, + DW_CFA_BITMAPORICON | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR, + DW_CFA_STRING | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR, + DW_CFA_STRING | DW_CFA_LEFT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR, + DW_CFA_DATE | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR, + DW_CFA_TIME | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR, + DW_CFA_ULONG | DW_CFA_RIGHT | DW_CFA_HORZSEPARATOR | DW_CFA_SEPARATOR }; + int z = 0; + + hwndFrame = dw_window_new(HWND_DESKTOP, "DynamicMail", flStyle); + + dw_window_set_icon(hwndFrame, MAIN_FRAME); + + mainbox = dw_box_new(BOXVERT, 0); + + dw_box_pack_start(hwndFrame, mainbox, 0, 0, TRUE, TRUE, 0); + + toolbox = dw_box_new(BOXHORZ, 1); + + dw_box_pack_start(mainbox, toolbox, 0, 0, TRUE, FALSE, 0); + + /* Create the toolbar */ + while(mainItems[z]) + { + if(mainItems[z] != -1) + { + tempbutton = dw_bitmapbutton_new(mainHelpItems[z], mainItems[z]); + + if(messageFunctions[z]) + dw_signal_connect(tempbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(mainFunctions[z]), (void *)mainItems[z]); + + dw_box_pack_start(toolbox, tempbutton, 30, 30, FALSE, FALSE, 0); + } + else + dw_box_pack_start(toolbox, 0, 5, 30, FALSE, FALSE, 0); + z++; + } + dw_box_pack_start(toolbox, 0, 3, 30, TRUE, FALSE, 0); + + hwndTree = dw_tree_new(1050L); + + dw_signal_connect(hwndTree, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(tree_select), NULL); + + hwndContainer = dw_container_new(117L, TRUE); + + if(!dw_container_setup(hwndContainer, flags, titles, 7, 3)) + dw_messagebox("DynamicMail", DW_MB_OK | DW_MB_ERROR, "Error Creating Container!"); + + dw_container_set_column_width(hwndContainer, 0, 18); + dw_container_set_column_width(hwndContainer, 1, 18); + dw_container_set_column_width(hwndContainer, 2, 300); + + dw_signal_connect(hwndContainer, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(containerselect), NULL); + dw_signal_connect(hwndContainer, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(containercontextmenu), NULL); + dw_signal_connect(hwndContainer, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(containerfocus), NULL); + dw_signal_connect(hwndTree, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(treecontextmenu), NULL); + + mle = dw_mle_new(1040); + + dw_window_set_data(hwndContainer, "mle", (void *)mle); + + dw_window_set_color(mle, DW_CLR_BLACK, DW_CLR_WHITE); + + dw_mle_set_word_wrap(mle, TRUE); + dw_mle_set_editable(mle, FALSE); + + vsplitbar = dw_splitbar_new(BOXVERT, hwndContainer, mle, 0); + if(config.vsplit) + { + pos = (float)config.vsplit; + dw_splitbar_set(vsplitbar, pos); + } + else + dw_splitbar_set(vsplitbar, 30.0); + + splitbar = dw_splitbar_new(BOXHORZ, hwndTree, vsplitbar, 0); + if(config.hsplit) + { + pos = (float)config.hsplit; + dw_splitbar_set(splitbar, pos); + } + else + dw_splitbar_set(splitbar, 15.0); + + dw_window_set_data(hwndFrame, "hsplit", (void *)splitbar); + dw_window_set_data(hwndFrame, "vsplit", (void *)vsplitbar); + + dw_box_pack_start(mainbox, splitbar, 1, 1, TRUE, TRUE, 0); + + controlbox = dw_box_new(BOXHORZ, 0); + + dw_box_pack_start(mainbox, controlbox, 0, 0, TRUE, FALSE, 0); + + stext1 = dw_status_text_new("Welcome to DynamicMail.", 1026); + + dw_window_set_style(stext1, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext1, 20, 15, TRUE, FALSE, 2); + + stext2 = dw_status_text_new("Receive idle.", 1026); + + dw_window_set_style(stext2, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext2, 20, 15, TRUE, FALSE, 2); + + stext3 = dw_status_text_new("Send idle.", 1026); + + dw_window_set_style(stext3, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(controlbox, stext3, 20, 15, TRUE, FALSE, 2); + + menubar = dw_menubar_new(hwndFrame); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, "~Check Mail", IDM_CHECK, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(check_mail), NULL); + + menuitem = dw_menu_append_item(menu, "~Send Mail", IDM_SENDMAIL, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(send_mail), NULL); + + dw_menu_append_item(menu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(menu, "~Exit", IDM_EXIT, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(exitfunc), NULL); + + dw_menu_append_item(menubar, "~File", IDM_FILE, 0L, TRUE, FALSE, menu); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, locale_string("New Message", 20), IDM_NEWMESS, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(new_message), NULL); + + menuitem = dw_menu_append_item(menubar, locale_string("~Messages", 2), IDM_MESSAGE, 0L, TRUE, FALSE, menu); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, locale_string("Save Position", 20), IDM_SAVEPOS, 0L, TRUE, FALSE, DW_NOMENU); + dw_signal_connect(menuitem, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(save_position), NULL); + + menuitem = dw_menu_append_item(menubar, locale_string("~Tools", 2), IDM_TOOLS, 0L, TRUE, FALSE, menu); + + menu = dw_menu_new(0L); + + menuitem = dw_menu_append_item(menu, locale_string("~General Help", 20), IDM_GENERALHELP, 0L, TRUE, FALSE, DW_NOMENU); + + dw_menu_append_item(menu, "", 0L, 0L, TRUE, FALSE, DW_NOMENU); + menuitem = dw_menu_append_item(menu, locale_string("~About", 23), IDM_ABOUT, 0L, TRUE, FALSE, DW_NOMENU); + + menuitem = dw_menu_append_item(menubar, locale_string("~Help", 2), IDM_HELP, 0L, TRUE, FALSE, menu); +} + + +/* Save settings */ +void saveconfig(void) +{ + FILE *fp; + + if((fp = fopen("dmail.ini", "w")) != NULL) + { + int z = 0; + + while(config.plugins[z] && z < PLUGIN_MAX) + { + fprintf(fp, "PLUGIN=%s\n", config.plugins[z]); + z++; + } + z = 0; + while(config.accounts[z] && z < ACCOUNT_MAX) + { + fprintf(fp, "ACCOUNT=%s\n", config.accounts[z]); + z++; + } + fprintf(fp, "X=%d\n", (int)config.x); + fprintf(fp, "Y=%d\n", (int)config.y); + fprintf(fp, "WIDTH=%d\n", (int)config.width); + fprintf(fp, "HEIGHT=%d\n", (int)config.height); + fprintf(fp, "HSPLIT=%d\n", (int)config.hsplit); + fprintf(fp, "VSPLIT=%d\n", (int)config.vsplit); + fclose(fp); + } +} + +/* Load settings */ +void loadconfig(void) +{ + FILE *fp; + char entry[256], entrydata[256]; + + if((fp = fopen("dmail.ini", "r")) != NULL) + { + int account = 0, plugin = 0; + + while(!feof(fp)) + { + getline(fp, entry, entrydata); + if(strcasecmp(entry, "plugin")==0 && plugin < PLUGIN_MAX) + { + config.plugins[plugin] = strdup(entrydata); + plugin++; + } + if(strcasecmp(entry, "account")==0 && plugin < PLUGIN_MAX) + { + config.accounts[account] = strdup(entrydata); + account++; + } + if(strcasecmp(entry, "x")==0) + config.x = atoi(entrydata); + if(strcasecmp(entry, "y")==0) + config.y = atoi(entrydata); + if(strcasecmp(entry, "width")==0) + config.width = atoi(entrydata); + if(strcasecmp(entry, "height")==0) + config.height = atoi(entrydata); + if(strcasecmp(entry, "hsplit")==0) + config.hsplit = atoi(entrydata); + if(strcasecmp(entry, "vsplit")==0) + config.vsplit = atoi(entrydata); + } + fclose(fp); + } +} + +/* The main entry point. Notice we don't use WinMain() on Windows */ +int main(int argc, char *argv[]) +{ + int cx, cy, z = 0; + + dw_init(TRUE, argc, argv); + + sockinit(); + + srand(time(NULL)); + + cx = dw_screen_width(); + cy = dw_screen_height(); + + mutex = dw_mutex_new(); + + loadconfig(); + + dmail_init(); + + fileicon = dw_icon_load(0,FILEICON); + foldericon = dw_icon_load(0,FOLDERICON); + linkicon = dw_icon_load(0,LINKICON); + + /* If there is no config file... then automatically + * load the minimal plugin so the program won't be + * broken by default. + */ + if(!config.plugins[0]) + config.plugins[0] = strdup("minimal"); + + while(config.plugins[z] && z < PLUGIN_MAX) + { + if(load_backend(config.plugins[z])) + dw_messagebox("DynamicMail", DW_MB_OK | DW_MB_ERROR, "Could not load backend \"%s\"!", config.plugins[z]); + z++; + } + + dmail_init_tree(); + + if(hwndFrame) + { + dw_window_set_icon(hwndFrame, MAIN_FRAME); + + dw_signal_connect(hwndFrame, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(exitfunc), NULL); + + /* Reload old position if possible */ + if(config.width && config.height) + { + dw_window_set_pos_size(hwndFrame, config.x, config.y, + config.width, config.height); + } + else + { + dw_window_set_pos_size(hwndFrame, cx / 8, + cy / 8, + (cx / 4) * 3, + (cy / 4) * 3); + } + + dw_window_show(hwndFrame); + + dw_main(); + + dw_window_destroy(hwndFrame); + } + + sockshutdown(); + + dw_icon_free(foldericon); + dw_icon_free(foldericon); + dw_icon_free(linkicon); + + dw_mutex_close(mutex); + + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmail.def Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,5 @@ +NAME DMAIL WINDOWAPI + +DESCRIPTION 'Dynamic Mail' + +STACKSIZE 65536
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmail.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,111 @@ +/* $Id: dmail.h,v 1.3 2003/12/11 21:07:55 nuke Exp $ */ +#ifndef _DMAIL_H +#define _DMAIL_H + +#define MAIN_FRAME 155 +#define ID_FILEMENU 156 +#define ID_EDITMENU 158 + +#define ID_TOOLBAR 1045 +#define ID_LPANE 1046 +#define ID_RPANE 1047 +#define ID_NOTEBOOK 1048 +#define ID_NOTEBOOKFR 1049 +#define ID_STATUS 1050 +#define ID_LIST 1051 +#define ID_MLE 1052 +#define ID_TOP 1053 + +#define PB_CHANGE 309 + +#define IDM_FILE 250 +#define IDM_EXIT 251 +#define IDM_HELP 252 +#define IDM_GENERALHELP 253 +#define IDM_ABOUT 254 +#define IDM_PREFERENCES 255 +#define IDM_MESSAGE 256 +#define IDM_NEWMESS 257 +#define IDM_SAVE 258 +#define IDM_SEND 259 +#define IDM_CHECK 260 +#define IDM_SENDMAIL 261 +#define IDM_DELITEM 262 +#define IDM_RAWTOG 263 +#define IDM_SAVEPOS 264 +#define IDM_TOOLS 265 +#define IDM_REPLY 266 +#define IDM_REPLYQ 267 +#define IDM_REPLYALL 268 +#define IDM_REPLYALLQ 269 +#define IDM_NEWFOLD 270 +#define IDM_TRASH 271 +#define IDM_ACCOUNT 272 + +#define CONNECT 335 +#define DISCONNECT 336 +#define ADDTOQ 337 +#define REMOVEFROMQ 338 +#define FLUSHQ 346 +#define ADMIN 349 +#define SAVETITLE 350 +#define UNSAVETITLE 351 +#define HOST_TITLE 352 +#define REMOVETAB 353 +#define PREFERENCES 354 +#define NEWTAB 355 +#define FILEICON 356 +#define FOLDERICON 357 +#define LINKICON 365 + +#define TB_SEPARATOR -1 + +#define LOGO 1300 + +#define ACCOUNT_MAX 20 + +#ifndef DW_RESOURCE +typedef struct { + int Type; + Account* Acc; + int Plug; + MailFolder* Folders; + AccountSettings Settings; + HEV SendEve, RecvEve; +} AccountInfo; + +typedef struct { + char *plugins[PLUGIN_MAX]; + char *accounts[ACCOUNT_MAX]; + unsigned long x, y, width, height; + unsigned long hsplit, vsplit; +} DmailConfig; + +/* Select an editor for the current build platform. */ +#if defined(__OS2__) || defined(__EMX__) +#define EDITOR "epm" +#define EDMODE DW_EXEC_GUI +#elif defined(__WIN32__) || defined(WINNT) +#define EDITOR "notepad" +#define EDMODE DW_EXEC_GUI +#else +#define EDITOR "vi" +#define EDMODE DW_EXEC_CON +#endif + +/* Prototypes */ +int DWSIGNAL new_message(HWND hwnd, void *data); +int DWSIGNAL reply_message(HWND hwnd, void *data); +int DWSIGNAL replyq_message(HWND hwnd, void *data); +int DWSIGNAL replyall_message(HWND hwnd, void *data); +int DWSIGNAL replyallq_message(HWND hwnd, void *data); +int DWSIGNAL empty_trash(HWND hwnd, void *data); +int DWSIGNAL new_folder(HWND hwnd, void *data); +void saveconfig(void); +void loadconfig(void); +AccountSettings *findsettings(void *opaque); +AccountInfo *findaccount(void *opaque); + +#endif +#endif +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmail.ini Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,7 @@ +PLUGIN=mysqlplg +X=128 +Y=96 +WIDTH=768 +HEIGHT=576 +HSPLIT=15 +VSPLIT=30
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmail.rc Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,39 @@ +/* $Id: dmail.rc,v 1.1 2002/12/21 09:12:24 nuke Exp $ */ + + +/* OS/2 Warp Resource Script File - Created by Universal Resource Editor */ + +#define INCL_WINSYS +#define INCL_WINSTDDLGS +#define INCL_WINSTDSPIN +#define INCL_NLS +#define INCL_SW + +#include <os2.h> + +#include "dmail.h" + + +BITMAP NEWTAB "os2\\newtab.bmp" +BITMAP REMOVETAB "os2\\remtab.bmp" +BITMAP CONNECT "os2\\connect.bmp" +BITMAP DISCONNECT "os2\\disconnect.bmp" +BITMAP IDM_EXIT "os2\\exit.bmp" +BITMAP ADDTOQ "os2\\queue.bmp" +BITMAP REMOVEFROMQ "os2\\unqueue.bmp" +BITMAP FLUSHQ "os2\\flush.bmp" +BITMAP SAVETITLE "os2\\save.bmp" +BITMAP UNSAVETITLE "os2\\unsave.bmp" +BITMAP ADMIN "os2\\admin.bmp" +BITMAP PB_CHANGE "os2\\change.bmp" +BITMAP IDM_PREFERENCES "os2\\preferences.bmp" +BITMAP IDM_GENERALHELP "os2\\help.bmp" +BITMAP IDM_ABOUT "os2\\about.bmp" + +BITMAP LOGO "os2\\handyftp.bmp" + +ICON MAIN_FRAME "os2\\handyftp.ico" +ICON FILEICON "os2\\FILE.ICO" +ICON FOLDERICON "os2\\FOLDER.ICO" +ICON LINKICON "os2\\LINK.ICO" +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dmailw.rc Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,27 @@ +/*#include <windows.h>*/ + +#include "dmail.h" + + +NEWTAB BITMAP "win\\newtab.bmp" +REMOVETAB BITMAP "win\\remtab.bmp" +CONNECT BITMAP "win\\connect.bmp" +DISCONNECT BITMAP "win\\disconnect.bmp" +IDM_EXIT BITMAP "win\\exit.bmp" +ADDTOQ BITMAP "win\\queue.bmp" +REMOVEFROMQ BITMAP "win\\unqueue.bmp" +FLUSHQ BITMAP "win\\flush.bmp" +SAVETITLE BITMAP "win\\save.bmp" +UNSAVETITLE BITMAP "win\\unsave.bmp" +ADMIN BITMAP "win\\admin.bmp" +PB_CHANGE BITMAP "win\\change.bmp" +IDM_PREFERENCES BITMAP "win\\preferences.bmp" +IDM_GENERALHELP BITMAP "win\\help.bmp" +IDM_ABOUT BITMAP "win\\about.bmp" + +LOGO BITMAP "win\\handyftp.bmp" + +MAIN_FRAME ICON "win\\handyftp.ico" +FILEICON ICON "win\\FILE.ICO" +FOLDERICON ICON "win\\FOLDER.ICO" +LINKICON ICON "win\\LINK.ICO"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/FILE.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,35 @@ +/* XPM */ +static char * FILE_xpm[] = { +"16 16 16 1", +" c None", +". c #000000", +"+ c #D5FFFF", +"@ c #F7F7F7", +"# c #8092AA", +"$ c #646464", +"% c #AADBFF", +"& c #F0F0F0", +"* c #E8E8E8", +"= c #D5DBFF", +"- c #5592AA", +"; c #E0E0E0", +"> c #2B92FF", +", c #2B6DAA", +"' c #556DAA", +") c #55DBFF", +" ", +" #########- ", +" #@@@@@@@#)$ ", +" #@@@@@@@>>,$ ", +" #@@@@@@&==%-$ ", +" #@@@@@@@+++=$ ", +" #@@@@@@&+++=$ ", +" #&&@*++%+++=$ ", +" #&&&*++++++%$ ", +" #**++%%%+++%$ ", +" #**++++%%++%$ ", +" -;;++%%%%%%%$ ", +" -;+++++%%%%%$ ", +" '###########$ ", +" $$$$$$$$$$$$ ", +" "};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/FOLDER.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,29 @@ +/* XPM */ +static char * FOLDER_xpm[] = { +"16 16 10 1", +" c None", +". c #000000", +"+ c #AA9200", +"@ c #FFFFAA", +"# c #FFDB55", +"$ c #AA6D00", +"% c #F7F7F7", +"& c #D59255", +"* c #FFDBAA", +"= c #D5B655", +" ", +" &&&& ", +" &%%%%& ", +"&%@@@@%+++++$ ", +"&@@@@@@%%%%%$ ", +"&@*++++++++++++ ", +"&#+%%%%%%%%%*%+$", +"&#+@@@@@@@@@#@+$", +"&#+@@@@@@@@@.@+$", +"&#+@@**@**@@=@+$", +"&#+@########=@+$", +"&#+@########=@+$", +" ++++++++++++++$", +" $$$$$$$$$$$$$ ", +" ", +" "};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/LINK.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,179 @@ +/* XPM */ +static char * LINK_xpm[] = { +"16 16 160 2", +" c None", +". c #8D8D8D", +"+ c #5C5C5C", +"@ c #6D6D6D", +"# c #C9C9C9", +"$ c #FAFAFA", +"% c #FFFFFF", +"& c #515353", +"* c #2D3A3D", +"= c #505051", +"- c #4C5757", +"; c #485858", +"> c #3A4041", +", c #3F3F3F", +"' c #414141", +") c #888888", +"! c #D0D0D0", +"~ c #F8F8F8", +"{ c #494B4B", +"] c #5B6C6E", +"^ c #C2B6B6", +"/ c #C1D2D1", +"( c #BCD7D8", +"_ c #889294", +": c #9C9C9C", +"< c #909090", +"[ c #545454", +"} c #7C7C7C", +"| c #494D4D", +"1 c #627C7E", +"2 c #D6CECE", +"3 c #CDF1F0", +"4 c #CAE2E2", +"5 c #979898", +"6 c #8C8C8C", +"7 c #5E5E5E", +"8 c #616161", +"9 c #898989", +"0 c #A4A4A4", +"a c #BCBCBC", +"b c #EBEBEB", +"c c #4A4B4A", +"d c #667171", +"e c #D9C8C7", +"f c #D9EAE9", +"g c #B3C1C0", +"h c #464848", +"i c #283031", +"j c #373434", +"k c #323B3B", +"l c #313838", +"m c #292B2B", +"n c #303030", +"o c #494949", +"p c #A1A1A1", +"q c #E4E4E4", +"r c #FDFDFD", +"s c #494C4C", +"t c #63787A", +"u c #D7CCCB", +"v c #D1EFEE", +"w c #A2BDB9", +"x c #3F4647", +"y c #6D868A", +"z c #BFA8A6", +"A c #ACCBCE", +"B c #A5C1C3", +"C c #71787A", +"D c #6C6C6C", +"E c #E0E0E0", +"F c #424847", +"G c #80979B", +"H c #E0C6C1", +"I c #C9F0F7", +"J c #C0E7E8", +"K c #869092", +"L c #D7D7D7", +"M c #555555", +"N c #606060", +"O c #B4B4B4", +"P c #ABBCB9", +"Q c #424644", +"R c #838F91", +"S c #E1C1BC", +"T c #D2E8EF", +"U c #CFE8E8", +"V c #8D9494", +"W c #9B9B9B", +"X c #979797", +"Y c #4D4D4D", +"Z c #585858", +"` c #AEAEAE", +" . c #9DBEBA", +".. c #424949", +"+. c #7E9B9F", +"@. c #DFC8C4", +"#. c #C4F4FB", +"$. c #C6F9F9", +"%. c #B2E8E5", +"&. c #A5E1DC", +"*. c #9FD5D0", +"=. c #5C6E6C", +"-. c #494C4B", +";. c #657475", +">. c #D8CAC9", +",. c #D5ECEB", +"'. c #A7BDB9", +"). c #424745", +"!. c #819396", +"~. c #E0C3BE", +"{. c #CDECF3", +"]. c #D4FAFA", +"^. c #D6FCFC", +"/. c #D7FDFD", +"(. c #CDEFEF", +"_. c #6E7A7A", +":. c #454848", +"<. c #36494D", +"[. c #767375", +"}. c #738383", +"|. c #697977", +"1. c #777778", +"2. c #464849", +"3. c #4C4B4C", +"4. c #4C4C4C", +"5. c #C7FDFD", +"6. c #C7FEFE", +"7. c #C8FEFE", +"8. c #BFF0F0", +"9. c #697A7A", +"0. c #D8D8D8", +"a. c #B8B8B8", +"b. c #929292", +"c. c #DBF9F9", +"d. c #DEFBFB", +"e. c #DEFCFC", +"f. c #D4EEEE", +"g. c #707979", +"h. c #B6B6B6", +"i. c #3C4343", +"j. c #577277", +"k. c #9C8D8C", +"l. c #8AACB0", +"m. c #8AB0B0", +"n. c #85A7A7", +"o. c #4C5858", +"p. c #5D5E5E", +"q. c #3E4345", +"r. c #474446", +"s. c #484848", +"t. c #474747", +"u. c #444444", +"v. c #797979", +"w. c #B3B3B3", +"x. c #F2F2F2", +"y. c #B5B5B5", +"z. c #959595", +"A. c #989898", +"B. c #B2B2B2", +"C. c #D9D9D9", +". + + + + + + @ # $ % % % % % % ", +"& * = - ; > , ' ) ! ~ % % % % % ", +"{ ] ^ / ( _ : < [ } ! $ % % % % ", +"| 1 2 3 4 5 6 . 7 8 9 0 a b % % ", +"c d e f g h i j k l m n o p q r ", +"s t u v w x y z A B C p D 7 : E ", +"s t u v w F G H I J K L a M N O ", +"c d e f P Q R S T U V W X Y Z ` ", +"| 1 2 3 ...+.@.#.$.%.&.*.=.Z ` ", +"-.;.>.,.'.).!.~.{.].^./.(._.Z ` ", +":.<.[.}.|.).!.~.{.].^./.(._.Z ` ", +"1.2.3.4.M ..+.@.#.5.6.7.8.9.Z ` ", +"0.a.a.a.b.Q R S T c.d.e.f.g.Z ` ", +"% % % % h.i.j.k.l.m.m.m.n.o.Z ` ", +"% % % % ! p.q.r.s.s.s.s.t.u.v.w.", +"% % % % x.y.z.z.z.z.z.z.z.A.B.C."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/about.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,42 @@ +/* XPM */ +static char * about_xpm[] = { +"20 20 19 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #AAAAAA", +"# c #868686", +"$ c #6E6E6E", +"% c #4A4A4A", +"& c #323232", +"* c #000000", +"= c #565656", +"- c #626262", +"; c #C2C2C2", +"> c #929292", +", c #F2F2F2", +"' c #E6E6E6", +") c #A0A0A4", +"! c #1A1A1A", +"~ c #3E3E3E", +"{ c #7A7A7A", +".....++@#$$#@++.....", +"....+#%&*&&*&%#+....", +"...+=*-#@;;@#-*=+...", +"..+=*>..,,,,..>*=+..", +".+=*#.,,'&*),,.#*=+.", +"+#*>.,,,+**=,,,.>*#+", +"+%=.,,,,'%!+,,,,;-%+", +"@&#,,,,,,,,,,,,,.#&@", +"#*@,,,,,#~~>,,,,,@*#", +"$&;,,,,,.**{,,,,,;&$", +"$&;,,,,,.**{,,,,,;&$", +"#*@,,,,,.**{,,,,,@*#", +"@&#,,,,,.**{,,,,.#&@", +"+%-.,,,,.**{,,,,;-%+", +"+#*>.,,,.**{,,,.>*#+", +".+=*#.,+{!!~+,.#*=+.", +"..+=*>;,,,,,,;>*=+..", +"...+=*-#@;;@#-*=+...", +"....+#%&*&&*&%#+....", +".....++@#$$#@++....."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/admin.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,38 @@ +/* XPM */ +static char * admin_xpm[] = { +"20 20 15 1", +" c None", +". c #CECECE", +"+ c #626262", +"@ c #000000", +"# c #F8E2B1", +"$ c #250073", +"% c #4A0073", +"& c #937A00", +"* c #FFFFFF", +"= c #8F6BFF", +"- c #310096", +"; c #868686", +"> c #C5AA00", +", c #AF9200", +"' c #3E3E3E", +"...........++++++++.", +"..........+@@@@@@@@+", +"..+++++++++@######@+", +".+@@@@@@@@@@@@@@##@+", +".+@############@##@+", +".+@#$%%%%%%%%$#@##@+", +".+@#&%*=%%---&#@##@+", +".+@#&%=%%----&#@##@+", +".+@#&%%------&#@##@+", +".+@#&%---$$$@&#@##@+", +".+@#&%---$$@@&#@##@+", +".+@#$%---@@@@$#@##@+", +".+@############@##@+", +";+@&&&&&&&&&&&&@##@+", +"+@@@@@@@@@@@@@@@##@+", +"+@*>*>*>*>*>*>*>@#@+", +"+@,@>,@>,,@>,@>,@#@+", +"+@>*>*>*>*>*>*>*@@@+", +";'@@@@@@@@@@@@@@'++;", +".;++++++++++++++;..."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/change.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,55 @@ +/* XPM */ +static char * change_xpm[] = { +"20 20 32 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #AAAAAA", +"# c #868686", +"$ c #6E6E6E", +"% c #4A4A4A", +"& c #323232", +"* c #000000", +"= c #565656", +"- c #006296", +"; c #FFFFFF", +"> c #007AB9", +", c #0092DC", +"' c #48B8FF", +") c #007373", +"! c #00734A", +"~ c #00AAFF", +"{ c #8ED4FF", +"] c #25AAFF", +"^ c #00B9B9", +"/ c #005050", +"( c #DADADA", +"_ c #C5AA00", +": c #626200", +"< c #4A4A00", +"[ c #323200", +"} c #3E3E3E", +"| c #B1FFFF", +"1 c #48FFFF", +"2 c #004A73", +"3 c #003250", +".....++@#$$#@++.....", +"....+#%&*==*&%#+....", +"...+=*-.;;.;>-*=+...", +"..+=*,,';.;.'))*=+..", +".+=*!~{{']']^///*=+.", +"+#*!^;;'](((!_::<*#+", +"+%!^+;']';;((_::<[%+", +"@&:'{']']]]^!_::<[&@", +"#*:+++((((^!:_:<<[*#", +"$}<[+(;|||11_::<[>2$", +"$}<++((((],!:::<>>2$", +"#*#+((],],]/::<,>>*#", +"@&#+,],],],,/:<>>-&@", +"+%[,,,,,,,,,,/<>-3%+", +"+#*,>,#,>,>,#>/23*#+", +".+=*3#+#>>>+;#23*=+.", +"..+=*3&++;++#23*=+..", +"...+=*3&;;;+#3*=+...", +"....+#%&*&&*&%#+....", +".....++@#$$#@++....."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/connect.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,40 @@ +/* XPM */ +static char * connect_xpm[] = { +"20 20 17 1", +" c None", +". c #CECECE", +"+ c #7A7A7A", +"@ c #626262", +"# c #4A4A4A", +"$ c #000000", +"% c #262626", +"& c #9E9E9E", +"* c #6E6E6E", +"= c #3E3E3E", +"- c #FFFFB1", +"; c #FEFE00", +"> c #DCDC00", +", c #B9B900", +"' c #B6B6B6", +") c #868686", +"! c #929292", +"....................", +"....................", +"....................", +"....................", +"........+@@@@@......", +"......++#$$$$$@@@@@.", +".....+$%$&+*@$$$$$$@", +".@@@@@$=%####$-;>,$@", +"@$$$$$%###&#&$$$$$$@", +"@$'&)++#!#!#!$$)))).", +"@$######+#!#!$$)))).", +"@$$$$$%###+#+$$$$$$@", +".@@@@@$=%#@#@$-;>,$@", +".....+$%$@###$$$$$$@", +"......++#$$$$$@@@@@.", +"........+@@@@@......", +"....................", +"....................", +"....................", +"...................."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/disconnect.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,44 @@ +/* XPM */ +static char * disconnect_xpm[] = { +"20 20 21 1", +" c None", +". c #CECECE", +"+ c #929292", +"@ c #000000", +"# c #626262", +"$ c #730025", +"% c #FF6B8F", +"& c #B9003D", +"* c #DC0049", +"= c #262626", +"- c #9E9E9E", +"; c #7A7A7A", +"> c #6E6E6E", +", c #960031", +"' c #4A4A4A", +") c #FFFFB1", +"! c #FEFE00", +"~ c #DCDC00", +"{ c #B9B900", +"] c #868686", +"^ c #3E3E3E", +"....................", +"+@@#...#@@+.........", +"@$%@#.#@%$@#........", +"@&*%@#@%*&@#........", +"#@&*%@%*&@####......", +".#@&*%*&@@@@@@#####.", +"..#@%*%=@-;>#@@@@@@#", +".#@%*,*%=''''@)!~{@#", +"#@%*,@,*%@-'-@@@@@@#", +"@%*,@;@,*%''+@@]]]].", +"@$,@'''@,$''+@@]]]].", +"#@@@@@='@@#';@@@@@@#", +".#####@^='#'#@)!~{@#", +".....;@=@#'''@@@@@@#", +"......;;'@@@@@#####.", +"........;#####......", +"....................", +"....................", +"....................", +"...................."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/exit.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,36 @@ +/* XPM */ +static char * exit_xpm[] = { +"20 20 13 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #4A4A4A", +"# c #626262", +"$ c #000000", +"% c #FF6B8F", +"& c #FFB1C7", +"* c #DC0049", +"= c #FFFFFF", +"- c #FF0055", +"; c #960031", +"> c #B90000", +"....................", +"....................", +"....................", +".....+@#+...+@#+....", +"....+@$$#..+@$$#....", +"...+@$%$#.+@$%$#....", +"..+@$%&$##@$%&$####+", +".+@$%&*$$$$%&*$$$$$#", +"+@$%=**-;$%=**---*$#", +"@$%=***;$%=******;$#", +"#$;%***;$;%******;$#", +"+#$;>*>;;$;>**;;;;$#", +".+#$;>>$$$$;>>$$$$$#", +"..+#$;>$###$;>$####+", +"...+#$;$#.+#$;$#....", +"....+#$$#..+#$$#....", +".....+##+...+##+....", +"....................", +"....................", +"...................."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/flush.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,35 @@ +/* XPM */ +static char * flush_xpm[] = { +"20 20 12 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #626262", +"# c #000000", +"$ c #FFFFFF", +"% c #8ED4FF", +"& c #25AAFF", +"* c #48B8FF", +"= c #0092DC", +"- c #6BC6FF", +"; c #007AB9", +"......+@@@@@@+......", +".....+@######@+.....", +".....+@#$%%&#@+.....", +".....+@#$**=#@+.....", +".....+@#%**=#@+.....", +".....+@#%**=#@+.....", +".....+@#%**=#@+.....", +".....+@#%**=#@+.....", +".....+@#%**=#@+.....", +".....+@#%**=#@+.....", +"....++@#%**=#@++....", +"...+@@@#%**=#@@@+...", +"..+@####%**=####@+..", +"..+@#%-****&&&;#@+..", +"...+@#%-****&;#@+...", +"....+@#%-**&;#@+....", +".....+@#%-&;#@+.....", +"......+@#%;#@+......", +".......+@##@+.......", +"........+@@+........"};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/handyftp.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,83 @@ +/* XPM */ +static char * handyftp_xpm[] = { +"40 40 40 1", +" c None", +". c #000000", +"+ c #080808", +"@ c #0F0F0F", +"# c #2B2455", +"$ c #2B49AA", +"% c #2B49FF", +"& c #556DFF", +"* c #1F1F1F", +"= c #363636", +"- c #3E3E3E", +"; c #55B6AA", +"> c #2B6D55", +", c #2B92AA", +"' c #5592FF", +") c #55B6FF", +"! c #5592AA", +"~ c #5549FF", +"{ c #2B6DAA", +"] c #171717", +"^ c #5549AA", +"/ c #80DBFF", +"( c #80B6FF", +"_ c #8092FF", +": c #556DAA", +"< c #AAB6FF", +"[ c #2B9255", +"} c #2B4955", +"| c #55DBAA", +"1 c #AADBFF", +"2 c #002455", +"3 c #80DBAA", +"4 c #8092AA", +"5 c #80B6AA", +"6 c #2B24AA", +"7 c #004955", +"8 c #006D55", +"9 c #2E2E2E", +"0 c #272727", +"a c #004900", +"..++...@..++@.+++#$%%&&$#.++++.+*=+..@.+", +"+...-.....+@.++&;>,')''!!'~.+..+.+.+=.+.", +"+...++*.+...+&'{)),,''),!,,{$.+..++++++@", +"....+@+@]+.^''''',/))')!''!!{&++++..@*.+", +"++++......&'''!!(/((!_(''!,!{{:@...+....", +"+++.+++++&''!;//;!((((((,!,!,{{{#++.+..@", +"...+.*+.&''))((/;/(((((!;;)!{>{{:....+++", +".+.+@*.^''))((;,/<<<<(;((;!!>[>::}..+.+.", +".*.*.].:,'))(!!|1<<<<(!(!!!!>[,{{}2+...+", +"......&!!)!;!;/31<(<(4(!!!!>;!>>}}>#+...", +"..+..${!!)!!|/(5(;554!!!!!{!!{>>>>>}.+.+", +"++=++{{!!!;;;(55!>!>>!!>>!{!{,>>>>>}6.@.", +".@].$}!:{};/;55!!>[>!!![[>}}}{>>{>>}}...", +"+...{7{{:!;(5!555!>!;;[[[>>}>>>>}>>>}2.@", +"+.+#{8{{:}!!!/5!![;(5!![[>>>}}}}}>>}}}@+", +"++.{>{{{{::!!!!;/(!!!::>>>>>}}>}}>>>}}++", +"++.:>{{:{!!!!!!;!!!!:::!>>>>}}>}}}}>}}2+", +"+.#}>{{{}:::9}!}:::!::}}}}>}}}}}}}0}a00.", +"]+$>7{${{{}}}>>}}}>>}}}}>>}}}}}}}}90}90.", +"+.}>{$${{}#}>>!!}>}>>>}>>>>}}}}9}}9*000@", +"..}{}$$$}}{}>>!{{>}}>>{>}>>}}}}9990000*]", +"@]}}}$$}}}}}>}}}}}}}9}}}}}}}}}990*9*0*]]", +"-6}}}#}}}}}}}}}9}}}}}}}}}}}999990*0**]]@", +"+}}#}}}}}##}}}}}}>}}}}0*0}900*00**]]]]]@", +"]}}}}}#}}#}}}}>}>}}}}}}0*000****]*]]]@@@", +".}}}}}#}##09=}}}9}}}9}990****]*]**@]]@@+", +".}#9}}}#92099}9}}}9}00000**]]]]*]]]@@+@+", +"+}#*}}}00**0}00999}9090*000]]]]]]]@++@@+", +".#00}}00****9000*}09000***]]@@@@@@@++@@@", +".00099#9*****000*09****]]]]@@@@@@@+++@@+", +".00000*0*]]***0]****]]]]@@@@++@@@++++@@@", +".090*0******]]]**]@]]]]@@@@+++++@++@@@@@", +"+*00**]]]]]]]]]*]]]]]@@@@@@@@++@+@@@@@@@", +".]**]*]]]]]]]@@]]@]@@@@@@@@+@+@@@@@@@@@@", +".]*]]]]]]]]]@@@@@@++++@@@@@@@+@@@@@@@@@+", +".+@@@]@]@@@@+@+@+@]@++]++@++++++++@@++++", +".@]@]]]@@@]@@+@*@+]+*+]++++++@@+++++++++", +".]]]@@]@@@@@@@@@@]@@@@+@+@++++++@@++++++", +".]]]@]]]@@]@]]@*]]@]+@@+@+@@+++++++++@++", +".]]]*]]@@@@]@]]@*@@*@]@+@@]]+]+++@+@++++"};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/help.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,44 @@ +/* XPM */ +static char * help_xpm[] = { +"20 20 21 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #626262", +"# c #000000", +"$ c #505000", +"% c #FFAA25", +"& c #FFC66B", +"* c #FFE2B1", +"= c #FFFFFF", +"- c #FFFF6B", +"; c #B9B900", +"> c #969600", +", c #3E3E3E", +"' c #808000", +") c #FEFE00", +"! c #1A1A1A", +"~ c #DCDC00", +"{ c #323232", +"] c #262626", +"^ c #6E6E6E", +".+@@@@@@@@@@@@@@@@+.", +"+@################@+", +"@#$%&&&&&&&&&&&&%$#@", +"@#%&*************%#@", +"@#&*==-;>@,';---*&#@", +"@#&*=-),'-@#!~--*&#@", +"@#&*=-~#{-~##;--*&#@", +"@#&*=--{@-~##;--*&#@", +"@#&*=-----'#,~--*&#@", +"@#&*=-----]@~---*&#@", +"@#&*-----^;-----*&#@", +"@#&*----~,>-----*&#@", +"@#&*----@##-----*&#@", +"@#&*---->#,-----*&#@", +"@#%&----------**&%#@", +"@#$%*-**&&&&&&&&%$#@", +".@##***&%#########@+", +"..@#&&%##,@@@@@@@@+.", +"..@#%##,@...........", +"..@###@+............"};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/logo.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,391 @@ +/* XPM */ +static char * logo_xpm[] = { +"337 131 257 2", +" c None", +". c #FFFFFF", +"+ c #797E6C", +"@ c #4B7A71", +"# c #7B7E4D", +"$ c #4B868C", +"% c #987F83", +"& c #69859E", +"* c #877F82", +"= c #B068BE", +"- c #597C73", +"; c #9671D0", +"> c #4D8FA7", +", c #6A7C6E", +"' c #7884BB", +") c #87825B", +"! c #9874BE", +"~ c #9C78A2", +"{ c #088586", +"] c #A97F82", +"^ c #6C88B8", +"/ c #9379A7", +"( c #7E7E91", +"_ c #98836F", +": c #087777", +"< c #5B8BA7", +"[ c #3A7B77", +"} c #3A8589", +"| c #698385", +"1 c #6C7958", +"2 c #78829E", +"3 c #187776", +"4 c #188686", +"5 c #2A7773", +"6 c #B78476", +"7 c #4A705E", +"8 c #AE9741", +"9 c #E85CAB", +"0 c #3A909D", +"a c #598592", +"b c #A8856F", +"c c #075452", +"d c #4B99BD", +"e c #B77D85", +"f c #07AAAC", +"g c #D0817D", +"h c #D07493", +"i c #2F868A", +"j c #079B9D", +"k c #E9B342", +"l c #847DBE", +"m c #D060B1", +"n c #186C68", +"o c #D6A04F", +"p c #56725C", +"q c #076362", +"r c #3A98AC", +"s c #9F8A59", +"t c #EF758B", +"u c #B17796", +"v c #597760", +"w c #87826E", +"x c #857E9E", +"y c #B170A8", +"z c #F9A559", +"A c #AF8A66", +"B c #D08C6F", +"C c #D06AA2", +"D c #C8C5C7", +"E c #2BA0B0", +"F c #5C91BD", +"G c #2B9098", +"H c #A970AF", +"I c #2CA9BE", +"J c #BB9E3E", +"K c #D1955E", +"L c #E8A84E", +"M c #3A736A", +"N c #3BA0BC", +"O c #CBA740", +"P c #2D6C62", +"Q c #199194", +"R c #E850BA", +"S c #E88E6F", +"T c #838245", +"U c #A7789A", +"V c #798386", +"W c #F7B448", +"X c #96865E", +"Y c #06BFC1", +"Z c #AD8F53", +"` c #D058BE", +" . c #7E7EB6", +".. c #F98D71", +"+. c #2E6659", +"@. c #F9817E", +"#. c #F99866", +"$. c #07B4B7", +"%. c #19625C", +"&. c #06403E", +"*. c #E89863", +"=. c #069091", +"-. c #2A98A4", +";. c #19A0A8", +">. c #18AAB4", +",. c #C69951", +"'. c #E96A99", +"). c #076C6B", +"!. c #E947C3", +"~. c #18B4C0", +"{. c #DAAF3D", +"]. c #E8A058", +"^. c #19584F", +"/. c #396C5D", +"(. c #195045", +"_. c #EB857A", +":. c #B99849", +"<. c #E2807E", +"[. c #C8A048", +"}. c #18989D", +"|. c #17483E", +"1. c #8D78D1", +"2. c #598383", +"3. c #E2758D", +"4. c #38A7C4", +"5. c #F6BE3F", +"6. c #D7A845", +"7. c #EC7C84", +"8. c #074845", +"9. c #957E94", +"0. c #9BA7A0", +"a. c #B79156", +"b. c #628FBE", +"c. c #E26B9A", +"d. c #D352C5", +"e. c #AAC5CD", +"f. c #9AAAB7", +"g. c #B8BBC4", +"h. c #B9B39E", +"i. c #5498C0", +"j. c #B9C5C7", +"k. c #CA9162", +"l. c #A3B3B7", +"m. c #16BBC6", +"n. c #9CB2BA", +"o. c #798469", +"p. c #BDB5CD", +"q. c #CD7D8E", +"r. c #CDC2AE", +"s. c #9CCBCE", +"t. c #68908B", +"u. c #C8B672", +"v. c #9DBAC8", +"w. c #C8BDAE", +"x. c #7E8B9D", +"y. c #44695F", +"z. c #C2A1B6", +"A. c #DAC074", +"B. c #BCAF72", +"C. c #9D9D73", +"D. c #CAB1CD", +"E. c #69989A", +"F. c #67A9B8", +"G. c #C5A69F", +"H. c #A2AEA2", +"I. c #45BAC3", +"J. c #D681AD", +"K. c #47A1A3", +"L. c #46B0B9", +"M. c #C2AF99", +"N. c #DAB077", +"O. c #C29AC5", +"P. c #E5C477", +"Q. c #E3B294", +"R. c #A8BBBF", +"S. c #D89897", +"T. c #D7C8B0", +"U. c #DABEBA", +"V. c #7C9182", +"W. c #47A8AF", +"X. c #D7B972", +"Y. c #B8B2B0", +"Z. c #D68E9B", +"`. c #4997A2", +" + c #E0B0AB", +".+ c #66A0A7", +"++ c #6DB4B9", +"@+ c #D5AACE", +"#+ c #C5BCC4", +"$+ c #DAA492", +"%+ c #CA7AA3", +"&+ c #53A7C2", +"*+ c #66A1B3", +"=+ c #499090", +"-+ c #DE98B8", +";+ c #558F92", +">+ c #D173BA", +",+ c #A4909B", +"'+ c #D6A37A", +")+ c #CC6ABE", +"!+ c #DE8EC3", +"~+ c #71BCC0", +"{+ c #DA80C1", +"]+ c #B4A7BC", +"^+ c #C78C91", +"/+ c #A599CF", +"(+ c #6EC4C7", +"_+ c #CA9870", +":+ c #5398A5", +"<+ c #7AB5BC", +"[+ c #E1BC93", +"}+ c #DA8EB0", +"|+ c #B3A0C4", +"1+ c #C79E64", +"2+ c #A89798", +"3+ c #8DA29B", +"4+ c #949A8A", +"5+ c #B8A976", +"6+ c #B3A7A0", +"7+ c #E7B07A", +"8+ c #7AA9AA", +"9+ c #DABA5E", +"0+ c #689293", +"a+ c #988E7C", +"b+ c #BA8692", +"c+ c #DFA2AF", +"d+ c #DEC695", +"e+ c #F29294", +"f+ c #5EB8C6", +"g+ c #AF90C7", +"h+ c #949AC2", +"i+ c #7B8FB7", +"j+ c #E6AA82", +"k+ c #789D9C", +"l+ c #9B8CC5", +"m+ c #899681", +"n+ c #BA9A86", +"o+ c #A8A8A0", +"p+ c #86B0B3", +"q+ c #82BCC8", +"r+ c #927BBA", +"s+ c #A99F97", +"t+ c #A99A77", +"u+ c #8A9EC8", +"v+ c #E7A68C", +"w+ c #A781C8", +"x+ c #7A96C6", +"y+ c #829A92", +"z+ c #AA96B4", +"A+ c #9C8D97", +"B+ c #8398C7", +"C+ c #8DC2CA", +"D+ c #A6839E", +"E+ c #ADA07F", +"F+ c #E29A9A", +"G+ c #8E8A6A", +"H+ c #BC909F", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 7 @ 7 7 7 @ p 7 @ p @ p @ v p - 3+. . . . V - v - - - v - - - v , - - , - V.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5+B.5+B.5+B.5+B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.u.B.u.B.u.r.. u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.X.u.u.X.u.X.u.X.u.A.X.X.A.u.A.X.A.A.X.A.A.A.. . d+A.A.A.A.A.A.A.A.P.A.P.A.P.A.P.P.P.P.P.P.d+d+d+T.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . D &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.| . . . . y.&.|.|.&.|.|.|.|.|.|.|.|.|.|.|.y.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . w.# # # # # # T # T T T T T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 8 8 8 8 8 8 8 8 8 8 J 8 J J J J J J J J J J J J r.. [.O J J O J O O O O O O O {.O O O {.O O {.O {.{.O {.O {.{.{.{.{.{.{.{.{.9+. . 9+k {.k k k k k k k k 5.k k 5.k 5.k 5.5.5.5.5.5.5.5.5.P.P.. . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . &.&.&.&.&.&.&.&.&.&.&.&.&.&.|.&.V . . . . y.|.&.|.|.|.|.|.|.|.|.|.|.|.|.|.p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # # # T # T T T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 8 8 8 8 8 8 8 J 8 J 8 J 8 J 8 J J J J J J J J J r.. O J O J O O J O J O O O O O O O O O {.O O {.O {.{.{.{.{.{.{.{.{.{.{.{.{.9+. . A.{.k k {.k k k k k k k 5.k 5.k 5.k 5.k 5.5.k 5.5.5.5.5.5.5.P.. . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . D &.&.&.&.&.&.&.&.&.&.&.&.|.&.&.|.t.. . . . /.|.|.|.|.|.|.|.|.|.|.(.|.(.(.|.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # # T # T # T T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s 8 8 8 8 8 8 8 8 8 8 8 8 J 8 J 8 J 8 J J J J J J J J r.. O J J O J O J O O O J O O O O O O O O O O {.O {.O O {.O O {.6.{.{.{.{.{.9+. . A.k {.k k {.k k {.5.k k k k k k 5.k 5.k 5.k 5.5.5.5.5.5.5.5.5.P.. . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . &.&.&.&.&.&.&.&.&.&.|.&.&.|.&.&.V . . . . y.&.|.|.|.|.|.|.|.(.|.(.|.(.(.(.p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # T # T # T T # T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 s 8 8 8 8 8 8 8 8 8 J 8 8 J 8 J J J 8 J J J J J J r.. 5+J O J O J O O J O O O O O O O {.O O {.O O O 6.{.6.{.6.{.6.{.{.{.{.{.{.9+. . X.{.k {.k k k k k k k k 5.k k 5.k k 5.k 5.k 5.5.k 5.W 5.5.5.5.5.T.. . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . &.&.&.&.&.&.&.&.&.&.&.&.|.8.8.|.t.. . . . y.(.|.8.(.|.|.(.(.(.(.(.(.(.(.(.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r.# # # # # # T # # T T # T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s 8 8 8 8 8 8 8 8 8 8 8 8 8 J 8 J 8 J 8 J J J J J J J r.. O J J [.J [.[.[.[.[.[.[.[.[.O O o O O O 6.O 6.6.O 6.O 6.6.6.{.6.{.6.{.L N.. . X.{.k {.k {.k {.k k k k k k k k k k k k k 5.k W W W 5.W W W 5.W 5.P.T.. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . &.&.&.&.&.8.8.8.8.8.8.8.8.8.|.8.t.. . . . y.(.8.(.(.(.(.(.(.(.(.(.(.(.(.(.p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # # # # # # T T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 s 8 s 8 8 8 8 8 8 :.8 :.8 :.:.J :.:.:.:.:.J :.J J r.. [.J [.J [.[.J O [.[.[.[.O [.O o O o O 6.O 6.O 6.6.6.6.6.6.6.6.6.L 6.L {.9+. . X.k {.{.k {.k k {.k k k k k k k k k W k W k W W k W W W 5.W W 5.W W P.. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 8.8.8.8.8.8.8.8.8.8.c 8.|.c 8.c V . . . . M 8.(.(.(.(.(.(.(.(.(.(.(.(.^.(.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D 1 # # # # # # T # T T T # T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D 8 s 8 s 8 8 Z 8 Z 8 8 8 :.8 :.8 :.8 :.:.J :.:.:.J ,.:.r.. 1+[.J ,.[.J [.[.[.[.[.[.[.o [.[.[.o [.o [.o 6.o O 6.6.6.6.6.6.6.6.6.6.6.N.. . X.6.L L L k {.L k k {.k k k k k W k W k W W k W W W W W W W W W 5.W W T.. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 8.8.8.8.8.8.c 8.c 8.8.c 8.8.(.c t.. . . . y.(.c (.(.c (.(.(.^.(.^.(.(.^.^.p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # # # # T # # T T T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 s 8 8 Z Z 8 Z 8 Z :.Z 8 :.8 :.8 :.:.:.:.:.:.:.:.:.:.r.. J J ,.[.J ,.[.[.[.[.[.[.[.[.o [.o O o O o O o 6.o o 6.o 6.o 6.L o L 6.L N.. . X.L L {.L L L {.L L L L L k L W L k W L W k W k W W W W W W W W W W W P.. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . c 8.8.c 8.c 8.8.c 8.c 8.(.c c |.t.. . . . M c (.(.c (.(.^.(.^.(.^.(.+.^.(.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # 1 # # # # # T # # T # T # T T T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s 8 s Z Z 8 Z Z 8 Z 8 Z :.Z :.a.:.Z :.:.:.:.:.:.:.,.:.r.. 1+:.,.,.,.,.[.,.,.,.[.,.[.[.[.o [.[.o [.o [.o o o o o 6.o o 6.o 6.6.6.6.N.. . N.L 6.L L 6.L L L L L k L L L W L L W L k z k z W L W W z W W W W W W W . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 8.c c 8.c 8.c c 8.c c c c c c (.0+. . . . 7 ^.c ^.^.^.c ^.^.^.^.^.^.^.^.+.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D T # # # # # # # T T # T # ) T ) T . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 s 8 s 8 Z Z 8 Z Z :.Z 8 a.8 a.:.a.:.a.a.:.:.,.:.:.:.r.. 1+J ,.:.,.J ,.,.,.,.,.[.K [.K [.o ,.o [.o o o [.o o o o o 6.o L o ].o L 6.. . X.L L 6.L L L L L L L L L L L L L z L z W L z W z W z W W z W z W z W z T.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . 8.c 8.c c c c c c c 8.c c (.c c t.. . . . M c ^.^.c ^.^.^.^.^.^.^.^.^.^.^.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D # # # # # # # T # # ) # T # ) T ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s Z Z Z Z Z Z Z 8 Z Z Z a.Z a.:.Z :.a.:.:.a.:.a.a.,.:.r.. 1+:.,.,.,.,.,.,.,.[.,.[.,.o [.,.o [.o ,.o [.o o o o o o o o o o o o ].o N.. . N.].o L ].6.L L L L L L L z L z L L W L L z W L W z W z z W z W W W z W d+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . c c c c 8.c c c c c c c (.c c (.0+. . . . @ c ^.^.^.^.^.^.^.^.^.+.^.^.+.(.@ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l.0.0.0.0.0.0.0.0.0.0.0.H.0.H.0.g.. . . . g.H.0.V.V.V.m+4+0.Y.. . . . . . . . . . . . . . . . . g.h.g.h.g.h.g.g.D . . . . D # 1 # # # # # # ) T # ) # ) T ) T . D h.h.h.h.h.h.h.h.h.h.h.h.h.h.D . . . . . . D h.h.h.h.h.h.h.h.h.h.h.h.h.w.. . . . 8 s Z Z Z Z 8 Z Z a.8 a.8 a.Z a.:.Z a.a.a.:.a.,.:.a.:.w.. 1+:.,.,.,.,.,.,.,.,.,.,.,.,.K [.K ,.o K o ,.o o o o o o o o ].o ].o o ].N.. . N.L o L ].L ].L ].L L z L L L L z 9+U.d+7+L z z L z L W z W z z W z W z [+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . c c c c c c c c c c c c c c c ^.0+. . . . [ ^.^.c %.c ^.%.^.^.^.^.^.^.^.%.@ . . . . . . . . . . . . . . . R.V.@ +.+.+.+.+.+.+.+./.- V.y+l.. . . . . . . . . . . . . . . , 7 y.7 7 7 7 7 7 7 p 7 p 7 p p 3+. . . m+p p p p p p p p v v p 4+. . . . . . . . . . . . D s+1 1 1 1 1 1 1 # 1 # # m+D . D # # # # # # ) # # ) # ) # ) # T ) . D ) T ) ) T ) ) ) ) ) ) ) X ) h.. . . . . . w.X s s s s s s s s Z s Z s t+. . . . s Z Z s Z Z Z Z Z Z Z Z a.Z :.a.a.a.a.a.:.a.a.a.,.a.,.w.. 1+k.,.:.,.,.,.,.,.,.K ,.K ,.o ,.o ,.o ,.o K o ,.o o K o o o o o o ].o o N.. . N.].].o ].].o ].L ].].L ].L z L z [+. . . T.z L z W z z z z z W z z W z [+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . c c c c c c c c c c c c %.c c q 0+. . . . M ^.q ^.^.%.%.^.%.%.^.%.+.^.+.^.@ . . . . . . . . . . j.H.y+| +.+.+.+.+.+.+.+.+.+.y.+./.+.+./././.7 V.l.. . . . . . . . . . . | 7 y.y.7 y.7 7 p y.7 p 7 p 7 p 4+. H., p p p p p 1 p 1 p 1 p 1 p o.D . . . . . . . . . 0.1 1 1 1 1 1 # 1 # 1 # 1 # # # o+g.# # # # + # # ) # # ) # ) # ) ) # . . ) ) ) ) ) ) X T X X X X X X t+. . . . . . h.X s s X s s s s s s s s s E+. . . . Z s Z Z Z Z Z Z Z a.Z a.Z a.Z a.5+w.r.w.w.r.w.w.w.w.w.. . w.w.r.w.w.w.r.r.r.r.,.,.,.K ,.K ,.K K o ,.K o K o K o r.U.r.U.r.r.r.r.U.r.. . N.].o ].].].].].].].].].L ].].L ].[+. . . . 7+z z L z z W z z z z W z z [+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q c c c q c q c q c q c q c %.c V.. . . . @ q ^.%.%.q ^.%.%.^.%.%.%.^.%.%.@ . . . . . . . . . R./.+.%.+.+.+.+.+.+.+.+.+.y.+.+./.+./././.+.y./././.- g.. . . . . . . . . , 7 7 7 7 7 7 7 y.p 7 7 p 7 p 7 0.j.p p v p p p p p p p 1 p p p 1 v m+. . . . . . . . 4+1 1 1 1 1 1 1 1 1 # 1 1 # 1 1 1 # o.# + # + # # # + ) # ) # ) ) # ) ) . . E+) ) ) ) X ) ) X T X T X ) X . . . . . . 5+X s X s s s s s s s s Z s 5+. . . . s Z Z Z s Z Z A Z Z Z a.Z a.a.a.M.. . . . . . . . . . . . . . . . . . . . . . 1+K ,.K ,.K K K ,.K K K o K K o '+. . . . . . . . . . . . N.].].].o ].o ].].].].].].z ].z ].Q.. . . . 7+z z z z z z z z z z z z z [+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . c q c q c c q c c q c q c q c %.E.. . . . [ ^.%.c %.^.%.%.^.%.%.%.%.%.+.%.@ . . . . . . . . D P +.+.+.+.%.+.+.+.+.+.+.+.+.+./.+.y.+.y.+.y./.+./././.7 j.. . . . . . . . | /.7 7 y.7 7 7 p 7 7 p 7 p 7 p 4+o.7 p p p v p p p 1 p p 1 1 v 1 p o.. . . . . . . . m+1 1 1 1 1 # 1 1 1 1 1 o.1 # o.# # # + # # + # + ) # # w # ) # ) ) ) # . . h.) ) X T ) X ) X ) X X ) s ) T.. . . . . C.X X s X s X s s s s s s s M.. . . . Z A s Z A Z A Z Z A Z A a.A a.a.M.. . . . . . . . . . . . . . . . . . . . . . K ,.K ,.K ,.K K K K o K K o K o '+. . . . . . . . . . . . N.K ].].*.].].].].].].].].].].].z Q.. . . . 7+].z z ].z z z z z z z z z 7+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q c q c q q c q q q %.c q %.q q E.. . . . [ %.q %.%.%.q %.%.%.%.%.%.%.%.%.@ . . . . . . . . - %.+.P %.+.+.+.+.+.+.+.+./.+./.+./.+./.+./././././.y././.v l.. . . . . . . | 7 7 7 7 7 7 7 7 7 7 p 7 p 7 p v p p p v p p 1 p v p p 1 p v p 1 v , . . . . . . . . o.1 1 1 1 1 1 1 1 o.1 + # 1 + 1 + + 1 # + # + ) # + ) + # w # w # ) ) ) . . D ) ) ) ) X T X ) X ) X ) X X h.. . . . . t+s X X X X s s s s s s A s 6+. . . . s Z s A s A Z A A Z A a.A a.A Z M.. . . . . . . . . . . . . . . . . . . . . . 1+k.k.K K K ,.K ,.K K K K K K K '+. . . . . . . . . . . . Q.].K *.*.o *.*.*.].*.].*.].#.].*.[+. . . . j+z ].#.z z #.z z z z #.z z [+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q q q q c q q q c q q q q q c %.E.. . . . [ %.%.q %.%.%.%.n %.%.P %.P %.n $ . . . . . . . l.n P +.n P P P P P +.+./.+./.+./././././././././././././.7 M y.j.. . . . . . t.7 7 7 7 7 7 7 7 p 7 7 p 7 p p @ p p v p p p v v v 1 v v v 1 v v 1 v Y.. . . . . . . o., 1 1 , o.1 1 + 1 1 1 + 1 # + 1 # + + # + # + # + # ) + ) + ) + ) ) ) . . . G+) X ) ) ) X ) X X X X ) X C.. . . . . s X X s s s X s b s b s s s M.. . . . A A A A Z A A A Z A A A a.A a.A M.. . . . . . . . . . . . . . . . . . . . . . _+k.k.k.k.K K K K K K K K K K *.'+. . . . . . . . . . . . $+*.*.o *.*.*.].*.*.].*.#.].*.].#.Q.. . . . 7+#.].z #.#.z #.z #.z #.z #.Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . D q q c q q q q q q q q q q %.q %.E.. . . . @ q %.n %.q n %.%.n %.n %.%.P %.@ . . . . . . . 2.P %.P +.P +.P +.P P P P P P P P P +./.P /././././././.M /./.M - . . . . . . | 7 /.7 7 7 7 p 7 p 7 p 7 p v 7 p v 7 v p v v v v v p v 1 v v 1 v v 1 3+. . . . . . . 1 , 1 , 1 1 1 , 1 1 o.1 + o.1 + # + + # + + # + + # * # w # ) + ) ) + ) . . . a+) ) ) X ) ) X ) ) X ) X X a+. . . . . X _ s X X X s b X s s s s A h.. . . . A s A s A s A A A A a.A A a.A A M.. . . . . . . . . . . . . . . . . . . . . . K k.k.K k.K k.k.k.k.K K K K K K '+. . . . . . . . . . . . N.K *.*.*.*.*.*.*.*.*.*.].*.#.*.*.[+. . . . j+#.#.#.#.#.z #.#.#.z #.#.z 7+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q q q q q q q q q q q q q q q q k+. . . . } n q %.n n %.n n %.n n n n n n $ . . . . . . D n P P P n P P n P P P P P /.M P /.M P M /.M P M /.M M /.7 M 7 M 7 j.. . . . . t.7 7 @ 7 7 7 @ 7 @ 7 @ p @ 7 v @ p @ v v p v v v v v v v v v v 1 v v V.. . . . . . . , 1 , 1 , 1 , o.1 o.1 + 1 + + 1 + + 1 + + # + + ) + # + w + ) ) + ) w ) . . . a+) w _ ) w X ) _ X ) X X ) _ D . . . . _ X X b X b X s s b b b X b h.. . . . s b A A A A A A A A A A A A a.6 M.T.. . . . . . . . . . . . . . . . . . . . . _+k.k.k.k.k.k.K K B K B K S K B '+. . . . . . . . . . . . $+*.*.K *.K *.*.*.*.*.*.*.*.*.*.#.N.. . . . 7+#.*.].#.#.#.#.z #.#.#.z #.Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q q q q q q q q q q q n q q n q E.. . . . [ %.n n n q n n %.n n %.n %.n P @ . . . . . . R.P P n P P P P P P P P M P M P P P M P M P /.M /.M /./.M M M M /.M g.. . . . . t.7 M 7 7 @ 7 @ 7 v 7 p @ p @ p @ v p v @ v v v v v v v v 1 v v , v , 1 . . . . . . . 1 , 1 o., 1 , 1 , 1 + 1 o.1 + o.1 + + # + + + # + ) + ) + ) + ) + ) + w . . . t+w ) w ) _ ) w X ) _ w X _ X D . . . D _ X _ X X X b _ b _ s X b s w.. . . . A A s A b A A A A A A A A A A a.M.. . . . . . . . . . . . . . . . . . . . . . _+k.k.k.k.B K k.B K B K K K K K '+. . . . . . . . . . . . Q.K *.S *.*.K *.*.*.*.*.*.*.#.*.*.Q.. . . . j+#.#.#.#.#.#.#.#.z #.#.#.#.Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . q q q q q q ).q q q q q ).q ).n E.. . . . } n q n %.n n %.n n n P n P n n $ . . . . . . k+P n P P n P P P P P P P P [ H.R.g.y+M P M M /.M M M M M 7 /.7 M 7 l.. . . . . | 7 @ 7 @ 7 @ 7 @ 7 @ 7 v 7 @ p @ 3+g.H., v v v v v v , v v , v , v v , g.. . . . . g., 1 , 1 , , o., + , + , + + 1 o.Y.g.4++ + ) + + + ) + ) + ) + w ) + ) ) . . . 4+) _ ) w ) _ ) _ ) _ ) _ X ) #+. . . D X b X b X b X s b X b b s b h.. . . . b A b A b A b A A A A A 6 a.6 A G.. . . . . . . . . . . . . . . . . . . . . . _+k.k.B k.B B B K B K B B B K S _+. . . . . . . . . . . . $+S *.K S *.S *.S *.S *.S *.*.*.#. +. . . . j+*.#.#.*.#.#.#.#.#.#.#.#.#.Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . ).).).).).q ).).).).).).q ).n ).E.. . . . $ ).n n n ).n n n n n n n n n n $ . . . . . . 2.n 5 P 5 P 5 P 5 5 P 5 P 5 3+. . . . @ M M P M M M /.M M M M M M M H.. . . . . t.@ M @ M @ 7 @ 7 @ p @ @ @ p @ V.. . . V.@ v - v - v - v - v , v , v - Y.. . . . . 0., , , , 1 , 1 , 1 + 1 o.1 , + o+. . w.+ + + # + w + + + + w + ) + w w w . . . s+w w w ) _ w ) _ w _ X w _ X Y.. . . r._ X _ X _ X _ b _ s b X b b #+. . . . s b b A b A A A A A 6 A A A A A M.. . . . . . . . . . . . . . . . . . . . . . _+6 B k.B k.B k.B B B K k.S B B '+. . . . . . . . . . . . $+K S S *.S S *.S *.S *...*...*.S Q.. . . . v+#.*.#.#.#.#.#.#.#.#.#.#.#.j+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . ).q ).).).).).).).).).).n ).).n ;+R.R.R.R.[ n ).n n n n n n n n n n n P n $ . . . . . . } P n P 5 n P 5 P P 5 P M P R.. . . . 2.5 M M M M M M M M M @ M @ M 3+. . . . . | M @ 7 @ 7 @ @ 7 @ @ p @ p @ v 3+. . . H.- v @ v - v , v , v - , v , v 0.. . . . . 0., 1 , , , , + , , , + , + + o.D . . j.+ + + + w + + ) + w ) * + w ) + w D . . 6+) w _ w w _ w _ ) _ w _ _ _ h.. . . g._ X b _ b _ s b _ b _ b s b r.. . . . b b A b b b b A 6 b A 6 6 A 6 6 M.. . . . . . . . . . . . . . . . . . . . . . k.B k.B B B B B B B B B B B K B S.. . . . . . . . . . . . $+S *.B S S K S S S S S *.S S *...Q.. . . . v+..#...*...#...#...#...#.#.Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . ).).).).).).).).).).).).).).).).3 ).3 n : n : n 3 n : n n 3 n n 5 n 5 n 3 $ . . . . . j.5 P 5 5 P 5 5 P 5 5 P 5 5 M j.. . . . ;+M M 5 M M [ M [ M M M M M [ 3+. . . . . t.@ @ @ 7 @ @ @ @ @ 7 @ @ @ v @ 0.. . . H.@ - v - - v - - - , v - , - , 0.. . . . . 0., , , , o., , , + , + + , o.o.. . . D o.+ + + + + + * + w + + ) + * w w . . . Y.w w ) _ w w w _ w _ _ ) _ w 2+. . . h._ _ _ _ _ b _ _ b _ b _ b _ D . . . . b b b b b A A b 6 A A 6 A 6 A 6 M.. . . . . . . . . . . . . . . . . . . . . . B B 6 B g B B B B B B B B S B B '+. . . . . . . . . . . . $+B S S S S S S S S S S S S ..S S +. . . . '+..S ............#...#.....v+. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . ).).).).).).).).: ).: : ).3 ).3 ).3 ).n : n 3 ).3 n 3 n 3 n 3 3 n 3 3 n 5 $ . . . . . l.3 5 n 5 5 5 5 5 5 5 5 5 P 5 j.. . . . t.5 [ M 5 [ M M [ M [ @ [ @ M k+. . . . . t.M @ @ @ @ M @ @ @ v @ v @ @ @ H.. . . H.- - - - - - - v , - - , - , - 0.. . . . . 0., , , , , , + , , + , + + , V.. . . D o.+ + w + + w + + w * w + * ) * w . . . D w w * w w _ w _ w _ w _ _ _ a+. . . Y._ _ _ _ _ _ b _ b _ b b _ b . . . . . b b b b 6 b 6 b b 6 6 b 6 6 6 6 n+G.M.G.G.M.G.M.G.M.w.. . . . . . . . . . . . _+B g B 6 B g B g B g B g B g S _+. . . . . . . . . . . . $+S S B S S S S S S S S S S S S ..$+. . . . e+....S ....#............... +. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . : : : : : : : : ).: ).: : ).: : : ).: 3 : n : 3 3 3 : 3 3 3 n 3 3 3 5 3 3 =+. . . . . l.5 5 5 5 5 5 5 5 5 P 5 [ 5 M j.. . . . t.[ M [ [ M [ [ [ [ [ [ M [ M t.. . . . . t.@ 7 [ @ @ @ @ @ @ @ @ @ @ - @ H.. . . f.- - p - - , - - - - , - , - , 0.. . . . . 0., , , , , , , , o., + | , + w . . . . + + + + * + + * + w + + w + * + w . . . . _ % w _ w % w w % w _ % w _ a+. . . h.b _ _ _ b _ _ _ ] _ b _ b b . . . . . b b b b b 6 b b 6 b b 6 6 A 6 A 6 6 6 A 6 6 6 6 6 6 G.. . . . . . . . . . . . ^+B 6 B g B B g B B B <.B B g B S.. . . . . . . . . . . . '+S <.S <.S <.S S _._.S _._..._.S +. . . . S ..S ......................Q.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . ).: ).: ).: ).: : ).: ).3 : 3 ).3 3 : n : 3 3 ).3 n 3 n 3 3 3 3 n 3 3 n 5 $ . . . . . p+5 n 5 5 n 5 5 5 5 5 5 5 5 5 j.. . . . t.5 [ M 5 [ M [ M [ M @ [ @ [ t.. . . . . t.@ [ @ @ @ @ @ @ @ - @ - @ - @ H.. . . H.- - - - - - - - , - - , - , - 0.. . . . . 0., , | , o., V , , V , + + V V.. . . D o.* + + + + * + w + * w * w + w * . . . . 4+w w w * ) % w _ % w _ % _ _ . . . 6+_ _ % _ _ ] _ ] _ b _ ] _ b . . . . . b b b 6 b b 6 b 6 b 6 6 b 6 6 6 6 6 6 6 6 6 k.6 B 6 G.. . . . . . . . . . . . B 6 B g B g B g B g B g B <.B B B . . . . . . . . . . . . $+<.S B _.S S <.S _.S _.S S _.S S $+. . . Q....._....._...............@. +T.. . . . . . . . . . . . . . . . . ", +". . . . . . . . . : : : : : : : ).: : : : : ).: : : : 3 : 3 : 3 3 : 3 : 3 3 3 3 3 5 3 5 3 3 =+. . . . . k+3 5 5 5 5 5 5 5 5 5 5 5 [ 5 j.. . . . t.[ 5 [ [ [ [ [ [ [ [ [ [ [ [ 2.. . . . . t.[ @ @ @ @ @ @ @ @ @ @ @ - @ - n.. . . n.- - - - - - - - - - - - - - , 0.. . . . . 0., | , , | , , | , + , V , + V . . . D + + V + * + + * + * + + * + w * w . . . . 6+* w * % w % w _ w % w _ w % . . . 6+% % _ ] _ _ ] _ b _ ] _ ] b . . . . . b ] b ] b b ] b 6 ] 6 b 6 6 6 6 6 6 6 6 6 6 e 6 6 6 G.. . . . . . . . . . . . B g g B g 6 B g g B g g B g B <.S.. . . . . . . . . . . . $+B S <.S <.S <.S _._._._._..._._.F+ +v+S _._..._..._...@.....@.@...@... +. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . : : : : : : : : : : : : : 3 : 3 : 3 : 3 : 3 : 3 3 3 3 3 3 3 3 3 3 3 3 3 5 =+. . . . . 8+5 5 3 5 5 5 5 5 5 5 5 [ 5 [ j.. . . . E.5 [ [ 5 [ [ [ [ [ [ @ [ @ [ $ . . . . . t.@ @ [ @ @ @ @ @ - @ 2.@ @ - @ l.. . . H.- - - - - - - , - | - , | - - 0.. . . . . 0., , , | + | + , V , V , + V V . . . D V + V + V + * + * + * * + * * + * . . . . #+w % w * w * % w % w % % _ _ #+. . 6+_ _ % _ % _ _ ] _ ] _ ] _ 2+. . . . . ] b ] b e b e b e b 6 ] 6 b 6 6 6 6 6 6 6 6 6 6 g 6 G.. . . . . . . . . . . . ^+6 B 6 g g g g B g g B g <.B g S.. . . . . . . . . . . . S._.<.<.<.<.<._.<._.S _._._._._..._._._.@..._...@._...@...@...@...@...@. +. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . : : : : : : : : : : : : : : : : : : 3 : 3 3 : 3 3 : 3 3 3 3 3 3 3 3 5 3 3 =+. . . . . 8+5 4 5 4 5 5 i 5 5 5 i 5 5 5 j.. . . . t.[ [ [ [ [ [ [ [ [ [ [ [ [ [ 2.. . . . . t.[ $ @ @ $ @ $ @ $ @ @ @ @ 2.@ H.. . . n.- - - - - - - - - - , - - - | 0.. . . . . 0.| , | , , , | , , | + , V , V.. . . D V + V + * + * + + * + w * + w * w . . . . . * w % w % * _ * _ % w _ * _ g.. . 2+% % _ % _ ] _ ] % _ ] _ ] n+. . . . . ] b ] b ] 6 b ] 6 b e b e 6 e 6 6 6 6 6 6 6 g 6 6 6 G.. . . . . . . . . . . . B g g g B g B g g B g g B g g B S.. . . . . . . . . . . . $+<.S <.S S <.S _._._._._._._._._._..._..._.@..._.@..._.@...@...@...@... +. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . : : : : : : : : : : : : : 3 : 3 : 3 : 3 : 3 : 3 3 4 3 { 3 4 3 4 5 4 3 4 5 =+. . . . . k+5 5 5 5 i 5 5 5 i 5 5 i [ i j.. . . . ;+[ 5 [ [ [ [ [ [ [ [ [ [ @ [ $ . . . . . t.@ @ [ $ @ @ @ @ @ $ 2.@ 2.@ 2.f.. . . H.2.- 2.- 2.- | - | - | - | , - 0.. . . . . 0., | , V | , V , V , V , V + V . . . D o.( + V + V + * * + * + * * w * + . . . . . a+* w * % w * % w % % % % _ Y.. . s+_ % ] _ % _ % ] _ ] _ ] _ 2+. . . . . ] b ] ] b ] e b ] e b e b e b e 6 e 6 6 6 6 6 6 e g n+. . . . . . . . . . . . ^+6 g g g 6 g g g g g g g <.g <._+. . . . . . . . . . . . S.<.<.<.<.<.<._.<._.<._._._._._._.@.7._.@._._.@.@...@.@...@.@.@.@.@.@.@.U.. . . . . . . . . . . . . . . . . . ", +". . . . . . . . . : { : { { : { { { : { { { : { { { 3 { : 4 : 4 3 { 3 4 3 3 4 3 3 4 3 5 4 3 =+. . . . . 8+i i i i i i i i i i } } i [ j.. . . R.} [ } [ i [ [ [ [ [ } @ [ } [ 2.. . . . . 0+} @ $ @ @ @ $ @ $ @ @ - $ @ - n.. . . n.- - - a - - - | - | - | - - | 0.. . . . . 0.| , | , , | , | , V , ( | + x.. . . . + V + ( + ( + ( + * ( * + * + * * . . . . . 2+w % * * % * % * % w % * % 6+. . 2+% _ % % % ] _ % ] _ ] % ] G.. . . . T.] ] ] ] ] e b ] e ] 6 ] e 6 e 6 e 6 e e e e e q.6 e G.. . . . . . . . . . . . g g 6 g g g g g g g g g g g g g Z.. . . . . . . . . . . . S.S <.<.<._.<.<.<.<._._.7._.7.@._.7._._.7.@._.@._.7.@.@.@.@.@.@.@.@.@.e+. . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { { { : { { { : { { { : { 4 : 3 { { 4 4 { 4 { 4 3 4 : 4 4 3 4 4 3 4 4 3 4 =+. . . . . . . . . . . . . . . . . . . . . n.;+i [ i [ i [ } i } } } [ } } } @ } ;+. . . . . 0+@ $ [ $ $ $ @ $ @ a $ $ - $ @ l.. . . l.2.a - a - a - a - 2.| - & - | 0.. . . . . 0.| | | ( | ( | ( | , V | + V V . . . D V ( + ( * V ( V * V + * ( * * * * . . . . . Y.* * * % * % * % * % % * % 2+. . ,+% % % % % % ] % % ] % ] % #+. . . . . ] ] ] e ] ] ] e ] e ] e ] e ] e e e e 6 e 6 e 6 e g G.. . . . . . . . . . . . ^+g q.g g q.g g g g g g g <.g <.Z.. . . . . . . . . . . . S.<.<.<.<.<.<.<.7.<.7.<.7.7.7.7.7.@.7.@.@.7.@.7.@.@.7.@.@.@.@.@.@.@.@.. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { { { { { : { { { : { { { { { { { 4 : { 3 { 3 4 { 4 4 4 4 4 4 4 4 4 4 i 4 `.. . . . . . . . . . . . . . . . . . . D E.i [ i i [ i i [ } [ [ } [ } [ $ [ } } $ . . . . . E.} @ $ @ $ @ $ $ @ $ - $ @ $ 2.n.. . . l.@ - a - a - | 2.| - 2.| - | - f.. . . . . 0.| | , | , | , | , V | ( , V x.. . . D V V V + V ( + * + * ( * + * ( * * . . . . . Y.* * % * * % * % % * % % % s+. . ] % % % ] % % ] % ] % ] % ] #+. . . . . ] ] ] ] ] e ] ] e ] e ] 6 e e e e 6 e e e e e e e e z.. . . . . . . . . . . . g e g h e q.q.q.g h g h g h g g Z.. . . . . . . . . . . . c+<.<.<.<.<.<.7.<.7.<.7.7.7.7.7.7.7.7.7.7.@.t @.@.t @.@.t @.t @.@.@.e+. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { : { { { { { { { { { { : 4 { { 3 { 4 { 4 { 4 { 3 4 4 3 4 3 4 5 4 5 4 4 5 `.. . . . . . . . . . . . . . . . D p+=+i i i i 5 } i [ } i [ } } } } } } [ } @ } 2.. . . . . 0+$ $ [ $ $ @ $ @ $ @ $ @ a 2.@ n.. . . l.2.a - a - a - 2.2.| 2.- & - & 0.. . . . . 0.| , 2 | | | ( | ( | ( | V , V . . . D V + ( ( V + * V ( * * V * ( * + * . . . . . D * % * * % * % * % % * % % ,+. . a+% % % % % ] % % ] % ] % ] w.. . . . . ] ] ] ] ] ] e ] ] e ] e ] e ] e e e e e e g e e g e n+. . . . . . . . . . . . ^+q.g g q.g g h g g h g g <.h g Z.. . . . . . . . . . . . S.3.<.3.<.3.7.<.t 7.7.7.7.7.7.7.7.7.7.t 7.t 7.t t @.t t @.@.t t t @. +. . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { { { { { { { { { { { { { { { 4 { { 4 { 4 4 { 4 4 4 { 4 4 4 4 4 4 4 4 4 4 `.. . . . . . . . . . . . . . . . 8+i i i i i i } i i } i } } i } [ } [ } } $ } } ;+. . . . . E.[ $ $ @ $ $ @ $ $ $ $ 2.$ $ 2.l.. . . f.a - a 2.2.2.a - & - & - & - | 0.. . . . . h+| | | , | | | | | , V , V V x.. . . D V ( V V ( V V ( * ( V * ( * ( * * . . . . . . * * % * * % * % * % % * % ,+. . % % % % ] % % % ] % ] % ] % D . . . . . ] ] ] u ] u ] e ] e ] u e e e e e e e e e e e e e e z.. . . . . . . . . . . . g q.h e h q.h g h g h g h g h g Z.. . . . . . . . . . . . S.3.<.3.7.3.7.3.<.7.3.7.3.7.7.7.7.t t @.t @.t @.t t @.@.t t t @.t +. . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { { { { { { { { { { { { { { { { 4 { { 4 { 4 4 { 4 4 4 4 4 4 4 4 4 4 4 i 4 `.. . . . . . . . . . . . . . . f.} i i i [ i i i i [ i } [ i } } } } } } } } $ } 2.. . . . . E.$ $ } $ $ $ $ $ @ a @ $ - $ $ f.. . . l.2.a - a 2.2.2.| 2.2.| 2.| 2.| f.. . . . . 0.| | 2 | | ( | ( | 2 | ( | ( V . . . . V V ( + ( ( * V V ( + ( * ( * * ( . . . . . . ,+* * 9.* % * % * % % % * ,+. . % % U % % % U % U % U % U ] . . . . . . ] U ] ] ] ] u ] e ] e ] e u e u e e e e e e h e e h G.. . . . . . . . . . . . b+q.q.q.q.h q.q.h g h g h 3.g 3.Z.. . . . . . . . . . . . S.3.3.<.3.<.3.3.7.3.7.7.7.t 7.t t 7.t t t t t @.t @.t t t @.t t +. . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { =.{ =.{ =.{ { =.{ { { { =.4 { { Q { 4 { 4 { 4 4 { 4 4 4 4 4 4 4 i 4 4 4 `.. . . . . . . . . . . j.n..+i i i i i i i i i i } i } i } } } } } } } } $ } } } ;+. . . . . E.[ $ $ @ $ @ $ @ $ $ $ a $ $ 2.l.. . . f.a 2.a 2.a - a 2.& - a | 2.& 2.0.. . . . . f.| 2 - 2 , & , | | , ( | ( V x.. . . D V ( V ( V V V ( * ( * ( * ( * ( * . . . . . . 6+* 9.* * 9.* % 9.9.* 9.% ,+. . ~ % % % % U % % ] % ] % ] % . . . . . . U ] ] ] u ] u ] u u u u e ] u e e e u e e e e h e e z.. . . . . . . . . . . . q.e h q.h q.h q.h g h h h g h h Z.. . . . . . . . . . . . S.3.<.3.3.3.3.3.t 3.t 3.t 3.t t t t t t t @.t t t t t t t t t +. . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . =.=.{ =.{ =.{ =.{ =.=.=.4 =.{ =.G r K.r K.Q 4 Q { Q 4 4 Q 4 4 Q 4 4 Q 4 i K.. . . . . . . . . . 8+i i i i 4 i i i i i i } i i } i } } i } } } } } } } } $ } ;+. . . . . E.$ $ } $ $ $ $ $ $ $ 2.$ @ a $ n.. . . l.2.a 2.a 2.a a - a & 2.- & - & f.D . . . . 0.| | | | 2 | 2 | ( & | ( | V V . . . D V V ( V ( ( ( ( V * ( ( ( * V * x . . . . . . g.* 9.* 9.* / * % * 9.% 9.A+. D % % ~ % % % ~ U % U % U % D+. . . . . . ] u U ] u ] u u ] u ] e u e e u e b+^+b+^+b+H+b+^+^+G.. . . . . . . . . . . . q.q.h e h q.h h h h h g h 3.h g Z.. . . . . . . . . . . . -+3.3.3.3.3.t 3.3.t 3.t t t t t t t t t t t t t t t t t t t U.. . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . { =.{ =.{ =.{ =.=.{ =.{ =.{ Q { ++. . . . `.=.4 Q 4 =.4 4 Q 4 4 Q 4 4 Q 4 `.. . . . . . . . . 8+i 4 i Q i G i i i i i i i i } i } i } } } } } } } } $ } } } ;+. . . . . E.} $ $ $ $ $ $ $ a $ $ $ a $ 2.l.. . . n.a @ a - a 2.& 2.& 2.a & 2.& - f.. . . . . 0.& | 2 & , | ( | | ( | ( | V x.. . . D V ( V ( V ( V ( ( ( ( * V * ( * * . . . . . . . 9.* / * % * % / % ~ 9.* D+. Y.% ~ % % ~ U % % % U % U ] ,+. . . . . . U ] ] u ] u ] u ] u u u e u u e G.. . . . . . . . . . . . . . . . . . . . . . b+h q.h h h h q.h g h h h h 3.h Z.. . . . . . . . . . . . S.3.3.3.3.3.3.t 3.t 3.t 3.t 3.t t t t t t t t t t t '.@.c+T.. . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . =.=.=.=.=.=.=.=.=.=.=.=.=.=.=.Q F.. . . . K.=.Q { Q Q Q Q 4 Q Q 4 G Q i Q K.. . . . . . . p+G G G G i G i i G i G i i G } i =+`.i 0 } G } } } } } } } $ } $ =+. . . . . E.$ $ } $ $ $ $ $ $ $ a $ $ a $ n.. . . l.a a a a a a - a a - & 2.& 2.& 0.. . . . . f.| & , & & & , & ( | 2 | 2 ( x.. . . D 2 V ( V ( ( V * ( ( ( ( ( x * x ( . . . . . . . o+x * 9./ * 9.* 9.* % ~ % . Y.9.% ~ % ~ % ~ U U % U % U 2+. . . . . . U U U u ] u u ] u u u u u u u u z.. . . . . . . . . . . . . . . . . . . . . . q.h h h h h h h h h h h h h h h Z.. . . . . . . . . . . . }+3.c.3.t 3.3.3.t '.3.'.t '.t '.t Z.U.U.U.U.U.U.U.T.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . =.=.j =.=.=.=.=.=.=.=.Q =.Q =.=.8+. . . . K.=.Q Q Q =.Q Q Q Q G Q Q Q Q Q K.. . . . . . R.G G 4 G i Q G G G G G i G G } G F.D .+0 i 0 } 0 0 } 0 0 0 } 0 $ 0 ;+. . . . . F $ $ $ $ $ $ $ $ $ $ $ $ $ a $ l.. . . n.a a a a a a a a & a & 2.& a & f.. . . . . h+| & & | ( & 2 | & | 2 | 2 | x.. . . D ( 2 ( 2 ( V ( ( ( ( ( ( x ( x * x . . . . . . . D 9./ * 9.* ~ / 9./ 9.9.9.. |+~ % ~ % ~ % ~ % U ~ % U U z.. . . . . . U u U U U U u u u u u u u u e u z.. . . . . . . . . . . . . . . . . . . . . . q.h u h h u h h h h h h h 3.h 3.J.. . . . . . . . . . . . S.c.3.c.3.c.'.'.c.'.t '.'.t '.'.'.c+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j =.=.j j j =.j =.j j =.j =.j Q ++. . . . K.=.Q Q Q Q Q Q Q Q Q Q Q Q G Q :+. . . . . . F.Q G G G G G i G i G i G 0 G G 8+. . .+G } 0 G } 0 0 } 0 $ 0 0 } 0 ;+. . . . . .+$ 0 $ > $ > $ $ $ $ a $ a $ a n.. . . l.a a a a a a & a a a & a a & 2.f.. . . . . f.& | & & | & | 2 & ( & 2 2 ( x.. . . . 2 V 2 ( 2 ( 2 ( ( x ( x * ( ( x x . . . . . . . . 9.x / 9./ * * ~ * ~ 9.9.. ,+9.~ % ~ % ~ ~ U % U U ~ % ]+. . . . . . U U U u u u U u u u u u u u u u G.. . . . . . . . . . . . . . . . . . . . . . %+h h h C h C h C h C h C C h C Z.. . . . . . . . . . . . }+c.c.'.c.'.3.'.3.'.'.'.'.'.'.t '.c+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j j =.j =.j =.j =.j =.j =.}.=.=.++. . . . K.Q j Q j Q Q =.Q Q Q Q G Q Q Q K.. . . . . . K.G G Q G G Q G G G G G G i G `.D . . .+0 0 } 0 0 } 0 0 } 0 0 $ 0 =+:+. . . . . E.0 $ > } > $ $ > $ > $ > $ > a n.. . . n.a a < a a a a a & a & a & a & f.. . . . . 0.& & | 2 & | & 2 & | 2 2 | & x.. . . D 2 2 ( 2 ( ( ( x.x ( ( ( x ( x x * . . . . . . . . A+9.* * / 9./ 9.9./ 9.9.. ,+% ~ 9.~ ~ ~ % ~ U ~ % U U Y.. . . . . . U u U U U U u u U u u u u u y u z.. . . . . . . . . . . . . . . . . . . . . . %+h u C h h h h h C h C h h c.h J.. . . . . . . . . . . . Z.c.3.c.c.c.'.c.'.'.'.t '.'.'.'.'.-+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j =.j j j j j =.j =.j }.=.j =.}.++. . . . K.j Q Q Q }.Q }.}.Q }.Q Q Q Q -.K.. . . . . . G G Q G G G G G G G G G 0 G 0 j.. . . .+G 0 G 0 } 0 0 } 0 0 } 0 } 0 > . . . . . E.> $ $ > } > $ $ > $ a > a $ > n.. . . l.a < a a < a & a a a a & a & & 0.. . . . . f.& & & | & 2 & | 2 & ( & 2 ( x.. . . D 2 ( 2 ( 2 ( 2 ( ( x x.( x x ( x x . . . . . . . . z+x / / * / * / 9.9.9.~ . ,+~ ~ % ~ % ~ ~ ~ ~ U ~ U ~ w.. . . . . . U U U u u u U u u u u u u u u u z.. . . . . . . . . . . . . . . . . . . . . . q.C h C u C C C h C h C C c.h C q.. . . . . . . . . . . . }+c.c.c.'.c.c.'.'.'.'.'.'.'.'.'.'.F+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j j j j =.j j j j j =.j j }.j j ++. . . . W.=.}.j Q j }.}.Q }.Q }.}.-.Q Q K.. . . . . j.Q G G G G G G G G G G G G G .+. . . . .+G 0 0 0 0 0 0 0 0 0 0 0 > 0 :+. . . . . *+$ 0 > $ > $ > > $ > $ > $ > a l.. . . n.< $ a < a a a < a & & a & a a f.. . . . . f.| & & 2 & & & 2 & 2 | 2 2 & x.. . . D 2 2 2 ( 2 ( 2 x 2 ( x x ( x x.x x . . . . . . . . o+/ * / 9./ 9./ / 9./ ~ g.~ ~ 9.~ ~ ~ ~ ~ U ~ ~ U ~ U #+. . . . . . U u U U U U y u U y u y u y u y z.. . . . . . . . . . . . . . . . . . . . . . %+h y h C C h C h C h C h C h c.J.. . . . . . . . . . . . }+c.c.c.c.c.'.c.'.'.'.'.'.'.'.'.'.-+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j j j j j j j j j j j j j j j }.++. . . . K.j }.}.}.}.}.}.}.}.}.Q }.}.}.-.K.. . . . . R.}.-.Q -.G Q -.-.G -.G G 0 G <+. . . . .+0 0 G 0 G 0 0 0 0 0 $ 0 0 $ :+. . . . . .+0 $ > 0 $ > $ > $ > a > a > $ n.. . . l.< < < a < < a < & a < a & a & f.. . . . . f.& 2 & & & ( & & 2 & 2 & 2 2 x.. . . . 2 ( 2 2 ( 2 x 2 x ( 2 x x x ( x x . . . . . . . . ]+x / x / 9.* / 9./ 9./ Y.9.~ ~ 9.~ ~ ~ % ~ ~ U ~ U ~ #+. . . . . . U U U y u y U u y u y u y u y h z.. . . . . . . . . . . . . . . . . . . . . . %+C C C h C h C C C C C C C C h J.. . . . . . . . . . . . }+c.c.c.'.c.'.c.'.'.'.'.'.'.'.'.'.-+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j j j j j j j j j j j j j }.j j ++. . . . W.}.}.}.j }.}.}.}.}.}.}.}.-.Q }.W.. . . . . <+-.G -.G -.-.G -.G G G -.G -.p+. . . . .+G 0 0 0 0 0 0 0 0 0 0 0 0 0 :+. . . . . E.> > $ > > $ > > $ > $ > $ < > l.. . . n.< $ a < a a < a & < a & < & & f.. . . . D f.& & & & & & & ( & & ( & 2 2 x.. . . D 2 2 2 2 2 x 2 x 2 x x x 2 x x x x . . . . . . . . p./ * / * / / / 9./ / 9.z+/ ~ 9.~ ~ ~ ~ ~ ~ U ~ ~ ~ U . . . . . . D U y U U H U u y U y u y u y u y z.. . . . . . . . . . . . . . . . . . . . . . %+C u C C C y C h C C h c.C c.C J.. . . . . . . . . . . . }+c.c.c.9 c.c.9 '.9 '.9 9 '.9 9 '.-+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . j f j f j f j j j j j j j j j }.++. . . . I }.j }.}.}.j }.}.}.}.-.}.}.-.}.W.. . . . . <+Q -.}.-.-.G -.-.G -.-.0 -.0 e.. . . . F.0 G 0 0 0 0 0 0 0 0 > 0 > 0 > . . . . . *+0 > 0 > $ > > $ > > > < > $ < n.. . . l.< < < < < < a < < & < & a < & f.. . . . . f.& & & 2 & & & & & .& 2 & 2 2 . . . D 2 2 2 x 2 2 x 2 x x 2 x x x x x x . . . . . . . . D x / / / / / / / / 9./ ~ 9.~ ~ / ~ ~ ~ ~ ~ ~ ~ ~ U U . . . . . . . U H U y U y H y y y y y y y y y z.. . . . . . . . . . . . . . . . . . . . . . %+C C C y C C C C C C C C C C C J.. . . . . . . . . . . . }+c.9 c.c.9 c.9 '.9 '.9 '.9 '.9 9 e+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f j f j f j j f j f ;.j f }.f j ++. . . . W.;.;.j ;.;.}.;.}.;.}.;.}.;.}.}.W.. . . . . <+-.-.-.Q -.-.-.-.-.-.-.-.0 -.j.. . . . .+-.0 r G r 0 0 0 0 0 0 0 0 0 :+. . . . . *+> 0 > > 0 > > > > > > $ > < > v.. . . l.> < $ < a < < < a < & < < & < f.. . . . . f.& & & & & & .& 2 & 2 2 & 2 i+. . . D 2 2 2 2 x .2 ( .2 x 2 x 2 x x x . . . . . . . . . A+x 9.x / * / / / / / ~ / ~ / ~ ~ ~ ~ ~ ~ ~ ~ H ~ z+. . . . . . . H y U H y U y y U y y y y y y y z.. . . . . . . . . . . . . . . . . . . . . . h y C C C C C C C C C C C C C c.J.. . . . . . . . . . . . J.9 c.9 9 9 9 c.9 '.9 9 '.9 9 '.9 -+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f j f f j f f f j f f f j f j ;.~+. . . . W.j ;.;.;.j ;.;.;.;.;.}.;.;.E ;.W.. . . . . <+;.-.-.-.-.-.-.-.-.-.-.-.-.-.D . . . . F.r r 0 r 0 r r 0 r `.0 r > 0 :+. . . . . *+> > > > > > > > > > > > > > < n.. . . l.< < < < < < < < & < < < & < & f.. . . . . f.^ & & .& & & & 2 & .& .& x.. . . . 2 .2 ' 2 x 2 .x .x .x .x x .. . . . . . . . . |+x / / / / / / / / / ~ / ~ ~ / ~ ~ ~ ~ H ~ H ~ ~ z.. . . . . . . U H H y H y H y y y y y y y y y z.. . . . . . . . . . . . . . . . . . . . . . %+C m C C C m C C m C m m m c.m %+. . . . . . . . . . . . }+c.9 c.m '.9 9 9 9 9 '.9 9 9 9 9 -+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f f f f f f j f f j f j f ;.f f ++. . . . L.;.f ;.;.;.;.;.;.;.;.;.;.;.;.-.W.. . . . . <+-.;.-.;.E -.-.-.E -.-.-.r -.j.. . . . F.-.0 r -.r r 0 r r 0 r `.r `.i.. . . . . *+> 0 > > 0 > > > > > > < > < > n.. . . l.> < > < < < < < < < & < < ^ < f.. . . . . f.& & & ^ & .& ' & .& & ' 2 i+. . . D ' 2 2 .2 .2 .x 2 x .x x .x x . . . . . . . . . D / / / / / / / / / / ~ / ~ / ~ ! ~ ~ ~ ~ ~ ~ H U p.. . . . . . . H H H H H y H y H y y y y y C y O.. . . . . . . . . . . . . . . . . . . . . . %+m y C m C m C m C m C m C m m J.. . . . . . . . . . . . J.m 9 9 9 9 9 c.9 9 9 9 9 9 9 9 9 -+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f f f f f f f f f f f f f f j >.++. . . . L.f ;.f ;.f ;.;.;.;.;.E ;.;.;.;.W.. . . . . <+;.-.E -.E E E -.E -.E r E -.j.. . . . F.-.r r r r r r r r r 0 r r r :+. . . . . *+> r > > > > > > > > > > > > > l.. . . v.< < < < > < < < < < < ^ < < ^ f.. . . . . f.^ ^ & & ^ & ^ & ^ & ' & .& x.. . . D 2 ' .2 2 .x .2 . .x .x .x l . . . . . . . . . . r+x / / / / / / / / ~ ! / ~ ~ ! ~ ! ~ H ~ H ~ ! . . . . . . . . U H H H H y H y y y y y y y y y O.T.. . . . . . . . . . . . . . . . . . . . . )+C m m m m C m m m C m m 9 m m J.. . . . . . . . . . . . }+9 9 m 9 9 9 9 9 9 9 9 9 9 9 9 9 e+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f f f f f f f f f f f f f ;.f f ~+. . . . W.f ;.>.;.;.>.;.>.;.>.;.;.;.;.E L.. . . . . <+E ;.E E ;.-.E -.E E E -.r E j.. . . . F.r r r -.r r r r 0 d r > r `.i.. . . . . *+> r > d > r > > > > > > > < > v.. . . l.< > < F < < < < < ^ < < < & < f.. . . . . f.^ & ^ ^ & ^ & ' & ' 2 ^ 2 ' i+. . . . ' 2 .2 . .x. .x .x .x .x l x . . . . . . . . . . l+/ l / / / / / / ! / / ~ / ! ~ ~ ~ ~ ! H ~ ! U . . . . . . . . H H H H y H y H y H y y y = y = z.. . . . . . . . . . . . . . . . . . . . . . C y m C = C m m C m m m m C m m J.. . . . . . . . . . . . J.m 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 !+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f f f f f f f f f f f f f f f f ~+. . . . L.f ;.f >.>.;.>.;.;.>.;.>.E ;.;.L.. . . . . ~+E E ;.E E E -.E -.E -.E E -.j.. . . . F.-.r r r r r r r r r r r r r :+. . . . . *+r > d > 0 > d > > > > F > > F n.. . . v.F < > < < < b.< < < < ^ < < ^ f.. . . . . f.^ & ^ & ' & ^ & ' & ' & .& i+. . . D 2 ' 2 .2 . .2 . .x ' x .x l x . . . . . . . . . . ,+/ / / / / ! / / / ! ~ ! ~ ! ~ ! H ! ~ ~ H H ~ . . . . . . . . H H H y H H H y H y = y = y m y O.. . . . . . . . . . . . . . . . . . . . . . %+m m m m m m C m m m m m m 9 m J.. . . . . . . . . . . . {+9 9 9 m 9 9 9 R 9 R 9 R 9 R 9 R -+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . $.$.f $.f $.f f f f f f >.f >.f ~+. . . . L.f >.>.;.f ;.>.>.>.;.>.;.>.>.E L.. . . . . ~+E ;.E E E E E E E E E E r E e.. . . . F.E r E r r r r r r r r r d r i.. . . . . *+d > r > d d > > d > i.> > F > v.. . . l.> F < F F < < F ^ < b.< ^ < b.f.. . . . . f.^ ^ ^ ^ & ^ ' & ' & ' & ' ' ' . . . D ' 2 .' .2 . . .x. .x .l l x l . . . . . . . . . . |+l r+/ l ! / / / ! ~ / ! ! ! ~ ! / H ! H ! ~ g+. . . . . . . . H H H H H y H = y = y = y = y y O.. . . . . . . . . . . . . . . . . . . . . . )+m y m C m m m m m m m m m m m >+. . . . . . . . . . . . J.9 ` 9 9 R 9 R 9 9 9 R 9 R 9 R 9 !+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . f $.$.f $.f $.$.f $.f f $.f f f ~+. . . . L.f >.f >.>.>.>.;.>.>.>.E >.;.>.L.. . . . . v.E E ;.E ;.E E E E E E E E E <+. . . . &+r N r r E r r r r r d r r r i.. . . . . *+d r > d > > d > d > > d > > i.n.. . . v.F < F < < F < < F < < ^ F ^ < f.. . . . . l.^ & ^ ^ ^ ^ & ^ ^ ' ^ ' 2 ' ^ g.. . g.' .' 2 . . .x . . .l .x .l x . . . . . . . . . . ]+/ / ! / / ! / ! / ! ! ! ~ ! ! H ! / H ! H ! z.D . . . . . . . H H H H = H = H = y = y = = y = O.. . . . . . . . . . . . . . . . . . . . . . %+m m m m m m m m m m m m 9 m 9 %+. . . . . . . . . . . . {+9 9 R 9 ` R 9 R R R 9 R 9 R R R e+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . $.$.$.$.$.$.f $.$.$.$.$.f $.~.f (+. . . . L.f >.>.>.>.>.>.>.>.>.>.>.>.>.I L.. . . . . j.I >.E I E I E E I E E E N E N C+. . j.r N E N E N r N N N r N r d r &+. . . . . *+d > d d d d d > d > i.> F d F v.. . . l.> F > F F < F b.< b.F b.< < b.f.. . . . . D ^ ^ ^ ^ & ^ ^ ^ ' & ' & ^ ' 2 ' g.. h+2 ' . .' ' .' .l .l x.l l x l . . . . . . . . . . ]+1./ l / ! l / ! / ! / ! ! ! ! ! ! ! ! H ! H . . . . . . . . . H H = H = H = = y = = = = = = = O.. . . . . . . . . . . . . . . . . . . . . . )+= m m = m m m m m m m m m m ` >+. . . . . . . . . . . . J.` R ` R 9 R R 9 R 9 R R R R R R !+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . $.$.$.$.$.$.$.$.$.$.f $.~.$.f $.~+. . . . I.$.>.$.>.f >.>.>.>.>.I >.>.I >.L.. . . . . . >.E I >.E I E I E I E E I E N E W.W.E I N N r N N N r N r N r d r N i.. . . . . F.d r d > r > d d > d > d > > i.n.. . . v.F F F > F F < F b.< b.< ^ b.^ f.. . . . . . ^ ^ ^ ^ ^ ' ^ ^ ^ ' ^ ' ' ' ' ^ i+' .' ' ' 2 .' . . . . .x l .l l l . . . . . . . . . . g./ ! l ! / ! ! ! / ! ! ! ! ~ ! H ! H ! ! H ! D . . . . . . . . H H = H = H = H = = = y = m = = z.. . . . . . . . . . . . . . . . . . . . . . )+m ` m ` m m ` m ` m ` ` ` ` 9 >+. . . . . . . . . . . . {+9 R 9 R d.R 9 R R R R R R R R R !+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . $.Y $.$.$.$.$.$.$.$.$.$.$.$.~.$.(+. . . . L.~.>.~.>.~.~.>.~.>.>.>.>.>.>.I L.. . . . . . L.>.I I I E >.I E I E I N E I E E N E N N E N E N r N N N d N N N r &+. . . . . *+d d d d d d d > d d d F i.d F v.. . . n.F > F F < F b.< b.< b.F b.< b.n.. . . . . . ^ ^ ^ ^ ^ ^ ^ ' ^ ^ ' ^ ' ^ ' ' .' ' ' ' . . .' . .x.l ' l .l l x l . . . . . . . . . . p.1./ ! / ; / ! / ! ! ! ! ! ! ! ! ! ! ! H ! ~ . . . . . . . . D = H = H = H = = = = = = = = = = O.. . . . . . . . . . . . . . . . . . . . . D )+= ` m ` m ` ` m ` ` ` ` 9 m ` >+. . . . . . . . . . . . {+R R d.R R R R R R R R R R R R R !+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y $.Y Y Y $.Y $.$.$.$.$.$.$.$.~.(+. . . . I.$.$.~.~.>.~.>.~.~.>.~.~.I ~.>.I.. . . . . . f+I >.I I I I I I I I E I I N I 4.E 4.E N N N N N 4.N r N N N d N d &+. . . . . F.r d d d d d d d d F d d > i.d n.. . . v.F F F F F F F F b.b.F b.b.b.b.u+. . . . . . b.^ ^ ^ ^ ^ ^ ^ ^ ' ^ ' ^ ' ' ' ' ' ' ' .' ' ' l ' l l .l .l .l l l . . . . . . . . . . D r+1./ l ! l ! ! ! / ! ! ! ! ! ! H ! H ! H w+. . . . . . . . . H H = H = = = H = = = = = = = m O.. . . . . . . . . . . . . . . . . . . . . . )+` m ` ` ` m ` ` ` m d.` ` d.` >+. . . . . . . . . . . . {+R d.R R R d.R R R R !.R R !.R !.!+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y $.Y $.Y $.Y Y m.Y $.m.$.$.(+. . . . I.~.~.>.~.$.~.~.~.>.~.I ~.>.~.>.f+. . . . . . q+>.I I I >.I E I I E I I N I E 4.E 4.N I N N E 4.r 4.N N N N N r N &+. . . . . F.d d d r d d d d d d > i.d F i.v.. . . n.i.F F F > F F F F F b.< b.b.b.n.. . . . . . x+^ ^ ^ ^ ^ ^ ^ ^ ' ^ ' ' ^ ' ^ ' ' ' ' .' ' .' l ' l l ' l ' l l l l . . . . . . . . . . D ! l ; ! ! ! l ! ! ! ! ! ! ! H ! ; ! = ; ! g+. . . . . . . . . = = ; = H = = = = = = = = = = = O.. . . . . . . . . . . . . . . . . . . . . . )+` ` ` ` ` ` ` ` ` ` ` ` ` ` R >+. . . . . . . . . . . . J.R R R R R R R R !.R R !.!.R !.!.!+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y Y Y Y Y Y Y $.Y $.Y m.$.Y (+. . . . I.$.m.$.~.~.~.~.~.~.~.~.~.~.I ~.L.. . . . . . j.~.I >.I I I I I I I 4.I I I 4.4.I 4.E 4.N I N 4.4.N N N N N N N N &+. . . . . F.d N d d d d d d d d d d i.d i.v.. . . v.F i.F i.F F F F b.F b.b.b.b.b.f.. . . . . . x+^ b.^ ^ ^ ' ^ ^ ^ ' ^ ' ' ^ ' ' ' ' ' ' ' l ' l ' l ' l l l l l l l l . . . . . . . . . . D r+! l ! l ! ! ! ! ! ; ! ! ; ; ! H ; ! = ! O.. . . . . . . . . ; = = = = = H = = = = = = = = = O.. . . . . . . . . . . . . . . . . . . . . . )+= ` ` ` ` ` ` ` ` ` d.` d.` ` >+. . . . . . . . . . . . {+R d.R d.!.!.R !.R !.!.!.R !.!.!.!+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y Y Y Y Y Y Y $.Y Y m.Y $.m.(+. . . . I.$.~.m.~.~.~.~.~.~.~.~.~.~.~.~.I.. . . . . . . I.I I I I ~.I I I I I I I 4.I 4.I 4.W.4.4.N 4.N N 4.N 4.N N N d N &+. . . . . F.N d d d d d d d d i.d i.d F i.v.. . . v.F d F F F F F F F F b.F b.b.b.f.. . . . . . u+^ ^ ^ ^ ^ ^ ^ ^ ' ^ ' ^ ' ' ' ' ' ' ' ' ' ' l ' ' l ' l l ' l ' l l l . . . . . . . . . . . ! l ! ! ! ; / ; ! ; ! ! ; ! H ; ; ! = ; ! ]+. . . . . . . . . = = ; = = = = = = = = = = = ` = O.. . . . . . . . . . . . . . . . . . . . . . = ` ` ` ` ` ` ` ` ` ` d.d.` R d.>+. . . . . . . . . . . . {+d.!.!.R !.R !.!.!.!.!.!.!.!.!.!.!+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y (+. . . . I.Y m.~.m.$.~.~.~.~.~.~.~.I ~.~.f+. . . . . . . e.I ~.I ~.4.I ~.I I I I 4.I 4.I 4.q+++4.I 4.4.4.4.N 4.N N N N N N &+. . . . . F.d N d N d d d d d d i.d d d i.v.. . . v.F i.F F F F F F b.F b.b.b.b.b.f.. . . . . . j.x+^ ^ ^ ^ ^ ' ^ ^ ' ^ ' ' ^ ' ' h+p.' l ' ' ' l ' l l ' l l l l l l l . . . . . . . . . . . l ; l ; l ; ; l ; ! ; ! ; ; ; ; H ; ; H ; #+. . . . . . . . . = = = = = = = = = = = = ` = = = O.D . . . . . . . . . . . . . . . . . . . . . )+` ` ` ` ` ` ` d.` d.` d.d.d.d.>+. . . . . . . . . . . . {+!.d.!.!.d.!.!.!.!.!.!.!.!.!.!.!.!+T.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y Y Y Y Y Y Y Y Y Y m.Y m.Y (+. . . . I.Y m.m.m.m.m.m.m.m.~.~.~.m.~.~.I.. . . . . . . . q+I.~.4.~.I I I I I I 4.I I 4.C+. ~+4.4.4.4.4.4.4.4.4.N 4.4.&+N &+. . . . . F.d N d d d d d d d d i.d i.i.i.v.. . . v.F i.F i.i.F F F F F F F b.b.b.n.. . . . . . . D B+^ ^ ^ ^ ^ ^ ^ ' ^ ' ^ ' ' u+. D ' ' l ' l ' ' l ' l l ' l l ' 1.l . . . . . . . . . . p.! 1.! ! ; ! ; ! ; ; ! ; ; ; ; ; ; ; = ; H . . . . . . . . . j.= = ; = = = = = = = = = = = = ` O.. . . . . . . . . . . . . . . . . . . . . . = ` ` d.` ` d.d.d.d.d.d.d.d.d.d.>+. . . . . . . . . . . . >+!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . Y Y Y Y Y Y Y Y Y Y Y Y Y Y m.Y (+. . . . I.Y m.m.m.m.m.m.m.~.m.m.m.I m.m.f+. . . . . . . . . j.q+f+I.I.~.4.I I.I I.f+C+e.. . ~+4.4.4.4.4.4.4.N 4.N N N 4.N &+. . . . . F.4.i.N &+N d d d d i.d i.d i.i.v.. . . v.F i.i.F F F i.F F F b.b.b.b.b.f.. . . . . . . . . j.v.u+B+^ ^ ' ^ ' ^ B+/+g.. . D ' ' ' ' l ' 1.' 1.' l l ' 1.l l l . . . . . ]+l+l+l+l+1.1.! l ; l ; ! ; ! ; ; ; ; = ! ; = ; ; = g+. . . . . . . . . . = ; = = = = = = = = = = = = = = g+. . . . . . . . . . . . . . . . . . . . . . )+d.` d.d.d.d.d.d.d.d.d.d.d.d.!.)+. . . . . . . . . . . . {+!.d.!.!.!.!.!.!.!.!.!.!.!.!.!.!.{+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.j.. . . . s.s.s.s.s.s.s.s.e.s.e.e.e.s.e.e.e.. . . . . . . . . . . . . . . . s.e.. . . . . . . e.e.e.e.e.v.e.e.e.e.e.e.e.e.e.e.. . . . . j.e.e.g.e.e.e.e.e.e.e.e.e.R.e.e.D . . . D e.g.R.e.g.e.R.g.e.g.e.g.e.p.e.j.. . . . . . . . . . . . . . j.p.j.. . . . . . . . g.p.g.p.g.p.g.p.g.g.g.g.g.g.g.g.p.. . . . . /+1.1.1.1.l ; l ; ; ; ; l ; ; ; ! ; ; ; ; ; ; = ; ; #+. . . . . . . . . . p.D.p.]+p.|+D.|+D.|+D.O.D.O.D.@+#+. . . . . . . . . . . . . . . . . . . . . . D.D.]+D.D.]+D.p.D.z.D.D.z.@+D.@+D.. . . . . . . . . . . . D.@+@+z.@+D.z.@+@+@+@+c+@+c+-+@+-+U.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+l 1.1.1.1.; 1.; l ; ; ; ; ; ; ; ; ; ; = ; ; ; = |+. . . . . . . . . . . . . D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+1.1.1.1.1.; l ; ; ; 1.; ; ; ; ; ; ; ; ; ; ; ; g+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+1.1.1.1.1.; ; 1.1.; ; 1.; ; ; ; ; = ; ; = ; = |+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h+1.1.l ; 1.1.1.; ; 1.; ; ; ; ; ; ; ; ; ; ; ; w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+1.1.1.1.1.; 1.; 1.; ; ; ; ; ; ; ; ; ; = ; ; p.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+1.1.1.1.1.; 1.; ; ; ; ; ; ; ; ; ; ; ; g+|+#+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . /+1.1.1.1.1.1.; 1.; 1.; ; ; ; w+/+D.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g.p.p.p.p.p.]+p.p.p.p.p.p.p.D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . D . . . D . D D . D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/newtab.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,31 @@ +/* XPM */ +static char * newtab_xpm[] = { +"20 20 8 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #626262", +"# c #4A4A4A", +"$ c #000000", +"% c #FFFFFF", +"& c #7A7A7A", +"....................", +".+@@@@@@@@@@@@@@@@+.", +".#$$$$$$$$$$$$$$$$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$&&&&&&&&&&&&&&$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$&&&&&&&&&&&&&&$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$%%%%&%%%%&%%%%$#.", +".#$$$$$$$$$$$$$$$$#.", +".+@@@@@@@@@@@@@@@@+.", +"...................."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/preferences.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,41 @@ +/* XPM */ +static char * preferences_xpm[] = { +"20 20 18 1", +" c None", +". c #CECECE", +"+ c #B6B6B6", +"@ c #AAAAAA", +"# c #868686", +"$ c #6E6E6E", +"% c #4A4A4A", +"& c #323232", +"* c #000000", +"= c #565656", +"- c #626262", +"; c #9E9E9E", +"> c #929292", +", c #F2F2F2", +"' c #7A7A7A", +") c #C2C2C2", +"! c #FE0000", +"~ c #3E3E3E", +".....++@#$$#@++.....", +"....+#%&*&&*&%#+....", +"...+=*-#@;;@#-*=+...", +"..+=*>..,-;,..>*=+..", +".+=*#;,,,-;,,,;#*=+.", +"+#*>;-;,,-;,,;-;>*#+", +"+%=.,;',,,,,,';,)-%+", +"@&#,,,,,,,,,,,,,.#&@", +"#*@,,,,,,!!,,,,,,@*#", +"$&;---,,,!!,,,---;&$", +"$&;+++,,,!!,,,;++;&$", +"#*@,,,,,,!!,,,,,,@*#", +"@&#,,,,,,!!,,,,,.#&@", +"+%-.~,,,,!!,,,,~)-%+", +"+#*>.,,,,!!,,,,.>*#+", +".+=*#,,@----@,,#*=+.", +"..+=*.--****--.*=+..", +"...+=*-******-*=+...", +"....+#%&*&&*&%#+....", +".....++@#$$#@++....."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/queue.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,46 @@ +/* XPM */ +static char * queue_xpm[] = { +"20 20 23 1", +" c None", +". c #CECECE", +"+ c #9E9E9E", +"@ c #868686", +"# c #6E6E6E", +"$ c #323232", +"% c #565656", +"& c #3E3E3E", +"* c #000000", +"= c #734A00", +"- c #503200", +"; c #B6B6B6", +"> c #262626", +", c #966200", +"' c #B97A00", +") c #7A7A7A", +"! c #626262", +"~ c #DC9200", +"{ c #FFB848", +"] c #FFAA25", +"^ c #48B8FF", +"/ c #8ED4FF", +"( c #0092DC", +".......+@#$$$$#@+...", +"......%&$*=--=*$&%..", +"....;%>=,,'''',,=>%;", +"....)>=,'''''''',=>)", +"....)*>=,,'''',,=>*)", +"....!*-&-======-&-*!", +"....!*--=******=--*!", +"....!*-=,'''''',=-*!", +"....!**-,'~{]~',=-*!", +"@@@@!*^*-'~{]~',=-*!", +"******^^*-~{]~',=-*!", +"*/^^^^^^^*-{]~',=-*!", +"*(((((^^(*-{]~',=-*!", +"******^(*-~{]~',=-*!", +"@@@@!*(*-'~{]~',=-*!", +"....)**-,'~{]~',=-*)", +"....)*-=,'~{]~',=-*)", +"....;%>-=,'~~',=->%;", +".....;%&$******$&%;.", +".......;)!%%%%!);..."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/remtab.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,38 @@ +/* XPM */ +static char * remtab_xpm[] = { +"20 20 15 1", +" c None", +". c #6E6E6E", +"+ c #000000", +"@ c #3E3E3E", +"# c #CECECE", +"$ c #626262", +"% c #730025", +"& c #FF6B8F", +"* c #B6B6B6", +"= c #B9003D", +"- c #DC0049", +"; c #4A4A4A", +"> c #FFFFFF", +", c #7A7A7A", +"' c #960031", +".++@###@++$#########", +"+%&+@#@+&%+$$$$$$$*#", +"+=-&+@+&-=++++++++;#", +"@+=-&+&-=+@>,>>>>+;#", +"#;+=-&-=+@>>,>>>>+;#", +"##@+&-&+@>>>,>>>>+;#", +"#;+&-'-&+@>>,>>>>+;#", +"@+&-'+'-&+@,,,,,,+;#", +"+&-'+@+'-&+>,>>>>+;#", +"+%'+@>@+'%+>,>>>>+;#", +".++@>>>@++@>,>>>>+;#", +"#;@>>>>,>>>>,>>>>+;#", +"#;+,,,,,,,,,,,,,,+;#", +"#;+>>>>,>>>>,>>>>+;#", +"#;+>>>>,>>>>,>>>>+;#", +"#;+>>>>,>>>>,>>>>+;#", +"#;+>>>>,>>>>,>>>>+;#", +"#;++++++++++++++++;#", +"#*$$$$$$$$$$$$$$$$*#", +"####################"};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/resources.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,81 @@ +#define DW_RESOURCE + +/* XPMs */ +#include "FILE.xpm" +#include "FOLDER.xpm" +#include "LINK.xpm" +#include "about.xpm" +#include "admin.xpm" +#include "change.xpm" +#include "connect.xpm" +#include "disconnect.xpm" +#include "exit.xpm" +#include "flush.xpm" +#include "handyftp.xpm" +#include "help.xpm" +#include "logo.xpm" +#include "newtab.xpm" +#include "preferences.xpm" +#include "queue.xpm" +#include "remtab.xpm" +#include "save.xpm" +#include "unqueue.xpm" +#include "unsave.xpm" + +/* Associated IDs */ +#include "dmail.h" + +#define RESOURCE_MAX 20 + +long _resource_id[RESOURCE_MAX] = { + FILEICON, + FOLDERICON, + LINKICON, + IDM_ABOUT, + ADMIN, + PB_CHANGE, + CONNECT, + DISCONNECT, + IDM_EXIT, + FLUSHQ, + MAIN_FRAME, + IDM_GENERALHELP, + LOGO, + NEWTAB, + IDM_PREFERENCES, + ADDTOQ, + REMOVETAB, + SAVETITLE, + REMOVEFROMQ, + UNSAVETITLE +}; + +char *_resource_data[RESOURCE_MAX] = { + (char *)FILE_xpm, + (char *)FOLDER_xpm, + (char *)LINK_xpm, + (char *)about_xpm, + (char *)admin_xpm, + (char *)change_xpm, + (char *)connect_xpm, + (char *)disconnect_xpm, + (char *)exit_xpm, + (char *)flush_xpm, + (char *)handyftp_xpm, + (char *)help_xpm, + (char *)logo_xpm, + (char *)newtab_xpm, + (char *)preferences_xpm, + (char *)queue_xpm, + (char *)remtab_xpm, + (char *)save_xpm, + (char *)unqueue_xpm, + (char *)unsave_xpm +}; + +typedef struct _resource_struct { + long resource_max, resource_id; + char **resource_data; +} DWResources; + +DWResources _resources = { RESOURCE_MAX, _resource_id, _resource_data };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/save.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,39 @@ +/* XPM */ +static char * save_xpm[] = { +"20 20 16 1", +" c None", +". c #6E6E6E", +"+ c #4A4A4A", +"@ c #000000", +"# c #7A7A7A", +"$ c #929292", +"% c #9E9E9E", +"& c #B6B6B6", +"* c #C2C2C2", +"= c #AAAAAA", +"- c #565656", +"; c #626262", +"> c #FFFFFF", +", c #DADADA", +"' c #3E3E3E", +") c #CECECE", +".++..............++.", +"+++@@@@@@@@@@@@@@+++", +"++#$............%#++", +"+@#$............%#@+", +"+@#$............%#@+", +"+@#$............&#@+", +"+@#$............*#@+", +"+@#$............*#@+", +"+@#$............&#@+", +"+@##$$$$$==&&&*&##@+", +"+@################@+", +"+@##--------;;;;##@+", +"+@#->>,,,,,,*'-;%#@+", +"+@#->;-'>)*),'-;%#@+", +"+@#-,;-'>*)*,'-;%#@+", +"+@#-,;-'>)*),'-;%#@+", +"+@#-,;-'>*)*,'-;%#@+", +"+@+-,===****,'-;%#@+", +"=+@@@@@@@@@@@@@@@@@+", +")=+++++++++++++++++."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/unqueue.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,47 @@ +/* XPM */ +static char * unqueue_xpm[] = { +"20 20 24 1", +" c None", +". c #CECECE", +"+ c #9E9E9E", +"@ c #868686", +"# c #6E6E6E", +"$ c #323232", +"% c #565656", +"& c #3E3E3E", +"* c #000000", +"= c #734A00", +"- c #503200", +"; c #B6B6B6", +"> c #262626", +", c #966200", +"' c #B97A00", +") c #7A7A7A", +"! c #626262", +"~ c #4A4A4A", +"{ c #DC9200", +"] c #FFB848", +"^ c #FFAA25", +"/ c #8ED4FF", +"( c #48B8FF", +"_ c #0092DC", +".......+@#$$$$#@+...", +"......%&$*=--=*$&%..", +"....;%>=,,'''',,=>%;", +"....)>=,'''''''',=>)", +"....)*>=,,'''',,=>*)", +"....!*-&-======-&-*!", +"....!*--=******=--*!", +"....!*-=,'''''',=-*!", +"...~**-=,'{]^{',=-*!", +"..~*/*--=,']^{',=-*!", +".~*/(******'^{',=-*!", +"~*/(((((((*=^{',=-*!", +"~*_((_____*=^{',=-*!", +".~*_(******'^{',=-*!", +"..~*_*--=,']^{',=-*!", +"...~**-=,'{]^{',=-*)", +"....)*-=,'{]^{',=-*)", +"....;%>-=,'{{',=->%;", +".....;%&$******$&%;.", +".......;)!%%%%!);..."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gtk/unsave.xpm Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,31 @@ +/* XPM */ +static char * unsave_xpm[] = { +"20 20 8 1", +" c None", +". c #CECECE", +"+ c #000000", +"@ c #4A4A4A", +"# c #FF6B8F", +"$ c #DC0049", +"% c #960031", +"& c #626262", +"....................", +"...+++........@++...", +"..++#++......@+#++..", +".++#$#++....@+#$#++.", +".+#$$$#++..@+#$$$%+.", +".++%$$$#+&&+#$$$%++.", +"..++%$$$#++#$$$%++..", +"...++%$$$##$$$%++...", +"....++%$$$$$$%++....", +".....&+%$$$$%+&.....", +".....&+#$$$$#+&.....", +"....++#$$$$$$#++....", +"...++#$$$%%$$$#++...", +"..++#$$$%++%$$$#++..", +".++#$$$%+&&+%$$$#++.", +".+$$$$%++..@+%$$$$+.", +".++%$%++....@+%$%++.", +"..++%++......@+%++..", +"...+++........@++...", +"...................."};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/install.sh Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,42 @@ +#! /bin/sh +# +# Copyright (c) 1999 Marcel Moolenaar +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer +# in this position and unchanged. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software withough specific prior written permission +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD: src/tools/install.sh,v 1.3 1999/12/15 18:08:56 marcel Exp $ + +# parse install's options and ignore them completely. +# XXX - not all options are recognised. +while [ ! -z $1 ]; do + case $1 in + -C | -c | -D | -M | -p | -s) shift;; + -f | -g | -m | -o) shift; shift;; + *) break; + esac +done + +# the remaining arguments are assumed to be files/dirs only. +exec install -c -p $*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile.b32 Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,22 @@ +GUISTARTUP=c0w32.obj +LIBS=import32.lib cw32mt.lib +CFLAGS=-c -tWM -w-par -y -v +LFLAGS=-aa -v -L$(LIBPATH) + +# the first rule will be made by default +all: handyftp.exe + +handyftp.obj: handyftp.c + bcc32 $(CFLAGS) handyftp.c + +compat.obj: compat.c + bcc32 $(CFLAGS) compat.c + +dw.obj: win\dw.c + bcc32 $(CFLAGS) win\dw.c + +handyftpw.res: handyftpw.rc + brcc32 handyftpw.rc + +handyftp.exe: handyftp.obj dw.obj compat.obj handyftpw.res + ilink32 $(LFLAGS) $(GUISTARTUP) handyftp.obj dw.obj compat.obj,handyftp.exe,,$(LIBS),,handyftpw.res
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile.emx Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,44 @@ +# $Id: makefile.emx,v 1.5 2005/04/17 11:36:53 nuke Exp $ + +# Dynamic Mail Makefile + +CC = gcc +RM = rm -f +RC = rc +MAKE = make +COMPRESS = lxlite + +DEFS = +LIBS = + +CFLAGS = -O2 -g -Zomf -Zmt -D__ST_MT_ERRNO__ -I. -Wall +LDFLAGS = -lsocket +RCFLAGS = -r + + +OBJECTS = dmail.o backend.o receive.o send.o parse.o account.o datetime.o + +SOURCES = dmail.c backend.c receive.c send.c parse.c account.c datetime.c + +all: dmail.exe + +$(OBJECTS): + $(CC) $(CFLAGS) -c $< + +dmail.exe: $(OBJECTS) + $(RC) $(RCFLAGS) dmail.rc + $(CC) $(CFLAGS) $(DEFS) -o dmail.exe $(OBJECTS) $(LDFLAGS) -ldw -ldwcompat dmail.def dmail.res +# $(COMPRESS) dmail.exe + +clean: + $(RM) $(OBJECTS) dmail.exe dmail.res + +dmail.o: dmail.c dmail.h backend.h +backend.o: backend.c backend.h +receive.o: receive.c sendrecv.h +send.o: send.c sendrecv.h +parse.o: parse.c parse.h +account.o: account.c +datetime.o: datetime.c datetime.h +dmail.res: dmail.rc dmail.h +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile.vac Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,47 @@ +# DynamicMail Makefile + +# Edit this as necessary. +DWLIBPATH=d:\work\netlabs\dwindows\lib +DWINCPATH=d:\work\netlabs\dwindows + +.SUFFIXES: \ + .c .obj + +CFLAGS = /Ti /DOS2 /DTCPV40HDRS /I. /I$(DWINCPATH) /Sm /Ss /Q /Gm /Gt /C +LDFLAGS = /DE /optfunc + + +OBJECTS = dmail.obj backend.obj receive.obj send.obj parse.obj account.obj datetime.obj + +SOURCES = dmail.c backend.c receive.c send.c parse.c account.c datetime.c + +all: dmail.exe + +$(OBJECTS): + icc $(CFLAGS) %s + +dmail.exe: $(OBJECTS) + rc -r dmail.rc + icc @<< + /B" $(LDFLAGS)" + /Fedmail.exe + so32dll.lib tcp32dll.lib $(DWLIBPATH)\dw.lib $(DWLIBPATH)\dwcompat.lib + $(OBJECTS) + dmail.def +<< + rc -x2 dmail.res dmail.exe +# lxlite sfx.exe + +clean: + rm $(OBJECTS) dw.obj dmail.exe dmail.res + + +dmail.obj: dmail.c dmail.h backend.h +backend.obj: backend.c backend.h +receive.obj: receive.c sendrecv.h +send.obj: send.c sendrecv.h +parse.obj: parse.c parse.h +account.obj: account.c +datetime.obj: datetime.c datetime.h +dmail.res: dmail.rc dmail.h +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makefile.vc Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,55 @@ +# DynamicMail Makefile for Win32 + +# Change these as needed +DWLIBDIR=\netlabs\dwindows\lib +DWINCDIR=\netlabs\dwindows + +CC = cl +CFLAGS = -c -G5 -GD -Zp1 -DWIN32 -D__WIN32__ -DMSVC -I. -I$(DWINCDIR) +CFLAGS_DEBUG = -Zi +CFLAGS_COMPILE = -MTd +LIBS = wsock32.lib kernel32.lib user32.lib comctl32.lib gdi32.lib advapi32.lib shell32.lib comdlg32.lib $(DWLIBDIR)\dw.lib $(DWLIBDIR)\dwcompat.lib +RES = +LINKFLAGS = -machine:i386 -debug:full -debugtype:cv +DLLLINKFLAGS = -dll +LINK = link +DEFFILE = dmail.def + +OBJS = dmail.obj \ + backend.obj \ + receive.obj \ + send.obj \ + parse.obj \ + account.obj \ + datetime.obj \ + winmain.obj + +all: dmail.exe + +clean: + -erase *.dll + -erase *.exe + -erase *.opt + -erase *.lib + -erase *.obj + -erase *.map + -erase *.pdb + -erase *.ilk + -erase *.exp + -erase *.res + -erase *~ + +dmailw.res: dmailw.rc + rc -r dmailw.rc + +dmail.exe: $(OBJS) dmailw.res + $(LINK) @<< +-out:$(@) -def:$(DEFFILE) -subsystem:windows +$(LINKFLAGS) +$(OBJS) +$(LIBS) +dmailw.res +<< + +.c.obj: + $(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) $*.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/Makefile.in Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,78 @@ +CC = @CC@ +CCFLAGS = @CFLAGS@ -g -O2 -fPIC -Wall -D__UNIX__ +LFLAGS = @LIBS@ +INSTALL = @INSTALL@ +INCPATH = -I.. -I. +DESTDIR = .. +MLFLAGS = -L$(DESTDIR) +TARGET = minimal +SRCS = minimal.c +OBJECTS = minimal.o +TARGET2 = dwcompat +VER_MAJ = 1 +VER_MIN = 0 +PREFIX = @prefix@ + +.SUFFIXES: .c .h + +.c.o: + $(CC) -c $(CCFLAGS) $(INCPATH) -o $@ $< + + +# Link flags shared objects +SYSCONF_LFLAGS_SHOBJ = -shared + +# Linking shared libraries +# - Build the $(TARGET) library, eg. lib$(TARGET).so.0.0 +# - Place target in $(DESTDIR) - which has a trailing / +# - Usually needs to incorporate $(VER_MAJ) and $(VER_MIN) +# +SYSCONF_LINK_SHLIB = gcc +SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN) +SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \ + -o $(SYSCONF_LINK_TARGET_SHARED) \ + $(OBJECTS) $(LFLAGS); \ + mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \ + cd $(DESTDIR); \ + rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ) + +# Linking static libraries +# - Build the $(TARGET) library, eg. lib$(TARGET).a +# - Place target in $(DESTDIR) - which has a trailing / +# +SYSCONF_AR = ar cqs +SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a +SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \ + $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) + + + +####### Build rules + +SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED) +SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED) + +all: $(SYSCONF_LINK_TARGET) + +install: + cd $(DESTDIR); \ + $(INSTALL) $(SYSCONF_LINK_TARGET) $(PREFIX)/lib; \ + $(INSTALL) $(SYSCONF_LINK_TARGET2) $(PREFIX)/lib; \ + cd $(PREFIX)/lib; \ + rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \ + rm -f lib$(TARGET2).so lib$(TARGET2).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED2) lib$(TARGET2).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED2) lib$(TARGET2).so.$(VER_MAJ) + +clean: + rm -f *.so + rm -f *.o + rm -f *~ + rm -f *.a + +$(SYSCONF_LINK_TARGET): $(OBJECTS) + $(SYSCONF_LINK_LIB)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/makefile.emx Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,36 @@ +# $Id: makefile.emx,v 1.3 2005/04/17 11:36:53 nuke Exp $ + +# Dynamic Mail Makefile + +CC = gcc +RM = rm -f +RC = rc +MAKE = make +COMPRESS = lxlite + +DEFS = +LIBS = + +CFLAGS = -O2 -g -Zomf -Zmt -Zdll -Zcrtdll -D__ST_MT_ERRNO__ -I. -I.. -Wall +LDFLAGS = -lsocket +RCFLAGS = -r + + +OBJECTS = minimal.o + +SOURCES = minimal.c + +all: minimal.dll + +$(OBJECTS): + $(CC) $(CFLAGS) -c $< + +minimal.dll: $(OBJECTS) + $(CC) $(CFLAGS) $(DEFS) -o minimal.dll $(OBJECTS) $(LDFLAGS) -ldw -ldwcompat minimal.def + copy minimal.dll .. + +clean: + $(RM) $(OBJECTS) minimal.dll + +minimal.o: minimal.c minimal.h +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/makefile.vac Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,33 @@ +# DynamicMail Minimal Plugin Makefile + +# Edit this as necessary. +DWLIBPATH=d:\work\netlabs\dwindows\lib +DWINCPATH=d:\work\netlabs\dwindows + +.SUFFIXES: .c .obj + +.all: \ + minimal.dll + +.c.obj: + icc.exe /DTCPV40HDRS /DOS2 /I. /I.. /I$(DWINCPATH) /Tdc /Ss /Wprorearet /Wpro+ /V"Minimal" /Tm+ /Ti /Gm /Gd- /G5 /Ge- /C /W3 /Wini+ /Wpar+ /Wpro+ /Wuse+ %s + +minimal.dll: \ + minimal.obj + @echo " Link::Linker " + icc.exe @<< + /B" /NOE /de /ST:32768 /nologo /li" + /Fe"minimal.dll" minimal.def + minimal.obj + $(DWLIBPATH)\dw.lib + $(DWLIBPATH)\dwcompat.lib +<< + copy minimal.dll .. + +clean : + @if exist *.obj del *.obj + @if exist *.map del *.map + @if exist *.lib del *.lib + @if exist *.dll del *.dll + @if exist *.exe del *.exe +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/makefile.vc Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,44 @@ +# DynamicMail Minimal Plugin Makefile for Win32 + +# Change these as needed +DWLIBDIR=\netlabs\dwindows\lib +DWINCDIR=\netlabs\dwindows + +CC = cl +CFLAGS = -c -G5 -GD -Zp1 -DWIN32 -D__WIN32__ -DMSVC -DBUILD_DLL -I$(DWINCDIR) -I. -I.. +CFLAGS_DEBUG = -Zi +CFLAGS_COMPILE = -MTd +LIBS = $(DWLIBDIR)\dw.lib $(DWLIBDIR)\dwcompat.lib +RES = +LINKFLAGS = -machine:i386 -debug:full -debugtype:cv +DLLLINKFLAGS = -dll +LINK = link +DEFFILE = minimalw.def + +OBJS = minimal.obj + +all: minimal.dll + +clean: + -erase *.dll + -erase *.exe + -erase *.opt + -erase *.lib + -erase *.obj + -erase *.map + -erase *.pdb + -erase *.ilk + -erase *.exp + -erase *~ + +minimal.dll: $(OBJS) $(DEFFILE) + $(LINK) @<< +-out:$(@) -def:$(DEFFILE) +$(LINKFLAGS) $(DLLLINKFLAGS) +$(OBJS) $(RES) +$(LIBS) +<< + copy minimal.dll .. + +.c.obj: + $(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) $*.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/minimal.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,848 @@ +/* + * This is a minimal disk based implementation of the + * mail backend. + */ +#include <stdio.h> +#include <sys/stat.h> +#include <string.h> +#include <compat.h> +#include <dw.h> +#include "backend.h" +#include "minimal.h" + +/* Choose a unique ID for this plugin */ +#define MINIMAL_BACKEND_ID 123 +#define FOLDER_INI_NAME "Folder.ini" +#define MAIL_INI_NAME "Mail.ini" +#define ACCOUNT_INI_NAME "Account.ini" + +HMTX backend_mtx; + +int API backend_newfolder(Account *acc, MailFolder *mf); + +/* Utility function */ +void stripcrlf(char *buffer) +{ + int z, len = strlen(buffer); + + for(z=0;z<len;z++) + { + if(buffer[z] == '\r' || buffer[z] == '\n') + { + buffer[z] = 0; + return; + } + } +} + +/* Initialize this backend */ +int API backend_init(BackendInfo *bi) +{ + sprintf(bi->Name, "Minimal"); + sprintf(bi->Author, "Brian Smith"); + + backend_mtx = dw_mutex_new(); + + return MINIMAL_BACKEND_ID; +} + +/* Shutdown this backend, doing any cleanup */ +int API backend_shutdown(void) +{ + dw_mutex_close(backend_mtx); + + return 0; +} + +/* Open a mail account, allocating any needed resources */ +Account * API backend_openaccount(char *name) +{ + char *namebuf; + AccountStruct *as = malloc(sizeof(AccountStruct)); + + dw_mutex_lock(backend_mtx); + + namebuf = malloc(strlen(name) + strlen(FOLDER_INI_NAME) + 2); + sprintf(namebuf, "%s/%s", name, FOLDER_INI_NAME); + + as->Type = DATA_TYPE_ACCOUNT; + as->fp = fopen(namebuf, "r+"); + as->name = strdup(name); + + free(namebuf); + + dw_mutex_unlock(backend_mtx); + return (Account *)as; +} + +/* Open a mail account, allocating any needed resources */ +Account * API backend_newaccount(char *name) +{ + char *namebuf; + AccountStruct *as = malloc(sizeof(AccountStruct)); + MailFolder mf; + + dw_mutex_lock(backend_mtx); + + makedir(name); + namebuf = malloc(strlen(name) + strlen(FOLDER_INI_NAME) + 2); + sprintf(namebuf, "%s/%s", name, FOLDER_INI_NAME); + + as->Type = DATA_TYPE_ACCOUNT; + as->fp = fopen(namebuf, "w+"); + as->name = strdup(name); + + free(namebuf); + + /* Create the default folders */ + strcpy(mf.Parent, ""); + mf.Flags = 0; + strcpy(mf.Name, "Drafts"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Inbox"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Outbox"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Sent Mail"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Trash"); + backend_newfolder(as, &mf); + + dw_mutex_unlock(backend_mtx); + return (Account *)as; +} + +/* Close an account previously opened with openaccount() */ +int API backend_closeaccount(Account *acc) +{ + AccountStruct *as = (AccountStruct *)acc; + + dw_mutex_lock(backend_mtx); + if(as) + { + if(as->fp) + fclose(as->fp); + if(as->name) + free(as->name); + free(as); + } + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Get a list of available accounts */ +char ** API backend_getaccounts(void) +{ + int counter = 0; + char **ret = NULL; + DIR *dir; + struct dirent *ent; + struct stat bleah; + + if(!(dir = opendir("."))) + return NULL; + + while((ent = readdir(dir)) != 0) + { + stat(ent->d_name, &bleah); + + if(S_ISDIR(bleah.st_mode)) + { + char *namebuf = malloc(strlen(ent->d_name) + strlen(FOLDER_INI_NAME) + 2); + + sprintf(namebuf, "%s/%s", ent->d_name, FOLDER_INI_NAME); + + if(!stat(namebuf, &bleah)) + counter++; + + free(namebuf); + } + } + rewinddir(dir); + if(counter) + { + ret = calloc(counter+1, sizeof(char *)); + + counter = 0; + + while((ent = readdir(dir)) != 0) + { + stat(ent->d_name, &bleah); + + if(S_ISDIR(bleah.st_mode)) + { + char *namebuf = malloc(strlen(ent->d_name) + strlen(FOLDER_INI_NAME) + 2); + + sprintf(namebuf, "%s/%s", ent->d_name, FOLDER_INI_NAME); + + if(!stat(namebuf, &bleah)) + { + ret[counter] = strdup(ent->d_name); + counter++; + } + + free(namebuf); + } + } + } + + closedir(dir); + return ret; +} + +/* Free the allocated list of accounts */ +void API backend_freeaccounts(char **list) +{ + if(list) + { + int z = 0; + + while(list[z]) + { + free(list[z]); + z++; + } + free(list); + } +} + +/* Save settings associated with an account */ +void API backend_newsettings(Account *acc, AccountSettings *set) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + FILE *fp; + + if(!as || !set) + return; + + dw_mutex_lock(backend_mtx); + set->Type = DATA_TYPE_SETTINGS; + + namebuf = malloc(strlen(as->name) + strlen(ACCOUNT_INI_NAME) + 2); + sprintf(namebuf, "%s/" ACCOUNT_INI_NAME, as->name); + if((fp = fopen(namebuf, "w")) != NULL) + { + fprintf(fp, "RECVHOSTTYPE=%d\n", set->RecvHostType); + fprintf(fp, "RECVHOSTNAME=%s\n", set->RecvHostName); + fprintf(fp, "RECVHOSTPORT=%d\n", set->RecvHostPort); + fprintf(fp, "RECVHOSTUSER=%s\n", set->RecvHostUser); + fprintf(fp, "RECVHOSTPASS=%s\n", set->RecvHostPass); + fprintf(fp, "SENDHOSTTYPE=%d\n", set->SendHostType); + fprintf(fp, "SENDHOSTNAME=%s\n", set->SendHostName); + fprintf(fp, "SENDHOSTPORT=%d\n", set->SendHostPort); + fprintf(fp, "SENDHOSTUSER=%s\n", set->SendHostUser); + fprintf(fp, "SENDHOSTPASS=%s\n", set->SendHostPass); + fprintf(fp, "USEREMAIL=%s\n", set->UserEmail); + fprintf(fp, "USERREALNAME=%s\n", set->UserRealName); + fprintf(fp, "REPLYEMAIL=%s\n", set->ReplyEmail); + fprintf(fp, "REPLYREALNAME=%s\n",set->ReplyRealName); + fclose(fp); + } + free(namebuf); + dw_mutex_unlock(backend_mtx); + return; +} + +/* Generic function to parse information from a config file */ +void getline(FILE *f, char *entry, char *entrydata) +{ + char in[256]; + int z; + + memset(in, 0, 256); + fgets(in, 255, f); + + if(in[strlen(in)-1] == '\n') + in[strlen(in)-1] = 0; + + if(in[0] != '#') + { + for(z=0;z<strlen(in);z++) + { + if(in[z] == '=') + { + in[z] = 0; + strcpy(entry, in); + strcpy(entrydata, &in[z+1]); + return; + } + } + } + strcpy(entry, ""); + strcpy(entrydata, ""); +} + +/* Load settings associated with an account */ +void API backend_getsettings(Account *acc, AccountSettings *set) +{ + AccountStruct *as = (AccountStruct *)acc; + char entry[256], entrydata[256], *namebuf; + FILE *fp; + + if(!as || !set) + return; + + dw_mutex_lock(backend_mtx); + set->Type = DATA_TYPE_SETTINGS; + + namebuf = malloc(strlen(as->name) + strlen(ACCOUNT_INI_NAME) + 2); + sprintf(namebuf, "%s/" ACCOUNT_INI_NAME, as->name); + strncpy(set->AccountName, as->name, ACCOUNTNAME_MAX); + if((fp = fopen(namebuf, "r")) != NULL) + { + while(!feof(fp)) + { + getline(fp, entry, entrydata); + if(strcasecmp(entry, "recvhosttype")==0) + set->RecvHostType = atoi(entrydata); + if(strcasecmp(entry, "recvhostname")==0) + strncpy(set->RecvHostName, entrydata, HOSTNAME_MAX); + if(strcasecmp(entry, "recvhostport")==0) + set->RecvHostPort = atoi(entrydata); + if(strcasecmp(entry, "recvhostuser")==0) + strncpy(set->RecvHostUser, entrydata, USERNAME_MAX); + if(strcasecmp(entry, "recvhostpass")==0) + strncpy(set->RecvHostPass, entrydata, USERNAME_MAX); + if(strcasecmp(entry, "sendhosttype")==0) + set->SendHostType = atoi(entrydata); + if(strcasecmp(entry, "sendhostname")==0) + strncpy(set->SendHostName, entrydata, HOSTNAME_MAX); + if(strcasecmp(entry, "sendhostport")==0) + set->SendHostPort = atoi(entrydata); + if(strcasecmp(entry, "sendhostuser")==0) + strncpy(set->SendHostUser, entrydata, USERNAME_MAX); + if(strcasecmp(entry, "sendhostpass")==0) + strncpy(set->SendHostPass, entrydata, USERNAME_MAX); + if(strcasecmp(entry, "useremail")==0) + strncpy(set->UserEmail, entrydata, HOSTNAME_MAX + USERNAME_MAX); + if(strcasecmp(entry, "userrealname")==0) + strncpy(set->UserRealName, entrydata, REALNAME_MAX); + if(strcasecmp(entry, "replyemail")==0) + strncpy(set->ReplyEmail, entrydata, HOSTNAME_MAX + USERNAME_MAX); + if(strcasecmp(entry, "replyrealname")==0) + strncpy(set->ReplyRealName, entrydata, REALNAME_MAX); + } + fclose(fp); + } + free(namebuf); + dw_mutex_unlock(backend_mtx); + return; +} + +void addfolderitem(MailFolder *mf, char *buf, int commas) +{ + switch(commas) + { + case 0: + strcpy(mf->Name, buf); + break; + case 1: + strcpy(mf->Parent, buf); + break; + case 2: + mf->Flags = atoi(buf); + break; + } +} + +/* Get an array of folders */ +MailFolder * API backend_getfolders(Account *acc) +{ + AccountStruct *as = (AccountStruct *)acc; + MailFolder *mf = NULL; + char buf[1024]; + int counter = 0; + + if(!as || !as->fp) + return NULL; + + dw_mutex_lock(backend_mtx); + /* Find out how many folders we have */ + rewind(as->fp); + while(!feof(as->fp)) + { + if(fgets(buf, 1024, as->fp)) + { + stripcrlf(buf); + counter++; + } + } + /* Allocate a sufficient return buffer */ + mf = calloc(counter + 1, sizeof(MailFolder)); + rewind(as->fp); + counter = 0; + /* Fill in the table */ + while(!feof(as->fp)) + { + int z, len, commas = 0; + char *start = buf; + + if(fgets(buf, 1024, as->fp)) + { + stripcrlf(buf); + len = strlen(buf); + + for(z=0;z<len;z++) + { + if(buf[z] == ',') + { + buf[z] = 0; + addfolderitem(&mf[counter], start, commas); + start = &buf[z+1]; + commas++; + + } + } + addfolderitem(&mf[counter], start, commas); + mf[counter].Type = DATA_TYPE_FOLDER; + mf[counter].Acc = acc; + counter++; + } + } + dw_mutex_unlock(backend_mtx); + return mf; +} + +/* Create a new folder in an account */ +int API backend_newfolder(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + + if(!as || !as->fp) + return 1; + + dw_mutex_lock(backend_mtx); + fseek(as->fp, 0, SEEK_END); + fprintf(as->fp, "%s,%s,%d\n", mf->Name, mf->Parent, (int)mf->Flags); + + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3); + if(mf->Parent[0]) + sprintf(namebuf, "%s/%s/%s", as->name, mf->Parent, mf->Name); + else + sprintf(namebuf, "%s/%s", as->name, mf->Name); + makedir(namebuf); + free(namebuf); + + mf->Type = DATA_TYPE_FOLDER; + mf->Acc = acc; + + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Remove a folder from an account */ +int API backend_delfolder(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + FILE *tmp; + MailFolder *mfs; + int z = 0; + + if(!as || !as->fp) + return 1; + + if(!(mfs = backend_getfolders(acc))) + return 1; + + dw_mutex_lock(backend_mtx); + + /* Remove the entry from the INI file */ + if(!(tmp = fopen("tmpfold.ini", "w"))) + return 1; + + while(mfs[z].Name[0]) + { + if(strcmp(mfs[z].Name, mf->Name) != 0 && strcmp(mfs[z].Parent, mf->Parent) != 0) + fprintf(tmp, "%s,%s,%d\n", mfs[z].Name, mfs[z].Parent, (int)mfs[z].Flags); + z++; + } + fclose(tmp); + free(mfs); + namebuf = malloc(strlen(as->name) + strlen(FOLDER_INI_NAME) + 2); + + /* Replace the temporary file with the real one + * and reopen the handle. + */ + sprintf(namebuf, "%s/%s", as->name, FOLDER_INI_NAME); + remove(namebuf); + fclose(as->fp); + rename("tmpfold.ini", namebuf); + as->fp = fopen(namebuf, "r+"); + free(namebuf); + + /* Delete the actual directory */ + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3); + if(mf->Parent[0]) + sprintf(namebuf, "%s/%s/%s", as->name, mf->Parent, mf->Name); + else + sprintf(namebuf, "%s/%s", as->name, mf->Name); + rmdir(namebuf); + free(namebuf); + + dw_mutex_unlock(backend_mtx); + return 0; +} + +void addmailitem(MailItem *mi, char *buf, int commas) +{ + switch(commas) + { + /* Mail ID */ + case 0: + mi->Id = atoi(buf); + break; + /* Mail Size */ + case 1: + mi->Size = atoi(buf); + break; + /* Mail Date */ + case 2: + { + int month = 0, day = 0, year = 0; + if(buf[0]) + sscanf(buf, "%d-%d-%d", &month, &day, &year); + mi->Date.month = month; + mi->Date.day = day; + mi->Date.year = year; + } + break; + /* Mail Time */ + case 3: + { + int hours = 0, minutes = 0, seconds = 0; + if(buf[0]) + sscanf(buf, "%d:%d:%d", &hours, &minutes, &seconds); + mi->Time.hours = hours; + mi->Time.minutes = minutes; + mi->Time.seconds = seconds; + } + break; + /* Mail Topic */ + case 4: + strcpy(mi->Topic, buf); + break; + /* Mail To */ + case 5: + strcpy(mi->To, buf); + break; + /* Mail From */ + case 6: + strcpy(mi->From, buf); + break; + } +} + +/* Get a list of mail entries */ +MailItem * API backend_getitems(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + MailItem *mi = NULL; + char buf[1024], *namebuf; + int counter = 0; + FILE *tmp; + + if(!as || !mf) + return NULL; + + dw_mutex_lock(backend_mtx); + /* Find out how many items we have */ + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + strlen(MAIL_INI_NAME) + 4); + if(mf->Parent[0]) + sprintf(namebuf, "%s/%s/%s/" MAIL_INI_NAME, as->name, mf->Parent, mf->Name); + else + sprintf(namebuf, "%s/%s/" MAIL_INI_NAME, as->name, mf->Name); + if(!(tmp = fopen(namebuf, "r"))) + { + free(namebuf); + dw_mutex_unlock(backend_mtx); + return NULL; + } + free(namebuf); + while(!feof(tmp)) + { + if(fgets(buf, 1024, tmp)) + { + stripcrlf(buf); + counter++; + } + } + /* Allocate a sufficient return buffer */ + mi = calloc(counter + 1, sizeof(MailItem)); + rewind(tmp); + counter = 0; + /* Fill in the table */ + while(!feof(tmp)) + { + int z, len, commas = 0; + char *start = buf; + + if(fgets(buf, 1024, tmp)) + { + stripcrlf(buf); + len = strlen(buf); + + + for(z=0;z<len;z++) + { + if(buf[z] == '\255') + { + buf[z] = 0; + addmailitem(&mi[counter], start, commas); + start = &buf[z+1]; + commas++; + + } + } + addmailitem(&mi[counter], start, commas); + mi[counter].Type = DATA_TYPE_ITEM; + mi[counter].Acc = acc; + mi[counter].Folder = mf; + counter++; + } + } + fclose(tmp); + dw_mutex_unlock(backend_mtx); + return mi; +} + +/* Create a name using base 36 */ +void makename(char *buf, int num) +{ + int mynum = num, z; + + for(z=0;z<8;z++) + { + int rem = mynum % 36; + + if(rem > -1 && rem < 10) + buf[7-z] = '0' + rem; + else if(rem > 9) + buf[7-z] = 'a' + (rem-10); + + mynum = mynum / 36; + + if(mynum == 0) + break; + } +} + +/* Create a new mail item */ +int API backend_newitem(Account *acc, MailFolder *mf, MailItem *mi) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + FILE *tmp; + struct stat bleah; + int pos; + + if(!as || !mf || !mi) + return 1; + + dw_mutex_lock(backend_mtx); + + /* Start at 1 not 0 */ + if(!mf->LastId) + mf->LastId = 1; + + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 16); + if(mf->Parent[0]) + { + pos = strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3; + sprintf(namebuf, "%s/%s/%s/00000000.msg", as->name, mf->Parent, mf->Name); + } + else + { + pos = strlen(as->name) + strlen(mf->Name) + 2; + sprintf(namebuf, "%s/%s/00000000.msg", as->name, mf->Name); + } + + makename(&namebuf[pos], mf->LastId); + + while(!stat(namebuf, &bleah)) + { + mf->LastId++; + makename(&namebuf[pos], mf->LastId); + } + + mi->Id = mf->LastId; + mi->Type = DATA_TYPE_ITEM; + mi->Acc = acc; + mi->Folder = mf; + mf->LastId++; + free(namebuf); + + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + strlen(MAIL_INI_NAME) + 4); + if(mf->Parent[0]) + sprintf(namebuf, "%s/%s/%s/" MAIL_INI_NAME, as->name, mf->Parent, mf->Name); + else + sprintf(namebuf, "%s/%s/" MAIL_INI_NAME, as->name, mf->Name); + if(!(tmp = fopen(namebuf, "a+"))) + { + free(namebuf); + dw_mutex_unlock(backend_mtx); + return 1; + } + free(namebuf); + fprintf(tmp, "%d\255%d\255%d-%d-%d\255%d:%d:%d\255%s\255%s\255%s\n", (int)mi->Id, (int)mi->Size, + mi->Date.month, mi->Date.day, mi->Date.year, mi->Time.hours, mi->Time.minutes, mi->Time.seconds, + mi->Topic, mi->To, mi->From); + fclose(tmp); + dw_mutex_unlock(backend_mtx); + + return 0; +} + +/* Remove a mail item from a mail folder */ +int API backend_delitem(Account *acc, MailFolder *mf, MailItem *mi) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + FILE *tmp; + MailItem *mis; + int pos, z = 0; + + if(!as) + return 1; + + if(!(mis = backend_getitems(acc, mf))) + return 1; + + dw_mutex_lock(backend_mtx); + + /* Remove the entry from the INI file */ + if(!(tmp = fopen("tmpmail.ini", "w"))) + return 1; + + while(mis[z].Id) + { + if(mi->Id != mis[z].Id) + fprintf(tmp, "%d\255%d\255%d-%d-%d\255%d:%d:%d\255%s\255%s\255%s\n", (int)mis[z].Id, (int)mis[z].Size, + mis[z].Date.month, mis[z].Date.day, mis[z].Date.year, mis[z].Time.hours, mis[z].Time.minutes, mis[z].Time.seconds, + mis[z].Topic, mis[z].To, mis[z].From); + z++; + } + fclose(tmp); + free(mis); + + /* Replace the temporary file with the real one. + */ + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + strlen(MAIL_INI_NAME) + 4); + if(mf->Parent[0]) + sprintf(namebuf, "%s/%s/%s/" MAIL_INI_NAME, as->name, mf->Parent, mf->Name); + else + sprintf(namebuf, "%s/%s/" MAIL_INI_NAME, as->name, mf->Name); + remove(namebuf); + rename("tmpmail.ini", namebuf); + free(namebuf); + + /* Actually delete the message file */ + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 16); + if(mf->Parent[0]) + { + pos = strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3; + sprintf(namebuf, "%s/%s/%s/00000000.msg", as->name, mf->Parent, mf->Name); + } + else + { + pos = strlen(as->name) + strlen(mf->Name) + 2; + sprintf(namebuf, "%s/%s/00000000.msg", as->name, mf->Name); + } + makename(&namebuf[pos], mi->Id); + remove(namebuf); + free(namebuf); + + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Retrieve a raw mail buffer associated with a mail item */ +char * API backend_getmail(Account *acc, MailFolder *mf, MailItem *mi, unsigned long *len) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf, *mailbuf = NULL; + FILE *tmp; + struct stat bleah; + int pos; + + if(!as || !mf || !mi || !len) + return NULL; + + *len = 0; + + dw_mutex_lock(backend_mtx); + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 16); + if(mf->Parent[0]) + { + pos = strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3; + sprintf(namebuf, "%s/%s/%s/00000000.msg", as->name, mf->Parent, mf->Name); + } + else + { + pos = strlen(as->name) + strlen(mf->Name) + 2; + sprintf(namebuf, "%s/%s/00000000.msg", as->name, mf->Name); + } + + makename(&namebuf[pos], mi->Id); + + if(!stat(namebuf, &bleah) && (tmp = fopen(namebuf, FOPEN_READ_BINARY))) + { + mailbuf = malloc(bleah.st_size+1); + fread(mailbuf, bleah.st_size, 1, tmp); + mailbuf[bleah.st_size] = 0; + fclose(tmp); + *len = bleah.st_size; + } + free(namebuf); + dw_mutex_unlock(backend_mtx); + return mailbuf; +} + +/* Create a raw mail entry associated with a mail item */ +int API backend_newmail(Account *acc, MailFolder *mf, MailItem *mi, char *buf, unsigned long len) +{ + AccountStruct *as = (AccountStruct *)acc; + char *namebuf; + FILE *tmp; + int pos; + + if(!as || !mf || !mi) + return 1; + + dw_mutex_lock(backend_mtx); + namebuf = malloc(strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 16); + if(mf->Parent[0]) + { + pos = strlen(as->name) + strlen(mf->Name) + strlen(mf->Parent) + 3; + sprintf(namebuf, "%s/%s/%s/00000000.msg", as->name, mf->Parent, mf->Name); + } + else + { + pos = strlen(as->name) + strlen(mf->Name) + 2; + sprintf(namebuf, "%s/%s/00000000.msg", as->name, mf->Name); + } + + makename(&namebuf[pos], mi->Id); + + if((tmp = fopen(namebuf, FOPEN_WRITE_BINARY)) != NULL) + { + fwrite(buf, len, 1, tmp); + fclose(tmp); + } + free(namebuf); + dw_mutex_unlock(backend_mtx); + + return 0; +} + +/* This function is here because the Visual C CRT doesn't + * like free()ing memory allocated in other modules. + */ +void API backend_free(Account *acc, void *buf) +{ + if(buf) + free(buf); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/minimal.def Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,29 @@ +LIBRARY MINIMAL INITINSTANCE TERMINSTANCE + +PROTMODE + +DESCRIPTION 'Minimal Dynamic Mail Backend' + +CODE LOADONCALL +DATA NONSHARED LOADONCALL + +EXPORTS + backend_init @1 + backend_shutdown @2 + backend_openaccount @3 + backend_newaccount @4 + backend_closeaccount @5 + backend_getaccounts @6 + backend_freeaccounts @7 + backend_getfolders @8 + backend_newfolder @9 + backend_delfolder @10 + backend_getitems @11 + backend_newitem @12 + backend_delitem @13 + backend_getmail @14 + backend_newmail @15 + backend_free @16 + backend_newsettings @17 + backend_getsettings @18 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/minimal.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,10 @@ +#ifndef _MINIMAL_H +#define _MINIMAL_H + +typedef struct { + int Type; + char *name; + FILE *fp; +} AccountStruct; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/minimal/minimalw.def Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,24 @@ +LIBRARY MINIMAL + +DESCRIPTION 'Minimal Dynamic Mail Backend' + +EXPORTS + backend_init @1 + backend_shutdown @2 + backend_openaccount @3 + backend_newaccount @4 + backend_closeaccount @5 + backend_getaccounts @6 + backend_freeaccounts @7 + backend_getfolders @8 + backend_newfolder @9 + backend_delfolder @10 + backend_getitems @11 + backend_newitem @12 + backend_delitem @13 + backend_getmail @14 + backend_newmail @15 + backend_free @16 + backend_newsettings @17 + backend_getsettings @18 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/Makefile.in Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,78 @@ +CC = @CC@ +CCFLAGS = @CFLAGS@ `mysql_config --cflags` -g -O2 -fPIC -Wall -D__UNIX__ +LFLAGS = @LIBS@ `mysql_config --libs` +INSTALL = @INSTALL@ +INCPATH = -I.. -I. +DESTDIR = .. +MLFLAGS = -L$(DESTDIR) +TARGET = mysqlplg +SRCS = mysqlplg.c +OBJECTS = mysqlplg.o +TARGET2 = dwcompat +VER_MAJ = 1 +VER_MIN = 0 +PREFIX = @prefix@ + +.SUFFIXES: .c .h + +.c.o: + $(CC) -c $(CCFLAGS) $(INCPATH) -o $@ $< + + +# Link flags shared objects +SYSCONF_LFLAGS_SHOBJ = -shared + +# Linking shared libraries +# - Build the $(TARGET) library, eg. lib$(TARGET).so.0.0 +# - Place target in $(DESTDIR) - which has a trailing / +# - Usually needs to incorporate $(VER_MAJ) and $(VER_MIN) +# +SYSCONF_LINK_SHLIB = gcc +SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN) +SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \ + -o $(SYSCONF_LINK_TARGET_SHARED) \ + $(OBJECTS) $(LFLAGS); \ + mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \ + cd $(DESTDIR); \ + rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ) + +# Linking static libraries +# - Build the $(TARGET) library, eg. lib$(TARGET).a +# - Place target in $(DESTDIR) - which has a trailing / +# +SYSCONF_AR = ar cqs +SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a +SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \ + $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) + + + +####### Build rules + +SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED) +SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED) + +all: $(SYSCONF_LINK_TARGET) + +install: + cd $(DESTDIR); \ + $(INSTALL) $(SYSCONF_LINK_TARGET) $(PREFIX)/lib; \ + $(INSTALL) $(SYSCONF_LINK_TARGET2) $(PREFIX)/lib; \ + cd $(PREFIX)/lib; \ + rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \ + rm -f lib$(TARGET2).so lib$(TARGET2).so.$(VER_MAJ); \ + ln -s $(SYSCONF_LINK_TARGET_SHARED2) lib$(TARGET2).so; \ + ln -s $(SYSCONF_LINK_TARGET_SHARED2) lib$(TARGET2).so.$(VER_MAJ) + +clean: + rm -f *.so + rm -f *.o + rm -f *~ + rm -f *.a + +$(SYSCONF_LINK_TARGET): $(OBJECTS) + $(SYSCONF_LINK_LIB)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/makefile.emx Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,36 @@ +# $Id: makefile.emx,v 1.3 2005/04/17 11:36:53 nuke Exp $ + +# Dynamic Mail Makefile + +CC = gcc +RM = rm -f +RC = rc +MAKE = make +COMPRESS = lxlite + +DEFS = +LIBS = + +CFLAGS = -O2 -g -Zomf -Zmt -Zdll -Zcrtdll -D__ST_MT_ERRNO__ -I. -I.. -I/usr/local/mysql/include -Wall +LDFLAGS = -lsocket -L/usr/local/mysql/lib -lmysqlclient +RCFLAGS = -r + + +OBJECTS = mysqlplg.o + +SOURCES = mysqlplg.c + +all: mysqlplg.dll + +$(OBJECTS): + $(CC) $(CFLAGS) -c $< + +mysqlplg.dll: $(OBJECTS) + $(CC) $(CFLAGS) $(DEFS) -o mysqlplg.dll $(OBJECTS) $(LDFLAGS) -ldw -ldwcompat mysqlplg.def + copy mysqlplg.dll .. + +clean: + $(RM) $(OBJECTS) mysqlplg.dll + +mysqlplg.o: mysqlplg.c mysqlplg.h +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/makefile.vac Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,34 @@ +# DynamicMail mysqlplg Plugin Makefile + +# Edit this as necessary. +DWLIBPATH=d:\work\netlabs\dwindows\lib +DWINCPATH=d:\work\netlabs\dwindows + +.SUFFIXES: .c .obj + +.all: \ + mysqlplg.dll + +.c.obj: + icc.exe /DTCPV40HDRS /DOS2 /I. /I.. /I$(DWINCPATH) /Tdc /Ss /Wprorearet /Wpro+ /V"mysqlplg" /Tm+ /Ti /Gm /Gd- /G5 /Ge- /C /W3 /Wini+ /Wpar+ /Wpro+ /Wuse+ %s + +mysqlplg.dll: \ + mysqlplg.obj + @echo " Link::Linker " + icc.exe @<< + /B" /NOE /de /ST:32768 /nologo /li" + /Fe"mysqlplg.dll" mysqlplg.def + mysqlplg.obj + mysqlclient.lib + $(DWLIBPATH)\dw.lib + $(DWLIBPATH)\dwcompat.lib +<< + copy mysqlplg.dll .. + +clean : + @if exist *.obj del *.obj + @if exist *.map del *.map + @if exist *.lib del *.lib + @if exist *.dll del *.dll + @if exist *.exe del *.exe +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/makefile.vc Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,44 @@ +# DynamicMail mysqlplg Plugin Makefile for Win32 + +# Change these as needed +DWLIBDIR=\netlabs\dwindows\lib +DWINCDIR=\netlabs\dwindows + +CC = cl +CFLAGS = -c -G5 -GD -Zp1 -DWIN32 -D__WIN32__ -DMSVC -DBUILD_DLL -I$(DWINCDIR) -I. -I.. +CFLAGS_DEBUG = -Zi +CFLAGS_COMPILE = -MTd +LIBS = $(DWLIBDIR)\dw.lib $(DWLIBDIR)\dwcompat.lib mysqlclient.lib wsock32.lib advapi32.lib user32.lib +RES = +LINKFLAGS = -machine:i386 -debug:full -debugtype:cv +DLLLINKFLAGS = -dll +LINK = link +DEFFILE = mysqlplgw.def + +OBJS = mysqlplg.obj + +all: mysqlplg.dll + +clean: + -erase *.dll + -erase *.exe + -erase *.opt + -erase *.lib + -erase *.obj + -erase *.map + -erase *.pdb + -erase *.ilk + -erase *.exp + -erase *~ + +mysqlplg.dll: $(OBJS) $(DEFFILE) + $(LINK) @<< +-out:$(@) -def:$(DEFFILE) +$(LINKFLAGS) $(DLLLINKFLAGS) +$(OBJS) $(RES) +$(LIBS) +<< + copy mysqlplg.dll .. + +.c.obj: + $(CC) $(CFLAGS) $(CFLAGS_DEBUG) $(CFLAGS_COMPILE) $*.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/mysqlplg.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,782 @@ +/* + * This is a MySQL Server based implementation of the + * mail backend. + */ +#include <stdio.h> +#include <sys/stat.h> +#include <string.h> +#include <compat.h> +#include <dw.h> +#include <mysql.h> +#include "backend.h" +#include "mysqlplg.h" + +#define TITLE "DynamicMail MySQL Plugin" + +/* Choose a unique ID for this plugin */ +#define MYSQL_BACKEND_ID 124 + +HMTX backend_mtx; +MYSQL dmail_db; +LoginStruct li; +char *tsformat = "%04d-%02d-%02d %02d:%02d:%02d"; + +int API backend_newfolder(Account *acc, MailFolder *mf); + +#define display_mysql_error() _display_mysql_error(__FILE__, __LINE__) + +void _display_mysql_error(char *file, int line) +{ + dw_messagebox(TITLE, DW_MB_OK | DW_MB_ERROR, "File: %s Line %d\n%s", file, line, mysql_error(&dmail_db)); +} + +/* Handle OK press on the login dialog. */ +void DWSIGNAL login_ok(HWND window, void *data) +{ + DWDialog *dwwait = (DWDialog *)data; + HWND entrywindow = (HWND)dwwait->data, name = NULL, pass = NULL, host = NULL; + char *login_username, *login_password, *login_hostname; + + name = (HWND)dw_window_get_data(entrywindow, "name"); + host = (HWND)dw_window_get_data(entrywindow, "host"); + pass = (HWND)dw_window_get_data(entrywindow, "pass"); + + login_hostname = dw_window_get_text(host); + login_username = dw_window_get_text(name); + login_password = dw_window_get_text(pass); + + if(login_hostname) + { + strcpy(li.hostname, login_hostname); + dw_free(login_hostname); + } + if(login_username) + { + strcpy(li.username, login_username); + dw_free(login_username); + } + if(login_password) + { + strcpy(li.password, login_password); + dw_free(login_password); + } + + /* Destroy the dialog */ + dw_window_destroy(entrywindow); + dw_dialog_dismiss(dwwait, (void *)1); +} + +/* Handle Cancel press on the login dialog. */ +void DWSIGNAL login_cancel(HWND window, void *data) +{ + DWDialog *dwwait = (DWDialog *)data; + HWND entrywindow = (HWND)dwwait->data; + + /* Destroy the dialog */ + dw_window_destroy(entrywindow); + dw_dialog_dismiss(dwwait, (void *)0); +} + +/* A dialog to get MySQL login information from the user */ +int login_dialog(void) +{ + HWND entrywindow, mainbox, entryfield, passfield, hostfield, cancelbutton, okbutton, buttonbox, stext; + ULONG style = DW_FCF_TITLEBAR | DW_FCF_SHELLPOSITION | DW_FCF_DLGBORDER; + DWDialog *dwwait; + + entrywindow = dw_window_new(HWND_DESKTOP, "DynamicMail MySQL Login", style); + + mainbox = dw_box_new(BOXVERT, 10); + + dw_box_pack_start(entrywindow, mainbox, 0, 0, TRUE, TRUE, 0); + + /* Hostname */ + stext = dw_text_new("Hostname:", 0); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(mainbox, stext, 130, 20, TRUE, TRUE, 2); + + hostfield = dw_entryfield_new("localhost", 100L); + + dw_entryfield_set_limit(hostfield, 20); + + dw_box_pack_start(mainbox, hostfield, 130, 20, TRUE, TRUE, 4); + + dw_window_set_data(entrywindow, "host", (void *)hostfield); + + /* User ID */ + stext = dw_text_new("Username:", 0); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(mainbox, stext, 130, 20, TRUE, TRUE, 2); + + entryfield = dw_entryfield_new("", 100L); + + dw_entryfield_set_limit(entryfield, 20); + + dw_box_pack_start(mainbox, entryfield, 130, 20, TRUE, TRUE, 4); + + dw_window_set_data(entrywindow, "name", (void *)entryfield); + + /* Password */ + stext = dw_text_new("Password:", 0); + + dw_window_set_style(stext, DW_DT_VCENTER, DW_DT_VCENTER); + + dw_box_pack_start(mainbox, stext, 130, 20, TRUE, TRUE, 2); + + passfield = dw_entryfield_password_new("", 100L); + + dw_entryfield_set_limit(passfield, 159); + + dw_box_pack_start(mainbox, passfield, 130, 20, TRUE, TRUE, 4); + + dw_window_set_data(entrywindow, "pass", (void *)passfield); + + /* Buttons */ + buttonbox = dw_box_new(BOXHORZ, 10); + + dw_box_pack_start(mainbox, buttonbox, 0, 0, TRUE, FALSE, 0); + + okbutton = dw_button_new("Ok", 1001L); + + dw_box_pack_start(buttonbox, okbutton, 130, 30, TRUE, FALSE, 2); + + cancelbutton = dw_button_new("Cancel", 1002L); + + dw_box_pack_start(buttonbox, cancelbutton, 130, 30, TRUE, FALSE, 2); + + dw_window_default(entrywindow, entryfield); + + dw_window_click_default(hostfield, entryfield); + + dw_window_click_default(entryfield, passfield); + + dw_window_click_default(passfield, okbutton); + + dwwait = dw_dialog_new((void *)entrywindow); + + dw_signal_connect(okbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(login_ok), (void *)dwwait); + dw_signal_connect(cancelbutton, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(login_cancel), (void *)dwwait); + + dw_window_set_size(entrywindow, 300, 250); + + dw_window_show(entrywindow); + + return (int)dw_dialog_wait(dwwait); +} + +int minversion(int major, int minor, int sub) +{ + char *version = mysql_get_server_info(&dmail_db); + int smajor, sminor, ssub; + + sscanf(version, "%d.%d.%d", &smajor, &sminor, &ssub); + + if(smajor > major) + return 1; + + if(smajor == major) + { + if(sminor > minor) + return 1; + + if(sminor == minor) + { + if(ssub >= sub) + return 1; + } + } + return 0; +} + +/* Initialize this backend */ +int API backend_init(BackendInfo *bi) +{ + /* Get the MySQL login information from the user */ + if(!login_dialog()) + return 0; + + mysql_init(&dmail_db); + if(!mysql_real_connect(&dmail_db, li.hostname, li.username, li.password, NULL, 0, NULL, 0)) + { + display_mysql_error(); + return 0; + } + + /* Select the database we want to use */ + if(mysql_select_db(&dmail_db, "DynamicMail")) + { + if(mysql_query(&dmail_db, MYSQL_DATABASE)) + { + display_mysql_error(); + return 0; + } + if(mysql_select_db(&dmail_db, "DynamicMail")) + { + display_mysql_error(); + return 0; + } + } + /* Check to see if our tables exist, if not try to create them */ + if(mysql_query(&dmail_db, "SELECT * FROM `Accounts`") + && (mysql_query(&dmail_db, MYSQL_TABLE1) + || mysql_query(&dmail_db, MYSQL_TABLE2) + || mysql_query(&dmail_db, MYSQL_TABLE3) + || mysql_query(&dmail_db, MYSQL_TABLE4))) + { + display_mysql_error(); + return 0; + } + else + { + MYSQL_RES *res=mysql_store_result(&dmail_db); + + if(res) + { + mysql_free_result(res); /* Release memory used to store results. */ + } + } + + /* If the server is a pre 4.1 version of MySQL + * then use the old timestamp format. + */ + if(!minversion(4, 1, 0)) + { + tsformat = "%04d%02d%02d%02d%02d%02d"; + } + + sprintf(bi->Name, "MySQL"); + sprintf(bi->Author, "Brian Smith"); + + backend_mtx = dw_mutex_new(); + + return MYSQL_BACKEND_ID; +} + +/* Shutdown this backend, doing any cleanup */ +int API backend_shutdown(void) +{ + dw_mutex_close(backend_mtx); + + return 0; +} + +/* Open a mail account, allocating any needed resources */ +Account * API backend_openaccount(char *name) +{ + AccountStruct *as = malloc(sizeof(AccountStruct)); + + dw_mutex_lock(backend_mtx); + + as->Type = DATA_TYPE_ACCOUNT; + as->name = strdup(name); + + dw_mutex_unlock(backend_mtx); + return (Account *)as; +} + +/* Open a mail account, allocating any needed resources */ +Account * API backend_newaccount(char *name) +{ + AccountStruct *as = malloc(sizeof(AccountStruct)); + MailFolder mf; + char buf[100]; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "INSERT INTO `Accounts` ( `name` )\nVALUES ( \'%s\' )", name); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + as->Type = DATA_TYPE_ACCOUNT; + as->name = strdup(name); + + /* Create the default folders */ + strcpy(mf.Parent, ""); + mf.Flags = 0; + strcpy(mf.Name, "Drafts"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Inbox"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Outbox"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Sent Mail"); + backend_newfolder(as, &mf); + strcpy(mf.Name, "Trash"); + backend_newfolder(as, &mf); + + dw_mutex_unlock(backend_mtx); + return (Account *)as; +} + +/* Close an account previously opened with openaccount() */ +int API backend_closeaccount(Account *acc) +{ + AccountStruct *as = (AccountStruct *)acc; + + dw_mutex_lock(backend_mtx); + if(as) + { + if(as->name) + free(as->name); + free(as); + } + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Get a list of available accounts */ +char ** API backend_getaccounts(void) +{ + int counter = 0; + char **ret = NULL; + MYSQL_RES *res; + MYSQL_ROW row; + + dw_mutex_lock(backend_mtx); + + if(!mysql_query(&dmail_db, "SELECT * FROM `Accounts`") && (res=mysql_store_result(&dmail_db))) + { + int rows; + + row=mysql_fetch_row(res); /* Get a row from the results */ + + rows = (int)mysql_num_rows(res); + + if(rows) + { + ret = calloc(rows+1, sizeof(char *)); + + while(row) + { + ret[counter] = strdup(row[1]); + counter++; + row=mysql_fetch_row(res); + } + } + + mysql_free_result(res); /* Release memory used to store results. */ + } + else + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return ret; +} + +/* Free the allocated list of accounts */ +void API backend_freeaccounts(char **list) +{ + if(list) + { + int z = 0; + + while(list[z]) + { + free(list[z]); + z++; + } + free(list); + } +} + +/* Save settings associated with an account */ +void API backend_newsettings(Account *acc, AccountSettings *set) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[100]; + + if(!as || !set) + return; + + dw_mutex_lock(backend_mtx); + set->Type = DATA_TYPE_SETTINGS; + + sprintf(buf, "UPDATE `Accounts` SET recvhosttype=\'%d\' WHERE name=\'%s\'", set->RecvHostType, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET recvhostname=\'%s\' WHERE name=\'%s\'", set->RecvHostName, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET recvhostport=\'%d\' WHERE name=\'%s\'", set->RecvHostPort, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET recvhostuser=\'%s\' WHERE name=\'%s\'", set->RecvHostUser, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET recvhostpass=\'%s\' WHERE name=\'%s\'", set->RecvHostPass, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET sendhosttype=\'%d\' WHERE name=\'%s\'", set->SendHostType, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET sendhostname=\'%s\' WHERE name=\'%s\'", set->SendHostName, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET sendhostport=\'%d\' WHERE name=\'%s\'", set->SendHostPort, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET sendhostuser=\'%s\' WHERE name=\'%s\'", set->SendHostUser, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET sendhostpass=\'%s\' WHERE name=\'%s\'", set->SendHostPass, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET useremail=\'%s\' WHERE name=\'%s\'", set->UserEmail, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET userrealname=\'%s\' WHERE name=\'%s\'", set->UserRealName, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET replyemail=\'%s\' WHERE name=\'%s\'", set->ReplyEmail, as->name); + mysql_query(&dmail_db, buf); + sprintf(buf, "UPDATE `Accounts` SET replyrealname=\'%s\' WHERE name=\'%s\'", set->ReplyRealName, as->name); + mysql_query(&dmail_db, buf); + + dw_mutex_unlock(backend_mtx); + return; +} + +/* Load settings associated with an account */ +void API backend_getsettings(Account *acc, AccountSettings *set) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[100]; + MYSQL_RES *res; + MYSQL_ROW row; + + if(!as || !set) + return; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "SELECT * FROM `Accounts` WHERE name=\'%s\'", as->name); + + if(!mysql_query(&dmail_db, buf) && (res=mysql_store_result(&dmail_db))) + { + row=mysql_fetch_row(res); /* Get a row from the results */ + + if(row) + { + set->Type = DATA_TYPE_SETTINGS; + + strncpy(set->AccountName, as->name, ACCOUNTNAME_MAX); + set->RecvHostType = atoi(row[2]); + strncpy(set->RecvHostName, row[3], HOSTNAME_MAX); + set->RecvHostPort = atoi(row[4]); + strncpy(set->RecvHostUser, row[5], USERNAME_MAX); + strncpy(set->RecvHostPass, row[6], USERNAME_MAX); + set->SendHostType = atoi(row[7]); + strncpy(set->SendHostName, row[8], HOSTNAME_MAX); + set->SendHostPort = atoi(row[9]); + strncpy(set->SendHostUser, row[10], USERNAME_MAX); + strncpy(set->SendHostPass, row[11], USERNAME_MAX); + strncpy(set->UserEmail, row[12], HOSTNAME_MAX + USERNAME_MAX); + strncpy(set->UserRealName, row[13], REALNAME_MAX); + strncpy(set->ReplyEmail, row[14], HOSTNAME_MAX + USERNAME_MAX); + strncpy(set->ReplyRealName, row[15], REALNAME_MAX); + } + mysql_free_result(res); /* Release memory used to store results. */ + } + else + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return; +} + +/* Get an array of folders */ +MailFolder * API backend_getfolders(Account *acc) +{ + AccountStruct *as = (AccountStruct *)acc; + MailFolder *mf = NULL; + int counter = 0; + char buf[100]; + MYSQL_RES *res; + MYSQL_ROW row; + + if(!as) + return NULL; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "SELECT * FROM `Folders` WHERE name=\'%s\' ORDER BY `folder`", as->name); + + if(!mysql_query(&dmail_db, buf) && (res=mysql_store_result(&dmail_db))) + { + int rows; + + row=mysql_fetch_row(res); /* Get a row from the results */ + + rows = (int)mysql_num_rows(res); + + if(rows) + { + /* Allocate a sufficient return buffer */ + mf = calloc(rows + 1, sizeof(MailFolder)); + + while(row) + { + mf[counter].Type = DATA_TYPE_FOLDER; + mf[counter].Acc = acc; + mf[counter].LastId = atoi(row[0]); + strcpy(mf[counter].Name, row[2]); + strcpy(mf[counter].Parent, row[3]); + mf[counter].Flags = atoi(row[4]); + counter++; + row=mysql_fetch_row(res); + } + } + mysql_free_result(res); /* Release memory used to store results. */ + } + else + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return mf; +} + +/* Create a new folder in an account */ +int API backend_newfolder(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[200]; + + if(!as || !mf) + return 1; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "INSERT INTO `Folders` ( `name`, `folder`, `parent`, `flags` )\n" \ + "VALUES ( \'%s\', \'%s\', \'%s\', \'%d\' )", as->name, mf->Name, mf->Parent, (int)mf->Flags); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + mf->Type = DATA_TYPE_FOLDER; + mf->Acc = acc; + mf->LastId = (int)mysql_insert_id(&dmail_db); + + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Remove a folder from an account */ +int API backend_delfolder(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[100]; + + if(!as || !mf) + return 1; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "DELETE FROM `Folders` WHERE entry=\'%d\'", (int)mf->LastId); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* Get a list of mail entries */ +MailItem * API backend_getitems(Account *acc, MailFolder *mf) +{ + AccountStruct *as = (AccountStruct *)acc; + MailItem *mi = NULL; + int counter = 0; + char buf[100]; + MYSQL_RES *res; + MYSQL_ROW row; + + if(!as || !mf) + return NULL; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "SELECT * FROM `Mail` WHERE folder=\'%d\'", (int)mf->LastId); + + if(!mysql_query(&dmail_db, buf) && (res=mysql_store_result(&dmail_db))) + { + int rows; + + row=mysql_fetch_row(res); /* Get a row from the results */ + + rows = (int)mysql_num_rows(res); + + if(rows) + { + /* Allocate a sufficient return buffer */ + mi = calloc(rows + 1, sizeof(MailItem)); + + while(row) + { + int month = 0, day = 0, year = 0; + int hours = 0, minutes = 0, seconds = 0; + + mi[counter].Type = DATA_TYPE_ITEM; + mi[counter].Acc = acc; + mi[counter].Folder = mf; + mi[counter].Id = atoi(row[0]); + mi[counter].Size = atoi(row[1]); + sscanf(row[2], tsformat, &year, &month, &day, &hours, &minutes, &seconds); + mi[counter].Date.month = month; + mi[counter].Date.day = day; + mi[counter].Date.year = year; + mi[counter].Time.hours = hours; + mi[counter].Time.minutes = minutes; + mi[counter].Time.seconds = seconds; + strcpy(mi[counter].Topic, row[3]); + strcpy(mi[counter].To, row[4]); + strcpy(mi[counter].From, row[5]); + counter++; + row=mysql_fetch_row(res); + } + } + mysql_free_result(res); /* Release memory used to store results. */ + } + else + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return mi; +} + +/* Create a new mail item */ +int API backend_newitem(Account *acc, MailFolder *mf, MailItem *mi) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[300], tsbuf[20], *to, *from, *topic; + + if(!as || !mf || !mi) + return 1; + + dw_mutex_lock(backend_mtx); + + to = malloc((strlen(mi->To)*2)+1); + mysql_real_escape_string(&dmail_db, to, mi->To, strlen(mi->To)); + from = malloc((strlen(mi->From)*2)+1); + mysql_real_escape_string(&dmail_db, from, mi->From, strlen(mi->From)); + topic = malloc((strlen(mi->Topic)*2)+1); + mysql_real_escape_string(&dmail_db, topic, mi->Topic, strlen(mi->Topic)); + + sprintf(tsbuf, tsformat, mi->Date.year, mi->Date.month, mi->Date.day, mi->Time.hours, mi->Time.minutes, mi->Time.seconds); + sprintf(buf, "INSERT INTO `Mail` ( `size`, `datetime`, `topic`, `to`, `from`, `folder` )\n" \ + "VALUES ( \'%d\', \'%s\', \'%s\', \'%s\', \'%s\', \'%d\' )", + (int)mi->Size, tsbuf, topic, to, from, (int)mf->LastId); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + if(to) + free(to); + if(from) + free(from); + if(topic) + free(topic); + + mi->Id = mysql_insert_id(&dmail_db); + mi->Type = DATA_TYPE_ITEM; + mi->Acc = acc; + mi->Folder = mf; + + dw_mutex_unlock(backend_mtx); + + return 0; +} + +/* Remove a mail item from a mail folder */ +int API backend_delitem(Account *acc, MailFolder *mf, MailItem *mi) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[100]; + + if(!as || !mf || !mi) + return 1; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "DELETE FROM `Mail` WHERE entry=\'%d\'", (int)mi->Id); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + sprintf(buf, "DELETE FROM `Body` WHERE messid=\'%d\'", (int)mi->Id); + if(mysql_query(&dmail_db, buf)) + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + + return 0; +} + +/* Retrieve a raw mail buffer associated with a mail item */ +char * API backend_getmail(Account *acc, MailFolder *mf, MailItem *mi, unsigned long *len) +{ + AccountStruct *as = (AccountStruct *)acc; + char buf[100], *mailbuf = NULL; + MYSQL_RES *res; + MYSQL_ROW row; + + if(!as || !mf || !mi || !len) + return NULL; + + dw_mutex_lock(backend_mtx); + + sprintf(buf, "SELECT * FROM `Body` WHERE messid=\'%d\' ORDER BY `entry`", (int)mi->Id); + + if(!mysql_query(&dmail_db, buf) && (res=mysql_store_result(&dmail_db))) + { + row=mysql_fetch_row(res); /* Get a row from the results */ + + if(row) + { + unsigned long *lengths = mysql_fetch_lengths(res); + + mailbuf = strdup(row[2]); + + if(lengths) + { + *len = lengths[2]; + } + else + { + *len = mi->Size; + } + } + mysql_free_result(res); /* Release memory used to store results. */ + } + else + display_mysql_error(); + + dw_mutex_unlock(backend_mtx); + return mailbuf; +} + +/* Create a raw mail entry associated with a mail item */ +int API backend_newmail(Account *acc, MailFolder *mf, MailItem *mi, char *buf, unsigned long len) +{ + AccountStruct *as = (AccountStruct *)acc; + char *qbuf, *mbuf = malloc(len*2); + int slen; + + if(!as || !mf || !mi || !mbuf) + return 1; + + dw_mutex_lock(backend_mtx); + + slen = mysql_real_escape_string(&dmail_db, mbuf, buf, len); + qbuf = malloc(slen + 200); + + if(qbuf) + { + sprintf(qbuf, "INSERT INTO `Body` ( `messid`, `body` )\nVALUES ( \'%d\' ,\'%s\' )", (int)mi->Id, mbuf); + if(mysql_query(&dmail_db, qbuf)) + display_mysql_error(); + free(qbuf); + } + + free(mbuf); + + dw_mutex_unlock(backend_mtx); + return 0; +} + +/* This function is here because the Visual C CRT doesn't + * like free()ing memory allocated in other modules. + */ +void API backend_free(Account *acc, void *buf) +{ + if(buf) + free(buf); +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/mysqlplg.def Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,29 @@ +LIBRARY MYSQLPLG INITINSTANCE TERMINSTANCE + +PROTMODE + +DESCRIPTION 'MySQL Dynamic Mail Backend' + +CODE LOADONCALL +DATA NONSHARED LOADONCALL + +EXPORTS + backend_init @1 + backend_shutdown @2 + backend_openaccount @3 + backend_newaccount @4 + backend_closeaccount @5 + backend_getaccounts @6 + backend_freeaccounts @7 + backend_getfolders @8 + backend_newfolder @9 + backend_delfolder @10 + backend_getitems @11 + backend_newitem @12 + backend_delitem @13 + backend_getmail @14 + backend_newmail @15 + backend_free @16 + backend_newsettings @17 + backend_getsettings @18 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/mysqlplg.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,64 @@ +#ifndef _MYSQLPLG_H +#define _MYSQLPLG_H + +typedef struct { + int Type; + char *name; +} AccountStruct; + +typedef struct { + char hostname[100]; + char username[100]; + char password[100]; +} LoginStruct; + +#define MYSQL_DATABASE "CREATE DATABASE `DynamicMail`" + +#define MYSQL_TABLE1 "CREATE TABLE `Accounts` (\n" \ + " `entry` int(11) NOT NULL auto_increment,\n" \ + " `name` text NOT NULL,\n" \ + " `recvhosttype` int(11) NOT NULL default '0',\n" \ + " `recvhostname` text NOT NULL,\n" \ + " `recvhostport` int(11) NOT NULL default '0',\n" \ + " `recvhostuser` text NOT NULL,\n" \ + " `recvhostpass` text NOT NULL,\n" \ + " `sendhosttype` int(11) NOT NULL default '0',\n" \ + " `sendhostname` text NOT NULL,\n" \ + " `sendhostport` int(11) NOT NULL default '0',\n" \ + " `sendhostuser` text NOT NULL,\n" \ + " `sendhostpass` text NOT NULL,\n" \ + " `useremail` text NOT NULL,\n" \ + " `userrealname` text NOT NULL,\n" \ + " `replyemail` text NOT NULL,\n" \ + " `replyrealname` text NOT NULL,\n" \ + " PRIMARY KEY (`entry`)\n" \ + ") TYPE=MyISAM AUTO_INCREMENT=1" + +#define MYSQL_TABLE2 "CREATE TABLE `Body` (\n" \ + " `entry` bigint(20) NOT NULL auto_increment,\n" \ + " `messid` bigint(20) NOT NULL default '0',\n" \ + " `body` longtext NOT NULL,\n" \ + " PRIMARY KEY (`entry`)\n" \ + ") TYPE=MyISAM AUTO_INCREMENT=1" + + +#define MYSQL_TABLE3 "CREATE TABLE `Folders` (\n" \ + " `entry` int(11) NOT NULL auto_increment,\n" \ + " `name` text NOT NULL,\n" \ + " `folder` text NOT NULL,\n" \ + " `parent` text NOT NULL,\n" \ + " `flags` int(11) NOT NULL default '0',\n" \ + " PRIMARY KEY (`entry`)\n" \ + ") TYPE=MyISAM AUTO_INCREMENT=1" + +#define MYSQL_TABLE4 "CREATE TABLE `Mail` (\n" \ + " `entry` bigint(20) NOT NULL auto_increment,\n" \ + " `size` int(11) NOT NULL default '0',\n" \ + " `datetime` timestamp(14) NOT NULL,\n" \ + " `topic` text NOT NULL,\n" \ + " `to` text NOT NULL,\n" \ + " `from` text NOT NULL,\n" \ + " `folder` int(11) NOT NULL default '0',\n" \ + " PRIMARY KEY (`entry`)\n" \ + ") TYPE=MyISAM AUTO_INCREMENT=2" +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mysql/mysqlplgw.def Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,24 @@ +LIBRARY MYSQLPLG + +DESCRIPTION 'MySQL Dynamic Mail Backend' + +EXPORTS + backend_init @1 + backend_shutdown @2 + backend_openaccount @3 + backend_newaccount @4 + backend_closeaccount @5 + backend_getaccounts @6 + backend_freeaccounts @7 + backend_getfolders @8 + backend_newfolder @9 + backend_delfolder @10 + backend_getitems @11 + backend_newitem @12 + backend_delitem @13 + backend_getmail @14 + backend_newmail @15 + backend_free @16 + backend_newsettings @17 + backend_getsettings @18 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parse.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,498 @@ +/* + * This file deals with parsing the message body. + */ + +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <compat.h> +#include <dw.h> +#include "backend.h" +#include "dmail.h" +#include "parse.h" + +int count_lines(char *buf) +{ + int count = 1; + + if(!*buf) + return 0; + + while(*buf) + { + if(*buf == '\n') + count++; + buf++; + } + return count; +} + +/* Makes a reply buffer with quoted text */ +void make_reply(char *raw, char *newtext) +{ + int z, len, newpos = 0, totlen = strlen(raw); + char *start = raw; + + for(z=0;z<totlen;z++) + { + /* Found a new line */ + if(raw[z] == '\r') + { + int len; + + if(raw[z] == '\r' && raw[z+1] == '\n') + z++; + + newtext[newpos] = '>'; + newpos++; + + len = &raw[z+1] - start; + + memcpy(&newtext[newpos], start, len); + newpos += len; + + start = &raw[z+1]; + } + } + len = &raw[z+1] - start; + + if(len > 0) + { + newtext[newpos] = '>'; + newpos++; + + memcpy(&newtext[newpos], start, len); + } +} + +/* Free memory allocated during parsing */ +void parse_free(MailParsed *mp) +{ + int z = 0; + + if(mp->date) + free(mp->date); + if(mp->replyto) + free(mp->replyto); + if(mp->from) + free(mp->from); + if(mp->topic) + free(mp->topic); + while(mp->to[z] && z < MAX_TO_ADDRESSES) + { + free(mp->to[z]); + z++; + } + z=0; + while(mp->html[z] && z < MAX_MAIL_PARTS) + { + free(mp->html[z]); + z++; + } + z=0; + while(mp->text[z] && z < MAX_MAIL_PARTS) + { + free(mp->text[z]); + z++; + } + z=0; + while(mp->attach[z] && z < MAX_MAIL_PARTS) + { + free(mp->attach[z]); + z++; + } +} + +/* Get multiple To: addresses from a single line */ +void parse_to(MailParsed *mp, int *tocount, char *start, int itemlen) +{ + int z, thisstart = 0, len; + + for(z=0;z<itemlen;z++) + { + if(start[z] == ';' || start[z] == ',') + { + len = z - thisstart; + + if(len > 0) + { + mp->to[*tocount] = calloc(1, len + 1); + strncpy(mp->to[*tocount], &start[thisstart], len); + (*tocount)++; + } + /* Skip over the trailing space */ + z++; + thisstart = z + 1; + } + } + len = z - thisstart; + + if(len > 0) + { + mp->to[*tocount] = calloc(1, len + 1); + strncpy(mp->to[*tocount], &start[thisstart], len); + (*tocount)++; + } +} + +#define TYPE_TEXT 0 +#define TYPE_HTML 1 +#define TYPE_ATTA 2 +#define TYPE_OTHR 3 + +/* Determine where this part of a multipart message goes, TEXT, HTML or ATTACHMENT */ +void check_part(MailParsed *mp, char **start, char *part, char *raw, char **ret, int *rettype, int type, int *textcount, int *htmlcount, int *attachcount) +{ + /* If we aren't in the headers save the + * last component whereever necessary. + */ + if(part) + { + int partlen = *start - part; + + if(type == TYPE_TEXT || type == TYPE_HTML) + { + /* If we are generating a MailParsed entry then we + * can't touch the actual raw buffer. + */ + if(mp && type == TYPE_TEXT) + { + if(partlen > 0 && *textcount < MAX_MAIL_PARTS) + { + mp->text[*textcount] = calloc(1, partlen+1); + memcpy(mp->text[*textcount], part, partlen); + *textcount++; + } + } + if(!mp) + { + /* If we aren't generating a MailParsed entry then + * we can NULL terminate the entry and return it! + */ + **start = 0; + + /* If it's the first text entry set the return + * buffer to the part. + */ + if(*ret == raw || (*rettype != TYPE_TEXT && type == TYPE_TEXT)) + { + *ret = part; + *rettype = type; + } + } + } + /* HTML and Attachment items should only be parsed when + * generating a MailParsed struct, unlike the text type. + */ + if(mp) + { + if(type == TYPE_HTML) + { + if(partlen > 0 && *htmlcount < MAX_MAIL_PARTS) + { + mp->html[*htmlcount] = calloc(1, partlen+1); + memcpy(mp->html[*htmlcount], part, partlen); + *htmlcount++; + } + } + if(type == TYPE_ATTA) + { + if(partlen > 0 && *attachcount < MAX_MAIL_PARTS) + { + mp->attach[*attachcount] = calloc(1, partlen+1); + memcpy(mp->attach[*attachcount], part, partlen); + *attachcount++; + } + } + } + } +} + +/* Returns true if the line exists in the message buffer */ +int findline(char *line, char *raw, unsigned long totlen) +{ + int z, linelen = strlen(line), lines = 0; + char *start = raw; + + for(z=0;z<totlen;z++) + { + /* Found a new line */ + if(raw[z] == '\r') + { + int len = &raw[z] - start; + + lines++; + + if(len > linelen && strncasecmp(start, line, linelen) == 0) + return lines; + + if(raw[z] == '\r' && raw[z+1] == '\n') + z++; + start = &raw[z+1]; + } + } + return 0; +} + +char *headerends[] = { "Content-type:", "Subject:", "From:", "To:", NULL }; + +/* Find the body start point, and also fill in variables as necessary */ +char *parse_message(char *raw, unsigned long totlen, MailParsed *mp) +{ + int z = 0, in_body = 0, in_header = 1, in_to = 0, tocount = 0, textcount = 0, htmlcount = 0, attachcount = 0; + char *ret = raw, *start = raw, *part = NULL; + char *boundary = NULL; + int boundarylen = 0, type = TYPE_TEXT, rettype = TYPE_OTHR, headerindex = 0; + + if(mp) + { + memset(mp, 0, sizeof(MailParsed)); + + /* Save the raw message */ + mp->raw = calloc(1, totlen+1); + memcpy(mp->raw, raw, totlen); + } + + /* Find the most optimal place to stop parsing the + * header... optimally this would be the Content-type + * line but some messages don't have it. + */ + while(headerends[z]) + { + if(findline(headerends[z], raw, totlen)) + { + headerindex = z; + break; + } + z++; + } + + for(z=0;z<totlen;z++) + { + /* Found a new line */ + if(raw[z] == '\r') + { + int len = &raw[z] - start; + + if(in_to && len > 1 && tocount < MAX_TO_ADDRESSES) + { + int itemlen = (len - 1) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 1); + if(start[itemlen] == ';' || start[itemlen] == ',') + { + in_to = 1; + itemlen--; + } + else + in_to = 0; + mp->to[tocount] = calloc(1, itemlen+1); + strncpy(mp->to[tocount], &start[1], itemlen); + tocount++; + } + if(boundary && (start[0] == '-' || start[0] == boundary[0])) + { + int x; + + for(x=0;x<=(len - boundarylen);x++) + { + if(strncmp(&start[x], boundary, boundarylen) == 0) + { + in_body = 0; + check_part(mp, &start, part, raw, &ret, &rettype, type, &textcount, &htmlcount, &attachcount); + part = NULL; + } + } + } + if(len > 14 && strncasecmp(start, "Content-type:", 13) == 0) + { + in_header = 0; + + /* This is a multipart message... find the boundary */ + if(strncasecmp(&start[14], "text/plain", 10) == 0) + { + type = TYPE_TEXT; + } + else if(strncasecmp(&start[14], "text/html", 9) == 0) + { + type = TYPE_HTML; + } + else + type = TYPE_OTHR; + } + else if(in_header && headerindex) + { + char *header = headerends[headerindex]; + int headerlen = strlen(header); + + if(len > headerlen && strncasecmp(start, header, headerlen) == 0) + in_header = 0; + } + if(!in_body) + { + if(len) + { + int itemlen; + + if(len > 14 && strncasecmp(start, "Content-type:", 13) == 0) + { + /* This is a multipart message... find the boundary */ + if(strncasecmp(&start[14], "Multipart", 9) == 0) + { + /* Find the boundary */ + int n, worklen = 100 > (totlen - (z+22)) ? (totlen - (z+22)) : 100; + + for(n=0;n<worklen;n++) + { + if(strncasecmp(&start[14+n], "boundary", 8) == 0) + { + int place = 22+n; + n = worklen; + + if(start[place] == '=') + { + int t; + char *boundstart = &start[place+1]; + + place++; + if(start[place] == '"') + { + place++; + boundstart++; + } + + worklen = 100 > (totlen - place) ? (totlen - place) : 100; + + for(t=0;t<worklen;t++) + { + if(boundstart[t] == '"' || boundstart[t] == '\r' || boundstart[t] == '\n') + { + boundary = calloc(1, t+1); + strncpy(boundary, boundstart, t); + boundarylen = t; + t=worklen; + } + } + } + } + } + } + } + if(mp) + { + /* Pull out useful items */ + if(len > 9 && strncasecmp(start, "Subject:", 8) == 0) + { + itemlen = (len - 9) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 9); + mp->topic = calloc(1, itemlen+1); + strncpy(mp->topic, &start[9], itemlen); + } + if(len > 10 && strncasecmp(start, "Reply-to:", 9) == 0) + { + itemlen = (len - 10) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 10); + mp->replyto = calloc(1, itemlen+1); + strncpy(mp->replyto, &start[10], itemlen); + } + if(len > 4 && strncasecmp(start, "To:", 3) == 0 && tocount < MAX_TO_ADDRESSES) + { + itemlen = (len - 4) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 4); + if(start[3+itemlen] == ';' || start[3+itemlen] == ',') + { + in_to = 1; + itemlen--; + } + parse_to(mp, &tocount, &start[4], itemlen); + } + if(len > 6 && strncasecmp(start, "From:", 5) == 0) + { + itemlen = (len - 6) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 6); + mp->from = calloc(1, itemlen+1); + strncpy(mp->from, &start[6], itemlen); + } + if(len > 6 && strncasecmp(start, "Date:", 5) == 0) + { + itemlen = (len - 6) > MAIL_ITEM_MAX ? MAIL_ITEM_MAX : (len - 6); + mp->date = calloc(1, itemlen+1); + strncpy(mp->date, &start[6], itemlen); + } + } + } + else if(!in_header) + { + if(raw[z] == '\r' && raw[z+1] == '\n') + part = &raw[z+2]; + else + part = &raw[z+1]; + + in_body = 1; + } + } + if(raw[z] == '\r' && raw[z+1] == '\n') + z++; + start = &raw[z+1]; + } + } + start = &raw[z]; + check_part(mp, &start, part, raw, &ret, &rettype, type, &textcount, &htmlcount, &attachcount); + if(boundary) + free(boundary); + return ret; +} + +/* Checks if a string is a valid IP address */ +int isip(char *buf) +{ + int z = 0, dotcount = 0, value; + char *start = buf; + + while(buf[z]) + { + if(buf[z] == '.') + { + value = atoi(start); + if(value > 255 || value < 0) + return 0; + start = &buf[z+1]; + dotcount++; + } + else if(!isdigit(buf[z])) + return 0; + z++; + } + + value = atoi(start); + if(value > 255 || value < 0) + return 0; + + if(dotcount != 3 || z < 7 || z > 15) + return 0; + return 1; +} + +/* Initialize CDATA and CTIME structures to the + * current date and time. + */ +void init_date_time(CDATE *cdate, CTIME *ctime) +{ + time_t curtime = time(NULL); + struct tm curtm, *ret; + +#ifdef __UNIX__ + ret = localtime_r(&curtime, &curtm); + if(ret) + { +#else + ret = localtime(&curtime); + + if(ret) + { + memcpy(&curtm, ret, sizeof(struct tm)); +#endif + cdate->day = curtm.tm_mday; + cdate->month = curtm.tm_mon + 1; + cdate->year = curtm.tm_year + 1900; + ctime->hours = curtm.tm_hour; + ctime->minutes = curtm.tm_min; + ctime->seconds = curtm.tm_sec; + } +} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parse.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,27 @@ +#ifndef _PARSE_H +#define _PARSE_H + +#define MAX_TO_ADDRESSES 250 +#define MAX_MAIL_PARTS 10 + +typedef struct { + char *to[MAX_TO_ADDRESSES]; + char *from; + char *topic; + char *date; + char *replyto; + char *html[MAX_MAIL_PARTS]; + char *text[MAX_MAIL_PARTS]; + char *attach[MAX_MAIL_PARTS]; + char *raw; +} MailParsed; + + +char *parse_message(char *raw, unsigned long len, MailParsed *mp); +void parse_free(MailParsed *mp); +int isip(char *buf); +void init_date_time(CDATE *date, CTIME *time); +int count_lines(char *buf); +void make_reply(char *raw, char *newtext); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/receive.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,355 @@ +/* + * This file deals with getting messages from + * the remote email server. + */ + +#include <string.h> +#include <compat.h> +#include <dw.h> +#include "backend.h" +#include "dmail.h" +#include "parse.h" +#include "datetime.h" + +extern BackendPlugin plugin_list[]; +extern HWND stext2; + +typedef struct _pop3data { + int messages; + int current; + int bytes; + int status; + int datalen; + char *data; + MailItem mi; +} POP3Data; + +int POP3Iteration(AccountInfo *ai, MailFolder *mf, int controlfd, AccountSettings *set, POP3Data *p3d) +{ + char controlbuffer[1025] = ""; + static char nexttime[513] = ""; + int z, gah, start, amnt; + + start = 0; + strncpy(controlbuffer, nexttime, 512); + amnt = sockread(controlfd, &controlbuffer[strlen(nexttime)], 512, 0); + if(amnt < 1) + { + dw_window_set_text(stext2, "Unexpected disconnect."); + sockclose(controlfd); + controlfd = 0; + } + else + { + controlbuffer[amnt+strlen(nexttime)] = 0; + nexttime[0] = 0; + gah = strlen(controlbuffer); + for(z=0;z<gah;z++) + { + if(controlbuffer[z] == '\r' || controlbuffer[z] == '\n') + { + char *mystart = &controlbuffer[start]; + + if(controlbuffer[z] == '\r' && controlbuffer[z+1] == '\n') + { + controlbuffer[z] = 0; + controlbuffer[z+1] = 0; + z++; + } + else + controlbuffer[z] = 0; + + if(p3d->status == 5) + { + if(strncmp(mystart, ".", 2) == 0) + { + char textbuf[100]; + + if(p3d->data && p3d->datalen) + { + MailParsed mp; + + parse_message(p3d->data, p3d->datalen, &mp); + + /* Copy the items */ + if(mp.to[0]) + strncpy(p3d->mi.To, mp.to[0], MAIL_ITEM_MAX); + if(mp.from) + strncpy(p3d->mi.From, mp.from, MAIL_ITEM_MAX); + if(mp.topic) + strncpy(p3d->mi.Topic, mp.topic, MAIL_ITEM_MAX); + + p3d->mi.Date.day = findday(mp.date); + p3d->mi.Date.month = findmonth(mp.date); + p3d->mi.Date.year = findyear(mp.date); + p3d->mi.Time.hours = findhour(mp.date); + p3d->mi.Time.minutes = findmin(mp.date); + p3d->mi.Time.seconds = findsec(mp.date); + + parse_free(&mp); + + p3d->mi.Size = p3d->datalen; + + /* Yay! we have a whole message.. lets save it! */ + plugin_list[ai->Plug].newitem(ai->Acc, mf, &p3d->mi); + plugin_list[ai->Plug].newmail(ai->Acc, mf, &p3d->mi, p3d->data, p3d->datalen); + + free(p3d->data); + } + + /* Reset the message state variables */ + p3d->data = NULL; + p3d->datalen = 0; + memset(&p3d->mi, 0, sizeof(MailItem)); + + sprintf(textbuf, "Deleting message %d...", p3d->current); + dw_window_set_text(stext2, textbuf); + socksprint(controlfd, vargs(alloca(1024), 1023, "DELE %d\r\n", p3d->current)); + + p3d->status++; + } + else + { + /* More message data... save it for later */ + int len = strlen(mystart); + char *tmp = malloc(len + p3d->datalen + 3); + + if(p3d->data) + memcpy(tmp, p3d->data, p3d->datalen); + if(len) + memcpy(&tmp[p3d->datalen], mystart, len); + p3d->datalen += len + 2; + tmp[p3d->datalen-2] = '\r'; + tmp[p3d->datalen-1] = '\n'; + tmp[p3d->datalen] = 0; + if(p3d->data) + free(p3d->data); + p3d->data = tmp; + } + } + else if(strlen(&controlbuffer[start]) > 0) + { + if(p3d->status == -1 && strncmp(mystart, "+OK", 3) == 0) + { + /* We got the welcome message, let's login */ + dw_window_set_text(stext2, "Username..."); + socksprint(controlfd, vargs(alloca(1024), 1023, "USER %s\r\n", set->RecvHostUser)); + p3d->status++; + } + else if(p3d->status == 0 && strncmp(mystart, "+OK", 3) == 0) + { + /* Our username was accepted, send password */ + dw_window_set_text(stext2, "Password..."); + socksprint(controlfd, vargs(alloca(1024), 1023, "PASS %s\r\n", set->RecvHostPass)); + p3d->status++; + } + else if((p3d->status == 0 || p3d->status == 1) && strncmp(mystart, "-ERR", 3) == 0) + { + /* Either the user or pass request failed, abort. */ + dw_window_set_text(stext2, "Login failed."); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + } + else if(p3d->status == 1 && strncmp(mystart, "+OK", 3) == 0) + { + /* Our login was successful! Get a list of messages */ + dw_window_set_text(stext2, "Status..."); + socksprint(controlfd, "STAT\r\n"); + p3d->status++; + } + else if(p3d->status == 2 && strncmp(mystart, "+OK", 3) == 0) + { + char textbuf[100]; + + p3d->messages = atoi(&mystart[3]); + if(p3d->messages) + { + /* Our login was successful! Get a list of messages */ + sprintf(textbuf, "Getting message %d of %d...", p3d->current, p3d->messages); + dw_window_set_text(stext2, textbuf); + socksprint(controlfd, vargs(alloca(1024), 1023, "LIST %d\r\n", p3d->current)); + p3d->status++; + } + else + { + dw_window_set_text(stext2, "No new mail."); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + } + } + else if(p3d->status == 3 && strncmp(mystart, "+OK", 3) == 0) + { + char textbuf[100]; + + /* We have a size for our message... + * request the message contents! + */ + sprintf(textbuf, "+OK %d ", p3d->current); + p3d->bytes = atoi(&mystart[strlen(textbuf)]); + socksprint(controlfd, vargs(alloca(1024), 1023, "RETR %d\r\n", p3d->current)); + p3d->status++; + } + else if(p3d->status == 4 && strncmp(mystart, "+OK", 3) == 0) + { + /* Just proceed to the next step */ + p3d->status++; + } + else if(p3d->status == 6 && strncmp(mystart, "+OK", 3) == 0) + { + char textbuf[100]; + + /* Move on to the next message */ + p3d->current++; + if(p3d->current > p3d->messages) + { + /* Success! We have retrieved our new messages */ + sprintf(textbuf, "%d new message%s.", p3d->messages, p3d->messages == 1 ? "" : "s"); + dw_window_set_text(stext2, textbuf); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + } + else + { + sprintf(textbuf, "Getting message %d of %d...", p3d->current, p3d->messages); + dw_window_set_text(stext2, textbuf); + socksprint(controlfd, vargs(alloca(1024), 1023, "LIST %d\r\n", p3d->current)); + p3d->status = 3; + } + } + else if(strncmp(mystart, "-ERR", 3) == 0) + { + /* An unhandled error occurred */ + dw_window_set_text(stext2, "Error getting messages."); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + dw_messagebox("DynamicMail Error", DW_MB_OK | DW_MB_ERROR, mystart); + } + } + start = z+1; + } + } + if(strlen(&controlbuffer[start]) > 0) + strncpy(nexttime, &controlbuffer[start], 512); + else + nexttime[0] = 0; + } + return controlfd; +} + +void HandlePOP3(AccountInfo *ai, MailFolder *mf, int controlfd) +{ + fd_set readset; + struct timeval tv = { 5, 0 }, slowtv = { 5, 0 }; + POP3Data p3d = {0, 1, 0, -1, 0, NULL }; + + memset(&p3d.mi, 0, sizeof(MailItem)); + + FD_ZERO(&readset); + FD_SET(controlfd, &readset); + + while(controlfd && select(controlfd + 1, &readset, NULL, NULL, &tv) > -1) + { + if(controlfd && FD_ISSET(controlfd, &readset)) + controlfd = POP3Iteration(ai, mf, controlfd, &ai->Settings, &p3d); + + FD_ZERO(&readset); + FD_SET(controlfd, &readset); + + memcpy(&tv, &slowtv, sizeof(struct timeval)); + } + if(controlfd) + { + dw_window_set_text(stext2, "Unexpected disconnect."); + sockclose(controlfd); + controlfd = 0; + } +} + +void API Mail_Receive_Thread(void *data) +{ + AccountInfo *ai = (AccountInfo *)data; + MailFolder *mf = NULL; + + if(!ai || !ai->Folders) + { + dw_messagebox("DynamicMail", DW_MB_OK | DW_MB_ERROR, "Receive Mail Thread failed to initialize!"); + return; + } + else + { + int n = 0; + + while(ai->Folders[n].Name[0]) + { + if(strcmp(ai->Folders[n].Name, "Inbox") == 0) + { + mf = &ai->Folders[n]; + break; + } + n++; + } + } + + if(!mf) + return; + + while(ai->Acc) + { + if(dw_event_wait(ai->RecvEve, 1000) > 0) + { + /* Check mail! */ + struct hostent *hostnm; + struct sockaddr_in server; + int controlfd = 0, ipaddr = 0; + AccountSettings *set = &ai->Settings; + + dw_event_reset(ai->RecvEve); + + dw_window_set_text(stext2, "Connecting..."); + + if(isip(set->RecvHostName)) + ipaddr = inet_addr(set->RecvHostName); + else + { + hostnm = gethostbyname(set->RecvHostName); + if(!hostnm) + dw_window_set_text(stext2, "Host lookup failed."); + else + ipaddr = *((unsigned long *)hostnm->h_addr); + } + + if(ipaddr && ipaddr != -1) + { + server.sin_family = AF_INET; + server.sin_port = htons(set->RecvHostPort); + server.sin_addr.s_addr = ipaddr; + if((controlfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 || connect(controlfd, (struct sockaddr *)&server, sizeof(server))) + { + dw_window_set_text(stext2, "Could not connect."); + controlfd = 0; + } else + { + /* We are connected, wait for the welcome */ + dw_window_set_text(stext2, "Connected."); + nonblock(controlfd); + } + if(controlfd) + { + switch(set->RecvHostType) + { + case HOST_TYPE_POP3: + HandlePOP3(ai, mf, controlfd); + break; + default: + dw_window_set_text(stext2, "Unhandled protocol."); + sockclose(controlfd); + } + } + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/send.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,402 @@ +/* + * This file deals with getting messages from + * the remote email server. + */ +#include <string.h> +#include <compat.h> +#include <dw.h> +#include "backend.h" +#include "dmail.h" +#include "parse.h" + +extern BackendPlugin plugin_list[]; +extern HWND stext3; + +char *find_address(char *from) +{ + int start, len = strlen(from); + + /* Find the from domain */ + for(start=0;start<len;start++) + { + if(from[start] == '<') + { + start++; + break; + } + } + from = strdup(from[start] ? &from[start] : from); + len = strlen(from); + for(start=0;start<len;start++) + { + if(from[start] == '>') + from[start] = 0; + } + return from; +} + +char *find_domain(char *from) +{ + int atsym, len = strlen(from); + + /* Find the from domain */ + for(atsym=0;atsym<len;atsym++) + { + if(from[atsym] == '@') + { + atsym++; + break; + } + } + from = strdup(from[atsym] ? &from[atsym] : from); + len = strlen(from); + for(atsym=0;atsym<len;atsym++) + { + if(from[atsym] == '>') + from[atsym] = 0; + } + return from; +} + +typedef struct _smtpdata { + int messages; + int current; + int status; + int sentlen; + unsigned long datalen; + char *data; + MailFolder *sentmail; +} SMTPData; + +int SMTPIteration(AccountInfo *ai, MailFolder *mf, int controlfd, MailItem *mi, SMTPData *smd) +{ + char controlbuffer[1025] = ""; + static char nexttime[513] = ""; + int z, gah, start, amnt; + + start = 0; + strncpy(controlbuffer, nexttime, 512); + amnt = sockread(controlfd, &controlbuffer[strlen(nexttime)], 512, 0); + if(amnt < 1) + { + dw_window_set_text(stext3, "Unexpected disconnect."); + sockclose(controlfd); + controlfd = 0; + } + else + { + controlbuffer[amnt+strlen(nexttime)] = 0; + nexttime[0] = 0; + gah = strlen(controlbuffer); + for(z=0;z<gah;z++) + { + if(controlbuffer[z] == '\r' || controlbuffer[z] == '\n') + { + char *mystart = &controlbuffer[start]; + + if(controlbuffer[z] == '\r' && controlbuffer[z+1] == '\n') + { + controlbuffer[z] = 0; + controlbuffer[z+1] = 0; + z++; + } + else + controlbuffer[z] = 0; + + if(strlen(&controlbuffer[start]) > 0) + { + if(smd->status == -1 && strncmp(mystart, "220", 3) == 0) + { + /* We got the welcome message, be polite, say "helo" */ + char *from; + + dw_window_set_text(stext3, "Hello..."); + + from = find_domain(mi[smd->current].From); + socksprint(controlfd, vargs(alloca(1024), 1023, "HELO %s\r\n", from)); + free(from); + smd->status++; + } + else if(smd->status == 0 && strncmp(mystart, "250", 3) == 0) + { + char *from; + + /* Done saying hello, let's get a message to send */ + dw_window_set_text(stext3, "From..."); + + from = find_address(mi[smd->current].From); + socksprint(controlfd, vargs(alloca(1024), 1023, "MAIL FROM:<%s>\r\n", from)); + free(from); + smd->status++; + } + else if(smd->status == 1 && strncmp(mystart, "250", 3) == 0) + { + MailParsed *mp = malloc(sizeof(MailParsed)); + + smd->data = plugin_list[ai->Plug].getmail(mi[smd->current].Acc, mi[smd->current].Folder, mi, &smd->datalen); + parse_message(smd->data, smd->datalen, mp); + + /* Our from host was accepted, send recipients */ + dw_window_set_text(stext3, "Recipients..."); + + if(!mp->to[0]) + { + char *to = find_address(mi[smd->current].To); + socksprint(controlfd, vargs(alloca(1024), 1023, "RCPT TO:<%s>\r\n", to)); + free(to); + } + else + { + int n = 0; + + while(mp->to[n] && n < MAX_TO_ADDRESSES) + { + char *to = find_address(mp->to[n]); + socksprint(controlfd, vargs(alloca(1024), 1023, "RCPT TO:<%s>\r\n", to)); + free(to); + n++; + } + } + free(mp); + smd->status++; + } + else if(smd->status == 2 && strncmp(mystart, "250", 3) == 0) + { + /* Our recipients were accepted, send message */ + char textbuf[100]; + + sprintf(textbuf, "Sending message %d of %d...", smd->current+1, smd->messages); + dw_window_set_text(stext3, textbuf); + socksprint(controlfd, "DATA\r\n"); + smd->status++; + } + else if(smd->status == 3 && strncmp(mystart, "250", 3) == 0) + { + /* Do nothing.. probably resulting from multiple + * recipients. ;) + */ + } + else if(smd->status == 3 && strncmp(mystart, "354", 3) == 0) + { + smd->sentlen = 0; + smd->status++; + } + else if(smd->status == 4 && strncmp(mystart, "250", 3) == 0) + { + /* Move messages to sent mail if found */ + if(smd->sentmail) + { + MailItem mailitem; + + memcpy(&mailitem, &mi[smd->current], sizeof(MailItem)); + plugin_list[ai->Plug].newitem(ai->Acc, smd->sentmail, &mailitem); + plugin_list[ai->Plug].newmail(ai->Acc, smd->sentmail, &mailitem, smd->data, smd->datalen); + } + + /* Free the buffer and then delete the message from + * the outbox. + */ + plugin_list[ai->Plug].free(mi[smd->current].Acc, smd->data); + plugin_list[ai->Plug].delitem(mi[smd->current].Acc, mf, &mi[smd->current]); + smd->data = NULL; + smd->datalen = 0; + smd->current++; + smd->status = 0; + if(smd->current >= smd->messages) + { + char textbuf[100]; + + sprintf(textbuf, "%d message%s sent.", smd->messages, smd->messages == 1 ? "" : "s"); + dw_window_set_text(stext3, textbuf); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + } + else + { + char *from; + + /* Done saying hello, let's get a message to send */ + dw_window_set_text(stext3, "From..."); + + from = find_address(mi[smd->current].From); + socksprint(controlfd, vargs(alloca(1024), 1023, "MAIL FROM:<%s>\r\n", from)); + free(from); + smd->status++; + } + } + else + { + /* An unhandled error occurred */ + dw_window_set_text(stext3, "Error sending messages."); + socksprint(controlfd, "QUIT\r\n"); + sockclose(controlfd); + controlfd = 0; + dw_messagebox("DynamicMail Error", DW_MB_OK | DW_MB_ERROR, mystart); + } + } + start = z+1; + } + } + if(strlen(&controlbuffer[start]) > 0) + strncpy(nexttime, &controlbuffer[start], 512); + else + nexttime[0] = 0; + } + return controlfd; +} + +void HandleSMTPSend(AccountInfo *ai, MailFolder *mf, int controlfd) +{ + fd_set readset, writeset; + struct timeval tv = { 5, 0 }, slowtv = { 5, 0 }; + MailItem *mi = plugin_list[ai->Plug].getitems(mf->Acc, mf); + SMTPData smd = {0, 0, -1, 0, 0, NULL, NULL }; + int n = 0; + + /* Find a mailbox to put sent messages */ + while(ai->Folders[n].Name[0]) + { + if(strcmp(ai->Folders[n].Name, "Sent Mail") == 0) + { + smd.sentmail = &ai->Folders[n]; + break; + } + n++; + } + + /* Count how many messages we have to send */ + while(mi[smd.messages].Id) + { + smd.messages++; + } + + FD_ZERO(&readset); + FD_ZERO(&writeset); + FD_SET(controlfd, &readset); + + while(mi && mi[smd.current].Id && controlfd && select(controlfd + 1, &readset, NULL, NULL, &tv) > -1) + { + int amnt; + + if(smd.data && smd.datalen && smd.status == 4 && controlfd && FD_ISSET(controlfd, &writeset)) + { + int tosend = smd.datalen - smd.sentlen; + + if(tosend) + { + /* Send data as we can. */ + amnt = sockwrite(controlfd, &smd.data[smd.sentlen], tosend > 512 ? 512 : tosend, 0); + if(amnt > 0) + smd.sentlen += amnt; + } + else + { + /* Finish the email with <CRLF>.<CRLF> */ + socksprint(controlfd, "\r\n.\r\n"); + } + + } + if(controlfd && FD_ISSET(controlfd, &readset)) + controlfd = SMTPIteration(ai, mf, controlfd, mi, &smd); + + FD_ZERO(&readset); + FD_ZERO(&writeset); + FD_SET(controlfd, &readset); + if(smd.data && smd.datalen) + FD_SET(controlfd, &writeset); + + memcpy(&tv, &slowtv, sizeof(struct timeval)); + } + if(controlfd) + { + dw_window_set_text(stext3, "Unexpected disconnect."); + sockclose(controlfd); + controlfd = 0; + } +} + +void API Mail_Send_Thread(void *data) +{ + AccountInfo *ai = (AccountInfo *)data; + MailFolder *mf = NULL; + + if(!ai || !ai->Folders) + { + dw_messagebox("DynamicMail", DW_MB_OK | DW_MB_ERROR, "Send Mail Thread failed to initialize!"); + return; + } + else + { + int n = 0; + + while(ai->Folders[n].Name[0]) + { + if(strcmp(ai->Folders[n].Name, "Outbox") == 0) + { + mf = &ai->Folders[n]; + break; + } + n++; + } + } + + if(!mf) + return; + + while(ai->Acc) + { + if(dw_event_wait(ai->SendEve, 1000) > 0) + { + /* Send mail! */ + struct hostent *hostnm; + struct sockaddr_in server; + int controlfd = 0, ipaddr = 0; + AccountSettings *set = &ai->Settings; + + dw_event_reset(ai->SendEve); + + dw_window_set_text(stext3, "Connecting..."); + + if(isip(set->SendHostName)) + ipaddr = inet_addr(set->RecvHostName); + else + { + hostnm = gethostbyname(set->SendHostName); + if(!hostnm) + dw_window_set_text(stext3, "Host lookup failed."); + else + ipaddr = *((unsigned long *)hostnm->h_addr); + } + + if(ipaddr && ipaddr != -1) + { + server.sin_family = AF_INET; + server.sin_port = htons(set->SendHostPort); + server.sin_addr.s_addr = ipaddr; + if((controlfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 || connect(controlfd, (struct sockaddr *)&server, sizeof(server))) + { + dw_window_set_text(stext3, "Could not connect."); + controlfd = 0; + } else + { + /* We are connected, wait for the welcome */ + dw_window_set_text(stext3, "Connected."); + nonblock(controlfd); + } + if(controlfd) + { + switch(set->SendHostType) + { + case HOST_TYPE_SMTP: + HandleSMTPSend(ai, mf, controlfd); + break; + default: + dw_window_set_text(stext3, "Unhandled protocol."); + sockclose(controlfd); + } + } + } + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sendrecv.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,7 @@ +#ifndef _SENDRECV_H +#define _SENDRECV_H + +void API Mail_Receive_Thread(void *data); +void API Mail_Send_Thread(void *data); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userent.h Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,12 @@ +#ifndef __USERENT_H__ +#define __USERENT_H__ + +typedef struct _userentry { + HWND window, entryfield; + int page; + char *filename; + void *data, *data2; + HWND *busy; +} UserEntry; + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/winmain.c Fri Jan 21 18:25:00 2011 -0600 @@ -0,0 +1,108 @@ +/* Dynamic Windows stub file to allow Win32 applications + * to use the main() entry point instead of WinMain(). + */ + +#include <windows.h> +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <process.h> + +void Win32_Set_Instance(HINSTANCE hInstance); + +char **_convertargs(int *count, char *start, HINSTANCE DWInstance) +{ + char *tmp, *argstart, **argv; + int loc = 0, inquotes = 0; + + (*count) = 1; + + tmp = start; + + /* Count the number of entries */ + if(*start) + { + (*count)++; + + while(*tmp) + { + if(*tmp == '"' && inquotes) + inquotes = 0; + else if(*tmp == '"' && !inquotes) + inquotes = 1; + else if(*tmp == ' ' && !inquotes) + { + /* Push past any white space */ + while(*(tmp+1) == ' ') + tmp++; + /* If we aren't at the end of the command + * line increment the count. + */ + if(*(tmp+1)) + (*count)++; + } + tmp++; + } + } + + argv = (char **)malloc(sizeof(char *) * ((*count)+1)); + argv[0] = malloc(260); + GetModuleFileName(DWInstance, argv[0], 260); + + argstart = tmp = start; + + if(*start) + { + loc = 1; + + while(*tmp) + { + if(*tmp == '"' && inquotes) + { + *tmp = 0; + inquotes = 0; + } + else if(*tmp == '"' && !inquotes) + { + argstart = tmp+1; + inquotes = 1; + } + else if(*tmp == ' ' && !inquotes) + { + *tmp = 0; + argv[loc] = strdup(argstart); + + /* Push past any white space */ + while(*(tmp+1) == ' ') + tmp++; + + /* Move the start pointer */ + argstart = tmp+1; + + /* If we aren't at the end of the command + * line increment the count. + */ + if(*(tmp+1)) + loc++; + } + tmp++; + } + if(*argstart) + argv[loc] = strdup(argstart); + } + argv[loc+1] = NULL; + return argv; +} + +/* Ok this is a really big hack but what the hell ;) */ +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) +{ + char **argv; + int argc; + + Win32_Set_Instance(hInstance); + + argv = _convertargs(&argc, lpCmdLine, hInstance); + + return main(argc, argv); +}