summaryrefslogtreecommitdiff
path: root/ychat-0.5.3/src
diff options
context:
space:
mode:
Diffstat (limited to 'ychat-0.5.3/src')
-rwxr-xr-xychat-0.5.3/src/Makefile.in15
-rwxr-xr-xychat-0.5.3/src/base.cpp69
-rwxr-xr-xychat-0.5.3/src/base.h71
-rwxr-xr-xychat-0.5.3/src/chat.cpp158
-rwxr-xr-xychat-0.5.3/src/chat.h46
-rwxr-xr-xychat-0.5.3/src/cmnd.cpp17
-rwxr-xr-xychat-0.5.3/src/cmnd.h18
-rwxr-xr-xychat-0.5.3/src/conf.cpp76
-rwxr-xr-xychat-0.5.3/src/conf.h24
-rwxr-xr-xychat-0.5.3/src/configure1555
-rwxr-xr-xychat-0.5.3/src/cont.cpp24
-rwxr-xr-xychat-0.5.3/src/cont.h29
-rwxr-xr-xychat-0.5.3/src/glob.h68
-rw-r--r--ychat-0.5.3/src/hmap.cpp183
-rw-r--r--ychat-0.5.3/src/hmap.h123
-rwxr-xr-xychat-0.5.3/src/html.cpp147
-rwxr-xr-xychat-0.5.3/src/html.h42
-rwxr-xr-xychat-0.5.3/src/incl.h16
-rwxr-xr-xychat-0.5.3/src/lang.cpp79
-rwxr-xr-xychat-0.5.3/src/lang.h24
-rw-r--r--ychat-0.5.3/src/logd.cpp66
-rw-r--r--ychat-0.5.3/src/logd.h25
-rwxr-xr-xychat-0.5.3/src/main.cpp101
-rwxr-xr-xychat-0.5.3/src/modl.cpp104
-rwxr-xr-xychat-0.5.3/src/modl.h29
-rwxr-xr-xychat-0.5.3/src/msgs.h39
-rwxr-xr-xychat-0.5.3/src/mutx.cpp20
-rwxr-xr-xychat-0.5.3/src/mutx.h21
-rwxr-xr-xychat-0.5.3/src/name.cpp31
-rwxr-xr-xychat-0.5.3/src/name.h30
-rwxr-xr-xychat-0.5.3/src/pool.cpp180
-rwxr-xr-xychat-0.5.3/src/pool.h52
-rwxr-xr-xychat-0.5.3/src/reqp.cpp308
-rwxr-xr-xychat-0.5.3/src/reqp.h47
-rwxr-xr-xychat-0.5.3/src/room.cpp16
-rwxr-xr-xychat-0.5.3/src/room.h34
-rw-r--r--ychat-0.5.3/src/s_chat.cpp10
-rw-r--r--ychat-0.5.3/src/s_chat.h27
-rw-r--r--ychat-0.5.3/src/s_conf.cpp10
-rw-r--r--ychat-0.5.3/src/s_conf.h27
-rw-r--r--ychat-0.5.3/src/s_html.cpp10
-rw-r--r--ychat-0.5.3/src/s_html.h27
-rw-r--r--ychat-0.5.3/src/s_lang.cpp10
-rw-r--r--ychat-0.5.3/src/s_lang.h28
-rw-r--r--ychat-0.5.3/src/s_modl.cpp10
-rw-r--r--ychat-0.5.3/src/s_modl.h27
-rw-r--r--ychat-0.5.3/src/s_mutx.cpp10
-rw-r--r--ychat-0.5.3/src/s_mutx.h27
-rw-r--r--ychat-0.5.3/src/s_sman.cpp10
-rw-r--r--ychat-0.5.3/src/s_sman.h27
-rw-r--r--ychat-0.5.3/src/s_sock.cpp10
-rw-r--r--ychat-0.5.3/src/s_sock.h27
-rw-r--r--ychat-0.5.3/src/s_tool.cpp122
-rw-r--r--ychat-0.5.3/src/s_tool.h20
-rw-r--r--ychat-0.5.3/src/sess.cpp39
-rw-r--r--ychat-0.5.3/src/sess.h28
-rw-r--r--ychat-0.5.3/src/sman.cpp49
-rw-r--r--ychat-0.5.3/src/sman.h36
-rwxr-xr-xychat-0.5.3/src/sock.cpp245
-rwxr-xr-xychat-0.5.3/src/sock.h59
-rwxr-xr-xychat-0.5.3/src/thrd.cpp29
-rwxr-xr-xychat-0.5.3/src/thrd.h29
-rwxr-xr-xychat-0.5.3/src/user.cpp173
-rwxr-xr-xychat-0.5.3/src/user.h105
64 files changed, 5118 insertions, 0 deletions
diff --git a/ychat-0.5.3/src/Makefile.in b/ychat-0.5.3/src/Makefile.in
new file mode 100755
index 0000000..779ce5b
--- /dev/null
+++ b/ychat-0.5.3/src/Makefile.in
@@ -0,0 +1,15 @@
+SRCS=chat.cpp s_chat.cpp cmnd.cpp conf.cpp s_conf.cpp cont.cpp html.cpp s_html.cpp lang.cpp s_lang.cpp logd.cpp main.cpp modl.cpp s_modl.cpp mutx.cpp s_mutx.cpp name.cpp pool.cpp reqp.cpp room.cpp sock.cpp s_sock.cpp thrd.cpp s_tool.cpp user.cpp sess.cpp sman.cpp s_sman.cpp
+OBJS=$(SRCS:.cpp=.o)
+CC=g++
+LDFLAGS=@LDFLAGS@ -lstdc++ -g
+LDADD=-pthread -D_THREAD_SAFE
+all: ychat
+$(SRCS):
+ $(CC) $(CFLAGS) -c $*.cpp
+ychat: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDADD)
+ @mv -f ychat ..
+clean:
+ @rm -f Makefile config.log config.cache config.status
+ rm -f ../ychat
+ rm *.o
diff --git a/ychat-0.5.3/src/base.cpp b/ychat-0.5.3/src/base.cpp
new file mode 100755
index 0000000..0d67564
--- /dev/null
+++ b/ychat-0.5.3/src/base.cpp
@@ -0,0 +1,69 @@
+/*
+ This file is part of yChat
+
+ $Author: buetow $
+ $Date: 2005/03/02 12:57:41 $
+
+ $Header: /usr/home/cvs/cvsroot/ychat-0.5/src/base.cpp,v 1.1 2005/03/02 12:57:41 buetow Exp $
+*/
+// template class data implementation;
+
+#ifndef BASE_CPP
+#define BASE_CPP
+
+#include "base.h"
+
+template<class type>
+base<type>::base()
+{
+ map_elem = new hmap<type*,string>(80);
+ pthread_mutex_init (&mut_map_elem, NULL );
+}
+
+template<class type>
+base<type>::~base( )
+{
+ pthread_mutex_destroy( &mut_map_elem );
+}
+
+template<class type>
+void
+base<type>::add_elem( type* p_type )
+{
+ pthread_mutex_lock ( &mut_map_elem );
+ map_elem->add_elem ( p_type, p_type->get_name());
+ pthread_mutex_unlock( &mut_map_elem );
+}
+
+template<class type>
+void
+base<type>::del_elem( string &s_name )
+{
+ pthread_mutex_lock ( &mut_map_elem );
+ map_elem->del_elem ( s_name );
+ pthread_mutex_unlock( &mut_map_elem );
+}
+
+template<class type>
+type*
+base<type>::get_elem( string &s_name, bool &b_found )
+{
+ pthread_mutex_lock ( &mut_map_elem );
+ type* p_type = map_elem->get_elem( s_name );
+ pthread_mutex_unlock( &mut_map_elem );
+
+ b_found = p_type == NULL ? false : true;
+
+ return p_type;
+}
+
+template<class type>
+void
+base<type>::run_func( void (*func)(type*, void*), void* v_arg )
+{
+ pthread_mutex_lock ( &mut_map_elem );
+ map_elem->run_func( func, v_arg );
+ pthread_mutex_unlock( &mut_map_elem );
+}
+
+#endif
diff --git a/ychat-0.5.3/src/base.h b/ychat-0.5.3/src/base.h
new file mode 100755
index 0000000..9ea405d
--- /dev/null
+++ b/ychat-0.5.3/src/base.h
@@ -0,0 +1,71 @@
+// template class data declaration;
+
+#ifndef BASE_H
+#define BASE_H
+
+#include "incl.h"
+#include "hmap.h"
+
+template<class type>
+class base
+{
+private:
+ hmap<type*,string>* map_elem;
+ pthread_mutex_t mut_map_elem;
+
+public:
+ base();
+ ~base();
+
+ virtual void add_elem( type* p_type ); // add a element.
+ virtual void del_elem( string &s_name ); // delete a alement.
+ virtual type* get_elem( string &s_name, bool &b_found ); // get a element.
+
+ // execute func on all elements of map_elem. v_pointer is the argument.
+ virtual void run_func( void (*func)(type*, void*), void* v_arg );
+
+ // chat::msg_post sends to all users of the system a message.
+ // room::msg_post sends to all users of the room a message.
+ // user::msg_post sends to the user a message.
+ void msg_post( string *s_msg )
+ {
+ run_func( &base<type>::msg_post_ , (void*)s_msg );
+ }
+ static void msg_post_( type* type_obj, void* v_arg )
+ {
+ string *p_msg = (string*) v_arg;
+ type_obj -> msg_post( p_msg );
+ }
+
+ void get_data( map_string *p_map_string )
+ {
+ run_func( &base<type>::get_data_ , (void*)p_map_string );
+ }
+ static void get_data_( type* type_obj, void* v_arg )
+ {
+ map_string *map_params = (map_string*) v_arg;
+ type_obj -> get_data ( map_params );
+ }
+
+ // chat::get_user_list gets a list of all users of the system.
+ // room::get_user_list gets a list of all users of the room.
+ // user::get_user_list gets a "list" of a user <font color="usercolor">username</font>seperator
+ void get_user_list( string &s_list, string &s_seperator )
+ {
+
+ container c;
+ c.elem[0] = (void*) &s_list;
+ c.elem[1] = (void*) &s_seperator;
+
+ run_func( &base<type>::get_user_list_, (void*)&c );
+ }
+ static void get_user_list_( type* type_obj, void* v_arg )
+ {
+ container *c = (container*) v_arg;
+ type_obj -> get_user_list( *((string*)c->elem[0]), *((string*)c->elem[1]) );
+ }
+};
+
+#include "base.cpp"
+
+#endif
diff --git a/ychat-0.5.3/src/chat.cpp b/ychat-0.5.3/src/chat.cpp
new file mode 100755
index 0000000..da574c7
--- /dev/null
+++ b/ychat-0.5.3/src/chat.cpp
@@ -0,0 +1,158 @@
+// class chat implementation.
+
+#ifndef s_chat_CXX
+#define s_chat_CXX
+
+#include "chat.h"
+#include "s_conf.h"
+#include "s_mutx.h"
+#include "s_tool.h"
+
+using namespace std;
+
+chat::chat( )
+{
+ if ( s_conf::get
+ ().get_val( "HTML" ) == "OFF" )
+ b_strip_html = true;
+ else
+ b_strip_html = false;
+
+}
+
+chat::~chat( )
+{}
+
+user*
+chat::get_user( string &s_user )
+{
+ bool b_flag;
+ return get_user( s_user, b_flag );
+}
+
+user*
+chat::get_user( string &s_user, bool &b_found )
+{
+ container param;
+
+ param.elem[0] = (void*) &s_user ;
+ param.elem[1] = (void*) &b_found;
+
+ b_found = false;
+
+ run_func( get_user_, (void*)&param );
+
+ if ( *( (bool*)param.elem[1] ) )
+ return (user*)param.elem[2];
+}
+
+void
+chat::get_user_( room *room_obj, void *v_arg )
+{
+ container* param = (container*) v_arg;
+ param->elem[2] = (void*)room_obj->get_elem( *((string*)param->elem[0]), *((bool*)param->elem[1]) );
+}
+
+void
+chat::login( map_string &map_params )
+{
+ string s_user = map_params["nick"];
+
+ // prove if nick is empty:
+ if ( s_user.empty() )
+ {
+ map_params["INFO"] = E_NONICK;
+ map_params["request"] = s_conf::get
+ ().get_val( "STARTMPL" ); // redirect to the startpage.
+ return;
+ }
+
+ // prove if the nick ist alphanumeric:
+ else if ( ! s_tool::is_alpha_numeric( s_user ) )
+ {
+ map_params["INFO"] = E_ALPNUM;
+ map_params["request"] = s_conf::get
+ ().get_val( "STARTMPL" ); // redirect to the startpage.
+ return;
+ }
+
+ bool b_flag;
+
+ // prove if nick is already online / logged in.
+ get_user( s_user, b_flag );
+ if ( b_flag )
+ {
+ map_params["INFO"] = E_ONLINE;
+ map_params["request"] = s_conf::get
+ ().get_val( "STARTMPL" );
+ return;
+ }
+
+ string s_room = map_params["room"];
+ room* p_room = get_room( s_room , b_flag );
+
+ // if room does not exist add room to list!
+ if ( ! b_flag )
+ {
+ p_room = new room( s_room );
+
+#ifdef VERBOSE
+
+ pthread_mutex_lock ( &s_mutx::get
+ ().mut_stdout );
+ cout << NEWROOM << s_room << endl;
+ pthread_mutex_unlock( &s_mutx::get
+ ().mut_stdout );
+#endif
+
+ add_elem( p_room );
+ }
+
+ user *p_user = new user( s_user );
+
+ // add user to the room.
+ p_room->add_user( p_user );
+ sess *ns =s_sman::get
+ ().createSession();
+ ns->setValue(string("nick"), (void *)new string(s_user) );
+ map_params["tmpid"]=ns->getId();
+ // post "username enters the chat" into the room.
+ p_room->msg_post( new string( s_user.append( s_lang::get
+ ().get_val( "USERENTR" ) ) ) );
+
+#ifdef VERBOSE
+
+ pthread_mutex_lock ( &s_mutx::get
+ ().mut_stdout );
+ cout << LOGINPR << s_user << endl;
+ pthread_mutex_unlock( &s_mutx::get
+ ().mut_stdout );
+#endif
+}
+
+void
+chat::post( user* p_user, map_string &map_params )
+{
+
+ string s_msg( map_params["message"] );
+
+ auto unsigned i_pos = s_msg.find( "/" );
+ if ( i_pos == 0 )
+ return p_user->command( s_msg );
+
+ if ( b_strip_html )
+ s_tool::strip_html( &s_msg );
+
+ string s_post( "<font color=\"" );
+
+ s_post.append( p_user->get_col1() )
+ .append( "\">" )
+ .append( p_user->get_name() )
+ .append( ": " )
+ .append( s_msg )
+ .append( "</font><br>\n" );
+
+ p_user->get_p_room()->msg_post( &s_post );
+}
+
+#endif
diff --git a/ychat-0.5.3/src/chat.h b/ychat-0.5.3/src/chat.h
new file mode 100755
index 0000000..f8a6523
--- /dev/null
+++ b/ychat-0.5.3/src/chat.h
@@ -0,0 +1,46 @@
+// class chat declaration.
+
+#ifndef s_chat_H
+#define s_chat_H
+
+#include <vector>
+#include "incl.h"
+#include "base.h"
+#include "room.h"
+#include "user.h"
+#include "sess.h"
+#include "s_lang.h"
+#include "s_sman.h"
+
+using namespace std;
+
+class chat : public base<room>
+{
+private:
+ bool b_strip_html;
+
+public:
+
+
+ room* get_room( string &s_name, bool &b_found )
+ {
+ return static_cast<room*>( get_elem( s_name, b_found ) );
+ }
+
+ // public methods:
+ explicit chat(); // a standard constructor.
+ ~chat(); // destructor.
+
+ // get the object of a specific user.
+ virtual user* get_user( string &s_nick );
+ virtual user* get_user( string &s_nick, bool &b_found );
+ static void get_user_( room* room_obj, void *v_arg );
+
+ // will be called every time a user tries to login.
+ virtual void login( map_string &map_params );
+
+ // will be called if a user posts a message.
+ virtual void post ( user* u_user, map_string &map_params );
+};
+
+#endif
diff --git a/ychat-0.5.3/src/cmnd.cpp b/ychat-0.5.3/src/cmnd.cpp
new file mode 100755
index 0000000..f305f35
--- /dev/null
+++ b/ychat-0.5.3/src/cmnd.cpp
@@ -0,0 +1,17 @@
+// class cmnd implementation.
+
+#ifndef CMND_CXX
+#define CMND_CXX
+
+#include "cmnd.h"
+#include "s_mutx.h"
+
+using namespace std;
+
+cmnd::cmnd( )
+{}
+
+cmnd::~cmnd()
+{}
+
+#endif
diff --git a/ychat-0.5.3/src/cmnd.h b/ychat-0.5.3/src/cmnd.h
new file mode 100755
index 0000000..b5a1d4d
--- /dev/null
+++ b/ychat-0.5.3/src/cmnd.h
@@ -0,0 +1,18 @@
+// class cmnd declaration.
+
+#ifndef CMND_H
+#define CMND_H
+
+#include "incl.h"
+
+using namespace std;
+
+class cmnd
+{
+public:
+ // public methods:
+ explicit cmnd( ); // a standard constructor.
+ ~cmnd( );
+};
+
+#endif
diff --git a/ychat-0.5.3/src/conf.cpp b/ychat-0.5.3/src/conf.cpp
new file mode 100755
index 0000000..14dc199
--- /dev/null
+++ b/ychat-0.5.3/src/conf.cpp
@@ -0,0 +1,76 @@
+// class conf implementation.
+
+#ifndef s_conf_CXX
+#define s_conf_CXX
+
+#include <fstream>
+#include "conf.h"
+
+using namespace std;
+
+conf::conf( string s_conf = CONFILE ) : name( s_conf )
+{
+ parse( ); // parse the config file.
+}
+
+conf::~conf()
+{}
+
+void
+conf::parse()
+{
+#ifdef VERBOSE
+ cout << CFILEOK << get_name() << endl;
+#endif
+
+ ifstream fs_conf( get_name().c_str() );
+
+ if ( ! fs_conf )
+ {
+#ifdef VERBOSE
+ cout << CFILENO << get_name() << endl;
+#endif
+
+ return;
+ }
+
+ char c_buf[READBUF];
+
+ while( fs_conf.getline( c_buf, READBUF ) )
+ {
+ string s_token( c_buf );
+ unsigned int ui_pos = s_token.find( "#", 0 );
+
+ // if line is commented out:
+ if ( ui_pos == 0 )
+ continue;
+
+ ui_pos = s_token.find( ";", 0 );
+
+ // if token has not been found.
+ if ( ui_pos == string::npos )
+ continue;
+
+ s_token = s_token.substr( 0 , --ui_pos );
+ ui_pos = s_token.find ( "\"", 0 );
+
+ if ( ui_pos == string::npos )
+ continue;
+
+ string s_val = s_token.substr( ui_pos+1, s_token.length() );
+ string s_key = s_token.substr( 0 , --ui_pos );
+
+#ifdef VERBOSE2
+
+ cout << s_key << "=" << s_val << endl;
+#endif
+
+ // fill the map.
+ map_vals[s_key] = s_val;
+ }
+
+ fs_conf.close();
+ fs_conf.~ifstream();
+}
+
+#endif
diff --git a/ychat-0.5.3/src/conf.h b/ychat-0.5.3/src/conf.h
new file mode 100755
index 0000000..7d0b807
--- /dev/null
+++ b/ychat-0.5.3/src/conf.h
@@ -0,0 +1,24 @@
+// class conf declaration. this class parses the server config file.
+
+#ifndef s_conf_H
+#define s_conf_H
+
+#include "incl.h"
+#include "cont.h"
+#include "name.h"
+
+using namespace std;
+
+class conf : public cont, name
+{
+private:
+
+public:
+ // public methods:
+ conf ( string s_conf ); // standard constructor.
+ ~conf(); // standard destructor.
+
+ virtual void parse( ); // parses the config file.
+};
+
+#endif
diff --git a/ychat-0.5.3/src/configure b/ychat-0.5.3/src/configure
new file mode 100755
index 0000000..8c5f0a7
--- /dev/null
+++ b/ychat-0.5.3/src/configure
@@ -0,0 +1,1555 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+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'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+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
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # 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 ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$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" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) 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)
+ # 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 << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Dire